[{"data":1,"prerenderedAt":174675},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer":3,"wiki-doc-nav":2131},{"id":4,"title":5,"body":6,"description":41,"extension":2125,"meta":2126,"navigation":615,"path":2127,"seo":2128,"stem":2129,"__hash__":2130},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":8,"toc":2101},"minimark",[9,13,18,22,32,35,64,67,93,96,151,155,158,238,241,262,265,315,318,336,339,355,366,373,377,380,383,420,423,478,483,486,500,510,514,517,543,546,550,563,566,574,577,592,596,599,929,932,945,948,1277,1279,1291,1294,1297,1312,1317,1320,1342,1345,1348,1388,1391,1395,1406,1409,1426,1429,1443,1450,1470,1477,1491,1494,1506,1522,1542,1545,1567,1570,1574,1589,1600,1615,1618,1648,1666,1695,1704,1731,1734,1752,1762,1774,1781,1790,1796,1805,1808,1812,1821,1824,1839,1843,1846,1857,1860,1871,1874,1892,1894,1911,1914,1943,1947,1951,1954,1987,1993,1996,2000,2011,2014,2017,2038,2041,2044,2060,2063,2079,2083,2086,2097],[10,11,5],"h1",{"id":12},"_5viewer-可视化与-renderer-离屏渲染",[14,15,17],"h2",{"id":16},"_1目标说明","1.目标说明",[19,20,21],"p",{},"本章掌握两类可视化方式:",[23,24,25,29],"ol",{},[26,27,28],"li",{},"交互式 viewer: 适合人工观察仿真",[26,30,31],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[19,33,34],{},"使用官方接口:",[36,37,42],"pre",{"className":38,"code":39,"language":40,"meta":41,"style":41},"language-python shiki shiki-themes github-light github-dark","import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n","python","",[43,44,45,58],"code",{"__ignoreMap":41},[46,47,50,54],"span",{"class":48,"line":49},"line",1,[46,51,53],{"class":52},"szBVR","import",[46,55,57],{"class":56},"sVt8B"," mujoco.viewer\n",[46,59,61],{"class":48,"line":60},2,[46,62,63],{"class":56},"mujoco.viewer.launch_passive(model, data)\n",[19,65,66],{},"以及:",[36,68,70],{"className":38,"code":69,"language":40,"meta":41,"style":41},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[43,71,72,83],{"__ignoreMap":41},[46,73,74,77,80],{"class":48,"line":49},[46,75,76],{"class":56},"renderer ",[46,78,79],{"class":52},"=",[46,81,82],{"class":56}," mujoco.Renderer(model)\n",[46,84,85,88,90],{"class":48,"line":60},[46,86,87],{"class":56},"image ",[46,89,79],{"class":52},[46,91,92],{"class":56}," renderer.render()\n",[19,94,95],{},"新手建议先理解二者区别：",[97,98,99,119],"table",{},[100,101,102],"thead",{},[103,104,105,110,113,116],"tr",{},[106,107,109],"th",{"align":108},"left","工具",[106,111,112],{"align":108},"用途",[106,114,115],{"align":108},"是否打开窗口",[106,117,118],{"align":108},"常见场景",[120,121,122,137],"tbody",{},[103,123,124,128,131,134],{},[125,126,127],"td",{"align":108},"Viewer",[125,129,130],{"align":108},"人眼实时观察仿真",[125,132,133],{"align":108},"是",[125,135,136],{"align":108},"调试模型、看控制效果",[103,138,139,142,145,148],{},[125,140,141],{"align":108},"Renderer",[125,143,144],{"align":108},"生成图像数组",[125,146,147],{"align":108},"否",[125,149,150],{"align":108},"保存图片、训练视觉策略、服务器批量采集",[14,152,154],{"id":153},"_2环境与依赖安装","2.环境与依赖安装",[19,156,157],{},"Fedora 44 系统依赖:",[36,159,163],{"className":160,"code":161,"language":162,"meta":41,"style":41},"language-bash shiki shiki-themes github-light github-dark","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","bash",[43,164,165,185,198,209,220],{"__ignoreMap":41},[46,166,167,171,175,178,182],{"class":48,"line":49},[46,168,170],{"class":169},"sScJk","sudo",[46,172,174],{"class":173},"sZZnC"," dnf",[46,176,177],{"class":173}," install",[46,179,181],{"class":180},"sj4cs"," -y",[46,183,184],{"class":180}," \\\n",[46,186,187,190,193,196],{"class":48,"line":60},[46,188,189],{"class":173},"  mesa-libGL",[46,191,192],{"class":173}," mesa-libGLU",[46,194,195],{"class":173}," mesa-dri-drivers",[46,197,184],{"class":180},[46,199,201,204,207],{"class":48,"line":200},3,[46,202,203],{"class":173},"  libglvnd-glx",[46,205,206],{"class":173}," libglvnd-opengl",[46,208,184],{"class":180},[46,210,212,215,218],{"class":48,"line":211},4,[46,213,214],{"class":173},"  glfw",[46,216,217],{"class":173}," glfw-devel",[46,219,184],{"class":180},[46,221,223,226,229,232,235],{"class":48,"line":222},5,[46,224,225],{"class":173},"  libX11",[46,227,228],{"class":173}," libXcursor",[46,230,231],{"class":173}," libXi",[46,233,234],{"class":173}," libXinerama",[46,236,237],{"class":173}," libXrandr\n",[19,239,240],{},"pip:",[36,242,244],{"className":160,"code":243,"language":162,"meta":41,"style":41},"pip install \"mujoco>=2.3\" numpy pillow\n",[43,245,246],{"__ignoreMap":41},[46,247,248,251,253,256,259],{"class":48,"line":49},[46,249,250],{"class":169},"pip",[46,252,177],{"class":173},[46,254,255],{"class":173}," \"mujoco>=2.3\"",[46,257,258],{"class":173}," numpy",[46,260,261],{"class":173}," pillow\n",[19,263,264],{},"conda:",[36,266,268],{"className":160,"code":267,"language":162,"meta":41,"style":41},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[43,269,270,293,303],{"__ignoreMap":41},[46,271,272,275,278,281,284,287,290],{"class":48,"line":49},[46,273,274],{"class":169},"conda",[46,276,277],{"class":173}," create",[46,279,280],{"class":180}," -n",[46,282,283],{"class":173}," mujoco-render",[46,285,286],{"class":173}," python=",[46,288,289],{"class":180},"3.10",[46,291,292],{"class":180}," -y\n",[46,294,295,297,300],{"class":48,"line":60},[46,296,274],{"class":169},[46,298,299],{"class":173}," activate",[46,301,302],{"class":173}," mujoco-render\n",[46,304,305,307,309,311,313],{"class":48,"line":200},[46,306,250],{"class":169},[46,308,177],{"class":173},[46,310,255],{"class":173},[46,312,258],{"class":173},[46,314,261],{"class":173},[19,316,317],{},"离屏渲染后端:",[36,319,321],{"className":160,"code":320,"language":162,"meta":41,"style":41},"export MUJOCO_GL=egl\n",[43,322,323],{"__ignoreMap":41},[46,324,325,328,331,333],{"class":48,"line":49},[46,326,327],{"class":52},"export",[46,329,330],{"class":56}," MUJOCO_GL",[46,332,79],{"class":52},[46,334,335],{"class":56},"egl\n",[19,337,338],{},"或:",[36,340,342],{"className":160,"code":341,"language":162,"meta":41,"style":41},"export MUJOCO_GL=osmesa\n",[43,343,344],{"__ignoreMap":41},[46,345,346,348,350,352],{"class":48,"line":49},[46,347,327],{"class":52},[46,349,330],{"class":56},[46,351,79],{"class":52},[46,353,354],{"class":56},"osmesa\n",[19,356,357,358,361,362,365],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[43,359,360],{},"egl"," 失败，再尝试 ",[43,363,364],{},"osmesa","。",[19,367,368,369,372],{},"如果你在本机桌面环境运行，通常先不要设置 ",[43,370,371],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,374,376],{"id":375},"_3核心概念解释","3.核心概念解释",[19,378,379],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[19,381,382],{},"典型 viewer 流程:",[36,384,386],{"className":38,"code":385,"language":40,"meta":41,"style":41},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[43,387,388,402,410,415],{"__ignoreMap":41},[46,389,390,393,396,399],{"class":48,"line":49},[46,391,392],{"class":52},"with",[46,394,395],{"class":56}," mujoco.viewer.launch_passive(model, data) ",[46,397,398],{"class":52},"as",[46,400,401],{"class":56}," viewer:\n",[46,403,404,407],{"class":48,"line":60},[46,405,406],{"class":52},"    while",[46,408,409],{"class":56}," viewer.is_running():\n",[46,411,412],{"class":48,"line":200},[46,413,414],{"class":56},"        mujoco.mj_step(model, data)\n",[46,416,417],{"class":48,"line":211},[46,418,419],{"class":56},"        viewer.sync()\n",[19,421,422],{},"典型 renderer 流程:",[36,424,426],{"className":38,"code":425,"language":40,"meta":41,"style":41},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[43,427,428,460,465,470],{"__ignoreMap":41},[46,429,430,432,434,437,441,443,446,449,452,454,457],{"class":48,"line":49},[46,431,76],{"class":56},[46,433,79],{"class":52},[46,435,436],{"class":56}," mujoco.Renderer(model, ",[46,438,440],{"class":439},"s4XuR","height",[46,442,79],{"class":52},[46,444,445],{"class":180},"480",[46,447,448],{"class":56},", ",[46,450,451],{"class":439},"width",[46,453,79],{"class":52},[46,455,456],{"class":180},"640",[46,458,459],{"class":56},")\n",[46,461,462],{"class":48,"line":60},[46,463,464],{"class":56},"mujoco.mj_step(model, data)\n",[46,466,467],{"class":48,"line":200},[46,468,469],{"class":56},"renderer.update_scene(data)\n",[46,471,472,474,476],{"class":48,"line":211},[46,473,87],{"class":56},[46,475,79],{"class":52},[46,477,92],{"class":56},[479,480,482],"h3",{"id":481},"viewer-的同步逻辑","viewer 的同步逻辑",[19,484,485],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[36,487,489],{"className":38,"code":488,"language":40,"meta":41,"style":41},"mujoco.mj_step(model, data)\nviewer.sync()\n",[43,490,491,495],{"__ignoreMap":41},[46,492,493],{"class":48,"line":49},[46,494,464],{"class":56},[46,496,497],{"class":48,"line":60},[46,498,499],{"class":56},"viewer.sync()\n",[19,501,502,505,506,509],{},[43,503,504],{},"mj_step"," 负责算物理，",[43,507,508],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[479,511,513],{"id":512},"为什么要-sleep","为什么要 sleep",[19,515,516],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[36,518,520],{"className":38,"code":519,"language":40,"meta":41,"style":41},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[43,521,522],{"__ignoreMap":41},[46,523,524,527,529,532,535,538,540],{"class":48,"line":49},[46,525,526],{"class":56},"sleep_time ",[46,528,79],{"class":52},[46,530,531],{"class":56}," model.opt.timestep ",[46,533,534],{"class":52},"-",[46,536,537],{"class":56}," (time.time() ",[46,539,534],{"class":52},[46,541,542],{"class":56}," step_start)\n",[19,544,545],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[479,547,549],{"id":548},"renderer-输出是什么","renderer 输出是什么",[36,551,553],{"className":38,"code":552,"language":40,"meta":41,"style":41},"image = renderer.render()\n",[43,554,555],{"__ignoreMap":41},[46,556,557,559,561],{"class":48,"line":49},[46,558,87],{"class":56},[46,560,79],{"class":52},[46,562,92],{"class":56},[19,564,565],{},"得到的是 NumPy 数组，形状通常是：",[36,567,572],{"className":568,"code":570,"language":571,"meta":41},[569],"language-text","(height, width, 3)\n","text",[43,573,570],{"__ignoreMap":41},[19,575,576],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[36,578,580],{"className":38,"code":579,"language":40,"meta":41,"style":41},"Image.fromarray(image).save(\"render_output.png\")\n",[43,581,582],{"__ignoreMap":41},[46,583,584,587,590],{"class":48,"line":49},[46,585,586],{"class":56},"Image.fromarray(image).save(",[46,588,589],{"class":173},"\"render_output.png\"",[46,591,459],{"class":56},[14,593,595],{"id":594},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[19,597,598],{},"交互式 Viewer:",[36,600,602],{"className":38,"code":601,"language":40,"meta":41,"style":41},"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",[43,603,604,611,617,624,630,634,639,651,657,663,668,674,680,686,691,697,703,709,715,721,727,733,738,743,761,776,787,792,804,827,838,844,850,855,873,890,896,901,906,923],{"__ignoreMap":41},[46,605,606,608],{"class":48,"line":49},[46,607,53],{"class":52},[46,609,610],{"class":56}," time\n",[46,612,613],{"class":48,"line":60},[46,614,616],{"emptyLinePlaceholder":615},true,"\n",[46,618,619,621],{"class":48,"line":200},[46,620,53],{"class":52},[46,622,623],{"class":56}," mujoco\n",[46,625,626,628],{"class":48,"line":211},[46,627,53],{"class":52},[46,629,57],{"class":56},[46,631,632],{"class":48,"line":222},[46,633,616],{"emptyLinePlaceholder":615},[46,635,637],{"class":48,"line":636},6,[46,638,616],{"emptyLinePlaceholder":615},[46,640,642,645,648],{"class":48,"line":641},7,[46,643,644],{"class":180},"XML",[46,646,647],{"class":52}," =",[46,649,650],{"class":173}," \"\"\"\n",[46,652,654],{"class":48,"line":653},8,[46,655,656],{"class":173},"\u003Cmujoco model=\"viewer_demo\">\n",[46,658,660],{"class":48,"line":659},9,[46,661,662],{"class":173},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[46,664,666],{"class":48,"line":665},10,[46,667,616],{"emptyLinePlaceholder":615},[46,669,671],{"class":48,"line":670},11,[46,672,673],{"class":173},"  \u003Cworldbody>\n",[46,675,677],{"class":48,"line":676},12,[46,678,679],{"class":173},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[46,681,683],{"class":48,"line":682},13,[46,684,685],{"class":173},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[46,687,689],{"class":48,"line":688},14,[46,690,616],{"emptyLinePlaceholder":615},[46,692,694],{"class":48,"line":693},15,[46,695,696],{"class":173},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[46,698,700],{"class":48,"line":699},16,[46,701,702],{"class":173},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[46,704,706],{"class":48,"line":705},17,[46,707,708],{"class":173},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[46,710,712],{"class":48,"line":711},18,[46,713,714],{"class":173},"    \u003C\u002Fbody>\n",[46,716,718],{"class":48,"line":717},19,[46,719,720],{"class":173},"  \u003C\u002Fworldbody>\n",[46,722,724],{"class":48,"line":723},20,[46,725,726],{"class":173},"\u003C\u002Fmujoco>\n",[46,728,730],{"class":48,"line":729},21,[46,731,732],{"class":173},"\"\"\"\n",[46,734,736],{"class":48,"line":735},22,[46,737,616],{"emptyLinePlaceholder":615},[46,739,741],{"class":48,"line":740},23,[46,742,616],{"emptyLinePlaceholder":615},[46,744,746,749,752,755,758],{"class":48,"line":745},24,[46,747,748],{"class":52},"def",[46,750,751],{"class":169}," main",[46,753,754],{"class":56},"() -> ",[46,756,757],{"class":180},"None",[46,759,760],{"class":56},":\n",[46,762,764,767,769,772,774],{"class":48,"line":763},25,[46,765,766],{"class":56},"    model ",[46,768,79],{"class":52},[46,770,771],{"class":56}," mujoco.MjModel.from_xml_string(",[46,773,644],{"class":180},[46,775,459],{"class":56},[46,777,779,782,784],{"class":48,"line":778},26,[46,780,781],{"class":56},"    data ",[46,783,79],{"class":52},[46,785,786],{"class":56}," mujoco.MjData(model)\n",[46,788,790],{"class":48,"line":789},27,[46,791,616],{"emptyLinePlaceholder":615},[46,793,795,798,800,802],{"class":48,"line":794},28,[46,796,797],{"class":52},"    with",[46,799,395],{"class":56},[46,801,398],{"class":52},[46,803,401],{"class":56},[46,805,807,810,813,816,819,822,825],{"class":48,"line":806},29,[46,808,809],{"class":52},"        while",[46,811,812],{"class":56}," viewer.is_running() ",[46,814,815],{"class":52},"and",[46,817,818],{"class":56}," data.time ",[46,820,821],{"class":52},"\u003C",[46,823,824],{"class":180}," 5.0",[46,826,760],{"class":56},[46,828,830,833,835],{"class":48,"line":829},30,[46,831,832],{"class":56},"            step_start ",[46,834,79],{"class":52},[46,836,837],{"class":56}," time.time()\n",[46,839,841],{"class":48,"line":840},31,[46,842,843],{"class":56},"            mujoco.mj_step(model, data)\n",[46,845,847],{"class":48,"line":846},32,[46,848,849],{"class":56},"            viewer.sync()\n",[46,851,853],{"class":48,"line":852},33,[46,854,616],{"emptyLinePlaceholder":615},[46,856,858,861,863,865,867,869,871],{"class":48,"line":857},34,[46,859,860],{"class":56},"            sleep_time ",[46,862,79],{"class":52},[46,864,531],{"class":56},[46,866,534],{"class":52},[46,868,537],{"class":56},[46,870,534],{"class":52},[46,872,542],{"class":56},[46,874,876,879,882,885,888],{"class":48,"line":875},35,[46,877,878],{"class":52},"            if",[46,880,881],{"class":56}," sleep_time ",[46,883,884],{"class":52},">",[46,886,887],{"class":180}," 0",[46,889,760],{"class":56},[46,891,893],{"class":48,"line":892},36,[46,894,895],{"class":56},"                time.sleep(sleep_time)\n",[46,897,899],{"class":48,"line":898},37,[46,900,616],{"emptyLinePlaceholder":615},[46,902,904],{"class":48,"line":903},38,[46,905,616],{"emptyLinePlaceholder":615},[46,907,909,912,915,918,921],{"class":48,"line":908},39,[46,910,911],{"class":52},"if",[46,913,914],{"class":180}," __name__",[46,916,917],{"class":52}," ==",[46,919,920],{"class":173}," \"__main__\"",[46,922,760],{"class":56},[46,924,926],{"class":48,"line":925},40,[46,927,928],{"class":56},"    main()\n",[19,930,931],{},"保存为：",[36,933,935],{"className":160,"code":934,"language":162,"meta":41,"style":41},"touch ch5_viewer.py\n",[43,936,937],{"__ignoreMap":41},[46,938,939,942],{"class":48,"line":49},[46,940,941],{"class":169},"touch",[46,943,944],{"class":173}," ch5_viewer.py\n",[19,946,947],{},"离屏 Renderer 保存图片:",[36,949,951],{"className":38,"code":950,"language":40,"meta":41,"style":41},"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",[43,952,953,966,970,976,989,993,997,1005,1010,1014,1018,1022,1026,1031,1035,1039,1043,1047,1051,1055,1059,1063,1067,1071,1075,1087,1099,1107,1132,1136,1159,1163,1167,1182,1191,1195,1209,1214,1219,1223,1236,1249,1254,1259,1272],{"__ignoreMap":41},[46,954,955,958,961,963],{"class":48,"line":49},[46,956,957],{"class":52},"from",[46,959,960],{"class":56}," pathlib ",[46,962,53],{"class":52},[46,964,965],{"class":56}," Path\n",[46,967,968],{"class":48,"line":60},[46,969,616],{"emptyLinePlaceholder":615},[46,971,972,974],{"class":48,"line":200},[46,973,53],{"class":52},[46,975,623],{"class":56},[46,977,978,980,983,986],{"class":48,"line":211},[46,979,957],{"class":52},[46,981,982],{"class":180}," PIL",[46,984,985],{"class":52}," import",[46,987,988],{"class":56}," Image\n",[46,990,991],{"class":48,"line":222},[46,992,616],{"emptyLinePlaceholder":615},[46,994,995],{"class":48,"line":636},[46,996,616],{"emptyLinePlaceholder":615},[46,998,999,1001,1003],{"class":48,"line":641},[46,1000,644],{"class":180},[46,1002,647],{"class":52},[46,1004,650],{"class":173},[46,1006,1007],{"class":48,"line":653},[46,1008,1009],{"class":173},"\u003Cmujoco model=\"renderer_demo\">\n",[46,1011,1012],{"class":48,"line":659},[46,1013,662],{"class":173},[46,1015,1016],{"class":48,"line":665},[46,1017,616],{"emptyLinePlaceholder":615},[46,1019,1020],{"class":48,"line":670},[46,1021,673],{"class":173},[46,1023,1024],{"class":48,"line":676},[46,1025,679],{"class":173},[46,1027,1028],{"class":48,"line":682},[46,1029,1030],{"class":173},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[46,1032,1033],{"class":48,"line":688},[46,1034,685],{"class":173},[46,1036,1037],{"class":48,"line":693},[46,1038,616],{"emptyLinePlaceholder":615},[46,1040,1041],{"class":48,"line":699},[46,1042,696],{"class":173},[46,1044,1045],{"class":48,"line":705},[46,1046,702],{"class":173},[46,1048,1049],{"class":48,"line":711},[46,1050,708],{"class":173},[46,1052,1053],{"class":48,"line":717},[46,1054,714],{"class":173},[46,1056,1057],{"class":48,"line":723},[46,1058,720],{"class":173},[46,1060,1061],{"class":48,"line":729},[46,1062,726],{"class":173},[46,1064,1065],{"class":48,"line":735},[46,1066,732],{"class":173},[46,1068,1069],{"class":48,"line":740},[46,1070,616],{"emptyLinePlaceholder":615},[46,1072,1073],{"class":48,"line":745},[46,1074,616],{"emptyLinePlaceholder":615},[46,1076,1077,1079,1081,1083,1085],{"class":48,"line":763},[46,1078,748],{"class":52},[46,1080,751],{"class":169},[46,1082,754],{"class":56},[46,1084,757],{"class":180},[46,1086,760],{"class":56},[46,1088,1089,1091,1093,1095,1097],{"class":48,"line":778},[46,1090,766],{"class":56},[46,1092,79],{"class":52},[46,1094,771],{"class":56},[46,1096,644],{"class":180},[46,1098,459],{"class":56},[46,1100,1101,1103,1105],{"class":48,"line":789},[46,1102,781],{"class":56},[46,1104,79],{"class":52},[46,1106,786],{"class":56},[46,1108,1109,1112,1114,1116,1118,1120,1122,1124,1126,1128,1130],{"class":48,"line":794},[46,1110,1111],{"class":56},"    renderer ",[46,1113,79],{"class":52},[46,1115,436],{"class":56},[46,1117,440],{"class":439},[46,1119,79],{"class":52},[46,1121,445],{"class":180},[46,1123,448],{"class":56},[46,1125,451],{"class":439},[46,1127,79],{"class":52},[46,1129,456],{"class":180},[46,1131,459],{"class":56},[46,1133,1134],{"class":48,"line":806},[46,1135,616],{"emptyLinePlaceholder":615},[46,1137,1138,1141,1144,1147,1150,1153,1156],{"class":48,"line":829},[46,1139,1140],{"class":52},"    for",[46,1142,1143],{"class":56}," _ ",[46,1145,1146],{"class":52},"in",[46,1148,1149],{"class":180}," range",[46,1151,1152],{"class":56},"(",[46,1154,1155],{"class":180},"100",[46,1157,1158],{"class":56},"):\n",[46,1160,1161],{"class":48,"line":840},[46,1162,414],{"class":56},[46,1164,1165],{"class":48,"line":846},[46,1166,616],{"emptyLinePlaceholder":615},[46,1168,1169,1172,1175,1177,1180],{"class":48,"line":852},[46,1170,1171],{"class":56},"    renderer.update_scene(data, ",[46,1173,1174],{"class":439},"camera",[46,1176,79],{"class":52},[46,1178,1179],{"class":173},"\"fixed_camera\"",[46,1181,459],{"class":56},[46,1183,1184,1187,1189],{"class":48,"line":857},[46,1185,1186],{"class":56},"    image ",[46,1188,79],{"class":52},[46,1190,92],{"class":56},[46,1192,1193],{"class":48,"line":875},[46,1194,616],{"emptyLinePlaceholder":615},[46,1196,1197,1200,1202,1205,1207],{"class":48,"line":892},[46,1198,1199],{"class":56},"    output_path ",[46,1201,79],{"class":52},[46,1203,1204],{"class":56}," Path(",[46,1206,589],{"class":173},[46,1208,459],{"class":56},[46,1210,1211],{"class":48,"line":898},[46,1212,1213],{"class":56},"    Image.fromarray(image).save(output_path)\n",[46,1215,1216],{"class":48,"line":903},[46,1217,1218],{"class":56},"    renderer.close()\n",[46,1220,1221],{"class":48,"line":908},[46,1222,616],{"emptyLinePlaceholder":615},[46,1224,1225,1228,1230,1233],{"class":48,"line":925},[46,1226,1227],{"class":180},"    print",[46,1229,1152],{"class":56},[46,1231,1232],{"class":173},"\"saved:\"",[46,1234,1235],{"class":56},", output_path.resolve())\n",[46,1237,1239,1241,1243,1246],{"class":48,"line":1238},41,[46,1240,1227],{"class":180},[46,1242,1152],{"class":56},[46,1244,1245],{"class":173},"\"image shape:\"",[46,1247,1248],{"class":56},", image.shape)\n",[46,1250,1252],{"class":48,"line":1251},42,[46,1253,616],{"emptyLinePlaceholder":615},[46,1255,1257],{"class":48,"line":1256},43,[46,1258,616],{"emptyLinePlaceholder":615},[46,1260,1262,1264,1266,1268,1270],{"class":48,"line":1261},44,[46,1263,911],{"class":52},[46,1265,914],{"class":180},[46,1267,917],{"class":52},[46,1269,920],{"class":173},[46,1271,760],{"class":56},[46,1273,1275],{"class":48,"line":1274},45,[46,1276,928],{"class":56},[19,1278,931],{},[36,1280,1282],{"className":160,"code":1281,"language":162,"meta":41,"style":41},"touch ch5_renderer.py\n",[43,1283,1284],{"__ignoreMap":41},[46,1285,1286,1288],{"class":48,"line":49},[46,1287,941],{"class":169},[46,1289,1290],{"class":173}," ch5_renderer.py\n",[479,1292,1293],{"id":1293},"代码逐段解释",[19,1295,1296],{},"viewer 上下文：",[36,1298,1300],{"className":38,"code":1299,"language":40,"meta":41,"style":41},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[43,1301,1302],{"__ignoreMap":41},[46,1303,1304,1306,1308,1310],{"class":48,"line":49},[46,1305,392],{"class":52},[46,1307,395],{"class":56},[46,1309,398],{"class":52},[46,1311,401],{"class":56},[19,1313,1314,1316],{},[43,1315,392],{}," 语句会创建窗口，并在退出时自动清理资源。",[19,1318,1319],{},"窗口循环：",[36,1321,1323],{"className":38,"code":1322,"language":40,"meta":41,"style":41},"while viewer.is_running() and data.time \u003C 5.0:\n",[43,1324,1325],{"__ignoreMap":41},[46,1326,1327,1330,1332,1334,1336,1338,1340],{"class":48,"line":49},[46,1328,1329],{"class":52},"while",[46,1331,812],{"class":56},[46,1333,815],{"class":52},[46,1335,818],{"class":56},[46,1337,821],{"class":52},[46,1339,824],{"class":180},[46,1341,760],{"class":56},[19,1343,1344],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[19,1346,1347],{},"固定相机：",[36,1349,1353],{"className":1350,"code":1351,"language":1352,"meta":41,"style":41},"language-xml shiki shiki-themes github-light github-dark","\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n","xml",[43,1354,1355],{"__ignoreMap":41},[46,1356,1357,1359,1362,1365,1367,1369,1372,1374,1377,1380,1382,1385],{"class":48,"line":49},[46,1358,821],{"class":56},[46,1360,1174],{"class":1361},"s9eBZ",[46,1363,1364],{"class":169}," name",[46,1366,79],{"class":56},[46,1368,1179],{"class":173},[46,1370,1371],{"class":169}," pos",[46,1373,79],{"class":56},[46,1375,1376],{"class":173},"\"1.5 -2.0 1.2\"",[46,1378,1379],{"class":169}," xyaxes",[46,1381,79],{"class":56},[46,1383,1384],{"class":173},"\"1 0.75 0 0 0 1\"",[46,1386,1387],{"class":56},"\u002F>\n",[19,1389,1390],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[479,1392,1394],{"id":1393},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[36,1396,1398],{"className":38,"code":1397,"language":40,"meta":41,"style":41},"import time\n",[43,1399,1400],{"__ignoreMap":41},[46,1401,1402,1404],{"class":48,"line":49},[46,1403,53],{"class":52},[46,1405,610],{"class":56},[19,1407,1408],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[36,1410,1412],{"className":38,"code":1411,"language":40,"meta":41,"style":41},"import mujoco\nimport mujoco.viewer\n",[43,1413,1414,1420],{"__ignoreMap":41},[46,1415,1416,1418],{"class":48,"line":49},[46,1417,53],{"class":52},[46,1419,623],{"class":56},[46,1421,1422,1424],{"class":48,"line":60},[46,1423,53],{"class":52},[46,1425,57],{"class":56},[19,1427,1428],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[36,1430,1431],{"className":38,"code":1299,"language":40,"meta":41,"style":41},[43,1432,1433],{"__ignoreMap":41},[46,1434,1435,1437,1439,1441],{"class":48,"line":49},[46,1436,392],{"class":52},[46,1438,395],{"class":56},[46,1440,398],{"class":52},[46,1442,401],{"class":56},[19,1444,1445,1446,1449],{},"打开一个 viewer 窗口。",[43,1447,1448],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[36,1451,1452],{"className":38,"code":1322,"language":40,"meta":41,"style":41},[43,1453,1454],{"__ignoreMap":41},[46,1455,1456,1458,1460,1462,1464,1466,1468],{"class":48,"line":49},[46,1457,1329],{"class":52},[46,1459,812],{"class":56},[46,1461,815],{"class":52},[46,1463,818],{"class":56},[46,1465,821],{"class":52},[46,1467,824],{"class":180},[46,1469,760],{"class":56},[19,1471,1472,1473,1476],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[43,1474,1475],{},"viewer.is_running()"," 会变成 false，循环结束。",[36,1478,1480],{"className":38,"code":1479,"language":40,"meta":41,"style":41},"step_start = time.time()\n",[43,1481,1482],{"__ignoreMap":41},[46,1483,1484,1487,1489],{"class":48,"line":49},[46,1485,1486],{"class":56},"step_start ",[46,1488,79],{"class":52},[46,1490,837],{"class":56},[19,1492,1493],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[36,1495,1496],{"className":38,"code":488,"language":40,"meta":41,"style":41},[43,1497,1498,1502],{"__ignoreMap":41},[46,1499,1500],{"class":48,"line":49},[46,1501,464],{"class":56},[46,1503,1504],{"class":48,"line":60},[46,1505,499],{"class":56},[19,1507,1508,1510,1511,1513,1514,1517,1518,1521],{},[43,1509,504],{}," 推进物理仿真。",[43,1512,508],{}," 把最新的 ",[43,1515,1516],{},"data"," 同步到窗口里显示。没有 ",[43,1519,1520],{},"sync()","，窗口可能看不到最新状态。",[36,1523,1524],{"className":38,"code":519,"language":40,"meta":41,"style":41},[43,1525,1526],{"__ignoreMap":41},[46,1527,1528,1530,1532,1534,1536,1538,1540],{"class":48,"line":49},[46,1529,526],{"class":56},[46,1531,79],{"class":52},[46,1533,531],{"class":56},[46,1535,534],{"class":52},[46,1537,537],{"class":56},[46,1539,534],{"class":52},[46,1541,542],{"class":56},[19,1543,1544],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[36,1546,1548],{"className":38,"code":1547,"language":40,"meta":41,"style":41},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[43,1549,1550,1562],{"__ignoreMap":41},[46,1551,1552,1554,1556,1558,1560],{"class":48,"line":49},[46,1553,911],{"class":52},[46,1555,881],{"class":56},[46,1557,884],{"class":52},[46,1559,887],{"class":180},[46,1561,760],{"class":56},[46,1563,1564],{"class":48,"line":60},[46,1565,1566],{"class":56},"    time.sleep(sleep_time)\n",[19,1568,1569],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[479,1571,1573],{"id":1572},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[36,1575,1577],{"className":38,"code":1576,"language":40,"meta":41,"style":41},"from pathlib import Path\n",[43,1578,1579],{"__ignoreMap":41},[46,1580,1581,1583,1585,1587],{"class":48,"line":49},[46,1582,957],{"class":52},[46,1584,960],{"class":56},[46,1586,53],{"class":52},[46,1588,965],{"class":56},[19,1590,1591,1592,1595,1596,1599],{},"导入 ",[43,1593,1594],{},"Path","，用来处理文件路径。相比直接写字符串，",[43,1597,1598],{},"Path(\"render_output.png\")"," 更清晰。",[36,1601,1603],{"className":38,"code":1602,"language":40,"meta":41,"style":41},"from PIL import Image\n",[43,1604,1605],{"__ignoreMap":41},[46,1606,1607,1609,1611,1613],{"class":48,"line":49},[46,1608,957],{"class":52},[46,1610,982],{"class":180},[46,1612,985],{"class":52},[46,1614,988],{"class":56},[19,1616,1617],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[36,1619,1620],{"className":1350,"code":1351,"language":1352,"meta":41,"style":41},[43,1621,1622],{"__ignoreMap":41},[46,1623,1624,1626,1628,1630,1632,1634,1636,1638,1640,1642,1644,1646],{"class":48,"line":49},[46,1625,821],{"class":56},[46,1627,1174],{"class":1361},[46,1629,1364],{"class":169},[46,1631,79],{"class":56},[46,1633,1179],{"class":173},[46,1635,1371],{"class":169},[46,1637,79],{"class":56},[46,1639,1376],{"class":173},[46,1641,1379],{"class":169},[46,1643,79],{"class":56},[46,1645,1384],{"class":173},[46,1647,1387],{"class":56},[19,1649,1650,1651,1654,1655,1658,1659,1662,1663,1665],{},"定义一个相机。",[43,1652,1653],{},"name"," 是相机名字。",[43,1656,1657],{},"pos"," 是相机在世界里的位置。",[43,1660,1661],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[43,1664,1657],{}," 来调视角。",[36,1667,1669],{"className":38,"code":1668,"language":40,"meta":41,"style":41},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[43,1670,1671],{"__ignoreMap":41},[46,1672,1673,1675,1677,1679,1681,1683,1685,1687,1689,1691,1693],{"class":48,"line":49},[46,1674,76],{"class":56},[46,1676,79],{"class":52},[46,1678,436],{"class":56},[46,1680,440],{"class":439},[46,1682,79],{"class":52},[46,1684,445],{"class":180},[46,1686,448],{"class":56},[46,1688,451],{"class":439},[46,1690,79],{"class":52},[46,1692,456],{"class":180},[46,1694,459],{"class":56},[19,1696,1697,1698,1700,1701,1703],{},"创建离屏渲染器。",[43,1699,440],{}," 和 ",[43,1702,451],{}," 决定输出图片大小。",[36,1705,1707],{"className":38,"code":1706,"language":40,"meta":41,"style":41},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[43,1708,1709,1726],{"__ignoreMap":41},[46,1710,1711,1714,1716,1718,1720,1722,1724],{"class":48,"line":49},[46,1712,1713],{"class":52},"for",[46,1715,1143],{"class":56},[46,1717,1146],{"class":52},[46,1719,1149],{"class":180},[46,1721,1152],{"class":56},[46,1723,1155],{"class":180},[46,1725,1158],{"class":56},[46,1727,1728],{"class":48,"line":60},[46,1729,1730],{"class":56},"    mujoco.mj_step(model, data)\n",[19,1732,1733],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[36,1735,1737],{"className":38,"code":1736,"language":40,"meta":41,"style":41},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[43,1738,1739],{"__ignoreMap":41},[46,1740,1741,1744,1746,1748,1750],{"class":48,"line":49},[46,1742,1743],{"class":56},"renderer.update_scene(data, ",[46,1745,1174],{"class":439},[46,1747,79],{"class":52},[46,1749,1179],{"class":173},[46,1751,459],{"class":56},[19,1753,1754,1755,1757,1758,1761],{},"告诉 renderer：用当前 ",[43,1756,1516],{}," 的状态更新画面，并使用名为 ",[43,1759,1760],{},"fixed_camera"," 的相机视角。",[36,1763,1764],{"className":38,"code":552,"language":40,"meta":41,"style":41},[43,1765,1766],{"__ignoreMap":41},[46,1767,1768,1770,1772],{"class":48,"line":49},[46,1769,87],{"class":56},[46,1771,79],{"class":52},[46,1773,92],{"class":56},[19,1775,1776,1777,1780],{},"真正渲染出图像。",[43,1778,1779],{},"image"," 是一个 NumPy 数组，不是文件。",[36,1782,1784],{"className":38,"code":1783,"language":40,"meta":41,"style":41},"Image.fromarray(image).save(output_path)\n",[43,1785,1786],{"__ignoreMap":41},[46,1787,1788],{"class":48,"line":49},[46,1789,1783],{"class":56},[19,1791,1792,1793,365],{},"把数组转换成图片，并保存到 ",[43,1794,1795],{},"render_output.png",[36,1797,1799],{"className":38,"code":1798,"language":40,"meta":41,"style":41},"renderer.close()\n",[43,1800,1801],{"__ignoreMap":41},[46,1802,1803],{"class":48,"line":49},[46,1804,1798],{"class":56},[19,1806,1807],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,1809,1811],{"id":1810},"_5运行结果说明","5.运行结果说明",[19,1813,1814,1815,1817,1818,365],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[43,1816,1795],{},"，并输出图像数组形状，例如 ",[43,1819,1820],{},"(480, 640, 3)",[19,1822,1823],{},"如果图片里看不到方块，先检查：",[23,1825,1826,1829,1832],{},[26,1827,1828],{},"方块是否掉到相机视野外。",[26,1830,1831],{},"camera 位置是否合理。",[26,1833,1834,1835,1838],{},"是否在 ",[43,1836,1837],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,1840,1842],{"id":1841},"_6验证步骤","6.验证步骤",[19,1844,1845],{},"运行 viewer:",[36,1847,1849],{"className":160,"code":1848,"language":162,"meta":41,"style":41},"python ch5_viewer.py\n",[43,1850,1851],{"__ignoreMap":41},[46,1852,1853,1855],{"class":48,"line":49},[46,1854,40],{"class":169},[46,1856,944],{"class":173},[19,1858,1859],{},"运行 renderer:",[36,1861,1863],{"className":160,"code":1862,"language":162,"meta":41,"style":41},"python ch5_renderer.py\n",[43,1864,1865],{"__ignoreMap":41},[46,1866,1867,1869],{"class":48,"line":49},[46,1868,40],{"class":169},[46,1870,1290],{"class":173},[19,1872,1873],{},"如果在服务器上运行:",[36,1875,1877],{"className":160,"code":1876,"language":162,"meta":41,"style":41},"MUJOCO_GL=egl python ch5_renderer.py\n",[43,1878,1879],{"__ignoreMap":41},[46,1880,1881,1883,1885,1887,1890],{"class":48,"line":49},[46,1882,371],{"class":56},[46,1884,79],{"class":52},[46,1886,360],{"class":173},[46,1888,1889],{"class":169}," python",[46,1891,1290],{"class":173},[19,1893,338],{},[36,1895,1897],{"className":160,"code":1896,"language":162,"meta":41,"style":41},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[43,1898,1899],{"__ignoreMap":41},[46,1900,1901,1903,1905,1907,1909],{"class":48,"line":49},[46,1902,371],{"class":56},[46,1904,79],{"class":52},[46,1906,364],{"class":173},[46,1908,1889],{"class":169},[46,1910,1290],{"class":173},[19,1912,1913],{},"再做几个练习：",[23,1915,1916,1923,1926,1932],{},[26,1917,1918,1919,1922],{},"把 renderer 分辨率改成 ",[43,1920,1921],{},"height=240, width=320","，观察输出 shape。",[26,1924,1925],{},"把方块颜色改成蓝色，重新保存图片。",[26,1927,1928,1929,1931],{},"把相机 ",[43,1930,1657],{}," 改远一点，观察画面中物体是否变小。",[26,1933,1934,1935,1938,1939,1942],{},"把 viewer 示例中的 ",[43,1936,1937],{},"data.time \u003C 5.0"," 改成 ",[43,1940,1941],{},"data.time \u003C 20.0","，观察更长时间。",[14,1944,1946],{"id":1945},"_7常见错误与解决方案","7.常见错误与解决方案",[479,1948,1950],{"id":1949},"viewer-窗口打不开","viewer 窗口打不开",[19,1952,1953],{},"安装:",[36,1955,1957],{"className":160,"code":1956,"language":162,"meta":41,"style":41},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[43,1958,1959],{"__ignoreMap":41},[46,1960,1961,1963,1965,1967,1969,1972,1974,1977,1979,1982,1984],{"class":48,"line":49},[46,1962,170],{"class":169},[46,1964,174],{"class":173},[46,1966,177],{"class":173},[46,1968,181],{"class":180},[46,1970,1971],{"class":173}," glfw",[46,1973,217],{"class":173},[46,1975,1976],{"class":173}," libX11",[46,1978,231],{"class":173},[46,1980,1981],{"class":173}," libXrandr",[46,1983,228],{"class":173},[46,1985,1986],{"class":173}," libXinerama\n",[479,1988,1990],{"id":1989},"glfwerror",[43,1991,1992],{},"GLFWError",[19,1994,1995],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[479,1997,1999],{"id":1998},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[19,2001,2002,2003,2006,2007,2010],{},"尝试 ",[43,2004,2005],{},"MUJOCO_GL=egl"," 或 ",[43,2008,2009],{},"MUJOCO_GL=osmesa","。可能存在版本差异。",[479,2012,2013],{"id":2013},"保存图片是黑的",[19,2015,2016],{},"检查：",[23,2018,2019,2022,2025,2035],{},[26,2020,2021],{},"XML 里是否有 light。",[26,2023,2024],{},"相机是否对着模型。",[26,2026,2027,2028,2031,2032,365],{},"是否先 ",[43,2029,2030],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[43,2033,2034],{},"renderer.render()",[26,2036,2037],{},"物体是否已经掉出视野。",[479,2039,2040],{"id":2040},"远程服务器没有显示器",[19,2042,2043],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[36,2045,2046],{"className":160,"code":1876,"language":162,"meta":41,"style":41},[43,2047,2048],{"__ignoreMap":41},[46,2049,2050,2052,2054,2056,2058],{"class":48,"line":49},[46,2051,371],{"class":56},[46,2053,79],{"class":52},[46,2055,360],{"class":173},[46,2057,1889],{"class":169},[46,2059,1290],{"class":173},[19,2061,2062],{},"如果 EGL 不可用，再尝试：",[36,2064,2065],{"className":160,"code":1896,"language":162,"meta":41,"style":41},[43,2066,2067],{"__ignoreMap":41},[46,2068,2069,2071,2073,2075,2077],{"class":48,"line":49},[46,2070,371],{"class":56},[46,2072,79],{"class":52},[46,2074,364],{"class":173},[46,2076,1889],{"class":169},[46,2078,1290],{"class":173},[14,2080,2082],{"id":2081},"_8本章小结","8.本章小结",[19,2084,2085],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[23,2087,2088,2091,2094],{},[26,2089,2090],{},"先用 viewer 看模型和控制是否正常。",[26,2092,2093],{},"再用 renderer 保存图片或构造视觉观测。",[26,2095,2096],{},"最后把状态、动作、图像、奖励组织成训练数据。",[2098,2099,2100],"style",{},"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":41,"searchDepth":60,"depth":60,"links":2102},[2103,2104,2105,2110,2115,2116,2117,2124],{"id":16,"depth":60,"text":17},{"id":153,"depth":60,"text":154},{"id":375,"depth":60,"text":376,"children":2106},[2107,2108,2109],{"id":481,"depth":200,"text":482},{"id":512,"depth":200,"text":513},{"id":548,"depth":200,"text":549},{"id":594,"depth":60,"text":595,"children":2111},[2112,2113,2114],{"id":1293,"depth":200,"text":1293},{"id":1393,"depth":200,"text":1394},{"id":1572,"depth":200,"text":1573},{"id":1810,"depth":60,"text":1811},{"id":1841,"depth":60,"text":1842},{"id":1945,"depth":60,"text":1946,"children":2118},[2119,2120,2121,2122,2123],{"id":1949,"depth":200,"text":1950},{"id":1989,"depth":200,"text":1992},{"id":1998,"depth":200,"text":1999},{"id":2013,"depth":200,"text":2013},{"id":2040,"depth":200,"text":2040},{"id":2081,"depth":60,"text":2082},"md",{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":5,"description":41},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",[2132,7178,8283,9703,12683,14034,15522,16610,25372,25385,25979,26005,26129,26370,26435,26453,26466,26513,26636,26804,27001,27179,27384,27520,27615,27652,27665,27975,28713,29421,29442,30461,32091,32242,32255,32267,32563,52361,52376,52393,52426,55295,78643,94786,94807,94920,95041,95811,96474,96835,96873,96979,97079,97122,97148,97209,98861,98962,98987,99478,99978,101058,101341,102083,102585,102597,104544,106204,107704,109402,111062,112981,115003,118473,118905,119368,120117,123061,123409,123431,123787,127094,127106,127509,127532,127679,127846,128051,128352,128909,129566,131497,133095,133744,135238,136669,137904,139598,141350,143760,143876,144811,145022,145907,147142,147370,147383,148538,150950,153318,156639,159116,160760,162537,164550,167602,169782,172309,174503],{"id":2133,"title":2134,"body":2135,"description":41,"extension":2125,"meta":7173,"navigation":615,"path":7174,"seo":7175,"stem":7176,"__hash__":7177},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":2136,"toc":7145},[2137,2140,2144,2147,2151,2162,2166,2170,2173,2176,2179,2182,2185,2211,2215,2218,2221,2224,2227,2278,2282,2300,2302,2316,2319,2327,2330,3183,3190,3207,3211,3297,3301,3307,3393,3397,3435,3439,3503,3507,3511,3518,3529,3533,3538,3542,3547,3551,3556,3560,3564,3569,3819,3824,3962,3967,4222,4225,4233,4237,4242,4344,4347,4645,4654,4755,4758,4761,4764,4767,5027,5032,5171,5174,5352,5355,5483,5486,5638,5642,5647,5650,5661,5669,5672,5778,5782,5786,5791,5841,5846,5851,5875,5880,5933,5936,5941,6117,6122,6407,6412,6808,6812,6817,6874,6879,6887,6890,7030,7033,7142],[10,2138,2134],{"id":2139},"_1基础入门",[14,2141,2143],{"id":2142},"_11注释","1.1注释",[19,2145,2146],{},"\u002F\u002F或者\u002F* *\u002F",[14,2148,2150],{"id":2149},"_12命名","1.2命名",[23,2152,2153,2156,2159],{},[26,2154,2155],{},"字母数字下划线",[26,2157,2158],{},"开头必须是字母或_",[26,2160,2161],{},"不能使用关键词",[14,2163,2165],{"id":2164},"_13数据类型","1.3数据类型",[479,2167,2169],{"id":2168},"_131整形","1.3.1整形",[19,2171,2172],{},"short 短整形 2",[19,2174,2175],{},"int 整形 4",[19,2177,2178],{},"long 长整形 win4 linux32位4 linux64位8",[19,2180,2181],{},"long long 长长整形 8",[19,2183,2184],{},"利用sizeof可以求数据类型占用的内存空间大小",[36,2186,2190],{"className":2187,"code":2188,"language":2189,"meta":41,"style":41},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[43,2191,2192,2204],{"__ignoreMap":41},[46,2193,2194,2197,2199,2202],{"class":48,"line":49},[46,2195,2196],{"class":52},"sizeof",[46,2198,1152],{"class":56},[46,2200,2201],{"class":52},"int",[46,2203,459],{"class":56},[46,2205,2206,2208],{"class":48,"line":60},[46,2207,2196],{"class":52},[46,2209,2210],{"class":56},"(num)\n",[479,2212,2214],{"id":2213},"_132浮点型","1.3.2浮点型",[19,2216,2217],{},"float 单精度 4节 7位有效数字",[19,2219,2220],{},"double 双精度 8节 15-16有效数字",[19,2222,2223],{},"默认情况下，输出一个小数，会显示6位有效数字",[19,2225,2226],{},"注意点：",[36,2228,2230],{"className":2187,"code":2229,"language":2189,"meta":41,"style":41},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[43,2231,2232,2255],{"__ignoreMap":41},[46,2233,2234,2237,2240,2242,2245,2248,2251],{"class":48,"line":49},[46,2235,2236],{"class":52},"float",[46,2238,2239],{"class":56}," f1",[46,2241,79],{"class":52},[46,2243,2244],{"class":180},"3.14",[46,2246,2247],{"class":52},"f",[46,2249,2250],{"class":56},";",[46,2252,2254],{"class":2253},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[46,2256,2257,2259,2262,2264,2267,2270,2273,2275],{"class":48,"line":60},[46,2258,2236],{"class":52},[46,2260,2261],{"class":56}," f2",[46,2263,79],{"class":52},[46,2265,2266],{"class":180},"3",[46,2268,2269],{"class":52},"e",[46,2271,2272],{"class":180},"2",[46,2274,2250],{"class":56},[46,2276,2277],{"class":2253}," \u002F\u002F科学记数法\n",[479,2279,2281],{"id":2280},"_133字符型","1.3.3字符型",[36,2283,2285],{"className":2187,"code":2284,"language":2189,"meta":41,"style":41},"char ch='a'\n",[43,2286,2287],{"__ignoreMap":41},[46,2288,2289,2292,2295,2297],{"class":48,"line":49},[46,2290,2291],{"class":52},"char",[46,2293,2294],{"class":56}," ch",[46,2296,79],{"class":52},[46,2298,2299],{"class":173},"'a'\n",[19,2301,2226],{},[23,2303,2304,2307,2310,2313],{},[26,2305,2306],{},"在显示字符型变量时，只能单引号，双引号x",[26,2308,2309],{},"单引号内只能一个字符，不能字符串",[26,2311,2312],{},"c和c++字符型变量只占用一个字符",[26,2314,2315],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[19,2317,2318],{},"ASCII码大致由以下两部分组成：",[23,2320,2321,2324],{},[26,2322,2323],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[26,2325,2326],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[19,2328,2329],{},"ASCII码表格：",[97,2331,2332,2373],{},[100,2333,2334],{},[103,2335,2336,2343,2348,2352,2357,2361,2365,2369],{},[106,2337,2338,2342],{},[2339,2340,2341],"strong",{},"ASCII","值",[106,2344,2345],{},[2339,2346,2347],{},"控制字符",[106,2349,2350,2342],{},[2339,2351,2341],{},[106,2353,2354],{},[2339,2355,2356],{},"字符",[106,2358,2359,2342],{},[2339,2360,2341],{},[106,2362,2363],{},[2339,2364,2356],{},[106,2366,2367,2342],{},[2339,2368,2341],{},[106,2370,2371],{},[2339,2372,2356],{},[120,2374,2375,2401,2427,2452,2477,2502,2527,2552,2578,2603,2629,2655,2681,2706,2731,2757,2783,2807,2832,2857,2882,2907,2932,2957,2982,3007,3032,3058,3083,3107,3132,3157],{},[103,2376,2377,2380,2383,2386,2389,2392,2395,2398],{},[125,2378,2379],{},"0",[125,2381,2382],{},"NUT",[125,2384,2385],{},"32",[125,2387,2388],{},"(space)",[125,2390,2391],{},"64",[125,2393,2394],{},"@",[125,2396,2397],{},"96",[125,2399,2400],{},"、",[103,2402,2403,2406,2409,2412,2415,2418,2421,2424],{},[125,2404,2405],{},"1",[125,2407,2408],{},"SOH",[125,2410,2411],{},"33",[125,2413,2414],{},"!",[125,2416,2417],{},"65",[125,2419,2420],{},"A",[125,2422,2423],{},"97",[125,2425,2426],{},"a",[103,2428,2429,2431,2434,2437,2440,2443,2446,2449],{},[125,2430,2272],{},[125,2432,2433],{},"STX",[125,2435,2436],{},"34",[125,2438,2439],{},"\"",[125,2441,2442],{},"66",[125,2444,2445],{},"B",[125,2447,2448],{},"98",[125,2450,2451],{},"b",[103,2453,2454,2456,2459,2462,2465,2468,2471,2474],{},[125,2455,2266],{},[125,2457,2458],{},"ETX",[125,2460,2461],{},"35",[125,2463,2464],{},"#",[125,2466,2467],{},"67",[125,2469,2470],{},"C",[125,2472,2473],{},"99",[125,2475,2476],{},"c",[103,2478,2479,2482,2485,2488,2491,2494,2497,2499],{},[125,2480,2481],{},"4",[125,2483,2484],{},"EOT",[125,2486,2487],{},"36",[125,2489,2490],{},"$",[125,2492,2493],{},"68",[125,2495,2496],{},"D",[125,2498,1155],{},[125,2500,2501],{},"d",[103,2503,2504,2507,2510,2513,2516,2519,2522,2525],{},[125,2505,2506],{},"5",[125,2508,2509],{},"ENQ",[125,2511,2512],{},"37",[125,2514,2515],{},"%",[125,2517,2518],{},"69",[125,2520,2521],{},"E",[125,2523,2524],{},"101",[125,2526,2269],{},[103,2528,2529,2532,2535,2538,2541,2544,2547,2550],{},[125,2530,2531],{},"6",[125,2533,2534],{},"ACK",[125,2536,2537],{},"38",[125,2539,2540],{},"&",[125,2542,2543],{},"70",[125,2545,2546],{},"F",[125,2548,2549],{},"102",[125,2551,2247],{},[103,2553,2554,2557,2560,2563,2566,2569,2572,2575],{},[125,2555,2556],{},"7",[125,2558,2559],{},"BEL",[125,2561,2562],{},"39",[125,2564,2565],{},",",[125,2567,2568],{},"71",[125,2570,2571],{},"G",[125,2573,2574],{},"103",[125,2576,2577],{},"g",[103,2579,2580,2583,2586,2589,2591,2594,2597,2600],{},[125,2581,2582],{},"8",[125,2584,2585],{},"BS",[125,2587,2588],{},"40",[125,2590,1152],{},[125,2592,2593],{},"72",[125,2595,2596],{},"H",[125,2598,2599],{},"104",[125,2601,2602],{},"h",[103,2604,2605,2608,2611,2614,2617,2620,2623,2626],{},[125,2606,2607],{},"9",[125,2609,2610],{},"HT",[125,2612,2613],{},"41",[125,2615,2616],{},")",[125,2618,2619],{},"73",[125,2621,2622],{},"I",[125,2624,2625],{},"105",[125,2627,2628],{},"i",[103,2630,2631,2634,2637,2640,2643,2646,2649,2652],{},[125,2632,2633],{},"10",[125,2635,2636],{},"LF",[125,2638,2639],{},"42",[125,2641,2642],{},"*",[125,2644,2645],{},"74",[125,2647,2648],{},"J",[125,2650,2651],{},"106",[125,2653,2654],{},"j",[103,2656,2657,2660,2663,2666,2669,2672,2675,2678],{},[125,2658,2659],{},"11",[125,2661,2662],{},"VT",[125,2664,2665],{},"43",[125,2667,2668],{},"+",[125,2670,2671],{},"75",[125,2673,2674],{},"K",[125,2676,2677],{},"107",[125,2679,2680],{},"k",[103,2682,2683,2686,2689,2692,2694,2697,2700,2703],{},[125,2684,2685],{},"12",[125,2687,2688],{},"FF",[125,2690,2691],{},"44",[125,2693,2565],{},[125,2695,2696],{},"76",[125,2698,2699],{},"L",[125,2701,2702],{},"108",[125,2704,2705],{},"l",[103,2707,2708,2711,2714,2717,2719,2722,2725,2728],{},[125,2709,2710],{},"13",[125,2712,2713],{},"CR",[125,2715,2716],{},"45",[125,2718,534],{},[125,2720,2721],{},"77",[125,2723,2724],{},"M",[125,2726,2727],{},"109",[125,2729,2730],{},"m",[103,2732,2733,2736,2739,2742,2745,2748,2751,2754],{},[125,2734,2735],{},"14",[125,2737,2738],{},"SO",[125,2740,2741],{},"46",[125,2743,2744],{},".",[125,2746,2747],{},"78",[125,2749,2750],{},"N",[125,2752,2753],{},"110",[125,2755,2756],{},"n",[103,2758,2759,2762,2765,2768,2771,2774,2777,2780],{},[125,2760,2761],{},"15",[125,2763,2764],{},"SI",[125,2766,2767],{},"47",[125,2769,2770],{},"\u002F",[125,2772,2773],{},"79",[125,2775,2776],{},"O",[125,2778,2779],{},"111",[125,2781,2782],{},"o",[103,2784,2785,2788,2791,2794,2796,2799,2802,2805],{},[125,2786,2787],{},"16",[125,2789,2790],{},"DLE",[125,2792,2793],{},"48",[125,2795,2379],{},[125,2797,2798],{},"80",[125,2800,2801],{},"P",[125,2803,2804],{},"112",[125,2806,19],{},[103,2808,2809,2812,2815,2818,2820,2823,2826,2829],{},[125,2810,2811],{},"17",[125,2813,2814],{},"DCI",[125,2816,2817],{},"49",[125,2819,2405],{},[125,2821,2822],{},"81",[125,2824,2825],{},"Q",[125,2827,2828],{},"113",[125,2830,2831],{},"q",[103,2833,2834,2837,2840,2843,2845,2848,2851,2854],{},[125,2835,2836],{},"18",[125,2838,2839],{},"DC2",[125,2841,2842],{},"50",[125,2844,2272],{},[125,2846,2847],{},"82",[125,2849,2850],{},"R",[125,2852,2853],{},"114",[125,2855,2856],{},"r",[103,2858,2859,2862,2865,2868,2870,2873,2876,2879],{},[125,2860,2861],{},"19",[125,2863,2864],{},"DC3",[125,2866,2867],{},"51",[125,2869,2266],{},[125,2871,2872],{},"83",[125,2874,2875],{},"S",[125,2877,2878],{},"115",[125,2880,2881],{},"s",[103,2883,2884,2887,2890,2893,2895,2898,2901,2904],{},[125,2885,2886],{},"20",[125,2888,2889],{},"DC4",[125,2891,2892],{},"52",[125,2894,2481],{},[125,2896,2897],{},"84",[125,2899,2900],{},"T",[125,2902,2903],{},"116",[125,2905,2906],{},"t",[103,2908,2909,2912,2915,2918,2920,2923,2926,2929],{},[125,2910,2911],{},"21",[125,2913,2914],{},"NAK",[125,2916,2917],{},"53",[125,2919,2506],{},[125,2921,2922],{},"85",[125,2924,2925],{},"U",[125,2927,2928],{},"117",[125,2930,2931],{},"u",[103,2933,2934,2937,2940,2943,2945,2948,2951,2954],{},[125,2935,2936],{},"22",[125,2938,2939],{},"SYN",[125,2941,2942],{},"54",[125,2944,2531],{},[125,2946,2947],{},"86",[125,2949,2950],{},"V",[125,2952,2953],{},"118",[125,2955,2956],{},"v",[103,2958,2959,2962,2965,2968,2970,2973,2976,2979],{},[125,2960,2961],{},"23",[125,2963,2964],{},"TB",[125,2966,2967],{},"55",[125,2969,2556],{},[125,2971,2972],{},"87",[125,2974,2975],{},"W",[125,2977,2978],{},"119",[125,2980,2981],{},"w",[103,2983,2984,2987,2990,2993,2995,2998,3001,3004],{},[125,2985,2986],{},"24",[125,2988,2989],{},"CAN",[125,2991,2992],{},"56",[125,2994,2582],{},[125,2996,2997],{},"88",[125,2999,3000],{},"X",[125,3002,3003],{},"120",[125,3005,3006],{},"x",[103,3008,3009,3012,3015,3018,3020,3023,3026,3029],{},[125,3010,3011],{},"25",[125,3013,3014],{},"EM",[125,3016,3017],{},"57",[125,3019,2607],{},[125,3021,3022],{},"89",[125,3024,3025],{},"Y",[125,3027,3028],{},"121",[125,3030,3031],{},"y",[103,3033,3034,3037,3040,3043,3046,3049,3052,3055],{},[125,3035,3036],{},"26",[125,3038,3039],{},"SUB",[125,3041,3042],{},"58",[125,3044,3045],{},":",[125,3047,3048],{},"90",[125,3050,3051],{},"Z",[125,3053,3054],{},"122",[125,3056,3057],{},"z",[103,3059,3060,3063,3066,3069,3071,3074,3077,3080],{},[125,3061,3062],{},"27",[125,3064,3065],{},"ESC",[125,3067,3068],{},"59",[125,3070,2250],{},[125,3072,3073],{},"91",[125,3075,3076],{},"[",[125,3078,3079],{},"123",[125,3081,3082],{},"{",[103,3084,3085,3088,3091,3094,3096,3099,3101,3104],{},[125,3086,3087],{},"28",[125,3089,3090],{},"FS",[125,3092,3093],{},"60",[125,3095,821],{},[125,3097,3098],{},"92",[125,3100,2770],{},[125,3102,3103],{},"124",[125,3105,3106],{},"|",[103,3108,3109,3112,3115,3118,3120,3123,3126,3129],{},[125,3110,3111],{},"29",[125,3113,3114],{},"GS",[125,3116,3117],{},"61",[125,3119,79],{},[125,3121,3122],{},"93",[125,3124,3125],{},"]",[125,3127,3128],{},"125",[125,3130,3131],{},"}",[103,3133,3134,3137,3140,3143,3145,3148,3151,3154],{},[125,3135,3136],{},"30",[125,3138,3139],{},"RS",[125,3141,3142],{},"62",[125,3144,884],{},[125,3146,3147],{},"94",[125,3149,3150],{},"^",[125,3152,3153],{},"126",[125,3155,3156],{},"`",[103,3158,3159,3162,3165,3168,3171,3174,3177,3180],{},[125,3160,3161],{},"31",[125,3163,3164],{},"US",[125,3166,3167],{},"63",[125,3169,3170],{},"?",[125,3172,3173],{},"95",[125,3175,3176],{},"_",[125,3178,3179],{},"127",[125,3181,3182],{},"DEL",[19,3184,3185,3186,3189],{},"ASCII 码大致由以下",[2339,3187,3188],{},"两部分组","成：",[3191,3192,3193,3200],"ul",{},[26,3194,3195,3196,3199],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[2339,3197,3198],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[26,3201,3202,3203,3206],{},"ASCII 打印字符：数字 ",[2339,3204,3205],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[479,3208,3210],{"id":3209},"_134转义字符","1.3.4转义字符",[36,3212,3214],{"className":2187,"code":3213,"language":2189,"meta":41,"style":41},"\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",[43,3215,3216,3221,3237,3251,3256,3269,3274],{"__ignoreMap":41},[46,3217,3218],{"class":48,"line":49},[46,3219,3220],{"class":2253},"\u002F\u002F换行符\n",[46,3222,3223,3226,3229,3232,3234],{"class":48,"line":60},[46,3224,3225],{"class":56},"cout ",[46,3227,3228],{"class":52},"\u003C\u003C",[46,3230,3231],{"class":173},"\"hello world\u002Fn\"",[46,3233,2250],{"class":56},[46,3235,3236],{"class":2253}," \u002F\u002F就等同于如下：\n",[46,3238,3239,3241,3243,3246,3248],{"class":48,"line":200},[46,3240,3225],{"class":56},[46,3242,3228],{"class":52},[46,3244,3245],{"class":173},"\"hello world\"",[46,3247,3228],{"class":52},[46,3249,3250],{"class":56},"endl;\n",[46,3252,3253],{"class":48,"line":211},[46,3254,3255],{"class":2253},"\u002F\u002F反斜杠\n",[46,3257,3258,3260,3262,3265,3267],{"class":48,"line":222},[46,3259,3225],{"class":56},[46,3261,3228],{"class":52},[46,3263,3264],{"class":173},"\"\u002F\u002F\"",[46,3266,3228],{"class":52},[46,3268,3250],{"class":56},[46,3270,3271],{"class":48,"line":636},[46,3272,3273],{"class":2253},"\u002F\u002F水平制表符\n",[46,3275,3276,3278,3280,3283,3286,3289,3291,3294],{"class":48,"line":641},[46,3277,3225],{"class":56},[46,3279,3228],{"class":52},[46,3281,3282],{"class":173},"\"aaaa",[46,3284,3285],{"class":180},"\\t",[46,3287,3288],{"class":173},"helloworld\"",[46,3290,3228],{"class":52},[46,3292,3293],{"class":56},"endl;",[46,3295,3296],{"class":2253}," \u002F\u002F输出窗口时有对齐效果\n",[479,3298,3300],{"id":3299},"_135字符串型","1.3.5字符串型",[19,3302,3303,3304,3306],{},"char 变量名",[46,3305],{},"=\"字符串值\"",[36,3308,3310],{"className":2187,"code":3309,"language":2189,"meta":41,"style":41},"\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",[43,3311,3312,3317,3322,3327,3332,3346,3359,3364,3369,3380],{"__ignoreMap":41},[46,3313,3314],{"class":48,"line":49},[46,3315,3316],{"class":2253},"\u002F\u002Fc风格字符串\n",[46,3318,3319],{"class":48,"line":60},[46,3320,3321],{"class":2253},"\u002F\u002F注意事项：\n",[46,3323,3324],{"class":48,"line":200},[46,3325,3326],{"class":2253},"\u002F\u002F1.char字符串名[]\n",[46,3328,3329],{"class":48,"line":211},[46,3330,3331],{"class":2253},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[46,3333,3334,3336,3339,3341,3343],{"class":48,"line":222},[46,3335,2291],{"class":52},[46,3337,3338],{"class":56}," str[]",[46,3340,79],{"class":52},[46,3342,3245],{"class":173},[46,3344,3345],{"class":56},";\n",[46,3347,3348,3350,3352,3355,3357],{"class":48,"line":636},[46,3349,3225],{"class":56},[46,3351,3228],{"class":52},[46,3353,3354],{"class":56},"str",[46,3356,3228],{"class":52},[46,3358,3250],{"class":56},[46,3360,3361],{"class":48,"line":641},[46,3362,3363],{"class":2253},"\u002F\u002Fc++风格字符串\n",[46,3365,3366],{"class":48,"line":653},[46,3367,3368],{"class":2253},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[46,3370,3371,3374,3376,3378],{"class":48,"line":659},[46,3372,3373],{"class":56},"string str2",[46,3375,79],{"class":52},[46,3377,3245],{"class":173},[46,3379,3345],{"class":56},[46,3381,3382,3384,3386,3389,3391],{"class":48,"line":665},[46,3383,3225],{"class":56},[46,3385,3228],{"class":52},[46,3387,3388],{"class":56},"str2",[46,3390,3228],{"class":52},[46,3392,3250],{"class":56},[479,3394,3396],{"id":3395},"_136布尔类型bool","1.3.6布尔类型bool",[36,3398,3400],{"className":2187,"code":3399,"language":2189,"meta":41,"style":41},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[43,3401,3402,3417],{"__ignoreMap":41},[46,3403,3404,3407,3410,3412,3415],{"class":48,"line":49},[46,3405,3406],{"class":52},"bool",[46,3408,3409],{"class":56}," flag",[46,3411,79],{"class":52},[46,3413,3414],{"class":180},"true",[46,3416,3345],{"class":56},[46,3418,3419,3422,3425,3428,3430,3432],{"class":48,"line":60},[46,3420,3421],{"class":56},"cout",[46,3423,3424],{"class":52},"\u003C\u003Csizeof",[46,3426,3427],{"class":56},"(flag)",[46,3429,3228],{"class":52},[46,3431,3293],{"class":56},[46,3433,3434],{"class":2253}," \u002F\u002F查看布尔占内存空间\n",[14,3436,3438],{"id":3437},"_14键盘输入cin","1.4键盘输入cin",[36,3440,3442],{"className":2187,"code":3441,"language":2189,"meta":41,"style":41},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[43,3443,3444,3457,3474,3485],{"__ignoreMap":41},[46,3445,3446,3448,3451,3453,3455],{"class":48,"line":49},[46,3447,2201],{"class":52},[46,3449,3450],{"class":56}," a",[46,3452,79],{"class":52},[46,3454,2379],{"class":180},[46,3456,3345],{"class":56},[46,3458,3459,3461,3463,3466,3468,3470,3472],{"class":48,"line":60},[46,3460,3421],{"class":56},[46,3462,3228],{"class":52},[46,3464,3465],{"class":173},"\"请给整型变量a赋值\"",[46,3467,3228],{"class":52},[46,3469,2426],{"class":56},[46,3471,3228],{"class":52},[46,3473,3250],{"class":56},[46,3475,3476,3479,3482],{"class":48,"line":200},[46,3477,3478],{"class":56},"cin ",[46,3480,3481],{"class":52},">>",[46,3483,3484],{"class":56}," a;\n",[46,3486,3487,3489,3491,3494,3497,3499,3501],{"class":48,"line":211},[46,3488,3225],{"class":56},[46,3490,3228],{"class":52},[46,3492,3493],{"class":173}," \"整型变量a=\"",[46,3495,3496],{"class":52}," \u003C\u003C",[46,3498,2426],{"class":56},[46,3500,3228],{"class":52},[46,3502,3250],{"class":56},[14,3504,3506],{"id":3505},"_15运算符","1.5运算符",[479,3508,3510],{"id":3509},"_151算术运算符","1.5.1算术运算符",[19,3512,3513,3517],{},[3514,3515],"img",{"alt":41,"src":3516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[23,3519,3520,3523,3526],{},[26,3521,3522],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[26,3524,3525],{},"两个小数不可以做取模运算",[26,3527,3528],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[479,3530,3532],{"id":3531},"_152赋值运算符","1.5.2赋值运算符",[19,3534,3535],{},[3514,3536],{"alt":41,"src":3537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[479,3539,3541],{"id":3540},"_153比较运算符","1.5.3比较运算符",[19,3543,3544],{},[3514,3545],{"alt":41,"src":3546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[479,3548,3550],{"id":3549},"_154逻辑运算符","1.5.4逻辑运算符",[19,3552,3553],{},[3514,3554],{"alt":41,"src":3555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,3557,3559],{"id":3558},"_16程序流程结构","1.6程序流程结构",[479,3561,3563],{"id":3562},"_161选择结构","1.6.1选择结构",[23,3565,3566],{},[26,3567,3568],{},"if语句\n单行、多行、多条件if语句",[36,3570,3572],{"className":2187,"code":3571,"language":2189,"meta":41,"style":41},"\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",[43,3573,3574,3579,3593,3598,3612,3617,3622,3631,3644,3648,3661,3665,3670,3674,3687,3691,3696,3716,3720,3733,3737,3765,3769,3785,3789,3793,3797,3810,3814],{"__ignoreMap":41},[46,3575,3576],{"class":48,"line":49},[46,3577,3578],{"class":2253},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[46,3580,3581,3583,3586,3588,3591],{"class":48,"line":60},[46,3582,911],{"class":52},[46,3584,3585],{"class":56},"(score",[46,3587,884],{"class":52},[46,3589,3590],{"class":180},"600",[46,3592,459],{"class":56},[46,3594,3595],{"class":48,"line":200},[46,3596,3597],{"class":56},"{\n",[46,3599,3600,3603,3605,3608,3610],{"class":48,"line":211},[46,3601,3602],{"class":56},"    cout",[46,3604,3228],{"class":52},[46,3606,3607],{"class":173},"'这是单行if语句'",[46,3609,3228],{"class":52},[46,3611,3250],{"class":56},[46,3613,3614],{"class":48,"line":222},[46,3615,3616],{"class":56},"}\n",[46,3618,3619],{"class":48,"line":636},[46,3620,3621],{"class":2253},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[46,3623,3624,3626,3628],{"class":48,"line":641},[46,3625,3478],{"class":56},[46,3627,3481],{"class":52},[46,3629,3630],{"class":56}," score\n",[46,3632,3633,3635,3637,3640,3642],{"class":48,"line":653},[46,3634,911],{"class":52},[46,3636,3585],{"class":56},[46,3638,3639],{"class":52},"\u003C=",[46,3641,3590],{"class":180},[46,3643,459],{"class":56},[46,3645,3646],{"class":48,"line":659},[46,3647,3597],{"class":56},[46,3649,3650,3652,3654,3657,3659],{"class":48,"line":665},[46,3651,3602],{"class":56},[46,3653,3481],{"class":52},[46,3655,3656],{"class":173},"\"小于等于600\"",[46,3658,3228],{"class":52},[46,3660,3250],{"class":56},[46,3662,3663],{"class":48,"line":670},[46,3664,3616],{"class":56},[46,3666,3667],{"class":48,"line":676},[46,3668,3669],{"class":52},"else\n",[46,3671,3672],{"class":48,"line":682},[46,3673,3597],{"class":56},[46,3675,3676,3678,3680,3683,3685],{"class":48,"line":688},[46,3677,3602],{"class":56},[46,3679,3481],{"class":52},[46,3681,3682],{"class":173},"\"大于600\"",[46,3684,3481],{"class":52},[46,3686,3250],{"class":56},[46,3688,3689],{"class":48,"line":693},[46,3690,3616],{"class":56},[46,3692,3693],{"class":48,"line":699},[46,3694,3695],{"class":2253},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[46,3697,3698,3700,3703,3705,3707,3710,3712,3714],{"class":48,"line":705},[46,3699,911],{"class":52},[46,3701,3702],{"class":56}," (",[46,3704,2379],{"class":180},[46,3706,821],{"class":52},[46,3708,3709],{"class":56},"num",[46,3711,821],{"class":52},[46,3713,1155],{"class":180},[46,3715,459],{"class":56},[46,3717,3718],{"class":48,"line":711},[46,3719,3597],{"class":56},[46,3721,3722,3724,3726,3729,3731],{"class":48,"line":717},[46,3723,3602],{"class":56},[46,3725,3228],{"class":52},[46,3727,3728],{"class":173},"\"小于100\"",[46,3730,3228],{"class":52},[46,3732,3250],{"class":56},[46,3734,3735],{"class":48,"line":723},[46,3736,3616],{"class":56},[46,3738,3739,3742,3745,3748,3751,3753,3756,3758,3760,3763],{"class":48,"line":729},[46,3740,3741],{"class":52},"else",[46,3743,3744],{"class":52}," if",[46,3746,3747],{"class":56}," (nmu",[46,3749,3750],{"class":52},">=",[46,3752,1155],{"class":180},[46,3754,3755],{"class":52},"&&",[46,3757,3709],{"class":56},[46,3759,821],{"class":52},[46,3761,3762],{"class":180},"200",[46,3764,459],{"class":56},[46,3766,3767],{"class":48,"line":735},[46,3768,3597],{"class":56},[46,3770,3771,3773,3775,3778,3780,3782],{"class":48,"line":740},[46,3772,3602],{"class":56},[46,3774,3228],{"class":52},[46,3776,3777],{"class":173},"\"不小于100且小于200\"",[46,3779,3228],{"class":52},[46,3781,3293],{"class":56},[46,3783,3784],{"class":2253}," \u002F\u002F可以无限else if,python中是elif：\n",[46,3786,3787],{"class":48,"line":745},[46,3788,3616],{"class":56},[46,3790,3791],{"class":48,"line":763},[46,3792,3669],{"class":52},[46,3794,3795],{"class":48,"line":778},[46,3796,3597],{"class":56},[46,3798,3799,3801,3803,3806,3808],{"class":48,"line":789},[46,3800,3602],{"class":56},[46,3802,3228],{"class":52},[46,3804,3805],{"class":173},"\"不小于200\"",[46,3807,3228],{"class":52},[46,3809,3250],{"class":56},[46,3811,3812],{"class":48,"line":794},[46,3813,3616],{"class":56},[46,3815,3816],{"class":48,"line":806},[46,3817,3818],{"class":2253},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[23,3820,3821],{"start":60},[26,3822,3823],{},"三目运算符",[36,3825,3827],{"className":2187,"code":3826,"language":2189,"meta":41,"style":41},"\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",[43,3828,3829,3834,3839,3865,3887,3904,3909,3932,3947],{"__ignoreMap":41},[46,3830,3831],{"class":48,"line":49},[46,3832,3833],{"class":2253},"\u002F\u002F创建三个变量a,b,c\n",[46,3835,3836],{"class":48,"line":60},[46,3837,3838],{"class":2253},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[46,3840,3841,3843,3845,3847,3849,3852,3854,3856,3859,3861,3863],{"class":48,"line":200},[46,3842,2201],{"class":52},[46,3844,3450],{"class":56},[46,3846,79],{"class":52},[46,3848,2886],{"class":180},[46,3850,3851],{"class":56},",b",[46,3853,79],{"class":52},[46,3855,2633],{"class":180},[46,3857,3858],{"class":56},",c",[46,3860,79],{"class":52},[46,3862,2379],{"class":180},[46,3864,3345],{"class":56},[46,3866,3867,3869,3871,3874,3876,3878,3880,3882,3884],{"class":48,"line":211},[46,3868,2476],{"class":56},[46,3870,79],{"class":52},[46,3872,3873],{"class":56},"(a",[46,3875,884],{"class":52},[46,3877,2451],{"class":56},[46,3879,3170],{"class":52},[46,3881,2426],{"class":56},[46,3883,3045],{"class":52},[46,3885,3886],{"class":56},"b)\n",[46,3888,3889,3891,3893,3896,3898,3900,3902],{"class":48,"line":222},[46,3890,3421],{"class":56},[46,3892,3228],{"class":52},[46,3894,3895],{"class":173},"\"c=\"",[46,3897,3228],{"class":52},[46,3899,2476],{"class":56},[46,3901,3228],{"class":52},[46,3903,3250],{"class":56},[46,3905,3906],{"class":48,"line":636},[46,3907,3908],{"class":2253},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[46,3910,3911,3913,3915,3917,3919,3921,3923,3926,3928,3930],{"class":48,"line":641},[46,3912,3873],{"class":56},[46,3914,884],{"class":52},[46,3916,2451],{"class":56},[46,3918,3170],{"class":52},[46,3920,2426],{"class":56},[46,3922,3045],{"class":52},[46,3924,3925],{"class":56},"b)",[46,3927,79],{"class":52},[46,3929,1155],{"class":180},[46,3931,3345],{"class":56},[46,3933,3934,3936,3938,3940,3942,3944],{"class":48,"line":653},[46,3935,3421],{"class":56},[46,3937,3228],{"class":52},[46,3939,2426],{"class":56},[46,3941,3228],{"class":52},[46,3943,3293],{"class":56},[46,3945,3946],{"class":2253}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[46,3948,3949,3951,3953,3955,3957,3959],{"class":48,"line":659},[46,3950,3421],{"class":56},[46,3952,3228],{"class":52},[46,3954,2451],{"class":56},[46,3956,3228],{"class":52},[46,3958,3293],{"class":56},[46,3960,3961],{"class":2253}," \u002F\u002F10   a>b,b还是原值\n",[23,3963,3964],{"start":200},[26,3965,3966],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[36,3968,3970],{"className":2187,"code":3969,"language":2189,"meta":41,"style":41},"\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",[43,3971,3972,3977,3985,3998,4007,4011,4025,4038,4048,4056,4061,4086,4107,4129,4150,4172,4193,4213,4218],{"__ignoreMap":41},[46,3973,3974],{"class":48,"line":49},[46,3975,3976],{"class":2253},"\u002F\u002F案例-电影打分\n",[46,3978,3979,3982],{"class":48,"line":60},[46,3980,3981],{"class":52},"#include",[46,3983,3984],{"class":173},"\u003Ciostream>\n",[46,3986,3987,3990,3993,3996],{"class":48,"line":200},[46,3988,3989],{"class":52},"using",[46,3991,3992],{"class":52}," namespace",[46,3994,3995],{"class":169}," std",[46,3997,3345],{"class":56},[46,3999,4000,4002,4004],{"class":48,"line":211},[46,4001,2201],{"class":52},[46,4003,751],{"class":169},[46,4005,4006],{"class":56},"()\n",[46,4008,4009],{"class":48,"line":222},[46,4010,3597],{"class":56},[46,4012,4013,4016,4019,4021,4023],{"class":48,"line":636},[46,4014,4015],{"class":52},"    int",[46,4017,4018],{"class":56}," score",[46,4020,79],{"class":52},[46,4022,2379],{"class":180},[46,4024,3345],{"class":56},[46,4026,4027,4029,4031,4034,4036],{"class":48,"line":641},[46,4028,3602],{"class":56},[46,4030,3228],{"class":52},[46,4032,4033],{"class":173},"\"电影打分：\"",[46,4035,3228],{"class":52},[46,4037,3250],{"class":56},[46,4039,4040,4043,4045],{"class":48,"line":653},[46,4041,4042],{"class":56},"    cin",[46,4044,3481],{"class":52},[46,4046,4047],{"class":56},"score;\n",[46,4049,4050,4053],{"class":48,"line":659},[46,4051,4052],{"class":52},"    switch",[46,4054,4055],{"class":56},"(score)\n",[46,4057,4058],{"class":48,"line":665},[46,4059,4060],{"class":56},"    {\n",[46,4062,4063,4066,4069,4072,4074,4077,4079,4081,4084],{"class":48,"line":670},[46,4064,4065],{"class":52},"        case",[46,4067,4068],{"class":180}," 10",[46,4070,4071],{"class":56},":cout",[46,4073,3228],{"class":52},[46,4075,4076],{"class":173},"\"经典\"",[46,4078,3228],{"class":52},[46,4080,3293],{"class":56},[46,4082,4083],{"class":52},"break",[46,4085,3345],{"class":56},[46,4087,4088,4090,4093,4095,4097,4099,4101,4103,4105],{"class":48,"line":676},[46,4089,4065],{"class":52},[46,4091,4092],{"class":180}," 9",[46,4094,4071],{"class":56},[46,4096,3228],{"class":52},[46,4098,4076],{"class":173},[46,4100,3228],{"class":52},[46,4102,3293],{"class":56},[46,4104,4083],{"class":52},[46,4106,3345],{"class":56},[46,4108,4109,4111,4114,4116,4118,4121,4123,4125,4127],{"class":48,"line":682},[46,4110,4065],{"class":52},[46,4112,4113],{"class":180}," 8",[46,4115,4071],{"class":56},[46,4117,3228],{"class":52},[46,4119,4120],{"class":173},"\"非常好\"",[46,4122,3228],{"class":52},[46,4124,3293],{"class":56},[46,4126,4083],{"class":52},[46,4128,3345],{"class":56},[46,4130,4131,4133,4136,4138,4140,4142,4144,4146,4148],{"class":48,"line":688},[46,4132,4065],{"class":52},[46,4134,4135],{"class":180}," 7",[46,4137,4071],{"class":56},[46,4139,3228],{"class":52},[46,4141,4120],{"class":173},[46,4143,3228],{"class":52},[46,4145,3293],{"class":56},[46,4147,4083],{"class":52},[46,4149,3345],{"class":56},[46,4151,4152,4154,4157,4159,4161,4164,4166,4168,4170],{"class":48,"line":693},[46,4153,4065],{"class":52},[46,4155,4156],{"class":180}," 6",[46,4158,4071],{"class":56},[46,4160,3228],{"class":52},[46,4162,4163],{"class":173},"\"一般\"",[46,4165,3228],{"class":52},[46,4167,3293],{"class":56},[46,4169,4083],{"class":52},[46,4171,3345],{"class":56},[46,4173,4174,4176,4179,4181,4183,4185,4187,4189,4191],{"class":48,"line":699},[46,4175,4065],{"class":52},[46,4177,4178],{"class":180}," 5",[46,4180,4071],{"class":56},[46,4182,3228],{"class":52},[46,4184,4163],{"class":173},[46,4186,3228],{"class":52},[46,4188,3293],{"class":56},[46,4190,4083],{"class":52},[46,4192,3345],{"class":56},[46,4194,4195,4198,4200,4202,4205,4207,4209,4211],{"class":48,"line":705},[46,4196,4197],{"class":52},"        default",[46,4199,4071],{"class":56},[46,4201,3228],{"class":52},[46,4203,4204],{"class":173},"\"烂片\"",[46,4206,3228],{"class":52},[46,4208,3293],{"class":56},[46,4210,4083],{"class":52},[46,4212,3345],{"class":56},[46,4214,4215],{"class":48,"line":711},[46,4216,4217],{"class":56},"    }\n",[46,4219,4220],{"class":48,"line":717},[46,4221,3616],{"class":56},[19,4223,4224],{},"if和switch区别：",[3191,4226,4227,4230],{},[26,4228,4229],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[26,4231,4232],{},"switch优点：结构清晰，执行效率高",[479,4234,4236],{"id":4235},"_162循环结构","1.6.2循环结构",[23,4238,4239],{},[26,4240,4241],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[36,4243,4245],{"className":2187,"code":4244,"language":2189,"meta":41,"style":41},"\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",[43,4246,4247,4252,4260,4264,4277,4290,4294,4314,4324,4328,4340],{"__ignoreMap":41},[46,4248,4249],{"class":48,"line":49},[46,4250,4251],{"class":2253},"\u002F\u002F打印0-9数字\n",[46,4253,4254,4256,4258],{"class":48,"line":60},[46,4255,2201],{"class":52},[46,4257,751],{"class":169},[46,4259,4006],{"class":56},[46,4261,4262],{"class":48,"line":200},[46,4263,3597],{"class":56},[46,4265,4266,4268,4271,4273,4275],{"class":48,"line":211},[46,4267,4015],{"class":52},[46,4269,4270],{"class":56}," num",[46,4272,79],{"class":52},[46,4274,2379],{"class":180},[46,4276,3345],{"class":56},[46,4278,4279,4281,4284,4286,4288],{"class":48,"line":222},[46,4280,406],{"class":52},[46,4282,4283],{"class":56},"(num",[46,4285,821],{"class":52},[46,4287,2633],{"class":180},[46,4289,459],{"class":56},[46,4291,4292],{"class":48,"line":636},[46,4293,4060],{"class":56},[46,4295,4296,4299,4302,4304,4306,4308,4311],{"class":48,"line":641},[46,4297,4298],{"class":169},"       std",[46,4300,4301],{"class":56},"::cout",[46,4303,3228],{"class":52},[46,4305,3709],{"class":56},[46,4307,3228],{"class":52},[46,4309,4310],{"class":169},"std",[46,4312,4313],{"class":56},"::endl;\n",[46,4315,4316,4319,4322],{"class":48,"line":653},[46,4317,4318],{"class":56},"        num",[46,4320,4321],{"class":52},"++",[46,4323,3345],{"class":56},[46,4325,4326],{"class":48,"line":659},[46,4327,4217],{"class":56},[46,4329,4330,4333,4335,4338],{"class":48,"line":665},[46,4331,4332],{"class":169},"    system",[46,4334,1152],{"class":56},[46,4336,4337],{"class":173},"\"pause\"",[46,4339,459],{"class":56},[46,4341,4342],{"class":48,"line":670},[46,4343,3616],{"class":56},[19,4345,4346],{},"注意：写好循环条件，避免死循环情况",[36,4348,4350],{"className":2187,"code":4349,"language":2189,"meta":41,"style":41},"\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",[43,4351,4352,4357,4364,4371,4381,4389,4393,4398,4425,4429,4434,4442,4469,4474,4479,4492,4502,4506,4516,4521,4534,4539,4553,4558,4573,4577,4590,4594,4599,4603,4616,4623,4627,4632,4637,4641],{"__ignoreMap":41},[46,4353,4354],{"class":48,"line":49},[46,4355,4356],{"class":2253},"\u002F\u002F循环结构-猜数字\n",[46,4358,4359,4361],{"class":48,"line":60},[46,4360,3981],{"class":52},[46,4362,4363],{"class":173}," \u003Ciostream>\n",[46,4365,4366,4368],{"class":48,"line":200},[46,4367,3981],{"class":52},[46,4369,4370],{"class":173}," \u003Cctime>\n",[46,4372,4373,4375,4377,4379],{"class":48,"line":211},[46,4374,3989],{"class":52},[46,4376,3992],{"class":52},[46,4378,3995],{"class":169},[46,4380,3345],{"class":56},[46,4382,4383,4385,4387],{"class":48,"line":222},[46,4384,2201],{"class":52},[46,4386,751],{"class":169},[46,4388,4006],{"class":56},[46,4390,4391],{"class":48,"line":636},[46,4392,3597],{"class":56},[46,4394,4395],{"class":48,"line":641},[46,4396,4397],{"class":2253},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[46,4399,4400,4403,4406,4409,4412,4414,4417,4419,4422],{"class":48,"line":653},[46,4401,4402],{"class":169},"    srand",[46,4404,4405],{"class":56},"((",[46,4407,4408],{"class":52},"unsigned",[46,4410,4411],{"class":52}," int",[46,4413,2616],{"class":56},[46,4415,4416],{"class":169},"time",[46,4418,1152],{"class":56},[46,4420,4421],{"class":180},"NULL",[46,4423,4424],{"class":56},"));\n",[46,4426,4427],{"class":48,"line":659},[46,4428,616],{"emptyLinePlaceholder":615},[46,4430,4431],{"class":48,"line":665},[46,4432,4433],{"class":2253},"    \u002F\u002F1.系统生成随机数\n",[46,4435,4436,4439],{"class":48,"line":670},[46,4437,4438],{"class":2253},"    \u002F\u002Frand()%100",[46,4440,4441],{"class":2253}," \u002F\u002F生成0-99的随机数\n",[46,4443,4444,4446,4448,4450,4453,4456,4458,4460,4462,4464,4466],{"class":48,"line":676},[46,4445,4015],{"class":52},[46,4447,4270],{"class":56},[46,4449,79],{"class":52},[46,4451,4452],{"class":169},"rand",[46,4454,4455],{"class":56},"()",[46,4457,2515],{"class":52},[46,4459,1155],{"class":180},[46,4461,2668],{"class":52},[46,4463,2405],{"class":180},[46,4465,2250],{"class":56},[46,4467,4468],{"class":2253}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[46,4470,4471],{"class":48,"line":682},[46,4472,4473],{"class":2253},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[46,4475,4476],{"class":48,"line":688},[46,4477,4478],{"class":2253},"    \u002F\u002F2.玩家猜测\n",[46,4480,4481,4483,4486,4488,4490],{"class":48,"line":693},[46,4482,4015],{"class":52},[46,4484,4485],{"class":56}," val",[46,4487,79],{"class":52},[46,4489,2379],{"class":180},[46,4491,3345],{"class":56},[46,4493,4494,4496,4498,4500],{"class":48,"line":699},[46,4495,406],{"class":52},[46,4497,3702],{"class":56},[46,4499,2405],{"class":180},[46,4501,459],{"class":56},[46,4503,4504],{"class":48,"line":705},[46,4505,4060],{"class":56},[46,4507,4508,4511,4513],{"class":48,"line":711},[46,4509,4510],{"class":56},"        cin",[46,4512,3481],{"class":52},[46,4514,4515],{"class":56},"val;\n",[46,4517,4518],{"class":48,"line":717},[46,4519,4520],{"class":2253},"        \u002F\u002F3.判断玩家猜测\n",[46,4522,4523,4526,4529,4531],{"class":48,"line":723},[46,4524,4525],{"class":52},"        if",[46,4527,4528],{"class":56},"(val",[46,4530,821],{"class":52},[46,4532,4533],{"class":56},"num) \n",[46,4535,4536],{"class":48,"line":729},[46,4537,4538],{"class":56},"        {\n",[46,4540,4541,4544,4546,4549,4551],{"class":48,"line":735},[46,4542,4543],{"class":56},"            cout",[46,4545,3228],{"class":52},[46,4547,4548],{"class":173},"\"猜小了！\"",[46,4550,3228],{"class":52},[46,4552,3250],{"class":56},[46,4554,4555],{"class":48,"line":740},[46,4556,4557],{"class":56},"        }\n",[46,4559,4560,4563,4565,4568,4570],{"class":48,"line":745},[46,4561,4562],{"class":52},"        else",[46,4564,3744],{"class":52},[46,4566,4567],{"class":56}," (val",[46,4569,884],{"class":52},[46,4571,4572],{"class":56},"num)\n",[46,4574,4575],{"class":48,"line":763},[46,4576,4538],{"class":56},[46,4578,4579,4581,4583,4586,4588],{"class":48,"line":778},[46,4580,4543],{"class":56},[46,4582,3228],{"class":52},[46,4584,4585],{"class":173},"\"猜大了！\"",[46,4587,3228],{"class":52},[46,4589,3250],{"class":56},[46,4591,4592],{"class":48,"line":789},[46,4593,4557],{"class":56},[46,4595,4596],{"class":48,"line":794},[46,4597,4598],{"class":52},"        else\n",[46,4600,4601],{"class":48,"line":806},[46,4602,4538],{"class":56},[46,4604,4605,4607,4609,4612,4614],{"class":48,"line":829},[46,4606,4543],{"class":56},[46,4608,3228],{"class":52},[46,4610,4611],{"class":173},"\"猜对了！\"",[46,4613,3228],{"class":52},[46,4615,3250],{"class":56},[46,4617,4618,4621],{"class":48,"line":840},[46,4619,4620],{"class":52},"            break",[46,4622,3345],{"class":56},[46,4624,4625],{"class":48,"line":846},[46,4626,4557],{"class":56},[46,4628,4629],{"class":48,"line":852},[46,4630,4631],{"class":2253},"        \u002F\u002F猜对 退出游戏\n",[46,4633,4634],{"class":48,"line":857},[46,4635,4636],{"class":2253},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[46,4638,4639],{"class":48,"line":875},[46,4640,4217],{"class":56},[46,4642,4643],{"class":48,"line":892},[46,4644,3616],{"class":56},[23,4646,4647],{"start":60},[26,4648,4649,4650,4653],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[2339,4651,4652],{},"do...while会先执行一次循环语句","，在判断循环语句",[36,4655,4657],{"className":2187,"code":4656,"language":2189,"meta":41,"style":41},"\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",[43,4658,4659,4664,4672,4676,4688,4696,4700,4717,4724,4728,4741,4751],{"__ignoreMap":41},[46,4660,4661],{"class":48,"line":49},[46,4662,4663],{"class":2253},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[46,4665,4666,4668,4670],{"class":48,"line":60},[46,4667,2201],{"class":52},[46,4669,751],{"class":169},[46,4671,4006],{"class":56},[46,4673,4674],{"class":48,"line":200},[46,4675,3597],{"class":56},[46,4677,4678,4680,4682,4684,4686],{"class":48,"line":211},[46,4679,4015],{"class":52},[46,4681,4270],{"class":56},[46,4683,79],{"class":52},[46,4685,2379],{"class":180},[46,4687,3345],{"class":56},[46,4689,4690,4693],{"class":48,"line":222},[46,4691,4692],{"class":52},"    do",[46,4694,4695],{"class":56}," \n",[46,4697,4698],{"class":48,"line":636},[46,4699,4060],{"class":56},[46,4701,4702,4705,4707,4709,4711,4713,4715],{"class":48,"line":641},[46,4703,4704],{"class":169},"        std",[46,4706,4301],{"class":56},[46,4708,3228],{"class":52},[46,4710,3709],{"class":56},[46,4712,3228],{"class":52},[46,4714,4310],{"class":169},[46,4716,4313],{"class":56},[46,4718,4719,4721],{"class":48,"line":653},[46,4720,4318],{"class":56},[46,4722,4723],{"class":52},"++\n",[46,4725,4726],{"class":48,"line":659},[46,4727,4217],{"class":56},[46,4729,4730,4732,4734,4736,4738],{"class":48,"line":665},[46,4731,406],{"class":52},[46,4733,4283],{"class":56},[46,4735,821],{"class":52},[46,4737,2633],{"class":180},[46,4739,4740],{"class":56},");\n",[46,4742,4743,4745,4747,4749],{"class":48,"line":670},[46,4744,4332],{"class":169},[46,4746,1152],{"class":56},[46,4748,4337],{"class":173},[46,4750,4740],{"class":56},[46,4752,4753],{"class":48,"line":676},[46,4754,3616],{"class":56},[19,4756,4757],{},"案例-水仙花数",[19,4759,4760],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[19,4762,4763],{},"例如：1^3+5^3+3^3=153",[19,4765,4766],{},"请用do...while语句，求出所有3位数的水仙花数",[36,4768,4770],{"className":2187,"code":4769,"language":2189,"meta":41,"style":41},"#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",[43,4771,4772,4778,4788,4796,4800,4805,4817,4823,4827,4832,4848,4864,4880,4895,4914,4929,4977,4981,4993,4997,5005,5009,5023],{"__ignoreMap":41},[46,4773,4774,4776],{"class":48,"line":49},[46,4775,3981],{"class":52},[46,4777,4363],{"class":173},[46,4779,4780,4782,4784,4786],{"class":48,"line":60},[46,4781,3989],{"class":52},[46,4783,3992],{"class":52},[46,4785,3995],{"class":169},[46,4787,3345],{"class":56},[46,4789,4790,4792,4794],{"class":48,"line":200},[46,4791,2201],{"class":52},[46,4793,751],{"class":169},[46,4795,4006],{"class":56},[46,4797,4798],{"class":48,"line":211},[46,4799,3597],{"class":56},[46,4801,4802],{"class":48,"line":222},[46,4803,4804],{"class":2253},"    \u002F\u002F1.先打印所有三位数字\n",[46,4806,4807,4809,4811,4813,4815],{"class":48,"line":636},[46,4808,4015],{"class":52},[46,4810,4270],{"class":56},[46,4812,79],{"class":52},[46,4814,1155],{"class":180},[46,4816,3345],{"class":56},[46,4818,4819,4821],{"class":48,"line":641},[46,4820,4692],{"class":52},[46,4822,4695],{"class":56},[46,4824,4825],{"class":48,"line":653},[46,4826,4060],{"class":56},[46,4828,4829],{"class":48,"line":659},[46,4830,4831],{"class":2253},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[46,4833,4834,4837,4839,4841,4843,4845],{"class":48,"line":665},[46,4835,4836],{"class":52},"        int",[46,4838,3450],{"class":56},[46,4840,79],{"class":52},[46,4842,2379],{"class":180},[46,4844,2250],{"class":56},[46,4846,4847],{"class":2253}," \u002F\u002F个位\n",[46,4849,4850,4852,4855,4857,4859,4861],{"class":48,"line":670},[46,4851,4836],{"class":52},[46,4853,4854],{"class":56}," b",[46,4856,79],{"class":52},[46,4858,2379],{"class":180},[46,4860,2250],{"class":56},[46,4862,4863],{"class":2253}," \u002F\u002F十位\n",[46,4865,4866,4868,4871,4873,4875,4877],{"class":48,"line":676},[46,4867,4836],{"class":52},[46,4869,4870],{"class":56}," c",[46,4872,79],{"class":52},[46,4874,2379],{"class":180},[46,4876,2250],{"class":56},[46,4878,4879],{"class":2253}," \u002F\u002F百位\n",[46,4881,4882,4885,4887,4889,4891,4893],{"class":48,"line":682},[46,4883,4884],{"class":56},"        a",[46,4886,79],{"class":52},[46,4888,3709],{"class":56},[46,4890,2515],{"class":52},[46,4892,2633],{"class":180},[46,4894,3345],{"class":56},[46,4896,4897,4900,4902,4904,4906,4908,4910,4912],{"class":48,"line":688},[46,4898,4899],{"class":56},"        b",[46,4901,79],{"class":52},[46,4903,3709],{"class":56},[46,4905,2770],{"class":52},[46,4907,2633],{"class":180},[46,4909,2515],{"class":52},[46,4911,2633],{"class":180},[46,4913,3345],{"class":56},[46,4915,4916,4919,4921,4923,4925,4927],{"class":48,"line":693},[46,4917,4918],{"class":56},"        c",[46,4920,79],{"class":52},[46,4922,3709],{"class":56},[46,4924,2770],{"class":52},[46,4926,1155],{"class":180},[46,4928,3345],{"class":56},[46,4930,4931,4933,4935,4937,4939,4941,4943,4945,4947,4949,4951,4953,4955,4957,4959,4961,4963,4965,4968,4971,4974],{"class":48,"line":699},[46,4932,4525],{"class":52},[46,4934,3873],{"class":56},[46,4936,2642],{"class":52},[46,4938,2426],{"class":56},[46,4940,2642],{"class":52},[46,4942,2426],{"class":56},[46,4944,2668],{"class":52},[46,4946,2451],{"class":56},[46,4948,2642],{"class":52},[46,4950,2451],{"class":56},[46,4952,2642],{"class":52},[46,4954,2451],{"class":56},[46,4956,2668],{"class":52},[46,4958,2476],{"class":56},[46,4960,2642],{"class":52},[46,4962,2476],{"class":56},[46,4964,2642],{"class":52},[46,4966,4967],{"class":56},"c ",[46,4969,4970],{"class":52},"==",[46,4972,4973],{"class":56}," num)",[46,4975,4976],{"class":2253}," \u002F\u002F如果是水仙花数，才打印\n",[46,4978,4979],{"class":48,"line":705},[46,4980,4538],{"class":56},[46,4982,4983,4985,4987,4989,4991],{"class":48,"line":711},[46,4984,4543],{"class":56},[46,4986,3228],{"class":52},[46,4988,3709],{"class":56},[46,4990,3228],{"class":52},[46,4992,3250],{"class":56},[46,4994,4995],{"class":48,"line":717},[46,4996,4557],{"class":56},[46,4998,4999,5001,5003],{"class":48,"line":723},[46,5000,4318],{"class":56},[46,5002,4321],{"class":52},[46,5004,3345],{"class":56},[46,5006,5007],{"class":48,"line":729},[46,5008,4217],{"class":56},[46,5010,5011,5013,5016,5018,5021],{"class":48,"line":735},[46,5012,406],{"class":52},[46,5014,5015],{"class":56}," (num ",[46,5017,821],{"class":52},[46,5019,5020],{"class":180}," 1000",[46,5022,4740],{"class":56},[46,5024,5025],{"class":48,"line":740},[46,5026,3616],{"class":56},[23,5028,5029],{"start":200},[26,5030,5031],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[36,5033,5035],{"className":2187,"code":5034,"language":2189,"meta":41,"style":41},"\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",[43,5036,5037,5042,5070,5074,5086,5090,5095,5106,5113,5117,5131,5135,5142,5146,5158,5167],{"__ignoreMap":41},[46,5038,5039],{"class":48,"line":49},[46,5040,5041],{"class":2253},"\u002F\u002F从数字0-9打印\n",[46,5043,5044,5046,5048,5050,5053,5055,5057,5060,5062,5064,5066,5068],{"class":48,"line":60},[46,5045,1713],{"class":52},[46,5047,1152],{"class":56},[46,5049,2201],{"class":52},[46,5051,5052],{"class":56}," i",[46,5054,79],{"class":52},[46,5056,2379],{"class":180},[46,5058,5059],{"class":56},";i",[46,5061,821],{"class":52},[46,5063,2633],{"class":180},[46,5065,5059],{"class":56},[46,5067,4321],{"class":52},[46,5069,459],{"class":56},[46,5071,5072],{"class":48,"line":200},[46,5073,3597],{"class":56},[46,5075,5076,5078,5080,5082,5084],{"class":48,"line":211},[46,5077,3602],{"class":56},[46,5079,3228],{"class":52},[46,5081,2628],{"class":56},[46,5083,3228],{"class":52},[46,5085,3250],{"class":56},[46,5087,5088],{"class":48,"line":222},[46,5089,3616],{"class":56},[46,5091,5092],{"class":48,"line":636},[46,5093,5094],{"class":2253},"\u002F\u002F上式可以进行拆分\n",[46,5096,5097,5099,5101,5103],{"class":48,"line":641},[46,5098,2201],{"class":52},[46,5100,5052],{"class":56},[46,5102,79],{"class":52},[46,5104,5105],{"class":180},"0\n",[46,5107,5108,5110],{"class":48,"line":653},[46,5109,1713],{"class":52},[46,5111,5112],{"class":56},"(;;;)\n",[46,5114,5115],{"class":48,"line":659},[46,5116,3597],{"class":56},[46,5118,5119,5122,5125,5127,5129],{"class":48,"line":665},[46,5120,5121],{"class":52},"    if",[46,5123,5124],{"class":56},"(i",[46,5126,3750],{"class":52},[46,5128,2633],{"class":180},[46,5130,459],{"class":56},[46,5132,5133],{"class":48,"line":670},[46,5134,4060],{"class":56},[46,5136,5137,5140],{"class":48,"line":676},[46,5138,5139],{"class":52},"        break",[46,5141,3345],{"class":56},[46,5143,5144],{"class":48,"line":682},[46,5145,4217],{"class":56},[46,5147,5148,5150,5152,5154,5156],{"class":48,"line":688},[46,5149,3602],{"class":56},[46,5151,3228],{"class":52},[46,5153,2628],{"class":56},[46,5155,3228],{"class":52},[46,5157,3250],{"class":56},[46,5159,5160,5163,5165],{"class":48,"line":693},[46,5161,5162],{"class":56},"    i",[46,5164,4321],{"class":52},[46,5166,3345],{"class":56},[46,5168,5169],{"class":48,"line":699},[46,5170,3616],{"class":56},[19,5172,5173],{},"小练习",[36,5175,5177],{"className":2187,"code":5176,"language":2189,"meta":41,"style":41},"#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",[43,5178,5179,5185,5195,5203,5207,5212,5217,5244,5248,5253,5258,5299,5303,5316,5320,5324,5328,5340,5344,5348],{"__ignoreMap":41},[46,5180,5181,5183],{"class":48,"line":49},[46,5182,3981],{"class":52},[46,5184,3984],{"class":173},[46,5186,5187,5189,5191,5193],{"class":48,"line":60},[46,5188,3989],{"class":52},[46,5190,3992],{"class":52},[46,5192,3995],{"class":169},[46,5194,3345],{"class":56},[46,5196,5197,5199,5201],{"class":48,"line":200},[46,5198,2201],{"class":52},[46,5200,751],{"class":169},[46,5202,4006],{"class":56},[46,5204,5205],{"class":48,"line":211},[46,5206,3597],{"class":56},[46,5208,5209],{"class":48,"line":222},[46,5210,5211],{"class":2253},"    \u002F\u002F敲桌子案例\n",[46,5213,5214],{"class":48,"line":636},[46,5215,5216],{"class":2253},"    \u002F\u002F1.先输出1-100的数字\n",[46,5218,5219,5221,5223,5225,5227,5229,5231,5234,5236,5238,5240,5242],{"class":48,"line":641},[46,5220,1140],{"class":52},[46,5222,1152],{"class":56},[46,5224,2201],{"class":52},[46,5226,5052],{"class":56},[46,5228,79],{"class":52},[46,5230,2405],{"class":180},[46,5232,5233],{"class":56},"; i",[46,5235,3639],{"class":52},[46,5237,1155],{"class":180},[46,5239,5233],{"class":56},[46,5241,4321],{"class":52},[46,5243,459],{"class":56},[46,5245,5246],{"class":48,"line":653},[46,5247,4060],{"class":56},[46,5249,5250],{"class":48,"line":659},[46,5251,5252],{"class":2253},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[46,5254,5255],{"class":48,"line":665},[46,5256,5257],{"class":2253},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[46,5259,5260,5262,5264,5266,5268,5270,5272,5275,5277,5279,5281,5283,5285,5287,5289,5291,5293,5295,5297],{"class":48,"line":670},[46,5261,4525],{"class":52},[46,5263,5124],{"class":56},[46,5265,2515],{"class":52},[46,5267,2556],{"class":180},[46,5269,4970],{"class":52},[46,5271,2379],{"class":180},[46,5273,5274],{"class":52}," ||",[46,5276,5052],{"class":56},[46,5278,2515],{"class":52},[46,5280,2633],{"class":180},[46,5282,4970],{"class":52},[46,5284,2556],{"class":180},[46,5286,5274],{"class":52},[46,5288,5052],{"class":56},[46,5290,2770],{"class":52},[46,5292,2633],{"class":180},[46,5294,4970],{"class":52},[46,5296,2556],{"class":180},[46,5298,459],{"class":56},[46,5300,5301],{"class":48,"line":676},[46,5302,4538],{"class":56},[46,5304,5305,5307,5309,5312,5314],{"class":48,"line":682},[46,5306,4543],{"class":56},[46,5308,3228],{"class":52},[46,5310,5311],{"class":173},"\"敲桌子\"",[46,5313,3228],{"class":52},[46,5315,3250],{"class":56},[46,5317,5318],{"class":48,"line":688},[46,5319,4557],{"class":56},[46,5321,5322],{"class":48,"line":693},[46,5323,4598],{"class":52},[46,5325,5326],{"class":48,"line":699},[46,5327,4538],{"class":56},[46,5329,5330,5332,5334,5336,5338],{"class":48,"line":705},[46,5331,4543],{"class":56},[46,5333,3228],{"class":52},[46,5335,2628],{"class":56},[46,5337,3228],{"class":52},[46,5339,3250],{"class":56},[46,5341,5342],{"class":48,"line":711},[46,5343,4557],{"class":56},[46,5345,5346],{"class":48,"line":717},[46,5347,4217],{"class":56},[46,5349,5350],{"class":48,"line":723},[46,5351,3616],{"class":56},[19,5353,5354],{},"嵌套实现星图",[36,5356,5358],{"className":2187,"code":5357,"language":2189,"meta":41,"style":41},"#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",[43,5359,5360,5366,5376,5384,5388,5414,5418,5447,5451,5462,5466,5475,5479],{"__ignoreMap":41},[46,5361,5362,5364],{"class":48,"line":49},[46,5363,3981],{"class":52},[46,5365,3984],{"class":173},[46,5367,5368,5370,5372,5374],{"class":48,"line":60},[46,5369,3989],{"class":52},[46,5371,3992],{"class":52},[46,5373,3995],{"class":169},[46,5375,3345],{"class":56},[46,5377,5378,5380,5382],{"class":48,"line":200},[46,5379,2201],{"class":52},[46,5381,751],{"class":169},[46,5383,4006],{"class":56},[46,5385,5386],{"class":48,"line":211},[46,5387,3597],{"class":56},[46,5389,5390,5392,5394,5396,5398,5400,5402,5404,5406,5408,5410,5412],{"class":48,"line":222},[46,5391,1140],{"class":52},[46,5393,3702],{"class":56},[46,5395,2201],{"class":52},[46,5397,5052],{"class":56},[46,5399,79],{"class":52},[46,5401,2379],{"class":180},[46,5403,5059],{"class":56},[46,5405,821],{"class":52},[46,5407,2633],{"class":180},[46,5409,5059],{"class":56},[46,5411,4321],{"class":52},[46,5413,459],{"class":56},[46,5415,5416],{"class":48,"line":636},[46,5417,4060],{"class":56},[46,5419,5420,5423,5425,5427,5430,5432,5434,5437,5439,5441,5443,5445],{"class":48,"line":641},[46,5421,5422],{"class":52},"        for",[46,5424,3702],{"class":56},[46,5426,2201],{"class":52},[46,5428,5429],{"class":56}," j",[46,5431,79],{"class":52},[46,5433,2379],{"class":180},[46,5435,5436],{"class":56},";j",[46,5438,821],{"class":52},[46,5440,2633],{"class":180},[46,5442,5436],{"class":56},[46,5444,4321],{"class":52},[46,5446,459],{"class":56},[46,5448,5449],{"class":48,"line":653},[46,5450,4538],{"class":56},[46,5452,5453,5455,5457,5460],{"class":48,"line":659},[46,5454,4543],{"class":56},[46,5456,3228],{"class":52},[46,5458,5459],{"class":173},"\"*\"",[46,5461,3345],{"class":56},[46,5463,5464],{"class":48,"line":665},[46,5465,4557],{"class":56},[46,5467,5468,5471,5473],{"class":48,"line":670},[46,5469,5470],{"class":56},"        cout",[46,5472,3228],{"class":52},[46,5474,3250],{"class":56},[46,5476,5477],{"class":48,"line":676},[46,5478,4217],{"class":56},[46,5480,5481],{"class":48,"line":682},[46,5482,3616],{"class":56},[19,5484,5485],{},"乘法口诀表",[36,5487,5489],{"className":2187,"code":5488,"language":2189,"meta":41,"style":41},"#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",[43,5490,5491,5497,5507,5515,5519,5545,5549,5574,5578,5618,5622,5630,5634],{"__ignoreMap":41},[46,5492,5493,5495],{"class":48,"line":49},[46,5494,3981],{"class":52},[46,5496,4363],{"class":173},[46,5498,5499,5501,5503,5505],{"class":48,"line":60},[46,5500,3989],{"class":52},[46,5502,3992],{"class":52},[46,5504,3995],{"class":169},[46,5506,3345],{"class":56},[46,5508,5509,5511,5513],{"class":48,"line":200},[46,5510,2201],{"class":52},[46,5512,751],{"class":169},[46,5514,4006],{"class":56},[46,5516,5517],{"class":48,"line":211},[46,5518,3597],{"class":56},[46,5520,5521,5523,5525,5527,5529,5531,5533,5535,5537,5539,5541,5543],{"class":48,"line":222},[46,5522,1140],{"class":52},[46,5524,1152],{"class":56},[46,5526,2201],{"class":52},[46,5528,5052],{"class":56},[46,5530,79],{"class":52},[46,5532,2405],{"class":180},[46,5534,5059],{"class":56},[46,5536,821],{"class":52},[46,5538,2633],{"class":180},[46,5540,5059],{"class":56},[46,5542,4321],{"class":52},[46,5544,459],{"class":56},[46,5546,5547],{"class":48,"line":636},[46,5548,4060],{"class":56},[46,5550,5551,5553,5555,5557,5559,5561,5563,5565,5567,5570,5572],{"class":48,"line":641},[46,5552,5422],{"class":52},[46,5554,1152],{"class":56},[46,5556,2201],{"class":52},[46,5558,5429],{"class":56},[46,5560,79],{"class":52},[46,5562,2405],{"class":180},[46,5564,5436],{"class":56},[46,5566,3639],{"class":52},[46,5568,5569],{"class":56},"i;j",[46,5571,4321],{"class":52},[46,5573,459],{"class":56},[46,5575,5576],{"class":48,"line":653},[46,5577,4538],{"class":56},[46,5579,5580,5582,5584,5586,5588,5590,5592,5594,5596,5599,5601,5603,5605,5607,5609,5612,5614,5616],{"class":48,"line":659},[46,5581,4543],{"class":56},[46,5583,3228],{"class":52},[46,5585,2654],{"class":56},[46,5587,3228],{"class":52},[46,5589,5459],{"class":173},[46,5591,3228],{"class":52},[46,5593,2628],{"class":56},[46,5595,3228],{"class":52},[46,5597,5598],{"class":173},"\"=\"",[46,5600,3228],{"class":52},[46,5602,2628],{"class":56},[46,5604,2642],{"class":52},[46,5606,2654],{"class":56},[46,5608,3228],{"class":52},[46,5610,5611],{"class":173},"'",[46,5613,3285],{"class":180},[46,5615,5611],{"class":173},[46,5617,3345],{"class":56},[46,5619,5620],{"class":48,"line":665},[46,5621,4557],{"class":56},[46,5623,5624,5626,5628],{"class":48,"line":670},[46,5625,5470],{"class":56},[46,5627,3228],{"class":52},[46,5629,3250],{"class":56},[46,5631,5632],{"class":48,"line":676},[46,5633,4217],{"class":56},[46,5635,5636],{"class":48,"line":682},[46,5637,3616],{"class":56},[479,5639,5641],{"id":5640},"_163跳出语句","1.6.3跳出语句",[23,5643,5644],{},[26,5645,5646],{},"break语句\n作用：用于跳出选择结构或者循环结构",[19,5648,5649],{},"break使用时机：",[3191,5651,5652,5655,5658],{},[26,5653,5654],{},"出现在switch条件语句中，作用是终止case并跳出switch",[26,5656,5657],{},"出现在循环结构中，作用是跳出当前的循环结构",[26,5659,5660],{},"出现在嵌套循环中，跳出最近的内层循环语句",[23,5662,5663,5666],{"start":60},[26,5664,5665],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[26,5667,5668],{},"goto语句\n语法：goto 标记;",[19,5670,5671],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[36,5673,5675],{"className":2187,"code":5674,"language":2189,"meta":41,"style":41},"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",[43,5676,5677,5685,5689,5702,5712,5725,5738,5751,5758,5774],{"__ignoreMap":41},[46,5678,5679,5681,5683],{"class":48,"line":49},[46,5680,2201],{"class":52},[46,5682,751],{"class":169},[46,5684,4006],{"class":56},[46,5686,5687],{"class":48,"line":60},[46,5688,3597],{"class":56},[46,5690,5691,5693,5695,5698,5700],{"class":48,"line":200},[46,5692,3602],{"class":56},[46,5694,3228],{"class":52},[46,5696,5697],{"class":173},"\"1\"",[46,5699,3228],{"class":52},[46,5701,3250],{"class":56},[46,5703,5704,5707,5710],{"class":48,"line":211},[46,5705,5706],{"class":52},"    goto",[46,5708,5709],{"class":169}," FLAG",[46,5711,3345],{"class":56},[46,5713,5714,5716,5718,5721,5723],{"class":48,"line":222},[46,5715,3602],{"class":56},[46,5717,3228],{"class":52},[46,5719,5720],{"class":173},"\"2\"",[46,5722,3228],{"class":52},[46,5724,3250],{"class":56},[46,5726,5727,5729,5731,5734,5736],{"class":48,"line":636},[46,5728,3602],{"class":56},[46,5730,3228],{"class":52},[46,5732,5733],{"class":173},"\"3\"",[46,5735,3228],{"class":52},[46,5737,3250],{"class":56},[46,5739,5740,5742,5744,5747,5749],{"class":48,"line":641},[46,5741,3602],{"class":56},[46,5743,3228],{"class":52},[46,5745,5746],{"class":173},"\"4\"",[46,5748,3228],{"class":52},[46,5750,3250],{"class":56},[46,5752,5753,5756],{"class":48,"line":653},[46,5754,5755],{"class":169},"    FLAG",[46,5757,760],{"class":56},[46,5759,5760,5762,5764,5767,5769,5771],{"class":48,"line":659},[46,5761,3602],{"class":56},[46,5763,3228],{"class":52},[46,5765,5766],{"class":173},"\"5\"",[46,5768,3228],{"class":52},[46,5770,3293],{"class":56},[46,5772,5773],{"class":2253},"\u002F\u002F跳过了2,3,4,直接到5\n",[46,5775,5776],{"class":48,"line":665},[46,5777,3616],{"class":56},[14,5779,5781],{"id":5780},"_17数组","1.7数组",[479,5783,5785],{"id":5784},"_171一维数组","1.7.1一维数组",[23,5787,5788],{},[26,5789,5790],{},"一维数组定义方式",[97,5792,5793,5803],{},[100,5794,5795],{},[103,5796,5797,5800],{},[106,5798,5799],{},"方式",[106,5801,5802],{},"注意事项",[120,5804,5805,5819,5829],{},[103,5806,5807,5813],{},[125,5808,5809,5810,2250],{},"数据类型 数组名",[46,5811,5812],{},"数组长度",[125,5814,5815,5816,5818],{},"这种方式是先定义再arr",[46,5817,2628],{},"赋值",[103,5820,5821,5826],{},[125,5822,5809,5823,5825],{},[46,5824,5812],{},"={值1,值2....};",[125,5827,5828],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[103,5830,5831,5835],{},[125,5832,5809,5833,5825],{},[46,5834],{},[125,5836,5837,5838,5840],{},"int arr",[46,5839],{},";这是不正确的，按照这样的方式定义必须有初始长度",[23,5842,5843],{"start":60},[26,5844,5845],{},"一维数组数组名\n用途：",[3191,5847,5848],{},[26,5849,5850],{},"1.可以统计整个数组在内存中的长度：",[36,5852,5854],{"className":2187,"code":5853,"language":2189,"meta":41,"style":41},"sizeof(arr);\nsizeof(arr[0]);\n",[43,5855,5856,5863],{"__ignoreMap":41},[46,5857,5858,5860],{"class":48,"line":49},[46,5859,2196],{"class":52},[46,5861,5862],{"class":56},"(arr);\n",[46,5864,5865,5867,5870,5872],{"class":48,"line":60},[46,5866,2196],{"class":52},[46,5868,5869],{"class":56},"(arr[",[46,5871,2379],{"class":180},[46,5873,5874],{"class":56},"]);\n",[3191,5876,5877],{},[26,5878,5879],{},"2.可以获取数组在内存中的首地址:",[36,5881,5883],{"className":2187,"code":5882,"language":2189,"meta":41,"style":41},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[43,5884,5885,5890,5903,5908],{"__ignoreMap":41},[46,5886,5887],{"class":48,"line":49},[46,5888,5889],{"class":2253},"\u002F\u002F查看16进制的首地址\n",[46,5891,5892,5894,5896,5899,5901],{"class":48,"line":60},[46,5893,3421],{"class":56},[46,5895,3228],{"class":52},[46,5897,5898],{"class":56},"arr",[46,5900,3228],{"class":52},[46,5902,3250],{"class":56},[46,5904,5905],{"class":48,"line":200},[46,5906,5907],{"class":2253},"\u002F\u002F看10进制数\n",[46,5909,5910,5912,5914,5916,5918,5920,5922,5925,5927,5929,5931],{"class":48,"line":211},[46,5911,3421],{"class":56},[46,5913,3228],{"class":52},[46,5915,1152],{"class":56},[46,5917,2201],{"class":52},[46,5919,2616],{"class":56},[46,5921,2540],{"class":52},[46,5923,5924],{"class":56},"arr[",[46,5926,2379],{"class":180},[46,5928,3125],{"class":56},[46,5930,3228],{"class":52},[46,5932,3250],{"class":56},[19,5934,5935],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[3191,5937,5938],{},[26,5939,5940],{},"1️⃣五只小猪称体重",[36,5942,5944],{"className":2187,"code":5943,"language":2189,"meta":41,"style":41},"#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",[43,5945,5946,5952,5962,5970,5974,6014,6027,6053,6057,6069,6073,6083,6087,6091,6104,6113],{"__ignoreMap":41},[46,5947,5948,5950],{"class":48,"line":49},[46,5949,3981],{"class":52},[46,5951,3984],{"class":173},[46,5953,5954,5956,5958,5960],{"class":48,"line":60},[46,5955,3989],{"class":52},[46,5957,3992],{"class":52},[46,5959,3995],{"class":169},[46,5961,3345],{"class":56},[46,5963,5964,5966,5968],{"class":48,"line":200},[46,5965,2201],{"class":52},[46,5967,751],{"class":169},[46,5969,4006],{"class":56},[46,5971,5972],{"class":48,"line":211},[46,5973,3597],{"class":56},[46,5975,5976,5978,5981,5983,5985,5987,5989,5992,5994,5997,5999,6001,6003,6006,6008,6011],{"class":48,"line":222},[46,5977,4015],{"class":52},[46,5979,5980],{"class":56}," arr[",[46,5982,2506],{"class":180},[46,5984,3125],{"class":56},[46,5986,79],{"class":52},[46,5988,3082],{"class":56},[46,5990,5991],{"class":180},"300",[46,5993,2565],{"class":56},[46,5995,5996],{"class":180},"350",[46,5998,2565],{"class":56},[46,6000,3762],{"class":180},[46,6002,2565],{"class":56},[46,6004,6005],{"class":180},"400",[46,6007,2565],{"class":56},[46,6009,6010],{"class":180},"250",[46,6012,6013],{"class":56},"};\n",[46,6015,6016,6018,6021,6023,6025],{"class":48,"line":636},[46,6017,4015],{"class":52},[46,6019,6020],{"class":56}," tmp",[46,6022,79],{"class":52},[46,6024,2379],{"class":180},[46,6026,3345],{"class":56},[46,6028,6029,6031,6033,6035,6037,6039,6041,6043,6045,6047,6049,6051],{"class":48,"line":641},[46,6030,1140],{"class":52},[46,6032,3702],{"class":56},[46,6034,2201],{"class":52},[46,6036,5052],{"class":56},[46,6038,79],{"class":52},[46,6040,2379],{"class":180},[46,6042,5059],{"class":56},[46,6044,821],{"class":52},[46,6046,2506],{"class":180},[46,6048,5059],{"class":56},[46,6050,4321],{"class":52},[46,6052,459],{"class":56},[46,6054,6055],{"class":48,"line":653},[46,6056,4060],{"class":56},[46,6058,6059,6061,6064,6066],{"class":48,"line":659},[46,6060,4525],{"class":52},[46,6062,6063],{"class":56},"(tmp",[46,6065,821],{"class":52},[46,6067,6068],{"class":56},"arr[i])\n",[46,6070,6071],{"class":48,"line":665},[46,6072,4538],{"class":56},[46,6074,6075,6078,6080],{"class":48,"line":670},[46,6076,6077],{"class":56},"            tmp",[46,6079,79],{"class":52},[46,6081,6082],{"class":56},"arr[i];\n",[46,6084,6085],{"class":48,"line":676},[46,6086,4557],{"class":56},[46,6088,6089],{"class":48,"line":682},[46,6090,4217],{"class":56},[46,6092,6093,6095,6097,6100,6102],{"class":48,"line":688},[46,6094,3602],{"class":56},[46,6096,3228],{"class":52},[46,6098,6099],{"class":56},"tmp",[46,6101,3228],{"class":52},[46,6103,3250],{"class":56},[46,6105,6106,6109,6111],{"class":48,"line":693},[46,6107,6108],{"class":52},"    return",[46,6110,887],{"class":180},[46,6112,3345],{"class":56},[46,6114,6115],{"class":48,"line":699},[46,6116,3616],{"class":56},[3191,6118,6119],{},[26,6120,6121],{},"2️⃣数组元素逆置",[36,6123,6125],{"className":2187,"code":6124,"language":2189,"meta":41,"style":41},"\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",[43,6126,6127,6132,6138,6148,6156,6160,6195,6211,6243,6256,6261,6266,6278,6288,6298,6303,6312,6322,6327,6332,6359,6363,6379,6383,6394,6403],{"__ignoreMap":41},[46,6128,6129],{"class":48,"line":49},[46,6130,6131],{"class":2253},"\u002F\u002F元素逆置\n",[46,6133,6134,6136],{"class":48,"line":60},[46,6135,3981],{"class":52},[46,6137,3984],{"class":173},[46,6139,6140,6142,6144,6146],{"class":48,"line":200},[46,6141,3989],{"class":52},[46,6143,3992],{"class":52},[46,6145,3995],{"class":169},[46,6147,3345],{"class":56},[46,6149,6150,6152,6154],{"class":48,"line":211},[46,6151,2201],{"class":52},[46,6153,751],{"class":169},[46,6155,4006],{"class":56},[46,6157,6158],{"class":48,"line":222},[46,6159,3597],{"class":56},[46,6161,6162,6165,6167,6169,6171,6173,6175,6177,6179,6181,6183,6185,6187,6189,6191,6193],{"class":48,"line":636},[46,6163,6164],{"class":52},"   int",[46,6166,5980],{"class":56},[46,6168,2506],{"class":180},[46,6170,3125],{"class":56},[46,6172,79],{"class":52},[46,6174,3082],{"class":56},[46,6176,2405],{"class":180},[46,6178,2565],{"class":56},[46,6180,2272],{"class":180},[46,6182,2565],{"class":56},[46,6184,2266],{"class":180},[46,6186,2565],{"class":56},[46,6188,2481],{"class":180},[46,6190,2565],{"class":56},[46,6192,2506],{"class":180},[46,6194,6013],{"class":56},[46,6196,6197,6199,6202,6204,6206,6208],{"class":48,"line":641},[46,6198,6164],{"class":52},[46,6200,6201],{"class":56}," start",[46,6203,79],{"class":52},[46,6205,2379],{"class":180},[46,6207,2250],{"class":56},[46,6209,6210],{"class":2253},"\u002F\u002F起始下标\n",[46,6212,6213,6215,6218,6221,6224,6227,6229,6231,6234,6236,6238,6240],{"class":48,"line":653},[46,6214,6164],{"class":52},[46,6216,6217],{"class":56}," end",[46,6219,6220],{"class":52},"=sizeof",[46,6222,6223],{"class":56},"(arr)",[46,6225,6226],{"class":52},"\u002Fsizeof",[46,6228,5869],{"class":56},[46,6230,2379],{"class":180},[46,6232,6233],{"class":56},"])",[46,6235,534],{"class":52},[46,6237,2405],{"class":180},[46,6239,2250],{"class":56},[46,6241,6242],{"class":2253},"\u002F\u002F结束下标\n",[46,6244,6245,6248,6251,6253],{"class":48,"line":659},[46,6246,6247],{"class":52},"   while",[46,6249,6250],{"class":56}," (start",[46,6252,821],{"class":52},[46,6254,6255],{"class":56},"end)\n",[46,6257,6258],{"class":48,"line":665},[46,6259,6260],{"class":56},"   {\n",[46,6262,6263],{"class":48,"line":670},[46,6264,6265],{"class":2253},"    \u002F\u002F实现元素互换代码\n",[46,6267,6268,6270,6273,6275],{"class":48,"line":676},[46,6269,4015],{"class":52},[46,6271,6272],{"class":56}," temp",[46,6274,79],{"class":52},[46,6276,6277],{"class":56},"arr[start];\n",[46,6279,6280,6283,6285],{"class":48,"line":682},[46,6281,6282],{"class":56},"    arr[start]",[46,6284,79],{"class":52},[46,6286,6287],{"class":56},"arr[end];\n",[46,6289,6290,6293,6295],{"class":48,"line":688},[46,6291,6292],{"class":56},"    arr[end]",[46,6294,79],{"class":52},[46,6296,6297],{"class":56},"temp;\n",[46,6299,6300],{"class":48,"line":693},[46,6301,6302],{"class":2253},"    \u002F\u002F下标更新\n",[46,6304,6305,6308,6310],{"class":48,"line":699},[46,6306,6307],{"class":56},"    start",[46,6309,4321],{"class":52},[46,6311,3345],{"class":56},[46,6313,6314,6317,6320],{"class":48,"line":705},[46,6315,6316],{"class":56},"    end",[46,6318,6319],{"class":52},"--",[46,6321,3345],{"class":56},[46,6323,6324],{"class":48,"line":711},[46,6325,6326],{"class":56},"   }\n",[46,6328,6329],{"class":48,"line":717},[46,6330,6331],{"class":2253},"   \u002F\u002F输出逆置后的数组\n",[46,6333,6334,6337,6339,6341,6343,6345,6347,6349,6351,6353,6355,6357],{"class":48,"line":723},[46,6335,6336],{"class":52},"   for",[46,6338,3702],{"class":56},[46,6340,2201],{"class":52},[46,6342,5052],{"class":56},[46,6344,79],{"class":52},[46,6346,2379],{"class":180},[46,6348,5059],{"class":56},[46,6350,821],{"class":52},[46,6352,2506],{"class":180},[46,6354,5059],{"class":56},[46,6356,4321],{"class":52},[46,6358,459],{"class":56},[46,6360,6361],{"class":48,"line":729},[46,6362,6260],{"class":56},[46,6364,6365,6367,6369,6372,6374,6377],{"class":48,"line":735},[46,6366,3602],{"class":56},[46,6368,3228],{"class":52},[46,6370,6371],{"class":56},"arr[i]",[46,6373,3228],{"class":52},[46,6375,6376],{"class":173},"\" \"",[46,6378,3345],{"class":56},[46,6380,6381],{"class":48,"line":740},[46,6382,6326],{"class":56},[46,6384,6385,6388,6390,6392],{"class":48,"line":745},[46,6386,6387],{"class":169},"   system",[46,6389,1152],{"class":56},[46,6391,4337],{"class":173},[46,6393,4740],{"class":56},[46,6395,6396,6399,6401],{"class":48,"line":763},[46,6397,6398],{"class":52},"   return",[46,6400,887],{"class":180},[46,6402,3345],{"class":56},[46,6404,6405],{"class":48,"line":778},[46,6406,3616],{"class":56},[3191,6408,6409],{},[26,6410,6411],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[36,6413,6415],{"className":2187,"code":6414,"language":2189,"meta":41,"style":41},"\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",[43,6416,6417,6422,6428,6438,6446,6450,6502,6515,6541,6545,6559,6563,6568,6573,6603,6607,6612,6646,6650,6655,6674,6679,6691,6707,6722,6727,6731,6735,6748,6774,6778,6792,6796,6804],{"__ignoreMap":41},[46,6418,6419],{"class":48,"line":49},[46,6420,6421],{"class":2253},"\u002F\u002F冒泡排序,升序\n",[46,6423,6424,6426],{"class":48,"line":60},[46,6425,3981],{"class":52},[46,6427,3984],{"class":173},[46,6429,6430,6432,6434,6436],{"class":48,"line":200},[46,6431,3989],{"class":52},[46,6433,3992],{"class":52},[46,6435,3995],{"class":169},[46,6437,3345],{"class":56},[46,6439,6440,6442,6444],{"class":48,"line":211},[46,6441,2201],{"class":52},[46,6443,751],{"class":169},[46,6445,4006],{"class":56},[46,6447,6448],{"class":48,"line":222},[46,6449,3597],{"class":56},[46,6451,6452,6454,6456,6458,6461,6463,6466,6468,6470,6472,6474,6476,6478,6480,6482,6484,6486,6488,6490,6492,6494,6496,6498,6500],{"class":48,"line":636},[46,6453,4015],{"class":52},[46,6455,5980],{"class":56},[46,6457,2607],{"class":180},[46,6459,6460],{"class":56},"] ",[46,6462,79],{"class":52},[46,6464,6465],{"class":56}," {",[46,6467,2481],{"class":180},[46,6469,2565],{"class":56},[46,6471,2272],{"class":180},[46,6473,2565],{"class":56},[46,6475,2582],{"class":180},[46,6477,2565],{"class":56},[46,6479,2379],{"class":180},[46,6481,2565],{"class":56},[46,6483,2506],{"class":180},[46,6485,2565],{"class":56},[46,6487,2556],{"class":180},[46,6489,2565],{"class":56},[46,6491,2405],{"class":180},[46,6493,2565],{"class":56},[46,6495,2266],{"class":180},[46,6497,2565],{"class":56},[46,6499,2607],{"class":180},[46,6501,6013],{"class":56},[46,6503,6504,6506,6508,6511,6513],{"class":48,"line":641},[46,6505,3602],{"class":56},[46,6507,3228],{"class":52},[46,6509,6510],{"class":173},"\"排序前：\"",[46,6512,3228],{"class":52},[46,6514,3250],{"class":56},[46,6516,6517,6519,6521,6523,6525,6527,6529,6531,6533,6535,6537,6539],{"class":48,"line":653},[46,6518,1140],{"class":52},[46,6520,3702],{"class":56},[46,6522,2201],{"class":52},[46,6524,5052],{"class":56},[46,6526,79],{"class":52},[46,6528,2379],{"class":180},[46,6530,5059],{"class":56},[46,6532,821],{"class":52},[46,6534,2607],{"class":180},[46,6536,5059],{"class":56},[46,6538,4321],{"class":52},[46,6540,459],{"class":56},[46,6542,6543],{"class":48,"line":659},[46,6544,4060],{"class":56},[46,6546,6547,6549,6551,6553,6555,6557],{"class":48,"line":665},[46,6548,5470],{"class":56},[46,6550,3228],{"class":52},[46,6552,6371],{"class":56},[46,6554,3228],{"class":52},[46,6556,6376],{"class":173},[46,6558,3345],{"class":56},[46,6560,6561],{"class":48,"line":670},[46,6562,4217],{"class":56},[46,6564,6565],{"class":48,"line":676},[46,6566,6567],{"class":2253},"    \u002F\u002F开始冒泡排序\n",[46,6569,6570],{"class":48,"line":682},[46,6571,6572],{"class":2253},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[46,6574,6575,6577,6579,6581,6583,6585,6587,6589,6591,6593,6595,6597,6599,6601],{"class":48,"line":688},[46,6576,1140],{"class":52},[46,6578,3702],{"class":56},[46,6580,2201],{"class":52},[46,6582,5052],{"class":56},[46,6584,79],{"class":52},[46,6586,2379],{"class":180},[46,6588,5059],{"class":56},[46,6590,821],{"class":52},[46,6592,2607],{"class":180},[46,6594,534],{"class":52},[46,6596,2405],{"class":180},[46,6598,5059],{"class":56},[46,6600,4321],{"class":52},[46,6602,459],{"class":56},[46,6604,6605],{"class":48,"line":693},[46,6606,4060],{"class":56},[46,6608,6609],{"class":48,"line":699},[46,6610,6611],{"class":2253},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[46,6613,6614,6616,6618,6620,6622,6624,6626,6628,6630,6632,6634,6636,6638,6640,6642,6644],{"class":48,"line":705},[46,6615,5422],{"class":52},[46,6617,3702],{"class":56},[46,6619,2201],{"class":52},[46,6621,5429],{"class":56},[46,6623,79],{"class":52},[46,6625,2379],{"class":180},[46,6627,5436],{"class":56},[46,6629,821],{"class":52},[46,6631,2607],{"class":180},[46,6633,534],{"class":52},[46,6635,2628],{"class":56},[46,6637,534],{"class":52},[46,6639,2405],{"class":180},[46,6641,5436],{"class":56},[46,6643,4321],{"class":52},[46,6645,459],{"class":56},[46,6647,6648],{"class":48,"line":711},[46,6649,4538],{"class":56},[46,6651,6652],{"class":48,"line":717},[46,6653,6654],{"class":2253},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[46,6656,6657,6659,6662,6664,6667,6669,6671],{"class":48,"line":723},[46,6658,878],{"class":52},[46,6660,6661],{"class":56},"(arr[j]",[46,6663,884],{"class":52},[46,6665,6666],{"class":56},"arr[j",[46,6668,2668],{"class":52},[46,6670,2405],{"class":180},[46,6672,6673],{"class":56},"])\n",[46,6675,6676],{"class":48,"line":729},[46,6677,6678],{"class":56},"            {\n",[46,6680,6681,6684,6686,6688],{"class":48,"line":735},[46,6682,6683],{"class":52},"                int",[46,6685,6272],{"class":56},[46,6687,79],{"class":52},[46,6689,6690],{"class":56},"arr[j];\n",[46,6692,6693,6696,6698,6700,6702,6704],{"class":48,"line":740},[46,6694,6695],{"class":56},"                arr[j]",[46,6697,79],{"class":52},[46,6699,6666],{"class":56},[46,6701,2668],{"class":52},[46,6703,2405],{"class":180},[46,6705,6706],{"class":56},"];\n",[46,6708,6709,6712,6714,6716,6718,6720],{"class":48,"line":745},[46,6710,6711],{"class":56},"                arr[j",[46,6713,2668],{"class":52},[46,6715,2405],{"class":180},[46,6717,3125],{"class":56},[46,6719,79],{"class":52},[46,6721,6297],{"class":56},[46,6723,6724],{"class":48,"line":763},[46,6725,6726],{"class":56},"            }\n",[46,6728,6729],{"class":48,"line":778},[46,6730,4557],{"class":56},[46,6732,6733],{"class":48,"line":789},[46,6734,4217],{"class":56},[46,6736,6737,6739,6741,6744,6746],{"class":48,"line":794},[46,6738,3602],{"class":56},[46,6740,3228],{"class":52},[46,6742,6743],{"class":173},"\"排序后：\"",[46,6745,3228],{"class":52},[46,6747,3250],{"class":56},[46,6749,6750,6752,6754,6756,6758,6760,6762,6764,6766,6768,6770,6772],{"class":48,"line":806},[46,6751,1140],{"class":52},[46,6753,3702],{"class":56},[46,6755,2201],{"class":52},[46,6757,5052],{"class":56},[46,6759,79],{"class":52},[46,6761,2379],{"class":180},[46,6763,5059],{"class":56},[46,6765,821],{"class":52},[46,6767,2607],{"class":180},[46,6769,5059],{"class":56},[46,6771,4321],{"class":52},[46,6773,459],{"class":56},[46,6775,6776],{"class":48,"line":829},[46,6777,4060],{"class":56},[46,6779,6780,6782,6784,6786,6788,6790],{"class":48,"line":840},[46,6781,5470],{"class":56},[46,6783,3228],{"class":52},[46,6785,6371],{"class":56},[46,6787,3228],{"class":52},[46,6789,6376],{"class":173},[46,6791,3345],{"class":56},[46,6793,6794],{"class":48,"line":846},[46,6795,4217],{"class":56},[46,6797,6798,6800,6802],{"class":48,"line":852},[46,6799,6108],{"class":52},[46,6801,887],{"class":180},[46,6803,3345],{"class":56},[46,6805,6806],{"class":48,"line":857},[46,6807,3616],{"class":56},[479,6809,6811],{"id":6810},"_172二维数组","1.7.2二维数组",[23,6813,6814],{},[26,6815,6816],{},"二维数组的四种定义方式",[97,6818,6819,6828],{},[100,6820,6821],{},[103,6822,6823,6826],{},[106,6824,6825],{},"序号",[106,6827,5799],{},[120,6829,6830,6840,6849,6858,6867],{},[103,6831,6832,6834],{},[125,6833,2405],{},[125,6835,6836,6837,2250],{},"数据类型 数组名[行数]",[46,6838,6839],{},"列数",[103,6841,6842,6844],{},[125,6843,2272],{},[125,6845,6836,6846,6848],{},[46,6847,6839],{},"={ {数据1,数据2}，{数据3，数据4}... }",[103,6850,6851,6853],{},[125,6852,2266],{},[125,6854,6836,6855,6857],{},[46,6856,6839],{},"={数据1,数据2,数据3...}",[103,6859,6860,6862],{},[125,6861,2481],{},[125,6863,6864,6865,6857],{},"数据类型 数组名[]",[46,6866,6839],{},[103,6868,6869,6872],{},[125,6870,6871],{},"注意：不能只省略列数",[125,6873],{},[23,6875,6876],{"start":60},[26,6877,6878],{},"二维数组数组名",[3191,6880,6881,6884],{},[26,6882,6883],{},"1.查看二维数组所占内存空间",[26,6885,6886],{},"2.获取二维数组首地址",[19,6888,6889],{},"已知二维数组，求二维数组的行数与列数",[36,6891,6893],{"className":2187,"code":6892,"language":2189,"meta":41,"style":41},"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",[43,6894,6895,6903,6907,6925,6929,6947,6963,6968,6993,7026],{"__ignoreMap":41},[46,6896,6897,6899,6901],{"class":48,"line":49},[46,6898,2201],{"class":52},[46,6900,751],{"class":169},[46,6902,4006],{"class":56},[46,6904,6905],{"class":48,"line":60},[46,6906,3597],{"class":56},[46,6908,6909,6911,6913,6915,6918,6920,6922],{"class":48,"line":200},[46,6910,4015],{"class":52},[46,6912,5980],{"class":56},[46,6914,2272],{"class":180},[46,6916,6917],{"class":56},"][",[46,6919,2266],{"class":180},[46,6921,3125],{"class":56},[46,6923,6924],{"class":52},"=\n",[46,6926,6927],{"class":48,"line":211},[46,6928,4060],{"class":56},[46,6930,6931,6934,6936,6938,6940,6942,6944],{"class":48,"line":222},[46,6932,6933],{"class":56},"        {",[46,6935,2405],{"class":180},[46,6937,2565],{"class":56},[46,6939,2272],{"class":180},[46,6941,2565],{"class":56},[46,6943,2266],{"class":180},[46,6945,6946],{"class":56},"},\n",[46,6948,6949,6951,6953,6955,6957,6959,6961],{"class":48,"line":636},[46,6950,6933],{"class":56},[46,6952,2481],{"class":180},[46,6954,2565],{"class":56},[46,6956,2506],{"class":180},[46,6958,2565],{"class":56},[46,6960,2531],{"class":180},[46,6962,3616],{"class":56},[46,6964,6965],{"class":48,"line":641},[46,6966,6967],{"class":56},"    };\n",[46,6969,6970,6972,6974,6977,6979,6981,6983,6985,6987,6989,6991],{"class":48,"line":653},[46,6971,3602],{"class":56},[46,6973,3228],{"class":52},[46,6975,6976],{"class":173},"\"二维数组的行数\"",[46,6978,3424],{"class":52},[46,6980,6223],{"class":56},[46,6982,6226],{"class":52},[46,6984,5869],{"class":56},[46,6986,2379],{"class":180},[46,6988,6233],{"class":56},[46,6990,3228],{"class":52},[46,6992,3250],{"class":56},[46,6994,6995,6997,6999,7002,7004,7006,7008,7010,7012,7014,7016,7018,7020,7022,7024],{"class":48,"line":659},[46,6996,3602],{"class":56},[46,6998,3228],{"class":52},[46,7000,7001],{"class":173},"\"二维数组的列数\"",[46,7003,3424],{"class":52},[46,7005,5869],{"class":56},[46,7007,2379],{"class":180},[46,7009,6233],{"class":56},[46,7011,6226],{"class":52},[46,7013,5869],{"class":56},[46,7015,2379],{"class":180},[46,7017,6917],{"class":56},[46,7019,2379],{"class":180},[46,7021,6233],{"class":56},[46,7023,3228],{"class":52},[46,7025,3250],{"class":56},[46,7027,7028],{"class":48,"line":665},[46,7029,3616],{"class":56},[19,7031,7032],{},"查看二维数组首地址",[36,7034,7036],{"className":2187,"code":7035,"language":2189,"meta":41,"style":41},"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",[43,7037,7038,7055,7081,7106],{"__ignoreMap":41},[46,7039,7040,7042,7044,7047,7049,7051,7053],{"class":48,"line":49},[46,7041,3421],{"class":56},[46,7043,3228],{"class":52},[46,7045,7046],{"class":173},"\"二维数组首地址：\"",[46,7048,3228],{"class":52},[46,7050,5898],{"class":56},[46,7052,3228],{"class":52},[46,7054,3250],{"class":56},[46,7056,7057,7059,7061,7064,7066,7068,7070,7073,7075,7077,7079],{"class":48,"line":60},[46,7058,3421],{"class":56},[46,7060,3228],{"class":52},[46,7062,7063],{"class":173},"\"二维数组第一行的首地址：\"",[46,7065,3228],{"class":52},[46,7067,1152],{"class":56},[46,7069,2201],{"class":52},[46,7071,7072],{"class":56},")arr[",[46,7074,2379],{"class":180},[46,7076,3125],{"class":56},[46,7078,3228],{"class":52},[46,7080,3250],{"class":56},[46,7082,7083,7085,7087,7090,7092,7094,7096,7098,7100,7102,7104],{"class":48,"line":200},[46,7084,3421],{"class":56},[46,7086,3228],{"class":52},[46,7088,7089],{"class":173},"\"二维数组第二行的首地址：\"",[46,7091,3228],{"class":52},[46,7093,1152],{"class":56},[46,7095,2201],{"class":52},[46,7097,7072],{"class":56},[46,7099,2405],{"class":180},[46,7101,3125],{"class":56},[46,7103,3228],{"class":52},[46,7105,3250],{"class":56},[46,7107,7108,7110,7112,7115,7117,7119,7121,7123,7125,7127,7129,7131,7133,7135,7137,7139],{"class":48,"line":211},[46,7109,3421],{"class":56},[46,7111,3228],{"class":52},[46,7113,7114],{"class":173},"\"二维数组第一个元素的首地址:\"",[46,7116,3228],{"class":52},[46,7118,1152],{"class":56},[46,7120,2201],{"class":52},[46,7122,2616],{"class":56},[46,7124,2540],{"class":52},[46,7126,5924],{"class":56},[46,7128,2379],{"class":180},[46,7130,6917],{"class":56},[46,7132,2379],{"class":180},[46,7134,3125],{"class":56},[46,7136,3228],{"class":52},[46,7138,3293],{"class":56},[46,7140,7141],{"class":2253},"\u002F\u002F对于数，要加取址符\n",[2098,7143,7144],{},"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":41,"searchDepth":60,"depth":60,"links":7146},[7147,7148,7149,7157,7158,7164,7169],{"id":2142,"depth":60,"text":2143},{"id":2149,"depth":60,"text":2150},{"id":2164,"depth":60,"text":2165,"children":7150},[7151,7152,7153,7154,7155,7156],{"id":2168,"depth":200,"text":2169},{"id":2213,"depth":200,"text":2214},{"id":2280,"depth":200,"text":2281},{"id":3209,"depth":200,"text":3210},{"id":3299,"depth":200,"text":3300},{"id":3395,"depth":200,"text":3396},{"id":3437,"depth":60,"text":3438},{"id":3505,"depth":60,"text":3506,"children":7159},[7160,7161,7162,7163],{"id":3509,"depth":200,"text":3510},{"id":3531,"depth":200,"text":3532},{"id":3540,"depth":200,"text":3541},{"id":3549,"depth":200,"text":3550},{"id":3558,"depth":60,"text":3559,"children":7165},[7166,7167,7168],{"id":3562,"depth":200,"text":3563},{"id":4235,"depth":200,"text":4236},{"id":5640,"depth":200,"text":5641},{"id":5780,"depth":60,"text":5781,"children":7170},[7171,7172],{"id":5784,"depth":200,"text":5785},{"id":6810,"depth":200,"text":6811},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":2134,"description":41},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":7179,"title":7180,"body":7181,"description":41,"extension":2125,"meta":8278,"navigation":615,"path":8279,"seo":8280,"stem":8281,"__hash__":8282},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":7182,"toc":8270},[7183,7186,7190,7198,7204,7207,7272,7276,7279,7355,7359,7362,7365,7368,7581,7585,7590,7654,7659,7726,7731,7822,7825,7930,7934,7937,7943,8087,8091,8094,8108,8111,8156,8159,8267],[10,7184,7180],{"id":7185},"_2函数",[14,7187,7189],{"id":7188},"_21函数概述","2.1函数概述",[23,7191,7192,7195],{},[26,7193,7194],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[26,7196,7197],{},"语法：",[36,7199,7202],{"className":7200,"code":7201,"language":571,"meta":41},[569],"返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n",[43,7203,7201],{"__ignoreMap":41},[19,7205,7206],{},"小案例",[36,7208,7210],{"className":2187,"code":7209,"language":2189,"meta":41,"style":41},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[43,7211,7212,7217,7240,7244,7261,7268],{"__ignoreMap":41},[46,7213,7214],{"class":48,"line":49},[46,7215,7216],{"class":2253},"\u002F\u002Fnum1,num2形参\n",[46,7218,7219,7221,7224,7226,7228,7231,7233,7235,7238],{"class":48,"line":60},[46,7220,2201],{"class":52},[46,7222,7223],{"class":169}," add",[46,7225,1152],{"class":56},[46,7227,2201],{"class":52},[46,7229,7230],{"class":439}," num1",[46,7232,2565],{"class":56},[46,7234,2201],{"class":52},[46,7236,7237],{"class":439}," num2",[46,7239,459],{"class":56},[46,7241,7242],{"class":48,"line":200},[46,7243,3597],{"class":56},[46,7245,7246,7248,7251,7253,7256,7258],{"class":48,"line":211},[46,7247,4015],{"class":52},[46,7249,7250],{"class":56}," sum",[46,7252,79],{"class":52},[46,7254,7255],{"class":56},"num1",[46,7257,2668],{"class":52},[46,7259,7260],{"class":56},"num2;\n",[46,7262,7263,7265],{"class":48,"line":222},[46,7264,6108],{"class":52},[46,7266,7267],{"class":56}," sum;\n",[46,7269,7270],{"class":48,"line":636},[46,7271,3616],{"class":56},[14,7273,7275],{"id":7274},"_22函数调用","2.2函数调用",[19,7277,7278],{},"调用刚刚写的求和函数",[36,7280,7282],{"className":2187,"code":7281,"language":2189,"meta":41,"style":41},"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",[43,7283,7284,7292,7296,7301,7313,7325,7334,7339,7351],{"__ignoreMap":41},[46,7285,7286,7288,7290],{"class":48,"line":49},[46,7287,2201],{"class":52},[46,7289,751],{"class":169},[46,7291,4006],{"class":56},[46,7293,7294],{"class":48,"line":60},[46,7295,3597],{"class":56},[46,7297,7298],{"class":48,"line":200},[46,7299,7300],{"class":2253},"    \u002F\u002Fa,b实参\n",[46,7302,7303,7305,7307,7309,7311],{"class":48,"line":211},[46,7304,4015],{"class":52},[46,7306,3450],{"class":56},[46,7308,79],{"class":52},[46,7310,2379],{"class":180},[46,7312,3345],{"class":56},[46,7314,7315,7317,7319,7321,7323],{"class":48,"line":222},[46,7316,4015],{"class":52},[46,7318,4854],{"class":56},[46,7320,79],{"class":52},[46,7322,2379],{"class":180},[46,7324,3345],{"class":56},[46,7326,7327,7329,7331],{"class":48,"line":636},[46,7328,4042],{"class":56},[46,7330,3481],{"class":52},[46,7332,7333],{"class":56},"a,b;\n",[46,7335,7336],{"class":48,"line":641},[46,7337,7338],{"class":2253},"    \u002F\u002F调用函数时，实参值传给了形参\n",[46,7340,7341,7343,7345,7348],{"class":48,"line":653},[46,7342,3602],{"class":56},[46,7344,3228],{"class":52},[46,7346,7347],{"class":169},"add",[46,7349,7350],{"class":56},"(a,b);\n",[46,7352,7353],{"class":48,"line":659},[46,7354,3616],{"class":56},[14,7356,7358],{"id":7357},"_23值传递","2.3值传递",[19,7360,7361],{},"值传递就是函数调用时实参将数值传给形参",[19,7363,7364],{},"值传递时，如果形参发生任何改变，不会影响实参",[19,7366,7367],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[36,7369,7371],{"className":2187,"code":7370,"language":2189,"meta":41,"style":41},"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",[43,7372,7373,7395,7399,7412,7429,7447,7458,7467,7476,7489,7505,7521,7530,7534,7542,7546,7558,7570,7577],{"__ignoreMap":41},[46,7374,7375,7378,7381,7383,7385,7387,7389,7391,7393],{"class":48,"line":49},[46,7376,7377],{"class":52},"void",[46,7379,7380],{"class":169}," swap",[46,7382,1152],{"class":56},[46,7384,2201],{"class":52},[46,7386,7230],{"class":439},[46,7388,2565],{"class":56},[46,7390,2201],{"class":52},[46,7392,7237],{"class":439},[46,7394,459],{"class":56},[46,7396,7397],{"class":48,"line":60},[46,7398,3597],{"class":56},[46,7400,7401,7403,7405,7408,7410],{"class":48,"line":200},[46,7402,3602],{"class":56},[46,7404,3228],{"class":52},[46,7406,7407],{"class":173},"\"交换前：\"",[46,7409,3228],{"class":52},[46,7411,3250],{"class":56},[46,7413,7414,7416,7418,7421,7423,7425,7427],{"class":48,"line":211},[46,7415,3602],{"class":56},[46,7417,3228],{"class":52},[46,7419,7420],{"class":173},"\"num1=\"",[46,7422,3228],{"class":52},[46,7424,7255],{"class":56},[46,7426,3228],{"class":52},[46,7428,3250],{"class":56},[46,7430,7431,7433,7435,7438,7440,7443,7445],{"class":48,"line":222},[46,7432,3602],{"class":56},[46,7434,3228],{"class":52},[46,7436,7437],{"class":173},"\"num2=\"",[46,7439,3228],{"class":52},[46,7441,7442],{"class":56},"num2",[46,7444,3228],{"class":52},[46,7446,3250],{"class":56},[46,7448,7449,7451,7453,7455],{"class":48,"line":636},[46,7450,4015],{"class":52},[46,7452,6272],{"class":56},[46,7454,79],{"class":52},[46,7456,7457],{"class":56},"num1;\n",[46,7459,7460,7463,7465],{"class":48,"line":641},[46,7461,7462],{"class":56},"    num1",[46,7464,79],{"class":52},[46,7466,7260],{"class":56},[46,7468,7469,7472,7474],{"class":48,"line":653},[46,7470,7471],{"class":56},"    num2",[46,7473,79],{"class":52},[46,7475,6297],{"class":56},[46,7477,7478,7480,7482,7485,7487],{"class":48,"line":659},[46,7479,3602],{"class":56},[46,7481,3228],{"class":52},[46,7483,7484],{"class":173},"\"交换后：\"",[46,7486,3228],{"class":52},[46,7488,3250],{"class":56},[46,7490,7491,7493,7495,7497,7499,7501,7503],{"class":48,"line":665},[46,7492,3602],{"class":56},[46,7494,3228],{"class":52},[46,7496,7420],{"class":173},[46,7498,3228],{"class":52},[46,7500,7255],{"class":56},[46,7502,3228],{"class":52},[46,7504,3250],{"class":56},[46,7506,7507,7509,7511,7513,7515,7517,7519],{"class":48,"line":670},[46,7508,3602],{"class":56},[46,7510,3228],{"class":52},[46,7512,7437],{"class":173},[46,7514,3228],{"class":52},[46,7516,7442],{"class":56},[46,7518,3228],{"class":52},[46,7520,3250],{"class":56},[46,7522,7523,7525,7527],{"class":48,"line":676},[46,7524,6108],{"class":52},[46,7526,2250],{"class":56},[46,7528,7529],{"class":2253},"\u002F\u002F或者不写\n",[46,7531,7532],{"class":48,"line":682},[46,7533,3616],{"class":56},[46,7535,7536,7538,7540],{"class":48,"line":688},[46,7537,2201],{"class":52},[46,7539,751],{"class":169},[46,7541,4006],{"class":56},[46,7543,7544],{"class":48,"line":693},[46,7545,3597],{"class":56},[46,7547,7548,7550,7552,7554,7556],{"class":48,"line":699},[46,7549,4015],{"class":52},[46,7551,3450],{"class":56},[46,7553,79],{"class":52},[46,7555,2633],{"class":180},[46,7557,3345],{"class":56},[46,7559,7560,7562,7564,7566,7568],{"class":48,"line":705},[46,7561,4015],{"class":52},[46,7563,4854],{"class":56},[46,7565,79],{"class":52},[46,7567,2886],{"class":180},[46,7569,3345],{"class":56},[46,7571,7572,7575],{"class":48,"line":711},[46,7573,7574],{"class":169},"    swap",[46,7576,7350],{"class":56},[46,7578,7579],{"class":48,"line":717},[46,7580,3616],{"class":56},[14,7582,7584],{"id":7583},"_24函数的常见形式","2.4函数的常见形式",[23,7586,7587],{},[26,7588,7589],{},"无参无返",[36,7591,7593],{"className":2187,"code":7592,"language":2189,"meta":41,"style":41},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[43,7594,7595,7604,7608,7621,7625,7633,7637,7642,7650],{"__ignoreMap":41},[46,7596,7597,7599,7602],{"class":48,"line":49},[46,7598,7377],{"class":52},[46,7600,7601],{"class":169}," test01",[46,7603,4006],{"class":56},[46,7605,7606],{"class":48,"line":60},[46,7607,3597],{"class":56},[46,7609,7610,7612,7614,7617,7619],{"class":48,"line":200},[46,7611,3602],{"class":56},[46,7613,3228],{"class":52},[46,7615,7616],{"class":173},"\"你好\"",[46,7618,3228],{"class":52},[46,7620,3250],{"class":56},[46,7622,7623],{"class":48,"line":211},[46,7624,3616],{"class":56},[46,7626,7627,7629,7631],{"class":48,"line":222},[46,7628,2201],{"class":52},[46,7630,751],{"class":169},[46,7632,4006],{"class":56},[46,7634,7635],{"class":48,"line":636},[46,7636,3597],{"class":56},[46,7638,7639],{"class":48,"line":641},[46,7640,7641],{"class":2253},"    \u002F\u002F函数调用\n",[46,7643,7644,7647],{"class":48,"line":653},[46,7645,7646],{"class":169},"    test01",[46,7648,7649],{"class":56},"();\n",[46,7651,7652],{"class":48,"line":659},[46,7653,3616],{"class":56},[23,7655,7656],{"start":60},[26,7657,7658],{},"有参无返",[36,7660,7662],{"className":2187,"code":7661,"language":2189,"meta":41,"style":41},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[43,7663,7664,7679,7683,7695,7699,7707,7711,7722],{"__ignoreMap":41},[46,7665,7666,7668,7671,7673,7675,7677],{"class":48,"line":49},[46,7667,7377],{"class":52},[46,7669,7670],{"class":169}," test02",[46,7672,1152],{"class":56},[46,7674,2201],{"class":52},[46,7676,3450],{"class":439},[46,7678,459],{"class":56},[46,7680,7681],{"class":48,"line":60},[46,7682,3597],{"class":56},[46,7684,7685,7687,7689,7691,7693],{"class":48,"line":200},[46,7686,3602],{"class":56},[46,7688,3228],{"class":52},[46,7690,7616],{"class":173},[46,7692,3228],{"class":52},[46,7694,3250],{"class":56},[46,7696,7697],{"class":48,"line":211},[46,7698,3616],{"class":56},[46,7700,7701,7703,7705],{"class":48,"line":222},[46,7702,2201],{"class":52},[46,7704,751],{"class":169},[46,7706,4006],{"class":56},[46,7708,7709],{"class":48,"line":636},[46,7710,3597],{"class":56},[46,7712,7713,7716,7718,7720],{"class":48,"line":641},[46,7714,7715],{"class":169},"    test02",[46,7717,1152],{"class":56},[46,7719,1155],{"class":180},[46,7721,4740],{"class":56},[46,7723,7724],{"class":48,"line":653},[46,7725,3616],{"class":56},[23,7727,7728],{"start":200},[26,7729,7730],{},"无参有返",[36,7732,7734],{"className":2187,"code":7733,"language":2189,"meta":41,"style":41},"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",[43,7735,7736,7745,7749,7761,7770,7774,7782,7786,7799,7818],{"__ignoreMap":41},[46,7737,7738,7740,7743],{"class":48,"line":49},[46,7739,2201],{"class":52},[46,7741,7742],{"class":169}," test03",[46,7744,4006],{"class":56},[46,7746,7747],{"class":48,"line":60},[46,7748,3597],{"class":56},[46,7750,7751,7753,7755,7757,7759],{"class":48,"line":200},[46,7752,3602],{"class":56},[46,7754,3228],{"class":52},[46,7756,7616],{"class":173},[46,7758,3228],{"class":52},[46,7760,3250],{"class":56},[46,7762,7763,7765,7768],{"class":48,"line":211},[46,7764,6108],{"class":52},[46,7766,7767],{"class":180}," 100",[46,7769,3345],{"class":56},[46,7771,7772],{"class":48,"line":222},[46,7773,3616],{"class":56},[46,7775,7776,7778,7780],{"class":48,"line":636},[46,7777,2201],{"class":52},[46,7779,751],{"class":169},[46,7781,4006],{"class":56},[46,7783,7784],{"class":48,"line":641},[46,7785,3597],{"class":56},[46,7787,7788,7790,7792,7794,7797],{"class":48,"line":653},[46,7789,4015],{"class":52},[46,7791,7230],{"class":56},[46,7793,79],{"class":52},[46,7795,7796],{"class":169},"test03",[46,7798,7649],{"class":56},[46,7800,7801,7803,7805,7807,7809,7811,7813,7815],{"class":48,"line":659},[46,7802,3602],{"class":56},[46,7804,3228],{"class":52},[46,7806,7420],{"class":173},[46,7808,3228],{"class":52},[46,7810,7255],{"class":56},[46,7812,3228],{"class":52},[46,7814,3293],{"class":56},[46,7816,7817],{"class":2253}," \u002F\u002F100\n",[46,7819,7820],{"class":48,"line":665},[46,7821,3616],{"class":56},[19,7823,7824],{},"4.有参有返",[36,7826,7828],{"className":2187,"code":7827,"language":2189,"meta":41,"style":41},"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",[43,7829,7830,7845,7849,7862,7868,7872,7881,7885,7897,7911,7926],{"__ignoreMap":41},[46,7831,7832,7834,7837,7839,7841,7843],{"class":48,"line":49},[46,7833,2201],{"class":52},[46,7835,7836],{"class":169}," test04",[46,7838,1152],{"class":56},[46,7840,2201],{"class":52},[46,7842,3450],{"class":439},[46,7844,459],{"class":56},[46,7846,7847],{"class":48,"line":60},[46,7848,3597],{"class":56},[46,7850,7851,7853,7855,7858,7860],{"class":48,"line":200},[46,7852,3602],{"class":56},[46,7854,3228],{"class":52},[46,7856,7857],{"class":173},"\"hello\"",[46,7859,3228],{"class":52},[46,7861,3250],{"class":56},[46,7863,7864,7866],{"class":48,"line":211},[46,7865,6108],{"class":52},[46,7867,3484],{"class":56},[46,7869,7870],{"class":48,"line":222},[46,7871,3616],{"class":56},[46,7873,7874,7876,7879],{"class":48,"line":636},[46,7875,2201],{"class":52},[46,7877,7878],{"class":169}," mian",[46,7880,4006],{"class":56},[46,7882,7883],{"class":48,"line":641},[46,7884,3597],{"class":56},[46,7886,7887,7889,7891,7893,7895],{"class":48,"line":653},[46,7888,4015],{"class":52},[46,7890,4854],{"class":56},[46,7892,79],{"class":52},[46,7894,2405],{"class":180},[46,7896,3345],{"class":56},[46,7898,7899,7901,7903,7905,7908],{"class":48,"line":659},[46,7900,4015],{"class":52},[46,7902,4870],{"class":56},[46,7904,79],{"class":52},[46,7906,7907],{"class":169},"test04",[46,7909,7910],{"class":56},"(b);\n",[46,7912,7913,7915,7917,7919,7921,7923],{"class":48,"line":665},[46,7914,3602],{"class":56},[46,7916,3228],{"class":52},[46,7918,2476],{"class":56},[46,7920,3228],{"class":52},[46,7922,3293],{"class":56},[46,7924,7925],{"class":2253}," \u002F\u002F1\n",[46,7927,7928],{"class":48,"line":670},[46,7929,3616],{"class":56},[14,7931,7933],{"id":7932},"_25函数的声明","2.5函数的声明",[19,7935,7936],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[19,7938,7939,7940],{},"函数的",[2339,7941,7942],{},"声明可以多次，但是函数的定义只能有一次",[36,7944,7946],{"className":2187,"code":7945,"language":2189,"meta":41,"style":41},"\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",[43,7947,7948,7953,7958,7983,7992,7996,8008,8020,8036,8040,8060,8064,8083],{"__ignoreMap":41},[46,7949,7950],{"class":48,"line":49},[46,7951,7952],{"class":2253},"\u002F\u002F函数声明\n",[46,7954,7955],{"class":48,"line":60},[46,7956,7957],{"class":2253},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[46,7959,7960,7962,7965,7967,7969,7971,7973,7975,7977,7980],{"class":48,"line":200},[46,7961,2201],{"class":52},[46,7963,7964],{"class":169}," max",[46,7966,1152],{"class":56},[46,7968,2201],{"class":52},[46,7970,3450],{"class":439},[46,7972,2565],{"class":56},[46,7974,2201],{"class":52},[46,7976,4854],{"class":439},[46,7978,7979],{"class":56},");",[46,7981,7982],{"class":2253},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[46,7984,7985,7987,7989],{"class":48,"line":211},[46,7986,2201],{"class":52},[46,7988,751],{"class":169},[46,7990,7991],{"class":56},"() \n",[46,7993,7994],{"class":48,"line":222},[46,7995,3597],{"class":56},[46,7997,7998,8000,8002,8004,8006],{"class":48,"line":636},[46,7999,4015],{"class":52},[46,8001,3450],{"class":56},[46,8003,79],{"class":52},[46,8005,2633],{"class":180},[46,8007,3345],{"class":56},[46,8009,8010,8012,8014,8016,8018],{"class":48,"line":641},[46,8011,4015],{"class":52},[46,8013,4854],{"class":56},[46,8015,79],{"class":52},[46,8017,2886],{"class":180},[46,8019,3345],{"class":56},[46,8021,8022,8024,8026,8029,8032,8034],{"class":48,"line":653},[46,8023,3602],{"class":56},[46,8025,3228],{"class":52},[46,8027,8028],{"class":169},"max",[46,8030,8031],{"class":56},"(a,b)",[46,8033,3228],{"class":52},[46,8035,3250],{"class":56},[46,8037,8038],{"class":48,"line":659},[46,8039,3616],{"class":56},[46,8041,8042,8044,8046,8048,8050,8052,8054,8056,8058],{"class":48,"line":665},[46,8043,2201],{"class":52},[46,8045,7964],{"class":169},[46,8047,1152],{"class":56},[46,8049,2201],{"class":52},[46,8051,3450],{"class":439},[46,8053,2565],{"class":56},[46,8055,2201],{"class":52},[46,8057,4854],{"class":439},[46,8059,459],{"class":56},[46,8061,8062],{"class":48,"line":670},[46,8063,3597],{"class":56},[46,8065,8066,8068,8070,8072,8074,8076,8078,8080],{"class":48,"line":676},[46,8067,6108],{"class":52},[46,8069,3450],{"class":56},[46,8071,884],{"class":52},[46,8073,2451],{"class":56},[46,8075,3170],{"class":52},[46,8077,2426],{"class":56},[46,8079,3045],{"class":52},[46,8081,8082],{"class":56},"b;\n",[46,8084,8085],{"class":48,"line":682},[46,8086,3616],{"class":56},[14,8088,8090],{"id":8089},"_26函数的分文件编写","2.6函数的分文件编写",[19,8092,8093],{},"4个步骤：",[3191,8095,8096,8099,8102,8105],{},[26,8097,8098],{},"1.创建后缀名为.h的头文件",[26,8100,8101],{},"2.创建后缀名为.cpp的源文件",[26,8103,8104],{},"3.在头文件中写函数的定义",[26,8106,8107],{},"4.在源文件中写函数的定义\n示例：",[19,8109,8110],{},"头文件：swap.h",[36,8112,8114],{"className":2187,"code":8113,"language":2189,"meta":41,"style":41},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[43,8115,8116,8122,8132,8136],{"__ignoreMap":41},[46,8117,8118,8120],{"class":48,"line":49},[46,8119,3981],{"class":52},[46,8121,3984],{"class":173},[46,8123,8124,8126,8128,8130],{"class":48,"line":60},[46,8125,3989],{"class":52},[46,8127,3992],{"class":52},[46,8129,3995],{"class":169},[46,8131,3345],{"class":56},[46,8133,8134],{"class":48,"line":200},[46,8135,7952],{"class":2253},[46,8137,8138,8140,8142,8144,8146,8148,8150,8152,8154],{"class":48,"line":211},[46,8139,7377],{"class":52},[46,8141,7380],{"class":169},[46,8143,1152],{"class":56},[46,8145,2201],{"class":52},[46,8147,3450],{"class":439},[46,8149,2565],{"class":56},[46,8151,2201],{"class":52},[46,8153,4854],{"class":439},[46,8155,4740],{"class":56},[19,8157,8158],{},"源文件：swap.cpp",[36,8160,8162],{"className":2187,"code":8161,"language":2189,"meta":41,"style":41},"#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",[43,8163,8164,8171,8176,8196,8200,8211,8220,8229,8246,8263],{"__ignoreMap":41},[46,8165,8166,8168],{"class":48,"line":49},[46,8167,3981],{"class":52},[46,8169,8170],{"class":173}," \"swap.h\"\n",[46,8172,8173],{"class":48,"line":60},[46,8174,8175],{"class":2253},"\u002F\u002F函数的定义\n",[46,8177,8178,8180,8182,8184,8186,8188,8190,8192,8194],{"class":48,"line":200},[46,8179,7377],{"class":52},[46,8181,7380],{"class":169},[46,8183,1152],{"class":56},[46,8185,2201],{"class":52},[46,8187,3450],{"class":439},[46,8189,2565],{"class":56},[46,8191,2201],{"class":52},[46,8193,4854],{"class":439},[46,8195,459],{"class":56},[46,8197,8198],{"class":48,"line":211},[46,8199,3597],{"class":56},[46,8201,8202,8204,8206,8208],{"class":48,"line":222},[46,8203,4015],{"class":52},[46,8205,6272],{"class":56},[46,8207,79],{"class":52},[46,8209,8210],{"class":56},"a;\n",[46,8212,8213,8216,8218],{"class":48,"line":636},[46,8214,8215],{"class":56},"    a",[46,8217,79],{"class":52},[46,8219,8082],{"class":56},[46,8221,8222,8225,8227],{"class":48,"line":641},[46,8223,8224],{"class":56},"    b",[46,8226,79],{"class":52},[46,8228,6297],{"class":56},[46,8230,8231,8233,8235,8238,8240,8242,8244],{"class":48,"line":653},[46,8232,3602],{"class":56},[46,8234,3228],{"class":52},[46,8236,8237],{"class":173},"\"a=\"",[46,8239,3228],{"class":52},[46,8241,2426],{"class":56},[46,8243,3228],{"class":52},[46,8245,3250],{"class":56},[46,8247,8248,8250,8252,8255,8257,8259,8261],{"class":48,"line":659},[46,8249,3602],{"class":56},[46,8251,3228],{"class":52},[46,8253,8254],{"class":173},"\"b=\"",[46,8256,3228],{"class":52},[46,8258,2451],{"class":56},[46,8260,3228],{"class":52},[46,8262,3250],{"class":56},[46,8264,8265],{"class":48,"line":665},[46,8266,3616],{"class":56},[2098,8268,8269],{},"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":41,"searchDepth":60,"depth":60,"links":8271},[8272,8273,8274,8275,8276,8277],{"id":7188,"depth":60,"text":7189},{"id":7274,"depth":60,"text":7275},{"id":7357,"depth":60,"text":7358},{"id":7583,"depth":60,"text":7584},{"id":7932,"depth":60,"text":7933},{"id":8089,"depth":60,"text":8090},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":7180,"description":41},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":8284,"title":8285,"body":8286,"description":8293,"extension":2125,"meta":9698,"navigation":615,"path":9699,"seo":9700,"stem":9701,"__hash__":9702},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":8287,"toc":9688},[8288,8291,8294,8298,8460,8464,8467,8470,8473,8476,8616,8620,8623,8626,8629,8694,8698,8703,8770,8773,8777,8780,8791,8796,8816,8819,8824,8843,8846,8850,8869,8872,8876,9111,9115,9118,9121,9124,9286,9289,9293,9296,9302,9685],[10,8289,8285],{"id":8290},"_3指针",[19,8292,8293],{},"通过指针保存一个地址，指针就是个地址",[14,8295,8297],{"id":8296},"_31定义指针","3.1定义指针",[36,8299,8301],{"className":2187,"code":8300,"language":2189,"meta":41,"style":41},"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",[43,8302,8303,8311,8315,8320,8332,8337,8345,8355,8373,8393,8397,8402,8407,8412,8426,8442,8456],{"__ignoreMap":41},[46,8304,8305,8307,8309],{"class":48,"line":49},[46,8306,2201],{"class":52},[46,8308,751],{"class":169},[46,8310,4006],{"class":56},[46,8312,8313],{"class":48,"line":60},[46,8314,3597],{"class":56},[46,8316,8317],{"class":48,"line":200},[46,8318,8319],{"class":2253},"    \u002F\u002F1.定义指针\n",[46,8321,8322,8324,8326,8328,8330],{"class":48,"line":211},[46,8323,4015],{"class":52},[46,8325,3450],{"class":56},[46,8327,79],{"class":52},[46,8329,2633],{"class":180},[46,8331,3345],{"class":56},[46,8333,8334],{"class":48,"line":222},[46,8335,8336],{"class":2253},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[46,8338,8339,8342],{"class":48,"line":636},[46,8340,8341],{"class":52},"    int*",[46,8343,8344],{"class":56},"p;\n",[46,8346,8347,8350,8353],{"class":48,"line":641},[46,8348,8349],{"class":56},"    p",[46,8351,8352],{"class":52},"=&",[46,8354,8210],{"class":56},[46,8356,8357,8359,8361,8364,8367,8369,8371],{"class":48,"line":653},[46,8358,3602],{"class":56},[46,8360,3228],{"class":52},[46,8362,8363],{"class":173},"\"a的地址为：\"",[46,8365,8366],{"class":52},"\u003C\u003C&",[46,8368,2426],{"class":56},[46,8370,3228],{"class":52},[46,8372,3250],{"class":56},[46,8374,8375,8377,8379,8382,8384,8386,8388,8390],{"class":48,"line":659},[46,8376,3602],{"class":56},[46,8378,3228],{"class":52},[46,8380,8381],{"class":173},"\"指针p为：\"",[46,8383,3228],{"class":52},[46,8385,19],{"class":56},[46,8387,3228],{"class":52},[46,8389,3293],{"class":56},[46,8391,8392],{"class":2253},"\u002F\u002F指针p表示的就是a的地址\n",[46,8394,8395],{"class":48,"line":665},[46,8396,616],{"emptyLinePlaceholder":615},[46,8398,8399],{"class":48,"line":670},[46,8400,8401],{"class":2253},"    \u002F\u002F2.使用指针\n",[46,8403,8404],{"class":48,"line":676},[46,8405,8406],{"class":2253},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[46,8408,8409],{"class":48,"line":682},[46,8410,8411],{"class":2253},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[46,8413,8414,8417,8419,8421,8424],{"class":48,"line":688},[46,8415,8416],{"class":52},"    *",[46,8418,19],{"class":56},[46,8420,79],{"class":52},[46,8422,8423],{"class":180},"1000",[46,8425,3345],{"class":56},[46,8427,8428,8430,8433,8435,8437,8439],{"class":48,"line":693},[46,8429,3602],{"class":56},[46,8431,8432],{"class":52},"\u003C\u003C*",[46,8434,19],{"class":56},[46,8436,3228],{"class":52},[46,8438,3293],{"class":56},[46,8440,8441],{"class":2253},"\u002F\u002F1000\n",[46,8443,8444,8446,8448,8450,8452,8454],{"class":48,"line":699},[46,8445,3602],{"class":56},[46,8447,3228],{"class":52},[46,8449,2426],{"class":56},[46,8451,3228],{"class":52},[46,8453,3293],{"class":56},[46,8455,8441],{"class":2253},[46,8457,8458],{"class":48,"line":705},[46,8459,3616],{"class":56},[14,8461,8463],{"id":8462},"_32指针所占的内存空间","3.2指针所占的内存空间",[19,8465,8466],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[19,8468,8469],{},"在32位操作系统下：占用4个字节空间",[19,8471,8472],{},"在64位操作系统下：占用8个字节空间",[19,8474,8475],{},"上方是不管啥数据类型的",[36,8477,8479],{"className":2187,"code":8478,"language":2189,"meta":41,"style":41},"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",[43,8480,8481,8489,8493,8498,8510,8515,8520,8525,8538,8560,8586,8612],{"__ignoreMap":41},[46,8482,8483,8485,8487],{"class":48,"line":49},[46,8484,2201],{"class":52},[46,8486,751],{"class":169},[46,8488,4006],{"class":56},[46,8490,8491],{"class":48,"line":60},[46,8492,3597],{"class":56},[46,8494,8495],{"class":48,"line":200},[46,8496,8497],{"class":2253},"    \u002F\u002F指针所占内存空间\n",[46,8499,8500,8502,8504,8506,8508],{"class":48,"line":211},[46,8501,4015],{"class":52},[46,8503,3450],{"class":56},[46,8505,79],{"class":52},[46,8507,2633],{"class":180},[46,8509,3345],{"class":56},[46,8511,8512],{"class":48,"line":222},[46,8513,8514],{"class":2253},"    \u002F\u002Fint *p;\n",[46,8516,8517],{"class":48,"line":636},[46,8518,8519],{"class":2253},"    \u002F\u002Fp=&a;\n",[46,8521,8522],{"class":48,"line":641},[46,8523,8524],{"class":2253},"    \u002F\u002F上述可以写为以下：\n",[46,8526,8527,8529,8532,8534,8536],{"class":48,"line":653},[46,8528,4015],{"class":52},[46,8530,8531],{"class":52}," *",[46,8533,19],{"class":56},[46,8535,8352],{"class":52},[46,8537,8210],{"class":56},[46,8539,8540,8543,8545,8548,8550,8553,8555,8557],{"class":48,"line":659},[46,8541,8542],{"class":56},"    cout ",[46,8544,3228],{"class":52},[46,8546,8547],{"class":173},"\"sizeof(int *)\"",[46,8549,3424],{"class":52},[46,8551,8552],{"class":56},"(p)",[46,8554,3228],{"class":52},[46,8556,3293],{"class":56},[46,8558,8559],{"class":2253},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[46,8561,8562,8564,8566,8568,8570,8572,8574,8576,8578,8580,8583],{"class":48,"line":665},[46,8563,8542],{"class":56},[46,8565,3228],{"class":52},[46,8567,8547],{"class":173},[46,8569,3424],{"class":52},[46,8571,1152],{"class":56},[46,8573,2201],{"class":52},[46,8575,8531],{"class":52},[46,8577,2616],{"class":56},[46,8579,3228],{"class":52},[46,8581,8582],{"class":56},"endl",[46,8584,8585],{"class":2253},"  \u002F\u002F4字节(32位的话)\n",[46,8587,8588,8590,8592,8595,8597,8599,8601,8603,8605,8607,8609],{"class":48,"line":670},[46,8589,8542],{"class":56},[46,8591,3228],{"class":52},[46,8593,8594],{"class":173},"\"sizeof(char *)\"",[46,8596,3424],{"class":52},[46,8598,1152],{"class":56},[46,8600,2291],{"class":52},[46,8602,8531],{"class":52},[46,8604,2616],{"class":56},[46,8606,3228],{"class":52},[46,8608,3293],{"class":56},[46,8610,8611],{"class":2253}," \u002F\u002F4字节(32位的话)\n",[46,8613,8614],{"class":48,"line":676},[46,8615,3616],{"class":56},[14,8617,8619],{"id":8618},"_33空指针","3.3空指针",[19,8621,8622],{},"空指针：指针变量指向内存中编号为0的空间",[19,8624,8625],{},"用途：初始化指针变量",[19,8627,8628],{},"注意：空指针指向的内存是不可以访问的",[36,8630,8632],{"className":2187,"code":8631,"language":2189,"meta":41,"style":41},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[43,8633,8634,8642,8646,8651,8665,8670,8685,8690],{"__ignoreMap":41},[46,8635,8636,8638,8640],{"class":48,"line":49},[46,8637,2201],{"class":52},[46,8639,751],{"class":169},[46,8641,4006],{"class":56},[46,8643,8644],{"class":48,"line":60},[46,8645,3597],{"class":56},[46,8647,8648],{"class":48,"line":200},[46,8649,8650],{"class":2253},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[46,8652,8653,8655,8657,8659,8661,8663],{"class":48,"line":211},[46,8654,4015],{"class":52},[46,8656,8531],{"class":52},[46,8658,19],{"class":56},[46,8660,79],{"class":52},[46,8662,4421],{"class":180},[46,8664,3345],{"class":56},[46,8666,8667],{"class":48,"line":222},[46,8668,8669],{"class":2253},"    \u002F\u002F2.空指针不能进行访问\n",[46,8671,8672,8674,8676,8678,8680,8682],{"class":48,"line":636},[46,8673,8416],{"class":52},[46,8675,19],{"class":56},[46,8677,79],{"class":52},[46,8679,1155],{"class":180},[46,8681,2250],{"class":56},[46,8683,8684],{"class":2253},"\u002F\u002F直接报错，压根不能访问\n",[46,8686,8687],{"class":48,"line":641},[46,8688,8689],{"class":2253},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[46,8691,8692],{"class":48,"line":653},[46,8693,3616],{"class":56},[14,8695,8697],{"id":8696},"_34野指针","3.4野指针",[19,8699,8700],{},[2339,8701,8702],{},"指针变量指向非法的内存空间",[36,8704,8706],{"className":2187,"code":8705,"language":2189,"meta":41,"style":41},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[43,8707,8708,8716,8720,8749,8754,8766],{"__ignoreMap":41},[46,8709,8710,8712,8714],{"class":48,"line":49},[46,8711,2201],{"class":52},[46,8713,751],{"class":169},[46,8715,4006],{"class":56},[46,8717,8718],{"class":48,"line":60},[46,8719,3597],{"class":56},[46,8721,8722,8724,8726,8728,8730,8732,8734,8736,8738,8741,8744,8746],{"class":48,"line":200},[46,8723,4015],{"class":52},[46,8725,8531],{"class":52},[46,8727,19],{"class":56},[46,8729,79],{"class":52},[46,8731,1152],{"class":56},[46,8733,2201],{"class":52},[46,8735,8531],{"class":52},[46,8737,2616],{"class":56},[46,8739,8740],{"class":52},"0x",[46,8742,8743],{"class":180},"1100",[46,8745,2250],{"class":56},[46,8747,8748],{"class":2253}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[46,8750,8751],{"class":48,"line":211},[46,8752,8753],{"class":2253},"    \u002F\u002F访问野指针报错\n",[46,8755,8756,8758,8760,8762,8764],{"class":48,"line":222},[46,8757,3602],{"class":56},[46,8759,8432],{"class":52},[46,8761,19],{"class":56},[46,8763,3228],{"class":52},[46,8765,3250],{"class":56},[46,8767,8768],{"class":48,"line":636},[46,8769,3616],{"class":56},[19,8771,8772],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,8774,8776],{"id":8775},"_35const修饰指针","3.5const修饰指针",[19,8778,8779],{},"三种情况：",[3191,8781,8782,8785,8788],{},[26,8783,8784],{},"const修饰指针 常量指针",[26,8786,8787],{},"const修饰常量 指针常量",[26,8789,8790],{},"const即修饰指针，又修饰常量",[23,8792,8793],{},[26,8794,8795],{},"常量指针",[36,8797,8799],{"className":2187,"code":8798,"language":2189,"meta":41,"style":41},"const int *p=&a;\n",[43,8800,8801],{"__ignoreMap":41},[46,8802,8803,8806,8808,8810,8812,8814],{"class":48,"line":49},[46,8804,8805],{"class":52},"const",[46,8807,4411],{"class":52},[46,8809,8531],{"class":52},[46,8811,19],{"class":56},[46,8813,8352],{"class":52},[46,8815,8210],{"class":56},[19,8817,8818],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[23,8820,8821],{"start":60},[26,8822,8823],{},"指针常量",[36,8825,8827],{"className":2187,"code":8826,"language":2189,"meta":41,"style":41},"int *const p=&a;\n",[43,8828,8829],{"__ignoreMap":41},[46,8830,8831,8833,8836,8839,8841],{"class":48,"line":49},[46,8832,2201],{"class":52},[46,8834,8835],{"class":52}," *const",[46,8837,8838],{"class":56}," p",[46,8840,8352],{"class":52},[46,8842,8210],{"class":56},[19,8844,8845],{},"指针的指向不可以改，指针指向的值可以改",[23,8847,8848],{"start":200},[26,8849,8790],{},[36,8851,8853],{"className":2187,"code":8852,"language":2189,"meta":41,"style":41},"const int *const p=&a;\n",[43,8854,8855],{"__ignoreMap":41},[46,8856,8857,8859,8861,8863,8865,8867],{"class":48,"line":49},[46,8858,8805],{"class":52},[46,8860,4411],{"class":52},[46,8862,8835],{"class":52},[46,8864,8838],{"class":56},[46,8866,8352],{"class":52},[46,8868,8210],{"class":56},[19,8870,8871],{},"指针的指向和指针指向的值都不可以改变",[14,8873,8875],{"id":8874},"_36指针和数组","3.6指针和数组",[36,8877,8879],{"className":2187,"code":8878,"language":2189,"meta":41,"style":41},"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",[43,8880,8881,8889,8893,8898,8952,8973,8989,9005,9016,9033,9038,9052,9078,9082,9094,9103,9107],{"__ignoreMap":41},[46,8882,8883,8885,8887],{"class":48,"line":49},[46,8884,2201],{"class":52},[46,8886,751],{"class":169},[46,8888,4006],{"class":56},[46,8890,8891],{"class":48,"line":60},[46,8892,3597],{"class":56},[46,8894,8895],{"class":48,"line":200},[46,8896,8897],{"class":2253},"    \u002F\u002F利用指针访问数组中的元素\n",[46,8899,8900,8902,8904,8906,8908,8910,8912,8914,8916,8918,8920,8922,8924,8926,8928,8930,8932,8934,8936,8938,8940,8942,8944,8946,8948,8950],{"class":48,"line":211},[46,8901,4015],{"class":52},[46,8903,5980],{"class":56},[46,8905,2633],{"class":180},[46,8907,3125],{"class":56},[46,8909,79],{"class":52},[46,8911,3082],{"class":56},[46,8913,2405],{"class":180},[46,8915,2565],{"class":56},[46,8917,2272],{"class":180},[46,8919,2565],{"class":56},[46,8921,2266],{"class":180},[46,8923,2565],{"class":56},[46,8925,2481],{"class":180},[46,8927,2565],{"class":56},[46,8929,2506],{"class":180},[46,8931,2565],{"class":56},[46,8933,2531],{"class":180},[46,8935,2565],{"class":56},[46,8937,2556],{"class":180},[46,8939,2565],{"class":56},[46,8941,2582],{"class":180},[46,8943,2565],{"class":56},[46,8945,2607],{"class":180},[46,8947,2565],{"class":56},[46,8949,2633],{"class":180},[46,8951,6013],{"class":56},[46,8953,8954,8956,8958,8961,8963,8965,8967,8969,8971],{"class":48,"line":222},[46,8955,3602],{"class":56},[46,8957,3228],{"class":52},[46,8959,8960],{"class":173},"\"数组的第一个元素为：\"",[46,8962,3228],{"class":52},[46,8964,5924],{"class":56},[46,8966,2379],{"class":180},[46,8968,3125],{"class":56},[46,8970,3228],{"class":52},[46,8972,3250],{"class":56},[46,8974,8975,8977,8979,8981,8983,8986],{"class":48,"line":636},[46,8976,4015],{"class":52},[46,8978,8531],{"class":52},[46,8980,19],{"class":56},[46,8982,79],{"class":52},[46,8984,8985],{"class":56},"arr;",[46,8987,8988],{"class":2253},"\u002F\u002F注意数才要加取地址符号&\n",[46,8990,8991,8993,8995,8997,8999,9001,9003],{"class":48,"line":641},[46,8992,3602],{"class":56},[46,8994,3228],{"class":52},[46,8996,8960],{"class":173},[46,8998,8432],{"class":52},[46,9000,19],{"class":56},[46,9002,3228],{"class":52},[46,9004,3250],{"class":56},[46,9006,9007,9009,9011,9013],{"class":48,"line":653},[46,9008,8349],{"class":56},[46,9010,4321],{"class":52},[46,9012,2250],{"class":56},[46,9014,9015],{"class":2253}," \u002F\u002F让指针向后偏移4个字节\n",[46,9017,9018,9020,9022,9025,9027,9029,9031],{"class":48,"line":659},[46,9019,3602],{"class":56},[46,9021,3228],{"class":52},[46,9023,9024],{"class":173},"\"数组的第二个元素为：\"",[46,9026,8432],{"class":52},[46,9028,19],{"class":56},[46,9030,3228],{"class":52},[46,9032,3250],{"class":56},[46,9034,9035],{"class":48,"line":665},[46,9036,9037],{"class":2253},"    \u002F\u002F利用指针遍历数组\n",[46,9039,9040,9042,9044,9047,9049],{"class":48,"line":670},[46,9041,4015],{"class":52},[46,9043,8531],{"class":52},[46,9045,9046],{"class":56},"p2",[46,9048,79],{"class":52},[46,9050,9051],{"class":56},"arr;\n",[46,9053,9054,9056,9058,9060,9062,9064,9066,9068,9070,9072,9074,9076],{"class":48,"line":676},[46,9055,1140],{"class":52},[46,9057,3702],{"class":56},[46,9059,2201],{"class":52},[46,9061,5052],{"class":56},[46,9063,79],{"class":52},[46,9065,2379],{"class":180},[46,9067,5059],{"class":56},[46,9069,821],{"class":52},[46,9071,2633],{"class":180},[46,9073,5059],{"class":56},[46,9075,4321],{"class":52},[46,9077,459],{"class":56},[46,9079,9080],{"class":48,"line":682},[46,9081,4060],{"class":56},[46,9083,9084,9086,9088,9090,9092],{"class":48,"line":688},[46,9085,5470],{"class":56},[46,9087,8432],{"class":52},[46,9089,9046],{"class":56},[46,9091,3228],{"class":52},[46,9093,3250],{"class":56},[46,9095,9096,9099,9101],{"class":48,"line":693},[46,9097,9098],{"class":56},"        p2",[46,9100,4321],{"class":52},[46,9102,3345],{"class":56},[46,9104,9105],{"class":48,"line":699},[46,9106,4217],{"class":56},[46,9108,9109],{"class":48,"line":705},[46,9110,3616],{"class":56},[14,9112,9114],{"id":9113},"_37指针和函数","3.7指针和函数",[19,9116,9117],{},"利用指针做函数参数，可以修改实参的值",[19,9119,9120],{},"值传递：只改变形参，不改变实参",[19,9122,9123],{},"地址传递：",[36,9125,9127],{"className":2187,"code":9126,"language":2189,"meta":41,"style":41},"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",[43,9128,9129,9154,9158,9170,9181,9191,9195,9203,9207,9219,9231,9236,9252,9267,9282],{"__ignoreMap":41},[46,9130,9131,9133,9135,9137,9139,9141,9144,9146,9148,9150,9152],{"class":48,"line":49},[46,9132,7377],{"class":52},[46,9134,7380],{"class":169},[46,9136,1152],{"class":56},[46,9138,2201],{"class":52},[46,9140,8531],{"class":52},[46,9142,9143],{"class":439},"p1",[46,9145,2565],{"class":56},[46,9147,2201],{"class":52},[46,9149,8531],{"class":52},[46,9151,9046],{"class":439},[46,9153,459],{"class":56},[46,9155,9156],{"class":48,"line":60},[46,9157,3597],{"class":56},[46,9159,9160,9162,9164,9167],{"class":48,"line":200},[46,9161,4015],{"class":52},[46,9163,6272],{"class":56},[46,9165,9166],{"class":52},"=*",[46,9168,9169],{"class":56},"p1;\n",[46,9171,9172,9174,9176,9178],{"class":48,"line":211},[46,9173,8416],{"class":52},[46,9175,9143],{"class":56},[46,9177,9166],{"class":52},[46,9179,9180],{"class":56},"p2;\n",[46,9182,9183,9185,9187,9189],{"class":48,"line":222},[46,9184,8416],{"class":52},[46,9186,9046],{"class":56},[46,9188,79],{"class":52},[46,9190,6297],{"class":56},[46,9192,9193],{"class":48,"line":636},[46,9194,3616],{"class":56},[46,9196,9197,9199,9201],{"class":48,"line":641},[46,9198,2201],{"class":52},[46,9200,751],{"class":169},[46,9202,4006],{"class":56},[46,9204,9205],{"class":48,"line":653},[46,9206,3597],{"class":56},[46,9208,9209,9211,9213,9215,9217],{"class":48,"line":659},[46,9210,4015],{"class":52},[46,9212,3450],{"class":56},[46,9214,79],{"class":52},[46,9216,2633],{"class":180},[46,9218,3345],{"class":56},[46,9220,9221,9223,9225,9227,9229],{"class":48,"line":665},[46,9222,4015],{"class":52},[46,9224,4854],{"class":56},[46,9226,79],{"class":52},[46,9228,2886],{"class":180},[46,9230,3345],{"class":56},[46,9232,9233],{"class":48,"line":670},[46,9234,9235],{"class":2253},"    \u002F\u002F地址传递\n",[46,9237,9238,9240,9242,9244,9247,9249],{"class":48,"line":676},[46,9239,7574],{"class":169},[46,9241,1152],{"class":56},[46,9243,2540],{"class":52},[46,9245,9246],{"class":56},"a,",[46,9248,2540],{"class":52},[46,9250,9251],{"class":56},"b);\n",[46,9253,9254,9256,9258,9260,9262,9264],{"class":48,"line":682},[46,9255,3602],{"class":56},[46,9257,3228],{"class":52},[46,9259,2426],{"class":56},[46,9261,3228],{"class":52},[46,9263,3293],{"class":56},[46,9265,9266],{"class":2253},"\u002F\u002F20\n",[46,9268,9269,9271,9273,9275,9277,9279],{"class":48,"line":688},[46,9270,3602],{"class":56},[46,9272,3228],{"class":52},[46,9274,2451],{"class":56},[46,9276,3228],{"class":52},[46,9278,3293],{"class":56},[46,9280,9281],{"class":2253},"\u002F\u002F10\n",[46,9283,9284],{"class":48,"line":693},[46,9285,3616],{"class":56},[19,9287,9288],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,9290,9292],{"id":9291},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[19,9294,9295],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[19,9297,9298,9299,9301],{},"例如数组：int arr",[46,9300,2633],{},"={4,3,6,9,1,2,10,8,7,5}",[36,9303,9305],{"className":2187,"code":9304,"language":2189,"meta":41,"style":41},"#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",[43,9306,9307,9313,9323,9347,9351,9382,9386,9420,9424,9442,9446,9457,9472,9487,9491,9495,9499,9503,9507,9515,9519,9524,9578,9590,9602,9607,9615,9619,9624,9649,9653,9668,9677,9681],{"__ignoreMap":41},[46,9308,9309,9311],{"class":48,"line":49},[46,9310,3981],{"class":52},[46,9312,3984],{"class":173},[46,9314,9315,9317,9319,9321],{"class":48,"line":60},[46,9316,3989],{"class":52},[46,9318,3992],{"class":52},[46,9320,3995],{"class":169},[46,9322,3345],{"class":56},[46,9324,9325,9327,9330,9332,9334,9336,9338,9340,9342,9345],{"class":48,"line":200},[46,9326,7377],{"class":52},[46,9328,9329],{"class":169}," bubbleSort",[46,9331,1152],{"class":56},[46,9333,2201],{"class":52},[46,9335,8531],{"class":52},[46,9337,19],{"class":439},[46,9339,2565],{"class":56},[46,9341,2201],{"class":52},[46,9343,9344],{"class":439}," len",[46,9346,459],{"class":56},[46,9348,9349],{"class":48,"line":211},[46,9350,3597],{"class":56},[46,9352,9353,9355,9357,9359,9361,9363,9365,9367,9369,9372,9374,9376,9378,9380],{"class":48,"line":222},[46,9354,1140],{"class":52},[46,9356,1152],{"class":56},[46,9358,2201],{"class":52},[46,9360,5052],{"class":56},[46,9362,79],{"class":52},[46,9364,2379],{"class":180},[46,9366,5059],{"class":56},[46,9368,821],{"class":52},[46,9370,9371],{"class":56},"len",[46,9373,534],{"class":52},[46,9375,2405],{"class":180},[46,9377,5059],{"class":56},[46,9379,4321],{"class":52},[46,9381,459],{"class":56},[46,9383,9384],{"class":48,"line":636},[46,9385,4060],{"class":56},[46,9387,9388,9390,9392,9394,9396,9398,9400,9402,9404,9406,9408,9410,9412,9414,9416,9418],{"class":48,"line":641},[46,9389,5422],{"class":52},[46,9391,1152],{"class":56},[46,9393,2201],{"class":52},[46,9395,5429],{"class":56},[46,9397,79],{"class":52},[46,9399,2379],{"class":180},[46,9401,5436],{"class":56},[46,9403,821],{"class":52},[46,9405,9371],{"class":56},[46,9407,534],{"class":52},[46,9409,2628],{"class":56},[46,9411,534],{"class":52},[46,9413,2405],{"class":180},[46,9415,5436],{"class":56},[46,9417,4321],{"class":52},[46,9419,459],{"class":56},[46,9421,9422],{"class":48,"line":653},[46,9423,4538],{"class":56},[46,9425,9426,9428,9431,9433,9436,9438,9440],{"class":48,"line":659},[46,9427,878],{"class":52},[46,9429,9430],{"class":56},"(p[j]",[46,9432,884],{"class":52},[46,9434,9435],{"class":56},"p[j",[46,9437,2668],{"class":52},[46,9439,2405],{"class":180},[46,9441,6673],{"class":56},[46,9443,9444],{"class":48,"line":665},[46,9445,6678],{"class":56},[46,9447,9448,9450,9452,9454],{"class":48,"line":670},[46,9449,6683],{"class":52},[46,9451,6272],{"class":56},[46,9453,79],{"class":52},[46,9455,9456],{"class":56},"p[j];\n",[46,9458,9459,9462,9464,9466,9468,9470],{"class":48,"line":676},[46,9460,9461],{"class":56},"                p[j]",[46,9463,79],{"class":52},[46,9465,9435],{"class":56},[46,9467,2668],{"class":52},[46,9469,2405],{"class":180},[46,9471,6706],{"class":56},[46,9473,9474,9477,9479,9481,9483,9485],{"class":48,"line":682},[46,9475,9476],{"class":56},"                p[j",[46,9478,2668],{"class":52},[46,9480,2405],{"class":180},[46,9482,3125],{"class":56},[46,9484,79],{"class":52},[46,9486,6297],{"class":56},[46,9488,9489],{"class":48,"line":688},[46,9490,6726],{"class":56},[46,9492,9493],{"class":48,"line":693},[46,9494,4557],{"class":56},[46,9496,9497],{"class":48,"line":699},[46,9498,4217],{"class":56},[46,9500,9501],{"class":48,"line":705},[46,9502,3616],{"class":56},[46,9504,9505],{"class":48,"line":711},[46,9506,616],{"emptyLinePlaceholder":615},[46,9508,9509,9511,9513],{"class":48,"line":717},[46,9510,2201],{"class":52},[46,9512,751],{"class":169},[46,9514,4006],{"class":56},[46,9516,9517],{"class":48,"line":723},[46,9518,3597],{"class":56},[46,9520,9521],{"class":48,"line":729},[46,9522,9523],{"class":2253},"    \u002F\u002F 1.创建数组\n",[46,9525,9526,9528,9530,9532,9534,9536,9538,9540,9542,9544,9546,9548,9550,9552,9554,9556,9558,9560,9562,9564,9566,9568,9570,9572,9574,9576],{"class":48,"line":735},[46,9527,4015],{"class":52},[46,9529,5980],{"class":56},[46,9531,2633],{"class":180},[46,9533,3125],{"class":56},[46,9535,79],{"class":52},[46,9537,3082],{"class":56},[46,9539,2481],{"class":180},[46,9541,2565],{"class":56},[46,9543,2266],{"class":180},[46,9545,2565],{"class":56},[46,9547,2531],{"class":180},[46,9549,2565],{"class":56},[46,9551,2607],{"class":180},[46,9553,2565],{"class":56},[46,9555,2405],{"class":180},[46,9557,2565],{"class":56},[46,9559,2272],{"class":180},[46,9561,2565],{"class":56},[46,9563,2633],{"class":180},[46,9565,2565],{"class":56},[46,9567,2582],{"class":180},[46,9569,2565],{"class":56},[46,9571,2556],{"class":180},[46,9573,2565],{"class":56},[46,9575,2506],{"class":180},[46,9577,6013],{"class":56},[46,9579,9580,9582,9584,9586,9588],{"class":48,"line":740},[46,9581,4015],{"class":52},[46,9583,9344],{"class":56},[46,9585,79],{"class":52},[46,9587,2633],{"class":180},[46,9589,3345],{"class":56},[46,9591,9592,9594,9596,9598,9600],{"class":48,"line":745},[46,9593,4015],{"class":52},[46,9595,8531],{"class":52},[46,9597,19],{"class":56},[46,9599,79],{"class":52},[46,9601,9051],{"class":56},[46,9603,9604],{"class":48,"line":763},[46,9605,9606],{"class":2253},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[46,9608,9609,9612],{"class":48,"line":778},[46,9610,9611],{"class":169},"    bubbleSort",[46,9613,9614],{"class":56},"(p,len);\n",[46,9616,9617],{"class":48,"line":789},[46,9618,616],{"emptyLinePlaceholder":615},[46,9620,9621],{"class":48,"line":794},[46,9622,9623],{"class":2253},"    \u002F\u002F 3.打印排序后的数组\n",[46,9625,9626,9628,9630,9632,9634,9636,9638,9640,9642,9645,9647],{"class":48,"line":806},[46,9627,1140],{"class":52},[46,9629,3702],{"class":56},[46,9631,2201],{"class":52},[46,9633,5052],{"class":56},[46,9635,79],{"class":52},[46,9637,2379],{"class":180},[46,9639,5233],{"class":56},[46,9641,821],{"class":52},[46,9643,9644],{"class":56},"len; i",[46,9646,4321],{"class":52},[46,9648,459],{"class":56},[46,9650,9651],{"class":48,"line":829},[46,9652,4060],{"class":56},[46,9654,9655,9657,9659,9661,9663,9666],{"class":48,"line":840},[46,9656,5470],{"class":56},[46,9658,8432],{"class":52},[46,9660,19],{"class":56},[46,9662,3228],{"class":52},[46,9664,9665],{"class":173},"\"\"",[46,9667,3345],{"class":56},[46,9669,9670,9673,9675],{"class":48,"line":846},[46,9671,9672],{"class":56},"        p",[46,9674,4321],{"class":52},[46,9676,3345],{"class":56},[46,9678,9679],{"class":48,"line":852},[46,9680,4217],{"class":56},[46,9682,9683],{"class":48,"line":857},[46,9684,3616],{"class":56},[2098,9686,9687],{},"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":41,"searchDepth":60,"depth":60,"links":9689},[9690,9691,9692,9693,9694,9695,9696,9697],{"id":8296,"depth":60,"text":8297},{"id":8462,"depth":60,"text":8463},{"id":8618,"depth":60,"text":8619},{"id":8696,"depth":60,"text":8697},{"id":8775,"depth":60,"text":8776},{"id":8874,"depth":60,"text":8875},{"id":9113,"depth":60,"text":9114},{"id":9291,"depth":60,"text":9292},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":8285,"description":8293},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":9704,"title":9705,"body":9706,"description":9713,"extension":2125,"meta":12678,"navigation":615,"path":12679,"seo":12680,"stem":12681,"__hash__":12682},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":9707,"toc":12669},[9708,9711,9714,9718,9721,9724,9735,10064,10067,10071,10074,10081,10336,10340,10343,10346,10501,10505,10508,10511,10717,10721,10724,11027,11030,11038,11042,11045,11196,11198,11209,11266,11270,11275,11932,11940,11943,12037,12040,12660,12666],[10,9709,9705],{"id":9710},"_4结构体",[19,9712,9713],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,9715,9717],{"id":9716},"_41结构体定义与使用","4.1结构体定义与使用",[19,9719,9720],{},"语法：struct 结构体名 {结构体成员列表}；",[19,9722,9723],{},"通过结构体创建变量的方式：",[3191,9725,9726,9729,9732],{},[26,9727,9728],{},"struct 结构体名 变量名",[26,9730,9731],{},"struct 结构体名 变量名={成员1值，成员2值...}",[26,9733,9734],{},"定义结构体时顺便创建变量",[36,9736,9738],{"className":2187,"code":9737,"language":2189,"meta":41,"style":41},"#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",[43,9739,9740,9746,9756,9763,9768,9776,9780,9785,9789,9794,9799,9804,9811,9816,9823,9827,9834,9838,9842,9846,9850,9854,9858,9864,9868,9874,9882,9890,9894,9899,9904,9915,9920,9932,9943,9954,9959,9982,9986,9991,10017,10021,10026,10037,10048,10059],{"__ignoreMap":41},[46,9741,9742,9744],{"class":48,"line":49},[46,9743,3981],{"class":52},[46,9745,3984],{"class":173},[46,9747,9748,9750,9752,9754],{"class":48,"line":60},[46,9749,3989],{"class":52},[46,9751,3992],{"class":52},[46,9753,3995],{"class":169},[46,9755,3345],{"class":56},[46,9757,9758,9760],{"class":48,"line":200},[46,9759,3981],{"class":52},[46,9761,9762],{"class":173},"\u003Cstring>\n",[46,9764,9765],{"class":48,"line":211},[46,9766,9767],{"class":2253},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[46,9769,9770,9773],{"class":48,"line":222},[46,9771,9772],{"class":52},"struct",[46,9774,9775],{"class":169}," Student\n",[46,9777,9778],{"class":48,"line":636},[46,9779,3597],{"class":56},[46,9781,9782],{"class":48,"line":641},[46,9783,9784],{"class":2253},"    \u002F\u002F成员列表\n",[46,9786,9787],{"class":48,"line":653},[46,9788,616],{"emptyLinePlaceholder":615},[46,9790,9791],{"class":48,"line":659},[46,9792,9793],{"class":2253},"    \u002F\u002F姓名\n",[46,9795,9796],{"class":48,"line":665},[46,9797,9798],{"class":56},"    string name;\n",[46,9800,9801],{"class":48,"line":670},[46,9802,9803],{"class":2253},"    \u002F\u002F年龄\n",[46,9805,9806,9808],{"class":48,"line":676},[46,9807,4015],{"class":52},[46,9809,9810],{"class":56}," age;\n",[46,9812,9813],{"class":48,"line":682},[46,9814,9815],{"class":2253},"    \u002F\u002F分数\n",[46,9817,9818,9820],{"class":48,"line":688},[46,9819,4015],{"class":52},[46,9821,9822],{"class":56}," score;\n",[46,9824,9825],{"class":48,"line":693},[46,9826,6013],{"class":56},[46,9828,9829,9831],{"class":48,"line":699},[46,9830,9772],{"class":52},[46,9832,9833],{"class":169}," School\n",[46,9835,9836],{"class":48,"line":705},[46,9837,3597],{"class":56},[46,9839,9840],{"class":48,"line":711},[46,9841,9784],{"class":2253},[46,9843,9844],{"class":48,"line":717},[46,9845,616],{"emptyLinePlaceholder":615},[46,9847,9848],{"class":48,"line":723},[46,9849,9793],{"class":2253},[46,9851,9852],{"class":48,"line":729},[46,9853,9798],{"class":56},[46,9855,9856],{"class":48,"line":735},[46,9857,9803],{"class":2253},[46,9859,9860,9862],{"class":48,"line":740},[46,9861,4015],{"class":52},[46,9863,9810],{"class":56},[46,9865,9866],{"class":48,"line":745},[46,9867,9815],{"class":2253},[46,9869,9870,9872],{"class":48,"line":763},[46,9871,4015],{"class":52},[46,9873,9822],{"class":56},[46,9875,9876,9879],{"class":48,"line":778},[46,9877,9878],{"class":56},"} s3;",[46,9880,9881],{"class":2253}," \u002F\u002F创建结构体时就创建了变量\n",[46,9883,9884,9886,9888],{"class":48,"line":789},[46,9885,2201],{"class":52},[46,9887,751],{"class":169},[46,9889,4006],{"class":56},[46,9891,9892],{"class":48,"line":794},[46,9893,3597],{"class":56},[46,9895,9896],{"class":48,"line":806},[46,9897,9898],{"class":2253},"    \u002F\u002F2.通过学生类型创建具体学生\n",[46,9900,9901],{"class":48,"line":829},[46,9902,9903],{"class":2253},"    \u002F\u002F2.1 struct Student s1;\n",[46,9905,9906,9909,9912],{"class":48,"line":840},[46,9907,9908],{"class":52},"    struct",[46,9910,9911],{"class":169}," Student",[46,9913,9914],{"class":56}," s1;\n",[46,9916,9917],{"class":48,"line":846},[46,9918,9919],{"class":2253},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[46,9921,9922,9925,9927,9930],{"class":48,"line":852},[46,9923,9924],{"class":56},"    s1.name",[46,9926,79],{"class":52},[46,9928,9929],{"class":173},"\"张三\"",[46,9931,3345],{"class":56},[46,9933,9934,9937,9939,9941],{"class":48,"line":857},[46,9935,9936],{"class":56},"    s1.age",[46,9938,79],{"class":52},[46,9940,2836],{"class":180},[46,9942,3345],{"class":56},[46,9944,9945,9948,9950,9952],{"class":48,"line":875},[46,9946,9947],{"class":56},"    s1.score",[46,9949,79],{"class":52},[46,9951,2442],{"class":180},[46,9953,3345],{"class":56},[46,9955,9956],{"class":48,"line":892},[46,9957,9958],{"class":2253},"    \u002F\u002F输出结果\n",[46,9960,9961,9963,9965,9968,9970,9973,9975,9978,9980],{"class":48,"line":898},[46,9962,3602],{"class":56},[46,9964,3228],{"class":52},[46,9966,9967],{"class":56},"s1.name",[46,9969,3228],{"class":52},[46,9971,9972],{"class":56},"s1.age",[46,9974,3228],{"class":52},[46,9976,9977],{"class":56},"s1.score",[46,9979,3228],{"class":52},[46,9981,3250],{"class":56},[46,9983,9984],{"class":48,"line":903},[46,9985,616],{"emptyLinePlaceholder":615},[46,9987,9988],{"class":48,"line":908},[46,9989,9990],{"class":2253},"    \u002F\u002F2.2 struct Student s2={...}\n",[46,9992,9993,9995,9997,10000,10002,10004,10007,10009,10011,10013,10015],{"class":48,"line":925},[46,9994,9908],{"class":52},[46,9996,9911],{"class":169},[46,9998,9999],{"class":56}," s2",[46,10001,79],{"class":52},[46,10003,3082],{"class":56},[46,10005,10006],{"class":173},"\"王五\"",[46,10008,2565],{"class":56},[46,10010,2836],{"class":180},[46,10012,2565],{"class":56},[46,10014,2442],{"class":180},[46,10016,6013],{"class":56},[46,10018,10019],{"class":48,"line":1238},[46,10020,616],{"emptyLinePlaceholder":615},[46,10022,10023],{"class":48,"line":1251},[46,10024,10025],{"class":2253},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[46,10027,10028,10031,10033,10035],{"class":48,"line":1256},[46,10029,10030],{"class":56},"    s3.name",[46,10032,79],{"class":52},[46,10034,5697],{"class":173},[46,10036,3345],{"class":56},[46,10038,10039,10042,10044,10046],{"class":48,"line":1261},[46,10040,10041],{"class":56},"    s3.age",[46,10043,79],{"class":52},[46,10045,2836],{"class":180},[46,10047,3345],{"class":56},[46,10049,10050,10053,10055,10057],{"class":48,"line":1274},[46,10051,10052],{"class":56},"    s3.score",[46,10054,79],{"class":52},[46,10056,2886],{"class":180},[46,10058,3345],{"class":56},[46,10060,10062],{"class":48,"line":10061},46,[46,10063,3616],{"class":56},[19,10065,10066],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,10068,10070],{"id":10069},"_42结构体数组","4.2结构体数组",[19,10072,10073],{},"将自定义的结构体放入到数组中方便维护",[19,10075,10076,10077,10080],{},"语法：struct 结构体名 数组名",[46,10078,10079],{},"元素个数","={ {}，{},...{} };",[36,10082,10084],{"className":2187,"code":10083,"language":2189,"meta":41,"style":41},"#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",[43,10085,10086,10092,10102,10108,10113,10119,10123,10127,10133,10139,10143,10147,10155,10159,10164,10179,10183,10199,10215,10219,10224,10240,10255,10270,10275,10301,10305,10328,10332],{"__ignoreMap":41},[46,10087,10088,10090],{"class":48,"line":49},[46,10089,3981],{"class":52},[46,10091,3984],{"class":173},[46,10093,10094,10096,10098,10100],{"class":48,"line":60},[46,10095,3989],{"class":52},[46,10097,3992],{"class":52},[46,10099,3995],{"class":169},[46,10101,3345],{"class":56},[46,10103,10104,10106],{"class":48,"line":200},[46,10105,3981],{"class":52},[46,10107,9762],{"class":173},[46,10109,10110],{"class":48,"line":211},[46,10111,10112],{"class":2253},"\u002F\u002F1.定义结构体\n",[46,10114,10115,10117],{"class":48,"line":222},[46,10116,9772],{"class":52},[46,10118,9775],{"class":169},[46,10120,10121],{"class":48,"line":636},[46,10122,3597],{"class":56},[46,10124,10125],{"class":48,"line":641},[46,10126,9798],{"class":56},[46,10128,10129,10131],{"class":48,"line":653},[46,10130,4015],{"class":52},[46,10132,9810],{"class":56},[46,10134,10135,10137],{"class":48,"line":659},[46,10136,4015],{"class":52},[46,10138,9822],{"class":56},[46,10140,10141],{"class":48,"line":665},[46,10142,616],{"emptyLinePlaceholder":615},[46,10144,10145],{"class":48,"line":670},[46,10146,6013],{"class":56},[46,10148,10149,10151,10153],{"class":48,"line":676},[46,10150,2201],{"class":52},[46,10152,751],{"class":169},[46,10154,4006],{"class":56},[46,10156,10157],{"class":48,"line":682},[46,10158,3597],{"class":56},[46,10160,10161],{"class":48,"line":688},[46,10162,10163],{"class":2253},"    \u002F\u002F2.创建结构体数组\n",[46,10165,10166,10168,10170,10173,10175,10177],{"class":48,"line":693},[46,10167,9908],{"class":52},[46,10169,9911],{"class":169},[46,10171,10172],{"class":56}," stuArray[",[46,10174,2272],{"class":180},[46,10176,3125],{"class":56},[46,10178,6924],{"class":52},[46,10180,10181],{"class":48,"line":699},[46,10182,4060],{"class":56},[46,10184,10185,10187,10189,10191,10193,10195,10197],{"class":48,"line":705},[46,10186,6933],{"class":56},[46,10188,9929],{"class":173},[46,10190,2565],{"class":56},[46,10192,2836],{"class":180},[46,10194,2565],{"class":56},[46,10196,1155],{"class":180},[46,10198,6946],{"class":56},[46,10200,10201,10203,10205,10207,10209,10211,10213],{"class":48,"line":711},[46,10202,6933],{"class":56},[46,10204,5697],{"class":173},[46,10206,2565],{"class":56},[46,10208,2761],{"class":180},[46,10210,2565],{"class":56},[46,10212,2761],{"class":180},[46,10214,3616],{"class":56},[46,10216,10217],{"class":48,"line":717},[46,10218,4217],{"class":56},[46,10220,10221],{"class":48,"line":723},[46,10222,10223],{"class":2253},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[46,10225,10226,10229,10231,10234,10236,10238],{"class":48,"line":729},[46,10227,10228],{"class":56},"    stuArray[",[46,10230,2405],{"class":180},[46,10232,10233],{"class":56},"].name",[46,10235,79],{"class":52},[46,10237,5720],{"class":173},[46,10239,3345],{"class":56},[46,10241,10242,10244,10246,10249,10251,10253],{"class":48,"line":735},[46,10243,10228],{"class":56},[46,10245,2405],{"class":180},[46,10247,10248],{"class":56},"].age",[46,10250,79],{"class":52},[46,10252,2272],{"class":180},[46,10254,3345],{"class":56},[46,10256,10257,10259,10261,10264,10266,10268],{"class":48,"line":740},[46,10258,10228],{"class":56},[46,10260,2405],{"class":180},[46,10262,10263],{"class":56},"].score",[46,10265,79],{"class":52},[46,10267,2272],{"class":180},[46,10269,3345],{"class":56},[46,10271,10272],{"class":48,"line":745},[46,10273,10274],{"class":2253},"    \u002F\u002F4.遍历结构体数组\n",[46,10276,10277,10279,10281,10283,10285,10287,10289,10291,10293,10295,10297,10299],{"class":48,"line":763},[46,10278,1140],{"class":52},[46,10280,3702],{"class":56},[46,10282,2201],{"class":52},[46,10284,5052],{"class":56},[46,10286,79],{"class":52},[46,10288,2379],{"class":180},[46,10290,5059],{"class":56},[46,10292,821],{"class":52},[46,10294,2272],{"class":180},[46,10296,5059],{"class":56},[46,10298,4321],{"class":52},[46,10300,459],{"class":56},[46,10302,10303],{"class":48,"line":778},[46,10304,4060],{"class":56},[46,10306,10307,10309,10311,10314,10316,10319,10321,10324,10326],{"class":48,"line":789},[46,10308,5470],{"class":56},[46,10310,3228],{"class":52},[46,10312,10313],{"class":56},"stuArray[i].name",[46,10315,3228],{"class":52},[46,10317,10318],{"class":56},"stuArray[i].age",[46,10320,3228],{"class":52},[46,10322,10323],{"class":56},"stuArray[i].score",[46,10325,3228],{"class":52},[46,10327,3250],{"class":56},[46,10329,10330],{"class":48,"line":794},[46,10331,4217],{"class":56},[46,10333,10334],{"class":48,"line":806},[46,10335,3616],{"class":56},[14,10337,10339],{"id":10338},"_43结构体指针","4.3结构体指针",[19,10341,10342],{},"作用：通过指针访问结构体中的成员",[19,10344,10345],{},"利用操作符->可以通过结构体指针访问结构体属性",[36,10347,10349],{"className":2187,"code":10348,"language":2189,"meta":41,"style":41},"#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",[43,10350,10351,10357,10367,10373,10377,10383,10387,10391,10397,10403,10407,10415,10419,10424,10449,10454,10469,10474,10497],{"__ignoreMap":41},[46,10352,10353,10355],{"class":48,"line":49},[46,10354,3981],{"class":52},[46,10356,3984],{"class":173},[46,10358,10359,10361,10363,10365],{"class":48,"line":60},[46,10360,3989],{"class":52},[46,10362,3992],{"class":52},[46,10364,3995],{"class":169},[46,10366,3345],{"class":56},[46,10368,10369,10371],{"class":48,"line":200},[46,10370,3981],{"class":52},[46,10372,9762],{"class":173},[46,10374,10375],{"class":48,"line":211},[46,10376,10112],{"class":2253},[46,10378,10379,10381],{"class":48,"line":222},[46,10380,9772],{"class":52},[46,10382,9775],{"class":169},[46,10384,10385],{"class":48,"line":636},[46,10386,3597],{"class":56},[46,10388,10389],{"class":48,"line":641},[46,10390,9798],{"class":56},[46,10392,10393,10395],{"class":48,"line":653},[46,10394,4015],{"class":52},[46,10396,9810],{"class":56},[46,10398,10399,10401],{"class":48,"line":659},[46,10400,4015],{"class":52},[46,10402,9822],{"class":56},[46,10404,10405],{"class":48,"line":665},[46,10406,6013],{"class":56},[46,10408,10409,10411,10413],{"class":48,"line":670},[46,10410,2201],{"class":52},[46,10412,751],{"class":169},[46,10414,4006],{"class":56},[46,10416,10417],{"class":48,"line":676},[46,10418,3597],{"class":56},[46,10420,10421],{"class":48,"line":682},[46,10422,10423],{"class":2253},"    \u002F\u002F创建学生结构体变量\n",[46,10425,10426,10428,10430,10433,10435,10437,10439,10441,10443,10445,10447],{"class":48,"line":688},[46,10427,9908],{"class":52},[46,10429,9911],{"class":169},[46,10431,10432],{"class":56}," s",[46,10434,79],{"class":52},[46,10436,3082],{"class":56},[46,10438,9929],{"class":173},[46,10440,2565],{"class":56},[46,10442,2836],{"class":180},[46,10444,2565],{"class":56},[46,10446,3762],{"class":180},[46,10448,6013],{"class":56},[46,10450,10451],{"class":48,"line":693},[46,10452,10453],{"class":2253},"    \u002F\u002F通过指针指向结构体变量\n",[46,10455,10456,10458,10460,10462,10464,10466],{"class":48,"line":699},[46,10457,9908],{"class":52},[46,10459,9911],{"class":169},[46,10461,8531],{"class":52},[46,10463,19],{"class":56},[46,10465,8352],{"class":52},[46,10467,10468],{"class":56},"s\n",[46,10470,10471],{"class":48,"line":705},[46,10472,10473],{"class":2253},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[46,10475,10476,10478,10480,10483,10485,10488,10490,10493,10495],{"class":48,"line":711},[46,10477,3602],{"class":56},[46,10479,3228],{"class":52},[46,10481,10482],{"class":56},"p->name",[46,10484,3228],{"class":52},[46,10486,10487],{"class":56},"p->age",[46,10489,3228],{"class":52},[46,10491,10492],{"class":56},"p->score",[46,10494,3228],{"class":52},[46,10496,3250],{"class":56},[46,10498,10499],{"class":48,"line":717},[46,10500,3616],{"class":56},[14,10502,10504],{"id":10503},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[19,10506,10507],{},"作用：结构体中的成员可以是另一个结构体",[19,10509,10510],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[36,10512,10514],{"className":2187,"code":10513,"language":2189,"meta":41,"style":41},"#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",[43,10515,10516,10522,10532,10538,10543,10551,10555,10559,10565,10571,10575,10580,10587,10591,10598,10602,10608,10613,10617,10625,10629,10634,10639,10644,10655,10667,10678,10691,10702,10713],{"__ignoreMap":41},[46,10517,10518,10520],{"class":48,"line":49},[46,10519,3981],{"class":52},[46,10521,3984],{"class":173},[46,10523,10524,10526,10528,10530],{"class":48,"line":60},[46,10525,3989],{"class":52},[46,10527,3992],{"class":52},[46,10529,3995],{"class":169},[46,10531,3345],{"class":56},[46,10533,10534,10536],{"class":48,"line":200},[46,10535,3981],{"class":52},[46,10537,9762],{"class":173},[46,10539,10540],{"class":48,"line":211},[46,10541,10542],{"class":2253},"\u002F\u002F定义学生结构体\n",[46,10544,10545,10547,10549],{"class":48,"line":222},[46,10546,9772],{"class":52},[46,10548,9911],{"class":169},[46,10550,4695],{"class":56},[46,10552,10553],{"class":48,"line":636},[46,10554,3597],{"class":56},[46,10556,10557],{"class":48,"line":641},[46,10558,9798],{"class":56},[46,10560,10561,10563],{"class":48,"line":653},[46,10562,4015],{"class":52},[46,10564,9810],{"class":56},[46,10566,10567,10569],{"class":48,"line":659},[46,10568,4015],{"class":52},[46,10570,9822],{"class":56},[46,10572,10573],{"class":48,"line":665},[46,10574,3616],{"class":56},[46,10576,10577],{"class":48,"line":670},[46,10578,10579],{"class":2253},"\u002F\u002F定义老师结构体\n",[46,10581,10582,10584],{"class":48,"line":676},[46,10583,9772],{"class":52},[46,10585,10586],{"class":169}," Teacher\n",[46,10588,10589],{"class":48,"line":682},[46,10590,3597],{"class":56},[46,10592,10593,10595],{"class":48,"line":688},[46,10594,4015],{"class":52},[46,10596,10597],{"class":56}," id;\n",[46,10599,10600],{"class":48,"line":693},[46,10601,9798],{"class":56},[46,10603,10604,10606],{"class":48,"line":699},[46,10605,4015],{"class":52},[46,10607,9810],{"class":56},[46,10609,10610],{"class":48,"line":705},[46,10611,10612],{"class":56},"    Student stu;\n",[46,10614,10615],{"class":48,"line":711},[46,10616,3616],{"class":56},[46,10618,10619,10621,10623],{"class":48,"line":717},[46,10620,2201],{"class":52},[46,10622,751],{"class":169},[46,10624,7991],{"class":56},[46,10626,10627],{"class":48,"line":723},[46,10628,3597],{"class":56},[46,10630,10631],{"class":48,"line":729},[46,10632,10633],{"class":2253},"    \u002F\u002F结构体嵌套结构体\n",[46,10635,10636],{"class":48,"line":735},[46,10637,10638],{"class":2253},"    \u002F\u002F创建老师\n",[46,10640,10641],{"class":48,"line":740},[46,10642,10643],{"class":56},"    Teacher t;\n",[46,10645,10646,10649,10651,10653],{"class":48,"line":745},[46,10647,10648],{"class":56},"    t.id",[46,10650,79],{"class":52},[46,10652,1155],{"class":180},[46,10654,3345],{"class":56},[46,10656,10657,10660,10662,10665],{"class":48,"line":763},[46,10658,10659],{"class":56},"    t.name",[46,10661,79],{"class":52},[46,10663,10664],{"class":173},"\"老王\"",[46,10666,3345],{"class":56},[46,10668,10669,10672,10674,10676],{"class":48,"line":778},[46,10670,10671],{"class":56},"    t.age",[46,10673,79],{"class":52},[46,10675,2836],{"class":180},[46,10677,3345],{"class":56},[46,10679,10680,10683,10685,10688],{"class":48,"line":789},[46,10681,10682],{"class":56},"    t.stu.name",[46,10684,79],{"class":52},[46,10686,10687],{"class":173},"\"小王\"",[46,10689,10690],{"class":56},"；\n",[46,10692,10693,10696,10698,10700],{"class":48,"line":794},[46,10694,10695],{"class":56},"    t.stu.age",[46,10697,79],{"class":52},[46,10699,2886],{"class":180},[46,10701,3345],{"class":56},[46,10703,10704,10707,10709,10711],{"class":48,"line":806},[46,10705,10706],{"class":56},"    t.stu.score",[46,10708,79],{"class":52},[46,10710,2531],{"class":180},[46,10712,3345],{"class":56},[46,10714,10715],{"class":48,"line":829},[46,10716,3616],{"class":56},[14,10718,10720],{"id":10719},"_45结构体做函数参数","4.5结构体做函数参数",[19,10722,10723],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[36,10725,10727],{"className":2187,"code":10726,"language":2189,"meta":41,"style":41},"#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",[43,10728,10729,10735,10745,10751,10757,10761,10765,10771,10777,10781,10786,10791,10808,10812,10845,10849,10854,10873,10877,10908,10912,10920,10924,10933,10945,10957,10969,10982,10990,11003,11015,11023],{"__ignoreMap":41},[46,10730,10731,10733],{"class":48,"line":49},[46,10732,3981],{"class":52},[46,10734,3984],{"class":173},[46,10736,10737,10739,10741,10743],{"class":48,"line":60},[46,10738,3989],{"class":52},[46,10740,3992],{"class":52},[46,10742,3995],{"class":169},[46,10744,3345],{"class":56},[46,10746,10747,10749],{"class":48,"line":200},[46,10748,3981],{"class":52},[46,10750,9762],{"class":173},[46,10752,10753,10755],{"class":48,"line":211},[46,10754,9772],{"class":52},[46,10756,9775],{"class":169},[46,10758,10759],{"class":48,"line":222},[46,10760,3597],{"class":56},[46,10762,10763],{"class":48,"line":636},[46,10764,9798],{"class":56},[46,10766,10767,10769],{"class":48,"line":641},[46,10768,4015],{"class":52},[46,10770,9810],{"class":56},[46,10772,10773,10775],{"class":48,"line":653},[46,10774,4015],{"class":52},[46,10776,9822],{"class":56},[46,10778,10779],{"class":48,"line":659},[46,10780,6013],{"class":56},[46,10782,10783],{"class":48,"line":665},[46,10784,10785],{"class":2253},"\u002F\u002F打印学生信息的函数\n",[46,10787,10788],{"class":48,"line":670},[46,10789,10790],{"class":2253},"\u002F\u002F值传递\n",[46,10792,10793,10795,10798,10800,10802,10804,10806],{"class":48,"line":676},[46,10794,7377],{"class":52},[46,10796,10797],{"class":169}," printStudent1",[46,10799,1152],{"class":56},[46,10801,9772],{"class":52},[46,10803,9911],{"class":169},[46,10805,10432],{"class":439},[46,10807,459],{"class":56},[46,10809,10810],{"class":48,"line":682},[46,10811,3597],{"class":56},[46,10813,10814,10816,10818,10821,10823,10826,10828,10831,10833,10835,10837,10840,10842],{"class":48,"line":688},[46,10815,8542],{"class":56},[46,10817,3228],{"class":52},[46,10819,10820],{"class":56}," s.name ",[46,10822,3228],{"class":52},[46,10824,10825],{"class":173}," \" \"",[46,10827,3496],{"class":52},[46,10829,10830],{"class":56}," s.age ",[46,10832,3228],{"class":52},[46,10834,10825],{"class":173},[46,10836,3496],{"class":52},[46,10838,10839],{"class":56}," s.score ",[46,10841,3228],{"class":52},[46,10843,10844],{"class":56}," endl;\n",[46,10846,10847],{"class":48,"line":693},[46,10848,3616],{"class":56},[46,10850,10851],{"class":48,"line":699},[46,10852,10853],{"class":2253},"\u002F\u002F地址传递\n",[46,10855,10856,10858,10861,10863,10865,10867,10869,10871],{"class":48,"line":705},[46,10857,7377],{"class":52},[46,10859,10860],{"class":169}," printStudent2",[46,10862,1152],{"class":56},[46,10864,9772],{"class":52},[46,10866,9911],{"class":169},[46,10868,8531],{"class":52},[46,10870,2881],{"class":439},[46,10872,459],{"class":56},[46,10874,10875],{"class":48,"line":711},[46,10876,3597],{"class":56},[46,10878,10879,10881,10883,10886,10888,10890,10892,10895,10897,10899,10901,10904,10906],{"class":48,"line":717},[46,10880,8542],{"class":56},[46,10882,3228],{"class":52},[46,10884,10885],{"class":56}," s->name ",[46,10887,3228],{"class":52},[46,10889,10825],{"class":173},[46,10891,3496],{"class":52},[46,10893,10894],{"class":56}," s->age ",[46,10896,3228],{"class":52},[46,10898,10825],{"class":173},[46,10900,3496],{"class":52},[46,10902,10903],{"class":56}," s->score ",[46,10905,3228],{"class":52},[46,10907,10844],{"class":56},[46,10909,10910],{"class":48,"line":723},[46,10911,3616],{"class":56},[46,10913,10914,10916,10918],{"class":48,"line":729},[46,10915,2201],{"class":52},[46,10917,751],{"class":169},[46,10919,4006],{"class":56},[46,10921,10922],{"class":48,"line":735},[46,10923,3597],{"class":56},[46,10925,10926,10928,10930],{"class":48,"line":740},[46,10927,9908],{"class":52},[46,10929,9911],{"class":169},[46,10931,10932],{"class":56}," s;\n",[46,10934,10935,10938,10940,10943],{"class":48,"line":745},[46,10936,10937],{"class":56},"    s.name ",[46,10939,79],{"class":52},[46,10941,10942],{"class":173}," \"张三\"",[46,10944,3345],{"class":56},[46,10946,10947,10950,10952,10955],{"class":48,"line":763},[46,10948,10949],{"class":56},"    s.age ",[46,10951,79],{"class":52},[46,10953,10954],{"class":180}," 20",[46,10956,3345],{"class":56},[46,10958,10959,10962,10964,10967],{"class":48,"line":778},[46,10960,10961],{"class":56},"    s.score ",[46,10963,79],{"class":52},[46,10965,10966],{"class":180}," 85",[46,10968,3345],{"class":56},[46,10970,10971,10973,10975,10978,10980],{"class":48,"line":789},[46,10972,3602],{"class":56},[46,10974,3228],{"class":52},[46,10976,10977],{"class":173},"\"值传递:\"",[46,10979,3228],{"class":52},[46,10981,3250],{"class":56},[46,10983,10984,10987],{"class":48,"line":794},[46,10985,10986],{"class":169},"    printStudent1",[46,10988,10989],{"class":56},"(s);\n",[46,10991,10992,10994,10996,10999,11001],{"class":48,"line":806},[46,10993,3602],{"class":56},[46,10995,3228],{"class":52},[46,10997,10998],{"class":173},"\"地址传递:\"",[46,11000,3228],{"class":52},[46,11002,3250],{"class":56},[46,11004,11005,11008,11010,11012],{"class":48,"line":829},[46,11006,11007],{"class":169},"    printStudent2",[46,11009,1152],{"class":56},[46,11011,2540],{"class":52},[46,11013,11014],{"class":56},"s); \n",[46,11016,11017,11019,11021],{"class":48,"line":840},[46,11018,6108],{"class":52},[46,11020,887],{"class":180},[46,11022,3345],{"class":56},[46,11024,11025],{"class":48,"line":846},[46,11026,3616],{"class":56},[19,11028,11029],{},"注意：",[3191,11031,11032,11035],{},[26,11033,11034],{},"1.先定义结构体，不要在函数中写结构体的定义",[26,11036,11037],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,11039,11041],{"id":11040},"_46结构体中const使用场景","4.6结构体中const使用场景",[19,11043,11044],{},"用const防止误操作",[36,11046,11048],{"className":2187,"code":11047,"language":2189,"meta":41,"style":41},"#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",[43,11049,11050,11056,11066,11072,11077,11081,11085,11091,11097,11101,11117,11121,11144,11148,11156,11160,11181,11188,11192],{"__ignoreMap":41},[46,11051,11052,11054],{"class":48,"line":49},[46,11053,3981],{"class":52},[46,11055,3984],{"class":173},[46,11057,11058,11060,11062,11064],{"class":48,"line":60},[46,11059,3989],{"class":52},[46,11061,3992],{"class":52},[46,11063,3995],{"class":169},[46,11065,3345],{"class":56},[46,11067,11068,11070],{"class":48,"line":200},[46,11069,3981],{"class":52},[46,11071,9762],{"class":173},[46,11073,11074],{"class":48,"line":211},[46,11075,11076],{"class":56},"sctuct Student\n",[46,11078,11079],{"class":48,"line":222},[46,11080,3597],{"class":56},[46,11082,11083],{"class":48,"line":636},[46,11084,9798],{"class":56},[46,11086,11087,11089],{"class":48,"line":641},[46,11088,4015],{"class":52},[46,11090,9810],{"class":56},[46,11092,11093,11095],{"class":48,"line":653},[46,11094,4015],{"class":52},[46,11096,9822],{"class":56},[46,11098,11099],{"class":48,"line":659},[46,11100,6013],{"class":56},[46,11102,11103,11105,11108,11110,11113,11115],{"class":48,"line":665},[46,11104,7377],{"class":52},[46,11106,11107],{"class":169}," printStudents",[46,11109,1152],{"class":56},[46,11111,11112],{"class":169},"student",[46,11114,10432],{"class":439},[46,11116,459],{"class":56},[46,11118,11119],{"class":48,"line":670},[46,11120,3597],{"class":56},[46,11122,11123,11125,11127,11130,11132,11135,11137,11140,11142],{"class":48,"line":676},[46,11124,3602],{"class":56},[46,11126,3228],{"class":52},[46,11128,11129],{"class":56},"s.name",[46,11131,3228],{"class":52},[46,11133,11134],{"class":56},"s.age",[46,11136,3228],{"class":52},[46,11138,11139],{"class":56},"s.score",[46,11141,3228],{"class":52},[46,11143,3250],{"class":56},[46,11145,11146],{"class":48,"line":682},[46,11147,3616],{"class":56},[46,11149,11150,11152,11154],{"class":48,"line":688},[46,11151,2201],{"class":52},[46,11153,751],{"class":169},[46,11155,7991],{"class":56},[46,11157,11158],{"class":48,"line":693},[46,11159,3597],{"class":56},[46,11161,11162,11165,11167,11169,11171,11173,11175,11177,11179],{"class":48,"line":699},[46,11163,11164],{"class":56},"    Student s",[46,11166,79],{"class":52},[46,11168,3082],{"class":56},[46,11170,9929],{"class":173},[46,11172,2565],{"class":56},[46,11174,2836],{"class":180},[46,11176,2565],{"class":56},[46,11178,2836],{"class":180},[46,11180,6013],{"class":56},[46,11182,11183,11186],{"class":48,"line":705},[46,11184,11185],{"class":169},"    printStudent",[46,11187,10989],{"class":56},[46,11189,11190],{"class":48,"line":711},[46,11191,616],{"emptyLinePlaceholder":615},[46,11193,11194],{"class":48,"line":717},[46,11195,3616],{"class":56},[19,11197,11029],{},[3191,11199,11200,11203,11206],{},[26,11201,11202],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[26,11204,11205],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[26,11207,11208],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[36,11210,11212],{"className":2187,"code":11211,"language":2189,"meta":41,"style":41},"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",[43,11213,11214,11233,11237,11242,11262],{"__ignoreMap":41},[46,11215,11216,11218,11220,11222,11224,11227,11229,11231],{"class":48,"line":49},[46,11217,7377],{"class":52},[46,11219,11107],{"class":169},[46,11221,1152],{"class":56},[46,11223,8805],{"class":52},[46,11225,11226],{"class":169}," student",[46,11228,8531],{"class":52},[46,11230,2881],{"class":439},[46,11232,459],{"class":56},[46,11234,11235],{"class":48,"line":60},[46,11236,3597],{"class":56},[46,11238,11239],{"class":48,"line":200},[46,11240,11241],{"class":2253},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[46,11243,11244,11246,11248,11250,11252,11254,11256,11258,11260],{"class":48,"line":211},[46,11245,3602],{"class":56},[46,11247,3228],{"class":52},[46,11249,11129],{"class":56},[46,11251,3228],{"class":52},[46,11253,11134],{"class":56},[46,11255,3228],{"class":52},[46,11257,11139],{"class":56},[46,11259,3228],{"class":52},[46,11261,3250],{"class":56},[46,11263,11264],{"class":48,"line":222},[46,11265,3616],{"class":56},[14,11267,11269],{"id":11268},"_47案例","4.7案例",[23,11271,11272],{},[26,11273,11274],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[36,11276,11278],{"className":2187,"code":11277,"language":2189,"meta":41,"style":41},"#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",[43,11279,11280,11286,11296,11302,11309,11313,11319,11323,11328,11334,11340,11344,11348,11354,11358,11363,11368,11381,11385,11390,11416,11420,11432,11459,11463,11475,11485,11489,11494,11523,11527,11539,11548,11575,11586,11596,11600,11604,11608,11613,11637,11641,11665,11669,11688,11714,11718,11743,11766,11790,11795,11800,11805,11814,11819,11825,11846,11852,11866,11872,11899,11908,11914,11922,11927],{"__ignoreMap":41},[46,11281,11282,11284],{"class":48,"line":49},[46,11283,3981],{"class":52},[46,11285,3984],{"class":173},[46,11287,11288,11290,11292,11294],{"class":48,"line":60},[46,11289,3989],{"class":52},[46,11291,3992],{"class":52},[46,11293,3995],{"class":169},[46,11295,3345],{"class":56},[46,11297,11298,11300],{"class":48,"line":200},[46,11299,3981],{"class":52},[46,11301,9762],{"class":173},[46,11303,11304,11306],{"class":48,"line":211},[46,11305,3981],{"class":52},[46,11307,11308],{"class":173},"\u003Cctime>\n",[46,11310,11311],{"class":48,"line":222},[46,11312,10542],{"class":2253},[46,11314,11315,11317],{"class":48,"line":636},[46,11316,9772],{"class":52},[46,11318,9775],{"class":169},[46,11320,11321],{"class":48,"line":641},[46,11322,3597],{"class":56},[46,11324,11325],{"class":48,"line":653},[46,11326,11327],{"class":56},"    string sName;\n",[46,11329,11330,11332],{"class":48,"line":659},[46,11331,4015],{"class":52},[46,11333,9810],{"class":56},[46,11335,11336,11338],{"class":48,"line":665},[46,11337,4015],{"class":52},[46,11339,9822],{"class":56},[46,11341,11342],{"class":48,"line":670},[46,11343,6013],{"class":56},[46,11345,11346],{"class":48,"line":676},[46,11347,10579],{"class":2253},[46,11349,11350,11352],{"class":48,"line":682},[46,11351,9772],{"class":52},[46,11353,10586],{"class":169},[46,11355,11356],{"class":48,"line":688},[46,11357,3597],{"class":56},[46,11359,11360],{"class":48,"line":693},[46,11361,11362],{"class":56},"    string tName;\n",[46,11364,11365],{"class":48,"line":699},[46,11366,11367],{"class":2253},"    \u002F\u002F学生数组\n",[46,11369,11370,11372,11374,11377,11379],{"class":48,"line":705},[46,11371,9908],{"class":52},[46,11373,9911],{"class":169},[46,11375,11376],{"class":56}," sArray[",[46,11378,2506],{"class":180},[46,11380,6706],{"class":56},[46,11382,11383],{"class":48,"line":711},[46,11384,6013],{"class":56},[46,11386,11387],{"class":48,"line":717},[46,11388,11389],{"class":2253},"\u002F\u002F给老师和学生赋值的函数\n",[46,11391,11392,11394,11397,11399,11401,11404,11407,11410,11412,11414],{"class":48,"line":723},[46,11393,7377],{"class":52},[46,11395,11396],{"class":169}," allocateSpace",[46,11398,1152],{"class":56},[46,11400,9772],{"class":52},[46,11402,11403],{"class":169}," Teacher",[46,11405,11406],{"class":439}," tArray",[46,11408,11409],{"class":56},"[],",[46,11411,2201],{"class":52},[46,11413,9344],{"class":439},[46,11415,459],{"class":56},[46,11417,11418],{"class":48,"line":729},[46,11419,3597],{"class":56},[46,11421,11422,11425,11427,11430],{"class":48,"line":735},[46,11423,11424],{"class":56},"    string nameSeed",[46,11426,79],{"class":52},[46,11428,11429],{"class":173},"\"ABCDE\"",[46,11431,3345],{"class":56},[46,11433,11434,11436,11438,11440,11443,11445,11447,11450,11452,11455,11457],{"class":48,"line":740},[46,11435,1140],{"class":52},[46,11437,3702],{"class":56},[46,11439,2201],{"class":52},[46,11441,11442],{"class":56}," i ",[46,11444,79],{"class":52},[46,11446,887],{"class":180},[46,11448,11449],{"class":56},"; i ",[46,11451,821],{"class":52},[46,11453,11454],{"class":56}," len; i",[46,11456,4321],{"class":52},[46,11458,459],{"class":56},[46,11460,11461],{"class":48,"line":745},[46,11462,4060],{"class":56},[46,11464,11465,11468,11470,11473],{"class":48,"line":763},[46,11466,11467],{"class":56},"        tArray[i].tName ",[46,11469,79],{"class":52},[46,11471,11472],{"class":173}," \"Teacher_\"",[46,11474,3345],{"class":56},[46,11476,11477,11479,11482],{"class":48,"line":778},[46,11478,11467],{"class":56},[46,11480,11481],{"class":52},"+=",[46,11483,11484],{"class":56},"nameSeed[i];\n",[46,11486,11487],{"class":48,"line":789},[46,11488,616],{"emptyLinePlaceholder":615},[46,11490,11491],{"class":48,"line":794},[46,11492,11493],{"class":2253},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[46,11495,11496,11498,11500,11502,11505,11507,11509,11512,11514,11516,11519,11521],{"class":48,"line":806},[46,11497,5422],{"class":52},[46,11499,3702],{"class":56},[46,11501,2201],{"class":52},[46,11503,11504],{"class":56}," j ",[46,11506,79],{"class":52},[46,11508,887],{"class":180},[46,11510,11511],{"class":56},"; j ",[46,11513,821],{"class":52},[46,11515,4178],{"class":180},[46,11517,11518],{"class":56},"; j",[46,11520,4321],{"class":52},[46,11522,459],{"class":56},[46,11524,11525],{"class":48,"line":829},[46,11526,4538],{"class":56},[46,11528,11529,11532,11534,11537],{"class":48,"line":840},[46,11530,11531],{"class":56},"            tArray[i].sArray[j].sName ",[46,11533,79],{"class":52},[46,11535,11536],{"class":173}," \"Student_\"",[46,11538,3345],{"class":56},[46,11540,11541,11543,11545],{"class":48,"line":846},[46,11542,11531],{"class":56},[46,11544,11481],{"class":52},[46,11546,11547],{"class":56}," nameSeed[j];\n",[46,11549,11550,11553,11556,11558,11560,11562,11564,11566,11568,11570,11572],{"class":48,"line":852},[46,11551,11552],{"class":52},"            int",[46,11554,11555],{"class":56}," random",[46,11557,79],{"class":52},[46,11559,4452],{"class":169},[46,11561,4455],{"class":56},[46,11563,2515],{"class":52},[46,11565,3093],{"class":180},[46,11567,2668],{"class":52},[46,11569,2588],{"class":180},[46,11571,2250],{"class":56},[46,11573,11574],{"class":2253},"\u002F\u002F40~99\n",[46,11576,11577,11580,11582,11584],{"class":48,"line":857},[46,11578,11579],{"class":56},"            tArray[i].sArray[j].age ",[46,11581,79],{"class":52},[46,11583,10954],{"class":180},[46,11585,3345],{"class":56},[46,11587,11588,11591,11593],{"class":48,"line":875},[46,11589,11590],{"class":56},"            tArray[i].sArray[j].score ",[46,11592,79],{"class":52},[46,11594,11595],{"class":56}," random;\n",[46,11597,11598],{"class":48,"line":892},[46,11599,4557],{"class":56},[46,11601,11602],{"class":48,"line":898},[46,11603,4217],{"class":56},[46,11605,11606],{"class":48,"line":903},[46,11607,3616],{"class":56},[46,11609,11610],{"class":48,"line":908},[46,11611,11612],{"class":2253},"\u002F\u002F打印所有信息的函数\n",[46,11614,11615,11617,11620,11622,11624,11626,11628,11631,11633,11635],{"class":48,"line":925},[46,11616,7377],{"class":52},[46,11618,11619],{"class":169}," printInfo",[46,11621,1152],{"class":56},[46,11623,9772],{"class":52},[46,11625,11403],{"class":169},[46,11627,11406],{"class":439},[46,11629,11630],{"class":56},"[], ",[46,11632,2201],{"class":52},[46,11634,9344],{"class":439},[46,11636,459],{"class":56},[46,11638,11639],{"class":48,"line":1238},[46,11640,3597],{"class":56},[46,11642,11643,11645,11647,11649,11651,11653,11655,11657,11659,11661,11663],{"class":48,"line":1251},[46,11644,1140],{"class":52},[46,11646,3702],{"class":56},[46,11648,2201],{"class":52},[46,11650,11442],{"class":56},[46,11652,79],{"class":52},[46,11654,887],{"class":180},[46,11656,11449],{"class":56},[46,11658,821],{"class":52},[46,11660,11454],{"class":56},[46,11662,4321],{"class":52},[46,11664,459],{"class":56},[46,11666,11667],{"class":48,"line":1256},[46,11668,4060],{"class":56},[46,11670,11671,11674,11676,11679,11681,11684,11686],{"class":48,"line":1261},[46,11672,11673],{"class":56},"        cout ",[46,11675,3228],{"class":52},[46,11677,11678],{"class":173}," \"Teacher: \"",[46,11680,3496],{"class":52},[46,11682,11683],{"class":56}," tArray[i].tName ",[46,11685,3228],{"class":52},[46,11687,10844],{"class":56},[46,11689,11690,11692,11694,11696,11698,11700,11702,11704,11706,11708,11710,11712],{"class":48,"line":1274},[46,11691,5422],{"class":52},[46,11693,3702],{"class":56},[46,11695,2201],{"class":52},[46,11697,11504],{"class":56},[46,11699,79],{"class":52},[46,11701,887],{"class":180},[46,11703,11511],{"class":56},[46,11705,821],{"class":52},[46,11707,4178],{"class":180},[46,11709,11518],{"class":56},[46,11711,4321],{"class":52},[46,11713,459],{"class":56},[46,11715,11716],{"class":48,"line":10061},[46,11717,4538],{"class":56},[46,11719,11721,11724,11726,11729,11731,11734,11736,11739,11741],{"class":48,"line":11720},47,[46,11722,11723],{"class":56},"            cout ",[46,11725,3228],{"class":52},[46,11727,11728],{"class":173}," \"",[46,11730,3285],{"class":180},[46,11732,11733],{"class":173},"Student: \"",[46,11735,3496],{"class":52},[46,11737,11738],{"class":56}," tArray[i].sArray[j].sName",[46,11740,3228],{"class":52},[46,11742,3250],{"class":56},[46,11744,11746,11748,11750,11752,11754,11757,11759,11762,11764],{"class":48,"line":11745},48,[46,11747,11723],{"class":56},[46,11749,3228],{"class":52},[46,11751,11728],{"class":173},[46,11753,3285],{"class":180},[46,11755,11756],{"class":173},"Age: \"",[46,11758,3496],{"class":52},[46,11760,11761],{"class":56}," tArray[i].sArray[j].age ",[46,11763,3228],{"class":52},[46,11765,10844],{"class":56},[46,11767,11769,11771,11773,11775,11777,11780,11782,11785,11787],{"class":48,"line":11768},49,[46,11770,11723],{"class":56},[46,11772,3228],{"class":52},[46,11774,11728],{"class":173},[46,11776,3285],{"class":180},[46,11778,11779],{"class":173},"Score: \"",[46,11781,3496],{"class":52},[46,11783,11784],{"class":56}," tArray[i].sArray[j].score ",[46,11786,3228],{"class":52},[46,11788,11789],{"class":56}," endl;   \n",[46,11791,11793],{"class":48,"line":11792},50,[46,11794,4557],{"class":56},[46,11796,11798],{"class":48,"line":11797},51,[46,11799,4217],{"class":56},[46,11801,11803],{"class":48,"line":11802},52,[46,11804,3616],{"class":56},[46,11806,11808,11810,11812],{"class":48,"line":11807},53,[46,11809,2201],{"class":52},[46,11811,751],{"class":169},[46,11813,4006],{"class":56},[46,11815,11817],{"class":48,"line":11816},54,[46,11818,3597],{"class":56},[46,11820,11822],{"class":48,"line":11821},55,[46,11823,11824],{"class":2253},"    \u002F\u002F随机数种子\n",[46,11826,11828,11830,11832,11834,11836,11838,11840,11842,11844],{"class":48,"line":11827},56,[46,11829,4402],{"class":169},[46,11831,4405],{"class":56},[46,11833,4408],{"class":52},[46,11835,4411],{"class":52},[46,11837,2616],{"class":56},[46,11839,4416],{"class":169},[46,11841,1152],{"class":56},[46,11843,4421],{"class":180},[46,11845,4424],{"class":56},[46,11847,11849],{"class":48,"line":11848},57,[46,11850,11851],{"class":2253},"    \u002F\u002F1.创建3名老师的数组\n",[46,11853,11855,11857,11859,11862,11864],{"class":48,"line":11854},58,[46,11856,9908],{"class":52},[46,11858,11403],{"class":169},[46,11860,11861],{"class":56}," tArray[",[46,11863,2266],{"class":180},[46,11865,6706],{"class":56},[46,11867,11869],{"class":48,"line":11868},59,[46,11870,11871],{"class":2253},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[46,11873,11875,11877,11880,11882,11885,11888,11890,11892,11895,11897],{"class":48,"line":11874},60,[46,11876,4015],{"class":52},[46,11878,11879],{"class":56}," len ",[46,11881,79],{"class":52},[46,11883,11884],{"class":52}," sizeof",[46,11886,11887],{"class":56},"(tArray) ",[46,11889,2770],{"class":52},[46,11891,11884],{"class":52},[46,11893,11894],{"class":56},"(tArray[",[46,11896,2379],{"class":180},[46,11898,5874],{"class":56},[46,11900,11902,11905],{"class":48,"line":11901},61,[46,11903,11904],{"class":169},"    allocateSpace",[46,11906,11907],{"class":56},"(tArray, len);\n",[46,11909,11911],{"class":48,"line":11910},62,[46,11912,11913],{"class":2253},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[46,11915,11917,11920],{"class":48,"line":11916},63,[46,11918,11919],{"class":169},"    printInfo",[46,11921,11907],{"class":56},[46,11923,11925],{"class":48,"line":11924},64,[46,11926,616],{"emptyLinePlaceholder":615},[46,11928,11930],{"class":48,"line":11929},65,[46,11931,3616],{"class":56},[23,11933,11934],{"start":60},[26,11935,11936,11939],{},[2339,11937,11938],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[19,11941,11942],{},"五名英雄信息如下：",[36,11944,11948],{"className":11945,"code":11946,"language":11947,"meta":41,"style":41},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[43,11949,11950,11968,11985,12002,12019],{"__ignoreMap":41},[46,11951,11952,11954,11957,11959,11961,11963,11966],{"class":48,"line":49},[46,11953,6933],{"class":56},[46,11955,11956],{"class":173},"\"刘备\"",[46,11958,2565],{"class":56},[46,11960,2961],{"class":180},[46,11962,2565],{"class":56},[46,11964,11965],{"class":173},"\"男\"",[46,11967,6946],{"class":56},[46,11969,11970,11972,11975,11977,11979,11981,11983],{"class":48,"line":60},[46,11971,6933],{"class":56},[46,11973,11974],{"class":173},"\"关羽\"",[46,11976,2565],{"class":56},[46,11978,2936],{"class":180},[46,11980,2565],{"class":56},[46,11982,11965],{"class":173},[46,11984,6946],{"class":56},[46,11986,11987,11989,11992,11994,11996,11998,12000],{"class":48,"line":200},[46,11988,6933],{"class":56},[46,11990,11991],{"class":173},"\"张飞\"",[46,11993,2565],{"class":56},[46,11995,2886],{"class":180},[46,11997,2565],{"class":56},[46,11999,11965],{"class":173},[46,12001,6946],{"class":56},[46,12003,12004,12006,12009,12011,12013,12015,12017],{"class":48,"line":211},[46,12005,6933],{"class":56},[46,12007,12008],{"class":173},"\"赵云\"",[46,12010,2565],{"class":56},[46,12012,2911],{"class":180},[46,12014,2565],{"class":56},[46,12016,11965],{"class":173},[46,12018,6946],{"class":56},[46,12020,12021,12023,12026,12028,12030,12032,12035],{"class":48,"line":222},[46,12022,6933],{"class":56},[46,12024,12025],{"class":173},"\"貂蝉\"",[46,12027,2565],{"class":56},[46,12029,2861],{"class":180},[46,12031,2565],{"class":56},[46,12033,12034],{"class":173},"\"女\"",[46,12036,6946],{"class":56},[19,12038,12039],{},"代码：",[36,12041,12043],{"className":2187,"code":12042,"language":2189,"meta":41,"style":41},"#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",[43,12044,12045,12051,12061,12067,12074,12078,12082,12088,12093,12097,12102,12125,12129,12154,12158,12191,12196,12225,12230,12245,12271,12291,12296,12301,12305,12309,12314,12336,12340,12364,12368,12430,12434,12438,12446,12450,12455,12466,12470,12486,12502,12518,12534,12550,12554,12574,12596,12601,12614,12621,12626,12632,12637,12650,12656],{"__ignoreMap":41},[46,12046,12047,12049],{"class":48,"line":49},[46,12048,3981],{"class":52},[46,12050,3984],{"class":173},[46,12052,12053,12055,12057,12059],{"class":48,"line":60},[46,12054,3989],{"class":52},[46,12056,3992],{"class":52},[46,12058,3995],{"class":169},[46,12060,3345],{"class":56},[46,12062,12063,12065],{"class":48,"line":200},[46,12064,3981],{"class":52},[46,12066,9762],{"class":173},[46,12068,12069,12071],{"class":48,"line":211},[46,12070,9772],{"class":52},[46,12072,12073],{"class":169}," Sanguo\n",[46,12075,12076],{"class":48,"line":222},[46,12077,3597],{"class":56},[46,12079,12080],{"class":48,"line":636},[46,12081,9798],{"class":56},[46,12083,12084,12086],{"class":48,"line":641},[46,12085,4015],{"class":52},[46,12087,9810],{"class":56},[46,12089,12090],{"class":48,"line":653},[46,12091,12092],{"class":56},"    string gender;\n",[46,12094,12095],{"class":48,"line":659},[46,12096,6013],{"class":56},[46,12098,12099],{"class":48,"line":665},[46,12100,12101],{"class":2253},"\u002F\u002F定义排序函数\n",[46,12103,12104,12106,12108,12110,12113,12115,12117,12119,12121,12123],{"class":48,"line":670},[46,12105,7377],{"class":52},[46,12107,9329],{"class":169},[46,12109,1152],{"class":56},[46,12111,12112],{"class":169},"Sanguo",[46,12114,8531],{"class":52},[46,12116,2881],{"class":439},[46,12118,2565],{"class":56},[46,12120,2201],{"class":52},[46,12122,9344],{"class":439},[46,12124,459],{"class":56},[46,12126,12127],{"class":48,"line":676},[46,12128,3597],{"class":56},[46,12130,12131,12133,12135,12137,12139,12141,12143,12145,12147,12150,12152],{"class":48,"line":682},[46,12132,1140],{"class":52},[46,12134,1152],{"class":56},[46,12136,2201],{"class":52},[46,12138,5052],{"class":56},[46,12140,79],{"class":52},[46,12142,2379],{"class":180},[46,12144,5059],{"class":56},[46,12146,821],{"class":52},[46,12148,12149],{"class":56},"len;i",[46,12151,4321],{"class":52},[46,12153,459],{"class":56},[46,12155,12156],{"class":48,"line":688},[46,12157,4060],{"class":56},[46,12159,12160,12163,12165,12167,12169,12171,12173,12175,12177,12179,12181,12183,12185,12187,12189],{"class":48,"line":693},[46,12161,12162],{"class":52},"     for",[46,12164,3702],{"class":56},[46,12166,2201],{"class":52},[46,12168,5429],{"class":56},[46,12170,79],{"class":52},[46,12172,2379],{"class":180},[46,12174,5436],{"class":56},[46,12176,821],{"class":52},[46,12178,9371],{"class":56},[46,12180,534],{"class":52},[46,12182,2405],{"class":180},[46,12184,534],{"class":52},[46,12186,5569],{"class":56},[46,12188,4321],{"class":52},[46,12190,459],{"class":56},[46,12192,12193],{"class":48,"line":699},[46,12194,12195],{"class":56},"     {\n",[46,12197,12198,12201,12204,12206,12209,12211,12214,12216,12218,12220,12222],{"class":48,"line":705},[46,12199,12200],{"class":52},"         if",[46,12202,12203],{"class":56}," ((s",[46,12205,2668],{"class":52},[46,12207,12208],{"class":56},"j)->age ",[46,12210,884],{"class":52},[46,12212,12213],{"class":56}," (s",[46,12215,2668],{"class":52},[46,12217,2654],{"class":56},[46,12219,2668],{"class":52},[46,12221,2405],{"class":180},[46,12223,12224],{"class":56},")->age)\n",[46,12226,12227],{"class":48,"line":711},[46,12228,12229],{"class":56},"         {\n",[46,12231,12232,12235,12237,12240,12242],{"class":48,"line":717},[46,12233,12234],{"class":56},"             Sanguo temp",[46,12236,9166],{"class":52},[46,12238,12239],{"class":56},"(s",[46,12241,2668],{"class":52},[46,12243,12244],{"class":56},"j);\n",[46,12246,12247,12250,12252,12254,12257,12259,12261,12263,12265,12267,12269],{"class":48,"line":723},[46,12248,12249],{"class":52},"             *",[46,12251,12239],{"class":56},[46,12253,2668],{"class":52},[46,12255,12256],{"class":56},"j)",[46,12258,9166],{"class":52},[46,12260,12239],{"class":56},[46,12262,2668],{"class":52},[46,12264,2654],{"class":56},[46,12266,2668],{"class":52},[46,12268,2405],{"class":180},[46,12270,4740],{"class":56},[46,12272,12273,12275,12277,12279,12281,12283,12285,12287,12289],{"class":48,"line":729},[46,12274,12249],{"class":52},[46,12276,12239],{"class":56},[46,12278,2668],{"class":52},[46,12280,2654],{"class":56},[46,12282,2668],{"class":52},[46,12284,2405],{"class":180},[46,12286,2616],{"class":56},[46,12288,79],{"class":52},[46,12290,6297],{"class":56},[46,12292,12293],{"class":48,"line":735},[46,12294,12295],{"class":56},"         }\n",[46,12297,12298],{"class":48,"line":740},[46,12299,12300],{"class":56},"     }\n",[46,12302,12303],{"class":48,"line":745},[46,12304,4217],{"class":56},[46,12306,12307],{"class":48,"line":763},[46,12308,3616],{"class":56},[46,12310,12311],{"class":48,"line":778},[46,12312,12313],{"class":2253},"\u002F\u002F定义打印函数\n",[46,12315,12316,12318,12320,12322,12324,12326,12328,12330,12332,12334],{"class":48,"line":789},[46,12317,7377],{"class":52},[46,12319,11619],{"class":169},[46,12321,1152],{"class":56},[46,12323,12112],{"class":169},[46,12325,8531],{"class":52},[46,12327,2881],{"class":439},[46,12329,2565],{"class":56},[46,12331,2201],{"class":52},[46,12333,9344],{"class":439},[46,12335,459],{"class":56},[46,12337,12338],{"class":48,"line":794},[46,12339,3597],{"class":56},[46,12341,12342,12344,12346,12348,12350,12352,12354,12356,12358,12360,12362],{"class":48,"line":806},[46,12343,1140],{"class":52},[46,12345,3702],{"class":56},[46,12347,2201],{"class":52},[46,12349,5052],{"class":56},[46,12351,79],{"class":52},[46,12353,2379],{"class":180},[46,12355,5059],{"class":56},[46,12357,821],{"class":52},[46,12359,12149],{"class":56},[46,12361,4321],{"class":52},[46,12363,459],{"class":56},[46,12365,12366],{"class":48,"line":829},[46,12367,4060],{"class":56},[46,12369,12370,12372,12374,12376,12378,12381,12383,12385,12387,12390,12392,12394,12396,12399,12401,12403,12405,12408,12410,12412,12414,12417,12419,12421,12423,12426,12428],{"class":48,"line":840},[46,12371,5470],{"class":56},[46,12373,3228],{"class":52},[46,12375,2439],{"class":173},[46,12377,3285],{"class":180},[46,12379,12380],{"class":173},"姓名：\"",[46,12382,3228],{"class":52},[46,12384,12239],{"class":56},[46,12386,2668],{"class":52},[46,12388,12389],{"class":56},"i)->name",[46,12391,3228],{"class":52},[46,12393,2439],{"class":173},[46,12395,3285],{"class":180},[46,12397,12398],{"class":173},"年龄：\"",[46,12400,3228],{"class":52},[46,12402,12239],{"class":56},[46,12404,2668],{"class":52},[46,12406,12407],{"class":56},"i)->age",[46,12409,3228],{"class":52},[46,12411,2439],{"class":173},[46,12413,3285],{"class":180},[46,12415,12416],{"class":173},"性别：\"",[46,12418,3228],{"class":52},[46,12420,12239],{"class":56},[46,12422,2668],{"class":52},[46,12424,12425],{"class":56},"i)->gender",[46,12427,3228],{"class":52},[46,12429,3250],{"class":56},[46,12431,12432],{"class":48,"line":846},[46,12433,4217],{"class":56},[46,12435,12436],{"class":48,"line":852},[46,12437,3616],{"class":56},[46,12439,12440,12442,12444],{"class":48,"line":857},[46,12441,2201],{"class":52},[46,12443,751],{"class":169},[46,12445,4006],{"class":56},[46,12447,12448],{"class":48,"line":875},[46,12449,3597],{"class":56},[46,12451,12452],{"class":48,"line":892},[46,12453,12454],{"class":2253},"    \u002F\u002F定义结构体变量\n",[46,12456,12457,12460,12462,12464],{"class":48,"line":898},[46,12458,12459],{"class":56},"    Sanguo s1[",[46,12461,2506],{"class":180},[46,12463,3125],{"class":56},[46,12465,6924],{"class":52},[46,12467,12468],{"class":48,"line":903},[46,12469,4060],{"class":56},[46,12471,12472,12474,12476,12478,12480,12482,12484],{"class":48,"line":908},[46,12473,6933],{"class":56},[46,12475,11956],{"class":173},[46,12477,2565],{"class":56},[46,12479,2961],{"class":180},[46,12481,2565],{"class":56},[46,12483,11965],{"class":173},[46,12485,6946],{"class":56},[46,12487,12488,12490,12492,12494,12496,12498,12500],{"class":48,"line":925},[46,12489,6933],{"class":56},[46,12491,11974],{"class":173},[46,12493,2565],{"class":56},[46,12495,2936],{"class":180},[46,12497,2565],{"class":56},[46,12499,11965],{"class":173},[46,12501,6946],{"class":56},[46,12503,12504,12506,12508,12510,12512,12514,12516],{"class":48,"line":1238},[46,12505,6933],{"class":56},[46,12507,11991],{"class":173},[46,12509,2565],{"class":56},[46,12511,2886],{"class":180},[46,12513,2565],{"class":56},[46,12515,11965],{"class":173},[46,12517,6946],{"class":56},[46,12519,12520,12522,12524,12526,12528,12530,12532],{"class":48,"line":1251},[46,12521,6933],{"class":56},[46,12523,12008],{"class":173},[46,12525,2565],{"class":56},[46,12527,2911],{"class":180},[46,12529,2565],{"class":56},[46,12531,11965],{"class":173},[46,12533,6946],{"class":56},[46,12535,12536,12538,12540,12542,12544,12546,12548],{"class":48,"line":1256},[46,12537,6933],{"class":56},[46,12539,12025],{"class":173},[46,12541,2565],{"class":56},[46,12543,2861],{"class":180},[46,12545,2565],{"class":56},[46,12547,12034],{"class":173},[46,12549,6946],{"class":56},[46,12551,12552],{"class":48,"line":1261},[46,12553,6967],{"class":56},[46,12555,12556,12558,12560,12562,12565,12567,12570,12572],{"class":48,"line":1274},[46,12557,4015],{"class":52},[46,12559,9344],{"class":56},[46,12561,6220],{"class":52},[46,12563,12564],{"class":56},"(s1)",[46,12566,6226],{"class":52},[46,12568,12569],{"class":56},"(s1[",[46,12571,2379],{"class":180},[46,12573,5874],{"class":56},[46,12575,12576,12579,12581,12584,12586,12589,12592,12594],{"class":48,"line":10061},[46,12577,12578],{"class":56},"    Sanguo ",[46,12580,2642],{"class":52},[46,12582,12583],{"class":56},"s ",[46,12585,79],{"class":52},[46,12587,12588],{"class":52}," &",[46,12590,12591],{"class":56},"s1[",[46,12593,2379],{"class":180},[46,12595,6706],{"class":56},[46,12597,12598],{"class":48,"line":11720},[46,12599,12600],{"class":2253},"    \u002F\u002F排序前：\n",[46,12602,12603,12605,12607,12610,12612],{"class":48,"line":11745},[46,12604,8542],{"class":56},[46,12606,3228],{"class":52},[46,12608,12609],{"class":173}," \"排序前：\"",[46,12611,3496],{"class":52},[46,12613,10844],{"class":56},[46,12615,12616,12618],{"class":48,"line":11768},[46,12617,11919],{"class":169},[46,12619,12620],{"class":56},"(s,len);\n",[46,12622,12623],{"class":48,"line":11792},[46,12624,12625],{"class":2253},"    \u002F\u002F调用排序函数\n",[46,12627,12628,12630],{"class":48,"line":11797},[46,12629,9611],{"class":169},[46,12631,12620],{"class":56},[46,12633,12634],{"class":48,"line":11802},[46,12635,12636],{"class":2253},"    \u002F\u002F排序后\n",[46,12638,12639,12641,12643,12646,12648],{"class":48,"line":11807},[46,12640,8542],{"class":56},[46,12642,3228],{"class":52},[46,12644,12645],{"class":173}," \"排序后：\"",[46,12647,3496],{"class":52},[46,12649,10844],{"class":56},[46,12651,12652,12654],{"class":48,"line":11816},[46,12653,11919],{"class":169},[46,12655,12620],{"class":56},[46,12657,12658],{"class":48,"line":11821},[46,12659,3616],{"class":56},[19,12661,12662,12663,12665],{},"注意：使用指针时直接用传首地址**&s",[46,12664,2379],{},"**",[2098,12667,12668],{},"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":41,"searchDepth":60,"depth":60,"links":12670},[12671,12672,12673,12674,12675,12676,12677],{"id":9716,"depth":60,"text":9717},{"id":10069,"depth":60,"text":10070},{"id":10338,"depth":60,"text":10339},{"id":10503,"depth":60,"text":10504},{"id":10719,"depth":60,"text":10720},{"id":11040,"depth":60,"text":11041},{"id":11268,"depth":60,"text":11269},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":9705,"description":9713},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":12684,"title":12685,"body":12686,"description":41,"extension":2125,"meta":14029,"navigation":615,"path":14030,"seo":14031,"stem":14032,"__hash__":14033},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":12687,"toc":14023},[12688,12691,12695,12701,12715,12720,12723,12727,12734,12740,12743,12750,12756,12761,12764,12767,12770,13334,13337,13351,13355,13360,13376,13516,13519,13525,13528,13533,13541,13649,13652,13657,13660,13665,13668,13674,13677,14020],[10,12689,12685],{"id":12690},"_5程序内存模型",[14,12692,12694],{"id":12693},"_51内存分区模型","5.1内存分区模型",[19,12696,12697,12698],{},"C++程序在执行时，将内存大方向划分为",[2339,12699,12700],{},"4个区域",[3191,12702,12703,12706,12709,12712],{},[26,12704,12705],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[26,12707,12708],{},"全局区：存放全局变量和静态变量以及常量",[26,12710,12711],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[26,12713,12714],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[19,12716,12717],{},[2339,12718,12719],{},"内存四区意义：",[19,12721,12722],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[479,12724,12726],{"id":12725},"_511程序运行前","5.1.1程序运行前",[19,12728,12729,12730,12733],{},"​\t在程序编译后，生成了exe可执行程序，",[2339,12731,12732],{},"未执行该程序前","分为两个区域",[19,12735,12736,12737],{},"​\t",[2339,12738,12739],{},"代码区：",[19,12741,12742],{},"​\t\t存放 CPU 执行的机器指令",[19,12744,12745,12746,12749],{},"​\t\t代码区是",[2339,12747,12748],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[19,12751,12745,12752,12755],{},[2339,12753,12754],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[19,12757,12736,12758],{},[2339,12759,12760],{},"全局区：",[19,12762,12763],{},"​\t\t全局变量和静态变量存放在此.",[19,12765,12766],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[19,12768,12769],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[36,12771,12773],{"className":2187,"code":12772,"language":2189,"meta":41,"style":41},"\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",[43,12774,12775,12780,12793,12806,12810,12815,12830,12845,12849,12858,12862,12867,12880,12893,12897,12902,12928,12954,12958,12985,13011,13015,13020,13036,13051,13055,13081,13107,13111,13136,13161,13165,13191,13217,13221,13237,13252,13278,13304,13308,13318,13322,13330],{"__ignoreMap":41},[46,12776,12777],{"class":48,"line":49},[46,12778,12779],{"class":2253},"\u002F\u002F全局变量\n",[46,12781,12782,12784,12787,12789,12791],{"class":48,"line":60},[46,12783,2201],{"class":52},[46,12785,12786],{"class":56}," g_a ",[46,12788,79],{"class":52},[46,12790,4068],{"class":180},[46,12792,3345],{"class":56},[46,12794,12795,12797,12800,12802,12804],{"class":48,"line":200},[46,12796,2201],{"class":52},[46,12798,12799],{"class":56}," g_b ",[46,12801,79],{"class":52},[46,12803,4068],{"class":180},[46,12805,3345],{"class":56},[46,12807,12808],{"class":48,"line":211},[46,12809,616],{"emptyLinePlaceholder":615},[46,12811,12812],{"class":48,"line":222},[46,12813,12814],{"class":2253},"\u002F\u002F全局常量\n",[46,12816,12817,12819,12821,12824,12826,12828],{"class":48,"line":636},[46,12818,8805],{"class":52},[46,12820,4411],{"class":52},[46,12822,12823],{"class":56}," c_g_a ",[46,12825,79],{"class":52},[46,12827,4068],{"class":180},[46,12829,3345],{"class":56},[46,12831,12832,12834,12836,12839,12841,12843],{"class":48,"line":641},[46,12833,8805],{"class":52},[46,12835,4411],{"class":52},[46,12837,12838],{"class":56}," c_g_b ",[46,12840,79],{"class":52},[46,12842,4068],{"class":180},[46,12844,3345],{"class":56},[46,12846,12847],{"class":48,"line":653},[46,12848,616],{"emptyLinePlaceholder":615},[46,12850,12851,12853,12855],{"class":48,"line":659},[46,12852,2201],{"class":52},[46,12854,751],{"class":169},[46,12856,12857],{"class":56},"() {\n",[46,12859,12860],{"class":48,"line":665},[46,12861,616],{"emptyLinePlaceholder":615},[46,12863,12864],{"class":48,"line":670},[46,12865,12866],{"class":2253},"    \u002F\u002F局部变量\n",[46,12868,12869,12871,12874,12876,12878],{"class":48,"line":676},[46,12870,4015],{"class":52},[46,12872,12873],{"class":56}," a ",[46,12875,79],{"class":52},[46,12877,4068],{"class":180},[46,12879,3345],{"class":56},[46,12881,12882,12884,12887,12889,12891],{"class":48,"line":682},[46,12883,4015],{"class":52},[46,12885,12886],{"class":56}," b ",[46,12888,79],{"class":52},[46,12890,4068],{"class":180},[46,12892,3345],{"class":56},[46,12894,12895],{"class":48,"line":688},[46,12896,616],{"emptyLinePlaceholder":615},[46,12898,12899],{"class":48,"line":693},[46,12900,12901],{"class":2253},"    \u002F\u002F打印地址\n",[46,12903,12904,12906,12908,12911,12913,12915,12917,12919,12921,12924,12926],{"class":48,"line":699},[46,12905,8542],{"class":56},[46,12907,3228],{"class":52},[46,12909,12910],{"class":173}," \"局部变量a地址为： \"",[46,12912,3496],{"class":52},[46,12914,3702],{"class":56},[46,12916,2201],{"class":52},[46,12918,2616],{"class":56},[46,12920,2540],{"class":52},[46,12922,12923],{"class":56},"a ",[46,12925,3228],{"class":52},[46,12927,10844],{"class":56},[46,12929,12930,12932,12934,12937,12939,12941,12943,12945,12947,12950,12952],{"class":48,"line":705},[46,12931,8542],{"class":56},[46,12933,3228],{"class":52},[46,12935,12936],{"class":173}," \"局部变量b地址为： \"",[46,12938,3496],{"class":52},[46,12940,3702],{"class":56},[46,12942,2201],{"class":52},[46,12944,2616],{"class":56},[46,12946,2540],{"class":52},[46,12948,12949],{"class":56},"b ",[46,12951,3228],{"class":52},[46,12953,10844],{"class":56},[46,12955,12956],{"class":48,"line":711},[46,12957,616],{"emptyLinePlaceholder":615},[46,12959,12960,12962,12964,12967,12969,12972,12974,12976,12978,12981,12983],{"class":48,"line":717},[46,12961,8542],{"class":56},[46,12963,3228],{"class":52},[46,12965,12966],{"class":173}," \"全局变量g_a地址为： \"",[46,12968,3496],{"class":52},[46,12970,12971],{"class":56},"  (",[46,12973,2201],{"class":52},[46,12975,2616],{"class":56},[46,12977,2540],{"class":52},[46,12979,12980],{"class":56},"g_a ",[46,12982,3228],{"class":52},[46,12984,10844],{"class":56},[46,12986,12987,12989,12991,12994,12996,12998,13000,13002,13004,13007,13009],{"class":48,"line":723},[46,12988,8542],{"class":56},[46,12990,3228],{"class":52},[46,12992,12993],{"class":173}," \"全局变量g_b地址为： \"",[46,12995,3496],{"class":52},[46,12997,12971],{"class":56},[46,12999,2201],{"class":52},[46,13001,2616],{"class":56},[46,13003,2540],{"class":52},[46,13005,13006],{"class":56},"g_b ",[46,13008,3228],{"class":52},[46,13010,10844],{"class":56},[46,13012,13013],{"class":48,"line":729},[46,13014,616],{"emptyLinePlaceholder":615},[46,13016,13017],{"class":48,"line":735},[46,13018,13019],{"class":2253},"    \u002F\u002F静态变量\n",[46,13021,13022,13025,13027,13030,13032,13034],{"class":48,"line":740},[46,13023,13024],{"class":52},"    static",[46,13026,4411],{"class":52},[46,13028,13029],{"class":56}," s_a ",[46,13031,79],{"class":52},[46,13033,4068],{"class":180},[46,13035,3345],{"class":56},[46,13037,13038,13040,13042,13045,13047,13049],{"class":48,"line":745},[46,13039,13024],{"class":52},[46,13041,4411],{"class":52},[46,13043,13044],{"class":56}," s_b ",[46,13046,79],{"class":52},[46,13048,4068],{"class":180},[46,13050,3345],{"class":56},[46,13052,13053],{"class":48,"line":763},[46,13054,616],{"emptyLinePlaceholder":615},[46,13056,13057,13059,13061,13064,13066,13068,13070,13072,13074,13077,13079],{"class":48,"line":778},[46,13058,8542],{"class":56},[46,13060,3228],{"class":52},[46,13062,13063],{"class":173}," \"静态变量s_a地址为： \"",[46,13065,3496],{"class":52},[46,13067,3702],{"class":56},[46,13069,2201],{"class":52},[46,13071,2616],{"class":56},[46,13073,2540],{"class":52},[46,13075,13076],{"class":56},"s_a ",[46,13078,3228],{"class":52},[46,13080,10844],{"class":56},[46,13082,13083,13085,13087,13090,13092,13094,13096,13098,13100,13103,13105],{"class":48,"line":789},[46,13084,8542],{"class":56},[46,13086,3228],{"class":52},[46,13088,13089],{"class":173}," \"静态变量s_b地址为： \"",[46,13091,3496],{"class":52},[46,13093,3702],{"class":56},[46,13095,2201],{"class":52},[46,13097,2616],{"class":56},[46,13099,2540],{"class":52},[46,13101,13102],{"class":56},"s_b ",[46,13104,3228],{"class":52},[46,13106,10844],{"class":56},[46,13108,13109],{"class":48,"line":794},[46,13110,616],{"emptyLinePlaceholder":615},[46,13112,13113,13115,13117,13120,13122,13124,13126,13128,13130,13132,13134],{"class":48,"line":806},[46,13114,8542],{"class":56},[46,13116,3228],{"class":52},[46,13118,13119],{"class":173}," \"字符串常量地址为： \"",[46,13121,3496],{"class":52},[46,13123,3702],{"class":56},[46,13125,2201],{"class":52},[46,13127,2616],{"class":56},[46,13129,2540],{"class":52},[46,13131,3245],{"class":173},[46,13133,3496],{"class":52},[46,13135,10844],{"class":56},[46,13137,13138,13140,13142,13144,13146,13148,13150,13152,13154,13157,13159],{"class":48,"line":829},[46,13139,8542],{"class":56},[46,13141,3228],{"class":52},[46,13143,13119],{"class":173},[46,13145,3496],{"class":52},[46,13147,3702],{"class":56},[46,13149,2201],{"class":52},[46,13151,2616],{"class":56},[46,13153,2540],{"class":52},[46,13155,13156],{"class":173},"\"hello world1\"",[46,13158,3496],{"class":52},[46,13160,10844],{"class":56},[46,13162,13163],{"class":48,"line":840},[46,13164,616],{"emptyLinePlaceholder":615},[46,13166,13167,13169,13171,13174,13176,13178,13180,13182,13184,13187,13189],{"class":48,"line":846},[46,13168,8542],{"class":56},[46,13170,3228],{"class":52},[46,13172,13173],{"class":173}," \"全局常量c_g_a地址为： \"",[46,13175,3496],{"class":52},[46,13177,3702],{"class":56},[46,13179,2201],{"class":52},[46,13181,2616],{"class":56},[46,13183,2540],{"class":52},[46,13185,13186],{"class":56},"c_g_a ",[46,13188,3228],{"class":52},[46,13190,10844],{"class":56},[46,13192,13193,13195,13197,13200,13202,13204,13206,13208,13210,13213,13215],{"class":48,"line":852},[46,13194,8542],{"class":56},[46,13196,3228],{"class":52},[46,13198,13199],{"class":173}," \"全局常量c_g_b地址为： \"",[46,13201,3496],{"class":52},[46,13203,3702],{"class":56},[46,13205,2201],{"class":52},[46,13207,2616],{"class":56},[46,13209,2540],{"class":52},[46,13211,13212],{"class":56},"c_g_b ",[46,13214,3228],{"class":52},[46,13216,10844],{"class":56},[46,13218,13219],{"class":48,"line":857},[46,13220,616],{"emptyLinePlaceholder":615},[46,13222,13223,13226,13228,13231,13233,13235],{"class":48,"line":875},[46,13224,13225],{"class":52},"    const",[46,13227,4411],{"class":52},[46,13229,13230],{"class":56}," c_l_a ",[46,13232,79],{"class":52},[46,13234,4068],{"class":180},[46,13236,3345],{"class":56},[46,13238,13239,13241,13243,13246,13248,13250],{"class":48,"line":892},[46,13240,13225],{"class":52},[46,13242,4411],{"class":52},[46,13244,13245],{"class":56}," c_l_b ",[46,13247,79],{"class":52},[46,13249,4068],{"class":180},[46,13251,3345],{"class":56},[46,13253,13254,13256,13258,13261,13263,13265,13267,13269,13271,13274,13276],{"class":48,"line":898},[46,13255,8542],{"class":56},[46,13257,3228],{"class":52},[46,13259,13260],{"class":173}," \"局部常量c_l_a地址为： \"",[46,13262,3496],{"class":52},[46,13264,3702],{"class":56},[46,13266,2201],{"class":52},[46,13268,2616],{"class":56},[46,13270,2540],{"class":52},[46,13272,13273],{"class":56},"c_l_a ",[46,13275,3228],{"class":52},[46,13277,10844],{"class":56},[46,13279,13280,13282,13284,13287,13289,13291,13293,13295,13297,13300,13302],{"class":48,"line":903},[46,13281,8542],{"class":56},[46,13283,3228],{"class":52},[46,13285,13286],{"class":173}," \"局部常量c_l_b地址为： \"",[46,13288,3496],{"class":52},[46,13290,3702],{"class":56},[46,13292,2201],{"class":52},[46,13294,2616],{"class":56},[46,13296,2540],{"class":52},[46,13298,13299],{"class":56},"c_l_b ",[46,13301,3228],{"class":52},[46,13303,10844],{"class":56},[46,13305,13306],{"class":48,"line":908},[46,13307,616],{"emptyLinePlaceholder":615},[46,13309,13310,13312,13314,13316],{"class":48,"line":925},[46,13311,4332],{"class":169},[46,13313,1152],{"class":56},[46,13315,4337],{"class":173},[46,13317,4740],{"class":56},[46,13319,13320],{"class":48,"line":1238},[46,13321,616],{"emptyLinePlaceholder":615},[46,13323,13324,13326,13328],{"class":48,"line":1251},[46,13325,6108],{"class":52},[46,13327,887],{"class":180},[46,13329,3345],{"class":56},[46,13331,13332],{"class":48,"line":1256},[46,13333,3616],{"class":56},[19,13335,13336],{},"总结：",[3191,13338,13339,13342,13345,13348],{},[26,13340,13341],{},"c++中程序运行前分为全局区和代码区",[26,13343,13344],{},"代码区特点是共享和只读",[26,13346,13347],{},"全局区中存放全局变量、静态变量、常量",[26,13349,13350],{},"常量区中存放const修饰的全局常量和字符串常量",[479,13352,13354],{"id":13353},"_512程序运行后","5.1.2程序运行后",[23,13356,13357],{},[26,13358,13359],{},"栈区：",[3191,13361,13362,13369],{},[26,13363,13364,13365,13368],{},"由编译器自动分配释放, 存放",[2339,13366,13367],{},"函数的参数值,局部变量","等",[26,13370,13371,13372,13375],{},"注意事项：",[2339,13373,13374],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[36,13377,13379],{"className":2187,"code":13378,"language":2189,"meta":41,"style":41},"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",[43,13380,13381,13392,13396,13411,13423,13427,13431,13439,13444,13459,13477,13494,13504,13512],{"__ignoreMap":41},[46,13382,13383,13385,13387,13390],{"class":48,"line":49},[46,13384,2201],{"class":52},[46,13386,8531],{"class":52},[46,13388,13389],{"class":169}," func",[46,13391,4006],{"class":56},[46,13393,13394],{"class":48,"line":60},[46,13395,3597],{"class":56},[46,13397,13398,13400,13402,13404,13406,13408],{"class":48,"line":200},[46,13399,4015],{"class":52},[46,13401,12873],{"class":56},[46,13403,79],{"class":52},[46,13405,4068],{"class":180},[46,13407,2250],{"class":56},[46,13409,13410],{"class":2253}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[46,13412,13413,13415,13417,13420],{"class":48,"line":211},[46,13414,6108],{"class":52},[46,13416,12588],{"class":52},[46,13418,13419],{"class":56},"a;",[46,13421,13422],{"class":2253}," \u002F\u002F放回局部变量的地址\n",[46,13424,13425],{"class":48,"line":222},[46,13426,3616],{"class":56},[46,13428,13429],{"class":48,"line":636},[46,13430,616],{"emptyLinePlaceholder":615},[46,13432,13433,13435,13437],{"class":48,"line":641},[46,13434,2201],{"class":52},[46,13436,751],{"class":169},[46,13438,12857],{"class":56},[46,13440,13441],{"class":48,"line":653},[46,13442,13443],{"class":2253},"    \u002F\u002F接受func的返回值\n",[46,13445,13446,13448,13450,13453,13455,13457],{"class":48,"line":659},[46,13447,4015],{"class":52},[46,13449,8531],{"class":52},[46,13451,13452],{"class":56},"p ",[46,13454,79],{"class":52},[46,13456,13389],{"class":169},[46,13458,7649],{"class":56},[46,13460,13461,13463,13465,13467,13469,13471,13474],{"class":48,"line":665},[46,13462,8542],{"class":56},[46,13464,3228],{"class":52},[46,13466,8531],{"class":52},[46,13468,13452],{"class":56},[46,13470,3228],{"class":52},[46,13472,13473],{"class":56}," endl;",[46,13475,13476],{"class":2253}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[46,13478,13479,13481,13483,13485,13487,13489,13491],{"class":48,"line":670},[46,13480,8542],{"class":56},[46,13482,3228],{"class":52},[46,13484,8531],{"class":52},[46,13486,13452],{"class":56},[46,13488,3228],{"class":52},[46,13490,13473],{"class":56},[46,13492,13493],{"class":2253}," \u002F\u002F第二次这个数据不再保留\n",[46,13495,13496,13498,13500,13502],{"class":48,"line":676},[46,13497,4332],{"class":169},[46,13499,1152],{"class":56},[46,13501,4337],{"class":173},[46,13503,4740],{"class":56},[46,13505,13506,13508,13510],{"class":48,"line":682},[46,13507,6108],{"class":52},[46,13509,887],{"class":180},[46,13511,3345],{"class":56},[46,13513,13514],{"class":48,"line":688},[46,13515,3616],{"class":56},[19,13517,13518],{},"输出结果：",[19,13520,13521],{},[3514,13522],{"alt":13523,"src":13524},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[19,13526,13527],{},"总结：不要返回局部变量的地址",[23,13529,13530],{"start":60},[26,13531,13532],{},"堆区",[3191,13534,13535,13538],{},[26,13536,13537],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[26,13539,13540],{},"在c++中主要利用new在堆区开辟内存",[36,13542,13544],{"className":2187,"code":13543,"language":2189,"meta":41,"style":41},"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",[43,13545,13546,13561,13565,13570,13591,13598,13602,13610,13614,13619,13633,13645],{"__ignoreMap":41},[46,13547,13548,13550,13553,13556,13558],{"class":48,"line":49},[46,13549,2201],{"class":52},[46,13551,13552],{"class":52},"  *",[46,13554,13555],{"class":169},"func",[46,13557,4455],{"class":56},[46,13559,13560],{"class":2253},"  \u002F\u002F函数返回指针\n",[46,13562,13563],{"class":48,"line":60},[46,13564,3597],{"class":56},[46,13566,13567],{"class":48,"line":200},[46,13568,13569],{"class":2253},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[46,13571,13572,13574,13576,13578,13580,13583,13585,13587,13589],{"class":48,"line":211},[46,13573,6164],{"class":52},[46,13575,8531],{"class":52},[46,13577,19],{"class":56},[46,13579,79],{"class":52},[46,13581,13582],{"class":52}," new",[46,13584,4411],{"class":52},[46,13586,1152],{"class":56},[46,13588,2633],{"class":180},[46,13590,4740],{"class":56},[46,13592,13593,13595],{"class":48,"line":222},[46,13594,6398],{"class":52},[46,13596,13597],{"class":56}," p;\n",[46,13599,13600],{"class":48,"line":636},[46,13601,3616],{"class":56},[46,13603,13604,13606,13608],{"class":48,"line":641},[46,13605,2201],{"class":52},[46,13607,751],{"class":169},[46,13609,4006],{"class":56},[46,13611,13612],{"class":48,"line":653},[46,13613,3597],{"class":56},[46,13615,13616],{"class":48,"line":659},[46,13617,13618],{"class":2253},"    \u002F\u002F在堆区开辟数据\n",[46,13620,13621,13623,13625,13627,13629,13631],{"class":48,"line":665},[46,13622,4015],{"class":52},[46,13624,8531],{"class":52},[46,13626,19],{"class":56},[46,13628,79],{"class":52},[46,13630,13555],{"class":169},[46,13632,7649],{"class":56},[46,13634,13635,13637,13639,13641,13643],{"class":48,"line":670},[46,13636,3602],{"class":56},[46,13638,8432],{"class":52},[46,13640,19],{"class":56},[46,13642,3228],{"class":52},[46,13644,3250],{"class":56},[46,13646,13647],{"class":48,"line":676},[46,13648,3616],{"class":56},[19,13650,13651],{},"图片展示：",[19,13653,13654],{},[3514,13655],{"alt":13523,"src":13656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[19,13658,13659],{},"堆区内存由程序员管生死！！！",[23,13661,13662],{"start":200},[26,13663,13664],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[19,13666,13667],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[19,13669,13670,13671],{},"​语法：",[43,13672,13673],{}," new 数据类型",[19,13675,13676],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[36,13678,13680],{"className":2187,"code":13679,"language":2189,"meta":41,"style":41},"\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",[43,13681,13682,13687,13697,13701,13706,13711,13733,13737,13745,13749,13763,13775,13787,13799,13804,13809,13820,13824,13829,13837,13841,13846,13868,13894,13898,13916,13920,13946,13950,13962,13966,13971,13976,13984,13988,13992,14000,14004,14010,14016],{"__ignoreMap":41},[46,13683,13684],{"class":48,"line":49},[46,13685,13686],{"class":2253},"\u002F\u002F1.new的基本语法\n",[46,13688,13689,13691,13693,13695],{"class":48,"line":60},[46,13690,2201],{"class":52},[46,13692,8531],{"class":52},[46,13694,13555],{"class":169},[46,13696,4006],{"class":56},[46,13698,13699],{"class":48,"line":200},[46,13700,3597],{"class":56},[46,13702,13703],{"class":48,"line":211},[46,13704,13705],{"class":2253},"    \u002F\u002F在堆区创建整型数据\n",[46,13707,13708],{"class":48,"line":222},[46,13709,13710],{"class":2253},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[46,13712,13713,13715,13717,13719,13722,13724,13726,13728,13730],{"class":48,"line":636},[46,13714,4015],{"class":52},[46,13716,8531],{"class":52},[46,13718,19],{"class":56},[46,13720,13721],{"class":52},"=new",[46,13723,4411],{"class":52},[46,13725,1152],{"class":56},[46,13727,2633],{"class":180},[46,13729,7979],{"class":56},[46,13731,13732],{"class":2253},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[46,13734,13735],{"class":48,"line":641},[46,13736,3616],{"class":56},[46,13738,13739,13741,13743],{"class":48,"line":653},[46,13740,7377],{"class":52},[46,13742,7601],{"class":169},[46,13744,4006],{"class":56},[46,13746,13747],{"class":48,"line":659},[46,13748,3597],{"class":56},[46,13750,13751,13753,13755,13757,13759,13761],{"class":48,"line":665},[46,13752,4015],{"class":52},[46,13754,8531],{"class":52},[46,13756,19],{"class":56},[46,13758,79],{"class":52},[46,13760,13555],{"class":169},[46,13762,7649],{"class":56},[46,13764,13765,13767,13769,13771,13773],{"class":48,"line":670},[46,13766,3602],{"class":56},[46,13768,8432],{"class":52},[46,13770,19],{"class":56},[46,13772,3228],{"class":52},[46,13774,3250],{"class":56},[46,13776,13777,13779,13781,13783,13785],{"class":48,"line":676},[46,13778,3602],{"class":56},[46,13780,8432],{"class":52},[46,13782,19],{"class":56},[46,13784,3228],{"class":52},[46,13786,3250],{"class":56},[46,13788,13789,13791,13793,13795,13797],{"class":48,"line":682},[46,13790,3602],{"class":56},[46,13792,8432],{"class":52},[46,13794,19],{"class":56},[46,13796,3228],{"class":52},[46,13798,3250],{"class":56},[46,13800,13801],{"class":48,"line":688},[46,13802,13803],{"class":2253},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[46,13805,13806],{"class":48,"line":693},[46,13807,13808],{"class":2253},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[46,13810,13811,13814,13817],{"class":48,"line":699},[46,13812,13813],{"class":52},"    delete",[46,13815,13816],{"class":56}," p;",[46,13818,13819],{"class":2253},"\u002F\u002F删除这块地址\n",[46,13821,13822],{"class":48,"line":705},[46,13823,3616],{"class":56},[46,13825,13826],{"class":48,"line":711},[46,13827,13828],{"class":2253},"\u002F\u002F2.在堆区利用new开辟数组\n",[46,13830,13831,13833,13835],{"class":48,"line":717},[46,13832,7377],{"class":52},[46,13834,7670],{"class":169},[46,13836,4006],{"class":56},[46,13838,13839],{"class":48,"line":723},[46,13840,3597],{"class":56},[46,13842,13843],{"class":48,"line":729},[46,13844,13845],{"class":2253},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[46,13847,13848,13850,13852,13854,13856,13858,13860,13862,13865],{"class":48,"line":735},[46,13849,4015],{"class":52},[46,13851,8531],{"class":52},[46,13853,5898],{"class":56},[46,13855,13721],{"class":52},[46,13857,4411],{"class":52},[46,13859,3076],{"class":56},[46,13861,2633],{"class":180},[46,13863,13864],{"class":56},"];",[46,13866,13867],{"class":2253},"\u002F\u002F10代表数组有10个元素\n",[46,13869,13870,13872,13874,13876,13878,13880,13882,13884,13886,13888,13890,13892],{"class":48,"line":740},[46,13871,1140],{"class":52},[46,13873,3702],{"class":56},[46,13875,2201],{"class":52},[46,13877,5052],{"class":56},[46,13879,79],{"class":52},[46,13881,2379],{"class":180},[46,13883,5059],{"class":56},[46,13885,821],{"class":52},[46,13887,2633],{"class":180},[46,13889,5059],{"class":56},[46,13891,4321],{"class":52},[46,13893,459],{"class":56},[46,13895,13896],{"class":48,"line":745},[46,13897,4060],{"class":56},[46,13899,13900,13903,13905,13907,13909,13911,13913],{"class":48,"line":763},[46,13901,13902],{"class":56},"        arr[i]",[46,13904,79],{"class":52},[46,13906,2628],{"class":56},[46,13908,2668],{"class":52},[46,13910,1155],{"class":180},[46,13912,2250],{"class":56},[46,13914,13915],{"class":2253},"\u002F\u002F给10个元素赋值100～109\n",[46,13917,13918],{"class":48,"line":778},[46,13919,4217],{"class":56},[46,13921,13922,13924,13926,13928,13930,13932,13934,13936,13938,13940,13942,13944],{"class":48,"line":789},[46,13923,1140],{"class":52},[46,13925,3702],{"class":56},[46,13927,2201],{"class":52},[46,13929,5052],{"class":56},[46,13931,79],{"class":52},[46,13933,2379],{"class":180},[46,13935,5059],{"class":56},[46,13937,821],{"class":52},[46,13939,2633],{"class":180},[46,13941,5059],{"class":56},[46,13943,4321],{"class":52},[46,13945,459],{"class":56},[46,13947,13948],{"class":48,"line":794},[46,13949,4060],{"class":56},[46,13951,13952,13954,13956,13958,13960],{"class":48,"line":806},[46,13953,5470],{"class":56},[46,13955,3228],{"class":52},[46,13957,6371],{"class":56},[46,13959,3228],{"class":52},[46,13961,3250],{"class":56},[46,13963,13964],{"class":48,"line":829},[46,13965,4217],{"class":56},[46,13967,13968],{"class":48,"line":840},[46,13969,13970],{"class":2253},"    \u002F\u002F释放堆区数组\n",[46,13972,13973],{"class":48,"line":846},[46,13974,13975],{"class":2253},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[46,13977,13978,13981],{"class":48,"line":852},[46,13979,13980],{"class":52},"    delete[]",[46,13982,13983],{"class":56}," arr;\n",[46,13985,13986],{"class":48,"line":857},[46,13987,3616],{"class":56},[46,13989,13990],{"class":48,"line":875},[46,13991,616],{"emptyLinePlaceholder":615},[46,13993,13994,13996,13998],{"class":48,"line":892},[46,13995,2201],{"class":52},[46,13997,751],{"class":169},[46,13999,4006],{"class":56},[46,14001,14002],{"class":48,"line":898},[46,14003,3597],{"class":56},[46,14005,14006,14008],{"class":48,"line":903},[46,14007,7646],{"class":169},[46,14009,7649],{"class":56},[46,14011,14012,14014],{"class":48,"line":908},[46,14013,7715],{"class":169},[46,14015,7649],{"class":56},[46,14017,14018],{"class":48,"line":925},[46,14019,3616],{"class":56},[2098,14021,14022],{},"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":41,"searchDepth":60,"depth":60,"links":14024},[14025],{"id":12693,"depth":60,"text":12694,"children":14026},[14027,14028],{"id":12725,"depth":200,"text":12726},{"id":13353,"depth":200,"text":13354},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":12685,"description":41},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":14035,"title":14036,"body":14037,"description":41,"extension":2125,"meta":15517,"navigation":615,"path":15518,"seo":15519,"stem":15520,"__hash__":15521},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":14038,"toc":15509},[14039,14042,14046,14049,14052,14221,14225,14230,14247,14252,14404,14408,14411,14414,14807,14811,14814,14819,14822,15134,15138,15144,15304,15306,15314,15318,15321,15328,15506],[10,14040,14036],{"id":14041},"_6引用",[14,14043,14045],{"id":14044},"_61引用基本用法","6.1引用基本用法",[19,14047,14048],{},"引用的本质：给变量起别名",[19,14050,14051],{},"语法：数据类型 &别名=原名",[36,14053,14055],{"className":2187,"code":14054,"language":2189,"meta":41,"style":41},"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",[43,14056,14057,14065,14069,14081,14093,14097,14116,14135,14139,14150,14154,14173,14191,14195,14205,14209,14217],{"__ignoreMap":41},[46,14058,14059,14061,14063],{"class":48,"line":49},[46,14060,2201],{"class":52},[46,14062,751],{"class":169},[46,14064,12857],{"class":56},[46,14066,14067],{"class":48,"line":60},[46,14068,616],{"emptyLinePlaceholder":615},[46,14070,14071,14073,14075,14077,14079],{"class":48,"line":200},[46,14072,4015],{"class":52},[46,14074,12873],{"class":56},[46,14076,79],{"class":52},[46,14078,4068],{"class":180},[46,14080,3345],{"class":56},[46,14082,14083,14085,14087,14089,14091],{"class":48,"line":211},[46,14084,4015],{"class":52},[46,14086,12588],{"class":52},[46,14088,12949],{"class":56},[46,14090,79],{"class":52},[46,14092,3484],{"class":56},[46,14094,14095],{"class":48,"line":222},[46,14096,616],{"emptyLinePlaceholder":615},[46,14098,14099,14101,14103,14106,14108,14110,14112,14114],{"class":48,"line":636},[46,14100,8542],{"class":56},[46,14102,3228],{"class":52},[46,14104,14105],{"class":173}," \"a = \"",[46,14107,3496],{"class":52},[46,14109,12873],{"class":56},[46,14111,3228],{"class":52},[46,14113,13473],{"class":56},[46,14115,9281],{"class":2253},[46,14117,14118,14120,14122,14125,14127,14129,14131,14133],{"class":48,"line":641},[46,14119,8542],{"class":56},[46,14121,3228],{"class":52},[46,14123,14124],{"class":173}," \"b = \"",[46,14126,3496],{"class":52},[46,14128,12886],{"class":56},[46,14130,3228],{"class":52},[46,14132,13473],{"class":56},[46,14134,9281],{"class":2253},[46,14136,14137],{"class":48,"line":653},[46,14138,616],{"emptyLinePlaceholder":615},[46,14140,14141,14144,14146,14148],{"class":48,"line":659},[46,14142,14143],{"class":56},"    b ",[46,14145,79],{"class":52},[46,14147,7767],{"class":180},[46,14149,3345],{"class":56},[46,14151,14152],{"class":48,"line":665},[46,14153,616],{"emptyLinePlaceholder":615},[46,14155,14156,14158,14160,14162,14164,14166,14168,14170],{"class":48,"line":670},[46,14157,8542],{"class":56},[46,14159,3228],{"class":52},[46,14161,14105],{"class":173},[46,14163,3496],{"class":52},[46,14165,12873],{"class":56},[46,14167,3228],{"class":52},[46,14169,13473],{"class":56},[46,14171,14172],{"class":2253},"\u002F\u002F100\n",[46,14174,14175,14177,14179,14181,14183,14185,14187,14189],{"class":48,"line":676},[46,14176,8542],{"class":56},[46,14178,3228],{"class":52},[46,14180,14124],{"class":173},[46,14182,3496],{"class":52},[46,14184,12886],{"class":56},[46,14186,3228],{"class":52},[46,14188,13473],{"class":56},[46,14190,14172],{"class":2253},[46,14192,14193],{"class":48,"line":682},[46,14194,616],{"emptyLinePlaceholder":615},[46,14196,14197,14199,14201,14203],{"class":48,"line":688},[46,14198,4332],{"class":169},[46,14200,1152],{"class":56},[46,14202,4337],{"class":173},[46,14204,4740],{"class":56},[46,14206,14207],{"class":48,"line":693},[46,14208,616],{"emptyLinePlaceholder":615},[46,14210,14211,14213,14215],{"class":48,"line":699},[46,14212,6108],{"class":52},[46,14214,887],{"class":180},[46,14216,3345],{"class":56},[46,14218,14219],{"class":48,"line":705},[46,14220,3616],{"class":56},[14,14222,14224],{"id":14223},"_62引用的注意事项","6.2引用的注意事项",[23,14226,14227],{},[26,14228,14229],{},"引用必须要初始化",[36,14231,14233],{"className":2187,"code":14232,"language":2189,"meta":41,"style":41},"int &b;\u002F\u002F非常错误！\n",[43,14234,14235],{"__ignoreMap":41},[46,14236,14237,14239,14241,14244],{"class":48,"line":49},[46,14238,2201],{"class":52},[46,14240,12588],{"class":52},[46,14242,14243],{"class":56},"b;",[46,14245,14246],{"class":2253},"\u002F\u002F非常错误！\n",[23,14248,14249],{"start":60},[26,14250,14251],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[36,14253,14255],{"className":2187,"code":14254,"language":2189,"meta":41,"style":41},"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",[43,14256,14257,14265,14277,14289,14297,14313,14326,14344,14362,14382,14392,14400],{"__ignoreMap":41},[46,14258,14259,14261,14263],{"class":48,"line":49},[46,14260,2201],{"class":52},[46,14262,751],{"class":169},[46,14264,12857],{"class":56},[46,14266,14267,14269,14271,14273,14275],{"class":48,"line":60},[46,14268,4015],{"class":52},[46,14270,12873],{"class":56},[46,14272,79],{"class":52},[46,14274,4068],{"class":180},[46,14276,3345],{"class":56},[46,14278,14279,14281,14283,14285,14287],{"class":48,"line":200},[46,14280,4015],{"class":52},[46,14282,12886],{"class":56},[46,14284,79],{"class":52},[46,14286,10954],{"class":180},[46,14288,3345],{"class":56},[46,14290,14291,14294],{"class":48,"line":211},[46,14292,14293],{"class":2253},"    \u002F\u002Fint &c;",[46,14295,14296],{"class":2253}," \u002F\u002F错误，引用必须初始化\n",[46,14298,14299,14301,14303,14305,14307,14310],{"class":48,"line":222},[46,14300,4015],{"class":52},[46,14302,12588],{"class":52},[46,14304,4967],{"class":56},[46,14306,79],{"class":52},[46,14308,14309],{"class":56}," a;",[46,14311,14312],{"class":2253}," \u002F\u002F一旦初始化后，就不可以更改\n",[46,14314,14315,14318,14320,14323],{"class":48,"line":636},[46,14316,14317],{"class":56},"    c ",[46,14319,79],{"class":52},[46,14321,14322],{"class":56}," b;",[46,14324,14325],{"class":2253}," \u002F\u002F这是赋值操作，不是更改引用\n",[46,14327,14328,14330,14332,14334,14336,14338,14340,14342],{"class":48,"line":641},[46,14329,8542],{"class":56},[46,14331,3228],{"class":52},[46,14333,14105],{"class":173},[46,14335,3496],{"class":52},[46,14337,12873],{"class":56},[46,14339,3228],{"class":52},[46,14341,13473],{"class":56},[46,14343,9266],{"class":2253},[46,14345,14346,14348,14350,14352,14354,14356,14358,14360],{"class":48,"line":653},[46,14347,8542],{"class":56},[46,14349,3228],{"class":52},[46,14351,14124],{"class":173},[46,14353,3496],{"class":52},[46,14355,12886],{"class":56},[46,14357,3228],{"class":52},[46,14359,13473],{"class":56},[46,14361,9266],{"class":2253},[46,14363,14364,14366,14368,14371,14373,14376,14378,14380],{"class":48,"line":659},[46,14365,8542],{"class":56},[46,14367,3228],{"class":52},[46,14369,14370],{"class":173}," \"c = \"",[46,14372,3496],{"class":52},[46,14374,14375],{"class":56}," c ",[46,14377,3228],{"class":52},[46,14379,13473],{"class":56},[46,14381,9266],{"class":2253},[46,14383,14384,14386,14388,14390],{"class":48,"line":665},[46,14385,4332],{"class":169},[46,14387,1152],{"class":56},[46,14389,4337],{"class":173},[46,14391,4740],{"class":56},[46,14393,14394,14396,14398],{"class":48,"line":670},[46,14395,6108],{"class":52},[46,14397,887],{"class":180},[46,14399,3345],{"class":56},[46,14401,14402],{"class":48,"line":676},[46,14403,3616],{"class":56},[14,14405,14407],{"id":14406},"_63引用做函数参数","6.3引用做函数参数",[19,14409,14410],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[19,14412,14413],{},"优点：可以简化指针修改实参",[36,14415,14417],{"className":2187,"code":14416,"language":2189,"meta":41,"style":41},"\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",[43,14418,14419,14424,14446,14457,14467,14476,14480,14484,14489,14511,14523,14535,14545,14549,14553,14558,14580,14590,14598,14606,14610,14614,14622,14626,14638,14650,14654,14665,14691,14695,14715,14739,14743,14753,14777,14781,14791,14795,14803],{"__ignoreMap":41},[46,14420,14421],{"class":48,"line":49},[46,14422,14423],{"class":2253},"\u002F\u002F1. 值传递\n",[46,14425,14426,14428,14431,14433,14435,14437,14439,14441,14443],{"class":48,"line":60},[46,14427,7377],{"class":52},[46,14429,14430],{"class":169}," mySwap01",[46,14432,1152],{"class":56},[46,14434,2201],{"class":52},[46,14436,3450],{"class":439},[46,14438,448],{"class":56},[46,14440,2201],{"class":52},[46,14442,4854],{"class":439},[46,14444,14445],{"class":56},") {\n",[46,14447,14448,14450,14453,14455],{"class":48,"line":200},[46,14449,4015],{"class":52},[46,14451,14452],{"class":56}," temp ",[46,14454,79],{"class":52},[46,14456,3484],{"class":56},[46,14458,14459,14462,14464],{"class":48,"line":211},[46,14460,14461],{"class":56},"    a ",[46,14463,79],{"class":52},[46,14465,14466],{"class":56}," b;\n",[46,14468,14469,14471,14473],{"class":48,"line":222},[46,14470,14143],{"class":56},[46,14472,79],{"class":52},[46,14474,14475],{"class":56}," temp;\n",[46,14477,14478],{"class":48,"line":636},[46,14479,3616],{"class":56},[46,14481,14482],{"class":48,"line":641},[46,14483,616],{"emptyLinePlaceholder":615},[46,14485,14486],{"class":48,"line":653},[46,14487,14488],{"class":2253},"\u002F\u002F2. 地址传递\n",[46,14490,14491,14493,14496,14498,14501,14503,14505,14507,14509],{"class":48,"line":659},[46,14492,7377],{"class":52},[46,14494,14495],{"class":169}," mySwap02",[46,14497,1152],{"class":56},[46,14499,14500],{"class":52},"int*",[46,14502,3450],{"class":439},[46,14504,448],{"class":56},[46,14506,14500],{"class":52},[46,14508,4854],{"class":439},[46,14510,14445],{"class":56},[46,14512,14513,14515,14517,14519,14521],{"class":48,"line":665},[46,14514,4015],{"class":52},[46,14516,14452],{"class":56},[46,14518,79],{"class":52},[46,14520,8531],{"class":52},[46,14522,8210],{"class":56},[46,14524,14525,14527,14529,14531,14533],{"class":48,"line":670},[46,14526,8416],{"class":52},[46,14528,12923],{"class":56},[46,14530,79],{"class":52},[46,14532,8531],{"class":52},[46,14534,8082],{"class":56},[46,14536,14537,14539,14541,14543],{"class":48,"line":676},[46,14538,8416],{"class":52},[46,14540,12949],{"class":56},[46,14542,79],{"class":52},[46,14544,14475],{"class":56},[46,14546,14547],{"class":48,"line":682},[46,14548,3616],{"class":56},[46,14550,14551],{"class":48,"line":688},[46,14552,616],{"emptyLinePlaceholder":615},[46,14554,14555],{"class":48,"line":693},[46,14556,14557],{"class":2253},"\u002F\u002F3. 引用传递\n",[46,14559,14560,14562,14565,14567,14570,14572,14574,14576,14578],{"class":48,"line":699},[46,14561,7377],{"class":52},[46,14563,14564],{"class":169}," mySwap03",[46,14566,1152],{"class":56},[46,14568,14569],{"class":52},"int&",[46,14571,3450],{"class":439},[46,14573,448],{"class":56},[46,14575,14569],{"class":52},[46,14577,4854],{"class":439},[46,14579,14445],{"class":56},[46,14581,14582,14584,14586,14588],{"class":48,"line":705},[46,14583,4015],{"class":52},[46,14585,14452],{"class":56},[46,14587,79],{"class":52},[46,14589,3484],{"class":56},[46,14591,14592,14594,14596],{"class":48,"line":711},[46,14593,14461],{"class":56},[46,14595,79],{"class":52},[46,14597,14466],{"class":56},[46,14599,14600,14602,14604],{"class":48,"line":717},[46,14601,14143],{"class":56},[46,14603,79],{"class":52},[46,14605,14475],{"class":56},[46,14607,14608],{"class":48,"line":723},[46,14609,3616],{"class":56},[46,14611,14612],{"class":48,"line":729},[46,14613,616],{"emptyLinePlaceholder":615},[46,14615,14616,14618,14620],{"class":48,"line":735},[46,14617,2201],{"class":52},[46,14619,751],{"class":169},[46,14621,12857],{"class":56},[46,14623,14624],{"class":48,"line":740},[46,14625,616],{"emptyLinePlaceholder":615},[46,14627,14628,14630,14632,14634,14636],{"class":48,"line":745},[46,14629,4015],{"class":52},[46,14631,12873],{"class":56},[46,14633,79],{"class":52},[46,14635,4068],{"class":180},[46,14637,3345],{"class":56},[46,14639,14640,14642,14644,14646,14648],{"class":48,"line":763},[46,14641,4015],{"class":52},[46,14643,12886],{"class":56},[46,14645,79],{"class":52},[46,14647,10954],{"class":180},[46,14649,3345],{"class":56},[46,14651,14652],{"class":48,"line":778},[46,14653,616],{"emptyLinePlaceholder":615},[46,14655,14656,14659,14662],{"class":48,"line":789},[46,14657,14658],{"class":169},"    mySwap01",[46,14660,14661],{"class":56},"(a, b);",[46,14663,14664],{"class":2253},"\u002F\u002F值传递，形参不会修饰实参\n",[46,14666,14667,14669,14671,14674,14676,14678,14680,14683,14685,14687,14689],{"class":48,"line":794},[46,14668,8542],{"class":56},[46,14670,3228],{"class":52},[46,14672,14673],{"class":173}," \"a:\"",[46,14675,3496],{"class":52},[46,14677,12873],{"class":56},[46,14679,3228],{"class":52},[46,14681,14682],{"class":173}," \" b:\"",[46,14684,3496],{"class":52},[46,14686,12886],{"class":56},[46,14688,3228],{"class":52},[46,14690,10844],{"class":56},[46,14692,14693],{"class":48,"line":806},[46,14694,616],{"emptyLinePlaceholder":615},[46,14696,14697,14700,14702,14704,14707,14709,14712],{"class":48,"line":829},[46,14698,14699],{"class":169},"    mySwap02",[46,14701,1152],{"class":56},[46,14703,2540],{"class":52},[46,14705,14706],{"class":56},"a, ",[46,14708,2540],{"class":52},[46,14710,14711],{"class":56},"b);",[46,14713,14714],{"class":2253},"\u002F\u002F地址传递，形参会修饰实参\n",[46,14716,14717,14719,14721,14723,14725,14727,14729,14731,14733,14735,14737],{"class":48,"line":840},[46,14718,8542],{"class":56},[46,14720,3228],{"class":52},[46,14722,14673],{"class":173},[46,14724,3496],{"class":52},[46,14726,12873],{"class":56},[46,14728,3228],{"class":52},[46,14730,14682],{"class":173},[46,14732,3496],{"class":52},[46,14734,12886],{"class":56},[46,14736,3228],{"class":52},[46,14738,10844],{"class":56},[46,14740,14741],{"class":48,"line":846},[46,14742,616],{"emptyLinePlaceholder":615},[46,14744,14745,14748,14750],{"class":48,"line":852},[46,14746,14747],{"class":169},"    mySwap03",[46,14749,14661],{"class":56},[46,14751,14752],{"class":2253},"\u002F\u002F引用传递，形参会修饰实参\n",[46,14754,14755,14757,14759,14761,14763,14765,14767,14769,14771,14773,14775],{"class":48,"line":857},[46,14756,8542],{"class":56},[46,14758,3228],{"class":52},[46,14760,14673],{"class":173},[46,14762,3496],{"class":52},[46,14764,12873],{"class":56},[46,14766,3228],{"class":52},[46,14768,14682],{"class":173},[46,14770,3496],{"class":52},[46,14772,12886],{"class":56},[46,14774,3228],{"class":52},[46,14776,10844],{"class":56},[46,14778,14779],{"class":48,"line":875},[46,14780,616],{"emptyLinePlaceholder":615},[46,14782,14783,14785,14787,14789],{"class":48,"line":892},[46,14784,4332],{"class":169},[46,14786,1152],{"class":56},[46,14788,4337],{"class":173},[46,14790,4740],{"class":56},[46,14792,14793],{"class":48,"line":898},[46,14794,616],{"emptyLinePlaceholder":615},[46,14796,14797,14799,14801],{"class":48,"line":903},[46,14798,6108],{"class":52},[46,14800,887],{"class":180},[46,14802,3345],{"class":56},[46,14804,14805],{"class":48,"line":908},[46,14806,3616],{"class":56},[14,14808,14810],{"id":14809},"_64引用做函数的返回值","6.4引用做函数的返回值",[19,14812,14813],{},"作用：引用是可以作为函数的返回值存在的",[19,14815,11029,14816],{},[2339,14817,14818],{},"不要返回局部变量引用",[19,14820,14821],{},"用法：函数调用作为左值",[36,14823,14825],{"className":11945,"code":14824,"language":11947,"meta":41,"style":41},"\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",[43,14826,14827,14832,14840,14855,14861,14865,14869,14874,14882,14899,14905,14909,14913,14921,14925,14930,14944,14964,14983,14987,14992,15005,15025,15043,15047,15063,15067,15086,15104,15108,15118,15122,15130],{"__ignoreMap":41},[46,14828,14829],{"class":48,"line":49},[46,14830,14831],{"class":2253},"\u002F\u002F返回局部变量引用\n",[46,14833,14834,14836,14838],{"class":48,"line":60},[46,14835,14569],{"class":52},[46,14837,7601],{"class":169},[46,14839,12857],{"class":56},[46,14841,14842,14844,14846,14848,14850,14852],{"class":48,"line":200},[46,14843,4015],{"class":52},[46,14845,12873],{"class":56},[46,14847,79],{"class":52},[46,14849,4068],{"class":180},[46,14851,2250],{"class":56},[46,14853,14854],{"class":2253}," \u002F\u002F局部变量\n",[46,14856,14857,14859],{"class":48,"line":211},[46,14858,6108],{"class":52},[46,14860,3484],{"class":56},[46,14862,14863],{"class":48,"line":222},[46,14864,3616],{"class":56},[46,14866,14867],{"class":48,"line":636},[46,14868,616],{"emptyLinePlaceholder":615},[46,14870,14871],{"class":48,"line":641},[46,14872,14873],{"class":2253},"\u002F\u002F返回静态变量引用\n",[46,14875,14876,14878,14880],{"class":48,"line":653},[46,14877,14569],{"class":52},[46,14879,7670],{"class":169},[46,14881,12857],{"class":56},[46,14883,14884,14886,14888,14890,14892,14894,14896],{"class":48,"line":659},[46,14885,13024],{"class":52},[46,14887,4411],{"class":52},[46,14889,12873],{"class":56},[46,14891,79],{"class":52},[46,14893,10954],{"class":180},[46,14895,2250],{"class":56},[46,14897,14898],{"class":2253},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[46,14900,14901,14903],{"class":48,"line":665},[46,14902,6108],{"class":52},[46,14904,3484],{"class":56},[46,14906,14907],{"class":48,"line":670},[46,14908,3616],{"class":56},[46,14910,14911],{"class":48,"line":676},[46,14912,616],{"emptyLinePlaceholder":615},[46,14914,14915,14917,14919],{"class":48,"line":682},[46,14916,2201],{"class":52},[46,14918,751],{"class":169},[46,14920,12857],{"class":56},[46,14922,14923],{"class":48,"line":688},[46,14924,616],{"emptyLinePlaceholder":615},[46,14926,14927],{"class":48,"line":693},[46,14928,14929],{"class":2253},"    \u002F\u002F不能返回局部变量的引用\n",[46,14931,14932,14935,14938,14940,14942],{"class":48,"line":699},[46,14933,14934],{"class":52},"    int&",[46,14936,14937],{"class":56}," ref ",[46,14939,79],{"class":52},[46,14941,7601],{"class":169},[46,14943,7649],{"class":56},[46,14945,14946,14948,14950,14953,14955,14957,14959,14961],{"class":48,"line":705},[46,14947,8542],{"class":56},[46,14949,3228],{"class":52},[46,14951,14952],{"class":173}," \"ref = \"",[46,14954,3496],{"class":52},[46,14956,14937],{"class":56},[46,14958,3228],{"class":52},[46,14960,13473],{"class":56},[46,14962,14963],{"class":2253},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[46,14965,14966,14968,14970,14972,14974,14976,14978,14980],{"class":48,"line":711},[46,14967,8542],{"class":56},[46,14969,3228],{"class":52},[46,14971,14952],{"class":173},[46,14973,3496],{"class":52},[46,14975,14937],{"class":56},[46,14977,3228],{"class":52},[46,14979,13473],{"class":56},[46,14981,14982],{"class":2253},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[46,14984,14985],{"class":48,"line":717},[46,14986,616],{"emptyLinePlaceholder":615},[46,14988,14989],{"class":48,"line":723},[46,14990,14991],{"class":2253},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[46,14993,14994,14996,14999,15001,15003],{"class":48,"line":729},[46,14995,14934],{"class":52},[46,14997,14998],{"class":56}," ref2 ",[46,15000,79],{"class":52},[46,15002,7670],{"class":169},[46,15004,7649],{"class":56},[46,15006,15007,15009,15011,15014,15016,15018,15020,15022],{"class":48,"line":735},[46,15008,8542],{"class":56},[46,15010,3228],{"class":52},[46,15012,15013],{"class":173}," \"ref2 = \"",[46,15015,3496],{"class":52},[46,15017,14998],{"class":56},[46,15019,3228],{"class":52},[46,15021,13473],{"class":56},[46,15023,15024],{"class":2253}," \u002F\u002F20\n",[46,15026,15027,15029,15031,15033,15035,15037,15039,15041],{"class":48,"line":740},[46,15028,8542],{"class":56},[46,15030,3228],{"class":52},[46,15032,15013],{"class":173},[46,15034,3496],{"class":52},[46,15036,14998],{"class":56},[46,15038,3228],{"class":52},[46,15040,13473],{"class":56},[46,15042,15024],{"class":2253},[46,15044,15045],{"class":48,"line":745},[46,15046,616],{"emptyLinePlaceholder":615},[46,15048,15049,15051,15054,15056,15058,15060],{"class":48,"line":763},[46,15050,7715],{"class":169},[46,15052,15053],{"class":56},"() ",[46,15055,79],{"class":52},[46,15057,5020],{"class":180},[46,15059,2250],{"class":56},[46,15061,15062],{"class":2253},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[46,15064,15065],{"class":48,"line":778},[46,15066,616],{"emptyLinePlaceholder":615},[46,15068,15069,15071,15073,15075,15077,15079,15081,15083],{"class":48,"line":789},[46,15070,8542],{"class":56},[46,15072,3228],{"class":52},[46,15074,15013],{"class":173},[46,15076,3496],{"class":52},[46,15078,14998],{"class":56},[46,15080,3228],{"class":52},[46,15082,13473],{"class":56},[46,15084,15085],{"class":2253}," \u002F\u002F1000\n",[46,15087,15088,15090,15092,15094,15096,15098,15100,15102],{"class":48,"line":794},[46,15089,8542],{"class":56},[46,15091,3228],{"class":52},[46,15093,15013],{"class":173},[46,15095,3496],{"class":52},[46,15097,14998],{"class":56},[46,15099,3228],{"class":52},[46,15101,13473],{"class":56},[46,15103,15085],{"class":2253},[46,15105,15106],{"class":48,"line":806},[46,15107,616],{"emptyLinePlaceholder":615},[46,15109,15110,15112,15114,15116],{"class":48,"line":829},[46,15111,4332],{"class":169},[46,15113,1152],{"class":56},[46,15115,4337],{"class":173},[46,15117,4740],{"class":56},[46,15119,15120],{"class":48,"line":840},[46,15121,616],{"emptyLinePlaceholder":615},[46,15123,15124,15126,15128],{"class":48,"line":846},[46,15125,6108],{"class":52},[46,15127,887],{"class":180},[46,15129,3345],{"class":56},[46,15131,15132],{"class":48,"line":852},[46,15133,3616],{"class":56},[14,15135,15137],{"id":15136},"_65引用的本质","6.5引用的本质",[19,15139,15140,15141],{},"本质：",[2339,15142,15143],{},"引用的本质在c++内部实现是一个指针常量.",[36,15145,15147],{"className":2187,"code":15146,"language":2189,"meta":41,"style":41},"\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",[43,15148,15149,15154,15170,15184,15188,15197,15209,15214,15219,15230,15243,15247,15263,15280,15284,15292,15300],{"__ignoreMap":41},[46,15150,15151],{"class":48,"line":49},[46,15152,15153],{"class":2253},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[46,15155,15156,15158,15160,15162,15164,15167],{"class":48,"line":60},[46,15157,7377],{"class":52},[46,15159,13389],{"class":169},[46,15161,1152],{"class":56},[46,15163,14569],{"class":52},[46,15165,15166],{"class":439}," ref",[46,15168,15169],{"class":56},"){\n",[46,15171,15172,15175,15177,15179,15181],{"class":48,"line":200},[46,15173,15174],{"class":56},"    ref ",[46,15176,79],{"class":52},[46,15178,7767],{"class":180},[46,15180,2250],{"class":56},[46,15182,15183],{"class":2253}," \u002F\u002F ref是引用，转换为*ref = 100\n",[46,15185,15186],{"class":48,"line":211},[46,15187,3616],{"class":56},[46,15189,15190,15192,15194],{"class":48,"line":222},[46,15191,2201],{"class":52},[46,15193,751],{"class":169},[46,15195,15196],{"class":56},"(){\n",[46,15198,15199,15201,15203,15205,15207],{"class":48,"line":636},[46,15200,4015],{"class":52},[46,15202,12873],{"class":56},[46,15204,79],{"class":52},[46,15206,4068],{"class":180},[46,15208,3345],{"class":56},[46,15210,15211],{"class":48,"line":641},[46,15212,15213],{"class":56},"    \n",[46,15215,15216],{"class":48,"line":653},[46,15217,15218],{"class":2253},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[46,15220,15221,15223,15225,15227],{"class":48,"line":659},[46,15222,14934],{"class":52},[46,15224,14937],{"class":56},[46,15226,79],{"class":52},[46,15228,15229],{"class":56}," a; \n",[46,15231,15232,15234,15236,15238,15240],{"class":48,"line":665},[46,15233,15174],{"class":56},[46,15235,79],{"class":52},[46,15237,10954],{"class":180},[46,15239,2250],{"class":56},[46,15241,15242],{"class":2253}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[46,15244,15245],{"class":48,"line":670},[46,15246,15213],{"class":56},[46,15248,15249,15251,15253,15255,15257,15259,15261],{"class":48,"line":676},[46,15250,8542],{"class":56},[46,15252,3228],{"class":52},[46,15254,14673],{"class":173},[46,15256,3496],{"class":52},[46,15258,12873],{"class":56},[46,15260,3228],{"class":52},[46,15262,10844],{"class":56},[46,15264,15265,15267,15269,15272,15274,15276,15278],{"class":48,"line":682},[46,15266,8542],{"class":56},[46,15268,3228],{"class":52},[46,15270,15271],{"class":173}," \"ref:\"",[46,15273,3496],{"class":52},[46,15275,14937],{"class":56},[46,15277,3228],{"class":52},[46,15279,10844],{"class":56},[46,15281,15282],{"class":48,"line":688},[46,15283,15213],{"class":56},[46,15285,15286,15289],{"class":48,"line":693},[46,15287,15288],{"class":169},"    func",[46,15290,15291],{"class":56},"(a);\n",[46,15293,15294,15296,15298],{"class":48,"line":699},[46,15295,6108],{"class":52},[46,15297,887],{"class":180},[46,15299,3345],{"class":56},[46,15301,15302],{"class":48,"line":705},[46,15303,3616],{"class":56},[19,15305,13336],{},[23,15307,15308,15311],{},[26,15309,15310],{},"引用的本质，就是一个指针常量",[26,15312,15313],{},"引用一旦初始化，就不可以发生改变",[14,15315,15317],{"id":15316},"_66常量引用","6.6常量引用",[19,15319,15320],{},"作用：常量引用主要用来修饰形参",[19,15322,15323,15324,15327],{},"在函数形参列表中，可以加",[2339,15325,15326],{},"const修饰形参","，防止形参改变实参",[36,15329,15331],{"className":2187,"code":15330,"language":2189,"meta":41,"style":41},"\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",[43,15332,15333,15338,15343,15362,15367,15380,15384,15388,15396,15400,15405,15410,15424,15428,15436,15448,15452,15457,15469,15476,15480,15490,15494,15502],{"__ignoreMap":41},[46,15334,15335],{"class":48,"line":49},[46,15336,15337],{"class":2253},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[46,15339,15340],{"class":48,"line":60},[46,15341,15342],{"class":2253},"\u002F\u002F加上const就不能修改实参的\n",[46,15344,15345,15347,15350,15352,15354,15357,15360],{"class":48,"line":200},[46,15346,7377],{"class":52},[46,15348,15349],{"class":169}," showValue",[46,15351,1152],{"class":56},[46,15353,8805],{"class":52},[46,15355,15356],{"class":52}," int&",[46,15358,15359],{"class":439}," v",[46,15361,14445],{"class":56},[46,15363,15364],{"class":48,"line":211},[46,15365,15366],{"class":2253},"    \u002F\u002Fv += 100;\n",[46,15368,15369,15371,15373,15376,15378],{"class":48,"line":222},[46,15370,8542],{"class":56},[46,15372,3228],{"class":52},[46,15374,15375],{"class":56}," v ",[46,15377,3228],{"class":52},[46,15379,10844],{"class":56},[46,15381,15382],{"class":48,"line":636},[46,15383,3616],{"class":56},[46,15385,15386],{"class":48,"line":641},[46,15387,616],{"emptyLinePlaceholder":615},[46,15389,15390,15392,15394],{"class":48,"line":653},[46,15391,2201],{"class":52},[46,15393,751],{"class":169},[46,15395,12857],{"class":56},[46,15397,15398],{"class":48,"line":659},[46,15399,616],{"emptyLinePlaceholder":615},[46,15401,15402],{"class":48,"line":665},[46,15403,15404],{"class":2253},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[46,15406,15407],{"class":48,"line":670},[46,15408,15409],{"class":2253},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[46,15411,15412,15414,15416,15418,15420,15422],{"class":48,"line":676},[46,15413,13225],{"class":52},[46,15415,15356],{"class":52},[46,15417,14937],{"class":56},[46,15419,79],{"class":52},[46,15421,4068],{"class":180},[46,15423,3345],{"class":56},[46,15425,15426],{"class":48,"line":682},[46,15427,616],{"emptyLinePlaceholder":615},[46,15429,15430,15433],{"class":48,"line":688},[46,15431,15432],{"class":2253},"    \u002F\u002Fref = 100;",[46,15434,15435],{"class":2253},"  \u002F\u002F加入const后不可以修改变量\n",[46,15437,15438,15440,15442,15444,15446],{"class":48,"line":693},[46,15439,8542],{"class":56},[46,15441,3228],{"class":52},[46,15443,14937],{"class":56},[46,15445,3228],{"class":52},[46,15447,10844],{"class":56},[46,15449,15450],{"class":48,"line":699},[46,15451,616],{"emptyLinePlaceholder":615},[46,15453,15454],{"class":48,"line":705},[46,15455,15456],{"class":2253},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[46,15458,15459,15461,15463,15465,15467],{"class":48,"line":711},[46,15460,4015],{"class":52},[46,15462,12873],{"class":56},[46,15464,79],{"class":52},[46,15466,4068],{"class":180},[46,15468,3345],{"class":56},[46,15470,15471,15474],{"class":48,"line":717},[46,15472,15473],{"class":169},"    showValue",[46,15475,15291],{"class":56},[46,15477,15478],{"class":48,"line":723},[46,15479,616],{"emptyLinePlaceholder":615},[46,15481,15482,15484,15486,15488],{"class":48,"line":729},[46,15483,4332],{"class":169},[46,15485,1152],{"class":56},[46,15487,4337],{"class":173},[46,15489,4740],{"class":56},[46,15491,15492],{"class":48,"line":735},[46,15493,616],{"emptyLinePlaceholder":615},[46,15495,15496,15498,15500],{"class":48,"line":740},[46,15497,6108],{"class":52},[46,15499,887],{"class":180},[46,15501,3345],{"class":56},[46,15503,15504],{"class":48,"line":745},[46,15505,3616],{"class":56},[2098,15507,15508],{},"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":41,"searchDepth":60,"depth":60,"links":15510},[15511,15512,15513,15514,15515,15516],{"id":14044,"depth":60,"text":14045},{"id":14223,"depth":60,"text":14224},{"id":14406,"depth":60,"text":14407},{"id":14809,"depth":60,"text":14810},{"id":15136,"depth":60,"text":15137},{"id":15316,"depth":60,"text":15317},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":14036,"description":41},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":15523,"title":15524,"body":15525,"description":41,"extension":2125,"meta":16605,"navigation":615,"path":16606,"seo":16607,"stem":16608,"__hash__":16609},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":15526,"toc":16597},[15527,15530,15534,15537,15542,15773,15775,15786,15790,15793,15801,15905,15908,15912,15915,15919,15922,15927,15949,15955,16282,16285,16289,16297,16594],[10,15528,15524],{"id":15529},"_7函数高级部分",[14,15531,15533],{"id":15532},"_71函数默认参数","7.1函数默认参数",[19,15535,15536],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[19,15538,7197,15539],{},[43,15540,15541],{}," 返回值类型  函数名 （参数= 默认值）{}",[36,15543,15545],{"className":2187,"code":15544,"language":2189,"meta":41,"style":41},"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",[43,15546,15547,15581,15596,15600,15604,15609,15614,15643,15663,15673,15677,15681,15689,15693,15721,15743,15747,15757,15761,15769],{"__ignoreMap":41},[46,15548,15549,15551,15553,15555,15557,15559,15561,15563,15565,15567,15569,15571,15573,15575,15577,15579],{"class":48,"line":49},[46,15550,2201],{"class":52},[46,15552,13389],{"class":169},[46,15554,1152],{"class":56},[46,15556,2201],{"class":52},[46,15558,3450],{"class":439},[46,15560,448],{"class":56},[46,15562,2201],{"class":52},[46,15564,4854],{"class":439},[46,15566,647],{"class":52},[46,15568,4068],{"class":180},[46,15570,448],{"class":56},[46,15572,2201],{"class":52},[46,15574,4870],{"class":439},[46,15576,647],{"class":52},[46,15578,4068],{"class":180},[46,15580,14445],{"class":56},[46,15582,15583,15585,15587,15589,15591,15593],{"class":48,"line":60},[46,15584,6108],{"class":52},[46,15586,12873],{"class":56},[46,15588,2668],{"class":52},[46,15590,12886],{"class":56},[46,15592,2668],{"class":52},[46,15594,15595],{"class":56}," c;\n",[46,15597,15598],{"class":48,"line":200},[46,15599,3616],{"class":56},[46,15601,15602],{"class":48,"line":211},[46,15603,616],{"emptyLinePlaceholder":615},[46,15605,15606],{"class":48,"line":222},[46,15607,15608],{"class":2253},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[46,15610,15611],{"class":48,"line":636},[46,15612,15613],{"class":2253},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[46,15615,15616,15618,15621,15623,15625,15627,15629,15631,15633,15635,15637,15639,15641],{"class":48,"line":641},[46,15617,2201],{"class":52},[46,15619,15620],{"class":169}," func2",[46,15622,1152],{"class":56},[46,15624,2201],{"class":52},[46,15626,3450],{"class":439},[46,15628,647],{"class":52},[46,15630,4068],{"class":180},[46,15632,448],{"class":56},[46,15634,2201],{"class":52},[46,15636,4854],{"class":439},[46,15638,647],{"class":52},[46,15640,4068],{"class":180},[46,15642,4740],{"class":56},[46,15644,15645,15647,15649,15651,15653,15655,15657,15659,15661],{"class":48,"line":653},[46,15646,2201],{"class":52},[46,15648,15620],{"class":169},[46,15650,1152],{"class":56},[46,15652,2201],{"class":52},[46,15654,3450],{"class":439},[46,15656,448],{"class":56},[46,15658,2201],{"class":52},[46,15660,4854],{"class":439},[46,15662,14445],{"class":56},[46,15664,15665,15667,15669,15671],{"class":48,"line":659},[46,15666,6108],{"class":52},[46,15668,12873],{"class":56},[46,15670,2668],{"class":52},[46,15672,14466],{"class":56},[46,15674,15675],{"class":48,"line":665},[46,15676,3616],{"class":56},[46,15678,15679],{"class":48,"line":670},[46,15680,616],{"emptyLinePlaceholder":615},[46,15682,15683,15685,15687],{"class":48,"line":676},[46,15684,2201],{"class":52},[46,15686,751],{"class":169},[46,15688,12857],{"class":56},[46,15690,15691],{"class":48,"line":682},[46,15692,616],{"emptyLinePlaceholder":615},[46,15694,15695,15697,15699,15702,15704,15706,15708,15710,15712,15714,15717,15719],{"class":48,"line":688},[46,15696,8542],{"class":56},[46,15698,3228],{"class":52},[46,15700,15701],{"class":173}," \"ret = \"",[46,15703,3496],{"class":52},[46,15705,13389],{"class":169},[46,15707,1152],{"class":56},[46,15709,2886],{"class":180},[46,15711,448],{"class":56},[46,15713,2886],{"class":180},[46,15715,15716],{"class":56},") ",[46,15718,3228],{"class":52},[46,15720,10844],{"class":56},[46,15722,15723,15725,15727,15729,15731,15733,15735,15737,15739,15741],{"class":48,"line":693},[46,15724,8542],{"class":56},[46,15726,3228],{"class":52},[46,15728,15701],{"class":173},[46,15730,3496],{"class":52},[46,15732,13389],{"class":169},[46,15734,1152],{"class":56},[46,15736,1155],{"class":180},[46,15738,15716],{"class":56},[46,15740,3228],{"class":52},[46,15742,10844],{"class":56},[46,15744,15745],{"class":48,"line":699},[46,15746,616],{"emptyLinePlaceholder":615},[46,15748,15749,15751,15753,15755],{"class":48,"line":705},[46,15750,4332],{"class":169},[46,15752,1152],{"class":56},[46,15754,4337],{"class":173},[46,15756,4740],{"class":56},[46,15758,15759],{"class":48,"line":711},[46,15760,616],{"emptyLinePlaceholder":615},[46,15762,15763,15765,15767],{"class":48,"line":717},[46,15764,6108],{"class":52},[46,15766,887],{"class":180},[46,15768,3345],{"class":56},[46,15770,15771],{"class":48,"line":723},[46,15772,3616],{"class":56},[19,15774,13336],{},[23,15776,15777,15780,15783],{},[26,15778,15779],{},"我传就用我；没传就用你",[26,15781,15782],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[26,15784,15785],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,15787,15789],{"id":15788},"_72函数的占位参数","7.2函数的占位参数",[19,15791,15792],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[19,15794,15795,15797,15798],{},[2339,15796,7197],{}," ",[43,15799,15800],{},"返回值类型 函数名 (数据类型){}",[36,15802,15804],{"className":2187,"code":15803,"language":2189,"meta":41,"style":41},"\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",[43,15805,15806,15811,15829,15842,15846,15854,15858,15875,15879,15889,15893,15901],{"__ignoreMap":41},[46,15807,15808],{"class":48,"line":49},[46,15809,15810],{"class":2253},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[46,15812,15813,15815,15817,15819,15821,15823,15825,15827],{"class":48,"line":60},[46,15814,7377],{"class":52},[46,15816,13389],{"class":169},[46,15818,1152],{"class":56},[46,15820,2201],{"class":52},[46,15822,3450],{"class":439},[46,15824,448],{"class":56},[46,15826,2201],{"class":52},[46,15828,14445],{"class":56},[46,15830,15831,15833,15835,15838,15840],{"class":48,"line":200},[46,15832,8542],{"class":56},[46,15834,3228],{"class":52},[46,15836,15837],{"class":173}," \"this is func\"",[46,15839,3496],{"class":52},[46,15841,10844],{"class":56},[46,15843,15844],{"class":48,"line":211},[46,15845,3616],{"class":56},[46,15847,15848,15850,15852],{"class":48,"line":222},[46,15849,2201],{"class":52},[46,15851,751],{"class":169},[46,15853,12857],{"class":56},[46,15855,15856],{"class":48,"line":636},[46,15857,616],{"emptyLinePlaceholder":615},[46,15859,15860,15862,15864,15866,15868,15870,15872],{"class":48,"line":641},[46,15861,15288],{"class":169},[46,15863,1152],{"class":56},[46,15865,2633],{"class":180},[46,15867,2565],{"class":56},[46,15869,2633],{"class":180},[46,15871,7979],{"class":56},[46,15873,15874],{"class":2253}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[46,15876,15877],{"class":48,"line":653},[46,15878,616],{"emptyLinePlaceholder":615},[46,15880,15881,15883,15885,15887],{"class":48,"line":659},[46,15882,4332],{"class":169},[46,15884,1152],{"class":56},[46,15886,4337],{"class":173},[46,15888,4740],{"class":56},[46,15890,15891],{"class":48,"line":665},[46,15892,616],{"emptyLinePlaceholder":615},[46,15894,15895,15897,15899],{"class":48,"line":670},[46,15896,6108],{"class":52},[46,15898,887],{"class":180},[46,15900,3345],{"class":56},[46,15902,15903],{"class":48,"line":676},[46,15904,3616],{"class":56},[19,15906,15907],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,15909,15911],{"id":15910},"_73函数重载","7.3函数重载",[19,15913,15914],{},"意思是函数名是可以相同的",[479,15916,15918],{"id":15917},"_731基本语法","7.3.1基本语法",[19,15920,15921],{},"作用：函数名可以相同，提高复用性",[19,15923,15924],{},[2339,15925,15926],{},"函数重载满足条件：",[3191,15928,15929,15932,15935],{},[26,15930,15931],{},"同一个作用域下",[26,15933,15934],{},"函数名称相同",[26,15936,15937,15938,15941,15942,15945,15946],{},"函数参数",[2339,15939,15940],{},"类型不同","  或者 ",[2339,15943,15944],{},"个数不同"," 或者 ",[2339,15947,15948],{},"顺序不同",[19,15950,15951,15954],{},[2339,15952,15953],{},"注意:","  函数的返回值不可以作为函数重载的条件",[36,15956,15958],{"className":11945,"code":15957,"language":11947,"meta":41,"style":41},"\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",[43,15959,15960,15965,15973,15977,15990,15994,16008,16012,16025,16029,16044,16048,16061,16065,16086,16090,16103,16107,16127,16131,16144,16148,16152,16157,16162,16167,16172,16177,16181,16185,16193,16197,16203,16213,16223,16237,16252,16256,16266,16270,16278],{"__ignoreMap":41},[46,15961,15962],{"class":48,"line":49},[46,15963,15964],{"class":2253},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[46,15966,15967,15969,15971],{"class":48,"line":60},[46,15968,7377],{"class":52},[46,15970,13389],{"class":169},[46,15972,4006],{"class":56},[46,15974,15975],{"class":48,"line":200},[46,15976,3597],{"class":56},[46,15978,15979,15981,15983,15986,15988],{"class":48,"line":211},[46,15980,8542],{"class":56},[46,15982,3228],{"class":52},[46,15984,15985],{"class":173}," \"func 的调用！\"",[46,15987,3496],{"class":52},[46,15989,10844],{"class":56},[46,15991,15992],{"class":48,"line":222},[46,15993,3616],{"class":56},[46,15995,15996,15998,16000,16002,16004,16006],{"class":48,"line":636},[46,15997,7377],{"class":52},[46,15999,13389],{"class":169},[46,16001,1152],{"class":56},[46,16003,2201],{"class":52},[46,16005,3450],{"class":439},[46,16007,459],{"class":56},[46,16009,16010],{"class":48,"line":641},[46,16011,3597],{"class":56},[46,16013,16014,16016,16018,16021,16023],{"class":48,"line":653},[46,16015,8542],{"class":56},[46,16017,3228],{"class":52},[46,16019,16020],{"class":173}," \"func (int a) 的调用！\"",[46,16022,3496],{"class":52},[46,16024,10844],{"class":56},[46,16026,16027],{"class":48,"line":659},[46,16028,3616],{"class":56},[46,16030,16031,16033,16035,16037,16040,16042],{"class":48,"line":665},[46,16032,7377],{"class":52},[46,16034,13389],{"class":169},[46,16036,1152],{"class":56},[46,16038,16039],{"class":52},"double",[46,16041,3450],{"class":439},[46,16043,459],{"class":56},[46,16045,16046],{"class":48,"line":670},[46,16047,3597],{"class":56},[46,16049,16050,16052,16054,16057,16059],{"class":48,"line":676},[46,16051,8542],{"class":56},[46,16053,3228],{"class":52},[46,16055,16056],{"class":173}," \"func (double a)的调用！\"",[46,16058,3496],{"class":52},[46,16060,10844],{"class":56},[46,16062,16063],{"class":48,"line":682},[46,16064,3616],{"class":56},[46,16066,16067,16069,16071,16073,16075,16077,16080,16082,16084],{"class":48,"line":688},[46,16068,7377],{"class":52},[46,16070,13389],{"class":169},[46,16072,1152],{"class":56},[46,16074,2201],{"class":52},[46,16076,3450],{"class":439},[46,16078,16079],{"class":56}," ,",[46,16081,16039],{"class":52},[46,16083,4854],{"class":439},[46,16085,459],{"class":56},[46,16087,16088],{"class":48,"line":693},[46,16089,3597],{"class":56},[46,16091,16092,16094,16096,16099,16101],{"class":48,"line":699},[46,16093,8542],{"class":56},[46,16095,3228],{"class":52},[46,16097,16098],{"class":173}," \"func (int a ,double b) 的调用！\"",[46,16100,3496],{"class":52},[46,16102,10844],{"class":56},[46,16104,16105],{"class":48,"line":705},[46,16106,3616],{"class":56},[46,16108,16109,16111,16113,16115,16117,16119,16121,16123,16125],{"class":48,"line":711},[46,16110,7377],{"class":52},[46,16112,13389],{"class":169},[46,16114,1152],{"class":56},[46,16116,16039],{"class":52},[46,16118,3450],{"class":439},[46,16120,16079],{"class":56},[46,16122,2201],{"class":52},[46,16124,4854],{"class":439},[46,16126,459],{"class":56},[46,16128,16129],{"class":48,"line":717},[46,16130,3597],{"class":56},[46,16132,16133,16135,16137,16140,16142],{"class":48,"line":723},[46,16134,8542],{"class":56},[46,16136,3228],{"class":52},[46,16138,16139],{"class":173}," \"func (double a ,int b)的调用！\"",[46,16141,3496],{"class":52},[46,16143,10844],{"class":56},[46,16145,16146],{"class":48,"line":729},[46,16147,3616],{"class":56},[46,16149,16150],{"class":48,"line":735},[46,16151,616],{"emptyLinePlaceholder":615},[46,16153,16154],{"class":48,"line":740},[46,16155,16156],{"class":2253},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[46,16158,16159],{"class":48,"line":745},[46,16160,16161],{"class":2253},"\u002F\u002Fint func(double a, int b)\n",[46,16163,16164],{"class":48,"line":763},[46,16165,16166],{"class":2253},"\u002F\u002F{\n",[46,16168,16169],{"class":48,"line":778},[46,16170,16171],{"class":2253},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[46,16173,16174],{"class":48,"line":789},[46,16175,16176],{"class":2253},"\u002F\u002F}\n",[46,16178,16179],{"class":48,"line":794},[46,16180,616],{"emptyLinePlaceholder":615},[46,16182,16183],{"class":48,"line":806},[46,16184,616],{"emptyLinePlaceholder":615},[46,16186,16187,16189,16191],{"class":48,"line":829},[46,16188,2201],{"class":52},[46,16190,751],{"class":169},[46,16192,12857],{"class":56},[46,16194,16195],{"class":48,"line":840},[46,16196,616],{"emptyLinePlaceholder":615},[46,16198,16199,16201],{"class":48,"line":846},[46,16200,15288],{"class":169},[46,16202,7649],{"class":56},[46,16204,16205,16207,16209,16211],{"class":48,"line":852},[46,16206,15288],{"class":169},[46,16208,1152],{"class":56},[46,16210,2633],{"class":180},[46,16212,4740],{"class":56},[46,16214,16215,16217,16219,16221],{"class":48,"line":857},[46,16216,15288],{"class":169},[46,16218,1152],{"class":56},[46,16220,2244],{"class":180},[46,16222,4740],{"class":56},[46,16224,16225,16227,16229,16231,16233,16235],{"class":48,"line":875},[46,16226,15288],{"class":169},[46,16228,1152],{"class":56},[46,16230,2633],{"class":180},[46,16232,2565],{"class":56},[46,16234,2244],{"class":180},[46,16236,4740],{"class":56},[46,16238,16239,16241,16243,16245,16248,16250],{"class":48,"line":892},[46,16240,15288],{"class":169},[46,16242,1152],{"class":56},[46,16244,2244],{"class":180},[46,16246,16247],{"class":56}," , ",[46,16249,2633],{"class":180},[46,16251,4740],{"class":56},[46,16253,16254],{"class":48,"line":898},[46,16255,15213],{"class":56},[46,16257,16258,16260,16262,16264],{"class":48,"line":903},[46,16259,4332],{"class":169},[46,16261,1152],{"class":56},[46,16263,4337],{"class":173},[46,16265,4740],{"class":56},[46,16267,16268],{"class":48,"line":908},[46,16269,616],{"emptyLinePlaceholder":615},[46,16271,16272,16274,16276],{"class":48,"line":925},[46,16273,6108],{"class":52},[46,16275,887],{"class":180},[46,16277,3345],{"class":56},[46,16279,16280],{"class":48,"line":1238},[46,16281,3616],{"class":56},[19,16283,16284],{},"重点：函数返回值不可以作为函数重载条件！",[479,16286,16288],{"id":16287},"_732注意事项","7.3.2注意事项",[3191,16290,16291,16294],{},[26,16292,16293],{},"引用作为重载条件!!!",[26,16295,16296],{},"函数重载碰到函数默认参数",[36,16298,16300],{"className":2187,"code":16299,"language":2189,"meta":41,"style":41},"\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",[43,16301,16302,16307,16312,16316,16332,16336,16349,16353,16357,16375,16379,16392,16396,16400,16404,16409,16413,16437,16441,16454,16458,16462,16476,16480,16493,16497,16501,16509,16513,16525,16535,16548,16552,16556,16564,16568,16578,16582,16590],{"__ignoreMap":41},[46,16303,16304],{"class":48,"line":49},[46,16305,16306],{"class":2253},"\u002F\u002F函数重载注意事项\n",[46,16308,16309],{"class":48,"line":60},[46,16310,16311],{"class":2253},"\u002F\u002F1、引用作为重载条件\n",[46,16313,16314],{"class":48,"line":200},[46,16315,616],{"emptyLinePlaceholder":615},[46,16317,16318,16320,16322,16324,16326,16328,16330],{"class":48,"line":211},[46,16319,7377],{"class":52},[46,16321,13389],{"class":169},[46,16323,1152],{"class":56},[46,16325,2201],{"class":52},[46,16327,12588],{"class":52},[46,16329,2426],{"class":439},[46,16331,459],{"class":56},[46,16333,16334],{"class":48,"line":222},[46,16335,3597],{"class":56},[46,16337,16338,16340,16342,16345,16347],{"class":48,"line":636},[46,16339,8542],{"class":56},[46,16341,3228],{"class":52},[46,16343,16344],{"class":173}," \"func (int &a) 调用 \"",[46,16346,3496],{"class":52},[46,16348,10844],{"class":56},[46,16350,16351],{"class":48,"line":641},[46,16352,3616],{"class":56},[46,16354,16355],{"class":48,"line":653},[46,16356,616],{"emptyLinePlaceholder":615},[46,16358,16359,16361,16363,16365,16367,16369,16371,16373],{"class":48,"line":659},[46,16360,7377],{"class":52},[46,16362,13389],{"class":169},[46,16364,1152],{"class":56},[46,16366,8805],{"class":52},[46,16368,4411],{"class":52},[46,16370,12588],{"class":52},[46,16372,2426],{"class":439},[46,16374,459],{"class":56},[46,16376,16377],{"class":48,"line":665},[46,16378,3597],{"class":56},[46,16380,16381,16383,16385,16388,16390],{"class":48,"line":670},[46,16382,8542],{"class":56},[46,16384,3228],{"class":52},[46,16386,16387],{"class":173}," \"func (const int &a) 调用 \"",[46,16389,3496],{"class":52},[46,16391,10844],{"class":56},[46,16393,16394],{"class":48,"line":676},[46,16395,3616],{"class":56},[46,16397,16398],{"class":48,"line":682},[46,16399,616],{"emptyLinePlaceholder":615},[46,16401,16402],{"class":48,"line":688},[46,16403,616],{"emptyLinePlaceholder":615},[46,16405,16406],{"class":48,"line":693},[46,16407,16408],{"class":2253},"\u002F\u002F2、函数重载碰到函数默认参数\n",[46,16410,16411],{"class":48,"line":699},[46,16412,616],{"emptyLinePlaceholder":615},[46,16414,16415,16417,16419,16421,16423,16425,16427,16429,16431,16433,16435],{"class":48,"line":705},[46,16416,7377],{"class":52},[46,16418,15620],{"class":169},[46,16420,1152],{"class":56},[46,16422,2201],{"class":52},[46,16424,3450],{"class":439},[46,16426,448],{"class":56},[46,16428,2201],{"class":52},[46,16430,4854],{"class":439},[46,16432,647],{"class":52},[46,16434,4068],{"class":180},[46,16436,459],{"class":56},[46,16438,16439],{"class":48,"line":711},[46,16440,3597],{"class":56},[46,16442,16443,16445,16447,16450,16452],{"class":48,"line":717},[46,16444,8542],{"class":56},[46,16446,3228],{"class":52},[46,16448,16449],{"class":173}," \"func2(int a, int b = 10) 调用\"",[46,16451,3496],{"class":52},[46,16453,10844],{"class":56},[46,16455,16456],{"class":48,"line":723},[46,16457,3616],{"class":56},[46,16459,16460],{"class":48,"line":729},[46,16461,616],{"emptyLinePlaceholder":615},[46,16463,16464,16466,16468,16470,16472,16474],{"class":48,"line":735},[46,16465,7377],{"class":52},[46,16467,15620],{"class":169},[46,16469,1152],{"class":56},[46,16471,2201],{"class":52},[46,16473,3450],{"class":439},[46,16475,459],{"class":56},[46,16477,16478],{"class":48,"line":740},[46,16479,3597],{"class":56},[46,16481,16482,16484,16486,16489,16491],{"class":48,"line":745},[46,16483,8542],{"class":56},[46,16485,3228],{"class":52},[46,16487,16488],{"class":173}," \"func2(int a) 调用\"",[46,16490,3496],{"class":52},[46,16492,10844],{"class":56},[46,16494,16495],{"class":48,"line":763},[46,16496,3616],{"class":56},[46,16498,16499],{"class":48,"line":778},[46,16500,616],{"emptyLinePlaceholder":615},[46,16502,16503,16505,16507],{"class":48,"line":789},[46,16504,2201],{"class":52},[46,16506,751],{"class":169},[46,16508,12857],{"class":56},[46,16510,16511],{"class":48,"line":794},[46,16512,15213],{"class":56},[46,16514,16515,16517,16519,16521,16523],{"class":48,"line":806},[46,16516,4015],{"class":52},[46,16518,12873],{"class":56},[46,16520,79],{"class":52},[46,16522,4068],{"class":180},[46,16524,3345],{"class":56},[46,16526,16527,16529,16532],{"class":48,"line":829},[46,16528,15288],{"class":169},[46,16530,16531],{"class":56},"(a);",[46,16533,16534],{"class":2253}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[46,16536,16537,16539,16541,16543,16545],{"class":48,"line":840},[46,16538,15288],{"class":169},[46,16540,1152],{"class":56},[46,16542,2633],{"class":180},[46,16544,7979],{"class":56},[46,16546,16547],{"class":2253},"\u002F\u002F调用有const   10是个常量\n",[46,16549,16550],{"class":48,"line":846},[46,16551,616],{"emptyLinePlaceholder":615},[46,16553,16554],{"class":48,"line":852},[46,16555,616],{"emptyLinePlaceholder":615},[46,16557,16558,16561],{"class":48,"line":857},[46,16559,16560],{"class":2253},"    \u002F\u002Ffunc2(10);",[46,16562,16563],{"class":2253}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[46,16565,16566],{"class":48,"line":875},[46,16567,616],{"emptyLinePlaceholder":615},[46,16569,16570,16572,16574,16576],{"class":48,"line":892},[46,16571,4332],{"class":169},[46,16573,1152],{"class":56},[46,16575,4337],{"class":173},[46,16577,4740],{"class":56},[46,16579,16580],{"class":48,"line":898},[46,16581,616],{"emptyLinePlaceholder":615},[46,16583,16584,16586,16588],{"class":48,"line":903},[46,16585,6108],{"class":52},[46,16587,887],{"class":180},[46,16589,3345],{"class":56},[46,16591,16592],{"class":48,"line":908},[46,16593,3616],{"class":56},[2098,16595,16596],{},"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":41,"searchDepth":60,"depth":60,"links":16598},[16599,16600,16601],{"id":15532,"depth":60,"text":15533},{"id":15788,"depth":60,"text":15789},{"id":15910,"depth":60,"text":15911,"children":16602},[16603,16604],{"id":15917,"depth":200,"text":15918},{"id":16287,"depth":200,"text":16288},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":15524,"description":41},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":16611,"title":16612,"body":16613,"description":25366,"extension":2125,"meta":25367,"navigation":615,"path":25368,"seo":25369,"stem":25370,"__hash__":25371},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":16614,"toc":25347},[16615,16618,16624,16631,16636,16639,16642,16645,16649,16653,16656,16659,16667,16672,16675,16682,16687,16846,16849,17101,17104,17107,17110,17115,17118,17121,17132,17137,17373,17377,17387,17390,17398,17545,17549,17552,17555,17559,18004,18008,18016,18024,18936,18943,18948,19576,19579,19582,19585,19704,19707,19794,19797,19923,19926,20020,20023,20376,20380,20388,20392,20399,20402,20405,20416,20422,20427,20439,20447,20467,20475,20492,20678,20681,20685,20688,20691,20694,20697,20700,20703,20706,21166,21172,21176,21179,21190,21777,21780,22269,22273,22276,22279,22282,22285,22288,22296,22692,22696,22699,22702,23149,23152,23155,23160,23163,23168,23171,23175,23178,23180,23186,23189,23495,23505,23546,23550,23553,23555,23588,23591,23898,23900,23915,23918,23941,23950,23956,23959,23963,23966,23969,23974,23985,23990,23998,24003,24133,24136,24139,24314,24319,24531,24535,24538,24652,24657,24896,24900,24904,24907,24910,24915,25020,25023,25026,25029,25033,25144,25147,25150,25155,25207,25210,25213,25218,25264,25267,25272,25340,25342,25345],[10,16616,16612],{"id":16617},"_8类和对象",[19,16619,16620,16621],{},"C++面向对象的三大特性为",[2339,16622,16623],{},"封装、继承、多态",[19,16625,16626,16627,16630],{},"C++认为",[2339,16628,16629],{},"万事万物都皆为对象","，对象上有其属性和行为",[19,16632,16633],{},[2339,16634,16635],{},"例如：",[19,16637,16638],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[19,16640,16641],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[19,16643,16644],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,16646,16648],{"id":16647},"_81封装","8.1封装",[479,16650,16652],{"id":16651},"_811封装的意义","8.1.1封装的意义",[19,16654,16655],{},"封装是C++面向对象三大特性之一",[19,16657,16658],{},"封装的意义：",[3191,16660,16661,16664],{},[26,16662,16663],{},"将属性和行为作为一个整体，表现生活中的事物",[26,16665,16666],{},"将属性和行为加以权限控制",[19,16668,16669],{},[2339,16670,16671],{},"封装意义一：",[19,16673,16674],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[19,16676,16677,15797,16679],{},[2339,16678,7197],{},[43,16680,16681],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[23,16683,16684],{},[26,16685,16686],{},"**示例1：**设计一个圆类，求圆的周长",[36,16688,16690],{"className":2187,"code":16689,"language":2189,"meta":41,"style":41},"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",[43,16691,16692,16700,16704,16709,16714,16719,16724,16731,16736,16746,16750,16768,16772,16776,16784,16788,16793,16798,16803,16808,16819,16842],{"__ignoreMap":41},[46,16693,16694,16697],{"class":48,"line":49},[46,16695,16696],{"class":52},"class",[46,16698,16699],{"class":169}," Circle\n",[46,16701,16702],{"class":48,"line":60},[46,16703,3597],{"class":56},[46,16705,16706],{"class":48,"line":200},[46,16707,16708],{"class":2253},"    \u002F\u002F访问权限\n",[46,16710,16711],{"class":48,"line":211},[46,16712,16713],{"class":2253},"    \u002F\u002F公共权限\n",[46,16715,16716],{"class":48,"line":222},[46,16717,16718],{"class":52},"public:\n",[46,16720,16721],{"class":48,"line":636},[46,16722,16723],{"class":2253},"    \u002F\u002F属性\n",[46,16725,16726,16728],{"class":48,"line":641},[46,16727,4015],{"class":52},[46,16729,16730],{"class":56}," m_r;\n",[46,16732,16733],{"class":48,"line":653},[46,16734,16735],{"class":2253},"    \u002F\u002F行为\n",[46,16737,16738,16741,16744],{"class":48,"line":659},[46,16739,16740],{"class":52},"    double",[46,16742,16743],{"class":169}," calculateZC",[46,16745,4006],{"class":56},[46,16747,16748],{"class":48,"line":665},[46,16749,4060],{"class":56},[46,16751,16752,16755,16758,16760,16763,16765],{"class":48,"line":670},[46,16753,16754],{"class":52},"        return",[46,16756,16757],{"class":180}," 2",[46,16759,2642],{"class":52},[46,16761,16762],{"class":56},"PI",[46,16764,2642],{"class":52},[46,16766,16767],{"class":56},"m_r;\n",[46,16769,16770],{"class":48,"line":676},[46,16771,4217],{"class":56},[46,16773,16774],{"class":48,"line":682},[46,16775,6013],{"class":56},[46,16777,16778,16780,16782],{"class":48,"line":688},[46,16779,2201],{"class":52},[46,16781,751],{"class":169},[46,16783,4006],{"class":56},[46,16785,16786],{"class":48,"line":693},[46,16787,3597],{"class":56},[46,16789,16790],{"class":48,"line":699},[46,16791,16792],{"class":2253},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[46,16794,16795],{"class":48,"line":705},[46,16796,16797],{"class":2253},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[46,16799,16800],{"class":48,"line":711},[46,16801,16802],{"class":56},"    Circle c1;\n",[46,16804,16805],{"class":48,"line":717},[46,16806,16807],{"class":2253},"    \u002F\u002F给圆对象 的属性进行赋值\n",[46,16809,16810,16813,16815,16817],{"class":48,"line":723},[46,16811,16812],{"class":56},"    c1.m_r",[46,16814,79],{"class":52},[46,16816,2633],{"class":180},[46,16818,3345],{"class":56},[46,16820,16821,16823,16825,16828,16830,16833,16836,16838,16840],{"class":48,"line":729},[46,16822,3602],{"class":56},[46,16824,3228],{"class":52},[46,16826,16827],{"class":173},"\"圆的周长\"",[46,16829,3228],{"class":52},[46,16831,16832],{"class":56},"c1.",[46,16834,16835],{"class":169},"calculateZC",[46,16837,4455],{"class":56},[46,16839,3228],{"class":52},[46,16841,3250],{"class":56},[46,16843,16844],{"class":48,"line":735},[46,16845,3616],{"class":56},[19,16847,16848],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[36,16850,16852],{"className":2187,"code":16851,"language":2189,"meta":41,"style":41},"#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",[43,16853,16854,16860,16870,16876,16882,16886,16890,16895,16902,16907,16924,16928,16938,16942,16947,16963,16967,16977,16981,16986,16994,16998,17030,17034,17038,17046,17050,17055,17060,17074,17088,17097],{"__ignoreMap":41},[46,16855,16856,16858],{"class":48,"line":49},[46,16857,3981],{"class":52},[46,16859,3984],{"class":173},[46,16861,16862,16864,16866,16868],{"class":48,"line":60},[46,16863,3989],{"class":52},[46,16865,3992],{"class":52},[46,16867,3995],{"class":169},[46,16869,3345],{"class":56},[46,16871,16872,16874],{"class":48,"line":200},[46,16873,3981],{"class":52},[46,16875,9762],{"class":173},[46,16877,16878,16880],{"class":48,"line":211},[46,16879,16696],{"class":52},[46,16881,9775],{"class":169},[46,16883,16884],{"class":48,"line":222},[46,16885,3597],{"class":56},[46,16887,16888],{"class":48,"line":636},[46,16889,16718],{"class":52},[46,16891,16892],{"class":48,"line":641},[46,16893,16894],{"class":56},"    string m_name;\n",[46,16896,16897,16899],{"class":48,"line":653},[46,16898,4015],{"class":52},[46,16900,16901],{"class":56}," m_id;\n",[46,16903,16904],{"class":48,"line":659},[46,16905,16906],{"class":2253},"    \u002F\u002F赋值姓名\n",[46,16908,16909,16912,16915,16917,16920,16922],{"class":48,"line":665},[46,16910,16911],{"class":52},"    void",[46,16913,16914],{"class":169}," setName",[46,16916,1152],{"class":56},[46,16918,16919],{"class":169},"string",[46,16921,1364],{"class":439},[46,16923,459],{"class":56},[46,16925,16926],{"class":48,"line":670},[46,16927,4060],{"class":56},[46,16929,16930,16933,16935],{"class":48,"line":676},[46,16931,16932],{"class":56},"        m_name",[46,16934,79],{"class":52},[46,16936,16937],{"class":56},"name;\n",[46,16939,16940],{"class":48,"line":682},[46,16941,4217],{"class":56},[46,16943,16944],{"class":48,"line":688},[46,16945,16946],{"class":2253},"    \u002F\u002F赋值学号\n",[46,16948,16949,16951,16954,16956,16958,16961],{"class":48,"line":693},[46,16950,16911],{"class":52},[46,16952,16953],{"class":169}," setId",[46,16955,1152],{"class":56},[46,16957,2201],{"class":52},[46,16959,16960],{"class":439}," id",[46,16962,459],{"class":56},[46,16964,16965],{"class":48,"line":699},[46,16966,4060],{"class":56},[46,16968,16969,16972,16974],{"class":48,"line":705},[46,16970,16971],{"class":56},"        m_id",[46,16973,79],{"class":52},[46,16975,16976],{"class":56},"id;\n",[46,16978,16979],{"class":48,"line":711},[46,16980,4217],{"class":56},[46,16982,16983],{"class":48,"line":717},[46,16984,16985],{"class":2253},"    \u002F\u002F打印学生信息\n",[46,16987,16988,16990,16992],{"class":48,"line":723},[46,16989,16911],{"class":52},[46,16991,11619],{"class":169},[46,16993,4006],{"class":56},[46,16995,16996],{"class":48,"line":729},[46,16997,4060],{"class":56},[46,16999,17000,17002,17004,17007,17009,17012,17014,17016,17018,17021,17023,17026,17028],{"class":48,"line":735},[46,17001,5470],{"class":56},[46,17003,3228],{"class":52},[46,17005,17006],{"class":173},"\"姓名：\"",[46,17008,3228],{"class":52},[46,17010,17011],{"class":56},"m_name",[46,17013,3228],{"class":52},[46,17015,6376],{"class":173},[46,17017,3228],{"class":52},[46,17019,17020],{"class":173},"\"学号：\"",[46,17022,3228],{"class":52},[46,17024,17025],{"class":56},"m_id",[46,17027,3228],{"class":52},[46,17029,3250],{"class":56},[46,17031,17032],{"class":48,"line":740},[46,17033,4217],{"class":56},[46,17035,17036],{"class":48,"line":745},[46,17037,6013],{"class":56},[46,17039,17040,17042,17044],{"class":48,"line":763},[46,17041,2201],{"class":52},[46,17043,751],{"class":169},[46,17045,4006],{"class":56},[46,17047,17048],{"class":48,"line":778},[46,17049,3597],{"class":56},[46,17051,17052],{"class":48,"line":789},[46,17053,17054],{"class":2253},"    \u002F\u002F实例化\n",[46,17056,17057],{"class":48,"line":794},[46,17058,17059],{"class":56},"    Student s1;\n",[46,17061,17062,17065,17068,17070,17072],{"class":48,"line":806},[46,17063,17064],{"class":56},"    s1.",[46,17066,17067],{"class":169},"setName",[46,17069,1152],{"class":56},[46,17071,9929],{"class":173},[46,17073,4740],{"class":56},[46,17075,17076,17078,17081,17083,17086],{"class":48,"line":829},[46,17077,17064],{"class":56},[46,17079,17080],{"class":169},"setId",[46,17082,1152],{"class":56},[46,17084,17085],{"class":180},"123456",[46,17087,4740],{"class":56},[46,17089,17090,17092,17095],{"class":48,"line":840},[46,17091,17064],{"class":56},[46,17093,17094],{"class":169},"printInfo",[46,17096,7649],{"class":56},[46,17098,17099],{"class":48,"line":846},[46,17100,3616],{"class":56},[19,17102,17103],{},"类中的属性和行为统称为成员",[19,17105,17106],{},"属性：成员属性(成员变量)",[19,17108,17109],{},"方法：成员函数(成员方法)",[19,17111,17112],{},[2339,17113,17114],{},"封装意义二：",[19,17116,17117],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[19,17119,17120],{},"访问权限有三种：",[23,17122,17123,17126,17129],{},[26,17124,17125],{},"public        公共权限",[26,17127,17128],{},"protected 保护权限",[26,17130,17131],{},"private      私有权限",[19,17133,17134],{},[2339,17135,17136],{},"示例：",[36,17138,17140],{"className":11945,"code":17139,"language":11947,"meta":41,"style":41},"\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",[43,17141,17142,17147,17152,17157,17162,17166,17173,17177,17182,17186,17191,17195,17200,17205,17210,17214,17219,17224,17231,17235,17239,17247,17251,17262,17274,17286,17290,17294,17298,17306,17310,17315,17327,17335,17343,17347,17357,17361,17369],{"__ignoreMap":41},[46,17143,17144],{"class":48,"line":49},[46,17145,17146],{"class":2253},"\u002F\u002F三种权限\n",[46,17148,17149],{"class":48,"line":60},[46,17150,17151],{"class":2253},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[46,17153,17154],{"class":48,"line":200},[46,17155,17156],{"class":2253},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[46,17158,17159],{"class":48,"line":211},[46,17160,17161],{"class":2253},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[46,17163,17164],{"class":48,"line":222},[46,17165,616],{"emptyLinePlaceholder":615},[46,17167,17168,17170],{"class":48,"line":636},[46,17169,16696],{"class":52},[46,17171,17172],{"class":169}," Person\n",[46,17174,17175],{"class":48,"line":641},[46,17176,3597],{"class":56},[46,17178,17179],{"class":48,"line":653},[46,17180,17181],{"class":2253},"    \u002F\u002F姓名  公共权限\n",[46,17183,17184],{"class":48,"line":659},[46,17185,16718],{"class":52},[46,17187,17188],{"class":48,"line":665},[46,17189,17190],{"class":56},"    string m_Name;\n",[46,17192,17193],{"class":48,"line":670},[46,17194,616],{"emptyLinePlaceholder":615},[46,17196,17197],{"class":48,"line":676},[46,17198,17199],{"class":2253},"    \u002F\u002F汽车  保护权限\n",[46,17201,17202],{"class":48,"line":682},[46,17203,17204],{"class":52},"protected:\n",[46,17206,17207],{"class":48,"line":688},[46,17208,17209],{"class":56},"    string m_Car;\n",[46,17211,17212],{"class":48,"line":693},[46,17213,616],{"emptyLinePlaceholder":615},[46,17215,17216],{"class":48,"line":699},[46,17217,17218],{"class":2253},"    \u002F\u002F银行卡密码  私有权限\n",[46,17220,17221],{"class":48,"line":705},[46,17222,17223],{"class":52},"private:\n",[46,17225,17226,17228],{"class":48,"line":711},[46,17227,4015],{"class":52},[46,17229,17230],{"class":56}," m_Password;\n",[46,17232,17233],{"class":48,"line":717},[46,17234,616],{"emptyLinePlaceholder":615},[46,17236,17237],{"class":48,"line":723},[46,17238,16718],{"class":52},[46,17240,17241,17243,17245],{"class":48,"line":729},[46,17242,16911],{"class":52},[46,17244,13389],{"class":169},[46,17246,4006],{"class":56},[46,17248,17249],{"class":48,"line":735},[46,17250,4060],{"class":56},[46,17252,17253,17256,17258,17260],{"class":48,"line":740},[46,17254,17255],{"class":56},"        m_Name ",[46,17257,79],{"class":52},[46,17259,10942],{"class":173},[46,17261,3345],{"class":56},[46,17263,17264,17267,17269,17272],{"class":48,"line":745},[46,17265,17266],{"class":56},"        m_Car ",[46,17268,79],{"class":52},[46,17270,17271],{"class":173}," \"拖拉机\"",[46,17273,3345],{"class":56},[46,17275,17276,17279,17281,17284],{"class":48,"line":763},[46,17277,17278],{"class":56},"        m_Password ",[46,17280,79],{"class":52},[46,17282,17283],{"class":180}," 123456",[46,17285,3345],{"class":56},[46,17287,17288],{"class":48,"line":778},[46,17289,4217],{"class":56},[46,17291,17292],{"class":48,"line":789},[46,17293,6013],{"class":56},[46,17295,17296],{"class":48,"line":794},[46,17297,616],{"emptyLinePlaceholder":615},[46,17299,17300,17302,17304],{"class":48,"line":806},[46,17301,2201],{"class":52},[46,17303,751],{"class":169},[46,17305,12857],{"class":56},[46,17307,17308],{"class":48,"line":829},[46,17309,616],{"emptyLinePlaceholder":615},[46,17311,17312],{"class":48,"line":840},[46,17313,17314],{"class":56},"    Person p;\n",[46,17316,17317,17320,17322,17325],{"class":48,"line":846},[46,17318,17319],{"class":56},"    p.m_Name ",[46,17321,79],{"class":52},[46,17323,17324],{"class":173}," \"李四\"",[46,17326,3345],{"class":56},[46,17328,17329,17332],{"class":48,"line":852},[46,17330,17331],{"class":2253},"    \u002F\u002Fp.m_Car = \"奔驰\";",[46,17333,17334],{"class":2253},"  \u002F\u002F保护权限类外访问不到\n",[46,17336,17337,17340],{"class":48,"line":857},[46,17338,17339],{"class":2253},"    \u002F\u002Fp.m_Password = 123;",[46,17341,17342],{"class":2253}," \u002F\u002F私有权限类外访问不到\n",[46,17344,17345],{"class":48,"line":875},[46,17346,616],{"emptyLinePlaceholder":615},[46,17348,17349,17351,17353,17355],{"class":48,"line":892},[46,17350,4332],{"class":169},[46,17352,1152],{"class":56},[46,17354,4337],{"class":173},[46,17356,4740],{"class":56},[46,17358,17359],{"class":48,"line":898},[46,17360,616],{"emptyLinePlaceholder":615},[46,17362,17363,17365,17367],{"class":48,"line":903},[46,17364,6108],{"class":52},[46,17366,887],{"class":180},[46,17368,3345],{"class":56},[46,17370,17371],{"class":48,"line":908},[46,17372,3616],{"class":56},[479,17374,17376],{"id":17375},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[19,17378,17379,17380,17383,17384],{},"在C++中 struct和class唯一的",[2339,17381,17382],{},"区别","就在于 ",[2339,17385,17386],{},"默认的访问权限不同",[19,17388,17389],{},"区别：",[3191,17391,17392,17395],{},[26,17393,17394],{},"struct 默认权限为公共",[26,17396,17397],{},"class   默认权限为私有",[36,17399,17401],{"className":11945,"code":17400,"language":11947,"meta":41,"style":41},"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",[43,17402,17403,17410,17414,17424,17428,17432,17439,17443,17453,17457,17461,17469,17473,17478,17492,17496,17501,17515,17519,17529,17533,17541],{"__ignoreMap":41},[46,17404,17405,17407],{"class":48,"line":49},[46,17406,16696],{"class":52},[46,17408,17409],{"class":169}," C1\n",[46,17411,17412],{"class":48,"line":60},[46,17413,3597],{"class":56},[46,17415,17416,17418,17421],{"class":48,"line":200},[46,17417,4015],{"class":52},[46,17419,17420],{"class":56},"  m_A;",[46,17422,17423],{"class":2253}," \u002F\u002F默认是私有权限\n",[46,17425,17426],{"class":48,"line":211},[46,17427,6013],{"class":56},[46,17429,17430],{"class":48,"line":222},[46,17431,616],{"emptyLinePlaceholder":615},[46,17433,17434,17436],{"class":48,"line":636},[46,17435,9772],{"class":52},[46,17437,17438],{"class":169}," C2\n",[46,17440,17441],{"class":48,"line":641},[46,17442,3597],{"class":56},[46,17444,17445,17447,17450],{"class":48,"line":653},[46,17446,4015],{"class":52},[46,17448,17449],{"class":56}," m_A;",[46,17451,17452],{"class":2253},"  \u002F\u002F默认是公共权限\n",[46,17454,17455],{"class":48,"line":659},[46,17456,6013],{"class":56},[46,17458,17459],{"class":48,"line":665},[46,17460,616],{"emptyLinePlaceholder":615},[46,17462,17463,17465,17467],{"class":48,"line":670},[46,17464,2201],{"class":52},[46,17466,751],{"class":169},[46,17468,12857],{"class":56},[46,17470,17471],{"class":48,"line":676},[46,17472,616],{"emptyLinePlaceholder":615},[46,17474,17475],{"class":48,"line":682},[46,17476,17477],{"class":56},"    C1 c1;\n",[46,17479,17480,17483,17485,17487,17489],{"class":48,"line":688},[46,17481,17482],{"class":56},"    c1.m_A ",[46,17484,79],{"class":52},[46,17486,4068],{"class":180},[46,17488,2250],{"class":56},[46,17490,17491],{"class":2253}," \u002F\u002F错误，访问权限是私有\n",[46,17493,17494],{"class":48,"line":693},[46,17495,616],{"emptyLinePlaceholder":615},[46,17497,17498],{"class":48,"line":699},[46,17499,17500],{"class":56},"    C2 c2;\n",[46,17502,17503,17506,17508,17510,17512],{"class":48,"line":705},[46,17504,17505],{"class":56},"    c2.m_A ",[46,17507,79],{"class":52},[46,17509,4068],{"class":180},[46,17511,2250],{"class":56},[46,17513,17514],{"class":2253}," \u002F\u002F正确，访问权限是公共\n",[46,17516,17517],{"class":48,"line":711},[46,17518,616],{"emptyLinePlaceholder":615},[46,17520,17521,17523,17525,17527],{"class":48,"line":717},[46,17522,4332],{"class":169},[46,17524,1152],{"class":56},[46,17526,4337],{"class":173},[46,17528,4740],{"class":56},[46,17530,17531],{"class":48,"line":723},[46,17532,616],{"emptyLinePlaceholder":615},[46,17534,17535,17537,17539],{"class":48,"line":729},[46,17536,6108],{"class":52},[46,17538,887],{"class":180},[46,17540,3345],{"class":56},[46,17542,17543],{"class":48,"line":735},[46,17544,3616],{"class":56},[479,17546,17548],{"id":17547},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[19,17550,17551],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[19,17553,17554],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[19,17556,17557],{},[2339,17558,17136],{},[36,17560,17562],{"className":11945,"code":17561,"language":11947,"meta":41,"style":41},"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",[43,17563,17564,17574,17578,17582,17587,17601,17610,17614,17624,17628,17635,17639,17643,17647,17652,17661,17668,17672,17677,17693,17716,17729,17736,17740,17749,17753,17757,17762,17778,17788,17792,17796,17800,17808,17812,17822,17826,17834,17838,17842,17850,17854,17858,17863,17876,17899,17903,17908,17921,17943,17947,17952,17966,17974,17978,17988,17992,18000],{"__ignoreMap":41},[46,17565,17566,17568,17571],{"class":48,"line":49},[46,17567,16696],{"class":52},[46,17569,17570],{"class":169}," Person",[46,17572,17573],{"class":56}," {\n",[46,17575,17576],{"class":48,"line":60},[46,17577,16718],{"class":52},[46,17579,17580],{"class":48,"line":200},[46,17581,616],{"emptyLinePlaceholder":615},[46,17583,17584],{"class":48,"line":211},[46,17585,17586],{"class":2253},"    \u002F\u002F姓名设置可读可写\n",[46,17588,17589,17591,17593,17595,17597,17599],{"class":48,"line":222},[46,17590,16911],{"class":52},[46,17592,16914],{"class":169},[46,17594,1152],{"class":56},[46,17596,16919],{"class":169},[46,17598,1364],{"class":439},[46,17600,14445],{"class":56},[46,17602,17603,17605,17607],{"class":48,"line":636},[46,17604,17255],{"class":56},[46,17606,79],{"class":52},[46,17608,17609],{"class":56}," name;\n",[46,17611,17612],{"class":48,"line":641},[46,17613,4217],{"class":56},[46,17615,17616,17619,17622],{"class":48,"line":653},[46,17617,17618],{"class":169},"    string",[46,17620,17621],{"class":169}," getName",[46,17623,4006],{"class":56},[46,17625,17626],{"class":48,"line":659},[46,17627,4060],{"class":56},[46,17629,17630,17632],{"class":48,"line":665},[46,17631,16754],{"class":52},[46,17633,17634],{"class":56}," m_Name;\n",[46,17636,17637],{"class":48,"line":670},[46,17638,4217],{"class":56},[46,17640,17641],{"class":48,"line":676},[46,17642,616],{"emptyLinePlaceholder":615},[46,17644,17645],{"class":48,"line":682},[46,17646,616],{"emptyLinePlaceholder":615},[46,17648,17649],{"class":48,"line":688},[46,17650,17651],{"class":2253},"    \u002F\u002F获取年龄 \n",[46,17653,17654,17656,17659],{"class":48,"line":693},[46,17655,4015],{"class":52},[46,17657,17658],{"class":169}," getAge",[46,17660,12857],{"class":56},[46,17662,17663,17665],{"class":48,"line":699},[46,17664,16754],{"class":52},[46,17666,17667],{"class":56}," m_Age;\n",[46,17669,17670],{"class":48,"line":705},[46,17671,4217],{"class":56},[46,17673,17674],{"class":48,"line":711},[46,17675,17676],{"class":2253},"    \u002F\u002F设置年龄\n",[46,17678,17679,17681,17684,17686,17688,17691],{"class":48,"line":717},[46,17680,16911],{"class":52},[46,17682,17683],{"class":169}," setAge",[46,17685,1152],{"class":56},[46,17687,2201],{"class":52},[46,17689,17690],{"class":439}," age",[46,17692,14445],{"class":56},[46,17694,17695,17697,17700,17702,17704,17706,17709,17711,17714],{"class":48,"line":723},[46,17696,4525],{"class":52},[46,17698,17699],{"class":56}," (age ",[46,17701,821],{"class":52},[46,17703,887],{"class":180},[46,17705,5274],{"class":52},[46,17707,17708],{"class":56}," age ",[46,17710,884],{"class":52},[46,17712,17713],{"class":180}," 150",[46,17715,14445],{"class":56},[46,17717,17718,17720,17722,17725,17727],{"class":48,"line":729},[46,17719,11723],{"class":56},[46,17721,3228],{"class":52},[46,17723,17724],{"class":173}," \"你个老妖精!\"",[46,17726,3496],{"class":52},[46,17728,10844],{"class":56},[46,17730,17731,17734],{"class":48,"line":735},[46,17732,17733],{"class":52},"            return",[46,17735,3345],{"class":56},[46,17737,17738],{"class":48,"line":740},[46,17739,4557],{"class":56},[46,17741,17742,17745,17747],{"class":48,"line":745},[46,17743,17744],{"class":56},"        m_Age ",[46,17746,79],{"class":52},[46,17748,9810],{"class":56},[46,17750,17751],{"class":48,"line":763},[46,17752,4217],{"class":56},[46,17754,17755],{"class":48,"line":778},[46,17756,616],{"emptyLinePlaceholder":615},[46,17758,17759],{"class":48,"line":789},[46,17760,17761],{"class":2253},"    \u002F\u002F情人设置为只写\n",[46,17763,17764,17766,17769,17771,17773,17776],{"class":48,"line":794},[46,17765,16911],{"class":52},[46,17767,17768],{"class":169}," setLover",[46,17770,1152],{"class":56},[46,17772,16919],{"class":169},[46,17774,17775],{"class":439}," lover",[46,17777,14445],{"class":56},[46,17779,17780,17783,17785],{"class":48,"line":806},[46,17781,17782],{"class":56},"        m_Lover ",[46,17784,79],{"class":52},[46,17786,17787],{"class":56}," lover;\n",[46,17789,17790],{"class":48,"line":829},[46,17791,4217],{"class":56},[46,17793,17794],{"class":48,"line":840},[46,17795,616],{"emptyLinePlaceholder":615},[46,17797,17798],{"class":48,"line":846},[46,17799,17223],{"class":52},[46,17801,17802,17805],{"class":48,"line":852},[46,17803,17804],{"class":56},"    string m_Name;",[46,17806,17807],{"class":2253}," \u002F\u002F可读可写  姓名\n",[46,17809,17810],{"class":48,"line":857},[46,17811,15213],{"class":56},[46,17813,17814,17816,17819],{"class":48,"line":875},[46,17815,4015],{"class":52},[46,17817,17818],{"class":56}," m_Age;",[46,17820,17821],{"class":2253}," \u002F\u002F只读  年龄\n",[46,17823,17824],{"class":48,"line":892},[46,17825,616],{"emptyLinePlaceholder":615},[46,17827,17828,17831],{"class":48,"line":898},[46,17829,17830],{"class":56},"    string m_Lover;",[46,17832,17833],{"class":2253}," \u002F\u002F只写  情人\n",[46,17835,17836],{"class":48,"line":903},[46,17837,6013],{"class":56},[46,17839,17840],{"class":48,"line":908},[46,17841,616],{"emptyLinePlaceholder":615},[46,17843,17844,17846,17848],{"class":48,"line":925},[46,17845,2201],{"class":52},[46,17847,751],{"class":169},[46,17849,12857],{"class":56},[46,17851,17852],{"class":48,"line":1238},[46,17853,616],{"emptyLinePlaceholder":615},[46,17855,17856],{"class":48,"line":1251},[46,17857,17314],{"class":56},[46,17859,17860],{"class":48,"line":1256},[46,17861,17862],{"class":2253},"    \u002F\u002F姓名设置\n",[46,17864,17865,17868,17870,17872,17874],{"class":48,"line":1261},[46,17866,17867],{"class":56},"    p.",[46,17869,17067],{"class":169},[46,17871,1152],{"class":56},[46,17873,9929],{"class":173},[46,17875,4740],{"class":56},[46,17877,17878,17880,17882,17885,17887,17890,17893,17895,17897],{"class":48,"line":1274},[46,17879,8542],{"class":56},[46,17881,3228],{"class":52},[46,17883,17884],{"class":173}," \"姓名： \"",[46,17886,3496],{"class":52},[46,17888,17889],{"class":56}," p.",[46,17891,17892],{"class":169},"getName",[46,17894,15053],{"class":56},[46,17896,3228],{"class":52},[46,17898,10844],{"class":56},[46,17900,17901],{"class":48,"line":10061},[46,17902,616],{"emptyLinePlaceholder":615},[46,17904,17905],{"class":48,"line":11720},[46,17906,17907],{"class":2253},"    \u002F\u002F年龄设置\n",[46,17909,17910,17912,17915,17917,17919],{"class":48,"line":11745},[46,17911,17867],{"class":56},[46,17913,17914],{"class":169},"setAge",[46,17916,1152],{"class":56},[46,17918,2842],{"class":180},[46,17920,4740],{"class":56},[46,17922,17923,17925,17927,17930,17932,17934,17937,17939,17941],{"class":48,"line":11768},[46,17924,8542],{"class":56},[46,17926,3228],{"class":52},[46,17928,17929],{"class":173}," \"年龄： \"",[46,17931,3496],{"class":52},[46,17933,17889],{"class":56},[46,17935,17936],{"class":169},"getAge",[46,17938,15053],{"class":56},[46,17940,3228],{"class":52},[46,17942,10844],{"class":56},[46,17944,17945],{"class":48,"line":11792},[46,17946,616],{"emptyLinePlaceholder":615},[46,17948,17949],{"class":48,"line":11797},[46,17950,17951],{"class":2253},"    \u002F\u002F情人设置\n",[46,17953,17954,17956,17959,17961,17964],{"class":48,"line":11802},[46,17955,17867],{"class":56},[46,17957,17958],{"class":169},"setLover",[46,17960,1152],{"class":56},[46,17962,17963],{"class":173},"\"苍井\"",[46,17965,4740],{"class":56},[46,17967,17968,17971],{"class":48,"line":11807},[46,17969,17970],{"class":2253},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[46,17972,17973],{"class":2253},"  \u002F\u002F只写属性，不可以读取\n",[46,17975,17976],{"class":48,"line":11816},[46,17977,616],{"emptyLinePlaceholder":615},[46,17979,17980,17982,17984,17986],{"class":48,"line":11821},[46,17981,4332],{"class":169},[46,17983,1152],{"class":56},[46,17985,4337],{"class":173},[46,17987,4740],{"class":56},[46,17989,17990],{"class":48,"line":11827},[46,17991,616],{"emptyLinePlaceholder":615},[46,17993,17994,17996,17998],{"class":48,"line":11848},[46,17995,6108],{"class":52},[46,17997,887],{"class":180},[46,17999,3345],{"class":56},[46,18001,18002],{"class":48,"line":11854},[46,18003,3616],{"class":56},[479,18005,18007],{"id":18006},"_814封装案例","8.1.4封装案例",[23,18009,18010],{},[26,18011,18012,18015],{},[2339,18013,18014],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[3191,18017,18018,18021],{},[26,18019,18020],{},"求出立方体的面积和体积",[26,18022,18023],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[36,18025,18027],{"className":2187,"code":18026,"language":2189,"meta":41,"style":41},"#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",[43,18028,18029,18035,18045,18052,18056,18060,18065,18095,18099,18109,18119,18129,18133,18142,18146,18182,18186,18195,18199,18215,18219,18224,18233,18237,18244,18248,18257,18261,18268,18272,18281,18285,18292,18296,18301,18318,18322,18368,18372,18381,18385,18389,18393,18402,18406,18410,18415,18419,18425,18431,18437,18441,18445,18450,18472,18476,18530,18534,18542,18546,18551,18556,18569,18576,18592,18603,18609,18632,18638,18661,18675,18695,18701,18712,18735,18757,18762,18768,18782,18795,18800,18814,18819,18825,18830,18844,18849,18854,18868,18880,18885,18898,18903,18908,18913,18926,18931],{"__ignoreMap":41},[46,18030,18031,18033],{"class":48,"line":49},[46,18032,3981],{"class":52},[46,18034,3984],{"class":173},[46,18036,18037,18039,18041,18043],{"class":48,"line":60},[46,18038,3989],{"class":52},[46,18040,3992],{"class":52},[46,18042,3995],{"class":169},[46,18044,3345],{"class":56},[46,18046,18047,18049],{"class":48,"line":200},[46,18048,16696],{"class":52},[46,18050,18051],{"class":169}," Cube\n",[46,18053,18054],{"class":48,"line":211},[46,18055,3597],{"class":56},[46,18057,18058],{"class":48,"line":222},[46,18059,16718],{"class":52},[46,18061,18062],{"class":48,"line":636},[46,18063,18064],{"class":2253},"    \u002F\u002F输入长宽高\n",[46,18066,18067,18069,18072,18074,18076,18079,18081,18083,18086,18088,18090,18093],{"class":48,"line":641},[46,18068,16911],{"class":52},[46,18070,18071],{"class":169}," setLwh",[46,18073,1152],{"class":56},[46,18075,2201],{"class":52},[46,18077,18078],{"class":439}," l",[46,18080,2565],{"class":56},[46,18082,2201],{"class":52},[46,18084,18085],{"class":439}," w",[46,18087,2565],{"class":56},[46,18089,2201],{"class":52},[46,18091,18092],{"class":439}," h",[46,18094,459],{"class":56},[46,18096,18097],{"class":48,"line":653},[46,18098,4060],{"class":56},[46,18100,18101,18104,18106],{"class":48,"line":659},[46,18102,18103],{"class":56},"        m_L",[46,18105,79],{"class":52},[46,18107,18108],{"class":56},"l;\n",[46,18110,18111,18114,18116],{"class":48,"line":665},[46,18112,18113],{"class":56},"        m_W",[46,18115,79],{"class":52},[46,18117,18118],{"class":56},"w;\n",[46,18120,18121,18124,18126],{"class":48,"line":670},[46,18122,18123],{"class":56},"        m_H",[46,18125,79],{"class":52},[46,18127,18128],{"class":56},"h;\n",[46,18130,18131],{"class":48,"line":676},[46,18132,4217],{"class":56},[46,18134,18135,18137,18140],{"class":48,"line":682},[46,18136,4015],{"class":52},[46,18138,18139],{"class":169}," mianji",[46,18141,4006],{"class":56},[46,18143,18144],{"class":48,"line":688},[46,18145,4060],{"class":56},[46,18147,18148,18150,18152,18154,18157,18159,18162,18164,18167,18169,18172,18174,18177,18179],{"class":48,"line":693},[46,18149,16754],{"class":52},[46,18151,16757],{"class":180},[46,18153,2642],{"class":52},[46,18155,18156],{"class":56},"(m_L",[46,18158,2642],{"class":52},[46,18160,18161],{"class":56},"m_W ",[46,18163,2668],{"class":52},[46,18165,18166],{"class":56}," m_L",[46,18168,2642],{"class":52},[46,18170,18171],{"class":56},"m_H ",[46,18173,2668],{"class":52},[46,18175,18176],{"class":56}," m_W",[46,18178,2642],{"class":52},[46,18180,18181],{"class":56},"m_H);\n",[46,18183,18184],{"class":48,"line":699},[46,18185,4217],{"class":56},[46,18187,18188,18190,18193],{"class":48,"line":705},[46,18189,4015],{"class":52},[46,18191,18192],{"class":169}," tiji",[46,18194,4006],{"class":56},[46,18196,18197],{"class":48,"line":711},[46,18198,4060],{"class":56},[46,18200,18201,18203,18205,18207,18210,18212],{"class":48,"line":717},[46,18202,16754],{"class":52},[46,18204,18166],{"class":56},[46,18206,2642],{"class":52},[46,18208,18209],{"class":56},"m_W",[46,18211,2642],{"class":52},[46,18213,18214],{"class":56},"m_H;\n",[46,18216,18217],{"class":48,"line":723},[46,18218,4217],{"class":56},[46,18220,18221],{"class":48,"line":729},[46,18222,18223],{"class":2253},"    \u002F\u002F获取长宽高\n",[46,18225,18226,18228,18231],{"class":48,"line":735},[46,18227,4015],{"class":52},[46,18229,18230],{"class":169}," getLength",[46,18232,4006],{"class":56},[46,18234,18235],{"class":48,"line":740},[46,18236,4060],{"class":56},[46,18238,18239,18241],{"class":48,"line":745},[46,18240,16754],{"class":52},[46,18242,18243],{"class":56}," m_L;\n",[46,18245,18246],{"class":48,"line":763},[46,18247,4217],{"class":56},[46,18249,18250,18252,18255],{"class":48,"line":778},[46,18251,4015],{"class":52},[46,18253,18254],{"class":169}," getWidth",[46,18256,4006],{"class":56},[46,18258,18259],{"class":48,"line":789},[46,18260,4060],{"class":56},[46,18262,18263,18265],{"class":48,"line":794},[46,18264,16754],{"class":52},[46,18266,18267],{"class":56}," m_W;\n",[46,18269,18270],{"class":48,"line":806},[46,18271,4217],{"class":56},[46,18273,18274,18276,18279],{"class":48,"line":829},[46,18275,4015],{"class":52},[46,18277,18278],{"class":169}," getHeight",[46,18280,4006],{"class":56},[46,18282,18283],{"class":48,"line":840},[46,18284,4060],{"class":56},[46,18286,18287,18289],{"class":48,"line":846},[46,18288,16754],{"class":52},[46,18290,18291],{"class":56}," m_H;\n",[46,18293,18294],{"class":48,"line":852},[46,18295,4217],{"class":56},[46,18297,18298],{"class":48,"line":857},[46,18299,18300],{"class":2253},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[46,18302,18303,18306,18309,18311,18314,18316],{"class":48,"line":875},[46,18304,18305],{"class":52},"    bool",[46,18307,18308],{"class":169}," isEqual",[46,18310,1152],{"class":56},[46,18312,18313],{"class":169},"Cube",[46,18315,4870],{"class":439},[46,18317,459],{"class":56},[46,18319,18320],{"class":48,"line":892},[46,18321,4060],{"class":56},[46,18323,18324,18326,18329,18332,18334,18336,18339,18341,18344,18347,18349,18351,18354,18356,18358,18361,18363,18365],{"class":48,"line":898},[46,18325,4525],{"class":52},[46,18327,18328],{"class":56}," (c.",[46,18330,18331],{"class":169},"getLength",[46,18333,15053],{"class":56},[46,18335,4970],{"class":52},[46,18337,18338],{"class":56}," m_L ",[46,18340,3755],{"class":52},[46,18342,18343],{"class":56}," c.",[46,18345,18346],{"class":169},"getWidth",[46,18348,15053],{"class":56},[46,18350,4970],{"class":52},[46,18352,18353],{"class":56}," m_W ",[46,18355,3755],{"class":52},[46,18357,18343],{"class":56},[46,18359,18360],{"class":169},"getHeight",[46,18362,15053],{"class":56},[46,18364,4970],{"class":52},[46,18366,18367],{"class":56}," m_H)\n",[46,18369,18370],{"class":48,"line":903},[46,18371,4538],{"class":56},[46,18373,18374,18376,18379],{"class":48,"line":908},[46,18375,17733],{"class":52},[46,18377,18378],{"class":180}," true",[46,18380,3345],{"class":56},[46,18382,18383],{"class":48,"line":925},[46,18384,4557],{"class":56},[46,18386,18387],{"class":48,"line":1238},[46,18388,4598],{"class":52},[46,18390,18391],{"class":48,"line":1251},[46,18392,4538],{"class":56},[46,18394,18395,18397,18400],{"class":48,"line":1256},[46,18396,17733],{"class":52},[46,18398,18399],{"class":180}," false",[46,18401,3345],{"class":56},[46,18403,18404],{"class":48,"line":1261},[46,18405,4557],{"class":56},[46,18407,18408],{"class":48,"line":1274},[46,18409,4217],{"class":56},[46,18411,18412],{"class":48,"line":10061},[46,18413,18414],{"class":2253},"    \u002F\u002F私有属性\n",[46,18416,18417],{"class":48,"line":11720},[46,18418,17223],{"class":52},[46,18420,18421,18423],{"class":48,"line":11745},[46,18422,4015],{"class":52},[46,18424,18243],{"class":56},[46,18426,18427,18429],{"class":48,"line":11768},[46,18428,4015],{"class":52},[46,18430,18267],{"class":56},[46,18432,18433,18435],{"class":48,"line":11792},[46,18434,4015],{"class":52},[46,18436,18291],{"class":56},[46,18438,18439],{"class":48,"line":11797},[46,18440,616],{"emptyLinePlaceholder":615},[46,18442,18443],{"class":48,"line":11802},[46,18444,6013],{"class":56},[46,18446,18447],{"class":48,"line":11807},[46,18448,18449],{"class":2253},"\u002F\u002F全局函数判断两个立方体是否相等\n",[46,18451,18452,18454,18456,18458,18460,18463,18465,18467,18470],{"class":48,"line":11816},[46,18453,3406],{"class":52},[46,18455,18308],{"class":169},[46,18457,1152],{"class":56},[46,18459,18313],{"class":169},[46,18461,18462],{"class":439}," c1",[46,18464,2565],{"class":56},[46,18466,18313],{"class":169},[46,18468,18469],{"class":439}," c2",[46,18471,459],{"class":56},[46,18473,18474],{"class":48,"line":11821},[46,18475,3597],{"class":56},[46,18477,18478,18480,18483,18485,18487,18489,18492,18494,18497,18499,18501,18503,18505,18507,18509,18511,18513,18515,18517,18519,18521,18523,18525,18527],{"class":48,"line":11827},[46,18479,6108],{"class":52},[46,18481,18482],{"class":56}," (c1.",[46,18484,18331],{"class":169},[46,18486,15053],{"class":56},[46,18488,4970],{"class":52},[46,18490,18491],{"class":56}," c2.",[46,18493,18331],{"class":169},[46,18495,18496],{"class":56},"()) ",[46,18498,3755],{"class":52},[46,18500,18482],{"class":56},[46,18502,18346],{"class":169},[46,18504,15053],{"class":56},[46,18506,4970],{"class":52},[46,18508,18491],{"class":56},[46,18510,18346],{"class":169},[46,18512,18496],{"class":56},[46,18514,3755],{"class":52},[46,18516,18482],{"class":56},[46,18518,18360],{"class":169},[46,18520,15053],{"class":56},[46,18522,4970],{"class":52},[46,18524,18491],{"class":56},[46,18526,18360],{"class":169},[46,18528,18529],{"class":56},"());\n",[46,18531,18532],{"class":48,"line":11848},[46,18533,3616],{"class":56},[46,18535,18536,18538,18540],{"class":48,"line":11854},[46,18537,2201],{"class":52},[46,18539,751],{"class":169},[46,18541,4006],{"class":56},[46,18543,18544],{"class":48,"line":11868},[46,18545,3597],{"class":56},[46,18547,18548],{"class":48,"line":11874},[46,18549,18550],{"class":56},"    Cube c1;\n",[46,18552,18553],{"class":48,"line":11901},[46,18554,18555],{"class":2253},"    \u002F\u002F输入立方体的长宽高\n",[46,18557,18558,18560,18562,18565,18567],{"class":48,"line":11910},[46,18559,3602],{"class":56},[46,18561,3228],{"class":52},[46,18563,18564],{"class":173},"\"请输入第一个立方体的长、宽、高：\"",[46,18566,3228],{"class":52},[46,18568,3250],{"class":56},[46,18570,18571,18573],{"class":48,"line":11916},[46,18572,4015],{"class":52},[46,18574,18575],{"class":56}," l,w,h,l1,w1,h1;\n",[46,18577,18578,18580,18582,18584,18586,18588,18590],{"class":48,"line":11924},[46,18579,4042],{"class":56},[46,18581,3481],{"class":52},[46,18583,2705],{"class":56},[46,18585,3481],{"class":52},[46,18587,2981],{"class":56},[46,18589,3481],{"class":52},[46,18591,18128],{"class":56},[46,18593,18594,18597,18600],{"class":48,"line":11929},[46,18595,18596],{"class":56},"    c1.",[46,18598,18599],{"class":169},"setLwh",[46,18601,18602],{"class":56},"(l,w,h);\n",[46,18604,18606],{"class":48,"line":18605},66,[46,18607,18608],{"class":2253},"    \u002F\u002F面积\n",[46,18610,18612,18614,18616,18619,18621,18623,18626,18628,18630],{"class":48,"line":18611},67,[46,18613,3602],{"class":56},[46,18615,3228],{"class":52},[46,18617,18618],{"class":173},"\"立方体的表面积为：\"",[46,18620,3228],{"class":52},[46,18622,16832],{"class":56},[46,18624,18625],{"class":169},"mianji",[46,18627,4455],{"class":56},[46,18629,3228],{"class":52},[46,18631,3250],{"class":56},[46,18633,18635],{"class":48,"line":18634},68,[46,18636,18637],{"class":2253},"    \u002F\u002F体积\n",[46,18639,18641,18643,18645,18648,18650,18652,18655,18657,18659],{"class":48,"line":18640},69,[46,18642,3602],{"class":56},[46,18644,3228],{"class":52},[46,18646,18647],{"class":173},"\"立方体的体积为：\"",[46,18649,3228],{"class":52},[46,18651,16832],{"class":56},[46,18653,18654],{"class":169},"tiji",[46,18656,4455],{"class":56},[46,18658,3228],{"class":52},[46,18660,3250],{"class":56},[46,18662,18664,18666,18668,18671,18673],{"class":48,"line":18663},70,[46,18665,3602],{"class":56},[46,18667,3228],{"class":52},[46,18669,18670],{"class":173},"\"请输入第二个立方体的长、宽、高：\"",[46,18672,3228],{"class":52},[46,18674,3250],{"class":56},[46,18676,18678,18680,18682,18685,18687,18690,18692],{"class":48,"line":18677},71,[46,18679,4042],{"class":56},[46,18681,3481],{"class":52},[46,18683,18684],{"class":56},"l1",[46,18686,3481],{"class":52},[46,18688,18689],{"class":56},"w1",[46,18691,3481],{"class":52},[46,18693,18694],{"class":56},"h1;\n",[46,18696,18698],{"class":48,"line":18697},72,[46,18699,18700],{"class":56},"    Cube c2;\n",[46,18702,18704,18707,18709],{"class":48,"line":18703},73,[46,18705,18706],{"class":56},"    c2.",[46,18708,18599],{"class":169},[46,18710,18711],{"class":56},"(l1,w1,h1);\n",[46,18713,18715,18717,18719,18722,18724,18727,18729,18731,18733],{"class":48,"line":18714},74,[46,18716,3602],{"class":56},[46,18718,3228],{"class":52},[46,18720,18721],{"class":173},"\"第二个立方体的表面积为：\"",[46,18723,3228],{"class":52},[46,18725,18726],{"class":56},"c2.",[46,18728,18625],{"class":169},[46,18730,4455],{"class":56},[46,18732,3228],{"class":52},[46,18734,3250],{"class":56},[46,18736,18738,18740,18742,18745,18747,18749,18751,18753,18755],{"class":48,"line":18737},75,[46,18739,3602],{"class":56},[46,18741,3228],{"class":52},[46,18743,18744],{"class":173},"\"第二个立方体的体积为：\"",[46,18746,3228],{"class":52},[46,18748,18726],{"class":56},[46,18750,18654],{"class":169},[46,18752,4455],{"class":56},[46,18754,3228],{"class":52},[46,18756,3250],{"class":56},[46,18758,18760],{"class":48,"line":18759},76,[46,18761,616],{"emptyLinePlaceholder":615},[46,18763,18765],{"class":48,"line":18764},77,[46,18766,18767],{"class":2253},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[46,18769,18771,18773,18775,18778,18780],{"class":48,"line":18770},78,[46,18772,3602],{"class":56},[46,18774,3228],{"class":52},[46,18776,18777],{"class":173},"\"内部函数判断结果：\"",[46,18779,3228],{"class":52},[46,18781,3250],{"class":56},[46,18783,18785,18787,18789,18792],{"class":48,"line":18784},79,[46,18786,5121],{"class":52},[46,18788,18482],{"class":56},[46,18790,18791],{"class":169},"isEqual",[46,18793,18794],{"class":56},"(c2))\n",[46,18796,18798],{"class":48,"line":18797},80,[46,18799,4060],{"class":56},[46,18801,18803,18805,18807,18810,18812],{"class":48,"line":18802},81,[46,18804,5470],{"class":56},[46,18806,3228],{"class":52},[46,18808,18809],{"class":173},"\"两个立方体相等\"",[46,18811,3228],{"class":52},[46,18813,3250],{"class":56},[46,18815,18817],{"class":48,"line":18816},82,[46,18818,4217],{"class":56},[46,18820,18822],{"class":48,"line":18821},83,[46,18823,18824],{"class":52},"    else\n",[46,18826,18828],{"class":48,"line":18827},84,[46,18829,4060],{"class":56},[46,18831,18833,18835,18837,18840,18842],{"class":48,"line":18832},85,[46,18834,5470],{"class":56},[46,18836,3228],{"class":52},[46,18838,18839],{"class":173},"\"两个立方体不相等\"",[46,18841,3228],{"class":52},[46,18843,3250],{"class":56},[46,18845,18847],{"class":48,"line":18846},86,[46,18848,4217],{"class":56},[46,18850,18852],{"class":48,"line":18851},87,[46,18853,616],{"emptyLinePlaceholder":615},[46,18855,18857,18859,18861,18864,18866],{"class":48,"line":18856},88,[46,18858,3602],{"class":56},[46,18860,3228],{"class":52},[46,18862,18863],{"class":173},"\"全局函数判断结果：\"",[46,18865,3228],{"class":52},[46,18867,3250],{"class":56},[46,18869,18871,18873,18875,18877],{"class":48,"line":18870},89,[46,18872,5121],{"class":52},[46,18874,3702],{"class":56},[46,18876,18791],{"class":169},[46,18878,18879],{"class":56},"(c1, c2))\n",[46,18881,18883],{"class":48,"line":18882},90,[46,18884,4060],{"class":56},[46,18886,18888,18890,18892,18894,18896],{"class":48,"line":18887},91,[46,18889,5470],{"class":56},[46,18891,3228],{"class":52},[46,18893,18809],{"class":173},[46,18895,3228],{"class":52},[46,18897,3250],{"class":56},[46,18899,18901],{"class":48,"line":18900},92,[46,18902,4217],{"class":56},[46,18904,18906],{"class":48,"line":18905},93,[46,18907,18824],{"class":52},[46,18909,18911],{"class":48,"line":18910},94,[46,18912,4060],{"class":56},[46,18914,18916,18918,18920,18922,18924],{"class":48,"line":18915},95,[46,18917,5470],{"class":56},[46,18919,3228],{"class":52},[46,18921,18839],{"class":173},[46,18923,3228],{"class":52},[46,18925,3250],{"class":56},[46,18927,18929],{"class":48,"line":18928},96,[46,18930,4217],{"class":56},[46,18932,18934],{"class":48,"line":18933},97,[46,18935,3616],{"class":56},[23,18937,18938],{"start":60},[26,18939,18940],{},[2339,18941,18942],{},"练习案例2：点和圆的关系",[3191,18944,18945],{},[26,18946,18947],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[36,18949,18951],{"className":2187,"code":18950,"language":2189,"meta":41,"style":41},"#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",[43,18952,18953,18959,18969,18976,18983,18987,18991,18996,19030,19035,19051,19065,19069,19073,19080,19087,19091,19097,19101,19105,19109,19131,19154,19159,19173,19188,19192,19196,19202,19207,19212,19216,19242,19246,19276,19304,19332,19349,19353,19366,19370,19374,19378,19391,19395,19399,19407,19411,19415,19419,19424,19428,19439,19446,19455,19465,19476,19483,19496,19507,19517,19528,19535,19549,19554,19564,19572],{"__ignoreMap":41},[46,18954,18955,18957],{"class":48,"line":49},[46,18956,3981],{"class":52},[46,18958,3984],{"class":173},[46,18960,18961,18963,18965,18967],{"class":48,"line":60},[46,18962,3989],{"class":52},[46,18964,3992],{"class":52},[46,18966,3995],{"class":169},[46,18968,3345],{"class":56},[46,18970,18971,18973],{"class":48,"line":200},[46,18972,3981],{"class":52},[46,18974,18975],{"class":173},"\u003Ccmath>\n",[46,18977,18978,18980],{"class":48,"line":211},[46,18979,16696],{"class":52},[46,18981,18982],{"class":169}," Point\n",[46,18984,18985],{"class":48,"line":222},[46,18986,3597],{"class":56},[46,18988,18989],{"class":48,"line":636},[46,18990,16718],{"class":52},[46,18992,18993],{"class":48,"line":641},[46,18994,18995],{"class":2253},"    \u002F\u002F赋值\n",[46,18997,18998,19000,19003,19005,19007,19010,19012,19014,19017,19020,19022,19025,19027],{"class":48,"line":653},[46,18999,16911],{"class":52},[46,19001,19002],{"class":169}," setPoint",[46,19004,1152],{"class":56},[46,19006,16039],{"class":52},[46,19008,19009],{"class":439}," x",[46,19011,448],{"class":56},[46,19013,16039],{"class":52},[46,19015,19016],{"class":439}," y",[46,19018,19019],{"class":56},") { m_x ",[46,19021,79],{"class":52},[46,19023,19024],{"class":56}," x; m_y ",[46,19026,79],{"class":52},[46,19028,19029],{"class":56}," y; }\n",[46,19031,19032],{"class":48,"line":659},[46,19033,19034],{"class":2253},"    \u002F\u002F获取坐标\n",[46,19036,19037,19039,19042,19045,19048],{"class":48,"line":665},[46,19038,16740],{"class":52},[46,19040,19041],{"class":169}," getX",[46,19043,19044],{"class":56},"() { ",[46,19046,19047],{"class":52},"return",[46,19049,19050],{"class":56}," m_x; }\n",[46,19052,19053,19055,19058,19060,19062],{"class":48,"line":670},[46,19054,16740],{"class":52},[46,19056,19057],{"class":169}," getY",[46,19059,19044],{"class":56},[46,19061,19047],{"class":52},[46,19063,19064],{"class":56}," m_y; }\n",[46,19066,19067],{"class":48,"line":676},[46,19068,616],{"emptyLinePlaceholder":615},[46,19070,19071],{"class":48,"line":682},[46,19072,17223],{"class":52},[46,19074,19075,19077],{"class":48,"line":688},[46,19076,16740],{"class":52},[46,19078,19079],{"class":56}," m_x;\n",[46,19081,19082,19084],{"class":48,"line":693},[46,19083,16740],{"class":52},[46,19085,19086],{"class":56}," m_y;\n",[46,19088,19089],{"class":48,"line":699},[46,19090,6013],{"class":56},[46,19092,19093,19095],{"class":48,"line":705},[46,19094,16696],{"class":52},[46,19096,16699],{"class":169},[46,19098,19099],{"class":48,"line":711},[46,19100,3597],{"class":56},[46,19102,19103],{"class":48,"line":717},[46,19104,16718],{"class":52},[46,19106,19107],{"class":48,"line":723},[46,19108,18995],{"class":2253},[46,19110,19111,19113,19116,19118,19120,19123,19126,19128],{"class":48,"line":729},[46,19112,16911],{"class":52},[46,19114,19115],{"class":169}," setRadius",[46,19117,1152],{"class":56},[46,19119,16039],{"class":52},[46,19121,19122],{"class":439}," r",[46,19124,19125],{"class":56},") { m_r ",[46,19127,79],{"class":52},[46,19129,19130],{"class":56}," r; }\n",[46,19132,19133,19135,19138,19140,19143,19146,19149,19151],{"class":48,"line":735},[46,19134,16911],{"class":52},[46,19136,19137],{"class":169}," setCenter",[46,19139,1152],{"class":56},[46,19141,19142],{"class":169},"Point",[46,19144,19145],{"class":439}," center",[46,19147,19148],{"class":56},") { m_center ",[46,19150,79],{"class":52},[46,19152,19153],{"class":56}," center; }\n",[46,19155,19156],{"class":48,"line":740},[46,19157,19158],{"class":2253},"    \u002F\u002F获取属性\n",[46,19160,19161,19163,19166,19168,19170],{"class":48,"line":745},[46,19162,16740],{"class":52},[46,19164,19165],{"class":169}," getRadius",[46,19167,19044],{"class":56},[46,19169,19047],{"class":52},[46,19171,19172],{"class":56}," m_r; }\n",[46,19174,19175,19178,19181,19183,19185],{"class":48,"line":763},[46,19176,19177],{"class":169},"    Point",[46,19179,19180],{"class":169}," getCenter",[46,19182,19044],{"class":56},[46,19184,19047],{"class":52},[46,19186,19187],{"class":56}," m_center; }\n",[46,19189,19190],{"class":48,"line":778},[46,19191,616],{"emptyLinePlaceholder":615},[46,19193,19194],{"class":48,"line":789},[46,19195,17223],{"class":52},[46,19197,19198,19200],{"class":48,"line":794},[46,19199,16740],{"class":52},[46,19201,16730],{"class":56},[46,19203,19204],{"class":48,"line":806},[46,19205,19206],{"class":2253},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[46,19208,19209],{"class":48,"line":829},[46,19210,19211],{"class":56},"    Point m_center;\n",[46,19213,19214],{"class":48,"line":840},[46,19215,6013],{"class":56},[46,19217,19218,19220,19223,19225,19228,19230,19232,19234,19236,19238,19240],{"class":48,"line":846},[46,19219,7377],{"class":52},[46,19221,19222],{"class":169}," isInCircle",[46,19224,1152],{"class":56},[46,19226,19227],{"class":169},"Circle",[46,19229,12588],{"class":52},[46,19231,2476],{"class":439},[46,19233,2565],{"class":56},[46,19235,19142],{"class":169},[46,19237,12588],{"class":52},[46,19239,19],{"class":439},[46,19241,459],{"class":56},[46,19243,19244],{"class":48,"line":852},[46,19245,3597],{"class":56},[46,19247,19248,19250,19253,19255,19257,19260,19263,19266,19268,19270,19272,19274],{"class":48,"line":857},[46,19249,16740],{"class":52},[46,19251,19252],{"class":56}," dx ",[46,19254,79],{"class":52},[46,19256,18343],{"class":56},[46,19258,19259],{"class":169},"getCenter",[46,19261,19262],{"class":56},"().",[46,19264,19265],{"class":169},"getX",[46,19267,15053],{"class":56},[46,19269,534],{"class":52},[46,19271,17889],{"class":56},[46,19273,19265],{"class":169},[46,19275,7649],{"class":56},[46,19277,19278,19280,19283,19285,19287,19289,19291,19294,19296,19298,19300,19302],{"class":48,"line":875},[46,19279,16740],{"class":52},[46,19281,19282],{"class":56}," dy ",[46,19284,79],{"class":52},[46,19286,18343],{"class":56},[46,19288,19259],{"class":169},[46,19290,19262],{"class":56},[46,19292,19293],{"class":169},"getY",[46,19295,15053],{"class":56},[46,19297,534],{"class":52},[46,19299,17889],{"class":56},[46,19301,19293],{"class":169},[46,19303,7649],{"class":56},[46,19305,19306,19308,19311,19313,19316,19319,19321,19323,19325,19327,19329],{"class":48,"line":892},[46,19307,16740],{"class":52},[46,19309,19310],{"class":56}," distance ",[46,19312,79],{"class":52},[46,19314,19315],{"class":169}," sqrt",[46,19317,19318],{"class":56},"(dx ",[46,19320,2642],{"class":52},[46,19322,19252],{"class":56},[46,19324,2668],{"class":52},[46,19326,19282],{"class":56},[46,19328,2642],{"class":52},[46,19330,19331],{"class":56}," dy);\n",[46,19333,19334,19336,19339,19341,19343,19346],{"class":48,"line":898},[46,19335,5121],{"class":52},[46,19337,19338],{"class":56}," (distance ",[46,19340,821],{"class":52},[46,19342,18343],{"class":56},[46,19344,19345],{"class":169},"getRadius",[46,19347,19348],{"class":56},"())\n",[46,19350,19351],{"class":48,"line":903},[46,19352,4060],{"class":56},[46,19354,19355,19357,19359,19362,19364],{"class":48,"line":908},[46,19356,11673],{"class":56},[46,19358,3228],{"class":52},[46,19360,19361],{"class":173}," \"点在圆内\"",[46,19363,3496],{"class":52},[46,19365,10844],{"class":56},[46,19367,19368],{"class":48,"line":925},[46,19369,4217],{"class":56},[46,19371,19372],{"class":48,"line":1238},[46,19373,18824],{"class":52},[46,19375,19376],{"class":48,"line":1251},[46,19377,4060],{"class":56},[46,19379,19380,19382,19384,19387,19389],{"class":48,"line":1256},[46,19381,11673],{"class":56},[46,19383,3228],{"class":52},[46,19385,19386],{"class":173}," \"点在圆外\"",[46,19388,3496],{"class":52},[46,19390,10844],{"class":56},[46,19392,19393],{"class":48,"line":1261},[46,19394,4217],{"class":56},[46,19396,19397],{"class":48,"line":1274},[46,19398,3616],{"class":56},[46,19400,19401,19403,19405],{"class":48,"line":10061},[46,19402,2201],{"class":52},[46,19404,751],{"class":169},[46,19406,4006],{"class":56},[46,19408,19409],{"class":48,"line":11720},[46,19410,3597],{"class":56},[46,19412,19413],{"class":48,"line":11745},[46,19414,17054],{"class":2253},[46,19416,19417],{"class":48,"line":11768},[46,19418,16802],{"class":56},[46,19420,19421],{"class":48,"line":11792},[46,19422,19423],{"class":56},"    Point p1;\n",[46,19425,19426],{"class":48,"line":11797},[46,19427,18995],{"class":2253},[46,19429,19430,19432,19434,19437],{"class":48,"line":11802},[46,19431,3602],{"class":56},[46,19433,3228],{"class":52},[46,19435,19436],{"class":173},"\"请输入圆的半径：\"",[46,19438,3345],{"class":56},[46,19440,19441,19443],{"class":48,"line":11807},[46,19442,16740],{"class":52},[46,19444,19445],{"class":56}," r;\n",[46,19447,19448,19450,19452],{"class":48,"line":11816},[46,19449,4042],{"class":56},[46,19451,3481],{"class":52},[46,19453,19454],{"class":56},"r;\n",[46,19456,19457,19459,19462],{"class":48,"line":11821},[46,19458,18596],{"class":56},[46,19460,19461],{"class":169},"setRadius",[46,19463,19464],{"class":56},"(r);\n",[46,19466,19467,19469,19471,19474],{"class":48,"line":11827},[46,19468,3602],{"class":56},[46,19470,3228],{"class":52},[46,19472,19473],{"class":173},"\"请输入圆心坐标：\"",[46,19475,3345],{"class":56},[46,19477,19478,19480],{"class":48,"line":11848},[46,19479,16740],{"class":52},[46,19481,19482],{"class":56}," x, y;\n",[46,19484,19485,19487,19489,19491,19493],{"class":48,"line":11854},[46,19486,4042],{"class":56},[46,19488,3481],{"class":52},[46,19490,3006],{"class":56},[46,19492,3481],{"class":52},[46,19494,19495],{"class":56},"y;\n",[46,19497,19498,19501,19504],{"class":48,"line":11868},[46,19499,19500],{"class":56},"    p1.",[46,19502,19503],{"class":169},"setPoint",[46,19505,19506],{"class":56},"(x, y);\n",[46,19508,19509,19511,19514],{"class":48,"line":11874},[46,19510,18596],{"class":56},[46,19512,19513],{"class":169},"setCenter",[46,19515,19516],{"class":56},"(p1);\n",[46,19518,19519,19521,19523,19526],{"class":48,"line":11901},[46,19520,3602],{"class":56},[46,19522,3228],{"class":52},[46,19524,19525],{"class":173},"\"请输入测试点坐标：\"",[46,19527,3345],{"class":56},[46,19529,19530,19532],{"class":48,"line":11910},[46,19531,16740],{"class":52},[46,19533,19534],{"class":56}," x1, y1;\n",[46,19536,19537,19539,19541,19544,19546],{"class":48,"line":11916},[46,19538,4042],{"class":56},[46,19540,3481],{"class":52},[46,19542,19543],{"class":56},"x1",[46,19545,3481],{"class":52},[46,19547,19548],{"class":56},"y1;\n",[46,19550,19551],{"class":48,"line":11924},[46,19552,19553],{"class":56},"    Point p2;\n",[46,19555,19556,19559,19561],{"class":48,"line":11929},[46,19557,19558],{"class":56},"    p2.",[46,19560,19503],{"class":169},[46,19562,19563],{"class":56},"(x1, y1);\n",[46,19565,19566,19569],{"class":48,"line":18605},[46,19567,19568],{"class":169},"    isInCircle",[46,19570,19571],{"class":56},"(c1, p2);\n",[46,19573,19574],{"class":48,"line":18611},[46,19575,3616],{"class":56},[19,19577,19578],{},"在类中可以让另一个类作为本来的成员",[19,19580,19581],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[19,19583,19584],{},"创建point.h",[36,19586,19588],{"className":2187,"code":19587,"language":2189,"meta":41,"style":41},"#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",[43,19589,19590,19601,19607,19617,19623,19627,19632,19636,19640,19660,19664,19672,19680,19684,19688,19694,19700],{"__ignoreMap":41},[46,19591,19592,19595,19598],{"class":48,"line":49},[46,19593,19594],{"class":52},"#pragma",[46,19596,19597],{"class":169}," once",[46,19599,19600],{"class":2253}," \u002F\u002F防止头文件重复包含\n",[46,19602,19603,19605],{"class":48,"line":60},[46,19604,3981],{"class":52},[46,19606,3984],{"class":173},[46,19608,19609,19611,19613,19615],{"class":48,"line":200},[46,19610,3989],{"class":52},[46,19612,3992],{"class":52},[46,19614,3995],{"class":169},[46,19616,3345],{"class":56},[46,19618,19619,19621],{"class":48,"line":211},[46,19620,16696],{"class":52},[46,19622,18982],{"class":169},[46,19624,19625],{"class":48,"line":222},[46,19626,3597],{"class":56},[46,19628,19629],{"class":48,"line":636},[46,19630,19631],{"class":2253},"\u002F\u002F做好声明与变量定义就可以\n",[46,19633,19634],{"class":48,"line":641},[46,19635,16718],{"class":52},[46,19637,19638],{"class":48,"line":653},[46,19639,18995],{"class":2253},[46,19641,19642,19644,19646,19648,19650,19652,19654,19656,19658],{"class":48,"line":659},[46,19643,16911],{"class":52},[46,19645,19002],{"class":169},[46,19647,1152],{"class":56},[46,19649,16039],{"class":52},[46,19651,19009],{"class":439},[46,19653,448],{"class":56},[46,19655,16039],{"class":52},[46,19657,19016],{"class":439},[46,19659,4740],{"class":56},[46,19661,19662],{"class":48,"line":665},[46,19663,19034],{"class":2253},[46,19665,19666,19668,19670],{"class":48,"line":670},[46,19667,16740],{"class":52},[46,19669,19041],{"class":169},[46,19671,7649],{"class":56},[46,19673,19674,19676,19678],{"class":48,"line":676},[46,19675,16740],{"class":52},[46,19677,19057],{"class":169},[46,19679,7649],{"class":56},[46,19681,19682],{"class":48,"line":682},[46,19683,616],{"emptyLinePlaceholder":615},[46,19685,19686],{"class":48,"line":688},[46,19687,17223],{"class":52},[46,19689,19690,19692],{"class":48,"line":693},[46,19691,16740],{"class":52},[46,19693,19079],{"class":56},[46,19695,19696,19698],{"class":48,"line":699},[46,19697,16740],{"class":52},[46,19699,19086],{"class":56},[46,19701,19702],{"class":48,"line":705},[46,19703,6013],{"class":56},[19,19705,19706],{},"创建point.cpp",[36,19708,19710],{"className":2187,"code":19709,"language":2189,"meta":41,"style":41},"#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",[43,19711,19712,19719,19724,19758,19762,19778],{"__ignoreMap":41},[46,19713,19714,19716],{"class":48,"line":49},[46,19715,3981],{"class":52},[46,19717,19718],{"class":173},"\u003Cpoint.h>\n",[46,19720,19721],{"class":48,"line":60},[46,19722,19723],{"class":2253},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[46,19725,19726,19728,19731,19734,19736,19738,19740,19742,19744,19746,19748,19750,19752,19754,19756],{"class":48,"line":200},[46,19727,16911],{"class":52},[46,19729,19730],{"class":169}," Point",[46,19732,19733],{"class":56},"::",[46,19735,19503],{"class":169},[46,19737,1152],{"class":56},[46,19739,16039],{"class":52},[46,19741,19009],{"class":439},[46,19743,448],{"class":56},[46,19745,16039],{"class":52},[46,19747,19016],{"class":439},[46,19749,19019],{"class":56},[46,19751,79],{"class":52},[46,19753,19024],{"class":56},[46,19755,79],{"class":52},[46,19757,19029],{"class":56},[46,19759,19760],{"class":48,"line":211},[46,19761,19034],{"class":2253},[46,19763,19764,19766,19768,19770,19772,19774,19776],{"class":48,"line":222},[46,19765,16740],{"class":52},[46,19767,19730],{"class":169},[46,19769,19733],{"class":56},[46,19771,19265],{"class":169},[46,19773,19044],{"class":56},[46,19775,19047],{"class":52},[46,19777,19050],{"class":56},[46,19779,19780,19782,19784,19786,19788,19790,19792],{"class":48,"line":636},[46,19781,16740],{"class":52},[46,19783,19730],{"class":169},[46,19785,19733],{"class":56},[46,19787,19293],{"class":169},[46,19789,19044],{"class":56},[46,19791,19047],{"class":52},[46,19793,19064],{"class":56},[19,19795,19796],{},"创建circle.h",[36,19798,19800],{"className":2187,"code":19799,"language":2189,"meta":41,"style":41},"#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",[43,19801,19802,19809,19815,19825,19831,19837,19841,19845,19849,19863,19877,19881,19889,19897,19901,19905,19911,19915,19919],{"__ignoreMap":41},[46,19803,19804,19806],{"class":48,"line":49},[46,19805,19594],{"class":52},[46,19807,19808],{"class":169}," once\n",[46,19810,19811,19813],{"class":48,"line":60},[46,19812,3981],{"class":52},[46,19814,3984],{"class":173},[46,19816,19817,19819,19821,19823],{"class":48,"line":200},[46,19818,3989],{"class":52},[46,19820,3992],{"class":52},[46,19822,3995],{"class":169},[46,19824,3345],{"class":56},[46,19826,19827,19829],{"class":48,"line":211},[46,19828,3981],{"class":52},[46,19830,19718],{"class":173},[46,19832,19833,19835],{"class":48,"line":222},[46,19834,16696],{"class":52},[46,19836,16699],{"class":169},[46,19838,19839],{"class":48,"line":636},[46,19840,3597],{"class":56},[46,19842,19843],{"class":48,"line":641},[46,19844,16718],{"class":52},[46,19846,19847],{"class":48,"line":653},[46,19848,18995],{"class":2253},[46,19850,19851,19853,19855,19857,19859,19861],{"class":48,"line":659},[46,19852,16911],{"class":52},[46,19854,19115],{"class":169},[46,19856,1152],{"class":56},[46,19858,16039],{"class":52},[46,19860,19122],{"class":439},[46,19862,4740],{"class":56},[46,19864,19865,19867,19869,19871,19873,19875],{"class":48,"line":665},[46,19866,16911],{"class":52},[46,19868,19137],{"class":169},[46,19870,1152],{"class":56},[46,19872,19142],{"class":169},[46,19874,19145],{"class":439},[46,19876,4740],{"class":56},[46,19878,19879],{"class":48,"line":670},[46,19880,19158],{"class":2253},[46,19882,19883,19885,19887],{"class":48,"line":676},[46,19884,16740],{"class":52},[46,19886,19165],{"class":169},[46,19888,7649],{"class":56},[46,19890,19891,19893,19895],{"class":48,"line":682},[46,19892,19177],{"class":169},[46,19894,19180],{"class":169},[46,19896,7649],{"class":56},[46,19898,19899],{"class":48,"line":688},[46,19900,616],{"emptyLinePlaceholder":615},[46,19902,19903],{"class":48,"line":693},[46,19904,17223],{"class":52},[46,19906,19907,19909],{"class":48,"line":699},[46,19908,16740],{"class":52},[46,19910,16730],{"class":56},[46,19912,19913],{"class":48,"line":705},[46,19914,19206],{"class":2253},[46,19916,19917],{"class":48,"line":711},[46,19918,19211],{"class":56},[46,19920,19921],{"class":48,"line":717},[46,19922,6013],{"class":56},[19,19924,19925],{},"创建circle.cpp",[36,19927,19929],{"className":2187,"code":19928,"language":2189,"meta":41,"style":41},"#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",[43,19930,19931,19938,19961,19983,19988,20004],{"__ignoreMap":41},[46,19932,19933,19935],{"class":48,"line":49},[46,19934,3981],{"class":52},[46,19936,19937],{"class":173},"\u003Ccircle.h>\n",[46,19939,19940,19942,19945,19947,19949,19951,19953,19955,19957,19959],{"class":48,"line":60},[46,19941,7377],{"class":52},[46,19943,19944],{"class":169}," Circle",[46,19946,19733],{"class":56},[46,19948,19461],{"class":169},[46,19950,1152],{"class":56},[46,19952,16039],{"class":52},[46,19954,19122],{"class":439},[46,19956,19125],{"class":56},[46,19958,79],{"class":52},[46,19960,19130],{"class":56},[46,19962,19963,19965,19967,19969,19971,19973,19975,19977,19979,19981],{"class":48,"line":200},[46,19964,7377],{"class":52},[46,19966,19944],{"class":169},[46,19968,19733],{"class":56},[46,19970,19513],{"class":169},[46,19972,1152],{"class":56},[46,19974,19142],{"class":169},[46,19976,19145],{"class":439},[46,19978,19148],{"class":56},[46,19980,79],{"class":52},[46,19982,19153],{"class":56},[46,19984,19985],{"class":48,"line":211},[46,19986,19987],{"class":2253},"\u002F\u002F获取属性\n",[46,19989,19990,19992,19994,19996,19998,20000,20002],{"class":48,"line":222},[46,19991,16039],{"class":52},[46,19993,19944],{"class":169},[46,19995,19733],{"class":56},[46,19997,19345],{"class":169},[46,19999,19044],{"class":56},[46,20001,19047],{"class":52},[46,20003,19172],{"class":56},[46,20005,20006,20008,20010,20012,20014,20016,20018],{"class":48,"line":636},[46,20007,19142],{"class":169},[46,20009,19944],{"class":169},[46,20011,19733],{"class":56},[46,20013,19259],{"class":169},[46,20015,19044],{"class":56},[46,20017,19047],{"class":52},[46,20019,19187],{"class":56},[19,20021,20022],{},"使用封装的类",[36,20024,20026],{"className":2187,"code":20025,"language":2189,"meta":41,"style":41},"#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",[43,20027,20028,20034,20044,20050,20056,20080,20084,20110,20136,20160,20174,20178,20190,20194,20198,20202,20214,20218,20222,20230,20234,20238,20242,20246,20250,20260,20266,20274,20282,20292,20298,20310,20318,20326,20336,20342,20354,20358,20366,20372],{"__ignoreMap":41},[46,20029,20030,20032],{"class":48,"line":49},[46,20031,3981],{"class":52},[46,20033,3984],{"class":173},[46,20035,20036,20038,20040,20042],{"class":48,"line":60},[46,20037,3989],{"class":52},[46,20039,3992],{"class":52},[46,20041,3995],{"class":169},[46,20043,3345],{"class":56},[46,20045,20046,20048],{"class":48,"line":200},[46,20047,3981],{"class":52},[46,20049,19937],{"class":173},[46,20051,20052,20054],{"class":48,"line":211},[46,20053,3981],{"class":52},[46,20055,19718],{"class":173},[46,20057,20058,20060,20062,20064,20066,20068,20070,20072,20074,20076,20078],{"class":48,"line":222},[46,20059,7377],{"class":52},[46,20061,19222],{"class":169},[46,20063,1152],{"class":56},[46,20065,19227],{"class":169},[46,20067,12588],{"class":52},[46,20069,2476],{"class":439},[46,20071,2565],{"class":56},[46,20073,19142],{"class":169},[46,20075,12588],{"class":52},[46,20077,19],{"class":439},[46,20079,459],{"class":56},[46,20081,20082],{"class":48,"line":636},[46,20083,3597],{"class":56},[46,20085,20086,20088,20090,20092,20094,20096,20098,20100,20102,20104,20106,20108],{"class":48,"line":641},[46,20087,16740],{"class":52},[46,20089,19252],{"class":56},[46,20091,79],{"class":52},[46,20093,18343],{"class":56},[46,20095,19259],{"class":169},[46,20097,19262],{"class":56},[46,20099,19265],{"class":169},[46,20101,15053],{"class":56},[46,20103,534],{"class":52},[46,20105,17889],{"class":56},[46,20107,19265],{"class":169},[46,20109,7649],{"class":56},[46,20111,20112,20114,20116,20118,20120,20122,20124,20126,20128,20130,20132,20134],{"class":48,"line":653},[46,20113,16740],{"class":52},[46,20115,19282],{"class":56},[46,20117,79],{"class":52},[46,20119,18343],{"class":56},[46,20121,19259],{"class":169},[46,20123,19262],{"class":56},[46,20125,19293],{"class":169},[46,20127,15053],{"class":56},[46,20129,534],{"class":52},[46,20131,17889],{"class":56},[46,20133,19293],{"class":169},[46,20135,7649],{"class":56},[46,20137,20138,20140,20142,20144,20146,20148,20150,20152,20154,20156,20158],{"class":48,"line":659},[46,20139,16740],{"class":52},[46,20141,19310],{"class":56},[46,20143,79],{"class":52},[46,20145,19315],{"class":169},[46,20147,19318],{"class":56},[46,20149,2642],{"class":52},[46,20151,19252],{"class":56},[46,20153,2668],{"class":52},[46,20155,19282],{"class":56},[46,20157,2642],{"class":52},[46,20159,19331],{"class":56},[46,20161,20162,20164,20166,20168,20170,20172],{"class":48,"line":665},[46,20163,5121],{"class":52},[46,20165,19338],{"class":56},[46,20167,821],{"class":52},[46,20169,18343],{"class":56},[46,20171,19345],{"class":169},[46,20173,19348],{"class":56},[46,20175,20176],{"class":48,"line":670},[46,20177,4060],{"class":56},[46,20179,20180,20182,20184,20186,20188],{"class":48,"line":676},[46,20181,11673],{"class":56},[46,20183,3228],{"class":52},[46,20185,19361],{"class":173},[46,20187,3496],{"class":52},[46,20189,10844],{"class":56},[46,20191,20192],{"class":48,"line":682},[46,20193,4217],{"class":56},[46,20195,20196],{"class":48,"line":688},[46,20197,18824],{"class":52},[46,20199,20200],{"class":48,"line":693},[46,20201,4060],{"class":56},[46,20203,20204,20206,20208,20210,20212],{"class":48,"line":699},[46,20205,11673],{"class":56},[46,20207,3228],{"class":52},[46,20209,19386],{"class":173},[46,20211,3496],{"class":52},[46,20213,10844],{"class":56},[46,20215,20216],{"class":48,"line":705},[46,20217,4217],{"class":56},[46,20219,20220],{"class":48,"line":711},[46,20221,3616],{"class":56},[46,20223,20224,20226,20228],{"class":48,"line":717},[46,20225,2201],{"class":52},[46,20227,751],{"class":169},[46,20229,4006],{"class":56},[46,20231,20232],{"class":48,"line":723},[46,20233,3597],{"class":56},[46,20235,20236],{"class":48,"line":729},[46,20237,17054],{"class":2253},[46,20239,20240],{"class":48,"line":735},[46,20241,16802],{"class":56},[46,20243,20244],{"class":48,"line":740},[46,20245,19423],{"class":56},[46,20247,20248],{"class":48,"line":745},[46,20249,18995],{"class":2253},[46,20251,20252,20254,20256,20258],{"class":48,"line":763},[46,20253,3602],{"class":56},[46,20255,3228],{"class":52},[46,20257,19436],{"class":173},[46,20259,3345],{"class":56},[46,20261,20262,20264],{"class":48,"line":778},[46,20263,16740],{"class":52},[46,20265,19445],{"class":56},[46,20267,20268,20270,20272],{"class":48,"line":789},[46,20269,4042],{"class":56},[46,20271,3481],{"class":52},[46,20273,19454],{"class":56},[46,20275,20276,20278,20280],{"class":48,"line":794},[46,20277,18596],{"class":56},[46,20279,19461],{"class":169},[46,20281,19464],{"class":56},[46,20283,20284,20286,20288,20290],{"class":48,"line":806},[46,20285,3602],{"class":56},[46,20287,3228],{"class":52},[46,20289,19473],{"class":173},[46,20291,3345],{"class":56},[46,20293,20294,20296],{"class":48,"line":829},[46,20295,16740],{"class":52},[46,20297,19482],{"class":56},[46,20299,20300,20302,20304,20306,20308],{"class":48,"line":840},[46,20301,4042],{"class":56},[46,20303,3481],{"class":52},[46,20305,3006],{"class":56},[46,20307,3481],{"class":52},[46,20309,19495],{"class":56},[46,20311,20312,20314,20316],{"class":48,"line":846},[46,20313,19500],{"class":56},[46,20315,19503],{"class":169},[46,20317,19506],{"class":56},[46,20319,20320,20322,20324],{"class":48,"line":852},[46,20321,18596],{"class":56},[46,20323,19513],{"class":169},[46,20325,19516],{"class":56},[46,20327,20328,20330,20332,20334],{"class":48,"line":857},[46,20329,3602],{"class":56},[46,20331,3228],{"class":52},[46,20333,19525],{"class":173},[46,20335,3345],{"class":56},[46,20337,20338,20340],{"class":48,"line":875},[46,20339,16740],{"class":52},[46,20341,19534],{"class":56},[46,20343,20344,20346,20348,20350,20352],{"class":48,"line":892},[46,20345,4042],{"class":56},[46,20347,3481],{"class":52},[46,20349,19543],{"class":56},[46,20351,3481],{"class":52},[46,20353,19548],{"class":56},[46,20355,20356],{"class":48,"line":898},[46,20357,19553],{"class":56},[46,20359,20360,20362,20364],{"class":48,"line":903},[46,20361,19558],{"class":56},[46,20363,19503],{"class":169},[46,20365,19563],{"class":56},[46,20367,20368,20370],{"class":48,"line":908},[46,20369,19568],{"class":169},[46,20371,19571],{"class":56},[46,20373,20374],{"class":48,"line":925},[46,20375,3616],{"class":56},[14,20377,20379],{"id":20378},"_82对象的初始化清理","8.2对象的初始化清理",[3191,20381,20382,20385],{},[26,20383,20384],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[26,20386,20387],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[479,20389,20391],{"id":20390},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[19,20393,20394,20395,20398],{},"对象的",[2339,20396,20397],{},"初始化和清理","也是两个非常重要的安全问题",[19,20400,20401],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[19,20403,20404],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[19,20406,20407,20408,20411,20412,20415],{},"c++利用了",[2339,20409,20410],{},"构造函数","和",[2339,20413,20414],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[19,20417,20418,20419],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[2339,20420,20421],{},"我们不提供构造和析构，编译器会提供",[19,20423,20424],{},[2339,20425,20426],{},"编译器提供的构造函数和析构函数是空实现。",[3191,20428,20429,20432],{},[26,20430,20431],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[26,20433,20434,20435,20438],{},"析构函数：主要作用在于对象",[2339,20436,20437],{},"销毁前","系统自动调用，执行一些清理工作。",[19,20440,20441,20444],{},[2339,20442,20443],{},"构造函数语法：",[43,20445,20446],{},"类名(){}",[23,20448,20449,20452,20455,20458,20461],{},[26,20450,20451],{},"构造函数，没有返回值也不写void",[26,20453,20454],{},"函数名称与类名相同",[26,20456,20457],{},"构造函数可以有参数，因此可以发生重载",[26,20459,20460],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[26,20462,20463,20464,2616],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[43,20465,20466],{},"Person(){}",[19,20468,20469,15797,20472],{},[2339,20470,20471],{},"析构函数语法：",[43,20473,20474],{},"~类名(){}",[23,20476,20477,20480,20483,20489],{},[26,20478,20479],{},"析构函数，没有返回值也不写void",[26,20481,20482],{},"函数名称与类名相同,在名称前加上符号  ~",[26,20484,20485,20486],{},"析构函数不可以有参数，因此",[2339,20487,20488],{},"不可以发生重载",[26,20490,20491],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[36,20493,20495],{"className":2187,"code":20494,"language":2189,"meta":41,"style":41},"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",[43,20496,20497,20503,20507,20511,20516,20523,20527,20540,20544,20549,20556,20560,20573,20577,20581,20585,20589,20597,20601,20609,20613,20617,20625,20629,20634,20638,20645,20649,20662,20666,20674],{"__ignoreMap":41},[46,20498,20499,20501],{"class":48,"line":49},[46,20500,16696],{"class":52},[46,20502,17172],{"class":169},[46,20504,20505],{"class":48,"line":60},[46,20506,3597],{"class":56},[46,20508,20509],{"class":48,"line":200},[46,20510,16718],{"class":52},[46,20512,20513],{"class":48,"line":211},[46,20514,20515],{"class":2253},"    \u002F\u002F构造函数\n",[46,20517,20518,20521],{"class":48,"line":222},[46,20519,20520],{"class":169},"    Person",[46,20522,4006],{"class":56},[46,20524,20525],{"class":48,"line":636},[46,20526,4060],{"class":56},[46,20528,20529,20531,20533,20536,20538],{"class":48,"line":641},[46,20530,11673],{"class":56},[46,20532,3228],{"class":52},[46,20534,20535],{"class":173}," \"Person的构造函数调用\"",[46,20537,3496],{"class":52},[46,20539,10844],{"class":56},[46,20541,20542],{"class":48,"line":653},[46,20543,4217],{"class":56},[46,20545,20546],{"class":48,"line":659},[46,20547,20548],{"class":2253},"    \u002F\u002F析构函数\n",[46,20550,20551,20554],{"class":48,"line":665},[46,20552,20553],{"class":169},"    ~Person",[46,20555,4006],{"class":56},[46,20557,20558],{"class":48,"line":670},[46,20559,4060],{"class":56},[46,20561,20562,20564,20566,20569,20571],{"class":48,"line":676},[46,20563,11673],{"class":56},[46,20565,3228],{"class":52},[46,20567,20568],{"class":173}," \"Person的析构函数调用\"",[46,20570,3496],{"class":52},[46,20572,10844],{"class":56},[46,20574,20575],{"class":48,"line":682},[46,20576,4217],{"class":56},[46,20578,20579],{"class":48,"line":688},[46,20580,616],{"emptyLinePlaceholder":615},[46,20582,20583],{"class":48,"line":693},[46,20584,6013],{"class":56},[46,20586,20587],{"class":48,"line":699},[46,20588,616],{"emptyLinePlaceholder":615},[46,20590,20591,20593,20595],{"class":48,"line":705},[46,20592,7377],{"class":52},[46,20594,7601],{"class":169},[46,20596,4006],{"class":56},[46,20598,20599],{"class":48,"line":711},[46,20600,3597],{"class":56},[46,20602,20603,20606],{"class":48,"line":717},[46,20604,20605],{"class":56},"    Person p;",[46,20607,20608],{"class":2253},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[46,20610,20611],{"class":48,"line":723},[46,20612,3616],{"class":56},[46,20614,20615],{"class":48,"line":729},[46,20616,616],{"emptyLinePlaceholder":615},[46,20618,20619,20621,20623],{"class":48,"line":735},[46,20620,2201],{"class":52},[46,20622,751],{"class":169},[46,20624,12857],{"class":56},[46,20626,20627],{"class":48,"line":740},[46,20628,15213],{"class":56},[46,20630,20631],{"class":48,"line":745},[46,20632,20633],{"class":2253},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[46,20635,20636],{"class":48,"line":763},[46,20637,616],{"emptyLinePlaceholder":615},[46,20639,20640,20642],{"class":48,"line":778},[46,20641,20605],{"class":56},[46,20643,20644],{"class":2253},"\u002F\u002F只有构造函数\n",[46,20646,20647],{"class":48,"line":789},[46,20648,616],{"emptyLinePlaceholder":615},[46,20650,20651,20653,20655,20657,20659],{"class":48,"line":794},[46,20652,4332],{"class":169},[46,20654,1152],{"class":56},[46,20656,4337],{"class":173},[46,20658,7979],{"class":56},[46,20660,20661],{"class":2253},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[46,20663,20664],{"class":48,"line":806},[46,20665,616],{"emptyLinePlaceholder":615},[46,20667,20668,20670,20672],{"class":48,"line":829},[46,20669,6108],{"class":52},[46,20671,887],{"class":180},[46,20673,3345],{"class":56},[46,20675,20676],{"class":48,"line":840},[46,20677,3616],{"class":56},[19,20679,20680],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[479,20682,20684],{"id":20683},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[19,20686,20687],{},"两种分类方式：",[19,20689,20690],{},"​\t按参数分为： 有参构造和无参构造",[19,20692,20693],{},"​\t按类型分为： 普通构造和拷贝构造",[19,20695,20696],{},"三种调用方式：",[19,20698,20699],{},"​\t括号法",[19,20701,20702],{},"​\t显示法",[19,20704,20705],{},"​\t隐式转换法",[36,20707,20709],{"className":2187,"code":20708,"language":2189,"meta":41,"style":41},"#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",[43,20710,20711,20717,20727,20732,20737,20742,20747,20751,20759,20763,20767,20771,20777,20781,20794,20798,20810,20814,20823,20836,20840,20844,20850,20854,20867,20871,20876,20892,20896,20901,20910,20923,20927,20933,20937,20942,20950,20954,20959,20963,20971,20975,20980,20985,20990,20995,21000,21004,21009,21014,21019,21024,21028,21033,21038,21054,21066,21071,21075,21080,21085,21090,21094,21099,21113,21126,21130,21138,21142,21148,21154,21162],{"__ignoreMap":41},[46,20712,20713,20715],{"class":48,"line":49},[46,20714,3981],{"class":52},[46,20716,3984],{"class":173},[46,20718,20719,20721,20723,20725],{"class":48,"line":60},[46,20720,3989],{"class":52},[46,20722,3992],{"class":52},[46,20724,3995],{"class":169},[46,20726,3345],{"class":56},[46,20728,20729],{"class":48,"line":200},[46,20730,20731],{"class":2253},"\u002F\u002F1.构造函数的分类及调用\n",[46,20733,20734],{"class":48,"line":211},[46,20735,20736],{"class":2253},"\u002F\u002F分类\n",[46,20738,20739],{"class":48,"line":222},[46,20740,20741],{"class":2253},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[46,20743,20744],{"class":48,"line":636},[46,20745,20746],{"class":2253},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[46,20748,20749],{"class":48,"line":641},[46,20750,616],{"emptyLinePlaceholder":615},[46,20752,20753,20755,20757],{"class":48,"line":653},[46,20754,16696],{"class":52},[46,20756,17570],{"class":169},[46,20758,4695],{"class":56},[46,20760,20761],{"class":48,"line":659},[46,20762,3597],{"class":56},[46,20764,20765],{"class":48,"line":665},[46,20766,16718],{"class":52},[46,20768,20769],{"class":48,"line":670},[46,20770,20515],{"class":2253},[46,20772,20773,20775],{"class":48,"line":676},[46,20774,20520],{"class":169},[46,20776,4006],{"class":56},[46,20778,20779],{"class":48,"line":682},[46,20780,4060],{"class":56},[46,20782,20783,20785,20787,20790,20792],{"class":48,"line":688},[46,20784,5470],{"class":56},[46,20786,3228],{"class":52},[46,20788,20789],{"class":173},"\"Person构造函数无参构造\"",[46,20791,3228],{"class":52},[46,20793,3250],{"class":56},[46,20795,20796],{"class":48,"line":693},[46,20797,4217],{"class":56},[46,20799,20800,20802,20804,20806,20808],{"class":48,"line":699},[46,20801,20520],{"class":169},[46,20803,1152],{"class":56},[46,20805,2201],{"class":52},[46,20807,3450],{"class":439},[46,20809,459],{"class":56},[46,20811,20812],{"class":48,"line":705},[46,20813,4060],{"class":56},[46,20815,20816,20819,20821],{"class":48,"line":711},[46,20817,20818],{"class":56},"        age",[46,20820,79],{"class":52},[46,20822,8210],{"class":56},[46,20824,20825,20827,20829,20832,20834],{"class":48,"line":717},[46,20826,5470],{"class":56},[46,20828,3228],{"class":52},[46,20830,20831],{"class":173},"\"Person构造函数有参构造\"",[46,20833,3228],{"class":52},[46,20835,3250],{"class":56},[46,20837,20838],{"class":48,"line":723},[46,20839,4217],{"class":56},[46,20841,20842],{"class":48,"line":729},[46,20843,20548],{"class":2253},[46,20845,20846,20848],{"class":48,"line":735},[46,20847,20553],{"class":169},[46,20849,4006],{"class":56},[46,20851,20852],{"class":48,"line":740},[46,20853,4060],{"class":56},[46,20855,20856,20858,20860,20863,20865],{"class":48,"line":745},[46,20857,5470],{"class":56},[46,20859,3228],{"class":52},[46,20861,20862],{"class":173},"\"Person析构函数被调用\"",[46,20864,3228],{"class":52},[46,20866,3250],{"class":56},[46,20868,20869],{"class":48,"line":763},[46,20870,4217],{"class":56},[46,20872,20873],{"class":48,"line":778},[46,20874,20875],{"class":2253},"    \u002F\u002F拷贝构造函数\n",[46,20877,20878,20880,20882,20884,20886,20888,20890],{"class":48,"line":789},[46,20879,20520],{"class":169},[46,20881,1152],{"class":56},[46,20883,8805],{"class":52},[46,20885,17570],{"class":169},[46,20887,12588],{"class":52},[46,20889,19],{"class":439},[46,20891,459],{"class":56},[46,20893,20894],{"class":48,"line":794},[46,20895,4060],{"class":56},[46,20897,20898],{"class":48,"line":806},[46,20899,20900],{"class":2253},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[46,20902,20903,20905,20907],{"class":48,"line":829},[46,20904,20818],{"class":56},[46,20906,79],{"class":52},[46,20908,20909],{"class":56},"p.age;\n",[46,20911,20912,20914,20916,20919,20921],{"class":48,"line":840},[46,20913,5470],{"class":56},[46,20915,3228],{"class":52},[46,20917,20918],{"class":173},"\"Person拷贝构造函数被调用\"",[46,20920,3228],{"class":52},[46,20922,3250],{"class":56},[46,20924,20925],{"class":48,"line":846},[46,20926,4217],{"class":56},[46,20928,20929,20931],{"class":48,"line":852},[46,20930,4015],{"class":52},[46,20932,9810],{"class":56},[46,20934,20935],{"class":48,"line":857},[46,20936,6013],{"class":56},[46,20938,20939],{"class":48,"line":875},[46,20940,20941],{"class":2253},"\u002F\u002F调用\n",[46,20943,20944,20946,20948],{"class":48,"line":892},[46,20945,7377],{"class":52},[46,20947,7601],{"class":169},[46,20949,4006],{"class":56},[46,20951,20952],{"class":48,"line":898},[46,20953,3597],{"class":56},[46,20955,20956],{"class":48,"line":903},[46,20957,20958],{"class":2253},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[46,20960,20961],{"class":48,"line":908},[46,20962,3616],{"class":56},[46,20964,20965,20967,20969],{"class":48,"line":925},[46,20966,7377],{"class":52},[46,20968,7670],{"class":169},[46,20970,4006],{"class":56},[46,20972,20973],{"class":48,"line":1238},[46,20974,3597],{"class":56},[46,20976,20977],{"class":48,"line":1251},[46,20978,20979],{"class":2253},"    \u002F\u002F1.括号法\n",[46,20981,20982],{"class":48,"line":1256},[46,20983,20984],{"class":2253},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[46,20986,20987],{"class":48,"line":1261},[46,20988,20989],{"class":2253},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[46,20991,20992],{"class":48,"line":1274},[46,20993,20994],{"class":2253},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[46,20996,20997],{"class":48,"line":10061},[46,20998,20999],{"class":2253},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[46,21001,21002],{"class":48,"line":11720},[46,21003,616],{"emptyLinePlaceholder":615},[46,21005,21006],{"class":48,"line":11745},[46,21007,21008],{"class":2253},"    \u002F\u002F注意事项\n",[46,21010,21011],{"class":48,"line":11768},[46,21012,21013],{"class":2253},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[46,21015,21016],{"class":48,"line":11792},[46,21017,21018],{"class":2253},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[46,21020,21021],{"class":48,"line":11797},[46,21022,21023],{"class":2253},"    \u002F\u002F Person p4();\n",[46,21025,21026],{"class":48,"line":11802},[46,21027,616],{"emptyLinePlaceholder":615},[46,21029,21030],{"class":48,"line":11807},[46,21031,21032],{"class":2253},"    \u002F\u002F2.显示法\n",[46,21034,21035],{"class":48,"line":11816},[46,21036,21037],{"class":56},"    Person p1;\n",[46,21039,21040,21043,21045,21048,21050,21052],{"class":48,"line":11821},[46,21041,21042],{"class":56},"    Person p2",[46,21044,79],{"class":52},[46,21046,21047],{"class":169},"Person",[46,21049,1152],{"class":56},[46,21051,2633],{"class":180},[46,21053,4740],{"class":56},[46,21055,21056,21059,21061,21063],{"class":48,"line":11827},[46,21057,21058],{"class":56},"    Person p3",[46,21060,79],{"class":52},[46,21062,21047],{"class":169},[46,21064,21065],{"class":56},"(p2);\n",[46,21067,21068],{"class":48,"line":11848},[46,21069,21070],{"class":2253},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[46,21072,21073],{"class":48,"line":11854},[46,21074,616],{"emptyLinePlaceholder":615},[46,21076,21077],{"class":48,"line":11868},[46,21078,21079],{"class":2253},"    \u002F\u002F 注意事项2\n",[46,21081,21082],{"class":48,"line":11874},[46,21083,21084],{"class":2253},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[46,21086,21087],{"class":48,"line":11901},[46,21088,21089],{"class":2253},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[46,21091,21092],{"class":48,"line":11910},[46,21093,616],{"emptyLinePlaceholder":615},[46,21095,21096],{"class":48,"line":11916},[46,21097,21098],{"class":2253},"    \u002F\u002F3.隐士转换法\n",[46,21100,21101,21104,21106,21108,21110],{"class":48,"line":11924},[46,21102,21103],{"class":56},"    Person p4",[46,21105,79],{"class":52},[46,21107,2633],{"class":180},[46,21109,2250],{"class":56},[46,21111,21112],{"class":2253},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[46,21114,21115,21118,21120,21123],{"class":48,"line":11929},[46,21116,21117],{"class":56},"    Person p5",[46,21119,79],{"class":52},[46,21121,21122],{"class":56},"p4;",[46,21124,21125],{"class":2253}," \u002F\u002F 这里会调用拷贝构造函数\n",[46,21127,21128],{"class":48,"line":18605},[46,21129,3616],{"class":56},[46,21131,21132,21134,21136],{"class":48,"line":18611},[46,21133,2201],{"class":52},[46,21135,751],{"class":169},[46,21137,4006],{"class":56},[46,21139,21140],{"class":48,"line":18634},[46,21141,3597],{"class":56},[46,21143,21144,21146],{"class":48,"line":18640},[46,21145,7646],{"class":169},[46,21147,7649],{"class":56},[46,21149,21150,21152],{"class":48,"line":18663},[46,21151,7715],{"class":169},[46,21153,7649],{"class":56},[46,21155,21156,21158,21160],{"class":48,"line":18677},[46,21157,6108],{"class":52},[46,21159,887],{"class":180},[46,21161,3345],{"class":56},[46,21163,21164],{"class":48,"line":18697},[46,21165,3616],{"class":56},[19,21167,21168,21171],{},[2339,21169,21170],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[479,21173,21175],{"id":21174},"_823拷贝构造函数","8.2.3拷贝构造函数",[19,21177,21178],{},"C++中拷贝构造函数调用时机通常有三种情况",[3191,21180,21181,21184,21187],{},[26,21182,21183],{},"使用一个已经创建完毕的对象来初始化一个新对象",[26,21185,21186],{},"值传递的方式给函数参数传值",[26,21188,21189],{},"以值方式返回局部对象",[36,21191,21193],{"className":2187,"code":21192,"language":2189,"meta":41,"style":41},"#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",[43,21194,21195,21201,21211,21215,21220,21224,21229,21234,21239,21245,21249,21253,21259,21263,21276,21280,21285,21297,21301,21309,21322,21326,21330,21346,21350,21359,21372,21376,21382,21386,21398,21402,21408,21412,21416,21424,21428,21441,21449,21467,21471,21476,21481,21496,21500,21513,21517,21525,21529,21533,21541,21545,21550,21559,21563,21567,21592,21602,21606,21614,21618,21629,21654,21658,21662,21666,21674,21678,21683,21688,21695,21700,21705,21710,21715,21719,21724,21728,21733,21737,21742,21747,21751,21755,21760,21765,21773],{"__ignoreMap":41},[46,21196,21197,21199],{"class":48,"line":49},[46,21198,3981],{"class":52},[46,21200,3984],{"class":173},[46,21202,21203,21205,21207,21209],{"class":48,"line":60},[46,21204,3989],{"class":52},[46,21206,3992],{"class":52},[46,21208,3995],{"class":169},[46,21210,3345],{"class":56},[46,21212,21213],{"class":48,"line":200},[46,21214,616],{"emptyLinePlaceholder":615},[46,21216,21217],{"class":48,"line":211},[46,21218,21219],{"class":2253},"\u002F\u002F拷贝构造函数调用时机\n",[46,21221,21222],{"class":48,"line":222},[46,21223,616],{"emptyLinePlaceholder":615},[46,21225,21226],{"class":48,"line":636},[46,21227,21228],{"class":2253},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[46,21230,21231],{"class":48,"line":641},[46,21232,21233],{"class":2253},"\u002F\u002F2.值传递的方式给函数参数传值\n",[46,21235,21236],{"class":48,"line":653},[46,21237,21238],{"class":2253},"\u002F\u002F3.以值方式返回局部对象\n",[46,21240,21241,21243],{"class":48,"line":659},[46,21242,16696],{"class":52},[46,21244,17172],{"class":169},[46,21246,21247],{"class":48,"line":665},[46,21248,3597],{"class":56},[46,21250,21251],{"class":48,"line":670},[46,21252,16718],{"class":52},[46,21254,21255,21257],{"class":48,"line":676},[46,21256,20520],{"class":169},[46,21258,4006],{"class":56},[46,21260,21261],{"class":48,"line":682},[46,21262,4060],{"class":56},[46,21264,21265,21267,21269,21272,21274],{"class":48,"line":688},[46,21266,11673],{"class":56},[46,21268,3228],{"class":52},[46,21270,21271],{"class":173}," \"Person的默认构造函数调用\"",[46,21273,3496],{"class":52},[46,21275,10844],{"class":56},[46,21277,21278],{"class":48,"line":693},[46,21279,4217],{"class":56},[46,21281,21282],{"class":48,"line":699},[46,21283,21284],{"class":2253},"    \u002F\u002F有参构造\n",[46,21286,21287,21289,21291,21293,21295],{"class":48,"line":705},[46,21288,20520],{"class":169},[46,21290,1152],{"class":56},[46,21292,2201],{"class":52},[46,21294,17690],{"class":439},[46,21296,459],{"class":56},[46,21298,21299],{"class":48,"line":711},[46,21300,4060],{"class":56},[46,21302,21303,21305,21307],{"class":48,"line":717},[46,21304,17744],{"class":56},[46,21306,79],{"class":52},[46,21308,9810],{"class":56},[46,21310,21311,21313,21315,21318,21320],{"class":48,"line":723},[46,21312,11673],{"class":56},[46,21314,3228],{"class":52},[46,21316,21317],{"class":173}," \"Person的有参构造函数调用\"",[46,21319,3496],{"class":52},[46,21321,10844],{"class":56},[46,21323,21324],{"class":48,"line":729},[46,21325,4217],{"class":56},[46,21327,21328],{"class":48,"line":735},[46,21329,20875],{"class":2253},[46,21331,21332,21334,21336,21338,21340,21342,21344],{"class":48,"line":740},[46,21333,20520],{"class":169},[46,21335,1152],{"class":56},[46,21337,8805],{"class":52},[46,21339,17570],{"class":169},[46,21341,12588],{"class":52},[46,21343,19],{"class":439},[46,21345,459],{"class":56},[46,21347,21348],{"class":48,"line":745},[46,21349,4060],{"class":56},[46,21351,21352,21354,21356],{"class":48,"line":763},[46,21353,17744],{"class":56},[46,21355,79],{"class":52},[46,21357,21358],{"class":56}," p.m_Age;\n",[46,21360,21361,21363,21365,21368,21370],{"class":48,"line":778},[46,21362,11673],{"class":56},[46,21364,3228],{"class":52},[46,21366,21367],{"class":173}," \"Person的拷贝构造函数调用\"",[46,21369,3496],{"class":52},[46,21371,10844],{"class":56},[46,21373,21374],{"class":48,"line":789},[46,21375,4217],{"class":56},[46,21377,21378,21380],{"class":48,"line":794},[46,21379,20553],{"class":169},[46,21381,4006],{"class":56},[46,21383,21384],{"class":48,"line":806},[46,21385,4060],{"class":56},[46,21387,21388,21390,21392,21394,21396],{"class":48,"line":829},[46,21389,11673],{"class":56},[46,21391,3228],{"class":52},[46,21393,20568],{"class":173},[46,21395,3496],{"class":52},[46,21397,10844],{"class":56},[46,21399,21400],{"class":48,"line":840},[46,21401,4217],{"class":56},[46,21403,21404,21406],{"class":48,"line":846},[46,21405,4015],{"class":52},[46,21407,17667],{"class":56},[46,21409,21410],{"class":48,"line":852},[46,21411,6013],{"class":56},[46,21413,21414],{"class":48,"line":857},[46,21415,21228],{"class":2253},[46,21417,21418,21420,21422],{"class":48,"line":875},[46,21419,7377],{"class":52},[46,21421,7601],{"class":169},[46,21423,4006],{"class":56},[46,21425,21426],{"class":48,"line":892},[46,21427,3597],{"class":56},[46,21429,21430,21433,21435,21437,21439],{"class":48,"line":898},[46,21431,21432],{"class":56},"    Person ",[46,21434,9143],{"class":169},[46,21436,1152],{"class":56},[46,21438,2886],{"class":180},[46,21440,4740],{"class":56},[46,21442,21443,21445,21447],{"class":48,"line":903},[46,21444,21432],{"class":56},[46,21446,9046],{"class":169},[46,21448,19516],{"class":56},[46,21450,21451,21453,21455,21458,21460,21463,21465],{"class":48,"line":908},[46,21452,3602],{"class":56},[46,21454,3228],{"class":52},[46,21456,21457],{"class":173},"\"P2的年龄为：\"",[46,21459,3228],{"class":52},[46,21461,21462],{"class":56},"p2.m_Age",[46,21464,3228],{"class":52},[46,21466,3250],{"class":56},[46,21468,21469],{"class":48,"line":925},[46,21470,3616],{"class":56},[46,21472,21473],{"class":48,"line":1238},[46,21474,21475],{"class":2253},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[46,21477,21478],{"class":48,"line":1251},[46,21479,21480],{"class":2253},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[46,21482,21483,21485,21488,21490,21492,21494],{"class":48,"line":1256},[46,21484,7377],{"class":52},[46,21486,21487],{"class":169}," doWork",[46,21489,1152],{"class":56},[46,21491,21047],{"class":169},[46,21493,8838],{"class":439},[46,21495,459],{"class":56},[46,21497,21498],{"class":48,"line":1261},[46,21499,3597],{"class":56},[46,21501,21502,21504,21506,21509,21511],{"class":48,"line":1274},[46,21503,8542],{"class":56},[46,21505,3228],{"class":52},[46,21507,21508],{"class":173}," \"doWork函数调用\"",[46,21510,3496],{"class":52},[46,21512,10844],{"class":56},[46,21514,21515],{"class":48,"line":10061},[46,21516,3616],{"class":56},[46,21518,21519,21521,21523],{"class":48,"line":11720},[46,21520,7377],{"class":52},[46,21522,7670],{"class":169},[46,21524,4006],{"class":56},[46,21526,21527],{"class":48,"line":11745},[46,21528,3597],{"class":56},[46,21530,21531],{"class":48,"line":11768},[46,21532,17314],{"class":56},[46,21534,21535,21538],{"class":48,"line":11792},[46,21536,21537],{"class":169},"    doWork",[46,21539,21540],{"class":56},"(p);\n",[46,21542,21543],{"class":48,"line":11797},[46,21544,3616],{"class":56},[46,21546,21547],{"class":48,"line":11802},[46,21548,21549],{"class":2253},"\u002F\u002F 3.以值方式返回局部对象\n",[46,21551,21552,21554,21557],{"class":48,"line":11807},[46,21553,21047],{"class":169},[46,21555,21556],{"class":169}," doWork2",[46,21558,4006],{"class":56},[46,21560,21561],{"class":48,"line":11816},[46,21562,3597],{"class":56},[46,21564,21565],{"class":48,"line":11821},[46,21566,21037],{"class":56},[46,21568,21569,21571,21573,21575,21577,21579,21581,21583,21585,21587,21589],{"class":48,"line":11827},[46,21570,3602],{"class":56},[46,21572,3228],{"class":52},[46,21574,1152],{"class":56},[46,21576,2201],{"class":52},[46,21578,8531],{"class":52},[46,21580,2616],{"class":56},[46,21582,2540],{"class":52},[46,21584,9143],{"class":56},[46,21586,3228],{"class":52},[46,21588,3293],{"class":56},[46,21590,21591],{"class":2253},"\u002F\u002F打印p1的地址\n",[46,21593,21594,21596,21599],{"class":48,"line":11848},[46,21595,6108],{"class":52},[46,21597,21598],{"class":56}," p1;",[46,21600,21601],{"class":2253},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[46,21603,21604],{"class":48,"line":11854},[46,21605,3616],{"class":56},[46,21607,21608,21610,21612],{"class":48,"line":11868},[46,21609,7377],{"class":52},[46,21611,7742],{"class":169},[46,21613,4006],{"class":56},[46,21615,21616],{"class":48,"line":11874},[46,21617,3597],{"class":56},[46,21619,21620,21623,21625,21627],{"class":48,"line":11901},[46,21621,21622],{"class":56},"    Person p ",[46,21624,79],{"class":52},[46,21626,21556],{"class":169},[46,21628,7649],{"class":56},[46,21630,21631,21633,21635,21637,21639,21641,21643,21645,21647,21649,21651],{"class":48,"line":11910},[46,21632,3602],{"class":56},[46,21634,3228],{"class":52},[46,21636,1152],{"class":56},[46,21638,2201],{"class":52},[46,21640,8531],{"class":52},[46,21642,2616],{"class":56},[46,21644,2540],{"class":52},[46,21646,19],{"class":56},[46,21648,3228],{"class":52},[46,21650,3293],{"class":56},[46,21652,21653],{"class":2253},"\u002F\u002F打印p的地址\n",[46,21655,21656],{"class":48,"line":11916},[46,21657,3616],{"class":56},[46,21659,21660],{"class":48,"line":11924},[46,21661,616],{"emptyLinePlaceholder":615},[46,21663,21664],{"class":48,"line":11929},[46,21665,616],{"emptyLinePlaceholder":615},[46,21667,21668,21670,21672],{"class":48,"line":18605},[46,21669,2201],{"class":52},[46,21671,751],{"class":169},[46,21673,4006],{"class":56},[46,21675,21676],{"class":48,"line":18611},[46,21677,3597],{"class":56},[46,21679,21680],{"class":48,"line":18634},[46,21681,21682],{"class":2253},"    \u002F\u002F test01();\n",[46,21684,21685],{"class":48,"line":18640},[46,21686,21687],{"class":2253},"    \u002F\u002F test02();\n",[46,21689,21690,21693],{"class":48,"line":18663},[46,21691,21692],{"class":169},"    test03",[46,21694,7649],{"class":56},[46,21696,21697],{"class":48,"line":18677},[46,21698,21699],{"class":2253},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[46,21701,21702],{"class":48,"line":18697},[46,21703,21704],{"class":2253},"\u002F\u002F 输出结果如下：\n",[46,21706,21707],{"class":48,"line":18703},[46,21708,21709],{"class":2253},"\u002F\u002F Person的默认构造函数调用\n",[46,21711,21712],{"class":48,"line":18714},[46,21713,21714],{"class":2253},"\u002F\u002F 0x7fffffffceec\n",[46,21716,21717],{"class":48,"line":18737},[46,21718,21714],{"class":2253},[46,21720,21721],{"class":48,"line":18759},[46,21722,21723],{"class":2253},"\u002F\u002F Person的析构函数调用\n",[46,21725,21726],{"class":48,"line":18764},[46,21727,616],{"emptyLinePlaceholder":615},[46,21729,21730],{"class":48,"line":18770},[46,21731,21732],{"class":2253},"\u002F\u002F 之前的输出结果如下：\n",[46,21734,21735],{"class":48,"line":18784},[46,21736,21709],{"class":2253},[46,21738,21739],{"class":48,"line":18797},[46,21740,21741],{"class":2253},"\u002F\u002F 地址\n",[46,21743,21744],{"class":48,"line":18802},[46,21745,21746],{"class":2253},"\u002F\u002F Person的拷贝构造函数调用\n",[46,21748,21749],{"class":48,"line":18816},[46,21750,21723],{"class":2253},[46,21752,21753],{"class":48,"line":18821},[46,21754,21741],{"class":2253},[46,21756,21757],{"class":48,"line":18827},[46,21758,21759],{"class":2253},"\u002F\u002F (这两次输出的地址也是不同的) \n",[46,21761,21762],{"class":48,"line":18832},[46,21763,21764],{"class":2253},"\u002F\u002F Person的析构函数调用     \n",[46,21766,21767,21769,21771],{"class":48,"line":18846},[46,21768,6108],{"class":52},[46,21770,887],{"class":180},[46,21772,3345],{"class":56},[46,21774,21775],{"class":48,"line":18851},[46,21776,3616],{"class":56},[19,21778,21779],{},"简化版理解",[36,21781,21783],{"className":2187,"code":21782,"language":2189,"meta":41,"style":41},"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",[43,21784,21785,21793,21797,21803,21816,21827,21831,21843,21856,21864,21868,21884,21897,21906,21910,21915,21921,21934,21938,21942,21949,21953,21957,21962,21970,21974,21990,22003,22016,22020,22025,22033,22037,22041,22046,22051,22067,22075,22082,22088,22092,22096,22101,22109,22113,22117,22140,22147,22151,22155,22163,22167,22177,22199,22203,22207,22211,22219,22223,22228,22233,22239,22243,22253,22257,22265],{"__ignoreMap":41},[46,21786,21787,21789,21791],{"class":48,"line":49},[46,21788,16696],{"class":52},[46,21790,17570],{"class":169},[46,21792,17573],{"class":56},[46,21794,21795],{"class":48,"line":60},[46,21796,16718],{"class":52},[46,21798,21799,21801],{"class":48,"line":200},[46,21800,20520],{"class":169},[46,21802,12857],{"class":56},[46,21804,21805,21807,21809,21812,21814],{"class":48,"line":211},[46,21806,11673],{"class":56},[46,21808,3228],{"class":52},[46,21810,21811],{"class":173}," \"无参构造函数!\"",[46,21813,3496],{"class":52},[46,21815,10844],{"class":56},[46,21817,21818,21821,21823,21825],{"class":48,"line":222},[46,21819,21820],{"class":56},"        mAge ",[46,21822,79],{"class":52},[46,21824,887],{"class":180},[46,21826,3345],{"class":56},[46,21828,21829],{"class":48,"line":636},[46,21830,4217],{"class":56},[46,21832,21833,21835,21837,21839,21841],{"class":48,"line":641},[46,21834,20520],{"class":169},[46,21836,1152],{"class":56},[46,21838,2201],{"class":52},[46,21840,17690],{"class":439},[46,21842,14445],{"class":56},[46,21844,21845,21847,21849,21852,21854],{"class":48,"line":653},[46,21846,11673],{"class":56},[46,21848,3228],{"class":52},[46,21850,21851],{"class":173}," \"有参构造函数!\"",[46,21853,3496],{"class":52},[46,21855,10844],{"class":56},[46,21857,21858,21860,21862],{"class":48,"line":659},[46,21859,21820],{"class":56},[46,21861,79],{"class":52},[46,21863,9810],{"class":56},[46,21865,21866],{"class":48,"line":665},[46,21867,4217],{"class":56},[46,21869,21870,21872,21874,21876,21878,21880,21882],{"class":48,"line":670},[46,21871,20520],{"class":169},[46,21873,1152],{"class":56},[46,21875,8805],{"class":52},[46,21877,17570],{"class":169},[46,21879,2540],{"class":52},[46,21881,8838],{"class":439},[46,21883,14445],{"class":56},[46,21885,21886,21888,21890,21893,21895],{"class":48,"line":676},[46,21887,11673],{"class":56},[46,21889,3228],{"class":52},[46,21891,21892],{"class":173}," \"拷贝构造函数!\"",[46,21894,3496],{"class":52},[46,21896,10844],{"class":56},[46,21898,21899,21901,21903],{"class":48,"line":682},[46,21900,21820],{"class":56},[46,21902,79],{"class":52},[46,21904,21905],{"class":56}," p.mAge;\n",[46,21907,21908],{"class":48,"line":688},[46,21909,4217],{"class":56},[46,21911,21912],{"class":48,"line":693},[46,21913,21914],{"class":2253},"    \u002F\u002F析构函数在释放内存之前调用\n",[46,21916,21917,21919],{"class":48,"line":699},[46,21918,20553],{"class":169},[46,21920,12857],{"class":56},[46,21922,21923,21925,21927,21930,21932],{"class":48,"line":705},[46,21924,11673],{"class":56},[46,21926,3228],{"class":52},[46,21928,21929],{"class":173}," \"析构函数!\"",[46,21931,3496],{"class":52},[46,21933,10844],{"class":56},[46,21935,21936],{"class":48,"line":711},[46,21937,4217],{"class":56},[46,21939,21940],{"class":48,"line":717},[46,21941,16718],{"class":52},[46,21943,21944,21946],{"class":48,"line":723},[46,21945,4015],{"class":52},[46,21947,21948],{"class":56}," mAge;\n",[46,21950,21951],{"class":48,"line":729},[46,21952,6013],{"class":56},[46,21954,21955],{"class":48,"line":735},[46,21956,616],{"emptyLinePlaceholder":615},[46,21958,21959],{"class":48,"line":740},[46,21960,21961],{"class":2253},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[46,21963,21964,21966,21968],{"class":48,"line":745},[46,21965,7377],{"class":52},[46,21967,7601],{"class":169},[46,21969,12857],{"class":56},[46,21971,21972],{"class":48,"line":763},[46,21973,616],{"emptyLinePlaceholder":615},[46,21975,21976,21978,21981,21983,21985,21987],{"class":48,"line":778},[46,21977,21432],{"class":56},[46,21979,21980],{"class":169},"man",[46,21982,1152],{"class":56},[46,21984,1155],{"class":180},[46,21986,7979],{"class":56},[46,21988,21989],{"class":2253}," \u002F\u002Fp对象已经创建完毕\n",[46,21991,21992,21994,21997,22000],{"class":48,"line":789},[46,21993,21432],{"class":56},[46,21995,21996],{"class":169},"newman",[46,21998,21999],{"class":56},"(man);",[46,22001,22002],{"class":2253}," \u002F\u002F调用拷贝构造函数\n",[46,22004,22005,22008,22010,22013],{"class":48,"line":794},[46,22006,22007],{"class":56},"    Person newman2 ",[46,22009,79],{"class":52},[46,22011,22012],{"class":56}," man;",[46,22014,22015],{"class":2253}," \u002F\u002F拷贝构造\n",[46,22017,22018],{"class":48,"line":806},[46,22019,616],{"emptyLinePlaceholder":615},[46,22021,22022],{"class":48,"line":829},[46,22023,22024],{"class":2253},"    \u002F\u002FPerson newman3;\n",[46,22026,22027,22030],{"class":48,"line":840},[46,22028,22029],{"class":2253},"    \u002F\u002Fnewman3 = man;",[46,22031,22032],{"class":2253}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[46,22034,22035],{"class":48,"line":846},[46,22036,3616],{"class":56},[46,22038,22039],{"class":48,"line":852},[46,22040,616],{"emptyLinePlaceholder":615},[46,22042,22043],{"class":48,"line":857},[46,22044,22045],{"class":2253},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[46,22047,22048],{"class":48,"line":875},[46,22049,22050],{"class":2253},"\u002F\u002F相当于Person p1 = p;\n",[46,22052,22053,22055,22057,22059,22061,22064],{"class":48,"line":892},[46,22054,7377],{"class":52},[46,22056,21487],{"class":169},[46,22058,1152],{"class":56},[46,22060,21047],{"class":169},[46,22062,22063],{"class":439}," p1",[46,22065,22066],{"class":56},") {}\n",[46,22068,22069,22071,22073],{"class":48,"line":898},[46,22070,7377],{"class":52},[46,22072,7670],{"class":169},[46,22074,12857],{"class":56},[46,22076,22077,22079],{"class":48,"line":903},[46,22078,20605],{"class":56},[46,22080,22081],{"class":2253}," \u002F\u002F无参构造函数\n",[46,22083,22084,22086],{"class":48,"line":908},[46,22085,21537],{"class":169},[46,22087,21540],{"class":56},[46,22089,22090],{"class":48,"line":925},[46,22091,3616],{"class":56},[46,22093,22094],{"class":48,"line":1238},[46,22095,616],{"emptyLinePlaceholder":615},[46,22097,22098],{"class":48,"line":1251},[46,22099,22100],{"class":2253},"\u002F\u002F3. 以值方式返回局部对象\n",[46,22102,22103,22105,22107],{"class":48,"line":1256},[46,22104,21047],{"class":169},[46,22106,21556],{"class":169},[46,22108,4006],{"class":56},[46,22110,22111],{"class":48,"line":1261},[46,22112,3597],{"class":56},[46,22114,22115],{"class":48,"line":1274},[46,22116,21037],{"class":56},[46,22118,22119,22121,22123,22125,22127,22129,22131,22133,22136,22138],{"class":48,"line":10061},[46,22120,8542],{"class":56},[46,22122,3228],{"class":52},[46,22124,3702],{"class":56},[46,22126,2201],{"class":52},[46,22128,8531],{"class":52},[46,22130,2616],{"class":56},[46,22132,2540],{"class":52},[46,22134,22135],{"class":56},"p1 ",[46,22137,3228],{"class":52},[46,22139,10844],{"class":56},[46,22141,22142,22144],{"class":48,"line":11720},[46,22143,6108],{"class":52},[46,22145,22146],{"class":56}," p1;\n",[46,22148,22149],{"class":48,"line":11745},[46,22150,3616],{"class":56},[46,22152,22153],{"class":48,"line":11768},[46,22154,616],{"emptyLinePlaceholder":615},[46,22156,22157,22159,22161],{"class":48,"line":11792},[46,22158,7377],{"class":52},[46,22160,7742],{"class":169},[46,22162,4006],{"class":56},[46,22164,22165],{"class":48,"line":11797},[46,22166,3597],{"class":56},[46,22168,22169,22171,22173,22175],{"class":48,"line":11802},[46,22170,21622],{"class":56},[46,22172,79],{"class":52},[46,22174,21556],{"class":169},[46,22176,7649],{"class":56},[46,22178,22179,22181,22183,22185,22187,22189,22191,22193,22195,22197],{"class":48,"line":11807},[46,22180,8542],{"class":56},[46,22182,3228],{"class":52},[46,22184,3702],{"class":56},[46,22186,2201],{"class":52},[46,22188,8531],{"class":52},[46,22190,2616],{"class":56},[46,22192,2540],{"class":52},[46,22194,13452],{"class":56},[46,22196,3228],{"class":52},[46,22198,10844],{"class":56},[46,22200,22201],{"class":48,"line":11816},[46,22202,3616],{"class":56},[46,22204,22205],{"class":48,"line":11821},[46,22206,616],{"emptyLinePlaceholder":615},[46,22208,22209],{"class":48,"line":11827},[46,22210,616],{"emptyLinePlaceholder":615},[46,22212,22213,22215,22217],{"class":48,"line":11848},[46,22214,2201],{"class":52},[46,22216,751],{"class":169},[46,22218,12857],{"class":56},[46,22220,22221],{"class":48,"line":11854},[46,22222,616],{"emptyLinePlaceholder":615},[46,22224,22225],{"class":48,"line":11868},[46,22226,22227],{"class":2253},"    \u002F\u002Ftest01();\n",[46,22229,22230],{"class":48,"line":11874},[46,22231,22232],{"class":2253},"    \u002F\u002Ftest02();\n",[46,22234,22235,22237],{"class":48,"line":11901},[46,22236,21692],{"class":169},[46,22238,7649],{"class":56},[46,22240,22241],{"class":48,"line":11910},[46,22242,616],{"emptyLinePlaceholder":615},[46,22244,22245,22247,22249,22251],{"class":48,"line":11916},[46,22246,4332],{"class":169},[46,22248,1152],{"class":56},[46,22250,4337],{"class":173},[46,22252,4740],{"class":56},[46,22254,22255],{"class":48,"line":11924},[46,22256,616],{"emptyLinePlaceholder":615},[46,22258,22259,22261,22263],{"class":48,"line":11929},[46,22260,6108],{"class":52},[46,22262,887],{"class":180},[46,22264,3345],{"class":56},[46,22266,22267],{"class":48,"line":18605},[46,22268,3616],{"class":56},[479,22270,22272],{"id":22271},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[19,22274,22275],{},"默认情况下，c++编译器至少给一个类添加3个函数",[19,22277,22278],{},"1．默认构造函数(无参，函数体为空)",[19,22280,22281],{},"2．默认析构函数(无参，函数体为空)",[19,22283,22284],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[19,22286,22287],{},"构造函数调用规则如下：",[3191,22289,22290,22293],{},[26,22291,22292],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[26,22294,22295],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[36,22297,22299],{"className":2187,"code":22298,"language":2189,"meta":41,"style":41},"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",[43,22300,22301,22309,22313,22318,22324,22336,22340,22345,22357,22366,22378,22382,22386,22402,22411,22423,22427,22431,22437,22449,22453,22457,22463,22467,22471,22479,22483,22495,22500,22508,22512,22530,22534,22538,22546,22550,22555,22563,22578,22591,22595,22600,22607,22623,22636,22640,22644,22652,22656,22662,22666,22676,22680,22688],{"__ignoreMap":41},[46,22302,22303,22305,22307],{"class":48,"line":49},[46,22304,16696],{"class":52},[46,22306,17570],{"class":169},[46,22308,17573],{"class":56},[46,22310,22311],{"class":48,"line":60},[46,22312,16718],{"class":52},[46,22314,22315],{"class":48,"line":200},[46,22316,22317],{"class":2253},"    \u002F\u002F无参（默认）构造函数\n",[46,22319,22320,22322],{"class":48,"line":211},[46,22321,20520],{"class":169},[46,22323,12857],{"class":56},[46,22325,22326,22328,22330,22332,22334],{"class":48,"line":222},[46,22327,11673],{"class":56},[46,22329,3228],{"class":52},[46,22331,21811],{"class":173},[46,22333,3496],{"class":52},[46,22335,10844],{"class":56},[46,22337,22338],{"class":48,"line":636},[46,22339,4217],{"class":56},[46,22341,22342],{"class":48,"line":641},[46,22343,22344],{"class":2253},"    \u002F\u002F有参构造函数\n",[46,22346,22347,22349,22351,22353,22355],{"class":48,"line":653},[46,22348,20520],{"class":169},[46,22350,1152],{"class":56},[46,22352,2201],{"class":52},[46,22354,3450],{"class":439},[46,22356,14445],{"class":56},[46,22358,22359,22362,22364],{"class":48,"line":659},[46,22360,22361],{"class":56},"        age ",[46,22363,79],{"class":52},[46,22365,3484],{"class":56},[46,22367,22368,22370,22372,22374,22376],{"class":48,"line":665},[46,22369,11673],{"class":56},[46,22371,3228],{"class":52},[46,22373,21851],{"class":173},[46,22375,3496],{"class":52},[46,22377,10844],{"class":56},[46,22379,22380],{"class":48,"line":670},[46,22381,4217],{"class":56},[46,22383,22384],{"class":48,"line":676},[46,22385,20875],{"class":2253},[46,22387,22388,22390,22392,22394,22396,22398,22400],{"class":48,"line":682},[46,22389,20520],{"class":169},[46,22391,1152],{"class":56},[46,22393,8805],{"class":52},[46,22395,17570],{"class":169},[46,22397,2540],{"class":52},[46,22399,8838],{"class":439},[46,22401,14445],{"class":56},[46,22403,22404,22406,22408],{"class":48,"line":688},[46,22405,22361],{"class":56},[46,22407,79],{"class":52},[46,22409,22410],{"class":56}," p.age;\n",[46,22412,22413,22415,22417,22419,22421],{"class":48,"line":693},[46,22414,11673],{"class":56},[46,22416,3228],{"class":52},[46,22418,21892],{"class":173},[46,22420,3496],{"class":52},[46,22422,10844],{"class":56},[46,22424,22425],{"class":48,"line":699},[46,22426,4217],{"class":56},[46,22428,22429],{"class":48,"line":705},[46,22430,20548],{"class":2253},[46,22432,22433,22435],{"class":48,"line":711},[46,22434,20553],{"class":169},[46,22436,12857],{"class":56},[46,22438,22439,22441,22443,22445,22447],{"class":48,"line":717},[46,22440,11673],{"class":56},[46,22442,3228],{"class":52},[46,22444,21929],{"class":173},[46,22446,3496],{"class":52},[46,22448,10844],{"class":56},[46,22450,22451],{"class":48,"line":723},[46,22452,4217],{"class":56},[46,22454,22455],{"class":48,"line":729},[46,22456,16718],{"class":52},[46,22458,22459,22461],{"class":48,"line":735},[46,22460,4015],{"class":52},[46,22462,9810],{"class":56},[46,22464,22465],{"class":48,"line":740},[46,22466,6013],{"class":56},[46,22468,22469],{"class":48,"line":745},[46,22470,616],{"emptyLinePlaceholder":615},[46,22472,22473,22475,22477],{"class":48,"line":763},[46,22474,7377],{"class":52},[46,22476,7601],{"class":169},[46,22478,4006],{"class":56},[46,22480,22481],{"class":48,"line":778},[46,22482,3597],{"class":56},[46,22484,22485,22487,22489,22491,22493],{"class":48,"line":789},[46,22486,21432],{"class":56},[46,22488,9143],{"class":169},[46,22490,1152],{"class":56},[46,22492,2836],{"class":180},[46,22494,4740],{"class":56},[46,22496,22497],{"class":48,"line":794},[46,22498,22499],{"class":2253},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[46,22501,22502,22504,22506],{"class":48,"line":806},[46,22503,21432],{"class":56},[46,22505,9046],{"class":169},[46,22507,19516],{"class":56},[46,22509,22510],{"class":48,"line":829},[46,22511,616],{"emptyLinePlaceholder":615},[46,22513,22514,22516,22518,22521,22523,22526,22528],{"class":48,"line":840},[46,22515,8542],{"class":56},[46,22517,3228],{"class":52},[46,22519,22520],{"class":173}," \"p2的年龄为： \"",[46,22522,3496],{"class":52},[46,22524,22525],{"class":56}," p2.age ",[46,22527,3228],{"class":52},[46,22529,10844],{"class":56},[46,22531,22532],{"class":48,"line":846},[46,22533,3616],{"class":56},[46,22535,22536],{"class":48,"line":852},[46,22537,616],{"emptyLinePlaceholder":615},[46,22539,22540,22542,22544],{"class":48,"line":857},[46,22541,7377],{"class":52},[46,22543,7670],{"class":169},[46,22545,4006],{"class":56},[46,22547,22548],{"class":48,"line":875},[46,22549,3597],{"class":56},[46,22551,22552],{"class":48,"line":892},[46,22553,22554],{"class":2253},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[46,22556,22557,22560],{"class":48,"line":898},[46,22558,22559],{"class":56},"    Person p1;",[46,22561,22562],{"class":2253}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[46,22564,22565,22567,22569,22571,22573,22575],{"class":48,"line":903},[46,22566,21432],{"class":56},[46,22568,9046],{"class":169},[46,22570,1152],{"class":56},[46,22572,2633],{"class":180},[46,22574,7979],{"class":56},[46,22576,22577],{"class":2253}," \u002F\u002F用户提供的有参\n",[46,22579,22580,22582,22585,22588],{"class":48,"line":908},[46,22581,21432],{"class":56},[46,22583,22584],{"class":169},"p3",[46,22586,22587],{"class":56},"(p2);",[46,22589,22590],{"class":2253}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[46,22592,22593],{"class":48,"line":925},[46,22594,616],{"emptyLinePlaceholder":615},[46,22596,22597],{"class":48,"line":1238},[46,22598,22599],{"class":2253},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[46,22601,22602,22605],{"class":48,"line":1251},[46,22603,22604],{"class":56},"    Person p4;",[46,22606,22562],{"class":2253},[46,22608,22609,22611,22614,22616,22618,22620],{"class":48,"line":1256},[46,22610,21432],{"class":56},[46,22612,22613],{"class":169},"p5",[46,22615,1152],{"class":56},[46,22617,2633],{"class":180},[46,22619,7979],{"class":56},[46,22621,22622],{"class":2253}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[46,22624,22625,22627,22630,22633],{"class":48,"line":1261},[46,22626,21432],{"class":56},[46,22628,22629],{"class":169},"p6",[46,22631,22632],{"class":56},"(p5);",[46,22634,22635],{"class":2253}," \u002F\u002F用户自己提供拷贝构造\n",[46,22637,22638],{"class":48,"line":1274},[46,22639,3616],{"class":56},[46,22641,22642],{"class":48,"line":10061},[46,22643,616],{"emptyLinePlaceholder":615},[46,22645,22646,22648,22650],{"class":48,"line":11720},[46,22647,2201],{"class":52},[46,22649,751],{"class":169},[46,22651,12857],{"class":56},[46,22653,22654],{"class":48,"line":11745},[46,22655,616],{"emptyLinePlaceholder":615},[46,22657,22658,22660],{"class":48,"line":11768},[46,22659,7646],{"class":169},[46,22661,7649],{"class":56},[46,22663,22664],{"class":48,"line":11792},[46,22665,616],{"emptyLinePlaceholder":615},[46,22667,22668,22670,22672,22674],{"class":48,"line":11797},[46,22669,4332],{"class":169},[46,22671,1152],{"class":56},[46,22673,4337],{"class":173},[46,22675,4740],{"class":56},[46,22677,22678],{"class":48,"line":11802},[46,22679,616],{"emptyLinePlaceholder":615},[46,22681,22682,22684,22686],{"class":48,"line":11807},[46,22683,6108],{"class":52},[46,22685,887],{"class":180},[46,22687,3345],{"class":56},[46,22689,22690],{"class":48,"line":11816},[46,22691,3616],{"class":56},[479,22693,22695],{"id":22694},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[19,22697,22698],{},"浅拷贝：简单的赋值拷贝操作",[19,22700,22701],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[36,22703,22705],{"className":2187,"code":22704,"language":2189,"meta":41,"style":41},"#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",[43,22706,22707,22713,22723,22729,22733,22737,22742,22748,22752,22765,22769,22773,22780,22784,22794,22809,22822,22826,22831,22836,22852,22856,22869,22874,22879,22884,22893,22898,22913,22917,22921,22925,22931,22935,22940,22955,22959,22970,22984,22988,22997,23001,23007,23019,23023,23031,23035,23052,23083,23091,23119,23123,23127,23135,23139,23145],{"__ignoreMap":41},[46,22708,22709,22711],{"class":48,"line":49},[46,22710,3981],{"class":52},[46,22712,3984],{"class":173},[46,22714,22715,22717,22719,22721],{"class":48,"line":60},[46,22716,3989],{"class":52},[46,22718,3992],{"class":52},[46,22720,3995],{"class":169},[46,22722,3345],{"class":56},[46,22724,22725,22727],{"class":48,"line":200},[46,22726,16696],{"class":52},[46,22728,17172],{"class":169},[46,22730,22731],{"class":48,"line":211},[46,22732,3597],{"class":56},[46,22734,22735],{"class":48,"line":222},[46,22736,16718],{"class":52},[46,22738,22739],{"class":48,"line":636},[46,22740,22741],{"class":2253},"    \u002F\u002F默认构造函数\n",[46,22743,22744,22746],{"class":48,"line":641},[46,22745,20520],{"class":169},[46,22747,4006],{"class":56},[46,22749,22750],{"class":48,"line":653},[46,22751,4060],{"class":56},[46,22753,22754,22756,22758,22761,22763],{"class":48,"line":659},[46,22755,5470],{"class":56},[46,22757,3228],{"class":52},[46,22759,22760],{"class":173},"\"默认构造函数\"",[46,22762,3228],{"class":52},[46,22764,3250],{"class":56},[46,22766,22767],{"class":48,"line":665},[46,22768,4217],{"class":56},[46,22770,22771],{"class":48,"line":670},[46,22772,22344],{"class":2253},[46,22774,22775,22777],{"class":48,"line":676},[46,22776,20553],{"class":169},[46,22778,22779],{"class":56},"(int age,int height)\n",[46,22781,22782],{"class":48,"line":682},[46,22783,4060],{"class":56},[46,22785,22786,22789,22791],{"class":48,"line":688},[46,22787,22788],{"class":56},"        m_Age",[46,22790,79],{"class":52},[46,22792,22793],{"class":56},"age;\n",[46,22795,22796,22799,22801,22803,22806],{"class":48,"line":693},[46,22797,22798],{"class":56},"        m_Height",[46,22800,13721],{"class":52},[46,22802,4411],{"class":52},[46,22804,22805],{"class":56},"(height);",[46,22807,22808],{"class":2253},"\u002F\u002F放到堆区\n",[46,22810,22811,22813,22815,22818,22820],{"class":48,"line":699},[46,22812,5470],{"class":56},[46,22814,3228],{"class":52},[46,22816,22817],{"class":173},"\"有参构造函数\"",[46,22819,3228],{"class":52},[46,22821,3250],{"class":56},[46,22823,22824],{"class":48,"line":705},[46,22825,4217],{"class":56},[46,22827,22828],{"class":48,"line":711},[46,22829,22830],{"class":2253},"    \u002F\u002F深拷贝解决上述问题\n",[46,22832,22833],{"class":48,"line":717},[46,22834,22835],{"class":2253},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[46,22837,22838,22840,22842,22844,22846,22848,22850],{"class":48,"line":723},[46,22839,20520],{"class":169},[46,22841,1152],{"class":56},[46,22843,8805],{"class":52},[46,22845,17570],{"class":169},[46,22847,12588],{"class":52},[46,22849,19],{"class":439},[46,22851,459],{"class":56},[46,22853,22854],{"class":48,"line":729},[46,22855,4060],{"class":56},[46,22857,22858,22860,22862,22865,22867],{"class":48,"line":735},[46,22859,5470],{"class":56},[46,22861,3228],{"class":52},[46,22863,22864],{"class":173},"\"拷贝构造函数\"",[46,22866,3228],{"class":52},[46,22868,3250],{"class":56},[46,22870,22871],{"class":48,"line":740},[46,22872,22873],{"class":2253},"        \u002F\u002F编译器默认的写如下注释部分\n",[46,22875,22876],{"class":48,"line":745},[46,22877,22878],{"class":2253},"        \u002F\u002Fm_Age=p.m_Age;\n",[46,22880,22881],{"class":48,"line":763},[46,22882,22883],{"class":2253},"        \u002F\u002Fm_Height=p.m_Height;\n",[46,22885,22886,22888,22890],{"class":48,"line":778},[46,22887,22788],{"class":56},[46,22889,79],{"class":52},[46,22891,22892],{"class":56},"p.m_Age;\n",[46,22894,22895],{"class":48,"line":789},[46,22896,22897],{"class":2253},"        \u002F\u002F深拷贝操作\n",[46,22899,22900,22902,22904,22906,22908,22910],{"class":48,"line":794},[46,22901,22798],{"class":56},[46,22903,13721],{"class":52},[46,22905,4411],{"class":52},[46,22907,1152],{"class":56},[46,22909,2642],{"class":52},[46,22911,22912],{"class":56},"p.m_Height);\n",[46,22914,22915],{"class":48,"line":806},[46,22916,4217],{"class":56},[46,22918,22919],{"class":48,"line":829},[46,22920,616],{"emptyLinePlaceholder":615},[46,22922,22923],{"class":48,"line":840},[46,22924,20548],{"class":2253},[46,22926,22927,22929],{"class":48,"line":846},[46,22928,20553],{"class":169},[46,22930,4006],{"class":56},[46,22932,22933],{"class":48,"line":852},[46,22934,4060],{"class":56},[46,22936,22937],{"class":48,"line":857},[46,22938,22939],{"class":2253},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[46,22941,22942,22944,22947,22950,22953],{"class":48,"line":875},[46,22943,4525],{"class":52},[46,22945,22946],{"class":56},"(m_Height ",[46,22948,22949],{"class":52},"!=",[46,22951,22952],{"class":180}," NULL",[46,22954,459],{"class":56},[46,22956,22957],{"class":48,"line":892},[46,22958,4538],{"class":56},[46,22960,22961,22964,22967],{"class":48,"line":898},[46,22962,22963],{"class":52},"            delete",[46,22965,22966],{"class":56}," m_Height;",[46,22968,22969],{"class":2253}," \u002F\u002F释放堆区内存\n",[46,22971,22972,22975,22977,22979,22981],{"class":48,"line":903},[46,22973,22974],{"class":56},"            m_Height",[46,22976,79],{"class":52},[46,22978,4421],{"class":180},[46,22980,2250],{"class":56},[46,22982,22983],{"class":2253}," \u002F\u002F防止野指针\n",[46,22985,22986],{"class":48,"line":908},[46,22987,4557],{"class":56},[46,22989,22990,22992,22994],{"class":48,"line":925},[46,22991,5470],{"class":56},[46,22993,3228],{"class":52},[46,22995,22996],{"class":173},"\"Person的析构函数调用\"\n",[46,22998,22999],{"class":48,"line":1238},[46,23000,4217],{"class":56},[46,23002,23003,23005],{"class":48,"line":1251},[46,23004,4015],{"class":52},[46,23006,17667],{"class":56},[46,23008,23009,23011,23013,23016],{"class":48,"line":1256},[46,23010,4015],{"class":52},[46,23012,8531],{"class":52},[46,23014,23015],{"class":56},"m_Height;",[46,23017,23018],{"class":2253}," \u002F\u002F定义一个指针，指向身高\n",[46,23020,23021],{"class":48,"line":1261},[46,23022,6013],{"class":56},[46,23024,23025,23027,23029],{"class":48,"line":1274},[46,23026,7377],{"class":52},[46,23028,7601],{"class":169},[46,23030,4006],{"class":56},[46,23032,23033],{"class":48,"line":10061},[46,23034,3597],{"class":56},[46,23036,23037,23039,23041,23043,23045,23047,23050],{"class":48,"line":11720},[46,23038,21432],{"class":56},[46,23040,9143],{"class":169},[46,23042,1152],{"class":56},[46,23044,2836],{"class":180},[46,23046,2565],{"class":56},[46,23048,23049],{"class":180},"160",[46,23051,4740],{"class":56},[46,23053,23054,23056,23058,23061,23063,23066,23068,23071,23073,23076,23078,23080],{"class":48,"line":11745},[46,23055,3602],{"class":56},[46,23057,3228],{"class":52},[46,23059,23060],{"class":173},"\"p1的年龄为:\"",[46,23062,3228],{"class":52},[46,23064,23065],{"class":56},"p1.m_Age",[46,23067,3228],{"class":52},[46,23069,23070],{"class":173},"\"身高为：\"",[46,23072,8432],{"class":52},[46,23074,23075],{"class":56},"p1.m_Height",[46,23077,3228],{"class":52},[46,23079,3293],{"class":56},[46,23081,23082],{"class":2253},"  \u002F\u002F18\n",[46,23084,23085,23087,23089],{"class":48,"line":11768},[46,23086,21432],{"class":56},[46,23088,9046],{"class":169},[46,23090,19516],{"class":56},[46,23092,23093,23095,23097,23100,23102,23104,23106,23108,23110,23113,23115,23117],{"class":48,"line":11792},[46,23094,3602],{"class":56},[46,23096,3228],{"class":52},[46,23098,23099],{"class":173},"\"p2的年龄为：\"",[46,23101,3228],{"class":52},[46,23103,21462],{"class":56},[46,23105,3228],{"class":52},[46,23107,23070],{"class":173},[46,23109,8432],{"class":52},[46,23111,23112],{"class":56},"p2.m_Height",[46,23114,3228],{"class":52},[46,23116,3293],{"class":56},[46,23118,23082],{"class":2253},[46,23120,23121],{"class":48,"line":11797},[46,23122,15213],{"class":56},[46,23124,23125],{"class":48,"line":11802},[46,23126,3616],{"class":56},[46,23128,23129,23131,23133],{"class":48,"line":11807},[46,23130,2201],{"class":52},[46,23132,751],{"class":169},[46,23134,4006],{"class":56},[46,23136,23137],{"class":48,"line":11816},[46,23138,3597],{"class":56},[46,23140,23141,23143],{"class":48,"line":11821},[46,23142,7646],{"class":169},[46,23144,7649],{"class":56},[46,23146,23147],{"class":48,"line":11827},[46,23148,3616],{"class":56},[19,23150,23151],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[19,23153,23154],{},"浅拷贝带来的问题是堆区的内存重复释放",[19,23156,23157],{},[3514,23158],{"alt":41,"src":23159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[19,23161,23162],{},"浅拷贝问题要使用深拷贝来解决",[19,23164,23165],{},[3514,23166],{"alt":41,"src":23167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[19,23169,23170],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[479,23172,23174],{"id":23173},"_826初始化列表","8.2.6初始化列表",[19,23176,23177],{},"作用：初始化属性",[19,23179,7197],{},[36,23181,23184],{"className":23182,"code":23183,"language":571},[569],"构造函数():属性1(值1),属性2(值2).....{}\n",[43,23185,23183],{"__ignoreMap":41},[19,23187,23188],{},"例子",[36,23190,23192],{"className":2187,"code":23191,"language":2189,"meta":41,"style":41},"#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",[43,23193,23194,23200,23210,23216,23220,23225,23229,23234,23239,23244,23249,23254,23259,23263,23268,23273,23316,23325,23343,23361,23379,23383,23387,23394,23401,23408,23412,23416,23424,23428,23432,23452,23461,23465,23469,23479,23483,23491],{"__ignoreMap":41},[46,23195,23196,23198],{"class":48,"line":49},[46,23197,3981],{"class":52},[46,23199,3984],{"class":173},[46,23201,23202,23204,23206,23208],{"class":48,"line":60},[46,23203,3989],{"class":52},[46,23205,3992],{"class":52},[46,23207,3995],{"class":169},[46,23209,3345],{"class":56},[46,23211,23212,23214],{"class":48,"line":200},[46,23213,16696],{"class":52},[46,23215,17172],{"class":169},[46,23217,23218],{"class":48,"line":211},[46,23219,3597],{"class":56},[46,23221,23222],{"class":48,"line":222},[46,23223,23224],{"class":52},"    public:\n",[46,23226,23227],{"class":48,"line":636},[46,23228,616],{"emptyLinePlaceholder":615},[46,23230,23231],{"class":48,"line":641},[46,23232,23233],{"class":2253},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[46,23235,23236],{"class":48,"line":653},[46,23237,23238],{"class":2253},"    \u002F\u002FPerson(int a, int b, int c) {\n",[46,23240,23241],{"class":48,"line":659},[46,23242,23243],{"class":2253},"    \u002F\u002F  m_A = a;\n",[46,23245,23246],{"class":48,"line":665},[46,23247,23248],{"class":2253},"    \u002F\u002F  m_B = b;\n",[46,23250,23251],{"class":48,"line":670},[46,23252,23253],{"class":2253},"    \u002F\u002F  m_C = c;\n",[46,23255,23256],{"class":48,"line":676},[46,23257,23258],{"class":2253},"    \u002F\u002F}\n",[46,23260,23261],{"class":48,"line":682},[46,23262,616],{"emptyLinePlaceholder":615},[46,23264,23265],{"class":48,"line":688},[46,23266,23267],{"class":2253},"    \u002F\u002F初始化列表方式初始化\n",[46,23269,23270],{"class":48,"line":693},[46,23271,23272],{"class":2253},"    \u002F\u002F使用有参构造函数\n",[46,23274,23275,23277,23279,23281,23283,23285,23287,23289,23291,23293,23295,23298,23301,23304,23307,23310,23313],{"class":48,"line":699},[46,23276,20520],{"class":169},[46,23278,1152],{"class":56},[46,23280,2201],{"class":52},[46,23282,3450],{"class":439},[46,23284,448],{"class":56},[46,23286,2201],{"class":52},[46,23288,4854],{"class":439},[46,23290,448],{"class":56},[46,23292,2201],{"class":52},[46,23294,4870],{"class":439},[46,23296,23297],{"class":56},") :",[46,23299,23300],{"class":169},"m_A",[46,23302,23303],{"class":56},"(a), ",[46,23305,23306],{"class":169},"m_B",[46,23308,23309],{"class":56},"(b), ",[46,23311,23312],{"class":169},"m_C",[46,23314,23315],{"class":56},"(c) {}\n",[46,23317,23318,23320,23323],{"class":48,"line":705},[46,23319,16911],{"class":52},[46,23321,23322],{"class":169}," PrintPerson",[46,23324,12857],{"class":56},[46,23326,23327,23329,23331,23334,23336,23339,23341],{"class":48,"line":711},[46,23328,11673],{"class":56},[46,23330,3228],{"class":52},[46,23332,23333],{"class":173}," \"mA:\"",[46,23335,3496],{"class":52},[46,23337,23338],{"class":56}," m_A ",[46,23340,3228],{"class":52},[46,23342,10844],{"class":56},[46,23344,23345,23347,23349,23352,23354,23357,23359],{"class":48,"line":717},[46,23346,11673],{"class":56},[46,23348,3228],{"class":52},[46,23350,23351],{"class":173}," \"mB:\"",[46,23353,3496],{"class":52},[46,23355,23356],{"class":56}," m_B ",[46,23358,3228],{"class":52},[46,23360,10844],{"class":56},[46,23362,23363,23365,23367,23370,23372,23375,23377],{"class":48,"line":723},[46,23364,11673],{"class":56},[46,23366,3228],{"class":52},[46,23368,23369],{"class":173}," \"mC:\"",[46,23371,3496],{"class":52},[46,23373,23374],{"class":56}," m_C ",[46,23376,3228],{"class":52},[46,23378,10844],{"class":56},[46,23380,23381],{"class":48,"line":729},[46,23382,4217],{"class":56},[46,23384,23385],{"class":48,"line":735},[46,23386,17223],{"class":52},[46,23388,23389,23391],{"class":48,"line":740},[46,23390,4015],{"class":52},[46,23392,23393],{"class":56}," m_A;\n",[46,23395,23396,23398],{"class":48,"line":745},[46,23397,4015],{"class":52},[46,23399,23400],{"class":56}," m_B;\n",[46,23402,23403,23405],{"class":48,"line":763},[46,23404,4015],{"class":52},[46,23406,23407],{"class":56}," m_C;\n",[46,23409,23410],{"class":48,"line":778},[46,23411,6013],{"class":56},[46,23413,23414],{"class":48,"line":789},[46,23415,616],{"emptyLinePlaceholder":615},[46,23417,23418,23420,23422],{"class":48,"line":794},[46,23419,2201],{"class":52},[46,23421,751],{"class":169},[46,23423,7991],{"class":56},[46,23425,23426],{"class":48,"line":806},[46,23427,3597],{"class":56},[46,23429,23430],{"class":48,"line":829},[46,23431,616],{"emptyLinePlaceholder":615},[46,23433,23434,23436,23438,23440,23442,23444,23446,23448,23450],{"class":48,"line":840},[46,23435,21432],{"class":56},[46,23437,19],{"class":169},[46,23439,1152],{"class":56},[46,23441,2405],{"class":180},[46,23443,448],{"class":56},[46,23445,2272],{"class":180},[46,23447,448],{"class":56},[46,23449,2266],{"class":180},[46,23451,4740],{"class":56},[46,23453,23454,23456,23459],{"class":48,"line":846},[46,23455,17867],{"class":56},[46,23457,23458],{"class":169},"PrintPerson",[46,23460,7649],{"class":56},[46,23462,23463],{"class":48,"line":852},[46,23464,616],{"emptyLinePlaceholder":615},[46,23466,23467],{"class":48,"line":857},[46,23468,616],{"emptyLinePlaceholder":615},[46,23470,23471,23473,23475,23477],{"class":48,"line":875},[46,23472,4332],{"class":169},[46,23474,1152],{"class":56},[46,23476,4337],{"class":173},[46,23478,4740],{"class":56},[46,23480,23481],{"class":48,"line":892},[46,23482,616],{"emptyLinePlaceholder":615},[46,23484,23485,23487,23489],{"class":48,"line":898},[46,23486,6108],{"class":52},[46,23488,887],{"class":180},[46,23490,3345],{"class":56},[46,23492,23493],{"class":48,"line":903},[46,23494,3616],{"class":56},[19,23496,23497,23498,23501,23502],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[2339,23499,23500],{},"参数名就是定义的对象属性","，",[2339,23503,23504],{},"属性后面的值为有参构造函数的形参",[36,23506,23508],{"className":2187,"code":23507,"language":2189,"meta":41,"style":41},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[43,23509,23510],{"__ignoreMap":41},[46,23511,23512,23514,23516,23518,23521,23523,23526,23528,23531,23533,23536,23538,23541,23543],{"class":48,"line":49},[46,23513,21047],{"class":169},[46,23515,1152],{"class":56},[46,23517,2201],{"class":52},[46,23519,23520],{"class":56}," a.",[46,23522,2201],{"class":52},[46,23524,23525],{"class":56}," b,",[46,23527,2201],{"class":52},[46,23529,23530],{"class":56}," b):",[46,23532,23300],{"class":169},[46,23534,23535],{"class":56},"(a),",[46,23537,23306],{"class":169},[46,23539,23540],{"class":56},"(c),",[46,23542,23312],{"class":169},[46,23544,23545],{"class":56},"(b) {}\n",[479,23547,23549],{"id":23548},"_827类对象作为类成员","8.2.7类对象作为类成员",[19,23551,23552],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[19,23554,16635],{},[36,23556,23558],{"className":2187,"code":23557,"language":2189,"meta":41,"style":41},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[43,23559,23560,23565,23570,23574,23579,23583],{"__ignoreMap":41},[46,23561,23562],{"class":48,"line":49},[46,23563,23564],{"class":56},"A{};\n",[46,23566,23567],{"class":48,"line":60},[46,23568,23569],{"class":56},"B\n",[46,23571,23572],{"class":48,"line":200},[46,23573,3597],{"class":56},[46,23575,23576],{"class":48,"line":211},[46,23577,23578],{"class":56},"    A a;\n",[46,23580,23581],{"class":48,"line":222},[46,23582,3616],{"class":56},[46,23584,23585],{"class":48,"line":636},[46,23586,23587],{"class":2253},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[19,23589,23590],{},"案例",[36,23592,23594],{"className":2187,"code":23593,"language":2189,"meta":41,"style":41},"\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",[43,23595,23596,23601,23608,23612,23617,23622,23636,23640,23650,23661,23665,23672,23676,23689,23693,23698,23703,23707,23713,23717,23721,23725,23756,23760,23771,23775,23781,23785,23798,23802,23806,23810,23815,23820,23824,23832,23836,23853,23872,23876,23884,23888,23894],{"__ignoreMap":41},[46,23597,23598],{"class":48,"line":49},[46,23599,23600],{"class":2253},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[46,23602,23603,23605],{"class":48,"line":60},[46,23604,16696],{"class":52},[46,23606,23607],{"class":169}," Phone\n",[46,23609,23610],{"class":48,"line":200},[46,23611,3597],{"class":56},[46,23613,23614],{"class":48,"line":211},[46,23615,23616],{"class":56},"public：\n",[46,23618,23619],{"class":48,"line":222},[46,23620,23621],{"class":2253},"    \u002F\u002F 赋值(构造函数)\n",[46,23623,23624,23627,23629,23631,23634],{"class":48,"line":636},[46,23625,23626],{"class":169},"    Phone",[46,23628,1152],{"class":56},[46,23630,16919],{"class":169},[46,23632,23633],{"class":439}," pName",[46,23635,459],{"class":56},[46,23637,23638],{"class":48,"line":641},[46,23639,4060],{"class":56},[46,23641,23642,23645,23647],{"class":48,"line":653},[46,23643,23644],{"class":56},"        m_pName",[46,23646,79],{"class":52},[46,23648,23649],{"class":56},"pName;\n",[46,23651,23652,23654,23656,23659],{"class":48,"line":659},[46,23653,5470],{"class":56},[46,23655,3228],{"class":52},[46,23657,23658],{"class":173},"\"Phone的构造函数调用\"",[46,23660,3345],{"class":56},[46,23662,23663],{"class":48,"line":665},[46,23664,4217],{"class":56},[46,23666,23667,23670],{"class":48,"line":670},[46,23668,23669],{"class":169},"    ~Phone",[46,23671,4006],{"class":56},[46,23673,23674],{"class":48,"line":676},[46,23675,4060],{"class":56},[46,23677,23678,23680,23682,23685,23687],{"class":48,"line":682},[46,23679,5470],{"class":56},[46,23681,3228],{"class":52},[46,23683,23684],{"class":173},"\"Phone析构函数调用\"",[46,23686,3228],{"class":52},[46,23688,3250],{"class":56},[46,23690,23691],{"class":48,"line":688},[46,23692,4217],{"class":56},[46,23694,23695],{"class":48,"line":693},[46,23696,23697],{"class":2253},"    \u002F\u002F\n",[46,23699,23700],{"class":48,"line":699},[46,23701,23702],{"class":56},"    string m_PName;\n",[46,23704,23705],{"class":48,"line":705},[46,23706,6013],{"class":56},[46,23708,23709,23711],{"class":48,"line":711},[46,23710,16696],{"class":52},[46,23712,17172],{"class":169},[46,23714,23715],{"class":48,"line":717},[46,23716,3597],{"class":56},[46,23718,23719],{"class":48,"line":723},[46,23720,16718],{"class":52},[46,23722,23723],{"class":48,"line":729},[46,23724,18995],{"class":2253},[46,23726,23727,23729,23731,23733,23735,23737,23739,23742,23745,23747,23750,23753],{"class":48,"line":735},[46,23728,20520],{"class":169},[46,23730,1152],{"class":56},[46,23732,16919],{"class":169},[46,23734,1364],{"class":439},[46,23736,2565],{"class":56},[46,23738,16919],{"class":169},[46,23740,23741],{"class":439}," pname",[46,23743,23744],{"class":56},"):",[46,23746,17011],{"class":169},[46,23748,23749],{"class":56},"(name),m_phone.",[46,23751,23752],{"class":169},"m_PName",[46,23754,23755],{"class":56},"(pname) \n",[46,23757,23758],{"class":48,"line":740},[46,23759,4060],{"class":56},[46,23761,23762,23764,23766,23769],{"class":48,"line":745},[46,23763,5470],{"class":56},[46,23765,3228],{"class":52},[46,23767,23768],{"class":173},"\"Person的构造函数调用\"",[46,23770,3345],{"class":56},[46,23772,23773],{"class":48,"line":763},[46,23774,4217],{"class":56},[46,23776,23777,23779],{"class":48,"line":778},[46,23778,20553],{"class":169},[46,23780,4006],{"class":56},[46,23782,23783],{"class":48,"line":789},[46,23784,4060],{"class":56},[46,23786,23787,23789,23791,23794,23796],{"class":48,"line":794},[46,23788,5470],{"class":56},[46,23790,3228],{"class":52},[46,23792,23793],{"class":173},"\"Person析构函数调用\"",[46,23795,3228],{"class":52},[46,23797,3250],{"class":56},[46,23799,23800],{"class":48,"line":806},[46,23801,4217],{"class":56},[46,23803,23804],{"class":48,"line":829},[46,23805,9793],{"class":2253},[46,23807,23808],{"class":48,"line":840},[46,23809,16894],{"class":56},[46,23811,23812],{"class":48,"line":846},[46,23813,23814],{"class":2253},"    \u002F\u002F手机\n",[46,23816,23817],{"class":48,"line":852},[46,23818,23819],{"class":56},"    Phone m_Phone;\n",[46,23821,23822],{"class":48,"line":857},[46,23823,6013],{"class":56},[46,23825,23826,23828,23830],{"class":48,"line":875},[46,23827,7377],{"class":52},[46,23829,7601],{"class":169},[46,23831,4006],{"class":56},[46,23833,23834],{"class":48,"line":892},[46,23835,3597],{"class":56},[46,23837,23838,23840,23842,23844,23846,23848,23851],{"class":48,"line":898},[46,23839,21432],{"class":56},[46,23841,19],{"class":169},[46,23843,1152],{"class":56},[46,23845,9929],{"class":173},[46,23847,2565],{"class":56},[46,23849,23850],{"class":173},"\"安卓\"",[46,23852,4740],{"class":56},[46,23854,23855,23857,23859,23862,23864,23867,23869],{"class":48,"line":903},[46,23856,3602],{"class":56},[46,23858,3228],{"class":52},[46,23860,23861],{"class":56},"p.Name",[46,23863,3228],{"class":52},[46,23865,23866],{"class":173},"\"拿着：\"",[46,23868,3228],{"class":52},[46,23870,23871],{"class":56},"p.m_phone.m_PName;\n",[46,23873,23874],{"class":48,"line":908},[46,23875,3616],{"class":56},[46,23877,23878,23880,23882],{"class":48,"line":925},[46,23879,2201],{"class":52},[46,23881,751],{"class":169},[46,23883,4006],{"class":56},[46,23885,23886],{"class":48,"line":1238},[46,23887,3597],{"class":56},[46,23889,23890,23892],{"class":48,"line":1251},[46,23891,7646],{"class":169},[46,23893,7649],{"class":56},[46,23895,23896],{"class":48,"line":1256},[46,23897,3616],{"class":56},[19,23899,11029],{},[36,23901,23903],{"className":2187,"code":23902,"language":2189,"meta":41,"style":41},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[43,23904,23905,23910],{"__ignoreMap":41},[46,23906,23907],{"class":48,"line":49},[46,23908,23909],{"class":2253},"    \u002F\u002F不需要写这个：\n",[46,23911,23912],{"class":48,"line":60},[46,23913,23914],{"class":2253},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[19,23916,23917],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[36,23919,23921],{"className":2187,"code":23920,"language":2189,"meta":41,"style":41},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[43,23922,23923],{"__ignoreMap":41},[46,23924,23925,23927,23930,23932,23935,23938],{"class":48,"line":49},[46,23926,21047],{"class":169},[46,23928,23929],{"class":56},"(string name.string pname):",[46,23931,17011],{"class":169},[46,23933,23934],{"class":56},"(name),",[46,23936,23937],{"class":169},"m_phone",[46,23939,23940],{"class":56},"(pname) {}\n",[19,23942,23943,23944,79,23947],{},"采用的是隐式转换法，实际为如下：\n",[43,23945,23946],{},"m_phone(pname)",[43,23948,23949],{},"Phone m_phone=pname",[19,23951,23952,23955],{},[2339,23953,23954],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[19,23957,23958],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[479,23960,23962],{"id":23961},"_828静态对象","8.2.8静态对象",[19,23964,23965],{},"静态对象在成员对象前static，称为静态对象",[19,23967,23968],{},"静态对象分为两类：",[23,23970,23971],{},[26,23972,23973],{},"静态成员变量",[3191,23975,23976,23979,23982],{},[26,23977,23978],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[26,23980,23981],{},"②在编译阶段分配内存",[26,23983,23984],{},"③类内声明，类外初始化",[23,23986,23987],{"start":60},[26,23988,23989],{},"静态成员函数",[3191,23991,23992,23995],{},[26,23993,23994],{},"①所有对象共享同一个函数",[26,23996,23997],{},"②静态成员函数只能访问静态成员变量",[23999,24000,24002],"h4",{"id":24001},"_8281静态成员变量","8.2.8.1静态成员变量",[36,24004,24006],{"className":2187,"code":24005,"language":2189,"meta":41,"style":41},"#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",[43,24007,24008,24014,24024,24030,24034,24038,24043,24048,24053,24061,24065,24069,24073,24081,24085,24089,24094,24107,24111,24119,24123,24129],{"__ignoreMap":41},[46,24009,24010,24012],{"class":48,"line":49},[46,24011,3981],{"class":52},[46,24013,3984],{"class":173},[46,24015,24016,24018,24020,24022],{"class":48,"line":60},[46,24017,3989],{"class":52},[46,24019,3992],{"class":52},[46,24021,3995],{"class":169},[46,24023,3345],{"class":56},[46,24025,24026,24028],{"class":48,"line":200},[46,24027,16696],{"class":52},[46,24029,17172],{"class":169},[46,24031,24032],{"class":48,"line":211},[46,24033,3597],{"class":56},[46,24035,24036],{"class":48,"line":222},[46,24037,16718],{"class":52},[46,24039,24040],{"class":48,"line":636},[46,24041,24042],{"class":2253},"    \u002F\u002F非静态成员变量\n",[46,24044,24045],{"class":48,"line":641},[46,24046,24047],{"class":2253},"    \u002F\u002F int m_A;\n",[46,24049,24050],{"class":48,"line":653},[46,24051,24052],{"class":2253},"    \u002F\u002F定义静态成员变量\n",[46,24054,24055,24057,24059],{"class":48,"line":659},[46,24056,13024],{"class":52},[46,24058,4411],{"class":52},[46,24060,23393],{"class":56},[46,24062,24063],{"class":48,"line":665},[46,24064,616],{"emptyLinePlaceholder":615},[46,24066,24067],{"class":48,"line":670},[46,24068,616],{"emptyLinePlaceholder":615},[46,24070,24071],{"class":48,"line":676},[46,24072,6013],{"class":56},[46,24074,24075,24077,24079],{"class":48,"line":682},[46,24076,7377],{"class":52},[46,24078,7601],{"class":169},[46,24080,4006],{"class":56},[46,24082,24083],{"class":48,"line":688},[46,24084,3597],{"class":56},[46,24086,24087],{"class":48,"line":693},[46,24088,17314],{"class":56},[46,24090,24091],{"class":48,"line":699},[46,24092,24093],{"class":2253},"    \u002F\u002F输出类成员变量这块内存\n",[46,24095,24096,24098,24100,24103,24105],{"class":48,"line":705},[46,24097,3602],{"class":56},[46,24099,3228],{"class":52},[46,24101,24102],{"class":56},"p.m_A",[46,24104,3228],{"class":52},[46,24106,3250],{"class":56},[46,24108,24109],{"class":48,"line":711},[46,24110,3616],{"class":56},[46,24112,24113,24115,24117],{"class":48,"line":717},[46,24114,2201],{"class":52},[46,24116,751],{"class":169},[46,24118,4006],{"class":56},[46,24120,24121],{"class":48,"line":723},[46,24122,3597],{"class":56},[46,24124,24125,24127],{"class":48,"line":729},[46,24126,7646],{"class":169},[46,24128,4006],{"class":56},[46,24130,24131],{"class":48,"line":735},[46,24132,3616],{"class":56},[19,24134,24135],{},"此时输出是报错的：无法解析外部命令",[19,24137,24138],{},"解决这一问题：必须用到类内声明，类外初始化操作",[36,24140,24142],{"className":2187,"code":24141,"language":2189,"meta":41,"style":41},"#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",[43,24143,24144,24150,24160,24166,24170,24174,24179,24187,24191,24196,24211,24219,24223,24227,24232,24237,24249,24254,24265,24270,24275,24288,24292,24300,24304,24310],{"__ignoreMap":41},[46,24145,24146,24148],{"class":48,"line":49},[46,24147,3981],{"class":52},[46,24149,3984],{"class":173},[46,24151,24152,24154,24156,24158],{"class":48,"line":60},[46,24153,3989],{"class":52},[46,24155,3992],{"class":52},[46,24157,3995],{"class":169},[46,24159,3345],{"class":56},[46,24161,24162,24164],{"class":48,"line":200},[46,24163,16696],{"class":52},[46,24165,17172],{"class":169},[46,24167,24168],{"class":48,"line":211},[46,24169,3597],{"class":56},[46,24171,24172],{"class":48,"line":222},[46,24173,16718],{"class":52},[46,24175,24176],{"class":48,"line":636},[46,24177,24178],{"class":2253},"    \u002F\u002F类内声明\n",[46,24180,24181,24183,24185],{"class":48,"line":641},[46,24182,13024],{"class":52},[46,24184,4411],{"class":52},[46,24186,23393],{"class":56},[46,24188,24189],{"class":48,"line":653},[46,24190,6013],{"class":56},[46,24192,24193],{"class":48,"line":659},[46,24194,24195],{"class":2253},"\u002F\u002F类外初始化\n",[46,24197,24198,24200,24202,24205,24207,24209],{"class":48,"line":665},[46,24199,2201],{"class":52},[46,24201,17570],{"class":169},[46,24203,24204],{"class":56},"::m_A",[46,24206,79],{"class":52},[46,24208,2633],{"class":180},[46,24210,3345],{"class":56},[46,24212,24213,24215,24217],{"class":48,"line":670},[46,24214,7377],{"class":52},[46,24216,7601],{"class":169},[46,24218,4006],{"class":56},[46,24220,24221],{"class":48,"line":676},[46,24222,3597],{"class":56},[46,24224,24225],{"class":48,"line":682},[46,24226,17314],{"class":56},[46,24228,24229],{"class":48,"line":688},[46,24230,24231],{"class":2253},"    \u002F\u002F访问变量的原内存空间\n",[46,24233,24234],{"class":48,"line":693},[46,24235,24236],{"class":2253},"    \u002F\u002F100\n",[46,24238,24239,24241,24243,24245,24247],{"class":48,"line":699},[46,24240,3602],{"class":56},[46,24242,3228],{"class":52},[46,24244,24102],{"class":56},[46,24246,3228],{"class":52},[46,24248,3250],{"class":56},[46,24250,24251],{"class":48,"line":705},[46,24252,24253],{"class":56},"    Person p2;\n",[46,24255,24256,24259,24261,24263],{"class":48,"line":711},[46,24257,24258],{"class":56},"    p2.m_A",[46,24260,79],{"class":52},[46,24262,3762],{"class":180},[46,24264,3345],{"class":56},[46,24266,24267],{"class":48,"line":717},[46,24268,24269],{"class":2253},"    \u002F\u002F继续访问这片空间\n",[46,24271,24272],{"class":48,"line":723},[46,24273,24274],{"class":2253},"    \u002F\u002F200\n",[46,24276,24277,24279,24281,24284,24286],{"class":48,"line":729},[46,24278,3602],{"class":56},[46,24280,3228],{"class":52},[46,24282,24283],{"class":56},"p2.m_A",[46,24285,3228],{"class":52},[46,24287,3250],{"class":56},[46,24289,24290],{"class":48,"line":735},[46,24291,3616],{"class":56},[46,24293,24294,24296,24298],{"class":48,"line":740},[46,24295,2201],{"class":52},[46,24297,751],{"class":169},[46,24299,4006],{"class":56},[46,24301,24302],{"class":48,"line":745},[46,24303,3597],{"class":56},[46,24305,24306,24308],{"class":48,"line":763},[46,24307,7646],{"class":169},[46,24309,7649],{"class":56},[46,24311,24312],{"class":48,"line":778},[46,24313,3616],{"class":56},[19,24315,24316],{},[2339,24317,24318],{},"静态变量的访问",[36,24320,24322],{"className":2187,"code":24321,"language":2189,"meta":41,"style":41},"#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",[43,24323,24324,24330,24340,24346,24350,24354,24358,24366,24370,24375,24383,24387,24391,24405,24420,24428,24432,24437,24442,24447,24452,24464,24469,24474,24488,24505,24509,24517,24521,24527],{"__ignoreMap":41},[46,24325,24326,24328],{"class":48,"line":49},[46,24327,3981],{"class":52},[46,24329,3984],{"class":173},[46,24331,24332,24334,24336,24338],{"class":48,"line":60},[46,24333,3989],{"class":52},[46,24335,3992],{"class":52},[46,24337,3995],{"class":169},[46,24339,3345],{"class":56},[46,24341,24342,24344],{"class":48,"line":200},[46,24343,16696],{"class":52},[46,24345,17172],{"class":169},[46,24347,24348],{"class":48,"line":211},[46,24349,3597],{"class":56},[46,24351,24352],{"class":48,"line":222},[46,24353,16718],{"class":52},[46,24355,24356],{"class":48,"line":636},[46,24357,24178],{"class":2253},[46,24359,24360,24362,24364],{"class":48,"line":641},[46,24361,13024],{"class":52},[46,24363,4411],{"class":52},[46,24365,23393],{"class":56},[46,24367,24368],{"class":48,"line":653},[46,24369,17223],{"class":52},[46,24371,24372],{"class":48,"line":659},[46,24373,24374],{"class":2253},"    \u002F\u002F静态成员变量也是有访问权限的\n",[46,24376,24377,24379,24381],{"class":48,"line":665},[46,24378,13024],{"class":52},[46,24380,4411],{"class":52},[46,24382,23400],{"class":56},[46,24384,24385],{"class":48,"line":670},[46,24386,6013],{"class":56},[46,24388,24389],{"class":48,"line":676},[46,24390,24195],{"class":2253},[46,24392,24393,24395,24397,24399,24401,24403],{"class":48,"line":682},[46,24394,2201],{"class":52},[46,24396,17570],{"class":169},[46,24398,24204],{"class":56},[46,24400,79],{"class":52},[46,24402,2633],{"class":180},[46,24404,3345],{"class":56},[46,24406,24407,24409,24411,24414,24416,24418],{"class":48,"line":688},[46,24408,2201],{"class":52},[46,24410,17570],{"class":169},[46,24412,24413],{"class":56},"::m_B",[46,24415,79],{"class":52},[46,24417,2886],{"class":180},[46,24419,3345],{"class":56},[46,24421,24422,24424,24426],{"class":48,"line":693},[46,24423,7377],{"class":52},[46,24425,7670],{"class":169},[46,24427,4006],{"class":56},[46,24429,24430],{"class":48,"line":699},[46,24431,3597],{"class":56},[46,24433,24434],{"class":48,"line":705},[46,24435,24436],{"class":2253},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[46,24438,24439],{"class":48,"line":711},[46,24440,24441],{"class":2253},"    \u002F\u002F静态成员变量有两种访问方式：\n",[46,24443,24444],{"class":48,"line":717},[46,24445,24446],{"class":2253},"    \u002F\u002F1.通过对象进行访问\n",[46,24448,24449],{"class":48,"line":723},[46,24450,24451],{"class":56},"    Person p;  \n",[46,24453,24454,24456,24458,24460,24462],{"class":48,"line":729},[46,24455,3602],{"class":56},[46,24457,3228],{"class":52},[46,24459,24102],{"class":56},[46,24461,3228],{"class":52},[46,24463,3250],{"class":56},[46,24465,24466],{"class":48,"line":735},[46,24467,24468],{"class":2253},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[46,24470,24471],{"class":48,"line":740},[46,24472,24473],{"class":2253},"    \u002F\u002F2.通过类名进行访问\n",[46,24475,24476,24478,24480,24482,24484,24486],{"class":48,"line":745},[46,24477,3602],{"class":56},[46,24479,3228],{"class":52},[46,24481,21047],{"class":169},[46,24483,24204],{"class":56},[46,24485,3228],{"class":52},[46,24487,3250],{"class":56},[46,24489,24490,24492,24494,24496,24498,24500,24502],{"class":48,"line":763},[46,24491,3602],{"class":56},[46,24493,3228],{"class":52},[46,24495,21047],{"class":169},[46,24497,24413],{"class":56},[46,24499,3228],{"class":52},[46,24501,3293],{"class":56},[46,24503,24504],{"class":2253}," \u002F\u002F没有访问权限，报错\n",[46,24506,24507],{"class":48,"line":778},[46,24508,3616],{"class":56},[46,24510,24511,24513,24515],{"class":48,"line":789},[46,24512,2201],{"class":52},[46,24514,751],{"class":169},[46,24516,4006],{"class":56},[46,24518,24519],{"class":48,"line":794},[46,24520,3597],{"class":56},[46,24522,24523,24525],{"class":48,"line":806},[46,24524,7715],{"class":169},[46,24526,7649],{"class":56},[46,24528,24529],{"class":48,"line":829},[46,24530,3616],{"class":56},[23999,24532,24534],{"id":24533},"_8282静态成员函数","8.2.8.2静态成员函数",[19,24536,24537],{},"1.静态成员函数定义与访问",[36,24539,24541],{"className":2187,"code":24540,"language":2189,"meta":41,"style":41},"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",[43,24542,24543,24549,24553,24557,24562,24573,24577,24591,24595,24599,24607,24611,24616,24621,24625,24633,24638,24648],{"__ignoreMap":41},[46,24544,24545,24547],{"class":48,"line":49},[46,24546,16696],{"class":52},[46,24548,17172],{"class":169},[46,24550,24551],{"class":48,"line":60},[46,24552,3597],{"class":56},[46,24554,24555],{"class":48,"line":200},[46,24556,16718],{"class":52},[46,24558,24559],{"class":48,"line":211},[46,24560,24561],{"class":2253},"    \u002F\u002F在公共权限下定义静态成员函数\n",[46,24563,24564,24566,24569,24571],{"class":48,"line":222},[46,24565,13024],{"class":52},[46,24567,24568],{"class":52}," void",[46,24570,13389],{"class":169},[46,24572,4006],{"class":56},[46,24574,24575],{"class":48,"line":636},[46,24576,4060],{"class":56},[46,24578,24579,24582,24584,24587,24589],{"class":48,"line":641},[46,24580,24581],{"class":56},"        coout",[46,24583,3228],{"class":52},[46,24585,24586],{"class":173},"\"静态成员函数的调用\"",[46,24588,3228],{"class":52},[46,24590,3250],{"class":56},[46,24592,24593],{"class":48,"line":653},[46,24594,4217],{"class":56},[46,24596,24597],{"class":48,"line":659},[46,24598,6013],{"class":56},[46,24600,24601,24603,24605],{"class":48,"line":665},[46,24602,7377],{"class":52},[46,24604,7601],{"class":169},[46,24606,4006],{"class":56},[46,24608,24609],{"class":48,"line":670},[46,24610,3597],{"class":56},[46,24612,24613],{"class":48,"line":676},[46,24614,24615],{"class":2253},"    \u002F\u002F静态成员函数的调用方式:\n",[46,24617,24618],{"class":48,"line":682},[46,24619,24620],{"class":2253},"    \u002F\u002F1.通过对象访问\n",[46,24622,24623],{"class":48,"line":688},[46,24624,17314],{"class":56},[46,24626,24627,24629,24631],{"class":48,"line":693},[46,24628,17867],{"class":56},[46,24630,13555],{"class":169},[46,24632,7649],{"class":56},[46,24634,24635],{"class":48,"line":699},[46,24636,24637],{"class":2253},"    \u002F\u002F2.通过类名访问\n",[46,24639,24640,24642,24644,24646],{"class":48,"line":705},[46,24641,20520],{"class":169},[46,24643,19733],{"class":56},[46,24645,13555],{"class":169},[46,24647,7649],{"class":56},[46,24649,24650],{"class":48,"line":711},[46,24651,3616],{"class":56},[23,24653,24654],{"start":60},[26,24655,24656],{},"静态成员函数只能访问静态成员变量",[36,24658,24660],{"className":2187,"code":24659,"language":2189,"meta":41,"style":41},"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",[43,24661,24662,24668,24672,24676,24680,24690,24694,24708,24713,24725,24729,24740,24750,24754,24758,24762,24772,24776,24789,24793,24797,24801,24805,24819,24827,24831,24835,24839,24843,24851,24855,24865,24870,24874,24882,24886,24892],{"__ignoreMap":41},[46,24663,24664,24666],{"class":48,"line":49},[46,24665,16696],{"class":52},[46,24667,17172],{"class":169},[46,24669,24670],{"class":48,"line":60},[46,24671,3597],{"class":56},[46,24673,24674],{"class":48,"line":200},[46,24675,16718],{"class":52},[46,24677,24678],{"class":48,"line":211},[46,24679,24561],{"class":2253},[46,24681,24682,24684,24686,24688],{"class":48,"line":222},[46,24683,13024],{"class":52},[46,24685,24568],{"class":52},[46,24687,13389],{"class":169},[46,24689,4006],{"class":56},[46,24691,24692],{"class":48,"line":636},[46,24693,4060],{"class":56},[46,24695,24696,24699,24701,24703,24705],{"class":48,"line":641},[46,24697,24698],{"class":56},"        m_A",[46,24700,79],{"class":52},[46,24702,1155],{"class":180},[46,24704,2250],{"class":56},[46,24706,24707],{"class":2253}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[46,24709,24710],{"class":48,"line":653},[46,24711,24712],{"class":2253},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[46,24714,24715,24717,24719,24721,24723],{"class":48,"line":659},[46,24716,24581],{"class":56},[46,24718,3228],{"class":52},[46,24720,24586],{"class":173},[46,24722,3228],{"class":52},[46,24724,3250],{"class":56},[46,24726,24727],{"class":48,"line":665},[46,24728,4217],{"class":56},[46,24730,24731,24733,24735,24737],{"class":48,"line":670},[46,24732,13024],{"class":52},[46,24734,4411],{"class":52},[46,24736,17449],{"class":56},[46,24738,24739],{"class":2253}," \u002F\u002F静态成员变量\n",[46,24741,24742,24744,24747],{"class":48,"line":676},[46,24743,4015],{"class":52},[46,24745,24746],{"class":56}," m_B;",[46,24748,24749],{"class":2253}," \u002F\u002F非静态成员变量\n",[46,24751,24752],{"class":48,"line":682},[46,24753,616],{"emptyLinePlaceholder":615},[46,24755,24756],{"class":48,"line":688},[46,24757,17223],{"class":52},[46,24759,24760],{"class":48,"line":693},[46,24761,24374],{"class":2253},[46,24763,24764,24766,24768,24770],{"class":48,"line":699},[46,24765,13024],{"class":52},[46,24767,24568],{"class":52},[46,24769,15620],{"class":169},[46,24771,4006],{"class":56},[46,24773,24774],{"class":48,"line":705},[46,24775,4060],{"class":56},[46,24777,24778,24780,24782,24785,24787],{"class":48,"line":711},[46,24779,5470],{"class":56},[46,24781,3228],{"class":52},[46,24783,24784],{"class":173},"\"这是私有权限下的静态函数调用\"",[46,24786,3228],{"class":52},[46,24788,3250],{"class":56},[46,24790,24791],{"class":48,"line":717},[46,24792,4217],{"class":56},[46,24794,24795],{"class":48,"line":723},[46,24796,616],{"emptyLinePlaceholder":615},[46,24798,24799],{"class":48,"line":729},[46,24800,616],{"emptyLinePlaceholder":615},[46,24802,24803],{"class":48,"line":735},[46,24804,6013],{"class":56},[46,24806,24807,24809,24811,24813,24815,24817],{"class":48,"line":740},[46,24808,2201],{"class":52},[46,24810,17570],{"class":169},[46,24812,24204],{"class":56},[46,24814,79],{"class":52},[46,24816,2379],{"class":180},[46,24818,3345],{"class":56},[46,24820,24821,24823,24825],{"class":48,"line":745},[46,24822,7377],{"class":52},[46,24824,7601],{"class":169},[46,24826,4006],{"class":56},[46,24828,24829],{"class":48,"line":763},[46,24830,3597],{"class":56},[46,24832,24833],{"class":48,"line":778},[46,24834,24615],{"class":2253},[46,24836,24837],{"class":48,"line":789},[46,24838,24620],{"class":2253},[46,24840,24841],{"class":48,"line":794},[46,24842,17314],{"class":56},[46,24844,24845,24847,24849],{"class":48,"line":806},[46,24846,17867],{"class":56},[46,24848,13555],{"class":169},[46,24850,7649],{"class":56},[46,24852,24853],{"class":48,"line":829},[46,24854,24637],{"class":2253},[46,24856,24857,24859,24861,24863],{"class":48,"line":840},[46,24858,20520],{"class":169},[46,24860,19733],{"class":56},[46,24862,13555],{"class":169},[46,24864,7649],{"class":56},[46,24866,24867],{"class":48,"line":846},[46,24868,24869],{"class":2253},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[46,24871,24872],{"class":48,"line":852},[46,24873,3616],{"class":56},[46,24875,24876,24878,24880],{"class":48,"line":857},[46,24877,2201],{"class":52},[46,24879,751],{"class":169},[46,24881,4006],{"class":56},[46,24883,24884],{"class":48,"line":875},[46,24885,3597],{"class":56},[46,24887,24888,24890],{"class":48,"line":892},[46,24889,7646],{"class":169},[46,24891,7649],{"class":56},[46,24893,24894],{"class":48,"line":898},[46,24895,3616],{"class":56},[479,24897,24899],{"id":24898},"_83c对象模型和this指针","8.3C++对象模型和this指针",[23999,24901,24903],{"id":24902},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[19,24905,24906],{},"在c++中，类内的成员变量和成员函数分开存储",[19,24908,24909],{},"只有非静态成员变量才属于类的对象上",[24911,24912,24914],"h5",{"id":24913},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[36,24916,24918],{"className":2187,"code":24917,"language":2189,"meta":41,"style":41},"#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",[43,24919,24920,24927,24937,24943,24947,24951,24955,24963,24967,24971,24994,24998,25006,25010,25016],{"__ignoreMap":41},[46,24921,24922,24924],{"class":48,"line":49},[46,24923,3981],{"class":52},[46,24925,24926],{"class":173},"\u003Ciostraem>\n",[46,24928,24929,24931,24933,24935],{"class":48,"line":60},[46,24930,3989],{"class":52},[46,24932,3992],{"class":52},[46,24934,3995],{"class":169},[46,24936,3345],{"class":56},[46,24938,24939,24941],{"class":48,"line":200},[46,24940,16696],{"class":52},[46,24942,17172],{"class":169},[46,24944,24945],{"class":48,"line":211},[46,24946,3597],{"class":56},[46,24948,24949],{"class":48,"line":222},[46,24950,616],{"emptyLinePlaceholder":615},[46,24952,24953],{"class":48,"line":636},[46,24954,6013],{"class":56},[46,24956,24957,24959,24961],{"class":48,"line":641},[46,24958,7377],{"class":52},[46,24960,7601],{"class":169},[46,24962,4006],{"class":56},[46,24964,24965],{"class":48,"line":653},[46,24966,3597],{"class":56},[46,24968,24969],{"class":48,"line":659},[46,24970,17314],{"class":56},[46,24972,24973,24975,24977,24980,24982,24985,24987,24989,24991],{"class":48,"line":665},[46,24974,3602],{"class":56},[46,24976,3228],{"class":52},[46,24978,24979],{"class":173},"\"size of p=\"",[46,24981,3228],{"class":52},[46,24983,24984],{"class":169},"sizeoif",[46,24986,8552],{"class":56},[46,24988,3228],{"class":52},[46,24990,3293],{"class":56},[46,24992,24993],{"class":2253}," \u002F\u002F查看这个空类的占用的内存空间\n",[46,24995,24996],{"class":48,"line":670},[46,24997,3616],{"class":56},[46,24999,25000,25002,25004],{"class":48,"line":676},[46,25001,2201],{"class":52},[46,25003,751],{"class":169},[46,25005,4006],{"class":56},[46,25007,25008],{"class":48,"line":682},[46,25009,3597],{"class":56},[46,25011,25012,25014],{"class":48,"line":688},[46,25013,7646],{"class":169},[46,25015,7649],{"class":56},[46,25017,25018],{"class":48,"line":693},[46,25019,3616],{"class":56},[19,25021,25022],{},"输出结果为：size of p=1",[19,25024,25025],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[19,25027,25028],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[24911,25030,25032],{"id":25031},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[36,25034,25036],{"className":2187,"code":25035,"language":2189,"meta":41,"style":41},"#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",[43,25037,25038,25044,25054,25062,25066,25075,25079,25087,25091,25095,25114,25118,25122,25130,25134,25140],{"__ignoreMap":41},[46,25039,25040,25042],{"class":48,"line":49},[46,25041,3981],{"class":52},[46,25043,3984],{"class":173},[46,25045,25046,25048,25050,25052],{"class":48,"line":60},[46,25047,3989],{"class":52},[46,25049,3992],{"class":52},[46,25051,3995],{"class":169},[46,25053,3345],{"class":56},[46,25055,25056,25058,25060],{"class":48,"line":200},[46,25057,16696],{"class":52},[46,25059,17570],{"class":169},[46,25061,4695],{"class":56},[46,25063,25064],{"class":48,"line":211},[46,25065,3597],{"class":56},[46,25067,25068,25070,25072],{"class":48,"line":222},[46,25069,4015],{"class":52},[46,25071,17449],{"class":56},[46,25073,25074],{"class":2253},"\u002F\u002F非静态成员变量\n",[46,25076,25077],{"class":48,"line":636},[46,25078,6013],{"class":56},[46,25080,25081,25083,25085],{"class":48,"line":641},[46,25082,7377],{"class":52},[46,25084,7601],{"class":169},[46,25086,4006],{"class":56},[46,25088,25089],{"class":48,"line":653},[46,25090,3597],{"class":56},[46,25092,25093],{"class":48,"line":659},[46,25094,17314],{"class":56},[46,25096,25097,25099,25101,25103,25105,25107,25109,25111],{"class":48,"line":665},[46,25098,3602],{"class":56},[46,25100,3228],{"class":52},[46,25102,24979],{"class":173},[46,25104,3424],{"class":52},[46,25106,8552],{"class":56},[46,25108,3228],{"class":52},[46,25110,3293],{"class":56},[46,25112,25113],{"class":2253}," \u002F\u002F查看不是空对象时占用多少内存\n",[46,25115,25116],{"class":48,"line":670},[46,25117,616],{"emptyLinePlaceholder":615},[46,25119,25120],{"class":48,"line":676},[46,25121,3616],{"class":56},[46,25123,25124,25126,25128],{"class":48,"line":682},[46,25125,2201],{"class":52},[46,25127,751],{"class":169},[46,25129,4006],{"class":56},[46,25131,25132],{"class":48,"line":688},[46,25133,3597],{"class":56},[46,25135,25136,25138],{"class":48,"line":693},[46,25137,7646],{"class":169},[46,25139,7649],{"class":56},[46,25141,25142],{"class":48,"line":699},[46,25143,3616],{"class":56},[19,25145,25146],{},"输出结果：size of p=4",[19,25148,25149],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[23,25151,25152],{},[26,25153,25154],{},"如果加上非静态成员变量，Person类修改如下",[36,25156,25158],{"className":2187,"code":25157,"language":2189,"meta":41,"style":41},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[43,25159,25160,25166,25170,25176,25184,25188,25193],{"__ignoreMap":41},[46,25161,25162,25164],{"class":48,"line":49},[46,25163,16696],{"class":52},[46,25165,17172],{"class":169},[46,25167,25168],{"class":48,"line":60},[46,25169,3597],{"class":56},[46,25171,25172,25174],{"class":48,"line":200},[46,25173,4015],{"class":52},[46,25175,23393],{"class":56},[46,25177,25178,25180,25182],{"class":48,"line":211},[46,25179,13024],{"class":52},[46,25181,4411],{"class":52},[46,25183,23400],{"class":56},[46,25185,25186],{"class":48,"line":222},[46,25187,6013],{"class":56},[46,25189,25190],{"class":48,"line":636},[46,25191,25192],{"class":2253},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[46,25194,25195,25197,25199,25201,25203,25205],{"class":48,"line":641},[46,25196,2201],{"class":52},[46,25198,17570],{"class":169},[46,25200,24413],{"class":56},[46,25202,79],{"class":52},[46,25204,2379],{"class":180},[46,25206,3345],{"class":56},[19,25208,25209],{},"输出结果：4",[19,25211,25212],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[23,25214,25215],{"start":60},[26,25216,25217],{},"加上非静态成员函数",[36,25219,25221],{"className":2187,"code":25220,"language":2189,"meta":41,"style":41},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[43,25222,25223,25230,25234,25240,25248,25252,25256,25260],{"__ignoreMap":41},[46,25224,25225,25227],{"class":48,"line":49},[46,25226,16696],{"class":52},[46,25228,25229],{"class":169},"  Person\n",[46,25231,25232],{"class":48,"line":60},[46,25233,3597],{"class":56},[46,25235,25236,25238],{"class":48,"line":200},[46,25237,4015],{"class":52},[46,25239,23393],{"class":56},[46,25241,25242,25244,25246],{"class":48,"line":211},[46,25243,16911],{"class":52},[46,25245,13389],{"class":169},[46,25247,4006],{"class":56},[46,25249,25250],{"class":48,"line":222},[46,25251,4060],{"class":56},[46,25253,25254],{"class":48,"line":636},[46,25255,616],{"emptyLinePlaceholder":615},[46,25257,25258],{"class":48,"line":641},[46,25259,4217],{"class":56},[46,25261,25262],{"class":48,"line":653},[46,25263,6013],{"class":56},[19,25265,25266],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[23,25268,25269],{"start":200},[26,25270,25271],{},"加上静态成员函数",[36,25273,25275],{"className":2187,"code":25274,"language":2189,"meta":41,"style":41},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[43,25276,25277,25283,25287,25293,25301,25305,25309,25313,25324,25328,25332,25336],{"__ignoreMap":41},[46,25278,25279,25281],{"class":48,"line":49},[46,25280,16696],{"class":52},[46,25282,25229],{"class":169},[46,25284,25285],{"class":48,"line":60},[46,25286,3597],{"class":56},[46,25288,25289,25291],{"class":48,"line":200},[46,25290,4015],{"class":52},[46,25292,23393],{"class":56},[46,25294,25295,25297,25299],{"class":48,"line":211},[46,25296,16911],{"class":52},[46,25298,13389],{"class":169},[46,25300,4006],{"class":56},[46,25302,25303],{"class":48,"line":222},[46,25304,4060],{"class":56},[46,25306,25307],{"class":48,"line":636},[46,25308,616],{"emptyLinePlaceholder":615},[46,25310,25311],{"class":48,"line":641},[46,25312,4217],{"class":56},[46,25314,25315,25317,25319,25322],{"class":48,"line":653},[46,25316,13024],{"class":52},[46,25318,24568],{"class":52},[46,25320,25321],{"class":169}," func1",[46,25323,4006],{"class":56},[46,25325,25326],{"class":48,"line":659},[46,25327,4060],{"class":56},[46,25329,25330],{"class":48,"line":665},[46,25331,616],{"emptyLinePlaceholder":615},[46,25333,25334],{"class":48,"line":670},[46,25335,4217],{"class":56},[46,25337,25338],{"class":48,"line":676},[46,25339,6013],{"class":56},[19,25341,25209],{},[19,25343,25344],{},"解释：静态成员函数也不属于类上",[2098,25346,9687],{},{"title":41,"searchDepth":60,"depth":60,"links":25348},[25349,25355],{"id":16647,"depth":60,"text":16648,"children":25350},[25351,25352,25353,25354],{"id":16651,"depth":200,"text":16652},{"id":17375,"depth":200,"text":17376},{"id":17547,"depth":200,"text":17548},{"id":18006,"depth":200,"text":18007},{"id":20378,"depth":60,"text":20379,"children":25356},[25357,25358,25359,25360,25361,25362,25363,25364,25365],{"id":20390,"depth":200,"text":20391},{"id":20683,"depth":200,"text":20684},{"id":21174,"depth":200,"text":21175},{"id":22271,"depth":200,"text":22272},{"id":22694,"depth":200,"text":22695},{"id":23173,"depth":200,"text":23174},{"id":23548,"depth":200,"text":23549},{"id":23961,"depth":200,"text":23962},{"id":24898,"depth":200,"text":24899},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":16612,"description":25366},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":25373,"title":2189,"body":25374,"description":25378,"extension":2125,"meta":25379,"navigation":615,"path":25381,"seo":25382,"stem":25383,"__hash__":25384},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":25375,"toc":25376},[],{"title":41,"searchDepth":60,"depth":60,"links":25377},[],null,{"category":25380},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":2189,"description":25378},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":25386,"title":25387,"body":25388,"description":41,"extension":2125,"meta":25974,"navigation":615,"path":25975,"seo":25976,"stem":25977,"__hash__":25978},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":25389,"toc":25956},[25390,25393,25397,25400,25403,25406,25424,25429,25432,25435,25438,25441,25446,25449,25454,25457,25460,25464,25467,25470,25476,25479,25497,25501,25505,25508,25513,25516,25520,25523,25536,25539,25543,25546,25549,25552,25577,25580,25589,25600,25615,25647,25651,25658,25666,25670,25673,25676,25681,25685,25688,25691,25696,25699,25703,25706,25709,25714,25717,25721,25726,25730,25796,25800,25803,25806,25809,25812,25815,25821,25838,25841,25855,25864,25868,25871,25874,25879,25882,25887,25892,25895,25898,25903,25908,25911,25916,25921,25924,25929,25934,25937,25940,25945,25948,25953],[10,25391,25387],{"id":25392},"_1强化学习基本认识",[14,25394,25396],{"id":25395},"_11什么是强化学习","1.1.什么是强化学习",[19,25398,25399],{},"强化学习有两部分组成：智能体和环境；",[19,25401,25402],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[19,25404,25405],{},"强化学习与监督学习的区别:",[23,25407,25408,25411,25414,25417],{},[26,25409,25410],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[26,25412,25413],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[26,25415,25416],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[26,25418,25419,25420,25423],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[2339,25421,25422],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[19,25425,25426],{},[3514,25427],{"alt":41,"src":25428},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[19,25430,25431],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[19,25433,25434],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[19,25436,25437],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[19,25439,25440],{},"获取奖励",[19,25442,25443],{},[3514,25444],{"alt":41,"src":25445},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[19,25447,25448],{},"强化学习可以分成标准强化学习和深度强化学习",[19,25450,25451],{},[3514,25452],{"alt":41,"src":25453},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[19,25455,25456],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[19,25458,25459],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,25461,25463],{"id":25462},"_12强化学习应用场景","1.2.强化学习应用场景",[19,25465,25466],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[19,25468,25469],{},"具身智能中的应用",[19,25471,25472,25475],{},[2339,25473,25474],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[19,25477,25478],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[19,25480,25481,25482,25485,25486,25489,25490,25493,25494],{},"机器人是",[2339,25483,25484],{},"躯体","，深度学习是",[2339,25487,25488],{},"神经元****网络","，VLA是",[2339,25491,25492],{},"通用的行为逻辑","，而强化学习是",[2339,25495,25496],{},"教练",[14,25498,25500],{"id":25499},"_13序列决策","1.3.序列决策",[479,25502,25504],{"id":25503},"_131智能体与环境","1.3.1.智能体与环境",[19,25506,25507],{},"强化学习研究的问题是智能体agent与环境交互的问题",[19,25509,25510],{},[3514,25511],{"alt":41,"src":25512},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[19,25514,25515],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[479,25517,25519],{"id":25518},"_132奖励","1.3.2.奖励",[19,25521,25522],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[19,25524,25525,25526,25535],{},"取某个策略的表现如何。强化学习的目的就是",[2339,25527,25528,25529,25534],{},"最大化",[2339,25530,25531],{},[2339,25532,25533],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[19,25537,25538],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[479,25540,25542],{"id":25541},"_133序列决策","1.3.3.序列决策",[19,25544,25545],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[19,25547,25548],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[19,25550,25551],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[19,25553,25554,25558,25559,25561,25562,25564,25565,25567,25568,15797,25571,15797,25574],{},[25555,25556,25557],"em",{},"Ht"," = ",[25555,25560,2782],{},"1*, a",[25555,25563,2405],{},", r",[25555,25566,2405],{},", . . . ,* ",[25555,25569,25570],{},"ot",[25555,25572,25573],{},", at ,",[25555,25575,25576],{},"rt",[19,25578,25579],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[19,25581,25582,25558,25585,3702,25587,2616],{},[25555,25583,25584],{},"st",[25555,25586,2247],{},[25555,25588,25557],{},[19,25590,25591,25592,25595,25596,25599],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[2339,25593,25594],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[2339,25597,25598],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[19,25601,25602,25603,25606,25607,25610,25611,25614],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[2339,25604,25605],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[2339,25608,25609],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[25555,25612,25613],{},"S, A, T, R, Ω, O, γ",")。",[19,25616,25617,25618,25620,25621,25623,25624,1152,25626,25629,25630,25632,25633,1152,25636,25639,25640,25642,25643,25646],{},"其中 ",[25555,25619,2875],{}," 表示状态空间，为隐变量，",[25555,25622,2420],{}," 为动作空间，",[25555,25625,2900],{},[25555,25627,25628],{},"s ′ |s, a",") 为状态转移概率，",[25555,25631,2850],{}," 为奖励函数，",[25555,25634,25635],{},"Ω",[25555,25637,25638],{},"o|s, a",") 为观测概率，",[25555,25641,2776],{}," 为观测空间，",[25555,25644,25645],{},"γ"," 为折扣因子。",[14,25648,25650],{"id":25649},"_14动作空间","1.4.动作空间",[19,25652,25653,25654,25657],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[2339,25655,25656],{},"动作空间"," ，动作空间分为:",[23,25659,25660,25663],{},[26,25661,25662],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[26,25664,25665],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,25667,25669],{"id":25668},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[19,25671,25672],{},"由策略、价值函数、模型三部分组成",[19,25674,25675],{},"这三者组成马尔可夫决策过程",[19,25677,25678],{},[3514,25679],{"alt":41,"src":25680},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[479,25682,25684],{"id":25683},"_151策略","1.5.1.策略",[19,25686,25687],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[19,25689,25690],{},"策略可分为两种：",[19,25692,25693],{},[3514,25694],{"alt":41,"src":25695},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[19,25697,25698],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[479,25700,25702],{"id":25701},"_152价值函数","1.5.2.价值函数",[19,25704,25705],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[19,25707,25708],{},"价值函数中有一个折扣因子，类似于存款利息",[19,25710,25711],{},[3514,25712],{"alt":41,"src":25713},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[19,25715,25716],{},"进入某个状态采取的最优动作可以通过Q函数得到",[479,25718,25720],{"id":25719},"_153模型","1.5.3.模型",[19,25722,25723],{},[3514,25724],{"alt":41,"src":25725},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,25727,25729],{"id":25728},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[97,25731,25732,25742],{},[100,25733,25734],{},[103,25735,25736,25739],{},[106,25737,25738],{"align":108},"类型",[106,25740,25741],{"align":108},"特点",[120,25743,25744,25754,25764,25774,25786],{},[103,25745,25746,25751],{},[125,25747,25748],{"align":108},[2339,25749,25750],{},"基于价值的智能体",[125,25752,25753],{"align":108},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[103,25755,25756,25761],{},[125,25757,25758],{"align":108},[2339,25759,25760],{},"基于策略的智能体",[125,25762,25763],{"align":108},"直接学习策略，没有学习价值函数",[103,25765,25766,25771],{},[125,25767,25768],{"align":108},[2339,25769,25770],{},"演员-评论员智能体",[125,25772,25773],{"align":108},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[103,25775,25776,25781],{},[125,25777,25778],{"align":108},[2339,25779,25780],{},"有模型强化学习智能体",[125,25782,25783],{"align":108},[3514,25784],{"alt":41,"src":25785},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[103,25787,25788,25793],{},[125,25789,25790],{"align":108},[2339,25791,25792],{},"免模型强化学习智能体",[125,25794,25795],{"align":108},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,25797,25799],{"id":25798},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[19,25801,25802],{},"学习和规划是序列决策的两个基本问题",[19,25804,25805],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[19,25807,25808],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[19,25810,25811],{},"强化学习用到的库：Gym",[19,25813,25814],{},"Gym可以检验强化学习算法的优劣",[19,25816,25817,25820],{},[2339,25818,25819],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[36,25822,25824],{"className":160,"code":25823,"language":162,"meta":41,"style":41},"pip install gym==0.25.2\n",[43,25825,25826],{"__ignoreMap":41},[46,25827,25828,25830,25832,25835],{"class":48,"line":49},[46,25829,250],{"class":169},[46,25831,177],{"class":173},[46,25833,25834],{"class":173}," gym==",[46,25836,25837],{"class":180},"0.25.2\n",[19,25839,25840],{},"显示图形界面需要",[36,25842,25844],{"className":160,"code":25843,"language":162,"meta":41,"style":41},"pip install pygame\n",[43,25845,25846],{"__ignoreMap":41},[46,25847,25848,25850,25852],{"class":48,"line":49},[46,25849,250],{"class":169},[46,25851,177],{"class":173},[46,25853,25854],{"class":173}," pygame\n",[19,25856,25857,25858],{},"有关Gym库的相关文档介绍：",[2426,25859,25863],{"href":25860,"rel":25861},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[25862],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,25865,25867],{"id":25866},"_18一些补充基础概念","1.8.一些补充基础概念",[19,25869,25870],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[19,25872,25873],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[19,25875,25876],{},[3514,25877],{"alt":41,"src":25878},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[19,25880,25881],{},"折扣率需要自己来设定",[19,25883,25884],{},[3514,25885],{"alt":41,"src":25886},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[23,25888,25889],{},[26,25890,25891],{},"状态转移函数：",[19,25893,25894],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[19,25896,25897],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[19,25899,25900],{},[3514,25901],{"alt":41,"src":25902},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[23,25904,25905],{"start":60},[26,25906,25907],{},"动作价值函数：",[19,25909,25910],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[19,25912,25913],{},[3514,25914],{"alt":41,"src":25915},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[23,25917,25918],{"start":200},[26,25919,25920],{},"最优动作价值函数：",[19,25922,25923],{},"这个函数是对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,25925,25926],{},[3514,25927],{"alt":41,"src":25928},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[23,25930,25931],{"start":211},[26,25932,25933],{},"状态价值函数:",[19,25935,25936],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[19,25938,25939],{},"它衡量的是“一个具体动作”的长期价值",[19,25941,25942],{},[3514,25943],{"alt":41,"src":25944},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[19,25946,25947],{},"几个价值函数之间的比较：",[19,25949,25950],{},[3514,25951],{"alt":41,"src":25952},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[2098,25954,25955],{},"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":41,"searchDepth":60,"depth":60,"links":25957},[25958,25959,25960,25965,25966,25971,25972,25973],{"id":25395,"depth":60,"text":25396},{"id":25462,"depth":60,"text":25463},{"id":25499,"depth":60,"text":25500,"children":25961},[25962,25963,25964],{"id":25503,"depth":200,"text":25504},{"id":25518,"depth":200,"text":25519},{"id":25541,"depth":200,"text":25542},{"id":25649,"depth":60,"text":25650},{"id":25668,"depth":60,"text":25669,"children":25967},[25968,25969,25970],{"id":25683,"depth":200,"text":25684},{"id":25701,"depth":200,"text":25702},{"id":25719,"depth":200,"text":25720},{"id":25728,"depth":60,"text":25729},{"id":25798,"depth":60,"text":25799},{"id":25866,"depth":60,"text":25867},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":25387,"description":41},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":25980,"title":25981,"body":25982,"description":25989,"extension":2125,"meta":26000,"navigation":615,"path":26001,"seo":26002,"stem":26003,"__hash__":26004},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":25983,"toc":25998},[25984,25987,25990,25995],[10,25985,25981],{"id":25986},"_2马尔可夫决策过程",[19,25988,25989],{},"这是强化学习的基本框架",[19,25991,25992],{},[3514,25993],{"alt":41,"src":25994},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[19,25996,25997],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":41,"searchDepth":60,"depth":60,"links":25999},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":25981,"description":25989},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":26006,"title":26007,"body":26008,"description":41,"extension":2125,"meta":26124,"navigation":615,"path":26125,"seo":26126,"stem":26127,"__hash__":26128},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":26009,"toc":26119},[26010,26013,26017,26020,26025,26030,26033,26038,26041,26046,26049,26053,26058,26061,26066,26071,26076,26079,26083,26088,26091,26096,26101,26106,26111,26114],[10,26011,26007],{"id":26012},"_3动作价值函数",[14,26014,26016],{"id":26015},"_31dqn","3.1.DQN",[19,26018,26019],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[19,26021,26022],{},[3514,26023],{"alt":41,"src":26024},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[19,26026,26027],{},[3514,26028],{"alt":41,"src":26029},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[19,26031,26032],{},"DQN算法的描述：",[19,26034,26035],{},[3514,26036],{"alt":41,"src":26037},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[19,26039,26040],{},"这里的Dense指的是全连接层",[19,26042,26043],{},[3514,26044],{"alt":41,"src":26045},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[19,26047,26048],{},"当前观测的状态为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,26050,26052],{"id":26051},"_32dqn的举例","3.2.DQN的举例",[19,26054,26055],{},[3514,26056],{"alt":41,"src":26057},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[19,26059,26060],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[19,26062,26063],{},[3514,26064],{"alt":41,"src":26065},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[19,26067,26068],{},[3514,26069],{"alt":41,"src":26070},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[19,26072,26073],{},[3514,26074],{"alt":41,"src":26075},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[19,26077,26078],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,26080,26082],{"id":26081},"_33td算法","3.3.TD算法",[19,26084,26085],{},[3514,26086],{"alt":41,"src":26087},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[19,26089,26090],{},"强化学习TD算法公式的粗略解释：",[19,26092,26093],{},[3514,26094],{"alt":41,"src":26095},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[19,26097,26098],{},[3514,26099],{"alt":41,"src":26100},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[19,26102,26103],{},[3514,26104],{"alt":41,"src":26105},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[19,26107,26108],{},[3514,26109],{"alt":41,"src":26110},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[19,26112,26113],{},"TD算法总结：",[19,26115,26116],{},[3514,26117],{"alt":41,"src":26118},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":41,"searchDepth":60,"depth":60,"links":26120},[26121,26122,26123],{"id":26015,"depth":60,"text":26016},{"id":26051,"depth":60,"text":26052},{"id":26081,"depth":60,"text":26082},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":26007,"description":41},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":26130,"title":26131,"body":26132,"description":41,"extension":2125,"meta":26365,"navigation":615,"path":26366,"seo":26367,"stem":26368,"__hash__":26369},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":26133,"toc":26361},[26134,26137,26141,26144,26147,26152,26157,26160,26165,26170,26173,26178,26181,26186,26189,26194,26197,26202,26205,26210,26215,26218,26223,26226,26229,26234,26237,26242,26247,26251,26254,26257,26262,26267,26270,26275,26280,26283,26288,26291,26294,26299,26302,26307,26310,26315,26320,26323,26328,26333,26336,26341,26344,26349,26352],[10,26135,26131],{"id":26136},"_4策略学习",[14,26138,26140],{"id":26139},"_41概念描述","4.1.概念描述",[19,26142,26143],{},"用神经网络（策略网络）近似策略函数",[19,26145,26146],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[19,26148,26149],{},[3514,26150],{"alt":41,"src":26151},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[19,26153,26154],{},[3514,26155],{"alt":41,"src":26156},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[19,26158,26159],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[19,26161,26162],{},[3514,26163],{"alt":41,"src":26164},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[19,26166,26167],{},[3514,26168],{"alt":41,"src":26169},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[19,26171,26172],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[19,26174,26175],{},[3514,26176],{"alt":41,"src":26177},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[19,26179,26180],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[19,26182,26183],{},[3514,26184],{"alt":41,"src":26185},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[19,26187,26188],{},"改进theta要用到策略梯度算法",[19,26190,26191],{},[3514,26192],{"alt":41,"src":26193},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[19,26195,26196],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[19,26198,26199],{},[3514,26200],{"alt":41,"src":26201},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[19,26203,26204],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[19,26206,26207],{},[3514,26208],{"alt":41,"src":26209},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[19,26211,26212],{},[3514,26213],{"alt":41,"src":26214},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[19,26216,26217],{},"梯度公式总结：",[19,26219,26220],{},[3514,26221],{"alt":41,"src":26222},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[19,26224,26225],{},"两个公式的分别应用场景：",[19,26227,26228],{},"对于离散的动作：",[19,26230,26231],{},[3514,26232],{"alt":41,"src":26233},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[19,26235,26236],{},"对于连续的动作：",[19,26238,26239],{},[3514,26240],{"alt":41,"src":26241},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[19,26243,26244],{},[3514,26245],{"alt":41,"src":26246},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,26248,26250],{"id":26249},"_42概率梯度算法总结","4.2.概率梯度算法总结",[19,26252,26253],{},"使用蒙特卡洛来近似计算策略梯度",[19,26255,26256],{},"蒙特卡洛法的解释如下：",[19,26258,26259],{},[3514,26260],{"alt":41,"src":26261},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[19,26263,26264],{},[3514,26265],{"alt":41,"src":26266},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[19,26268,26269],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[23,26271,26272],{},[26,26273,26274],{},"方法一：reinforce算法",[19,26276,26277],{},[3514,26278],{"alt":41,"src":26279},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[19,26281,26282],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[23,26284,26285],{"start":60},[26,26286,26287],{},"方法二：actor-critic算法",[19,26289,26290],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[19,26292,26293],{},"两个网络的构建：",[19,26295,26296],{},[3514,26297],{"alt":41,"src":26298},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[19,26300,26301],{},"actor网路：",[19,26303,26304],{},[3514,26305],{"alt":41,"src":26306},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[19,26308,26309],{},"critic网络",[19,26311,26312],{},[3514,26313],{"alt":41,"src":26314},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[23,26316,26317],{"start":200},[26,26318,26319],{},"网络的训练",[19,26321,26322],{},"网络描述",[19,26324,26325],{},[3514,26326],{"alt":41,"src":26327},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[19,26329,26330],{},[3514,26331],{"alt":41,"src":26332},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[19,26334,26335],{},"TD算法更新梯度：",[19,26337,26338],{},[3514,26339],{"alt":41,"src":26340},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[19,26342,26343],{},"策略网络更新梯度：",[19,26345,26346],{},[3514,26347],{"alt":41,"src":26348},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[19,26350,26351],{},"训练整个流程的具体描述：",[19,26353,26354,26357,26358],{},[3514,26355],{"alt":41,"src":26356},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[3514,26359],{"alt":41,"src":26360},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":41,"searchDepth":60,"depth":60,"links":26362},[26363,26364],{"id":26139,"depth":60,"text":26140},{"id":26249,"depth":60,"text":26250},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":26131,"description":41},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":26371,"title":26372,"body":26373,"description":26380,"extension":2125,"meta":26430,"navigation":615,"path":26431,"seo":26432,"stem":26433,"__hash__":26434},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":26374,"toc":26426},[26375,26378,26381,26385,26388,26393,26397,26400,26405,26408,26413,26418,26421],[10,26376,26372],{"id":26377},"_5alphago算法",[19,26379,26380],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,26382,26384],{"id":26383},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[19,26386,26387],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[19,26389,26390],{},[3514,26391],{"alt":41,"src":26392},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,26394,26396],{"id":26395},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[19,26398,26399],{},"采用强化学习的方式训练策略网络",[19,26401,26402],{},[3514,26403],{"alt":41,"src":26404},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[19,26406,26407],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[19,26409,26410],{},[3514,26411],{"alt":41,"src":26412},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[19,26414,26415],{},[3514,26416],{"alt":41,"src":26417},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[19,26419,26420],{},"强化学习训练策略网络的总结：",[19,26422,26423],{},[3514,26424],{"alt":41,"src":26425},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":41,"searchDepth":60,"depth":60,"links":26427},[26428,26429],{"id":26383,"depth":60,"text":26384},{"id":26395,"depth":60,"text":26396},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":26372,"description":26380},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":26436,"title":26437,"body":26438,"description":26445,"extension":2125,"meta":26448,"navigation":615,"path":26449,"seo":26450,"stem":26451,"__hash__":26452},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":26439,"toc":26446},[26440,26443],[10,26441,26437],{"id":26442},"_6价值网络",[19,26444,26445],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":41,"searchDepth":60,"depth":60,"links":26447},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":26437,"description":26445},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":26454,"title":26455,"body":26456,"description":26460,"extension":2125,"meta":26461,"navigation":615,"path":26462,"seo":26463,"stem":26464,"__hash__":26465},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":26457,"toc":26458},[],{"title":41,"searchDepth":60,"depth":60,"links":26459},[],"记录自己的强化学习笔记。",{"category":25380},"\u002Fwiki\u002F2025-12-04",{"title":26455,"description":26460},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":26467,"title":26468,"body":26469,"description":25378,"extension":2125,"meta":26508,"navigation":615,"path":26509,"seo":26510,"stem":26511,"__hash__":26512},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":26470,"toc":26506},[26471,26474,26477,26483,26486,26492,26495,26500,26503],[10,26472,26468],{"id":26473},"_1-项目概览与官方资源",[19,26475,26476],{},"官方文档：",[19,26478,26479],{},[2426,26480,26481],{"href":26481,"rel":26482},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[25862],[19,26484,26485],{},"官方代码仓库：",[19,26487,26488],{},[2426,26489,26490],{"href":26490,"rel":26491},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[25862],[19,26493,26494],{},"复现大体流程：",[19,26496,26497],{},[3514,26498],{"alt":41,"src":26499},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[19,26501,26502],{},"本教程的目标是打通这条链路：",[19,26504,26505],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":41,"searchDepth":60,"depth":60,"links":26507},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":26468,"description":25378},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":26514,"title":26515,"body":26516,"description":25378,"extension":2125,"meta":26631,"navigation":615,"path":26632,"seo":26633,"stem":26634,"__hash__":26635},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":26517,"toc":26626},[26518,26521,26525,26528,26535,26539,26542,26551,26561,26565,26594,26597,26623],[10,26519,26515],{"id":26520},"_2-环境准备与设备连接",[14,26522,26524],{"id":26523},"_21-系统与环境","2.1 系统与环境",[19,26526,26527],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[19,26529,26530,26531,26534],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[43,26532,26533],{},"lerobot"," 依赖。",[14,26536,26538],{"id":26537},"_22-机械臂串口识别","2.2 机械臂串口识别",[19,26540,26541],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[36,26543,26545],{"className":160,"code":26544,"language":162,"meta":41,"style":41},"lerobot-find-out\n",[43,26546,26547],{"__ignoreMap":41},[46,26548,26549],{"class":48,"line":49},[46,26550,26544],{"class":169},[19,26552,26553,26554,2400,26557,26560],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[43,26555,26556],{},"\u002Fdev\u002FttyACM0",[43,26558,26559],{},"\u002Fdev\u002FttyACM1","）。",[14,26562,26564],{"id":26563},"_23-串口授权","2.3 串口授权",[36,26566,26568],{"className":160,"code":26567,"language":162,"meta":41,"style":41},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[43,26569,26570,26583],{"__ignoreMap":41},[46,26571,26572,26574,26577,26580],{"class":48,"line":49},[46,26573,170],{"class":169},[46,26575,26576],{"class":173}," chmod",[46,26578,26579],{"class":180}," 666",[46,26581,26582],{"class":173}," \u002Fdev\u002FttyACM0\n",[46,26584,26585,26587,26589,26591],{"class":48,"line":60},[46,26586,170],{"class":169},[46,26588,26576],{"class":173},[46,26590,26579],{"class":180},[46,26592,26593],{"class":173}," \u002Fdev\u002FttyACM1\n",[19,26595,26596],{},"说明：",[3191,26598,26599,26604,26610,26620],{},[26,26600,26601,26603],{},[43,26602,170],{},"：以 root 权限执行命令。",[26,26605,26606,26609],{},[43,26607,26608],{},"chmod","：修改设备节点权限。",[26,26611,26612,26615,26616,26619],{},[43,26613,26614],{},"666","：",[43,26617,26618],{},"rw-rw-rw-","，所有用户可读写。",[26,26621,26622],{},"串口号必须替换为你机器上的真实端口。",[2098,26624,26625],{},"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":41,"searchDepth":60,"depth":60,"links":26627},[26628,26629,26630],{"id":26523,"depth":60,"text":26524},{"id":26537,"depth":60,"text":26538},{"id":26563,"depth":60,"text":26564},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":26515,"description":25378},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":26637,"title":26638,"body":26639,"description":25378,"extension":2125,"meta":26799,"navigation":615,"path":26800,"seo":26801,"stem":26802,"__hash__":26803},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":26640,"toc":26795},[26641,26645,26649,26655,26658,26714,26717,26721,26724,26792],[10,26642,26644],{"id":26643},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,26646,26648],{"id":26647},"_31-配置电机-id","3.1 配置电机 ID",[19,26650,26651,26652,26654],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[43,26653,2405],{},"，需要改成机械臂链路里不冲突的编号。",[19,26656,26657],{},"方式一：用 LeRobot 命令逐步写入。",[36,26659,26661],{"className":160,"code":26660,"language":162,"meta":41,"style":41},"# 主臂舵机配置 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",[43,26662,26663,26668,26675,26682,26687,26691,26696,26702,26709],{"__ignoreMap":41},[46,26664,26665],{"class":48,"line":49},[46,26666,26667],{"class":2253},"# 主臂舵机配置 ID\n",[46,26669,26670,26673],{"class":48,"line":60},[46,26671,26672],{"class":169},"lerobot-setup-motors",[46,26674,184],{"class":180},[46,26676,26677,26680],{"class":48,"line":200},[46,26678,26679],{"class":180},"  --teleop.type=so101_leader",[46,26681,184],{"class":180},[46,26683,26684],{"class":48,"line":211},[46,26685,26686],{"class":180},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[46,26688,26689],{"class":48,"line":222},[46,26690,616],{"emptyLinePlaceholder":615},[46,26692,26693],{"class":48,"line":636},[46,26694,26695],{"class":2253},"# 从臂舵机配置 ID\n",[46,26697,26698,26700],{"class":48,"line":641},[46,26699,26672],{"class":169},[46,26701,184],{"class":180},[46,26703,26704,26707],{"class":48,"line":653},[46,26705,26706],{"class":180},"  --robot.type=so101_follower",[46,26708,184],{"class":180},[46,26710,26711],{"class":48,"line":659},[46,26712,26713],{"class":180},"  --robot.port=\u002Fdev\u002FttyACM1\n",[19,26715,26716],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,26718,26720],{"id":26719},"_32-机械臂校准","3.2 机械臂校准",[19,26722,26723],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[36,26725,26727],{"className":160,"code":26726,"language":162,"meta":41,"style":41},"# 主臂校准\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",[43,26728,26729,26734,26741,26747,26754,26759,26763,26768,26774,26780,26787],{"__ignoreMap":41},[46,26730,26731],{"class":48,"line":49},[46,26732,26733],{"class":2253},"# 主臂校准\n",[46,26735,26736,26739],{"class":48,"line":60},[46,26737,26738],{"class":169},"lerobot-calibrate",[46,26740,184],{"class":180},[46,26742,26743,26745],{"class":48,"line":200},[46,26744,26679],{"class":180},[46,26746,184],{"class":180},[46,26748,26749,26752],{"class":48,"line":211},[46,26750,26751],{"class":180},"  --teleop.port=\u002Fdev\u002FttyACM0",[46,26753,184],{"class":180},[46,26755,26756],{"class":48,"line":222},[46,26757,26758],{"class":180},"  --teleop.id=my_awesome_leader_arm\n",[46,26760,26761],{"class":48,"line":636},[46,26762,616],{"emptyLinePlaceholder":615},[46,26764,26765],{"class":48,"line":641},[46,26766,26767],{"class":2253},"# 从臂校准\n",[46,26769,26770,26772],{"class":48,"line":653},[46,26771,26738],{"class":169},[46,26773,184],{"class":180},[46,26775,26776,26778],{"class":48,"line":659},[46,26777,26706],{"class":180},[46,26779,184],{"class":180},[46,26781,26782,26785],{"class":48,"line":665},[46,26783,26784],{"class":180},"  --robot.port=\u002Fdev\u002FttyACM1",[46,26786,184],{"class":180},[46,26788,26789],{"class":48,"line":670},[46,26790,26791],{"class":180},"  --robot.id=my_awesome_follower_arm\n",[2098,26793,26794],{},"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":41,"searchDepth":60,"depth":60,"links":26796},[26797,26798],{"id":26647,"depth":60,"text":26648},{"id":26719,"depth":60,"text":26720},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":26638,"description":25378},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":26805,"title":26806,"body":26807,"description":25378,"extension":2125,"meta":26996,"navigation":615,"path":26997,"seo":26998,"stem":26999,"__hash__":27000},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":26808,"toc":26992},[26809,26812,26816,26863,26867,26880,26943,26946,26989],[10,26810,26806],{"id":26811},"_4-遥操与相机接入",[14,26813,26815],{"id":26814},"_41-不带相机遥操","4.1 不带相机遥操",[36,26817,26819],{"className":160,"code":26818,"language":162,"meta":41,"style":41},"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",[43,26820,26821,26828,26834,26840,26847,26853,26859],{"__ignoreMap":41},[46,26822,26823,26826],{"class":48,"line":49},[46,26824,26825],{"class":169},"lerobot-teleoperate",[46,26827,184],{"class":180},[46,26829,26830,26832],{"class":48,"line":60},[46,26831,26706],{"class":180},[46,26833,184],{"class":180},[46,26835,26836,26838],{"class":48,"line":200},[46,26837,26784],{"class":180},[46,26839,184],{"class":180},[46,26841,26842,26845],{"class":48,"line":211},[46,26843,26844],{"class":180},"  --robot.id=my_awesome_follower_arm",[46,26846,184],{"class":180},[46,26848,26849,26851],{"class":48,"line":222},[46,26850,26679],{"class":180},[46,26852,184],{"class":180},[46,26854,26855,26857],{"class":48,"line":636},[46,26856,26751],{"class":180},[46,26858,184],{"class":180},[46,26860,26861],{"class":48,"line":641},[46,26862,26758],{"class":180},[14,26864,26866],{"id":26865},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[36,26868,26870],{"className":160,"code":26869,"language":162,"meta":41,"style":41},"lerobot-find-cameras opencv\n",[43,26871,26872],{"__ignoreMap":41},[46,26873,26874,26877],{"class":48,"line":49},[46,26875,26876],{"class":169},"lerobot-find-cameras",[46,26878,26879],{"class":173}," opencv\n",[36,26881,26883],{"className":160,"code":26882,"language":162,"meta":41,"style":41},"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",[43,26884,26885,26891,26897,26903,26909,26919,26925,26931,26938],{"__ignoreMap":41},[46,26886,26887,26889],{"class":48,"line":49},[46,26888,26825],{"class":169},[46,26890,184],{"class":180},[46,26892,26893,26895],{"class":48,"line":60},[46,26894,26706],{"class":180},[46,26896,184],{"class":180},[46,26898,26899,26901],{"class":48,"line":200},[46,26900,26784],{"class":180},[46,26902,184],{"class":180},[46,26904,26905,26907],{"class":48,"line":211},[46,26906,26844],{"class":180},[46,26908,184],{"class":180},[46,26910,26911,26914,26917],{"class":48,"line":222},[46,26912,26913],{"class":180},"  --robot.cameras=",[46,26915,26916],{"class":173},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[46,26918,184],{"class":180},[46,26920,26921,26923],{"class":48,"line":636},[46,26922,26679],{"class":180},[46,26924,184],{"class":180},[46,26926,26927,26929],{"class":48,"line":641},[46,26928,26751],{"class":180},[46,26930,184],{"class":180},[46,26932,26933,26936],{"class":48,"line":653},[46,26934,26935],{"class":180},"  --teleop.id=my_awesome_leader_arm",[46,26937,184],{"class":180},[46,26939,26940],{"class":48,"line":659},[46,26941,26942],{"class":180},"  --display_data=true\n",[19,26944,26945],{},"相机参数说明：",[3191,26947,26948,26954,26960,26969,26977,26983],{},[26,26949,26950,26953],{},[43,26951,26952],{},"front","：相机名称。",[26,26955,26956,26959],{},[43,26957,26958],{},"type: opencv","：相机驱动类型。",[26,26961,26962,26965,26966,26560],{},[43,26963,26964],{},"index_or_path","：设备编号或设备路径（如 ",[43,26967,26968],{},"\u002Fdev\u002Fvideo4",[26,26970,26971,26973,26974,26976],{},[43,26972,451],{}," \u002F ",[43,26975,440],{},"：图像分辨率。",[26,26978,26979,26982],{},[43,26980,26981],{},"fps","：采样帧率。",[26,26984,26985,26988],{},[43,26986,26987],{},"--display_data=true","：启用实时可视化。",[2098,26990,26991],{},"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":41,"searchDepth":60,"depth":60,"links":26993},[26994,26995],{"id":26814,"depth":60,"text":26815},{"id":26865,"depth":60,"text":26866},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":26806,"description":25378},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":27002,"title":27003,"body":27004,"description":25378,"extension":2125,"meta":27174,"navigation":615,"path":27175,"seo":27176,"stem":27177,"__hash__":27178},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":27005,"toc":27169},[27006,27010,27014,27019,27024,27027,27068,27074,27078,27126,27131,27135,27138,27146,27151,27156,27161,27166],[10,27007,27009],{"id":27008},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,27011,27013],{"id":27012},"_51-生成访问令牌","5.1 生成访问令牌",[19,27015,27016],{},[3514,27017],{"alt":41,"src":27018},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[19,27020,27021],{},[3514,27022],{"alt":41,"src":27023},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[19,27025,27026],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[36,27028,27030],{"className":160,"code":27029,"language":162,"meta":41,"style":41},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[43,27031,27032,27044],{"__ignoreMap":41},[46,27033,27034,27036,27039,27041],{"class":48,"line":49},[46,27035,327],{"class":52},[46,27037,27038],{"class":56}," HF_TOKEN",[46,27040,79],{"class":52},[46,27042,27043],{"class":173},"\"your_huggingface_token\"\n",[46,27045,27046,27049,27052,27055,27058,27060,27063,27065],{"class":48,"line":60},[46,27047,27048],{"class":169},"hf",[46,27050,27051],{"class":173}," auth",[46,27053,27054],{"class":173}," login",[46,27056,27057],{"class":180}," --token",[46,27059,11728],{"class":173},[46,27061,27062],{"class":56},"$HF_TOKEN",[46,27064,2439],{"class":173},[46,27066,27067],{"class":180}," --add-to-git-credential\n",[19,27069,27070,27073],{},[43,27071,27072],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,27075,27077],{"id":27076},"_52-验证登录","5.2 验证登录",[36,27079,27081],{"className":160,"code":27080,"language":162,"meta":41,"style":41},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[43,27082,27083,27113],{"__ignoreMap":41},[46,27084,27085,27088,27090,27093,27095,27097,27100,27103,27106,27108,27111],{"class":48,"line":49},[46,27086,27087],{"class":56},"HF_USER",[46,27089,79],{"class":52},[46,27091,27092],{"class":56},"$(",[46,27094,27048],{"class":169},[46,27096,27051],{"class":173},[46,27098,27099],{"class":173}," whoami",[46,27101,27102],{"class":52}," |",[46,27104,27105],{"class":169}," head",[46,27107,280],{"class":180},[46,27109,27110],{"class":180}," 1",[46,27112,459],{"class":56},[46,27114,27115,27118,27120,27123],{"class":48,"line":60},[46,27116,27117],{"class":180},"echo",[46,27119,11728],{"class":173},[46,27121,27122],{"class":56},"$HF_USER",[46,27124,27125],{"class":173},"\"\n",[19,27127,27128],{},[3514,27129],{"alt":41,"src":27130},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,27132,27134],{"id":27133},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[19,27136,27137],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[3191,27139,27140,27143],{},[26,27141,27142],{},"Dataset Repo（用于上传演示数据）",[26,27144,27145],{},"Model Repo（用于上传训练后的 ACT 权重）",[19,27147,27148],{},[3514,27149],{"alt":41,"src":27150},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[19,27152,27153],{},[3514,27154],{"alt":41,"src":27155},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[19,27157,27158],{},[3514,27159],{"alt":41,"src":27160},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[19,27162,27163],{},[3514,27164],{"alt":41,"src":27165},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[2098,27167,27168],{},"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":41,"searchDepth":60,"depth":60,"links":27170},[27171,27172,27173],{"id":27012,"depth":60,"text":27013},{"id":27076,"depth":60,"text":27077},{"id":27133,"depth":60,"text":27134},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":27003,"description":25378},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":27180,"title":27181,"body":27182,"description":25378,"extension":2125,"meta":27379,"navigation":615,"path":27380,"seo":27381,"stem":27382,"__hash__":27383},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":27183,"toc":27374},[27184,27188,27192,27288,27296,27301,27305,27321,27324,27328,27371],[10,27185,27187],{"id":27186},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,27189,27191],{"id":27190},"_61-录制示教数据","6.1 录制示教数据",[36,27193,27195],{"className":160,"code":27194,"language":162,"meta":41,"style":41},"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",[43,27196,27197,27204,27210,27216,27222,27231,27237,27243,27249,27256,27266,27273,27283],{"__ignoreMap":41},[46,27198,27199,27202],{"class":48,"line":49},[46,27200,27201],{"class":169},"lerobot-record",[46,27203,184],{"class":180},[46,27205,27206,27208],{"class":48,"line":60},[46,27207,26706],{"class":180},[46,27209,184],{"class":180},[46,27211,27212,27214],{"class":48,"line":200},[46,27213,26784],{"class":180},[46,27215,184],{"class":180},[46,27217,27218,27220],{"class":48,"line":211},[46,27219,26844],{"class":180},[46,27221,184],{"class":180},[46,27223,27224,27226,27229],{"class":48,"line":222},[46,27225,26913],{"class":180},[46,27227,27228],{"class":173},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[46,27230,184],{"class":180},[46,27232,27233,27235],{"class":48,"line":636},[46,27234,26679],{"class":180},[46,27236,184],{"class":180},[46,27238,27239,27241],{"class":48,"line":641},[46,27240,26751],{"class":180},[46,27242,184],{"class":180},[46,27244,27245,27247],{"class":48,"line":653},[46,27246,26935],{"class":180},[46,27248,184],{"class":180},[46,27250,27251,27254],{"class":48,"line":659},[46,27252,27253],{"class":180},"  --display_data=true",[46,27255,184],{"class":180},[46,27257,27258,27261,27264],{"class":48,"line":665},[46,27259,27260],{"class":180},"  --dataset.repo_id=",[46,27262,27263],{"class":173},"\"Embodied-AI-6\u002Fso101_test\"",[46,27265,184],{"class":180},[46,27267,27268,27271],{"class":48,"line":670},[46,27269,27270],{"class":180},"  --dataset.num_episodes=10",[46,27272,184],{"class":180},[46,27274,27275,27278,27281],{"class":48,"line":676},[46,27276,27277],{"class":180},"  --dataset.single_task=",[46,27279,27280],{"class":173},"\"Grab the green cube\"",[46,27282,184],{"class":180},[46,27284,27285],{"class":48,"line":682},[46,27286,27287],{"class":180},"  --resume=true\n",[3191,27289,27290],{},[26,27291,27292,27295],{},[43,27293,27294],{},"--resume=true","：已有同一数据集时继续追加 episode。",[19,27297,27298],{},[3514,27299],{"alt":41,"src":27300},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,27302,27304],{"id":27303},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[36,27306,27308],{"className":160,"code":27307,"language":162,"meta":41,"style":41},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[43,27309,27310],{"__ignoreMap":41},[46,27311,27312,27315,27318],{"class":48,"line":49},[46,27313,27314],{"class":169},"rm",[46,27316,27317],{"class":180}," -rf",[46,27319,27320],{"class":173}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[19,27322,27323],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,27325,27327],{"id":27326},"_63-回放指定-episode","6.3 回放指定 episode",[36,27329,27331],{"className":160,"code":27330,"language":162,"meta":41,"style":41},"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",[43,27332,27333,27340,27346,27352,27358,27366],{"__ignoreMap":41},[46,27334,27335,27338],{"class":48,"line":49},[46,27336,27337],{"class":169},"lerobot-replay",[46,27339,184],{"class":180},[46,27341,27342,27344],{"class":48,"line":60},[46,27343,26706],{"class":180},[46,27345,184],{"class":180},[46,27347,27348,27350],{"class":48,"line":200},[46,27349,26784],{"class":180},[46,27351,184],{"class":180},[46,27353,27354,27356],{"class":48,"line":211},[46,27355,26844],{"class":180},[46,27357,184],{"class":180},[46,27359,27360,27362,27364],{"class":48,"line":222},[46,27361,27260],{"class":180},[46,27363,27263],{"class":173},[46,27365,184],{"class":180},[46,27367,27368],{"class":48,"line":636},[46,27369,27370],{"class":180},"  --dataset.episode=0\n",[2098,27372,27373],{},"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":41,"searchDepth":60,"depth":60,"links":27375},[27376,27377,27378],{"id":27190,"depth":60,"text":27191},{"id":27303,"depth":60,"text":27304},{"id":27326,"depth":60,"text":27327},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":27181,"description":25378},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":27385,"title":27386,"body":27387,"description":25378,"extension":2125,"meta":27515,"navigation":615,"path":27516,"seo":27517,"stem":27518,"__hash__":27519},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":27388,"toc":27513},[27389,27393,27456,27459,27506,27511],[10,27390,27392],{"id":27391},"_7-act-模型训练","7. ACT 模型训练",[36,27394,27396],{"className":160,"code":27395,"language":162,"meta":41,"style":41},"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",[43,27397,27398,27405,27413,27420,27427,27434,27441,27448],{"__ignoreMap":41},[46,27399,27400,27403],{"class":48,"line":49},[46,27401,27402],{"class":169},"lerobot-train",[46,27404,184],{"class":180},[46,27406,27407,27409,27411],{"class":48,"line":60},[46,27408,27260],{"class":180},[46,27410,27263],{"class":173},[46,27412,184],{"class":180},[46,27414,27415,27418],{"class":48,"line":200},[46,27416,27417],{"class":180},"  --policy.type=act",[46,27419,184],{"class":180},[46,27421,27422,27425],{"class":48,"line":211},[46,27423,27424],{"class":180},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[46,27426,184],{"class":180},[46,27428,27429,27432],{"class":48,"line":222},[46,27430,27431],{"class":180},"  --job_name=act_so101_test",[46,27433,184],{"class":180},[46,27435,27436,27439],{"class":48,"line":636},[46,27437,27438],{"class":180},"  --policy.device=cuda",[46,27440,184],{"class":180},[46,27442,27443,27446],{"class":48,"line":641},[46,27444,27445],{"class":180},"  --wandb.enable=false",[46,27447,184],{"class":180},[46,27449,27450,27453],{"class":48,"line":653},[46,27451,27452],{"class":180},"  --policy.repo_id=",[46,27454,27455],{"class":173},"\"Embodied-AI-6\u002Flerobot_new\"\n",[19,27457,27458],{},"参数说明：",[3191,27460,27461,27467,27473,27479,27485,27494,27500],{},[26,27462,27463,27466],{},[43,27464,27465],{},"--dataset.repo_id","：训练数据集仓库。",[26,27468,27469,27472],{},[43,27470,27471],{},"--policy.type=act","：策略模型类型为 ACT。",[26,27474,27475,27478],{},[43,27476,27477],{},"--output_dir","：本地训练输出目录。",[26,27480,27481,27484],{},[43,27482,27483],{},"--job_name","：训练任务名称。",[26,27486,27487,27490,27491,26560],{},[43,27488,27489],{},"--policy.device","：训练设备（如 ",[43,27492,27493],{},"cuda",[26,27495,27496,27499],{},[43,27497,27498],{},"--wandb.enable","：是否启用 WandB 可视化。",[26,27501,27502,27505],{},[43,27503,27504],{},"--policy.repo_id","：训练后模型推送目标仓库。",[19,27507,27508],{},[3514,27509],{"alt":41,"src":27510},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[2098,27512,27373],{},{"title":41,"searchDepth":60,"depth":60,"links":27514},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":27386,"description":25378},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":27521,"title":27522,"body":27523,"description":25378,"extension":2125,"meta":27610,"navigation":615,"path":27611,"seo":27612,"stem":27613,"__hash__":27614},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":27524,"toc":27608},[27525,27528,27531,27598,27606],[10,27526,27522],{"id":27527},"_8-策略部署与自动采集",[19,27529,27530],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[36,27532,27534],{"className":160,"code":27533,"language":162,"meta":41,"style":41},"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",[43,27535,27536,27542,27548,27554,27562,27568,27575,27583,27591],{"__ignoreMap":41},[46,27537,27538,27540],{"class":48,"line":49},[46,27539,27201],{"class":169},[46,27541,184],{"class":180},[46,27543,27544,27546],{"class":48,"line":60},[46,27545,26706],{"class":180},[46,27547,184],{"class":180},[46,27549,27550,27552],{"class":48,"line":200},[46,27551,26784],{"class":180},[46,27553,184],{"class":180},[46,27555,27556,27558,27560],{"class":48,"line":211},[46,27557,26913],{"class":180},[46,27559,27228],{"class":173},[46,27561,184],{"class":180},[46,27563,27564,27566],{"class":48,"line":222},[46,27565,26844],{"class":180},[46,27567,184],{"class":180},[46,27569,27570,27573],{"class":48,"line":636},[46,27571,27572],{"class":180},"  --display_data=false",[46,27574,184],{"class":180},[46,27576,27577,27579,27581],{"class":48,"line":641},[46,27578,27260],{"class":180},[46,27580,27263],{"class":173},[46,27582,184],{"class":180},[46,27584,27585,27587,27589],{"class":48,"line":653},[46,27586,27277],{"class":180},[46,27588,27280],{"class":173},[46,27590,184],{"class":180},[46,27592,27593,27596],{"class":48,"line":659},[46,27594,27595],{"class":180},"  --policy.path=",[46,27597,27455],{"class":173},[3191,27599,27600],{},[26,27601,27602,27605],{},[43,27603,27604],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[2098,27607,27373],{},{"title":41,"searchDepth":60,"depth":60,"links":27609},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":27522,"description":25378},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":27616,"title":27617,"body":27618,"description":25378,"extension":2125,"meta":27647,"navigation":615,"path":27648,"seo":27649,"stem":27650,"__hash__":27651},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":27619,"toc":27645},[27620,27624,27627,27633,27636,27642],[10,27621,27623],{"id":27622},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[19,27625,27626],{},"项目地址：",[19,27628,27629],{},[2426,27630,27631],{"href":27631,"rel":27632},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[25862],[19,27634,27635],{},"参考教程：",[19,27637,27638],{},[2426,27639,27640],{"href":27640,"rel":27641},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[25862],[19,27643,27644],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":41,"searchDepth":60,"depth":60,"links":27646},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":27617,"description":25378},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":27653,"title":27654,"body":27655,"description":27659,"extension":2125,"meta":27660,"navigation":615,"path":27661,"seo":27662,"stem":27663,"__hash__":27664},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":27656,"toc":27657},[],{"title":41,"searchDepth":60,"depth":60,"links":27658},[],"act复现",{"category":25380},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":27654,"description":27659},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":27666,"title":27667,"body":27668,"description":41,"extension":2125,"meta":27970,"navigation":615,"path":27971,"seo":27972,"stem":27973,"__hash__":27974},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":27669,"toc":27962},[27670,27673,27677,27687,27694,27701,27704,27711,27714,27717,27721,27733,27737,27783,27786,27789,27792,27795,27798,27802,27840,27846,27850,27904,27909,27912,27915,27920,27923,27928,27931,27934,27938,27941,27944,27948],[10,27671,27667],{"id":27672},"_1简介",[479,27674,27676],{"id":27675},"_11什么是-docker","1.1什么是 Docker？",[19,27678,27679,27680,27683,27684],{},"Docker 是一个开源的 ",[2339,27681,27682],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[2339,27685,27686],{},"一次构建，到处运行。",[19,27688,27689,27690,27693],{},"“ ",[2339,27691,27692],{},"一次构建，到处运行"," ”也就是说：",[23,27695,27696],{},[26,27697,27698],{},[2339,27699,27700],{},"之前：",[19,27702,27703],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[23,27705,27706],{},[26,27707,27708],{},[2339,27709,27710],{},"使用docker后：",[19,27712,27713],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[19,27715,27716],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[479,27718,27720],{"id":27719},"_12它是怎么工作的","1.2.它是怎么工作的？",[3191,27722,27723,27726],{},[26,27724,27725],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[26,27727,27728,27729,27732],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[2339,27730,27731],{},"无论在哪运行都一样稳定"," 。",[479,27734,27736],{"id":27735},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[97,27738,27739,27749],{},[100,27740,27741],{},[103,27742,27743,27746],{},[106,27744,27745],{"align":108},"概念",[106,27747,27748],{"align":108},"解释",[120,27750,27751,27759,27767,27775],{},[103,27752,27753,27756],{},[125,27754,27755],{"align":108},"镜像",[125,27757,27758],{"align":108},"Image，运行容器的模板，像是一个应用快照",[103,27760,27761,27764],{},[125,27762,27763],{"align":108},"容器",[125,27765,27766],{"align":108},"Container，运行中的镜像实例，有自己的文件系统、网络等",[103,27768,27769,27772],{},[125,27770,27771],{"align":108},"Dockerfile",[125,27773,27774],{"align":108},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[103,27776,27777,27780],{},[125,27778,27779],{"align":108},"仓库",[125,27781,27782],{"align":108},"Registry，存放镜像的地方，比如 Docker Hub",[19,27784,27785],{},"抽象化理解:",[19,27787,27788],{},"Docker镜像≈C++类",[19,27790,27791],{},"Docker容器≈C++类实例(即对象)",[19,27793,27794],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[19,27796,27797],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[479,27799,27801],{"id":27800},"_14类比理解","1.4.类比理解",[97,27803,27804,27814],{},[100,27805,27806],{},[103,27807,27808,27811],{},[106,27809,27810],{"align":108},"传统部署",[106,27812,27813],{"align":108},"Docker部署",[120,27815,27816,27824,27832],{},[103,27817,27818,27821],{},[125,27819,27820],{"align":108},"手动安装依赖、调试版本不一致问题",[125,27822,27823],{"align":108},"一次打包环境和代码",[103,27825,27826,27829],{},[125,27827,27828],{"align":108},"程序“裸奔”跑在系统上",[125,27830,27831],{"align":108},"程序“穿着容器”隔离运行",[103,27833,27834,27837],{},[125,27835,27836],{"align":108},"容易“在我电脑上能跑”",[125,27838,27839],{"align":108},"保证“无论在哪都能跑”",[19,27841,27842,27843],{},"就像快递包裹： ",[2339,27844,27845],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[479,27847,27849],{"id":27848},"_15docker-的核心优势","1.5.Docker 的核心优势",[97,27851,27852,27862],{},[100,27853,27854],{},[103,27855,27856,27859],{},[106,27857,27858],{"align":108},"优势",[106,27860,27861],{"align":108},"说明",[120,27863,27864,27872,27880,27888,27896],{},[103,27865,27866,27869],{},[125,27867,27868],{"align":108},"轻量级",[125,27870,27871],{"align":108},"基于系统内核共享，启动速度快，占资源少",[103,27873,27874,27877],{},[125,27875,27876],{"align":108},"跨平台",[125,27878,27879],{"align":108},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[103,27881,27882,27885],{},[125,27883,27884],{"align":108},"易于迁移部署",[125,27886,27887],{"align":108},"应用和环境一起封装，不怕依赖不一致",[103,27889,27890,27893],{},[125,27891,27892],{"align":108},"易于版本控制",[125,27894,27895],{"align":108},"镜像版本可控，支持回滚",[103,27897,27898,27901],{},[125,27899,27900],{"align":108},"生态丰富",[125,27902,27903],{"align":108},"Docker Hub 上有成千上万的现成镜像可用",[23,27905,27906],{},[26,27907,27908],{},"在Linux上可以几乎实现无性能损失。",[19,27910,27911],{},"docker里的发行版和本机共用Linux内核。",[19,27913,27914],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[23,27916,27917],{},[26,27918,27919],{},"可以快速部署在绝大多数Linux发行版",[19,27921,27922],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[23,27924,27925],{},[26,27926,27927],{},"配置环境简单",[19,27929,27930],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[19,27932,27933],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[23,27935,27936],{},[26,27937,27900],{},[19,27939,27940],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[19,27942,27943],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[479,27945,27947],{"id":27946},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[3191,27949,27950,27953,27956,27959],{},[26,27951,27952],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[26,27954,27955],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[26,27957,27958],{},"微服务架构：每个服务一个容器，灵活组合",[26,27960,27961],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":41,"searchDepth":60,"depth":60,"links":27963},[27964,27965,27966,27967,27968,27969],{"id":27675,"depth":200,"text":27676},{"id":27719,"depth":200,"text":27720},{"id":27735,"depth":200,"text":27736},{"id":27800,"depth":200,"text":27801},{"id":27848,"depth":200,"text":27849},{"id":27946,"depth":200,"text":27947},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":27667,"description":41},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":27976,"title":27977,"body":27978,"description":41,"extension":2125,"meta":28708,"navigation":615,"path":28709,"seo":28710,"stem":28711,"__hash__":28712},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":27979,"toc":28703},[27980,27983,27987,27990,27993,27999,28005,28009,28018,28021,28077,28080,28131,28134,28217,28220,28257,28261,28272,28285,28292,28295,28374,28377,28426,28429,28452,28456,28463,28466,28482,28488,28491,28507,28513,28516,28532,28546,28552,28572,28578,28581,28593,28599,28602,28616,28622,28625,28645,28650,28653,28656,28660,28663,28666,28669,28676,28679,28682,28685,28690,28695,28700],[10,27981,27977],{"id":27982},"_2安装docker",[479,27984,27986],{"id":27985},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[19,27988,27989],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[19,27991,27992],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[19,27994,27995],{},[2426,27996,27997],{"href":27997,"rel":27998},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[25862],[19,28000,28001],{},[2426,28002,28003],{"href":28003,"rel":28004},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[25862],[23999,28006,28008],{"id":28007},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[19,28010,28011,28012,28017],{},"以下内容根据 ",[2426,28013,28016],{"href":28014,"rel":28015},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[25862],"官方文档"," 修改而来。",[19,28019,28020],{},"如果你过去安装过 docker，先删掉：",[36,28022,28024],{"className":160,"code":28023,"language":162,"meta":41,"style":41},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[43,28025,28026],{"__ignoreMap":41},[46,28027,28028,28030,28033,28035,28038,28041,28044,28047,28050,28053,28056,28059,28062,28065,28068,28071,28074],{"class":48,"line":49},[46,28029,1713],{"class":52},[46,28031,28032],{"class":56}," pkg ",[46,28034,1146],{"class":52},[46,28036,28037],{"class":173}," docker.io",[46,28039,28040],{"class":173}," docker-doc",[46,28042,28043],{"class":173}," docker-compose",[46,28045,28046],{"class":173}," docker-compose-v2",[46,28048,28049],{"class":173}," podman-docker",[46,28051,28052],{"class":173}," containerd",[46,28054,28055],{"class":173}," runc",[46,28057,28058],{"class":56},"; ",[46,28060,28061],{"class":52},"do",[46,28063,28064],{"class":169}," sudo",[46,28066,28067],{"class":173}," apt-get",[46,28069,28070],{"class":173}," remove",[46,28072,28073],{"class":56}," $pkg; ",[46,28075,28076],{"class":52},"done\n",[19,28078,28079],{},"首先安装依赖和GPG：",[36,28081,28085],{"className":28082,"code":28083,"language":28084,"meta":41,"style":41},"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",[43,28086,28087,28092,28097,28102,28107,28112,28117,28121,28126],{"__ignoreMap":41},[46,28088,28089],{"class":48,"line":49},[46,28090,28091],{},"# Add Docker's official GPG key:\n",[46,28093,28094],{"class":48,"line":60},[46,28095,28096],{},"sudo apt-get update\n",[46,28098,28099],{"class":48,"line":200},[46,28100,28101],{},"sudo apt-get install ca-certificates curl\n",[46,28103,28104],{"class":48,"line":211},[46,28105,28106],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[46,28108,28109],{"class":48,"line":222},[46,28110,28111],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[46,28113,28114],{"class":48,"line":636},[46,28115,28116],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[46,28118,28119],{"class":48,"line":641},[46,28120,616],{"emptyLinePlaceholder":615},[46,28122,28123],{"class":48,"line":653},[46,28124,28125],{},"# 如果上面这行报错就弄下面这行\n",[46,28127,28128],{"class":48,"line":659},[46,28129,28130],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[19,28132,28133],{},"信任 Docker 的 GPG 公钥并添加仓库：",[36,28135,28137],{"className":160,"code":28136,"language":162,"meta":41,"style":41},"# 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",[43,28138,28139,28144,28150,28167,28200],{"__ignoreMap":41},[46,28140,28141],{"class":48,"line":49},[46,28142,28143],{"class":2253},"# Add the repository to Apt sources:\n",[46,28145,28146,28148],{"class":48,"line":60},[46,28147,27117],{"class":180},[46,28149,184],{"class":180},[46,28151,28152,28155,28158,28161,28164],{"class":48,"line":200},[46,28153,28154],{"class":173},"  \"deb [arch=$(",[46,28156,28157],{"class":169},"dpkg",[46,28159,28160],{"class":180}," --print-architecture",[46,28162,28163],{"class":173},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[46,28165,28166],{"class":180},"\\\n",[46,28168,28169,28172,28174,28176,28179,28182,28184,28186,28189,28191,28193,28196,28198],{"class":48,"line":211},[46,28170,28171],{"class":173},"  \"",[46,28173,27092],{"class":56},[46,28175,2744],{"class":180},[46,28177,28178],{"class":173}," \u002Fetc\u002Fos-release",[46,28180,28181],{"class":56}," && ",[46,28183,27117],{"class":180},[46,28185,11728],{"class":173},[46,28187,28188],{"class":56},"$VERSION_CODENAME",[46,28190,2439],{"class":173},[46,28192,2616],{"class":56},[46,28194,28195],{"class":173},"\" stable\"",[46,28197,27102],{"class":52},[46,28199,184],{"class":180},[46,28201,28202,28205,28208,28211,28214],{"class":48,"line":222},[46,28203,28204],{"class":169},"  sudo",[46,28206,28207],{"class":173}," tee",[46,28209,28210],{"class":173}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[46,28212,28213],{"class":52}," >",[46,28215,28216],{"class":173}," \u002Fdev\u002Fnull\n",[19,28218,28219],{},"最后安装",[36,28221,28223],{"className":160,"code":28222,"language":162,"meta":41,"style":41},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[43,28224,28225,28234],{"__ignoreMap":41},[46,28226,28227,28229,28231],{"class":48,"line":49},[46,28228,170],{"class":169},[46,28230,28067],{"class":173},[46,28232,28233],{"class":173}," update\n",[46,28235,28236,28238,28240,28242,28245,28248,28251,28254],{"class":48,"line":60},[46,28237,170],{"class":169},[46,28239,28067],{"class":173},[46,28241,177],{"class":173},[46,28243,28244],{"class":173}," docker-ce",[46,28246,28247],{"class":173}," docker-ce-cli",[46,28249,28250],{"class":173}," containerd.io",[46,28252,28253],{"class":173}," docker-buildx-plugin",[46,28255,28256],{"class":173}," docker-compose-plugin\n",[23999,28258,28260],{"id":28259},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[19,28262,28263,28264,28267,28268,28271],{},"查看自己自己包管理工具版本（dnf是 ",[2339,28265,28266],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[2339,28269,28270],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[36,28273,28275],{"className":160,"code":28274,"language":162,"meta":41,"style":41},"dnf --version\n",[43,28276,28277],{"__ignoreMap":41},[46,28278,28279,28282],{"class":48,"line":49},[46,28280,28281],{"class":169},"dnf",[46,28283,28284],{"class":180}," --version\n",[19,28286,28011,28287,28291],{},[2426,28288,28016],{"href":28289,"rel":28290},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[25862]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[19,28293,28294],{},"如果你之前安装过 docker，请先删掉",[36,28296,28298],{"className":160,"code":28297,"language":162,"meta":41,"style":41},"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",[43,28299,28300,28313,28320,28327,28334,28341,28348,28355,28362,28369],{"__ignoreMap":41},[46,28301,28302,28304,28306,28308,28311],{"class":48,"line":49},[46,28303,170],{"class":169},[46,28305,174],{"class":173},[46,28307,28070],{"class":173},[46,28309,28310],{"class":173}," docker",[46,28312,184],{"class":180},[46,28314,28315,28318],{"class":48,"line":60},[46,28316,28317],{"class":173},"                  docker-client",[46,28319,184],{"class":180},[46,28321,28322,28325],{"class":48,"line":200},[46,28323,28324],{"class":173},"                  docker-client-latest",[46,28326,184],{"class":180},[46,28328,28329,28332],{"class":48,"line":211},[46,28330,28331],{"class":173},"                  docker-common",[46,28333,184],{"class":180},[46,28335,28336,28339],{"class":48,"line":222},[46,28337,28338],{"class":173},"                  docker-latest",[46,28340,184],{"class":180},[46,28342,28343,28346],{"class":48,"line":636},[46,28344,28345],{"class":173},"                  docker-latest-logrotate",[46,28347,184],{"class":180},[46,28349,28350,28353],{"class":48,"line":641},[46,28351,28352],{"class":173},"                  docker-logrotate",[46,28354,184],{"class":180},[46,28356,28357,28360],{"class":48,"line":653},[46,28358,28359],{"class":173},"                  docker-selinux",[46,28361,184],{"class":180},[46,28363,28364,28367],{"class":48,"line":659},[46,28365,28366],{"class":173},"                  docker-engine-selinux",[46,28368,184],{"class":180},[46,28370,28371],{"class":48,"line":665},[46,28372,28373],{"class":173},"                  docker-engine\n",[19,28375,28376],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[36,28378,28380],{"className":160,"code":28379,"language":162,"meta":41,"style":41},"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",[43,28381,28382,28395,28410],{"__ignoreMap":41},[46,28383,28384,28386,28388,28390,28392],{"class":48,"line":49},[46,28385,170],{"class":169},[46,28387,174],{"class":173},[46,28389,181],{"class":180},[46,28391,177],{"class":173},[46,28393,28394],{"class":173}," dnf-plugins-core\n",[46,28396,28397,28399,28401,28404,28407],{"class":48,"line":60},[46,28398,170],{"class":169},[46,28400,174],{"class":173},[46,28402,28403],{"class":173}," config-manager",[46,28405,28406],{"class":173}," addrepo",[46,28408,28409],{"class":180}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[46,28411,28412,28414,28417,28420,28423],{"class":48,"line":200},[46,28413,170],{"class":169},[46,28415,28416],{"class":173}," sed",[46,28418,28419],{"class":180}," -i",[46,28421,28422],{"class":173}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[46,28424,28425],{"class":173}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[19,28427,28428],{},"最后安装：",[36,28430,28432],{"className":160,"code":28431,"language":162,"meta":41,"style":41},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[43,28433,28434],{"__ignoreMap":41},[46,28435,28436,28438,28440,28442,28444,28446,28448,28450],{"class":48,"line":49},[46,28437,170],{"class":169},[46,28439,174],{"class":173},[46,28441,177],{"class":173},[46,28443,28244],{"class":173},[46,28445,28247],{"class":173},[46,28447,28250],{"class":173},[46,28449,28253],{"class":173},[46,28451,28256],{"class":173},[479,28453,28455],{"id":28454},"_22配置环境","2.2.配置环境",[23999,28457,28459,28462],{"id":28458},"_221检查-docker-服务状态",[2339,28460,28461],{},"2.2.1.检查 Docker 服务状态"," ：",[19,28464,28465],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[36,28467,28469],{"className":160,"code":28468,"language":162,"meta":41,"style":41},"systemctl status docker\n",[43,28470,28471],{"__ignoreMap":41},[46,28472,28473,28476,28479],{"class":48,"line":49},[46,28474,28475],{"class":169},"systemctl",[46,28477,28478],{"class":173}," status",[46,28480,28481],{"class":173}," docker\n",[23999,28483,28485,28462],{"id":28484},"_222启动-docker-服务",[2339,28486,28487],{},"2.2.2.启动 Docker 服务",[19,28489,28490],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[36,28492,28494],{"className":160,"code":28493,"language":162,"meta":41,"style":41},"sudo systemctl start docker\n",[43,28495,28496],{"__ignoreMap":41},[46,28497,28498,28500,28503,28505],{"class":48,"line":49},[46,28499,170],{"class":169},[46,28501,28502],{"class":173}," systemctl",[46,28504,6201],{"class":173},[46,28506,28481],{"class":173},[23999,28508,28510,28462],{"id":28509},"_223设置-docker-开机自启",[2339,28511,28512],{},"2.2.3.设置 Docker 开机自启",[19,28514,28515],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[36,28517,28519],{"className":160,"code":28518,"language":162,"meta":41,"style":41},"sudo systemctl enable docker\n",[43,28520,28521],{"__ignoreMap":41},[46,28522,28523,28525,28527,28530],{"class":48,"line":49},[46,28524,170],{"class":169},[46,28526,28502],{"class":173},[46,28528,28529],{"class":173}," enable",[46,28531,28481],{"class":173},[23999,28533,28535,15797,28538,15797,28543,28462],{"id":28534},"_224将用户添加到-docker-组",[2339,28536,28537],{},"2.2.4.将用户添加到",[2339,28539,28540],{},[43,28541,28542],{},"docker",[2339,28544,28545],{},"组",[19,28547,28548,28549,28551],{},"使用以下命令将当前用户添加到 ",[43,28550,28542],{}," 组：",[36,28553,28555],{"className":160,"code":28554,"language":162,"meta":41,"style":41},"sudo usermod -aG docker $USER\n",[43,28556,28557],{"__ignoreMap":41},[46,28558,28559,28561,28564,28567,28569],{"class":48,"line":49},[46,28560,170],{"class":169},[46,28562,28563],{"class":173}," usermod",[46,28565,28566],{"class":180}," -aG",[46,28568,28310],{"class":173},[46,28570,28571],{"class":56}," $USER\n",[23999,28573,28575,28462],{"id":28574},"_225退出并重新登录",[2339,28576,28577],{},"2.2.5.退出并重新登录",[19,28579,28580],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[36,28582,28584],{"className":160,"code":28583,"language":162,"meta":41,"style":41},"newgrp docker\n",[43,28585,28586],{"__ignoreMap":41},[46,28587,28588,28591],{"class":48,"line":49},[46,28589,28590],{"class":169},"newgrp",[46,28592,28481],{"class":173},[23999,28594,28596,28462],{"id":28595},"_226重新启动-docker-服务如果需要",[2339,28597,28598],{},"2.2.6.重新启动 Docker 服务（如果需要）",[19,28600,28601],{},"确保 Docker 服务正在运行，可以使用以下命令：",[36,28603,28604],{"className":160,"code":28493,"language":162,"meta":41,"style":41},[43,28605,28606],{"__ignoreMap":41},[46,28607,28608,28610,28612,28614],{"class":48,"line":49},[46,28609,170],{"class":169},[46,28611,28502],{"class":173},[46,28613,6201],{"class":173},[46,28615,28481],{"class":173},[23999,28617,28619,28462],{"id":28618},"_227重启电脑后检查-docker-服务状态",[2339,28620,28621],{},"2.2.7.重启电脑后检查 Docker 服务状态",[19,28623,28624],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[36,28626,28628],{"className":160,"code":28627,"language":162,"meta":41,"style":41},"sudo reboot\nsystemctl status docker\n",[43,28629,28630,28637],{"__ignoreMap":41},[46,28631,28632,28634],{"class":48,"line":49},[46,28633,170],{"class":169},[46,28635,28636],{"class":173}," reboot\n",[46,28638,28639,28641,28643],{"class":48,"line":60},[46,28640,28475],{"class":169},[46,28642,28478],{"class":173},[46,28644,28481],{"class":173},[19,28646,28647],{},[3514,28648],{"alt":41,"src":28649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[19,28651,28652],{},"第三行显示enabled说明开机自启动成功",[19,28654,28655],{},"按q退出",[479,28657,28659],{"id":28658},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[19,28661,28662],{},"优先使用linux来使用docker是比较好的",[19,28664,28665],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[19,28667,28668],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[19,28670,28671,28672],{},"官方下载安装:",[2426,28673,28674],{"href":28674,"rel":28675},"https:\u002F\u002Fwww.docker.com\u002F",[25862],[19,28677,28678],{},"Windows的Docker显卡直通与USB直通:",[19,28680,28681],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[19,28683,28684],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[19,28686,28687],{},[3514,28688],{"alt":41,"src":28689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[19,28691,28692],{},[3514,28693],{"alt":41,"src":28694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[19,28696,28697],{},[3514,28698],{"alt":41,"src":28699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[2098,28701,28702],{},"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":41,"searchDepth":60,"depth":60,"links":28704},[28705,28706,28707],{"id":27985,"depth":200,"text":27986},{"id":28454,"depth":200,"text":28455},{"id":28658,"depth":200,"text":28659},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":27977,"description":41},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":28714,"title":28715,"body":28716,"description":28723,"extension":2125,"meta":29416,"navigation":615,"path":29417,"seo":29418,"stem":29419,"__hash__":29420},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":28717,"toc":29410},[28718,28721,28724,28728,28733,28738,28741,28769,28774,28783,28786,28791,28795,28802,28807,28813,28817,28820,28824,28829,28921,28926,28944,28949,28970,28975,28991,28995,29000,29029,29034,29080,29085,29129,29137,29154,29159,29175,29180,29194,29197,29200,29203,29206,29235,29238,29243,29247,29250,29253,29259,29262,29265,29268,29330,29337,29342,29345,29363,29367,29370,29387,29390,29393,29407],[10,28719,28715],{"id":28720},"_3docker直通",[19,28722,28723],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[479,28725,28727],{"id":28726},"_31usb直通","3.1.USB直通",[19,28729,28730],{},[3514,28731],{"alt":41,"src":28732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[23,28734,28735],{},[26,28736,28737],{},"方法一(不是很推荐新手)：",[19,28739,28740],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[36,28742,28744],{"className":160,"code":28743,"language":162,"meta":41,"style":41},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[43,28745,28746,28754,28759],{"__ignoreMap":41},[46,28747,28748,28751],{"class":48,"line":49},[46,28749,28750],{"class":169},"ls",[46,28752,28753],{"class":173}," \u002Fdev\n",[46,28755,28756],{"class":48,"line":60},[46,28757,28758],{"class":2253},"#例如\n",[46,28760,28761,28764,28766],{"class":48,"line":200},[46,28762,28763],{"class":56},"--device",[46,28765,79],{"class":52},[46,28767,28768],{"class":173},"\u002Fdev\u002Ftty_USB0\n",[23,28770,28771],{"start":60},[26,28772,28773],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[36,28775,28777],{"className":160,"code":28776,"language":162,"meta":41,"style":41},"--privileged\n",[43,28778,28779],{"__ignoreMap":41},[46,28780,28781],{"class":48,"line":49},[46,28782,28776],{"class":169},[19,28784,28785],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[19,28787,28788],{},[3514,28789],{"alt":41,"src":28790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[479,28792,28794],{"id":28793},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[19,28796,28797,28798,28801],{},"NVIDIA Container Toolkit使用户 ",[2339,28799,28800],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[19,28803,28804],{},[3514,28805],{"alt":41,"src":28806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[19,28808,28809],{},[2426,28810,28811],{"href":28811,"rel":28812},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[25862],[23999,28814,28816],{"id":28815},"_321安装","3.2.1.安装",[19,28818,28819],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[24911,28821,28823],{"id":28822},"_3211ubuntu","3.2.1.1.Ubuntu",[23,28825,28826],{},[26,28827,28828],{},"配置存储库 并更新",[36,28830,28832],{"className":160,"code":28831,"language":162,"meta":41,"style":41},"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",[43,28833,28834,28863,28883,28895,28907,28913],{"__ignoreMap":41},[46,28835,28836,28839,28842,28845,28847,28849,28852,28855,28858,28861],{"class":48,"line":49},[46,28837,28838],{"class":169},"curl",[46,28840,28841],{"class":180}," -fsSL",[46,28843,28844],{"class":173}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[46,28846,27102],{"class":52},[46,28848,28064],{"class":169},[46,28850,28851],{"class":173}," gpg",[46,28853,28854],{"class":180}," --dearmor",[46,28856,28857],{"class":180}," -o",[46,28859,28860],{"class":173}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[46,28862,184],{"class":180},[46,28864,28865,28868,28870,28873,28876,28879,28881],{"class":48,"line":60},[46,28866,28867],{"class":56},"  && ",[46,28869,28838],{"class":169},[46,28871,28872],{"class":180}," -s",[46,28874,28875],{"class":180}," -L",[46,28877,28878],{"class":173}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[46,28880,27102],{"class":52},[46,28882,184],{"class":180},[46,28884,28885,28888,28891,28893],{"class":48,"line":200},[46,28886,28887],{"class":169},"    sed",[46,28889,28890],{"class":173}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[46,28892,27102],{"class":52},[46,28894,184],{"class":180},[46,28896,28897,28900,28902,28905],{"class":48,"line":211},[46,28898,28899],{"class":169},"    sudo",[46,28901,28207],{"class":173},[46,28903,28904],{"class":173}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[46,28906,184],{"class":180},[46,28908,28909,28911],{"class":48,"line":222},[46,28910,28867],{"class":56},[46,28912,28166],{"class":180},[46,28914,28915,28917,28919],{"class":48,"line":636},[46,28916,28899],{"class":169},[46,28918,28067],{"class":173},[46,28920,28233],{"class":173},[23,28922,28923],{"start":60},[26,28924,28925],{},"安装nvidia-docker2",[36,28927,28929],{"className":160,"code":28928,"language":162,"meta":41,"style":41},"sudo apt-get install -y nvidia-docker2\n",[43,28930,28931],{"__ignoreMap":41},[46,28932,28933,28935,28937,28939,28941],{"class":48,"line":49},[46,28934,170],{"class":169},[46,28936,28067],{"class":173},[46,28938,177],{"class":173},[46,28940,181],{"class":180},[46,28942,28943],{"class":173}," nvidia-docker2\n",[23,28945,28946],{"start":200},[26,28947,28948],{},"使用nvidia-ctk命令配置container runtime",[36,28950,28952],{"className":160,"code":28951,"language":162,"meta":41,"style":41},"sudo nvidia-ctk runtime configure --runtime=docker\n",[43,28953,28954],{"__ignoreMap":41},[46,28955,28956,28958,28961,28964,28967],{"class":48,"line":49},[46,28957,170],{"class":169},[46,28959,28960],{"class":173}," nvidia-ctk",[46,28962,28963],{"class":173}," runtime",[46,28965,28966],{"class":173}," configure",[46,28968,28969],{"class":180}," --runtime=docker\n",[23,28971,28972],{"start":211},[26,28973,28974],{},"重启docker服务:",[36,28976,28978],{"className":160,"code":28977,"language":162,"meta":41,"style":41},"sudo systemctl restart docker\n",[43,28979,28980],{"__ignoreMap":41},[46,28981,28982,28984,28986,28989],{"class":48,"line":49},[46,28983,170],{"class":169},[46,28985,28502],{"class":173},[46,28987,28988],{"class":173}," restart",[46,28990,28481],{"class":173},[24911,28992,28994],{"id":28993},"_3212fedora","3.2.1.2.Fedora",[23,28996,28997],{},[26,28998,28999],{},"配置存储库",[36,29001,29003],{"className":160,"code":29002,"language":162,"meta":41,"style":41},"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",[43,29004,29005,29020],{"__ignoreMap":41},[46,29006,29007,29009,29011,29013,29016,29018],{"class":48,"line":49},[46,29008,28838],{"class":169},[46,29010,28872],{"class":180},[46,29012,28875],{"class":180},[46,29014,29015],{"class":173}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[46,29017,27102],{"class":52},[46,29019,184],{"class":180},[46,29021,29022,29024,29026],{"class":48,"line":60},[46,29023,170],{"class":169},[46,29025,28207],{"class":173},[46,29027,29028],{"class":173}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[23,29030,29031],{"start":60},[26,29032,29033],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[36,29035,29037],{"className":160,"code":29036,"language":162,"meta":41,"style":41},"# 如果是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",[43,29038,29039,29044,29058,29062,29067],{"__ignoreMap":41},[46,29040,29041],{"class":48,"line":49},[46,29042,29043],{"class":2253},"# 如果是RHEL或者Rocky（DNF4）\n",[46,29045,29046,29048,29050,29052,29055],{"class":48,"line":60},[46,29047,170],{"class":169},[46,29049,174],{"class":173},[46,29051,28403],{"class":173},[46,29053,29054],{"class":180}," --add-repo",[46,29056,29057],{"class":173}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[46,29059,29060],{"class":48,"line":200},[46,29061,616],{"emptyLinePlaceholder":615},[46,29063,29064],{"class":48,"line":211},[46,29065,29066],{"class":2253},"# 如果是Feodra41+（DNF5）\n",[46,29068,29069,29071,29073,29075,29077],{"class":48,"line":222},[46,29070,170],{"class":169},[46,29072,174],{"class":173},[46,29074,28403],{"class":173},[46,29076,28406],{"class":173},[46,29078,29079],{"class":180}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[23,29081,29082],{"start":200},[26,29083,29084],{},"安装NVIDIA Container Toolki包",[36,29086,29088],{"className":160,"code":29087,"language":162,"meta":41,"style":41},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[43,29089,29090,29095,29108,29112,29117],{"__ignoreMap":41},[46,29091,29092],{"class":48,"line":49},[46,29093,29094],{"class":2253},"# 如果是RHEL或者Rocky\n",[46,29096,29097,29099,29101,29103,29105],{"class":48,"line":60},[46,29098,170],{"class":169},[46,29100,174],{"class":173},[46,29102,177],{"class":173},[46,29104,181],{"class":180},[46,29106,29107],{"class":173}," nvidia-container-toolkit\n",[46,29109,29110],{"class":48,"line":200},[46,29111,616],{"emptyLinePlaceholder":615},[46,29113,29114],{"class":48,"line":211},[46,29115,29116],{"class":2253},"# 如果是Fedora\n",[46,29118,29119,29121,29123,29125,29127],{"class":48,"line":222},[46,29120,170],{"class":169},[46,29122,174],{"class":173},[46,29124,177],{"class":173},[46,29126,181],{"class":180},[46,29128,29107],{"class":173},[23,29130,29131],{"start":211},[26,29132,29133,29134,29136],{},"安装nvidia-docker2 ： 在Fedora上使用",[43,29135,28281],{},"进行安装",[36,29138,29140],{"className":160,"code":29139,"language":162,"meta":41,"style":41},"sudo dnf install -y nvidia-docker2\n",[43,29141,29142],{"__ignoreMap":41},[46,29143,29144,29146,29148,29150,29152],{"class":48,"line":49},[46,29145,170],{"class":169},[46,29147,174],{"class":173},[46,29149,177],{"class":173},[46,29151,181],{"class":180},[46,29153,28943],{"class":173},[23,29155,29156],{"start":222},[26,29157,29158],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[36,29160,29161],{"className":160,"code":28951,"language":162,"meta":41,"style":41},[43,29162,29163],{"__ignoreMap":41},[46,29164,29165,29167,29169,29171,29173],{"class":48,"line":49},[46,29166,170],{"class":169},[46,29168,28960],{"class":173},[46,29170,28963],{"class":173},[46,29172,28966],{"class":173},[46,29174,28969],{"class":180},[23,29176,29177],{"start":636},[26,29178,29179],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[36,29181,29182],{"className":160,"code":28977,"language":162,"meta":41,"style":41},[43,29183,29184],{"__ignoreMap":41},[46,29185,29186,29188,29190,29192],{"class":48,"line":49},[46,29187,170],{"class":169},[46,29189,28502],{"class":173},[46,29191,28988],{"class":173},[46,29193,28481],{"class":173},[19,29195,29196],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[19,29198,29199],{},"方法：",[19,29201,29202],{},"1️⃣nvidia-smi",[19,29204,29205],{},"2️⃣运行nvidia cuda 容器进行测试",[36,29207,29209],{"className":160,"code":29208,"language":162,"meta":41,"style":41},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[43,29210,29211],{"__ignoreMap":41},[46,29212,29213,29215,29217,29220,29223,29226,29229,29232],{"class":48,"line":49},[46,29214,170],{"class":169},[46,29216,28310],{"class":173},[46,29218,29219],{"class":173}," run",[46,29221,29222],{"class":180}," --rm",[46,29224,29225],{"class":180}," --gpus",[46,29227,29228],{"class":173}," all",[46,29230,29231],{"class":173}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[46,29233,29234],{"class":173}," nvidia-smi\n",[19,29236,29237],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[19,29239,29240],{},[3514,29241],{"alt":41,"src":29242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[479,29244,29246],{"id":29245},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[19,29248,29249],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[19,29251,29252],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[19,29254,29255],{},[2426,29256,29257],{"href":29257,"rel":29258},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[25862],[19,29260,29261],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[19,29263,29264],{},"我们只需要找到对应的Docker镜像当底包即可。",[19,29266,29267],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[97,29269,29270,29286],{},[100,29271,29272],{},[103,29273,29274,29277,29280,29283],{},[106,29275,29276],{"align":108},"镜像类型",[106,29278,29279],{"align":108},"适用场景",[106,29281,29282],{"align":108},"示例标签",[106,29284,29285],{"align":108},"大小",[120,29287,29288,29302,29316],{},[103,29289,29290,29293,29296,29299],{},[125,29291,29292],{"align":108},"base",[125,29294,29295],{"align":108},"仅需 CUDA 运行时库",[125,29297,29298],{"align":108},"12.4.0-base-ubuntu22.04",[125,29300,29301],{"align":108},"~240MB",[103,29303,29304,29307,29310,29313],{},[125,29305,29306],{"align":108},"runtime",[125,29308,29309],{"align":108},"部署编译后的应用（含数学库）",[125,29311,29312],{"align":108},"12.4.0-runtime-ubuntu22.04",[125,29314,29315],{"align":108},"~2GB",[103,29317,29318,29321,29324,29327],{},[125,29319,29320],{"align":108},"devel",[125,29322,29323],{"align":108},"开发环境（含编译工具）",[125,29325,29326],{"align":108},"12.4.0-devel-ubuntu22.04",[125,29328,29329],{"align":108},"~3GB",[19,29331,29332,29333,29336],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[43,29334,29335],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[19,29338,29339],{},[3514,29340],{"alt":41,"src":29341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[19,29343,29344],{},"在dockerfile里就可以开头这么写：",[36,29346,29348],{"className":160,"code":29347,"language":162,"meta":41,"style":41},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[43,29349,29350,29355],{"__ignoreMap":41},[46,29351,29352],{"class":48,"line":49},[46,29353,29354],{"class":2253},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[46,29356,29357,29360],{"class":48,"line":60},[46,29358,29359],{"class":169},"FROM",[46,29361,29362],{"class":173}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[479,29364,29366],{"id":29365},"_34配置以太网","3.4.配置以太网",[19,29368,29369],{},"指定网络模式",[36,29371,29373],{"className":160,"code":29372,"language":162,"meta":41,"style":41},"--net=host \\\n",[43,29374,29375],{"__ignoreMap":41},[46,29376,29377,29380,29382,29385],{"class":48,"line":49},[46,29378,29379],{"class":56},"--net",[46,29381,79],{"class":52},[46,29383,29384],{"class":173},"host",[46,29386,184],{"class":169},[19,29388,29389],{},"启动参数里加上这行即可。具体在下方",[19,29391,29392],{},"--net选项：指定网络模式，该选项有以下参数可选：",[3191,29394,29395,29398,29401,29404],{},[26,29396,29397],{},"--net=bridge:默认选项，表示连接到默认的网桥",[26,29399,29400],{},"--net=host:容器使用宿主机的网络",[26,29402,29403],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[26,29405,29406],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[2098,29408,29409],{},"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":41,"searchDepth":60,"depth":60,"links":29411},[29412,29413,29414,29415],{"id":28726,"depth":200,"text":28727},{"id":28793,"depth":200,"text":28794},{"id":29245,"depth":200,"text":29246},{"id":29365,"depth":200,"text":29366},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":28715,"description":28723},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":29422,"title":29423,"body":29424,"description":29431,"extension":2125,"meta":29437,"navigation":615,"path":29438,"seo":29439,"stem":29440,"__hash__":29441},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":29425,"toc":29435},[29426,29429,29432],[10,29427,29423],{"id":29428},"_4dockerhub换源",[19,29430,29431],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[19,29433,29434],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":41,"searchDepth":60,"depth":60,"links":29436},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":29423,"description":29431},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":29443,"title":29444,"body":29445,"description":41,"extension":2125,"meta":30456,"navigation":615,"path":30457,"seo":30458,"stem":30459,"__hash__":30460},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":29446,"toc":30451},[29447,29450,29454,29460,29464,29467,29807,29810,29813,29816,29821,29826,29829,29832,29835,29838,29857,29860,29871,29877,30059,30069,30085,30348,30350,30374,30389,30398,30448],[10,29448,29444],{"id":29449},"_5docker命令学习",[479,29451,29453],{"id":29452},"_51参考文档","5.1.参考文档",[19,29455,29456],{},[2426,29457,29458],{"href":29458,"rel":29459},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[25862],[479,29461,29463],{"id":29462},"_52常用命令","5.2.常用命令",[19,29465,29466],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[97,29468,29469,29482],{},[100,29470,29471],{},[103,29472,29473,29476,29479],{},[106,29474,29475],{"align":108},"命令",[106,29477,29478],{"align":108},"描述",[106,29480,29481],{"align":108},"示例",[120,29483,29484,29495,29506,29517,29528,29539,29550,29561,29571,29582,29593,29604,29614,29625,29636,29647,29657,29667,29677,29687,29698,29709,29720,29731,29742,29753,29763,29774,29785,29796],{},[103,29485,29486,29489,29492],{},[125,29487,29488],{"align":108},"docker run",[125,29490,29491],{"align":108},"创建并启动一个新的容器。",[125,29493,29494],{"align":108},"docker run -it ubuntu bash",[103,29496,29497,29500,29503],{},[125,29498,29499],{"align":108},"docker build",[125,29501,29502],{"align":108},"通过指定的 Dockerfile 创建一个新的镜像。",[125,29504,29505],{"align":108},"docker build -t myimage .",[103,29507,29508,29511,29514],{},[125,29509,29510],{"align":108},"docker pull",[125,29512,29513],{"align":108},"从 Docker 仓库拉取镜像。",[125,29515,29516],{"align":108},"docker pull ubuntu",[103,29518,29519,29522,29525],{},[125,29520,29521],{"align":108},"docker push",[125,29523,29524],{"align":108},"将本地镜像推送到 Docker 仓库。",[125,29526,29527],{"align":108},"docker push myimage",[103,29529,29530,29533,29536],{},[125,29531,29532],{"align":108},"docker stop",[125,29534,29535],{"align":108},"停止一个正在运行的容器。",[125,29537,29538],{"align":108},"docker stop container_id",[103,29540,29541,29544,29547],{},[125,29542,29543],{"align":108},"docker start",[125,29545,29546],{"align":108},"启动一个已经存在的容器。",[125,29548,29549],{"align":108},"docker start container_id",[103,29551,29552,29555,29558],{},[125,29553,29554],{"align":108},"docker restart",[125,29556,29557],{"align":108},"重新启动容器。",[125,29559,29560],{"align":108},"docker restart container_id",[103,29562,29563,29566,29569],{},[125,29564,29565],{"align":108},"docker ps",[125,29567,29568],{"align":108},"列出当前正在运行的容器。",[125,29570,29565],{"align":108},[103,29572,29573,29576,29579],{},[125,29574,29575],{"align":108},"docker rm",[125,29577,29578],{"align":108},"删除一个或多个停止的容器。",[125,29580,29581],{"align":108},"docker rm container_id",[103,29583,29584,29587,29590],{},[125,29585,29586],{"align":108},"docker exec",[125,29588,29589],{"align":108},"在一个正在运行的容器中执行命令。",[125,29591,29592],{"align":108},"docker exec -it container_id bash",[103,29594,29595,29598,29601],{},[125,29596,29597],{"align":108},"docker logs",[125,29599,29600],{"align":108},"查看容器的日志输出。",[125,29602,29603],{"align":108},"docker logs container_id",[103,29605,29606,29609,29612],{},[125,29607,29608],{"align":108},"docker images",[125,29610,29611],{"align":108},"列出本地所有镜像。",[125,29613,29608],{"align":108},[103,29615,29616,29619,29622],{},[125,29617,29618],{"align":108},"docker rmi",[125,29620,29621],{"align":108},"删除一个或多个镜像。",[125,29623,29624],{"align":108},"docker rmi myimage",[103,29626,29627,29630,29633],{},[125,29628,29629],{"align":108},"docker network",[125,29631,29632],{"align":108},"管理 Docker 网络。",[125,29634,29635],{"align":108},"docker network ls",[103,29637,29638,29641,29644],{},[125,29639,29640],{"align":108},"docker volume",[125,29642,29643],{"align":108},"管理 Docker 数据卷。",[125,29645,29646],{"align":108},"docker volume ls",[103,29648,29649,29652,29655],{},[125,29650,29651],{"align":108},"docker-compose up",[125,29653,29654],{"align":108},"启动 docker-compose.yml 中定义的所有服务。",[125,29656,29651],{"align":108},[103,29658,29659,29662,29665],{},[125,29660,29661],{"align":108},"docker-compose down",[125,29663,29664],{"align":108},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[125,29666,29661],{"align":108},[103,29668,29669,29672,29675],{},[125,29670,29671],{"align":108},"docker info",[125,29673,29674],{"align":108},"显示 Docker 系统的详细信息。",[125,29676,29671],{"align":108},[103,29678,29679,29682,29685],{},[125,29680,29681],{"align":108},"docker stats",[125,29683,29684],{"align":108},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[125,29686,29681],{"align":108},[103,29688,29689,29692,29695],{},[125,29690,29691],{"align":108},"docker inspect",[125,29693,29694],{"align":108},"查看容器或镜像的详细信息（JSON 格式）。",[125,29696,29697],{"align":108},"docker inspect container_id",[103,29699,29700,29703,29706],{},[125,29701,29702],{"align":108},"docker save",[125,29704,29705],{"align":108},"将一个镜像保存为 tar 文件。",[125,29707,29708],{"align":108},"docker save -o myimage.tar myimage",[103,29710,29711,29714,29717],{},[125,29712,29713],{"align":108},"docker load",[125,29715,29716],{"align":108},"从 tar 文件中加载镜像。",[125,29718,29719],{"align":108},"docker load -i myimage.tar",[103,29721,29722,29725,29728],{},[125,29723,29724],{"align":108},"docker tag",[125,29726,29727],{"align":108},"为镜像添加标签（tag）。",[125,29729,29730],{"align":108},"docker tag myimage myimage:v1",[103,29732,29733,29736,29739],{},[125,29734,29735],{"align":108},"docker buildx build",[125,29737,29738],{"align":108},"使用 Buildx 构建多架构镜像。",[125,29740,29741],{"align":108},"docker buildx build -t myimage .",[103,29743,29744,29747,29750],{},[125,29745,29746],{"align":108},"docker buildx create",[125,29748,29749],{"align":108},"创建一个新的 Buildx 构建实例。",[125,29751,29752],{"align":108},"docker buildx create –use",[103,29754,29755,29758,29761],{},[125,29756,29757],{"align":108},"docker buildx ls",[125,29759,29760],{"align":108},"列出所有可用的 Buildx 构建实例。",[125,29762,29757],{"align":108},[103,29764,29765,29768,29771],{},[125,29766,29767],{"align":108},"docker buildx use",[125,29769,29770],{"align":108},"设置当前的 Buildx 构建实例。",[125,29772,29773],{"align":108},"docker buildx use mybuilder",[103,29775,29776,29779,29782],{},[125,29777,29778],{"align":108},"docker buildx bake",[125,29780,29781],{"align":108},"使用 Bake 文件批量构建镜像。",[125,29783,29784],{"align":108},"docker buildx bake -f bake.hcl",[103,29786,29787,29790,29793],{},[125,29788,29789],{"align":108},"docker buildx build –push",[125,29791,29792],{"align":108},"构建镜像并推送到镜像仓库。",[125,29794,29795],{"align":108},"docker buildx build –push -t myimage .",[103,29797,29798,29801,29804],{},[125,29799,29800],{"align":108},"docker buildx build –platform",[125,29802,29803],{"align":108},"构建镜像并为多个平台生成支持。",[125,29805,29806],{"align":108},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[19,29808,29809],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[19,29811,29812],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[19,29814,29815],{},"docker images 可以查看已经下载的镜像",[19,29817,29818],{},[3514,29819],{"alt":41,"src":29820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[19,29822,29823],{},[2339,29824,29825],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[19,29827,29828],{},"docker rmi $(docker images -q) 删除所有的镜像",[19,29830,29831],{},"docker container logs 查看容器日志",[19,29833,29834],{},"docker top 查看容器里的进程",[19,29836,29837],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[36,29839,29841],{"className":160,"code":29840,"language":162,"meta":41,"style":41},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[43,29842,29843],{"__ignoreMap":41},[46,29844,29845,29848,29851,29854],{"class":48,"line":49},[46,29846,29847],{"class":169},"如：docker",[46,29849,29850],{"class":173}," cp",[46,29852,29853],{"class":173}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[46,29855,29856],{"class":173}," \u002Fmydata\u002Fnginx\n",[19,29858,29859],{},"docker run时在启动容器的时候会有几个常用的选项：",[3191,29861,29862,29865,29868],{},[26,29863,29864],{},"-d选项：表示后台运行",[26,29866,29867],{},"-P选项：随机端口映射",[26,29869,29870],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[479,29872,29874],{"id":29873},"_53run命令的参数非常重要",[2339,29875,29876],{},"5.3.run命令的参数（非常重要）",[97,29878,29879,29892],{},[100,29880,29881],{},[103,29882,29883,29886,29889],{},[106,29884,29885],{"align":108},"参数\u002F配置",[106,29887,29888],{"align":108},"功能说明",[106,29890,29891],{"align":108},"重要性与参考依据",[120,29893,29894,29905,29916,29927,29938,29949,29960,29971,29982,29993,30004,30015,30026,30037,30048],{},[103,29895,29896,29899,29902],{},[125,29897,29898],{"align":108},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[125,29900,29901],{"align":108},"指定容器名称，便于后续管理",[125,29903,29904],{"align":108},"替代随机生成的容器名。",[103,29906,29907,29910,29913],{},[125,29908,29909],{"align":108},"–gpus all",[125,29911,29912],{"align":108},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[125,29914,29915],{"align":108},"用于CUDA加速等GPU依赖任务。",[103,29917,29918,29921,29924],{},[125,29919,29920],{"align":108},"-e NVIDIA_DRIVER_CAPABILITIES=all",[125,29922,29923],{"align":108},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[125,29925,29926],{"align":108},"确保容器内GPU功能完整67。",[103,29928,29929,29932,29935],{},[125,29930,29931],{"align":108},"-dit",[125,29933,29934],{"align":108},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[125,29936,29937],{"align":108},"允许容器在后台运行并支持交互操作。",[103,29939,29940,29943,29946],{},[125,29941,29942],{"align":108},"–privileged",[125,29944,29945],{"align":108},"赋予容器完全主机权限（可访问设备、内核模块等）",[125,29947,29948],{"align":108},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[103,29950,29951,29954,29957],{},[125,29952,29953],{"align":108},"–net=host",[125,29955,29956],{"align":108},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[125,29958,29959],{"align":108},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[103,29961,29962,29965,29968],{},[125,29963,29964],{"align":108},"–group-add audio–group-add video–group-add dialout",[125,29966,29967],{"align":108},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[125,29969,29970],{"align":108},"避免权限问题（如避免无法调用摄像头、麦克风）。",[103,29972,29973,29976,29979],{},[125,29974,29975],{"align":108},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[125,29977,29978],{"align":108},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[125,29980,29981],{"align":108},"支持容器内运行图形界面应用（如OpenCV可视化）。",[103,29983,29984,29987,29990],{},[125,29985,29986],{"align":108},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[125,29988,29989],{"align":108},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[125,29991,29992],{"align":108},"实现容器内图形显示。",[103,29994,29995,29998,30001],{},[125,29996,29997],{"align":108},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[125,29999,30000],{"align":108},"挂载X11认证文件（只读）",[125,30002,30003],{"align":108},"确保容器有权连接宿主机显示服务。",[103,30005,30006,30009,30012],{},[125,30007,30008],{"align":108},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[125,30010,30011],{"align":108},"挂载Wayland显示协议相关目录",[125,30013,30014],{"align":108},"支持Wayland协议的图形显示。",[103,30016,30017,30020,30023],{},[125,30018,30019],{"align":108},"–ulimit nofile=1024:524288",[125,30021,30022],{"align":108},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[125,30024,30025],{"align":108},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[103,30027,30028,30031,30034],{},[125,30029,30030],{"align":108},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[125,30032,30033],{"align":108},"挂载宿主机用户目录到容器内同名路径",[125,30035,30036],{"align":108},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[103,30038,30039,30042,30045],{},[125,30040,30041],{"align":108},"-w \u002Fhome\u002Ftungchiahui",[125,30043,30044],{"align":108},"设置容器启动后的默认工作目录",[125,30046,30047],{"align":108},"直接进入项目路径，方便执行命令2324。",[103,30049,30050,30053,30056],{},[125,30051,30052],{"align":108},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[125,30054,30055],{"align":108},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[125,30057,30058],{"align":108},"提供预配置的深度学习与机器人开发环境。",[19,30060,30061,30062,30064,30065,30068],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[43,30063,170],{},"加不加",[43,30066,30067],{},"sudo -E","都无所谓。",[19,30070,30071,30072,30074,30075,30077,30078,30081,30082,30084],{},"用户已经被加到docker组了，不用",[43,30073,170],{},"也行跑，其次，",[43,30076,170],{},"运行的话，你的",[43,30079,30080],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[43,30083,30080],{},"更不可能变了。",[36,30086,30088],{"className":160,"code":30087,"language":162,"meta":41,"style":41},"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",[43,30089,30090,30103,30113,30123,30135,30142,30149,30156,30166,30175,30184,30198,30210,30222,30231,30241,30250,30265,30298,30325,30336,30343],{"__ignoreMap":41},[46,30091,30092,30094,30096,30098,30101],{"class":48,"line":49},[46,30093,170],{"class":169},[46,30095,28310],{"class":173},[46,30097,29219],{"class":173},[46,30099,30100],{"class":180}," --name=ros_opencv_cuda",[46,30102,184],{"class":180},[46,30104,30105,30108,30111],{"class":48,"line":60},[46,30106,30107],{"class":56},"--gpus ",[46,30109,30110],{"class":173},"all",[46,30112,184],{"class":180},[46,30114,30115,30118,30121],{"class":48,"line":200},[46,30116,30117],{"class":56},"-e ",[46,30119,30120],{"class":173},"NVIDIA_DRIVER_CAPABILITIES=all",[46,30122,184],{"class":180},[46,30124,30125,30127,30130,30133],{"class":48,"line":211},[46,30126,30117],{"class":56},[46,30128,30129],{"class":173},"DISPLAY=",[46,30131,30132],{"class":56},"$DISPLAY ",[46,30134,28166],{"class":180},[46,30136,30137,30140],{"class":48,"line":222},[46,30138,30139],{"class":56},"-dit ",[46,30141,28166],{"class":180},[46,30143,30144,30147],{"class":48,"line":636},[46,30145,30146],{"class":56},"--privileged ",[46,30148,28166],{"class":180},[46,30150,30151,30154],{"class":48,"line":641},[46,30152,30153],{"class":56},"--net=host ",[46,30155,28166],{"class":180},[46,30157,30158,30161,30164],{"class":48,"line":653},[46,30159,30160],{"class":56},"--group-add ",[46,30162,30163],{"class":173},"audio",[46,30165,184],{"class":180},[46,30167,30168,30170,30173],{"class":48,"line":659},[46,30169,30160],{"class":56},[46,30171,30172],{"class":173},"video",[46,30174,184],{"class":180},[46,30176,30177,30179,30182],{"class":48,"line":665},[46,30178,30160],{"class":56},[46,30180,30181],{"class":173},"dialout",[46,30183,184],{"class":180},[46,30185,30186,30188,30191,30193,30196],{"class":48,"line":670},[46,30187,30117],{"class":56},[46,30189,30190],{"class":173},"XAUTHORITY=",[46,30192,30080],{"class":56},[46,30194,30195],{"class":173},"\u002F.Xauthority",[46,30197,184],{"class":180},[46,30199,30200,30202,30205,30208],{"class":48,"line":676},[46,30201,30117],{"class":56},[46,30203,30204],{"class":173},"WAYLAND_DISPLAY=",[46,30206,30207],{"class":56},"$WAYLAND_DISPLAY ",[46,30209,28166],{"class":180},[46,30211,30212,30214,30217,30220],{"class":48,"line":682},[46,30213,30117],{"class":56},[46,30215,30216],{"class":173},"XDG_RUNTIME_DIR=",[46,30218,30219],{"class":56},"$XDG_RUNTIME_DIR ",[46,30221,28166],{"class":180},[46,30223,30224,30226,30229],{"class":48,"line":688},[46,30225,30117],{"class":56},[46,30227,30228],{"class":173},"QT_QPA_PLATFORM=xcb",[46,30230,184],{"class":180},[46,30232,30233,30236,30239],{"class":48,"line":693},[46,30234,30235],{"class":56},"-v ",[46,30237,30238],{"class":173},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[46,30240,184],{"class":180},[46,30242,30243,30245,30248],{"class":48,"line":699},[46,30244,30235],{"class":56},[46,30246,30247],{"class":173},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[46,30249,184],{"class":180},[46,30251,30252,30255,30258,30260,30263],{"class":48,"line":705},[46,30253,30254],{"class":56},"-v $HOME",[46,30256,30257],{"class":173},"\u002F.Xauthority:",[46,30259,30080],{"class":56},[46,30261,30262],{"class":173},"\u002F.Xauthority:ro",[46,30264,184],{"class":180},[46,30266,30267,30269,30272,30274,30277,30280,30282,30285,30287,30289,30291,30293,30296],{"class":48,"line":711},[46,30268,30235],{"class":56},[46,30270,30271],{"class":173},"\u002Frun\u002Fuser\u002F",[46,30273,27092],{"class":56},[46,30275,30276],{"class":169},"id",[46,30278,30279],{"class":180}," -u",[46,30281,2616],{"class":56},[46,30283,30284],{"class":173},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[46,30286,27092],{"class":56},[46,30288,30276],{"class":169},[46,30290,30279],{"class":180},[46,30292,2616],{"class":56},[46,30294,30295],{"class":173},"\u002Fwayland-0",[46,30297,184],{"class":180},[46,30299,30300,30302,30304,30306,30308,30310,30312,30315,30317,30319,30321,30323],{"class":48,"line":717},[46,30301,30235],{"class":56},[46,30303,30271],{"class":173},[46,30305,27092],{"class":56},[46,30307,30276],{"class":169},[46,30309,30279],{"class":180},[46,30311,2616],{"class":56},[46,30313,30314],{"class":173},":\u002Frun\u002Fuser\u002F",[46,30316,27092],{"class":56},[46,30318,30276],{"class":169},[46,30320,30279],{"class":180},[46,30322,15716],{"class":56},[46,30324,28166],{"class":180},[46,30326,30327,30329,30331,30334],{"class":48,"line":723},[46,30328,30254],{"class":56},[46,30330,3045],{"class":173},[46,30332,30333],{"class":56},"$HOME ",[46,30335,28166],{"class":180},[46,30337,30338,30341],{"class":48,"line":729},[46,30339,30340],{"class":56},"-w $HOME ",[46,30342,28166],{"class":180},[46,30344,30345],{"class":48,"line":735},[46,30346,30347],{"class":56},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[19,30349,11029],{},[23,30351,30352,30360,30363,30366],{},[26,30353,30354,15797,30356,30359],{},[43,30355,30120],{},[43,30357,30358],{},"--gpus all","没有英伟达显卡请注释。",[26,30361,30362],{},"--name后面请自己为容器起名。",[26,30364,30365],{},"最后一行仓库名称请你自己找对应的镜像填上。",[26,30367,30368,30369,365],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[25555,30370,30371],{},[2339,30372,30373],{},"请不要加",[36,30375,30377],{"className":160,"code":30376,"language":162,"meta":41,"style":41},"--ulimit nofile=1024:524288 \\\n",[43,30378,30379],{"__ignoreMap":41},[46,30380,30381,30384,30387],{"class":48,"line":49},[46,30382,30383],{"class":169},"--ulimit",[46,30385,30386],{"class":173}," nofile=1024:524288",[46,30388,184],{"class":180},[19,30390,30391,30392,30397],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[25555,30393,30394],{},[2339,30395,30396],{},"不建议","**.**",[36,30399,30401],{"className":160,"code":30400,"language":162,"meta":41,"style":41},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[43,30402,30403,30430,30439],{"__ignoreMap":41},[46,30404,30405,30408,30411,30413,30415,30417,30419,30421,30423,30426,30428],{"class":48,"line":49},[46,30406,30407],{"class":169},"--user",[46,30409,30410],{"class":56}," $(",[46,30412,30276],{"class":169},[46,30414,30279],{"class":180},[46,30416,2616],{"class":56},[46,30418,3045],{"class":173},[46,30420,27092],{"class":56},[46,30422,30276],{"class":169},[46,30424,30425],{"class":180}," -g",[46,30427,15716],{"class":56},[46,30429,28166],{"class":180},[46,30431,30432,30434,30437],{"class":48,"line":60},[46,30433,30235],{"class":56},[46,30435,30436],{"class":173},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[46,30438,184],{"class":180},[46,30440,30441,30443,30446],{"class":48,"line":200},[46,30442,30235],{"class":56},[46,30444,30445],{"class":173},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[46,30447,184],{"class":180},[2098,30449,30450],{},"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":41,"searchDepth":60,"depth":60,"links":30452},[30453,30454,30455],{"id":29452,"depth":200,"text":29453},{"id":29462,"depth":200,"text":29463},{"id":29873,"depth":200,"text":29876},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":29444,"description":41},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":30462,"title":30463,"body":30464,"description":41,"extension":2125,"meta":32086,"navigation":615,"path":32087,"seo":32088,"stem":32089,"__hash__":32090},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":30465,"toc":32081},[30466,30469,30473,30476,30698,30702,30706,30709,30815,30820,30823,30828,30831,30836,30839,30844,30847,30859,30862,30867,30874,30902,30909,30985,30990,30993,31016,31018,31093,31098,31101,31105,31113,31118,31123,31127,31138,31144,31147,31150,31173,31176,31179,31207,31210,31213,31678,31681,31686,31691,31695,31718,31723,31727,31731,31734,31737,31740,31767,31770,31773,31791,31794,31797,31819,31827,31832,31837,31841,31844,31847,31850,31853,31898,31901,31919,31922,31927,31930,31951,31954,32010,32013,32018,32022,32025,32032,32035,32038,32043,32046,32062,32065,32078],[10,30467,30463],{"id":30468},"_6手动创建docker镜像",[479,30470,30472],{"id":30471},"_61dockerfile","6.1.DockerFile",[19,30474,30475],{},"常用命令：",[97,30477,30478,30489],{},[100,30479,30480],{},[103,30481,30482,30485,30487],{},[106,30483,30484],{"align":108},"指令",[106,30486,27861],{"align":108},[106,30488,29481],{"align":108},[120,30490,30491,30501,30517,30528,30539,30550,30561,30572,30583,30597,30611,30622,30636,30647,30658,30672,30687],{},[103,30492,30493,30495,30498],{},[125,30494,29359],{"align":108},[125,30496,30497],{"align":108},"指定基础镜像，是 Dockerfile 的起点",[125,30499,30500],{"align":108},"FROM ubuntu:22.04",[103,30502,30503,30506,30509],{},[125,30504,30505],{"align":108},"LABEL",[125,30507,30508],{"align":108},"添加元数据（如作者、版本等）",[125,30510,30511,30512,30516],{"align":108},"LABEL maintainer=”",[2426,30513,30515],{"href":30514},"mailto:you@example.com","you@example.com","”",[103,30518,30519,30522,30525],{},[125,30520,30521],{"align":108},"ENV",[125,30523,30524],{"align":108},"设置环境变量",[125,30526,30527],{"align":108},"ENV PORT=8080",[103,30529,30530,30533,30536],{},[125,30531,30532],{"align":108},"ARG",[125,30534,30535],{"align":108},"构建参数，只在构建期间可用",[125,30537,30538],{"align":108},"ARG VERSION=1.0",[103,30540,30541,30544,30547],{},[125,30542,30543],{"align":108},"RUN",[125,30545,30546],{"align":108},"构建镜像时运行命令",[125,30548,30549],{"align":108},"RUN apt-get update && apt-get install -y curl",[103,30551,30552,30555,30558],{},[125,30553,30554],{"align":108},"COPY",[125,30556,30557],{"align":108},"复制文件到镜像中",[125,30559,30560],{"align":108},"COPY . \u002Fapp",[103,30562,30563,30566,30569],{},[125,30564,30565],{"align":108},"ADD",[125,30567,30568],{"align":108},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[125,30570,30571],{"align":108},"ADD archive.tar.gz \u002Fdata\u002F",[103,30573,30574,30577,30580],{},[125,30575,30576],{"align":108},"WORKDIR",[125,30578,30579],{"align":108},"设置工作目录",[125,30581,30582],{"align":108},"WORKDIR \u002Fopt",[103,30584,30585,30588,30591],{},[125,30586,30587],{"align":108},"CMD",[125,30589,30590],{"align":108},"设置容器启动时默认命令（可被 docker run 覆盖）",[125,30592,30593,30594],{"align":108},"CMD ",[46,30595,30596],{},"“node”, “index.js”",[103,30598,30599,30602,30605],{},[125,30600,30601],{"align":108},"ENTRYPOINT",[125,30603,30604],{"align":108},"设置容器启动时固定命令（通常用于 CLI 工具等）",[125,30606,30607,30608],{"align":108},"ENTRYPOINT ",[46,30609,30610],{},"“python3”",[103,30612,30613,30616,30619],{},[125,30614,30615],{"align":108},"EXPOSE",[125,30617,30618],{"align":108},"声明镜像内服务监听的端口（不会自动映射）",[125,30620,30621],{"align":108},"EXPOSE 80",[103,30623,30624,30627,30630],{},[125,30625,30626],{"align":108},"VOLUME",[125,30628,30629],{"align":108},"声明数据卷挂载点",[125,30631,30632,30633],{"align":108},"VOLUME ",[46,30634,30635],{},"“\u002Fdata”",[103,30637,30638,30641,30644],{},[125,30639,30640],{"align":108},"USER",[125,30642,30643],{"align":108},"设置后续命令执行的用户",[125,30645,30646],{"align":108},"USER appuser",[103,30648,30649,30652,30655],{},[125,30650,30651],{"align":108},"ONBUILD",[125,30653,30654],{"align":108},"当镜像作为其他镜像基础镜像时触发的构建指令",[125,30656,30657],{"align":108},"ONBUILD COPY . \u002Fsrc",[103,30659,30660,30663,30666],{},[125,30661,30662],{"align":108},"SHELL",[125,30664,30665],{"align":108},"更改默认 shell，比如将 sh -c 改为 bash -c",[125,30667,30668,30669],{"align":108},"SHELL ",[46,30670,30671],{},"“\u002Fbin\u002Fbash”, “-c”",[103,30673,30674,30677,30680],{},[125,30675,30676],{"align":108},"HEALTHCHECK",[125,30678,30679],{"align":108},"定义容器运行时的健康检查命令",[125,30681,30682,30683],{"align":108},"`HEALTHCHECK CMD curl –fail ",[2426,30684,30685],{"href":30685,"rel":30686},"http:\u002F\u002Flocalhost:8080",[25862],[103,30688,30689,30692,30695],{},[125,30690,30691],{"align":108},"STOPSIGNAL",[125,30693,30694],{"align":108},"容器停止时发送的信号",[125,30696,30697],{"align":108},"STOPSIGNAL SIGKILL",[479,30699,30701],{"id":30700},"_62自己创建容器","6.2.自己创建容器",[23999,30703,30705],{"id":30704},"_621手动创建","6.2.1.手动创建",[19,30707,30708],{},"在x86电脑上编译x86的：",[36,30710,30712],{"className":160,"code":30711,"language":162,"meta":41,"style":41},"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",[43,30713,30714,30730,30734,30747,30751,30764,30768,30781,30785,30798,30802],{"__ignoreMap":41},[46,30715,30716,30718,30721,30724,30727],{"class":48,"line":49},[46,30717,28542],{"class":169},[46,30719,30720],{"class":173}," build",[46,30722,30723],{"class":180}," -t",[46,30725,30726],{"class":173}," ros-melodic-cuda118-cudnn8-bionic:latest",[46,30728,30729],{"class":173}," .\n",[46,30731,30732],{"class":48,"line":60},[46,30733,616],{"emptyLinePlaceholder":615},[46,30735,30736,30738,30740,30742,30745],{"class":48,"line":200},[46,30737,28542],{"class":169},[46,30739,30720],{"class":173},[46,30741,30723],{"class":180},[46,30743,30744],{"class":173}," ros-noetic-focal:latest",[46,30746,30729],{"class":173},[46,30748,30749],{"class":48,"line":211},[46,30750,616],{"emptyLinePlaceholder":615},[46,30752,30753,30755,30757,30759,30762],{"class":48,"line":222},[46,30754,28542],{"class":169},[46,30756,30720],{"class":173},[46,30758,30723],{"class":180},[46,30760,30761],{"class":173}," ros-humble-jammy:latest",[46,30763,30729],{"class":173},[46,30765,30766],{"class":48,"line":636},[46,30767,616],{"emptyLinePlaceholder":615},[46,30769,30770,30772,30774,30776,30779],{"class":48,"line":641},[46,30771,28542],{"class":169},[46,30773,30720],{"class":173},[46,30775,30723],{"class":180},[46,30777,30778],{"class":173}," ros-jazzy-noble:latest",[46,30780,30729],{"class":173},[46,30782,30783],{"class":48,"line":653},[46,30784,616],{"emptyLinePlaceholder":615},[46,30786,30787,30789,30791,30793,30796],{"class":48,"line":659},[46,30788,28542],{"class":169},[46,30790,30720],{"class":173},[46,30792,30723],{"class":180},[46,30794,30795],{"class":173}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[46,30797,30729],{"class":173},[46,30799,30800],{"class":48,"line":665},[46,30801,616],{"emptyLinePlaceholder":615},[46,30803,30804,30806,30808,30810,30813],{"class":48,"line":670},[46,30805,28542],{"class":169},[46,30807,30720],{"class":173},[46,30809,30723],{"class":180},[46,30811,30812],{"class":173}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[46,30814,30729],{"class":173},[19,30816,30817],{},[3514,30818],{"alt":41,"src":30819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[19,30821,30822],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[19,30824,30825],{},[3514,30826],{"alt":41,"src":30827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[19,30829,30830],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[23,30832,30833],{},[26,30834,30835],{},"创建 Docker Hub 账户",[19,30837,30838],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[23,30840,30841],{"start":60},[26,30842,30843],{},"登录 Docker Hub",[19,30845,30846],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[36,30848,30850],{"className":160,"code":30849,"language":162,"meta":41,"style":41},"docker login\n",[43,30851,30852],{"__ignoreMap":41},[46,30853,30854,30856],{"class":48,"line":49},[46,30855,28542],{"class":169},[46,30857,30858],{"class":173}," login\n",[19,30860,30861],{},"输入你的 Docker Hub 用户名和密码进行验证。",[23,30863,30864],{},[26,30865,30866],{},"为你的镜像打标签",[19,30868,30869,30870,30873],{},"Docker Hub 使用 ",[43,30871,30872],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[36,30875,30877],{"className":160,"code":30876,"language":162,"meta":41,"style":41},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[43,30878,30879],{"__ignoreMap":41},[46,30880,30881,30883,30886,30888,30891,30894,30897,30899],{"class":48,"line":49},[46,30882,28542],{"class":169},[46,30884,30885],{"class":173}," tag",[46,30887,30778],{"class":173},[46,30889,30890],{"class":52}," \u003C",[46,30892,30893],{"class":173},"你的用户",[46,30895,30896],{"class":56},"名",[46,30898,884],{"class":52},[46,30900,30901],{"class":173},"\u002Fros-jazzy-noble:latest\n",[19,30903,30904,30905,30908],{},"例如，如果你的 Docker Hub 用户名是 ",[43,30906,30907],{},"tungchiahui","，你应该执行：",[36,30910,30912],{"className":160,"code":30911,"language":162,"meta":41,"style":41},"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",[43,30913,30914,30925,30929,30940,30944,30955,30959,30970,30974],{"__ignoreMap":41},[46,30915,30916,30918,30920,30922],{"class":48,"line":49},[46,30917,28542],{"class":169},[46,30919,30885],{"class":173},[46,30921,30744],{"class":173},[46,30923,30924],{"class":173}," tungchiahui\u002Fros-noetic-focal:latest\n",[46,30926,30927],{"class":48,"line":60},[46,30928,616],{"emptyLinePlaceholder":615},[46,30930,30931,30933,30935,30937],{"class":48,"line":200},[46,30932,28542],{"class":169},[46,30934,30885],{"class":173},[46,30936,30761],{"class":173},[46,30938,30939],{"class":173}," tungchiahui\u002Fros-humble-jammy:latest\n",[46,30941,30942],{"class":48,"line":211},[46,30943,616],{"emptyLinePlaceholder":615},[46,30945,30946,30948,30950,30952],{"class":48,"line":222},[46,30947,28542],{"class":169},[46,30949,30885],{"class":173},[46,30951,30778],{"class":173},[46,30953,30954],{"class":173}," tungchiahui\u002Fros-jazzy-noble:latest\n",[46,30956,30957],{"class":48,"line":636},[46,30958,616],{"emptyLinePlaceholder":615},[46,30960,30961,30963,30965,30967],{"class":48,"line":641},[46,30962,28542],{"class":169},[46,30964,30885],{"class":173},[46,30966,30795],{"class":173},[46,30968,30969],{"class":173}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[46,30971,30972],{"class":48,"line":653},[46,30973,616],{"emptyLinePlaceholder":615},[46,30975,30976,30978,30980,30982],{"class":48,"line":659},[46,30977,28542],{"class":169},[46,30979,30885],{"class":173},[46,30981,30812],{"class":173},[46,30983,30984],{"class":173}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[23,30986,30987],{"start":60},[26,30988,30989],{},"推送镜像到 Docker Hub",[19,30991,30992],{},"使用以下命令将镜像推送到 Docker Hub：",[36,30994,30996],{"className":160,"code":30995,"language":162,"meta":41,"style":41},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[43,30997,30998],{"__ignoreMap":41},[46,30999,31000,31002,31005,31007,31009,31011,31013],{"class":48,"line":49},[46,31001,28542],{"class":169},[46,31003,31004],{"class":173}," push",[46,31006,30890],{"class":52},[46,31008,30893],{"class":173},[46,31010,30896],{"class":56},[46,31012,884],{"class":52},[46,31014,31015],{"class":173},"\u002Fros-noetic-jazzy-noble:latest\n",[19,31017,16635],{},[36,31019,31021],{"className":160,"code":31020,"language":162,"meta":41,"style":41},"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",[43,31022,31023,31031,31035,31043,31047,31055,31059,31068,31072,31080,31084],{"__ignoreMap":41},[46,31024,31025,31027,31029],{"class":48,"line":49},[46,31026,28542],{"class":169},[46,31028,31004],{"class":173},[46,31030,30924],{"class":173},[46,31032,31033],{"class":48,"line":60},[46,31034,616],{"emptyLinePlaceholder":615},[46,31036,31037,31039,31041],{"class":48,"line":200},[46,31038,28542],{"class":169},[46,31040,31004],{"class":173},[46,31042,30939],{"class":173},[46,31044,31045],{"class":48,"line":211},[46,31046,616],{"emptyLinePlaceholder":615},[46,31048,31049,31051,31053],{"class":48,"line":222},[46,31050,28542],{"class":169},[46,31052,31004],{"class":173},[46,31054,30954],{"class":173},[46,31056,31057],{"class":48,"line":636},[46,31058,616],{"emptyLinePlaceholder":615},[46,31060,31061,31063,31065],{"class":48,"line":641},[46,31062,28542],{"class":169},[46,31064,31004],{"class":173},[46,31066,31067],{"class":173}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[46,31069,31070],{"class":48,"line":653},[46,31071,616],{"emptyLinePlaceholder":615},[46,31073,31074,31076,31078],{"class":48,"line":659},[46,31075,28542],{"class":169},[46,31077,31004],{"class":173},[46,31079,30984],{"class":173},[46,31081,31082],{"class":48,"line":665},[46,31083,616],{"emptyLinePlaceholder":615},[46,31085,31086,31088,31090],{"class":48,"line":670},[46,31087,28542],{"class":169},[46,31089,31004],{"class":173},[46,31091,31092],{"class":173}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[23,31094,31095],{"start":200},[26,31096,31097],{},"验证推送成功",[19,31099,31100],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[19,31102,31103],{},[2339,31104,5802],{},[3191,31106,31107,31110],{},[26,31108,31109],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[26,31111,31112],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[19,31114,31115],{},[3514,31116],{"alt":41,"src":31117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[19,31119,31120],{},[3514,31121],{"alt":41,"src":31122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[23999,31124,31126],{"id":31125},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[19,31128,31129,31130,31133,31134,31137],{},"如果您想在 ",[2339,31131,31132],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[2339,31135,31136],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[19,31139,31140,31141],{},"1. ",[2339,31142,31143],{},"启用 Docker 跨平台构建",[19,31145,31146],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[19,31148,31149],{},"第一步：启用 buildx（只需执行一次）",[36,31151,31153],{"className":160,"code":31152,"language":162,"meta":41,"style":41},"docker buildx create --name multiarch_builder --use\n",[43,31154,31155],{"__ignoreMap":41},[46,31156,31157,31159,31162,31164,31167,31170],{"class":48,"line":49},[46,31158,28542],{"class":169},[46,31160,31161],{"class":173}," buildx",[46,31163,277],{"class":173},[46,31165,31166],{"class":180}," --name",[46,31168,31169],{"class":173}," multiarch_builder",[46,31171,31172],{"class":180}," --use\n",[19,31174,31175],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[19,31177,31178],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[36,31180,31182],{"className":160,"code":31181,"language":162,"meta":41,"style":41},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[43,31183,31184],{"__ignoreMap":41},[46,31185,31186,31188,31190,31192,31195,31198,31201,31204],{"class":48,"line":49},[46,31187,28542],{"class":169},[46,31189,29219],{"class":173},[46,31191,29222],{"class":180},[46,31193,31194],{"class":180}," --privileged",[46,31196,31197],{"class":173}," multiarch\u002Fqemu-user-static",[46,31199,31200],{"class":180}," --reset",[46,31202,31203],{"class":180}," -p",[46,31205,31206],{"class":173}," yes\n",[19,31208,31209],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[19,31211,31212],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[36,31214,31216],{"className":160,"code":31215,"language":162,"meta":41,"style":41},"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",[43,31217,31218,31260,31264,31269,31279,31289,31298,31304,31308,31312,31322,31330,31339,31345,31349,31353,31363,31371,31380,31386,31390,31394,31404,31412,31421,31427,31431,31435,31445,31453,31462,31468,31472,31476,31486,31494,31503,31509,31513,31517,31527,31535,31544,31550,31554,31558,31568,31576,31585,31591,31595,31599,31609,31617,31626,31632,31636,31640,31651,31659,31668,31674],{"__ignoreMap":41},[46,31219,31220,31222,31224,31226,31229,31232,31234,31236,31239,31241,31243,31245,31247,31250,31253,31255,31258],{"class":48,"line":49},[46,31221,28542],{"class":169},[46,31223,31161],{"class":173},[46,31225,30720],{"class":173},[46,31227,31228],{"class":180}," --platform",[46,31230,31231],{"class":173}," linux\u002Famd64,linux\u002Farm64",[46,31233,30723],{"class":180},[46,31235,30890],{"class":52},[46,31237,31238],{"class":173},"你的镜像",[46,31240,30896],{"class":56},[46,31242,884],{"class":52},[46,31244,3045],{"class":173},[46,31246,821],{"class":52},[46,31248,31249],{"class":173},"标",[46,31251,31252],{"class":56},"签",[46,31254,884],{"class":52},[46,31256,31257],{"class":180}," --push",[46,31259,30729],{"class":173},[46,31261,31262],{"class":48,"line":60},[46,31263,616],{"emptyLinePlaceholder":615},[46,31265,31266],{"class":48,"line":200},[46,31267,31268],{"class":2253},"# 例子：\n",[46,31270,31271,31273,31275,31277],{"class":48,"line":211},[46,31272,28542],{"class":169},[46,31274,31161],{"class":173},[46,31276,30720],{"class":173},[46,31278,184],{"class":180},[46,31280,31281,31284,31287],{"class":48,"line":222},[46,31282,31283],{"class":56},"--platform ",[46,31285,31286],{"class":173},"linux\u002Famd64,linux\u002Farm64",[46,31288,184],{"class":180},[46,31290,31291,31293,31296],{"class":48,"line":636},[46,31292,30723],{"class":180},[46,31294,31295],{"class":173}," tungchiahui\u002Fros:noetic-focal",[46,31297,184],{"class":180},[46,31299,31300,31302],{"class":48,"line":641},[46,31301,31257],{"class":180},[46,31303,184],{"class":180},[46,31305,31306],{"class":48,"line":653},[46,31307,30729],{"class":173},[46,31309,31310],{"class":48,"line":659},[46,31311,616],{"emptyLinePlaceholder":615},[46,31313,31314,31316,31318,31320],{"class":48,"line":665},[46,31315,28542],{"class":169},[46,31317,31161],{"class":173},[46,31319,30720],{"class":173},[46,31321,184],{"class":180},[46,31323,31324,31326,31328],{"class":48,"line":670},[46,31325,31283],{"class":56},[46,31327,31286],{"class":173},[46,31329,184],{"class":180},[46,31331,31332,31334,31337],{"class":48,"line":676},[46,31333,30723],{"class":180},[46,31335,31336],{"class":173}," tungchiahui\u002Fros:humble-jammy",[46,31338,184],{"class":180},[46,31340,31341,31343],{"class":48,"line":682},[46,31342,31257],{"class":180},[46,31344,184],{"class":180},[46,31346,31347],{"class":48,"line":688},[46,31348,30729],{"class":173},[46,31350,31351],{"class":48,"line":693},[46,31352,616],{"emptyLinePlaceholder":615},[46,31354,31355,31357,31359,31361],{"class":48,"line":699},[46,31356,28542],{"class":169},[46,31358,31161],{"class":173},[46,31360,30720],{"class":173},[46,31362,184],{"class":180},[46,31364,31365,31367,31369],{"class":48,"line":705},[46,31366,31283],{"class":56},[46,31368,31286],{"class":173},[46,31370,184],{"class":180},[46,31372,31373,31375,31378],{"class":48,"line":711},[46,31374,30723],{"class":180},[46,31376,31377],{"class":173}," tungchiahui\u002Fros:jazzy-noble",[46,31379,184],{"class":180},[46,31381,31382,31384],{"class":48,"line":717},[46,31383,31257],{"class":180},[46,31385,184],{"class":180},[46,31387,31388],{"class":48,"line":723},[46,31389,30729],{"class":173},[46,31391,31392],{"class":48,"line":729},[46,31393,616],{"emptyLinePlaceholder":615},[46,31395,31396,31398,31400,31402],{"class":48,"line":735},[46,31397,28310],{"class":169},[46,31399,31161],{"class":173},[46,31401,30720],{"class":173},[46,31403,184],{"class":180},[46,31405,31406,31408,31410],{"class":48,"line":740},[46,31407,31283],{"class":56},[46,31409,31286],{"class":173},[46,31411,184],{"class":180},[46,31413,31414,31416,31419],{"class":48,"line":745},[46,31415,30723],{"class":180},[46,31417,31418],{"class":173}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[46,31420,184],{"class":180},[46,31422,31423,31425],{"class":48,"line":763},[46,31424,31257],{"class":180},[46,31426,184],{"class":180},[46,31428,31429],{"class":48,"line":778},[46,31430,30729],{"class":173},[46,31432,31433],{"class":48,"line":789},[46,31434,616],{"emptyLinePlaceholder":615},[46,31436,31437,31439,31441,31443],{"class":48,"line":794},[46,31438,28542],{"class":169},[46,31440,31161],{"class":173},[46,31442,30720],{"class":173},[46,31444,184],{"class":180},[46,31446,31447,31449,31451],{"class":48,"line":806},[46,31448,31283],{"class":56},[46,31450,31286],{"class":173},[46,31452,184],{"class":180},[46,31454,31455,31457,31460],{"class":48,"line":829},[46,31456,30723],{"class":180},[46,31458,31459],{"class":173}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[46,31461,184],{"class":180},[46,31463,31464,31466],{"class":48,"line":840},[46,31465,31257],{"class":180},[46,31467,184],{"class":180},[46,31469,31470],{"class":48,"line":846},[46,31471,30729],{"class":173},[46,31473,31474],{"class":48,"line":852},[46,31475,616],{"emptyLinePlaceholder":615},[46,31477,31478,31480,31482,31484],{"class":48,"line":857},[46,31479,28310],{"class":169},[46,31481,31161],{"class":173},[46,31483,30720],{"class":173},[46,31485,184],{"class":180},[46,31487,31488,31490,31492],{"class":48,"line":875},[46,31489,31283],{"class":56},[46,31491,31286],{"class":173},[46,31493,184],{"class":180},[46,31495,31496,31498,31501],{"class":48,"line":892},[46,31497,30723],{"class":180},[46,31499,31500],{"class":173}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[46,31502,184],{"class":180},[46,31504,31505,31507],{"class":48,"line":898},[46,31506,31257],{"class":180},[46,31508,184],{"class":180},[46,31510,31511],{"class":48,"line":903},[46,31512,30729],{"class":173},[46,31514,31515],{"class":48,"line":908},[46,31516,616],{"emptyLinePlaceholder":615},[46,31518,31519,31521,31523,31525],{"class":48,"line":925},[46,31520,28542],{"class":169},[46,31522,31161],{"class":173},[46,31524,30720],{"class":173},[46,31526,184],{"class":180},[46,31528,31529,31531,31533],{"class":48,"line":1238},[46,31530,31283],{"class":56},[46,31532,31286],{"class":173},[46,31534,184],{"class":180},[46,31536,31537,31539,31542],{"class":48,"line":1251},[46,31538,30723],{"class":180},[46,31540,31541],{"class":173}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[46,31543,184],{"class":180},[46,31545,31546,31548],{"class":48,"line":1256},[46,31547,31257],{"class":180},[46,31549,184],{"class":180},[46,31551,31552],{"class":48,"line":1261},[46,31553,30729],{"class":173},[46,31555,31556],{"class":48,"line":1274},[46,31557,616],{"emptyLinePlaceholder":615},[46,31559,31560,31562,31564,31566],{"class":48,"line":10061},[46,31561,28542],{"class":169},[46,31563,31161],{"class":173},[46,31565,30720],{"class":173},[46,31567,184],{"class":180},[46,31569,31570,31572,31574],{"class":48,"line":11720},[46,31571,31283],{"class":56},[46,31573,31286],{"class":173},[46,31575,184],{"class":180},[46,31577,31578,31580,31583],{"class":48,"line":11745},[46,31579,30723],{"class":180},[46,31581,31582],{"class":173}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[46,31584,184],{"class":180},[46,31586,31587,31589],{"class":48,"line":11768},[46,31588,31257],{"class":180},[46,31590,184],{"class":180},[46,31592,31593],{"class":48,"line":11792},[46,31594,30729],{"class":173},[46,31596,31597],{"class":48,"line":11797},[46,31598,616],{"emptyLinePlaceholder":615},[46,31600,31601,31603,31605,31607],{"class":48,"line":11802},[46,31602,28310],{"class":169},[46,31604,31161],{"class":173},[46,31606,30720],{"class":173},[46,31608,184],{"class":180},[46,31610,31611,31613,31615],{"class":48,"line":11807},[46,31612,31283],{"class":56},[46,31614,31286],{"class":173},[46,31616,184],{"class":180},[46,31618,31619,31621,31624],{"class":48,"line":11816},[46,31620,30723],{"class":180},[46,31622,31623],{"class":173}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[46,31625,184],{"class":180},[46,31627,31628,31630],{"class":48,"line":11821},[46,31629,31257],{"class":180},[46,31631,184],{"class":180},[46,31633,31634],{"class":48,"line":11827},[46,31635,30729],{"class":173},[46,31637,31638],{"class":48,"line":11848},[46,31639,616],{"emptyLinePlaceholder":615},[46,31641,31642,31645,31647,31649],{"class":48,"line":11854},[46,31643,31644],{"class":169},"  docker",[46,31646,31161],{"class":173},[46,31648,30720],{"class":173},[46,31650,184],{"class":180},[46,31652,31653,31655,31657],{"class":48,"line":11868},[46,31654,31283],{"class":56},[46,31656,31286],{"class":173},[46,31658,184],{"class":180},[46,31660,31661,31663,31666],{"class":48,"line":11874},[46,31662,30723],{"class":180},[46,31664,31665],{"class":173}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[46,31667,184],{"class":180},[46,31669,31670,31672],{"class":48,"line":11901},[46,31671,31257],{"class":180},[46,31673,184],{"class":180},[46,31675,31676],{"class":48,"line":11910},[46,31677,30729],{"class":173},[19,31679,31680],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[19,31682,31683],{},[3514,31684],{"alt":41,"src":31685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[19,31687,31688],{},[3514,31689],{"alt":41,"src":31690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[23999,31692,31694],{"id":31693},"_623清除构建缓存","6.2.3.清除构建缓存",[36,31696,31698],{"className":160,"code":31697,"language":162,"meta":41,"style":41},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[43,31699,31700,31705],{"__ignoreMap":41},[46,31701,31702],{"class":48,"line":49},[46,31703,31704],{"class":2253},"# 清理BuildKit构建缓存\n",[46,31706,31707,31709,31712,31715],{"class":48,"line":60},[46,31708,28542],{"class":169},[46,31710,31711],{"class":173}," builder",[46,31713,31714],{"class":173}," prune",[46,31716,31717],{"class":180}," -f\n",[19,31719,31720],{},[3514,31721],{"alt":41,"src":31722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[479,31724,31726],{"id":31725},"_63补充","6.3.补充",[23999,31728,31730],{"id":31729},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[19,31732,31733],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[19,31735,31736],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[19,31738,31739],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[36,31741,31743],{"className":160,"code":31742,"language":162,"meta":41,"style":41},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[43,31744,31745,31752],{"__ignoreMap":41},[46,31746,31747,31749],{"class":48,"line":49},[46,31748,29359],{"class":169},[46,31750,31751],{"class":173}," nginx\n",[46,31753,31754,31756,31759,31762,31764],{"class":48,"line":60},[46,31755,30543],{"class":169},[46,31757,31758],{"class":173}," echo",[46,31760,31761],{"class":173}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[46,31763,28213],{"class":52},[46,31765,31766],{"class":173}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[19,31768,31769],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[19,31771,31772],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[36,31774,31776],{"className":160,"code":31775,"language":162,"meta":41,"style":41},"docker build -t nginx:tuling .\n",[43,31777,31778],{"__ignoreMap":41},[46,31779,31780,31782,31784,31786,31789],{"class":48,"line":49},[46,31781,28542],{"class":169},[46,31783,30720],{"class":173},[46,31785,30723],{"class":180},[46,31787,31788],{"class":173}," nginx:tuling",[46,31790,30729],{"class":173},[19,31792,31793],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[19,31795,31796],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[36,31798,31800],{"className":160,"code":31799,"language":162,"meta":41,"style":41},"docker run -d -p 92:80 nginx:tuling\n",[43,31801,31802],{"__ignoreMap":41},[46,31803,31804,31806,31808,31811,31813,31816],{"class":48,"line":49},[46,31805,28542],{"class":169},[46,31807,29219],{"class":173},[46,31809,31810],{"class":180}," -d",[46,31812,31203],{"class":180},[46,31814,31815],{"class":173}," 92:80",[46,31817,31818],{"class":173}," nginx:tuling\n",[19,31820,31821,31822],{},"4、访问 ",[2426,31823,31826],{"href":31824,"rel":31825},"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",[25862],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[19,31828,31829],{},[3514,31830],{"alt":41,"src":31831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[19,31833,31834],{},[3514,31835],{"alt":41,"src":31836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[23999,31838,31840],{"id":31839},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[19,31842,31843],{},"只需要知道大体流程即可",[19,31845,31846],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[19,31848,31849],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[19,31851,31852],{},"2、在Dockerfile中添加以下内容",[36,31854,31856],{"className":28082,"code":31855,"language":28084,"meta":41,"style":41},"# 基于哪个镜像\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",[43,31857,31858,31863,31868,31873,31878,31883,31888,31893],{"__ignoreMap":41},[46,31859,31860],{"class":48,"line":49},[46,31861,31862],{},"# 基于哪个镜像\n",[46,31864,31865],{"class":48,"line":60},[46,31866,31867],{},"From java:8\n",[46,31869,31870],{"class":48,"line":200},[46,31871,31872],{},"# 复制文件到容器\n",[46,31874,31875],{"class":48,"line":211},[46,31876,31877],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[46,31879,31880],{"class":48,"line":222},[46,31881,31882],{},"# 声明需要暴露的端口\n",[46,31884,31885],{"class":48,"line":636},[46,31886,31887],{},"EXPOSE 8877\n",[46,31889,31890],{"class":48,"line":641},[46,31891,31892],{},"# 配置容器启动后执行的命令\n",[46,31894,31895],{"class":48,"line":653},[46,31896,31897],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[19,31899,31900],{},"3、使用docker build命令构建镜像",[36,31902,31904],{"className":160,"code":31903,"language":162,"meta":41,"style":41},"docker build -t tulingmall-member:0.0.5 .\n",[43,31905,31906],{"__ignoreMap":41},[46,31907,31908,31910,31912,31914,31917],{"class":48,"line":49},[46,31909,28542],{"class":169},[46,31911,30720],{"class":173},[46,31913,30723],{"class":180},[46,31915,31916],{"class":173}," tulingmall-member:0.0.5",[46,31918,30729],{"class":173},[19,31920,31921],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[19,31923,31924],{},[3514,31925],{"alt":41,"src":31926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[19,31928,31929],{},"4、启动镜像，加-d可在后台启动",[36,31931,31933],{"className":160,"code":31932,"language":162,"meta":41,"style":41},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[43,31934,31935],{"__ignoreMap":41},[46,31936,31937,31939,31941,31943,31945,31948],{"class":48,"line":49},[46,31938,28542],{"class":169},[46,31940,29219],{"class":173},[46,31942,31810],{"class":180},[46,31944,31203],{"class":180},[46,31946,31947],{"class":173}," 8877:8877",[46,31949,31950],{"class":173}," tulingmall-member:0.0.5\n",[19,31952,31953],{},"加上JVM参数：",[36,31955,31957],{"className":160,"code":31956,"language":162,"meta":41,"style":41},"# --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",[43,31958,31959,31964,31979,31989,31998,32005],{"__ignoreMap":41},[46,31960,31961],{"class":48,"line":49},[46,31962,31963],{"class":2253},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[46,31965,31966,31968,31970,31973,31975,31977],{"class":48,"line":60},[46,31967,28542],{"class":169},[46,31969,29219],{"class":173},[46,31971,31972],{"class":180},"  -d",[46,31974,31203],{"class":180},[46,31976,31947],{"class":173},[46,31978,184],{"class":180},[46,31980,31981,31983,31986],{"class":48,"line":200},[46,31982,30117],{"class":56},[46,31984,31985],{"class":173},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[46,31987,31988],{"class":180},"  \\\n",[46,31990,31991,31993,31996],{"class":48,"line":211},[46,31992,30117],{"class":56},[46,31994,31995],{"class":173},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[46,31997,31988],{"class":180},[46,31999,32000,32003],{"class":48,"line":222},[46,32001,32002],{"class":56},"--cap-add=SYS_PTRACE  ",[46,32004,28166],{"class":180},[46,32006,32007],{"class":48,"line":636},[46,32008,32009],{"class":56},"tulingmall-member:0.0.5\n",[19,32011,32012],{},"5、访问会员服务接口",[19,32014,32015],{},[3514,32016],{"alt":41,"src":32017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[23999,32019,32021],{"id":32020},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[19,32023,32024],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[19,32026,32027,32028],{},"阿里云docker镜像仓库：",[2426,32029,32030],{"href":32030,"rel":32031},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[25862],[19,32033,32034],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[19,32036,32037],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[19,32039,32040],{},[3514,32041],{"alt":41,"src":32042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[19,32044,32045],{},"要把镜像推送到镜像仓库",[36,32047,32049],{"className":160,"code":32048,"language":162,"meta":41,"style":41},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[43,32050,32051],{"__ignoreMap":41},[46,32052,32053,32055,32057,32059],{"class":48,"line":49},[46,32054,28542],{"class":169},[46,32056,30885],{"class":173},[46,32058,31916],{"class":173},[46,32060,32061],{"class":173}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[19,32063,32064],{},"最后将镜像推送到远程仓库",[36,32066,32068],{"className":160,"code":32067,"language":162,"meta":41,"style":41},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[43,32069,32070],{"__ignoreMap":41},[46,32071,32072,32074,32076],{"class":48,"line":49},[46,32073,28542],{"class":169},[46,32075,31004],{"class":173},[46,32077,32061],{"class":173},[2098,32079,32080],{},"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":41,"searchDepth":60,"depth":60,"links":32082},[32083,32084,32085],{"id":30471,"depth":200,"text":30472},{"id":30700,"depth":200,"text":30701},{"id":31725,"depth":200,"text":31726},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":30463,"description":41},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":32092,"title":32093,"body":32094,"description":41,"extension":2125,"meta":32237,"navigation":615,"path":32238,"seo":32239,"stem":32240,"__hash__":32241},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":32095,"toc":32235},[32096,32099,32104,32109,32112,32117,32122,32125,32130,32135,32138,32143,32146,32149,32152,32155,32158,32161,32181,32203,32206,32209,32229,32232],[10,32097,32093],{"id":32098},"_7vscode远程开发",[23,32100,32101],{},[26,32102,32103],{},"插件1：微软Docker工具",[19,32105,32106],{},[3514,32107],{"alt":41,"src":32108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[19,32110,32111],{},"docker扩展插件已经进化为container tools了，请安装container tools",[19,32113,32114],{},[3514,32115],{"alt":41,"src":32116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[23,32118,32119],{"start":60},[26,32120,32121],{},"插件2：微软Docker远程开发工具",[19,32123,32124],{},"下面这是远程开发的插件。",[19,32126,32127],{},[3514,32128],{"alt":41,"src":32129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[19,32131,32132],{},[3514,32133],{"alt":41,"src":32134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[19,32136,32137],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[19,32139,32140],{},[3514,32141],{"alt":41,"src":32142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[19,32144,32145],{},"安装完拓展之后，vscode进行链接：",[19,32147,32148],{},"1.按ctrl+shift+p",[19,32150,32151],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[19,32153,32154],{},"3.选择目前运行的容器",[19,32156,32157],{},"4.VS Code 会在新窗口中打开并连接到容器",[19,32159,32160],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[36,32162,32164],{"className":160,"code":32163,"language":162,"meta":41,"style":41},"docker run -v 主机目录:容器目录 image-name\n",[43,32165,32166],{"__ignoreMap":41},[46,32167,32168,32170,32172,32175,32178],{"class":48,"line":49},[46,32169,28542],{"class":169},[46,32171,29219],{"class":173},[46,32173,32174],{"class":180}," -v",[46,32176,32177],{"class":173}," 主机目录:容器目录",[46,32179,32180],{"class":173}," image-name\n",[36,32182,32184],{"className":160,"code":32183,"language":162,"meta":41,"style":41},"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",[43,32185,32186],{"__ignoreMap":41},[46,32187,32188,32190,32192,32195,32197,32200],{"class":48,"line":49},[46,32189,28542],{"class":169},[46,32191,29219],{"class":173},[46,32193,32194],{"class":180}," -it",[46,32196,32174],{"class":180},[46,32198,32199],{"class":173}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[46,32201,32202],{"class":173}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[19,32204,32205],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[19,32207,32208],{},"查看挂载情况：",[36,32210,32212],{"className":160,"code":32211,"language":162,"meta":41,"style":41},"mount | grep -i project\n",[43,32213,32214],{"__ignoreMap":41},[46,32215,32216,32219,32221,32224,32226],{"class":48,"line":49},[46,32217,32218],{"class":169},"mount",[46,32220,27102],{"class":52},[46,32222,32223],{"class":169}," grep",[46,32225,28419],{"class":180},[46,32227,32228],{"class":173}," project\n",[19,32230,32231],{},"也可以通过ls来进行查看",[2098,32233,32234],{},"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":41,"searchDepth":60,"depth":60,"links":32236},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":32093,"description":41},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":32243,"title":32244,"body":32245,"description":25378,"extension":2125,"meta":32249,"navigation":615,"path":32251,"seo":32252,"stem":32253,"__hash__":32254},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":32246,"toc":32247},[],{"title":41,"searchDepth":60,"depth":60,"links":32248},[],{"category":32250},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":32244,"description":25378},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":32256,"title":32257,"body":32258,"description":25378,"extension":2125,"meta":32262,"navigation":615,"path":32263,"seo":32264,"stem":32265,"__hash__":32266},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":32259,"toc":32260},[],{"title":41,"searchDepth":60,"depth":60,"links":32261},[],{"category":32250},"\u002Fwiki\u002F2025-11-10-k8s",{"title":32257,"description":25378},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":32268,"title":32269,"body":32270,"description":25378,"extension":2125,"meta":32558,"navigation":615,"path":32559,"seo":32560,"stem":32561,"__hash__":32562},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":32271,"toc":32556},[32272,32275,32283,32298,32303,32353,32356,32362,32545,32550,32553],[10,32273,32269],{"id":32274},"_1验证深度学习环境",[19,32276,32277,32278],{},"关于环境的安装，看",[2426,32279,32282],{"href":32280,"rel":32281},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[25862],"Pytorch-->深度学习",[19,32284,32285,32286,32289,32290,32293,32294,32297],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[43,32287,32288],{},"pytorch-cuda=12.4"," 是一个“ ",[2339,32291,32292],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[2339,32295,32296],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[19,32299,32300],{},[3514,32301],{"alt":41,"src":32302},"\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",[36,32304,32306],{"className":160,"code":32305,"language":162,"meta":41,"style":41},"# 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",[43,32307,32308,32313],{"__ignoreMap":41},[46,32309,32310],{"class":48,"line":49},[46,32311,32312],{"class":2253},"# CUDA 12.4\n",[46,32314,32315,32317,32319,32322,32325,32328,32331,32334,32336,32339,32342,32345,32348,32350],{"class":48,"line":60},[46,32316,274],{"class":169},[46,32318,177],{"class":173},[46,32320,32321],{"class":173}," pytorch==",[46,32323,32324],{"class":180},"2.5.1",[46,32326,32327],{"class":173}," torchvision==",[46,32329,32330],{"class":180},"0.20.1",[46,32332,32333],{"class":173}," torchaudio==",[46,32335,32324],{"class":180},[46,32337,32338],{"class":173}," pytorch-cuda=",[46,32340,32341],{"class":180},"12.4",[46,32343,32344],{"class":180}," -c",[46,32346,32347],{"class":173}," pytorch",[46,32349,32344],{"class":180},[46,32351,32352],{"class":173}," nvidia\n",[19,32354,32355],{},"）：",[19,32357,32358],{},[2426,32359,32360],{"href":32360,"rel":32361},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[25862],[36,32363,32365],{"className":38,"code":32364,"language":40,"meta":41,"style":41},"# 对深度学习环境进行测试\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",[43,32366,32367,32372,32379,32384,32394,32410,32415,32425,32461,32468,32480,32496,32501,32511,32523,32533],{"__ignoreMap":41},[46,32368,32369],{"class":48,"line":49},[46,32370,32371],{"class":2253},"# 对深度学习环境进行测试\n",[46,32373,32374,32376],{"class":48,"line":60},[46,32375,53],{"class":52},[46,32377,32378],{"class":56}," torch\n",[46,32380,32381],{"class":48,"line":200},[46,32382,32383],{"class":2253},"# 查看cuda是否被激活\n",[46,32385,32386,32389,32391],{"class":48,"line":211},[46,32387,32388],{"class":56},"flag",[46,32390,79],{"class":52},[46,32392,32393],{"class":56},"torch.cuda.is_available()\n",[46,32395,32396,32399,32401,32404,32407],{"class":48,"line":222},[46,32397,32398],{"class":180},"print",[46,32400,1152],{"class":56},[46,32402,32403],{"class":173},"\"cuda:\"",[46,32405,32406],{"class":56},", flag)   ",[46,32408,32409],{"class":2253},"#返回true的话说明被激活\n",[46,32411,32412],{"class":48,"line":636},[46,32413,32414],{"class":2253},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[46,32416,32417,32420,32422],{"class":48,"line":641},[46,32418,32419],{"class":56},"ngpu",[46,32421,79],{"class":52},[46,32423,32424],{"class":180},"1\n",[46,32426,32427,32430,32432,32435,32438,32440,32443,32445,32448,32450,32452,32454,32456,32459],{"class":48,"line":653},[46,32428,32429],{"class":56},"device",[46,32431,79],{"class":52},[46,32433,32434],{"class":56},"torch.device(",[46,32436,32437],{"class":173},"\"cuda:0\"",[46,32439,3744],{"class":52},[46,32441,32442],{"class":56},"(torch.cuda.is_available() ",[46,32444,815],{"class":52},[46,32446,32447],{"class":56}," ngpu",[46,32449,884],{"class":52},[46,32451,2379],{"class":180},[46,32453,15716],{"class":56},[46,32455,3741],{"class":52},[46,32457,32458],{"class":173}," \"cpu\"",[46,32460,459],{"class":56},[46,32462,32463,32465],{"class":48,"line":659},[46,32464,32398],{"class":180},[46,32466,32467],{"class":56},"(device)\n",[46,32469,32470,32472,32475,32477],{"class":48,"line":665},[46,32471,32398],{"class":180},[46,32473,32474],{"class":56},"(torch.cuda.get_device_name(",[46,32476,2379],{"class":180},[46,32478,32479],{"class":56},"))\n",[46,32481,32482,32484,32487,32489,32491,32493],{"class":48,"line":670},[46,32483,32398],{"class":180},[46,32485,32486],{"class":56},"(torch.rand(",[46,32488,2266],{"class":180},[46,32490,2565],{"class":56},[46,32492,2266],{"class":180},[46,32494,32495],{"class":56},").cuda())\n",[46,32497,32498],{"class":48,"line":676},[46,32499,32500],{"class":2253},"# 查看cuda和cudnn的版本\n",[46,32502,32503,32506,32508],{"class":48,"line":682},[46,32504,32505],{"class":56},"cuda_version",[46,32507,79],{"class":52},[46,32509,32510],{"class":56},"torch.version.cuda\n",[46,32512,32513,32515,32517,32520],{"class":48,"line":688},[46,32514,32398],{"class":180},[46,32516,1152],{"class":56},[46,32518,32519],{"class":173},"\"cuda version\"",[46,32521,32522],{"class":56},",cuda_version)\n",[46,32524,32525,32528,32530],{"class":48,"line":693},[46,32526,32527],{"class":56},"cudnn_version",[46,32529,79],{"class":52},[46,32531,32532],{"class":56},"torch.backends.cudnn.version()\n",[46,32534,32535,32537,32539,32542],{"class":48,"line":699},[46,32536,32398],{"class":180},[46,32538,1152],{"class":56},[46,32540,32541],{"class":173},"\"cudnn version\"",[46,32543,32544],{"class":56},",cudnn_version)\n",[19,32546,32547],{},[3514,32548],{"alt":41,"src":32549},"\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,32551,32552],{},"cuda:0 指的是一块显卡",[2098,32554,32555],{},"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":41,"searchDepth":60,"depth":60,"links":32557},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":32269,"description":25378},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":32564,"title":32565,"body":32566,"description":25378,"extension":2125,"meta":52356,"navigation":615,"path":52357,"seo":52358,"stem":52359,"__hash__":52360},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":32567,"toc":52350},[32568,32571,32575,32579,32582,32587,32592,32595,32600,32605,32610,32613,32617,32622,32626,32631,32634,32639,32642,32645,32648,32651,32656,32659,32664,32669,32674,32679,32682,32686,32689,32694,33294,33299,33302,33307,33310,33313,33776,33779,33782,33785,33788,35835,35838,35843,35848,36642,36645,36650,37428,37432,39091,39095,39809,39813,39817,39822,39827,39832,39835,39840,39845,39850,39855,39860,39864,39869,41151,41156,41159,41162,41165,41320,41323,41326,42542,42547,43242,43246,43250,43255,43260,43263,43268,43273,43278,43283,43288,43293,43298,43303,43308,43313,43318,43323,43328,43333,43338,43343,43348,43353,43358,43363,43368,43373,43378,43383,43388,43393,43398,43403,43408,43413,43417,43421,43424,44901,44905,46552,46556,47250,47254,47257,47260,47804,47807,47811,47814,49211,49215,49218,49793,51580,51584,51587,52347],[10,32569,32565],{"id":32570},"_2经典神经网络",[479,32572,32574],{"id":32573},"_21lenet与alexnet","2.1.LeNet与AlexNet",[23999,32576,32578],{"id":32577},"_211原理介绍","2.1.1.原理介绍",[19,32580,32581],{},"LeNet-5",[23,32583,32584],{},[26,32585,32586],{},"原理",[19,32588,32589],{},[3514,32590],{"alt":41,"src":32591},"\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,32593,32594],{},"B是batch批次；C是channel通道",[23,32596,32597],{"start":60},[26,32598,32599],{},"网络参数详细",[19,32601,32602],{},[3514,32603],{"alt":41,"src":32604},"\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,32606,32607],{},[3514,32608],{"alt":41,"src":32609},"\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,32611,32612],{},"AlexNet",[23,32614,32615],{},[26,32616,32586],{},[19,32618,32619],{},[3514,32620],{"alt":41,"src":32621},"\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",[23,32623,32624],{"start":60},[26,32625,32599],{},[19,32627,32628],{},[3514,32629],{"alt":41,"src":32630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-007.png",[19,32632,32633],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[19,32635,32636],{},[3514,32637],{"alt":41,"src":32638},"\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,32640,32641],{},"数据处理中的图像增强操作:",[19,32643,32644],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[19,32646,32647],{},"①增加数据量，保证训练数据充足；②防止过拟合",[19,32649,32650],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[19,32652,32653],{},[3514,32654],{"alt":41,"src":32655},"\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,32657,32658],{},"提升网络精确度的方法：LRN正则化",[19,32660,32661],{},[3514,32662],{"alt":41,"src":32663},"\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,32665,32666],{},[3514,32667],{"alt":41,"src":32668},"\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",[23,32670,32671],{"start":200},[26,32672,32673],{},"AlexNet的总结",[19,32675,32676],{},[3514,32677],{"alt":41,"src":32678},"\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,32680,32681],{},"比LeNet模型要深一丢丢",[23999,32683,32685],{"id":32684},"_212代码实现","2.1.2.代码实现",[19,32687,32688],{},"（1）LeNet",[23,32690,32691],{},[26,32692,32693],{},"模型搭建",[36,32695,32697],{"className":38,"code":32696,"language":40,"meta":41,"style":41},"# 导入库\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",[43,32698,32699,32704,32710,32715,32727,32732,32744,32748,32767,32772,32777,32788,32793,32812,32816,32821,32870,32882,32887,32916,32951,32978,32983,32995,33000,33020,33039,33058,33062,33067,33077,33094,33105,33120,33131,33142,33157,33172,33183,33190,33194,33207,33212,33235,33240,33245,33250,33254,33259,33264,33274],{"__ignoreMap":41},[46,32700,32701],{"class":48,"line":49},[46,32702,32703],{"class":2253},"# 导入库\n",[46,32705,32706,32708],{"class":48,"line":60},[46,32707,53],{"class":52},[46,32709,32378],{"class":56},[46,32711,32712],{"class":48,"line":200},[46,32713,32714],{"class":2253},"# 导入神经网络层\n",[46,32716,32717,32719,32722,32724],{"class":48,"line":211},[46,32718,957],{"class":52},[46,32720,32721],{"class":56}," torch ",[46,32723,53],{"class":52},[46,32725,32726],{"class":56}," nn\n",[46,32728,32729],{"class":48,"line":222},[46,32730,32731],{"class":2253},"# 导入展示神经网络参数的包\n",[46,32733,32734,32736,32739,32741],{"class":48,"line":636},[46,32735,957],{"class":52},[46,32737,32738],{"class":56}," torchsummary ",[46,32740,53],{"class":52},[46,32742,32743],{"class":56}," summary\n",[46,32745,32746],{"class":48,"line":641},[46,32747,616],{"emptyLinePlaceholder":615},[46,32749,32750,32752,32755,32757,32760,32762,32765],{"class":48,"line":653},[46,32751,16696],{"class":52},[46,32753,32754],{"class":169}," LeNet",[46,32756,1152],{"class":56},[46,32758,32759],{"class":169},"nn",[46,32761,2744],{"class":56},[46,32763,32764],{"class":169},"Module",[46,32766,1158],{"class":56},[46,32768,32769],{"class":48,"line":659},[46,32770,32771],{"class":2253},"    # 模型初始化:\n",[46,32773,32774],{"class":48,"line":665},[46,32775,32776],{"class":2253},"    # 定义一些网络层和激活函数\n",[46,32778,32779,32782,32785],{"class":48,"line":670},[46,32780,32781],{"class":52},"    def",[46,32783,32784],{"class":180}," __init__",[46,32786,32787],{"class":56},"(self):\n",[46,32789,32790],{"class":48,"line":676},[46,32791,32792],{"class":2253},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[46,32794,32795,32798,32801,32804,32807,32810],{"class":48,"line":682},[46,32796,32797],{"class":180},"        super",[46,32799,32800],{"class":56},"(LeNet,",[46,32802,32803],{"class":180},"self",[46,32805,32806],{"class":56},").",[46,32808,32809],{"class":180},"__init__",[46,32811,4006],{"class":56},[46,32813,32814],{"class":48,"line":688},[46,32815,616],{"emptyLinePlaceholder":615},[46,32817,32818],{"class":48,"line":693},[46,32819,32820],{"class":2253},"        # 定义网络层\n",[46,32822,32823,32826,32829,32831,32834,32837,32839,32841,32843,32846,32848,32850,32852,32855,32857,32859,32861,32864,32866,32868],{"class":48,"line":699},[46,32824,32825],{"class":180},"        self",[46,32827,32828],{"class":56},".c1",[46,32830,79],{"class":52},[46,32832,32833],{"class":56},"nn.Conv2d(",[46,32835,32836],{"class":439},"in_channels",[46,32838,79],{"class":52},[46,32840,2405],{"class":180},[46,32842,2565],{"class":56},[46,32844,32845],{"class":439},"out_channels",[46,32847,79],{"class":52},[46,32849,2531],{"class":180},[46,32851,2565],{"class":56},[46,32853,32854],{"class":439},"kernel_size",[46,32856,79],{"class":52},[46,32858,2506],{"class":180},[46,32860,2565],{"class":56},[46,32862,32863],{"class":439},"padding",[46,32865,79],{"class":52},[46,32867,2272],{"class":180},[46,32869,459],{"class":56},[46,32871,32872,32874,32877,32879],{"class":48,"line":705},[46,32873,32825],{"class":180},[46,32875,32876],{"class":56},".sig",[46,32878,79],{"class":52},[46,32880,32881],{"class":56},"nn.Sigmoid()\n",[46,32883,32884],{"class":48,"line":711},[46,32885,32886],{"class":2253},"        # 定义池化\n",[46,32888,32889,32891,32894,32896,32899,32901,32903,32905,32907,32910,32912,32914],{"class":48,"line":717},[46,32890,32825],{"class":180},[46,32892,32893],{"class":56},".s2",[46,32895,79],{"class":52},[46,32897,32898],{"class":56},"nn.AvgPool2d(",[46,32900,32854],{"class":439},[46,32902,79],{"class":52},[46,32904,2272],{"class":180},[46,32906,2565],{"class":56},[46,32908,32909],{"class":439},"stride",[46,32911,79],{"class":52},[46,32913,2272],{"class":180},[46,32915,459],{"class":56},[46,32917,32918,32920,32923,32925,32927,32929,32931,32933,32935,32937,32939,32941,32943,32945,32947,32949],{"class":48,"line":723},[46,32919,32825],{"class":180},[46,32921,32922],{"class":56},".c3",[46,32924,79],{"class":52},[46,32926,32833],{"class":56},[46,32928,32836],{"class":439},[46,32930,79],{"class":52},[46,32932,2531],{"class":180},[46,32934,2565],{"class":56},[46,32936,32845],{"class":439},[46,32938,79],{"class":52},[46,32940,2787],{"class":180},[46,32942,2565],{"class":56},[46,32944,32854],{"class":439},[46,32946,79],{"class":52},[46,32948,2506],{"class":180},[46,32950,459],{"class":56},[46,32952,32953,32955,32958,32960,32962,32964,32966,32968,32970,32972,32974,32976],{"class":48,"line":729},[46,32954,32825],{"class":180},[46,32956,32957],{"class":56},".s4",[46,32959,79],{"class":52},[46,32961,32898],{"class":56},[46,32963,32854],{"class":439},[46,32965,79],{"class":52},[46,32967,2272],{"class":180},[46,32969,2565],{"class":56},[46,32971,32909],{"class":439},[46,32973,79],{"class":52},[46,32975,2272],{"class":180},[46,32977,459],{"class":56},[46,32979,32980],{"class":48,"line":735},[46,32981,32982],{"class":2253},"        # 定义平展层\n",[46,32984,32985,32987,32990,32992],{"class":48,"line":740},[46,32986,32825],{"class":180},[46,32988,32989],{"class":56},".flatten",[46,32991,79],{"class":52},[46,32993,32994],{"class":56},"nn.Flatten()\n",[46,32996,32997],{"class":48,"line":745},[46,32998,32999],{"class":2253},"        # 定义全连接层\n",[46,33001,33002,33004,33007,33009,33012,33014,33016,33018],{"class":48,"line":763},[46,33003,32825],{"class":180},[46,33005,33006],{"class":56},".f5",[46,33008,79],{"class":52},[46,33010,33011],{"class":56},"nn.Linear(",[46,33013,6005],{"class":180},[46,33015,2565],{"class":56},[46,33017,3003],{"class":180},[46,33019,459],{"class":56},[46,33021,33022,33024,33027,33029,33031,33033,33035,33037],{"class":48,"line":778},[46,33023,32825],{"class":180},[46,33025,33026],{"class":56},".f6",[46,33028,79],{"class":52},[46,33030,33011],{"class":56},[46,33032,3003],{"class":180},[46,33034,2565],{"class":56},[46,33036,2897],{"class":180},[46,33038,459],{"class":56},[46,33040,33041,33043,33046,33048,33050,33052,33054,33056],{"class":48,"line":789},[46,33042,32825],{"class":180},[46,33044,33045],{"class":56},".f7",[46,33047,79],{"class":52},[46,33049,33011],{"class":56},[46,33051,2897],{"class":180},[46,33053,2565],{"class":56},[46,33055,2633],{"class":180},[46,33057,459],{"class":56},[46,33059,33060],{"class":48,"line":794},[46,33061,616],{"emptyLinePlaceholder":615},[46,33063,33064],{"class":48,"line":806},[46,33065,33066],{"class":2253},"    # 写工具->写前向传播\n",[46,33068,33069,33071,33074],{"class":48,"line":829},[46,33070,32781],{"class":52},[46,33072,33073],{"class":169}," forward",[46,33075,33076],{"class":56},"(self,x):\n",[46,33078,33079,33082,33084,33086,33089,33091],{"class":48,"line":840},[46,33080,33081],{"class":56},"        x",[46,33083,79],{"class":52},[46,33085,32803],{"class":180},[46,33087,33088],{"class":56},".sig(",[46,33090,32803],{"class":180},[46,33092,33093],{"class":56},".c1(x))\n",[46,33095,33096,33098,33100,33102],{"class":48,"line":846},[46,33097,33081],{"class":56},[46,33099,79],{"class":52},[46,33101,32803],{"class":180},[46,33103,33104],{"class":56},".s2(x)\n",[46,33106,33107,33109,33111,33113,33115,33117],{"class":48,"line":852},[46,33108,33081],{"class":56},[46,33110,79],{"class":52},[46,33112,32803],{"class":180},[46,33114,33088],{"class":56},[46,33116,32803],{"class":180},[46,33118,33119],{"class":56},".c3(x))\n",[46,33121,33122,33124,33126,33128],{"class":48,"line":857},[46,33123,33081],{"class":56},[46,33125,79],{"class":52},[46,33127,32803],{"class":180},[46,33129,33130],{"class":56},".s4(x)\n",[46,33132,33133,33135,33137,33139],{"class":48,"line":875},[46,33134,33081],{"class":56},[46,33136,79],{"class":52},[46,33138,32803],{"class":180},[46,33140,33141],{"class":56},".flatten(x)\n",[46,33143,33144,33146,33148,33150,33152,33154],{"class":48,"line":892},[46,33145,33081],{"class":56},[46,33147,79],{"class":52},[46,33149,32803],{"class":180},[46,33151,33088],{"class":56},[46,33153,32803],{"class":180},[46,33155,33156],{"class":56},".f5(x))\n",[46,33158,33159,33161,33163,33165,33167,33169],{"class":48,"line":898},[46,33160,33081],{"class":56},[46,33162,79],{"class":52},[46,33164,32803],{"class":180},[46,33166,33088],{"class":56},[46,33168,32803],{"class":180},[46,33170,33171],{"class":56},".f6(x))\n",[46,33173,33174,33176,33178,33180],{"class":48,"line":903},[46,33175,33081],{"class":56},[46,33177,79],{"class":52},[46,33179,32803],{"class":180},[46,33181,33182],{"class":56},".f7(x)\n",[46,33184,33185,33187],{"class":48,"line":908},[46,33186,16754],{"class":52},[46,33188,33189],{"class":56}," x\n",[46,33191,33192],{"class":48,"line":925},[46,33193,616],{"emptyLinePlaceholder":615},[46,33195,33196,33198,33200,33202,33205],{"class":48,"line":1238},[46,33197,911],{"class":52},[46,33199,914],{"class":180},[46,33201,4970],{"class":52},[46,33203,33204],{"class":173},"\"__main__\"",[46,33206,760],{"class":56},[46,33208,33209],{"class":48,"line":1251},[46,33210,33211],{"class":2253},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[46,33213,33214,33217,33219,33221,33224,33226,33229,33231,33233],{"class":48,"line":1256},[46,33215,33216],{"class":56},"    device",[46,33218,79],{"class":52},[46,33220,32434],{"class":56},[46,33222,33223],{"class":173},"\"cuda\"",[46,33225,3744],{"class":52},[46,33227,33228],{"class":56}," torch.cuda.is_available() ",[46,33230,3741],{"class":52},[46,33232,32458],{"class":173},[46,33234,459],{"class":56},[46,33236,33237],{"class":48,"line":1261},[46,33238,33239],{"class":2253},"    # 如果就是想指定用cpu用下方代码:\n",[46,33241,33242],{"class":48,"line":1274},[46,33243,33244],{"class":2253},"    # device=\"cpu\"\n",[46,33246,33247],{"class":48,"line":10061},[46,33248,33249],{"class":2253},"    # print(device)\n",[46,33251,33252],{"class":48,"line":11720},[46,33253,616],{"emptyLinePlaceholder":615},[46,33255,33256],{"class":48,"line":11745},[46,33257,33258],{"class":2253},"    # 实例化模型\n",[46,33260,33261],{"class":48,"line":11768},[46,33262,33263],{"class":2253},"    # 将模型放到设备中去运行\n",[46,33265,33266,33269,33271],{"class":48,"line":11792},[46,33267,33268],{"class":56},"    model",[46,33270,79],{"class":52},[46,33272,33273],{"class":56},"LeNet().to(device)\n",[46,33275,33276,33278,33281,33283,33285,33287,33289,33291],{"class":48,"line":11797},[46,33277,1227],{"class":180},[46,33279,33280],{"class":56},"(summary(model,(",[46,33282,2405],{"class":180},[46,33284,2565],{"class":56},[46,33286,3087],{"class":180},[46,33288,2565],{"class":56},[46,33290,3087],{"class":180},[46,33292,33293],{"class":56},")))\n",[19,33295,33296],{},[3514,33297],{"alt":41,"src":33298},"\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,33300,33301],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[23,33303,33304],{"start":60},[26,33305,33306],{},"训练",[19,33308,33309],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[19,33311,33312],{},"在训练之前可以将数据展示看一下",[36,33314,33316],{"className":38,"code":33315,"language":40,"meta":41,"style":41},"# 建立画图的函数，用于展示数据\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",[43,33317,33318,33323,33328,33340,33352,33364,33369,33381,33386,33398,33403,33415,33419,33423,33444,33456,33461,33482,33493,33497,33502,33520,33531,33536,33547,33552,33563,33567,33572,33587,33600,33605,33610,33623,33636,33649,33654,33658,33663,33683,33700,33720,33733,33746,33756,33771],{"__ignoreMap":41},[46,33319,33320],{"class":48,"line":49},[46,33321,33322],{"class":2253},"# 建立画图的函数，用于展示数据\n",[46,33324,33325],{"class":48,"line":60},[46,33326,33327],{"class":2253},"# torchvision中包含很多内置的数据集\n",[46,33329,33330,33332,33335,33337],{"class":48,"line":200},[46,33331,957],{"class":52},[46,33333,33334],{"class":56}," sklearn.externals.array_api_compat.torch ",[46,33336,53],{"class":52},[46,33338,33339],{"class":56}," squeeze\n",[46,33341,33342,33344,33347,33349],{"class":48,"line":211},[46,33343,957],{"class":52},[46,33345,33346],{"class":56}," torchvision.datasets ",[46,33348,53],{"class":52},[46,33350,33351],{"class":56}," FashionMNIST\n",[46,33353,33354,33356,33359,33361],{"class":48,"line":222},[46,33355,53],{"class":52},[46,33357,33358],{"class":56}," numpy ",[46,33360,398],{"class":52},[46,33362,33363],{"class":56}," np\n",[46,33365,33366],{"class":48,"line":636},[46,33367,33368],{"class":2253},"# 引入处理数据集的包\n",[46,33370,33371,33373,33376,33378],{"class":48,"line":641},[46,33372,957],{"class":52},[46,33374,33375],{"class":56}," torchvision ",[46,33377,53],{"class":52},[46,33379,33380],{"class":56}," transforms\n",[46,33382,33383],{"class":48,"line":653},[46,33384,33385],{"class":2253},"# 从torch库中引入数据处理的包\n",[46,33387,33388,33390,33393,33395],{"class":48,"line":659},[46,33389,53],{"class":52},[46,33391,33392],{"class":56}," torch.utils.data ",[46,33394,398],{"class":52},[46,33396,33397],{"class":56}," Data\n",[46,33399,33400],{"class":48,"line":665},[46,33401,33402],{"class":2253},"# 导入画图的库\n",[46,33404,33405,33407,33410,33412],{"class":48,"line":670},[46,33406,53],{"class":52},[46,33408,33409],{"class":56}," matplotlib.pyplot ",[46,33411,398],{"class":52},[46,33413,33414],{"class":56}," plt\n",[46,33416,33417],{"class":48,"line":676},[46,33418,616],{"emptyLinePlaceholder":615},[46,33420,33421],{"class":48,"line":682},[46,33422,616],{"emptyLinePlaceholder":615},[46,33424,33425,33428,33430,33433,33436,33438,33441],{"class":48,"line":688},[46,33426,33427],{"class":56},"train_data",[46,33429,79],{"class":52},[46,33431,33432],{"class":56},"FashionMNIST(",[46,33434,33435],{"class":439},"root",[46,33437,79],{"class":52},[46,33439,33440],{"class":173},"'.\u002Fdata'",[46,33442,33443],{"class":56},",\n",[46,33445,33446,33449,33451,33454],{"class":48,"line":693},[46,33447,33448],{"class":439},"                        train",[46,33450,79],{"class":52},[46,33452,33453],{"class":180},"True",[46,33455,33443],{"class":56},[46,33457,33458],{"class":48,"line":699},[46,33459,33460],{"class":2253},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[46,33462,33463,33466,33468,33471,33474,33476,33479],{"class":48,"line":705},[46,33464,33465],{"class":439},"                        transform",[46,33467,79],{"class":52},[46,33469,33470],{"class":56},"transforms.Compose([transforms.Resize(",[46,33472,33473],{"class":439},"size",[46,33475,79],{"class":52},[46,33477,33478],{"class":180},"224",[46,33480,33481],{"class":56},"),transforms.ToTensor()]),\n",[46,33483,33484,33487,33489,33491],{"class":48,"line":711},[46,33485,33486],{"class":439},"                        download",[46,33488,79],{"class":52},[46,33490,33453],{"class":180},[46,33492,459],{"class":56},[46,33494,33495],{"class":48,"line":717},[46,33496,616],{"emptyLinePlaceholder":615},[46,33498,33499],{"class":48,"line":723},[46,33500,33501],{"class":2253},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[46,33503,33504,33507,33509,33512,33515,33517],{"class":48,"line":729},[46,33505,33506],{"class":56},"train_loader",[46,33508,79],{"class":52},[46,33510,33511],{"class":56},"Data.DataLoader(",[46,33513,33514],{"class":439},"dataset",[46,33516,79],{"class":52},[46,33518,33519],{"class":56},"train_data,\n",[46,33521,33522,33525,33527,33529],{"class":48,"line":735},[46,33523,33524],{"class":439},"                             batch_size",[46,33526,79],{"class":52},[46,33528,2391],{"class":180},[46,33530,33443],{"class":56},[46,33532,33533],{"class":48,"line":740},[46,33534,33535],{"class":2253},"                             # 数据是否打乱\n",[46,33537,33538,33541,33543,33545],{"class":48,"line":745},[46,33539,33540],{"class":439},"                             shuffle",[46,33542,79],{"class":52},[46,33544,33453],{"class":180},[46,33546,33443],{"class":56},[46,33548,33549],{"class":48,"line":763},[46,33550,33551],{"class":2253},"                             # 规定加载数据的进程\n",[46,33553,33554,33557,33559,33561],{"class":48,"line":778},[46,33555,33556],{"class":439},"                             num_workers",[46,33558,79],{"class":52},[46,33560,2379],{"class":180},[46,33562,459],{"class":56},[46,33564,33565],{"class":48,"line":789},[46,33566,616],{"emptyLinePlaceholder":615},[46,33568,33569],{"class":48,"line":794},[46,33570,33571],{"class":2253},"# 获得一个batch的数据\n",[46,33573,33574,33576,33579,33581,33584],{"class":48,"line":806},[46,33575,1713],{"class":52},[46,33577,33578],{"class":56}," step,(b_x,b_y) ",[46,33580,1146],{"class":52},[46,33582,33583],{"class":180}," enumerate",[46,33585,33586],{"class":56},"(train_loader):\n",[46,33588,33589,33591,33594,33596,33598],{"class":48,"line":829},[46,33590,5121],{"class":52},[46,33592,33593],{"class":56}," step ",[46,33595,884],{"class":52},[46,33597,887],{"class":180},[46,33599,760],{"class":56},[46,33601,33602],{"class":48,"line":840},[46,33603,33604],{"class":52},"        break\n",[46,33606,33607],{"class":48,"line":846},[46,33608,33609],{"class":2253},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[46,33611,33612,33615,33617,33620],{"class":48,"line":852},[46,33613,33614],{"class":56},"batch_x",[46,33616,79],{"class":52},[46,33618,33619],{"class":56},"b_x.squeeze().numpy()  ",[46,33621,33622],{"class":2253},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[46,33624,33625,33628,33630,33633],{"class":48,"line":857},[46,33626,33627],{"class":56},"batch_y",[46,33629,79],{"class":52},[46,33631,33632],{"class":56},"b_y.numpy()   ",[46,33634,33635],{"class":2253},"#将张量转换成功numpy数组\n",[46,33637,33638,33641,33643,33646],{"class":48,"line":875},[46,33639,33640],{"class":56},"class_label",[46,33642,79],{"class":52},[46,33644,33645],{"class":56},"train_data.classes  ",[46,33647,33648],{"class":2253},"#训练集标签\n",[46,33650,33651],{"class":48,"line":892},[46,33652,33653],{"class":2253},"# print(class_label)\n",[46,33655,33656],{"class":48,"line":898},[46,33657,616],{"emptyLinePlaceholder":615},[46,33659,33660],{"class":48,"line":903},[46,33661,33662],{"class":2253},"# 可视化一个batch的图像\n",[46,33664,33665,33668,33671,33673,33675,33677,33679,33681],{"class":48,"line":908},[46,33666,33667],{"class":56},"plt.figure(",[46,33669,33670],{"class":439},"figsize",[46,33672,79],{"class":52},[46,33674,1152],{"class":56},[46,33676,2685],{"class":180},[46,33678,2565],{"class":56},[46,33680,2506],{"class":180},[46,33682,32479],{"class":56},[46,33684,33685,33687,33690,33692,33695,33697],{"class":48,"line":925},[46,33686,1713],{"class":52},[46,33688,33689],{"class":56}," ii ",[46,33691,1146],{"class":52},[46,33693,33694],{"class":56}," np.arange(",[46,33696,9371],{"class":180},[46,33698,33699],{"class":56},"(batch_y)):\n",[46,33701,33702,33705,33707,33709,33711,33714,33716,33718],{"class":48,"line":1238},[46,33703,33704],{"class":56},"    plt.subplot(",[46,33706,2481],{"class":180},[46,33708,2565],{"class":56},[46,33710,2787],{"class":180},[46,33712,33713],{"class":56},",ii ",[46,33715,2668],{"class":52},[46,33717,27110],{"class":180},[46,33719,459],{"class":56},[46,33721,33722,33725,33728,33730],{"class":48,"line":1251},[46,33723,33724],{"class":56},"    plt.imshow(batch_x[ii,:,:],",[46,33726,33727],{"class":439},"cmap",[46,33729,79],{"class":52},[46,33731,33732],{"class":56},"plt.cm.gray)\n",[46,33734,33735,33738,33740,33742,33744],{"class":48,"line":1256},[46,33736,33737],{"class":56},"    plt.title(class_label[batch_y[ii]],",[46,33739,33473],{"class":439},[46,33741,79],{"class":52},[46,33743,2633],{"class":180},[46,33745,459],{"class":56},[46,33747,33748,33751,33754],{"class":48,"line":1261},[46,33749,33750],{"class":56},"    plt.axis(",[46,33752,33753],{"class":173},"\"off\"",[46,33755,459],{"class":56},[46,33757,33758,33761,33764,33766,33769],{"class":48,"line":1274},[46,33759,33760],{"class":56},"    plt.subplots_adjust(",[46,33762,33763],{"class":439},"wspace",[46,33765,79],{"class":52},[46,33767,33768],{"class":180},"0.05",[46,33770,459],{"class":56},[46,33772,33773],{"class":48,"line":10061},[46,33774,33775],{"class":56},"plt.show()\n",[19,33777,33778],{},"用matplotlib进行展示的过程可以后续再补",[19,33780,33781],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[19,33783,33784],{},"训练次数就是按照批次过整个训练集数据的次数",[19,33786,33787],{},"模型训练：",[36,33789,33791],{"className":38,"code":33790,"language":40,"meta":41,"style":41},"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",[43,33792,33793,33800,33806,33810,33822,33828,33839,33849,33859,33869,33879,33884,33896,33906,33910,33914,33919,33929,33942,33953,33970,33981,34020,34036,34048,34059,34064,34075,34091,34102,34113,34124,34131,34135,34140,34145,34149,34154,34164,34185,34189,34193,34198,34203,34208,34228,34232,34237,34247,34251,34256,34265,34270,34275,34280,34290,34294,34298,34303,34308,34318,34323,34333,34338,34347,34352,34361,34366,34375,34379,34384,34394,34398,34402,34407,34421,34449,34464,34468,34473,34478,34487,34492,34501,34506,34515,34520,34529,34534,34543,34548,34557,34562,34575,34580,34590,34595,34605,34611,34617,34623,34629,34640,34646,34666,34672,34683,34689,34695,34701,34707,34713,34719,34725,34745,34751,34767,34773,34787,34793,34808,34814,34823,34829,34838,34844,34850,34859,34865,34876,34882,34901,34907,34918,34924,34944,34960,34966,34980,34986,34992,35003,35009,35015,35025,35031,35042,35048,35058,35063,35069,35118,35165,35170,35176,35195,35201,35221,35227,35233,35243,35248,35254,35270,35315,35321,35327,35333,35344,35350,35356,35362,35379,35393,35402,35411,35420,35429,35435,35441,35449,35454,35460,35471,35477,35497,35503,35509,35515,35532,35538,35544,35550,35556,35562,35589,35613,35619,35625,35631,35642,35653,35659,35676,35699,35722,35728,35733,35742,35752,35758,35763,35769,35782,35788,35799,35810,35829],{"__ignoreMap":41},[46,33794,33795,33797],{"class":48,"line":49},[46,33796,53],{"class":52},[46,33798,33799],{"class":56}," copy\n",[46,33801,33802,33804],{"class":48,"line":60},[46,33803,53],{"class":52},[46,33805,610],{"class":56},[46,33807,33808],{"class":48,"line":200},[46,33809,616],{"emptyLinePlaceholder":615},[46,33811,33812,33814,33817,33819],{"class":48,"line":211},[46,33813,53],{"class":52},[46,33815,33816],{"class":56}," pandas ",[46,33818,398],{"class":52},[46,33820,33821],{"class":56}," pd\n",[46,33823,33824,33826],{"class":48,"line":222},[46,33825,53],{"class":52},[46,33827,32378],{"class":56},[46,33829,33830,33832,33834,33836],{"class":48,"line":636},[46,33831,957],{"class":52},[46,33833,33392],{"class":56},[46,33835,53],{"class":52},[46,33837,33838],{"class":56}," Dataset\n",[46,33840,33841,33843,33845,33847],{"class":48,"line":641},[46,33842,957],{"class":52},[46,33844,33346],{"class":56},[46,33846,53],{"class":52},[46,33848,33351],{"class":56},[46,33850,33851,33853,33855,33857],{"class":48,"line":653},[46,33852,957],{"class":52},[46,33854,33375],{"class":56},[46,33856,53],{"class":52},[46,33858,33380],{"class":56},[46,33860,33861,33863,33865,33867],{"class":48,"line":659},[46,33862,53],{"class":52},[46,33864,33392],{"class":56},[46,33866,398],{"class":52},[46,33868,33397],{"class":56},[46,33870,33871,33873,33875,33877],{"class":48,"line":665},[46,33872,53],{"class":52},[46,33874,33409],{"class":56},[46,33876,398],{"class":52},[46,33878,33414],{"class":56},[46,33880,33881],{"class":48,"line":670},[46,33882,33883],{"class":2253},"# 导入模型\n",[46,33885,33886,33888,33891,33893],{"class":48,"line":676},[46,33887,957],{"class":52},[46,33889,33890],{"class":56}," model ",[46,33892,53],{"class":52},[46,33894,33895],{"class":56}," LeNet\n",[46,33897,33898,33900,33902,33904],{"class":48,"line":682},[46,33899,957],{"class":52},[46,33901,32721],{"class":56},[46,33903,53],{"class":52},[46,33905,32726],{"class":56},[46,33907,33908],{"class":48,"line":688},[46,33909,616],{"emptyLinePlaceholder":615},[46,33911,33912],{"class":48,"line":693},[46,33913,616],{"emptyLinePlaceholder":615},[46,33915,33916],{"class":48,"line":699},[46,33917,33918],{"class":2253},"# 处理训练集与验证集函数--->划分数据集\n",[46,33920,33921,33923,33926],{"class":48,"line":705},[46,33922,748],{"class":52},[46,33924,33925],{"class":169}," train_val_data_process",[46,33927,33928],{"class":56},"():\n",[46,33930,33931,33934,33936,33938,33940],{"class":48,"line":711},[46,33932,33933],{"class":56},"    train_data",[46,33935,79],{"class":52},[46,33937,33432],{"class":56},[46,33939,33440],{"class":173},[46,33941,33443],{"class":56},[46,33943,33944,33947,33949,33951],{"class":48,"line":717},[46,33945,33946],{"class":439},"                            train",[46,33948,79],{"class":52},[46,33950,33453],{"class":180},[46,33952,33443],{"class":56},[46,33954,33955,33958,33960,33962,33964,33966,33968],{"class":48,"line":723},[46,33956,33957],{"class":439},"                            transform",[46,33959,79],{"class":52},[46,33961,33470],{"class":56},[46,33963,33473],{"class":439},[46,33965,79],{"class":52},[46,33967,3087],{"class":180},[46,33969,33481],{"class":56},[46,33971,33972,33975,33977,33979],{"class":48,"line":729},[46,33973,33974],{"class":439},"                            download",[46,33976,79],{"class":52},[46,33978,33453],{"class":180},[46,33980,459],{"class":56},[46,33982,33983,33986,33988,33991,33994,33996,33999,34001,34003,34006,34008,34010,34013,34015,34017],{"class":48,"line":735},[46,33984,33985],{"class":56},"    train_data,val_data",[46,33987,79],{"class":52},[46,33989,33990],{"class":56},"Data.random_split(train_data,[",[46,33992,33993],{"class":180},"round",[46,33995,1152],{"class":56},[46,33997,33998],{"class":180},"0.8",[46,34000,2642],{"class":52},[46,34002,9371],{"class":180},[46,34004,34005],{"class":56},"(train_data)),",[46,34007,33993],{"class":180},[46,34009,1152],{"class":56},[46,34011,34012],{"class":180},"0.2",[46,34014,2642],{"class":52},[46,34016,9371],{"class":180},[46,34018,34019],{"class":56},"(train_data))])\n",[46,34021,34022,34025,34027,34030,34032,34034],{"class":48,"line":740},[46,34023,34024],{"class":56},"    train_dataloader ",[46,34026,79],{"class":52},[46,34028,34029],{"class":56}," Data.DataLoader(",[46,34031,33514],{"class":439},[46,34033,79],{"class":52},[46,34035,33519],{"class":56},[46,34037,34038,34041,34043,34046],{"class":48,"line":745},[46,34039,34040],{"class":439},"                                       batch_size",[46,34042,79],{"class":52},[46,34044,34045],{"class":180},"128",[46,34047,33443],{"class":56},[46,34049,34050,34053,34055,34057],{"class":48,"line":763},[46,34051,34052],{"class":439},"                                       shuffle",[46,34054,79],{"class":52},[46,34056,33453],{"class":180},[46,34058,33443],{"class":56},[46,34060,34061],{"class":48,"line":778},[46,34062,34063],{"class":2253},"                                       # 规定8个进程\n",[46,34065,34066,34069,34071,34073],{"class":48,"line":789},[46,34067,34068],{"class":439},"                                       num_workers",[46,34070,79],{"class":52},[46,34072,2582],{"class":180},[46,34074,459],{"class":56},[46,34076,34077,34080,34082,34084,34086,34088],{"class":48,"line":794},[46,34078,34079],{"class":56},"    val_dataloader",[46,34081,79],{"class":52},[46,34083,33511],{"class":56},[46,34085,33514],{"class":439},[46,34087,79],{"class":52},[46,34089,34090],{"class":56},"val_data,\n",[46,34092,34093,34096,34098,34100],{"class":48,"line":806},[46,34094,34095],{"class":439},"                                   batch_size",[46,34097,79],{"class":52},[46,34099,34045],{"class":180},[46,34101,33443],{"class":56},[46,34103,34104,34107,34109,34111],{"class":48,"line":829},[46,34105,34106],{"class":439},"                                   shuffle",[46,34108,79],{"class":52},[46,34110,33453],{"class":180},[46,34112,33443],{"class":56},[46,34114,34115,34118,34120,34122],{"class":48,"line":840},[46,34116,34117],{"class":439},"                                   num_workers",[46,34119,79],{"class":52},[46,34121,2582],{"class":180},[46,34123,459],{"class":56},[46,34125,34126,34128],{"class":48,"line":846},[46,34127,6108],{"class":52},[46,34129,34130],{"class":56}," train_dataloader,val_dataloader\n",[46,34132,34133],{"class":48,"line":852},[46,34134,616],{"emptyLinePlaceholder":615},[46,34136,34137],{"class":48,"line":857},[46,34138,34139],{"class":2253},"# 验证是否出错\n",[46,34141,34142],{"class":48,"line":875},[46,34143,34144],{"class":2253},"# train_val_data_process()\n",[46,34146,34147],{"class":48,"line":892},[46,34148,616],{"emptyLinePlaceholder":615},[46,34150,34151],{"class":48,"line":898},[46,34152,34153],{"class":2253},"# 定义模型训练函数\n",[46,34155,34156,34158,34161],{"class":48,"line":903},[46,34157,748],{"class":52},[46,34159,34160],{"class":169}," train_model_process",[46,34162,34163],{"class":56},"(model,train_dataloader,val_dataloader,num_epochs):\n",[46,34165,34166,34168,34170,34172,34174,34176,34178,34180,34183],{"class":48,"line":908},[46,34167,33216],{"class":56},[46,34169,79],{"class":52},[46,34171,32434],{"class":56},[46,34173,33223],{"class":173},[46,34175,3744],{"class":52},[46,34177,33228],{"class":56},[46,34179,3741],{"class":52},[46,34181,34182],{"class":173}," 'cpu'",[46,34184,459],{"class":56},[46,34186,34187],{"class":48,"line":925},[46,34188,616],{"emptyLinePlaceholder":615},[46,34190,34191],{"class":48,"line":1238},[46,34192,616],{"emptyLinePlaceholder":615},[46,34194,34195],{"class":48,"line":1251},[46,34196,34197],{"class":2253},"    # 定义优化器\n",[46,34199,34200],{"class":48,"line":1256},[46,34201,34202],{"class":2253},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[46,34204,34205],{"class":48,"line":1261},[46,34206,34207],{"class":2253},"    # lr为学习率\n",[46,34209,34210,34213,34215,34218,34221,34223,34226],{"class":48,"line":1274},[46,34211,34212],{"class":56},"    optimizer",[46,34214,79],{"class":52},[46,34216,34217],{"class":56},"torch.optim.Adam(model.parameters(),",[46,34219,34220],{"class":439},"lr",[46,34222,79],{"class":52},[46,34224,34225],{"class":180},"0.001",[46,34227,459],{"class":56},[46,34229,34230],{"class":48,"line":10061},[46,34231,616],{"emptyLinePlaceholder":615},[46,34233,34234],{"class":48,"line":11720},[46,34235,34236],{"class":2253},"    # 定义损失函数使用交叉熵损失函数\n",[46,34238,34239,34242,34244],{"class":48,"line":11745},[46,34240,34241],{"class":56},"    criterion",[46,34243,79],{"class":52},[46,34245,34246],{"class":56},"nn.CrossEntropyLoss()\n",[46,34248,34249],{"class":48,"line":11768},[46,34250,616],{"emptyLinePlaceholder":615},[46,34252,34253],{"class":48,"line":11792},[46,34254,34255],{"class":2253},"    # 将模型放到GPU中进行训练\n",[46,34257,34258,34260,34262],{"class":48,"line":11797},[46,34259,33268],{"class":56},[46,34261,79],{"class":52},[46,34263,34264],{"class":56},"model.to(device)\n",[46,34266,34267],{"class":48,"line":11802},[46,34268,34269],{"class":2253},"    # 复制当前模型的参数\n",[46,34271,34272],{"class":48,"line":11807},[46,34273,34274],{"class":2253},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[46,34276,34277],{"class":48,"line":11816},[46,34278,34279],{"class":2253},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[46,34281,34282,34285,34287],{"class":48,"line":11821},[46,34283,34284],{"class":56},"    best_model_wts",[46,34286,79],{"class":52},[46,34288,34289],{"class":56},"copy.deepcopy(model.state_dict())\n",[46,34291,34292],{"class":48,"line":11827},[46,34293,616],{"emptyLinePlaceholder":615},[46,34295,34296],{"class":48,"line":11848},[46,34297,616],{"emptyLinePlaceholder":615},[46,34299,34300],{"class":48,"line":11854},[46,34301,34302],{"class":2253},"    # 初始化参数\n",[46,34304,34305],{"class":48,"line":11868},[46,34306,34307],{"class":2253},"    # 最高准确度\n",[46,34309,34310,34313,34315],{"class":48,"line":11874},[46,34311,34312],{"class":56},"    best_acc",[46,34314,79],{"class":52},[46,34316,34317],{"class":180},"0.0\n",[46,34319,34320],{"class":48,"line":11901},[46,34321,34322],{"class":2253},"    # 训练集损失列表\n",[46,34324,34325,34328,34330],{"class":48,"line":11910},[46,34326,34327],{"class":56},"    train_loss_all",[46,34329,79],{"class":52},[46,34331,34332],{"class":56},"[]\n",[46,34334,34335],{"class":48,"line":11916},[46,34336,34337],{"class":2253},"    # 验证集函数列表\n",[46,34339,34340,34343,34345],{"class":48,"line":11924},[46,34341,34342],{"class":56},"    val_loss_all",[46,34344,79],{"class":52},[46,34346,34332],{"class":56},[46,34348,34349],{"class":48,"line":11929},[46,34350,34351],{"class":2253},"    # 训练集准确度列表\n",[46,34353,34354,34357,34359],{"class":48,"line":18605},[46,34355,34356],{"class":56},"    train_acc_all",[46,34358,79],{"class":52},[46,34360,34332],{"class":56},[46,34362,34363],{"class":48,"line":18611},[46,34364,34365],{"class":2253},"    # 验证集准确度列表\n",[46,34367,34368,34371,34373],{"class":48,"line":18634},[46,34369,34370],{"class":56},"    val_acc_all",[46,34372,79],{"class":52},[46,34374,34332],{"class":56},[46,34376,34377],{"class":48,"line":18640},[46,34378,616],{"emptyLinePlaceholder":615},[46,34380,34381],{"class":48,"line":18663},[46,34382,34383],{"class":2253},"    # 保存当前时间--->方便看每轮训练的时间\n",[46,34385,34386,34389,34391],{"class":48,"line":18677},[46,34387,34388],{"class":56},"    since",[46,34390,79],{"class":52},[46,34392,34393],{"class":56},"time.time()\n",[46,34395,34396],{"class":48,"line":18697},[46,34397,616],{"emptyLinePlaceholder":615},[46,34399,34400],{"class":48,"line":18703},[46,34401,616],{"emptyLinePlaceholder":615},[46,34403,34404],{"class":48,"line":18714},[46,34405,34406],{"class":2253},"    # 准备工作完成--->开始训练模型\n",[46,34408,34409,34411,34414,34416,34418],{"class":48,"line":18737},[46,34410,1140],{"class":52},[46,34412,34413],{"class":56}," epoch ",[46,34415,1146],{"class":52},[46,34417,1149],{"class":180},[46,34419,34420],{"class":56},"(num_epochs):\n",[46,34422,34423,34426,34428,34431,34434,34436,34438,34440,34443,34445,34447],{"class":48,"line":18759},[46,34424,34425],{"class":180},"        print",[46,34427,1152],{"class":56},[46,34429,34430],{"class":173},"\"Epoch ",[46,34432,34433],{"class":180},"{}",[46,34435,2770],{"class":173},[46,34437,34433],{"class":180},[46,34439,2439],{"class":173},[46,34441,34442],{"class":56},".format(epoch,num_epochs",[46,34444,534],{"class":52},[46,34446,2405],{"class":180},[46,34448,32479],{"class":56},[46,34450,34451,34453,34455,34458,34460,34462],{"class":48,"line":18764},[46,34452,34425],{"class":180},[46,34454,1152],{"class":56},[46,34456,34457],{"class":173},"\"-\"",[46,34459,2642],{"class":52},[46,34461,2633],{"class":180},[46,34463,459],{"class":56},[46,34465,34466],{"class":48,"line":18770},[46,34467,616],{"emptyLinePlaceholder":615},[46,34469,34470],{"class":48,"line":18784},[46,34471,34472],{"class":2253},"        # 初始化参数\n",[46,34474,34475],{"class":48,"line":18797},[46,34476,34477],{"class":2253},"        # 训练集损失函数\n",[46,34479,34480,34483,34485],{"class":48,"line":18802},[46,34481,34482],{"class":56},"        train_loss",[46,34484,79],{"class":52},[46,34486,34317],{"class":180},[46,34488,34489],{"class":48,"line":18816},[46,34490,34491],{"class":2253},"        # 训练集准确度\n",[46,34493,34494,34497,34499],{"class":48,"line":18821},[46,34495,34496],{"class":56},"        train_corrects",[46,34498,79],{"class":52},[46,34500,5105],{"class":180},[46,34502,34503],{"class":48,"line":18827},[46,34504,34505],{"class":2253},"        # 验证集损失函数\n",[46,34507,34508,34511,34513],{"class":48,"line":18832},[46,34509,34510],{"class":56},"        val_loss",[46,34512,79],{"class":52},[46,34514,34317],{"class":180},[46,34516,34517],{"class":48,"line":18846},[46,34518,34519],{"class":2253},"        # 验证集准确度\n",[46,34521,34522,34525,34527],{"class":48,"line":18851},[46,34523,34524],{"class":56},"        val_corrects",[46,34526,79],{"class":52},[46,34528,5105],{"class":180},[46,34530,34531],{"class":48,"line":18856},[46,34532,34533],{"class":2253},"        # 训练集样本数量\n",[46,34535,34536,34539,34541],{"class":48,"line":18870},[46,34537,34538],{"class":56},"        train_num",[46,34540,79],{"class":52},[46,34542,5105],{"class":180},[46,34544,34545],{"class":48,"line":18882},[46,34546,34547],{"class":2253},"        # 验证集样本数量\n",[46,34549,34550,34553,34555],{"class":48,"line":18887},[46,34551,34552],{"class":56},"        val_num",[46,34554,79],{"class":52},[46,34556,5105],{"class":180},[46,34558,34559],{"class":48,"line":18900},[46,34560,34561],{"class":2253},"        # 将数据放到设备,并开始训练\n",[46,34563,34564,34566,34568,34570,34572],{"class":48,"line":18905},[46,34565,5422],{"class":52},[46,34567,33578],{"class":56},[46,34569,1146],{"class":52},[46,34571,33583],{"class":180},[46,34573,34574],{"class":56},"(train_dataloader):\n",[46,34576,34577],{"class":48,"line":18910},[46,34578,34579],{"class":2253},"            # 将特征放入到训练设备\n",[46,34581,34582,34585,34587],{"class":48,"line":18915},[46,34583,34584],{"class":56},"            b_x",[46,34586,79],{"class":52},[46,34588,34589],{"class":56},"b_x.to(device)\n",[46,34591,34592],{"class":48,"line":18928},[46,34593,34594],{"class":2253},"            # 将标签放入到训练设备当中\n",[46,34596,34597,34600,34602],{"class":48,"line":18933},[46,34598,34599],{"class":56},"            b_y",[46,34601,79],{"class":52},[46,34603,34604],{"class":56},"b_y.to(device)\n",[46,34606,34608],{"class":48,"line":34607},98,[46,34609,34610],{"class":2253},"            # 设置模型为训练模式\n",[46,34612,34614],{"class":48,"line":34613},99,[46,34615,34616],{"class":56},"            model.train()\n",[46,34618,34620],{"class":48,"line":34619},100,[46,34621,34622],{"class":2253},"            # 将数据放到模型当中,开始前向传播\n",[46,34624,34626],{"class":48,"line":34625},101,[46,34627,34628],{"class":2253},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[46,34630,34632,34635,34637],{"class":48,"line":34631},102,[46,34633,34634],{"class":56},"            output",[46,34636,79],{"class":52},[46,34638,34639],{"class":56},"model(b_x)\n",[46,34641,34643],{"class":48,"line":34642},103,[46,34644,34645],{"class":2253},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[46,34647,34649,34652,34654,34657,34660,34662,34664],{"class":48,"line":34648},104,[46,34650,34651],{"class":56},"            pre_lab",[46,34653,79],{"class":52},[46,34655,34656],{"class":56},"torch.argmax(output,",[46,34658,34659],{"class":439},"dim",[46,34661,79],{"class":52},[46,34663,2405],{"class":180},[46,34665,459],{"class":56},[46,34667,34669],{"class":48,"line":34668},105,[46,34670,34671],{"class":2253},"            # 计算每一个batch的损失函数\n",[46,34673,34675,34678,34680],{"class":48,"line":34674},106,[46,34676,34677],{"class":56},"            loss",[46,34679,79],{"class":52},[46,34681,34682],{"class":56},"criterion(output,b_y)\n",[46,34684,34686],{"class":48,"line":34685},107,[46,34687,34688],{"class":2253},"            # 将梯度初始化为0\n",[46,34690,34692],{"class":48,"line":34691},108,[46,34693,34694],{"class":56},"            optimizer.zero_grad()\n",[46,34696,34698],{"class":48,"line":34697},109,[46,34699,34700],{"class":2253},"            # 梯度置为0后再进行反向传播\n",[46,34702,34704],{"class":48,"line":34703},110,[46,34705,34706],{"class":56},"            loss.backward()\n",[46,34708,34710],{"class":48,"line":34709},111,[46,34711,34712],{"class":2253},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[46,34714,34716],{"class":48,"line":34715},112,[46,34717,34718],{"class":56},"            optimizer.step()\n",[46,34720,34722],{"class":48,"line":34721},113,[46,34723,34724],{"class":2253},"            # loss.item()指的是batch的平均损失\n",[46,34726,34728,34731,34733,34736,34738,34741,34743],{"class":48,"line":34727},114,[46,34729,34730],{"class":56},"            train_loss",[46,34732,11481],{"class":52},[46,34734,34735],{"class":56},"loss.item()",[46,34737,2642],{"class":52},[46,34739,34740],{"class":56},"b_x.size(",[46,34742,2379],{"class":180},[46,34744,459],{"class":56},[46,34746,34748],{"class":48,"line":34747},115,[46,34749,34750],{"class":2253},"            # 计算每个批次中正确预测的数量\n",[46,34752,34754,34757,34759,34762,34764],{"class":48,"line":34753},116,[46,34755,34756],{"class":56},"            train_corrects",[46,34758,11481],{"class":52},[46,34760,34761],{"class":56},"torch.sum(pre_lab",[46,34763,4970],{"class":52},[46,34765,34766],{"class":56},"b_y.data)\n",[46,34768,34770],{"class":48,"line":34769},117,[46,34771,34772],{"class":2253},"            # 计算目前为止一共处理了多少样本\n",[46,34774,34776,34779,34781,34783,34785],{"class":48,"line":34775},118,[46,34777,34778],{"class":56},"            train_num",[46,34780,11481],{"class":52},[46,34782,34740],{"class":56},[46,34784,2379],{"class":180},[46,34786,459],{"class":56},[46,34788,34790],{"class":48,"line":34789},119,[46,34791,34792],{"class":2253},"        # 验证数据\n",[46,34794,34796,34798,34801,34803,34805],{"class":48,"line":34795},120,[46,34797,5422],{"class":52},[46,34799,34800],{"class":56}," step ,(b_x,b_y) ",[46,34802,1146],{"class":52},[46,34804,33583],{"class":180},[46,34806,34807],{"class":56},"(val_dataloader):\n",[46,34809,34811],{"class":48,"line":34810},121,[46,34812,34813],{"class":2253},"            # 将特征放到验证设备当中\n",[46,34815,34817,34819,34821],{"class":48,"line":34816},122,[46,34818,34584],{"class":56},[46,34820,79],{"class":52},[46,34822,34589],{"class":56},[46,34824,34826],{"class":48,"line":34825},123,[46,34827,34828],{"class":2253},"            # 将标签放到放到训练设备当中\n",[46,34830,34832,34834,34836],{"class":48,"line":34831},124,[46,34833,34599],{"class":56},[46,34835,79],{"class":52},[46,34837,34604],{"class":56},[46,34839,34841],{"class":48,"line":34840},125,[46,34842,34843],{"class":2253},"            # 开启验证模式，设置模型为评估模式\n",[46,34845,34847],{"class":48,"line":34846},126,[46,34848,34849],{"class":56},"            model.eval()\n",[46,34851,34853,34856],{"class":48,"line":34852},127,[46,34854,34855],{"class":52},"            with",[46,34857,34858],{"class":56}," torch.no_grad():\n",[46,34860,34862],{"class":48,"line":34861},128,[46,34863,34864],{"class":2253},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[46,34866,34868,34871,34873],{"class":48,"line":34867},129,[46,34869,34870],{"class":56},"                output ",[46,34872,79],{"class":52},[46,34874,34875],{"class":56}," model(b_x)\n",[46,34877,34879],{"class":48,"line":34878},130,[46,34880,34881],{"class":2253},"                # 查找每一行中最大值对应的下标\n",[46,34883,34885,34888,34890,34893,34895,34897,34899],{"class":48,"line":34884},131,[46,34886,34887],{"class":56},"                pre_lab ",[46,34889,79],{"class":52},[46,34891,34892],{"class":56}," torch.argmax(output, ",[46,34894,34659],{"class":439},[46,34896,79],{"class":52},[46,34898,2405],{"class":180},[46,34900,459],{"class":56},[46,34902,34904],{"class":48,"line":34903},132,[46,34905,34906],{"class":2253},"                # 计算验证集上的当前 batch 损失\n",[46,34908,34910,34913,34915],{"class":48,"line":34909},133,[46,34911,34912],{"class":56},"                val_batch_loss ",[46,34914,79],{"class":52},[46,34916,34917],{"class":56}," criterion(output, b_y)\n",[46,34919,34921],{"class":48,"line":34920},134,[46,34922,34923],{"class":2253},"                # 对损失函数进行累加（按样本数加权）\n",[46,34925,34927,34930,34932,34935,34937,34940,34942],{"class":48,"line":34926},135,[46,34928,34929],{"class":56},"                val_loss ",[46,34931,11481],{"class":52},[46,34933,34934],{"class":56}," val_batch_loss.item() ",[46,34936,2642],{"class":52},[46,34938,34939],{"class":56}," b_x.size(",[46,34941,2379],{"class":180},[46,34943,459],{"class":56},[46,34945,34947,34950,34952,34955,34957],{"class":48,"line":34946},136,[46,34948,34949],{"class":56},"                val_corrects ",[46,34951,11481],{"class":52},[46,34953,34954],{"class":56}," torch.sum(pre_lab ",[46,34956,4970],{"class":52},[46,34958,34959],{"class":56}," b_y.data)\n",[46,34961,34963],{"class":48,"line":34962},137,[46,34964,34965],{"class":2253},"                # 当前用于验证的样本数量\n",[46,34967,34969,34972,34974,34976,34978],{"class":48,"line":34968},138,[46,34970,34971],{"class":56},"            val_num ",[46,34973,11481],{"class":52},[46,34975,34939],{"class":56},[46,34977,2379],{"class":180},[46,34979,459],{"class":56},[46,34981,34983],{"class":48,"line":34982},139,[46,34984,34985],{"class":2253},"        # 计算并保存每一次迭代的loss值和准确率\n",[46,34987,34989],{"class":48,"line":34988},140,[46,34990,34991],{"class":2253},"        # 计算并保存训练集的loss值\n",[46,34993,34995,34998,35000],{"class":48,"line":34994},141,[46,34996,34997],{"class":56},"        train_loss_all.append(train_loss",[46,34999,2770],{"class":52},[46,35001,35002],{"class":56},"train_num)\n",[46,35004,35006],{"class":48,"line":35005},142,[46,35007,35008],{"class":2253},"        # 取双精度\n",[46,35010,35012],{"class":48,"line":35011},143,[46,35013,35014],{"class":2253},"        # 计算并保存训练集的准确率\n",[46,35016,35018,35021,35023],{"class":48,"line":35017},144,[46,35019,35020],{"class":56},"        train_acc_all.append(train_corrects.double().item()",[46,35022,2770],{"class":52},[46,35024,35002],{"class":56},[46,35026,35028],{"class":48,"line":35027},145,[46,35029,35030],{"class":2253},"        # 计算并保存验证集的loss值\n",[46,35032,35034,35037,35039],{"class":48,"line":35033},146,[46,35035,35036],{"class":56},"        val_loss_all.append(val_loss",[46,35038,2770],{"class":52},[46,35040,35041],{"class":56},"val_num)\n",[46,35043,35045],{"class":48,"line":35044},147,[46,35046,35047],{"class":2253},"        # 计算并保存验证集的准确率\n",[46,35049,35051,35054,35056],{"class":48,"line":35050},148,[46,35052,35053],{"class":56},"        val_acc_all.append(val_corrects.double().item()",[46,35055,2770],{"class":52},[46,35057,35041],{"class":56},[46,35059,35061],{"class":48,"line":35060},149,[46,35062,616],{"emptyLinePlaceholder":615},[46,35064,35066],{"class":48,"line":35065},150,[46,35067,35068],{"class":2253},"        # 打印训练一轮的loss值和准确率\n",[46,35070,35072,35074,35076,35078,35080,35083,35085,35088,35090,35093,35095,35097,35099,35101,35104,35106,35108,35111,35113,35115],{"class":48,"line":35071},151,[46,35073,34425],{"class":180},[46,35075,1152],{"class":56},[46,35077,5611],{"class":173},[46,35079,34433],{"class":180},[46,35081,35082],{"class":173},"train loss:",[46,35084,3082],{"class":180},[46,35086,35087],{"class":52},":.4f",[46,35089,3131],{"class":180},[46,35091,35092],{"class":173}," train acc:",[46,35094,3082],{"class":180},[46,35096,35087],{"class":52},[46,35098,3131],{"class":180},[46,35100,5611],{"class":173},[46,35102,35103],{"class":56},".format(epoch,train_loss_all[",[46,35105,534],{"class":52},[46,35107,2405],{"class":180},[46,35109,35110],{"class":56},"],train_acc_all[",[46,35112,534],{"class":52},[46,35114,2405],{"class":180},[46,35116,35117],{"class":56},"]))\n",[46,35119,35121,35123,35125,35127,35129,35132,35134,35136,35138,35141,35143,35145,35147,35149,35152,35154,35156,35159,35161,35163],{"class":48,"line":35120},152,[46,35122,34425],{"class":180},[46,35124,1152],{"class":56},[46,35126,5611],{"class":173},[46,35128,34433],{"class":180},[46,35130,35131],{"class":173},"val loss:",[46,35133,3082],{"class":180},[46,35135,35087],{"class":52},[46,35137,3131],{"class":180},[46,35139,35140],{"class":173}," val acc:",[46,35142,3082],{"class":180},[46,35144,35087],{"class":52},[46,35146,3131],{"class":180},[46,35148,5611],{"class":173},[46,35150,35151],{"class":56},".format(epoch,val_loss_all[",[46,35153,534],{"class":52},[46,35155,2405],{"class":180},[46,35157,35158],{"class":56},"],val_acc_all[",[46,35160,534],{"class":52},[46,35162,2405],{"class":180},[46,35164,35117],{"class":56},[46,35166,35168],{"class":48,"line":35167},153,[46,35169,616],{"emptyLinePlaceholder":615},[46,35171,35173],{"class":48,"line":35172},154,[46,35174,35175],{"class":2253},"        # 判断准确度--->保存最优模型\n",[46,35177,35179,35181,35184,35186,35188,35190,35192],{"class":48,"line":35178},155,[46,35180,4525],{"class":52},[46,35182,35183],{"class":56}," val_acc_all[",[46,35185,534],{"class":52},[46,35187,2405],{"class":180},[46,35189,3125],{"class":56},[46,35191,884],{"class":52},[46,35193,35194],{"class":56},"best_acc:\n",[46,35196,35198],{"class":48,"line":35197},156,[46,35199,35200],{"class":2253},"            # 保存当前模型准确度\n",[46,35202,35204,35207,35209,35211,35214,35216,35218],{"class":48,"line":35203},157,[46,35205,35206],{"class":56},"            best_acc:",[46,35208,2236],{"class":180},[46,35210,79],{"class":52},[46,35212,35213],{"class":56},"val_acc_all[",[46,35215,534],{"class":52},[46,35217,2405],{"class":180},[46,35219,35220],{"class":56},"]\n",[46,35222,35224],{"class":48,"line":35223},158,[46,35225,35226],{"class":2253},"            # 保存当前的准确度\n",[46,35228,35230],{"class":48,"line":35229},159,[46,35231,35232],{"class":2253},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[46,35234,35236,35239,35241],{"class":48,"line":35235},160,[46,35237,35238],{"class":56},"            best_model_wts",[46,35240,79],{"class":52},[46,35242,34289],{"class":56},[46,35244,35246],{"class":48,"line":35245},161,[46,35247,616],{"emptyLinePlaceholder":615},[46,35249,35251],{"class":48,"line":35250},162,[46,35252,35253],{"class":2253},"        # 计算耗时\n",[46,35255,35257,35260,35262,35265,35267],{"class":48,"line":35256},163,[46,35258,35259],{"class":56},"        time_use",[46,35261,79],{"class":52},[46,35263,35264],{"class":56},"time.time()",[46,35266,534],{"class":52},[46,35268,35269],{"class":56},"since\n",[46,35271,35273,35275,35277,35280,35282,35285,35287,35289,35291,35293,35295,35298,35301,35304,35306,35309,35311,35313],{"class":48,"line":35272},164,[46,35274,34425],{"class":180},[46,35276,1152],{"class":56},[46,35278,35279],{"class":173},"'训练和验证耗费的时间",[46,35281,3082],{"class":180},[46,35283,35284],{"class":52},":.0f",[46,35286,3131],{"class":180},[46,35288,2730],{"class":173},[46,35290,3082],{"class":180},[46,35292,35284],{"class":52},[46,35294,3131],{"class":180},[46,35296,35297],{"class":173},"s'",[46,35299,35300],{"class":56},".format(time_use",[46,35302,35303],{"class":52},"\u002F\u002F",[46,35305,3093],{"class":180},[46,35307,35308],{"class":56},",time_use",[46,35310,2515],{"class":52},[46,35312,3093],{"class":180},[46,35314,32479],{"class":56},[46,35316,35318],{"class":48,"line":35317},165,[46,35319,35320],{"class":2253},"    # 选择最优参数\n",[46,35322,35324],{"class":48,"line":35323},166,[46,35325,35326],{"class":2253},"    # 加载最高准确率下的模型参数\n",[46,35328,35330],{"class":48,"line":35329},167,[46,35331,35332],{"class":2253},"    # model.load_state_dict(best_model_wts)\n",[46,35334,35336,35339,35342],{"class":48,"line":35335},168,[46,35337,35338],{"class":56},"    torch.save(model.state_dict(best_model_wts), ",[46,35340,35341],{"class":173},"'.\u002Fbest_model.pth'",[46,35343,459],{"class":56},[46,35345,35347],{"class":48,"line":35346},169,[46,35348,35349],{"class":2253},"    # 或者写成\n",[46,35351,35353],{"class":48,"line":35352},170,[46,35354,35355],{"class":2253},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[46,35357,35359],{"class":48,"line":35358},171,[46,35360,35361],{"class":2253},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[46,35363,35365,35368,35370,35373,35375,35377],{"class":48,"line":35364},172,[46,35366,35367],{"class":56},"    train_process",[46,35369,79],{"class":52},[46,35371,35372],{"class":56},"pd.DataFrame(",[46,35374,1516],{"class":439},[46,35376,79],{"class":52},[46,35378,3597],{"class":56},[46,35380,35382,35385,35387,35390],{"class":48,"line":35381},173,[46,35383,35384],{"class":173},"        \"epoch\"",[46,35386,3045],{"class":56},[46,35388,35389],{"class":180},"range",[46,35391,35392],{"class":56},"(num_epochs),\n",[46,35394,35396,35399],{"class":48,"line":35395},174,[46,35397,35398],{"class":173},"        \"train_loss_all\"",[46,35400,35401],{"class":56},":train_loss_all,\n",[46,35403,35405,35408],{"class":48,"line":35404},175,[46,35406,35407],{"class":173},"        \"val_loss_all\"",[46,35409,35410],{"class":56},":val_loss_all,\n",[46,35412,35414,35417],{"class":48,"line":35413},176,[46,35415,35416],{"class":173},"        \"train_acc_all\"",[46,35418,35419],{"class":56},":train_acc_all,\n",[46,35421,35423,35426],{"class":48,"line":35422},177,[46,35424,35425],{"class":173},"        \"val_acc_all\"",[46,35427,35428],{"class":56},":val_acc_all\n",[46,35430,35432],{"class":48,"line":35431},178,[46,35433,35434],{"class":56},"    })\n",[46,35436,35438],{"class":48,"line":35437},179,[46,35439,35440],{"class":2253},"    # 返回训练保存的过程\n",[46,35442,35444,35446],{"class":48,"line":35443},180,[46,35445,6108],{"class":52},[46,35447,35448],{"class":56}," train_process\n",[46,35450,35452],{"class":48,"line":35451},181,[46,35453,616],{"emptyLinePlaceholder":615},[46,35455,35457],{"class":48,"line":35456},182,[46,35458,35459],{"class":2253},"# 将loss值和精度按照图片的形式展示出来\n",[46,35461,35463,35465,35468],{"class":48,"line":35462},183,[46,35464,748],{"class":52},[46,35466,35467],{"class":169}," matplot_acc_loss",[46,35469,35470],{"class":56},"(train_process):\n",[46,35472,35474],{"class":48,"line":35473},184,[46,35475,35476],{"class":2253},"    # 设置图的大小\n",[46,35478,35480,35483,35485,35487,35489,35491,35493,35495],{"class":48,"line":35479},185,[46,35481,35482],{"class":56},"    plt.figure(",[46,35484,33670],{"class":439},[46,35486,79],{"class":52},[46,35488,1152],{"class":56},[46,35490,2685],{"class":180},[46,35492,2565],{"class":56},[46,35494,2481],{"class":180},[46,35496,32479],{"class":56},[46,35498,35500],{"class":48,"line":35499},186,[46,35501,35502],{"class":2253},"    # 设置图中有几张图\n",[46,35504,35506],{"class":48,"line":35505},187,[46,35507,35508],{"class":2253},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[46,35510,35512],{"class":48,"line":35511},188,[46,35513,35514],{"class":2253},"    # ①loss图\n",[46,35516,35518,35520,35522,35524,35526,35528,35530],{"class":48,"line":35517},189,[46,35519,33704],{"class":56},[46,35521,2405],{"class":180},[46,35523,2565],{"class":56},[46,35525,2272],{"class":180},[46,35527,2565],{"class":56},[46,35529,2405],{"class":180},[46,35531,459],{"class":56},[46,35533,35535],{"class":48,"line":35534},190,[46,35536,35537],{"class":2253},"    # 补充:\n",[46,35539,35541],{"class":48,"line":35540},191,[46,35542,35543],{"class":2253},"    # plt.subplot(nrows, ncols, index)\n",[46,35545,35547],{"class":48,"line":35546},192,[46,35548,35549],{"class":2253},"    # nrows：行数\n",[46,35551,35553],{"class":48,"line":35552},193,[46,35554,35555],{"class":2253},"    # ncols：列数\n",[46,35557,35559],{"class":48,"line":35558},194,[46,35560,35561],{"class":2253},"    # index：目前选中第几个子图（从1开始）\n",[46,35563,35565,35568,35571,35574,35577,35579,35582,35584,35587],{"class":48,"line":35564},195,[46,35566,35567],{"class":56},"    plt.plot(train_process[",[46,35569,35570],{"class":173},"\"epoch\"",[46,35572,35573],{"class":56},"],train_process.train_loss_all,",[46,35575,35576],{"class":173},"'ro-'",[46,35578,2565],{"class":56},[46,35580,35581],{"class":439},"label",[46,35583,79],{"class":52},[46,35585,35586],{"class":173},"'train loss'",[46,35588,459],{"class":56},[46,35590,35592,35594,35596,35599,35602,35604,35606,35608,35611],{"class":48,"line":35591},196,[46,35593,35567],{"class":56},[46,35595,35570],{"class":173},[46,35597,35598],{"class":56},"],train_process.val_loss_all,",[46,35600,35601],{"class":173},"'bs--'",[46,35603,2565],{"class":56},[46,35605,35581],{"class":439},[46,35607,79],{"class":52},[46,35609,35610],{"class":173},"'val loss'",[46,35612,459],{"class":56},[46,35614,35616],{"class":48,"line":35615},197,[46,35617,35618],{"class":2253},"    # 添加一个图例\n",[46,35620,35622],{"class":48,"line":35621},198,[46,35623,35624],{"class":56},"    plt.legend()\n",[46,35626,35628],{"class":48,"line":35627},199,[46,35629,35630],{"class":2253},"    # 给轴添加标签\n",[46,35632,35634,35637,35640],{"class":48,"line":35633},200,[46,35635,35636],{"class":56},"    plt.xlabel(",[46,35638,35639],{"class":173},"'epoch'",[46,35641,459],{"class":56},[46,35643,35645,35648,35651],{"class":48,"line":35644},201,[46,35646,35647],{"class":56},"    plt.ylabel(",[46,35649,35650],{"class":173},"'loss'",[46,35652,459],{"class":56},[46,35654,35656],{"class":48,"line":35655},202,[46,35657,35658],{"class":2253},"    # ②准确度图\n",[46,35660,35662,35664,35666,35668,35670,35672,35674],{"class":48,"line":35661},203,[46,35663,33704],{"class":56},[46,35665,2405],{"class":180},[46,35667,2565],{"class":56},[46,35669,2272],{"class":180},[46,35671,2565],{"class":56},[46,35673,2272],{"class":180},[46,35675,459],{"class":56},[46,35677,35679,35681,35683,35686,35688,35690,35692,35694,35697],{"class":48,"line":35678},204,[46,35680,35567],{"class":56},[46,35682,35570],{"class":173},[46,35684,35685],{"class":56},"],train_process.train_acc_all,",[46,35687,35576],{"class":173},[46,35689,2565],{"class":56},[46,35691,35581],{"class":439},[46,35693,79],{"class":52},[46,35695,35696],{"class":173},"'train acc'",[46,35698,459],{"class":56},[46,35700,35702,35704,35706,35709,35711,35713,35715,35717,35720],{"class":48,"line":35701},205,[46,35703,35567],{"class":56},[46,35705,35570],{"class":173},[46,35707,35708],{"class":56},"],train_process.val_acc_all,",[46,35710,35601],{"class":173},[46,35712,2565],{"class":56},[46,35714,35581],{"class":439},[46,35716,79],{"class":52},[46,35718,35719],{"class":173},"'val acc'",[46,35721,459],{"class":56},[46,35723,35725],{"class":48,"line":35724},206,[46,35726,35727],{"class":2253},"    # 添加图例\n",[46,35729,35731],{"class":48,"line":35730},207,[46,35732,35624],{"class":56},[46,35734,35736,35738,35740],{"class":48,"line":35735},208,[46,35737,35636],{"class":56},[46,35739,35570],{"class":173},[46,35741,459],{"class":56},[46,35743,35745,35747,35750],{"class":48,"line":35744},209,[46,35746,35647],{"class":56},[46,35748,35749],{"class":173},"\"acc\"",[46,35751,459],{"class":56},[46,35753,35755],{"class":48,"line":35754},210,[46,35756,35757],{"class":56},"    plt.show()\n",[46,35759,35761],{"class":48,"line":35760},211,[46,35762,616],{"emptyLinePlaceholder":615},[46,35764,35766],{"class":48,"line":35765},212,[46,35767,35768],{"class":2253},"# 正式开始训练:\n",[46,35770,35772,35774,35776,35778,35780],{"class":48,"line":35771},213,[46,35773,911],{"class":52},[46,35775,914],{"class":180},[46,35777,4970],{"class":52},[46,35779,33204],{"class":173},[46,35781,760],{"class":56},[46,35783,35785],{"class":48,"line":35784},214,[46,35786,35787],{"class":2253},"    # 将模型实例化\n",[46,35789,35791,35794,35796],{"class":48,"line":35790},215,[46,35792,35793],{"class":56},"    LeNet",[46,35795,79],{"class":52},[46,35797,35798],{"class":56},"LeNet()\n",[46,35800,35802,35805,35807],{"class":48,"line":35801},216,[46,35803,35804],{"class":56},"    train_dataloader,val_dataloader",[46,35806,79],{"class":52},[46,35808,35809],{"class":56},"train_val_data_process()\n",[46,35811,35813,35815,35817,35820,35823,35825,35827],{"class":48,"line":35812},217,[46,35814,35367],{"class":56},[46,35816,79],{"class":52},[46,35818,35819],{"class":56},"train_model_process(LeNet,train_dataloader,val_dataloader,",[46,35821,35822],{"class":439},"num_epochs",[46,35824,79],{"class":52},[46,35826,2886],{"class":180},[46,35828,459],{"class":56},[46,35830,35832],{"class":48,"line":35831},218,[46,35833,35834],{"class":56},"    matplot_acc_loss(train_process)\n",[19,35836,35837],{},"画图的补充点学习：",[19,35839,35840],{},[3514,35841],{"alt":41,"src":35842},"\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",[23,35844,35845],{"start":200},[26,35846,35847],{},"测试",[36,35849,35851],{"className":38,"code":35850,"language":40,"meta":41,"style":41},"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",[43,35852,35853,35859,35869,35881,35891,35896,35906,35916,35920,35925,35934,35951,35963,35980,35991,36007,36012,36023,36034,36045,36052,36056,36061,36071,36076,36093,36101,36105,36110,36119,36128,36132,36137,36142,36147,36153,36158,36170,36180,36190,36195,36199,36204,36213,36218,36234,36239,36244,36249,36263,36268,36282,36286,36291,36306,36311,36323,36327,36332,36344,36349,36357,36362,36367,36377,36382,36391,36396,36401,36405,36410,36415,36431,36439,36444,36449,36508,36514,36519,36530,36538,36546,36550,36555,36559,36564,36572,36577,36593,36598,36608,36618],{"__ignoreMap":41},[46,35854,35855,35857],{"class":48,"line":49},[46,35856,53],{"class":52},[46,35858,32378],{"class":56},[46,35860,35861,35863,35865,35867],{"class":48,"line":60},[46,35862,53],{"class":52},[46,35864,33392],{"class":56},[46,35866,398],{"class":52},[46,35868,33397],{"class":56},[46,35870,35871,35873,35876,35878],{"class":48,"line":200},[46,35872,957],{"class":52},[46,35874,35875],{"class":56}," jupyter_client.consoleapp ",[46,35877,53],{"class":52},[46,35879,35880],{"class":56}," classes\n",[46,35882,35883,35885,35887,35889],{"class":48,"line":211},[46,35884,957],{"class":52},[46,35886,33375],{"class":56},[46,35888,53],{"class":52},[46,35890,33380],{"class":56},[46,35892,35893],{"class":48,"line":222},[46,35894,35895],{"class":2253},"# 导入数据集\n",[46,35897,35898,35900,35902,35904],{"class":48,"line":636},[46,35899,957],{"class":52},[46,35901,33346],{"class":56},[46,35903,53],{"class":52},[46,35905,33351],{"class":56},[46,35907,35908,35910,35912,35914],{"class":48,"line":641},[46,35909,957],{"class":52},[46,35911,33890],{"class":56},[46,35913,53],{"class":52},[46,35915,33895],{"class":56},[46,35917,35918],{"class":48,"line":653},[46,35919,616],{"emptyLinePlaceholder":615},[46,35921,35922],{"class":48,"line":659},[46,35923,35924],{"class":2253},"# 测试数据处理\n",[46,35926,35927,35929,35932],{"class":48,"line":665},[46,35928,748],{"class":52},[46,35930,35931],{"class":169}," test_data_process",[46,35933,33928],{"class":56},[46,35935,35936,35939,35941,35943,35945,35947,35949],{"class":48,"line":670},[46,35937,35938],{"class":56},"    test_data",[46,35940,79],{"class":52},[46,35942,33432],{"class":56},[46,35944,33435],{"class":439},[46,35946,79],{"class":52},[46,35948,33440],{"class":173},[46,35950,33443],{"class":56},[46,35952,35953,35956,35958,35961],{"class":48,"line":676},[46,35954,35955],{"class":439},"                           train",[46,35957,79],{"class":52},[46,35959,35960],{"class":180},"False",[46,35962,33443],{"class":56},[46,35964,35965,35968,35970,35972,35974,35976,35978],{"class":48,"line":682},[46,35966,35967],{"class":439},"                           transform",[46,35969,79],{"class":52},[46,35971,33470],{"class":56},[46,35973,33473],{"class":439},[46,35975,79],{"class":52},[46,35977,3087],{"class":180},[46,35979,33481],{"class":56},[46,35981,35982,35985,35987,35989],{"class":48,"line":688},[46,35983,35984],{"class":439},"                           download",[46,35986,79],{"class":52},[46,35988,33453],{"class":180},[46,35990,459],{"class":56},[46,35992,35993,35996,35998,36000,36002,36004],{"class":48,"line":693},[46,35994,35995],{"class":56},"    test_dataloader",[46,35997,79],{"class":52},[46,35999,33511],{"class":56},[46,36001,33514],{"class":439},[46,36003,79],{"class":52},[46,36005,36006],{"class":56},"test_data,\n",[46,36008,36009],{"class":48,"line":699},[46,36010,36011],{"class":2253},"                                    # 这里是一张一张进行测试\n",[46,36013,36014,36017,36019,36021],{"class":48,"line":705},[46,36015,36016],{"class":439},"                                    batch_size",[46,36018,79],{"class":52},[46,36020,2405],{"class":180},[46,36022,33443],{"class":56},[46,36024,36025,36028,36030,36032],{"class":48,"line":711},[46,36026,36027],{"class":439},"                                    shuffle",[46,36029,79],{"class":52},[46,36031,33453],{"class":180},[46,36033,33443],{"class":56},[46,36035,36036,36039,36041,36043],{"class":48,"line":717},[46,36037,36038],{"class":439},"                                    num_workers",[46,36040,79],{"class":52},[46,36042,2379],{"class":180},[46,36044,459],{"class":56},[46,36046,36047,36049],{"class":48,"line":723},[46,36048,6108],{"class":52},[46,36050,36051],{"class":56}," test_dataloader\n",[46,36053,36054],{"class":48,"line":729},[46,36055,616],{"emptyLinePlaceholder":615},[46,36057,36058],{"class":48,"line":735},[46,36059,36060],{"class":2253},"# 定义模型测试函数\n",[46,36062,36063,36065,36068],{"class":48,"line":740},[46,36064,748],{"class":52},[46,36066,36067],{"class":169}," test_model_process",[46,36069,36070],{"class":56},"(model,test_dataloader):\n",[46,36072,36073],{"class":48,"line":745},[46,36074,36075],{"class":2253},"    # 将模型放到设备当中，先进行判断\n",[46,36077,36078,36080,36082,36084,36086,36088,36090],{"class":48,"line":763},[46,36079,33216],{"class":56},[46,36081,79],{"class":52},[46,36083,33223],{"class":173},[46,36085,3744],{"class":52},[46,36087,33228],{"class":56},[46,36089,3741],{"class":52},[46,36091,36092],{"class":173}," \"cpu\"\n",[46,36094,36095,36097,36099],{"class":48,"line":778},[46,36096,33268],{"class":56},[46,36098,79],{"class":52},[46,36100,34264],{"class":56},[46,36102,36103],{"class":48,"line":789},[46,36104,616],{"emptyLinePlaceholder":615},[46,36106,36107],{"class":48,"line":794},[46,36108,36109],{"class":2253},"    # 设置初始化参数\n",[46,36111,36112,36115,36117],{"class":48,"line":806},[46,36113,36114],{"class":56},"    test_corrects",[46,36116,79],{"class":52},[46,36118,34317],{"class":180},[46,36120,36121,36124,36126],{"class":48,"line":829},[46,36122,36123],{"class":56},"    test_num",[46,36125,79],{"class":52},[46,36127,5105],{"class":180},[46,36129,36130],{"class":48,"line":840},[46,36131,616],{"emptyLinePlaceholder":615},[46,36133,36134],{"class":48,"line":846},[46,36135,36136],{"class":2253},"    # 进行模型测试\n",[46,36138,36139],{"class":48,"line":852},[46,36140,36141],{"class":2253},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[46,36143,36144],{"class":48,"line":857},[46,36145,36146],{"class":2253},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[46,36148,36149,36151],{"class":48,"line":875},[46,36150,797],{"class":52},[46,36152,34858],{"class":56},[46,36154,36155],{"class":48,"line":892},[46,36156,36157],{"class":2253},"        # 从数据中进行\n",[46,36159,36160,36162,36165,36167],{"class":48,"line":898},[46,36161,5422],{"class":52},[46,36163,36164],{"class":56}," test_data_x,test_data_y ",[46,36166,1146],{"class":52},[46,36168,36169],{"class":56}," test_dataloader:\n",[46,36171,36172,36175,36177],{"class":48,"line":903},[46,36173,36174],{"class":56},"            test_data_x",[46,36176,79],{"class":52},[46,36178,36179],{"class":56},"test_data_x.to(device)\n",[46,36181,36182,36185,36187],{"class":48,"line":908},[46,36183,36184],{"class":56},"            test_data_y",[46,36186,79],{"class":52},[46,36188,36189],{"class":56},"test_data_y.to(device)\n",[46,36191,36192],{"class":48,"line":925},[46,36193,36194],{"class":2253},"            # 设置为验证模式\n",[46,36196,36197],{"class":48,"line":1238},[46,36198,34849],{"class":56},[46,36200,36201],{"class":48,"line":1251},[46,36202,36203],{"class":2253},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[46,36205,36206,36208,36210],{"class":48,"line":1256},[46,36207,34634],{"class":56},[46,36209,79],{"class":52},[46,36211,36212],{"class":56},"model(test_data_x)\n",[46,36214,36215],{"class":48,"line":1261},[46,36216,36217],{"class":2253},"            # 查找每一行中最大值对应的下标\n",[46,36219,36220,36222,36224,36226,36228,36230,36232],{"class":48,"line":1274},[46,36221,34651],{"class":56},[46,36223,79],{"class":52},[46,36225,34656],{"class":56},[46,36227,34659],{"class":439},[46,36229,79],{"class":52},[46,36231,2405],{"class":180},[46,36233,459],{"class":56},[46,36235,36236],{"class":48,"line":10061},[46,36237,36238],{"class":2253},"            # 计算正确率\n",[46,36240,36241],{"class":48,"line":11720},[46,36242,36243],{"class":2253},"            # .data表示是一个不带梯度信息的tensor\n",[46,36245,36246],{"class":48,"line":11745},[46,36247,36248],{"class":2253},"            # 如果预测正确，则准确度test_corrects加1\n",[46,36250,36251,36254,36256,36258,36260],{"class":48,"line":11768},[46,36252,36253],{"class":56},"            test_corrects",[46,36255,11481],{"class":52},[46,36257,34761],{"class":56},[46,36259,4970],{"class":52},[46,36261,36262],{"class":56},"test_data_y.data)\n",[46,36264,36265],{"class":48,"line":11792},[46,36266,36267],{"class":2253},"            # 将所有的测试样本进行累计\n",[46,36269,36270,36273,36275,36278,36280],{"class":48,"line":11797},[46,36271,36272],{"class":56},"            test_num",[46,36274,11481],{"class":52},[46,36276,36277],{"class":56},"test_data_x.size(",[46,36279,2379],{"class":180},[46,36281,459],{"class":56},[46,36283,36284],{"class":48,"line":11802},[46,36285,616],{"emptyLinePlaceholder":615},[46,36287,36288],{"class":48,"line":11807},[46,36289,36290],{"class":2253},"        # 计算准确度\n",[46,36292,36293,36296,36298,36301,36303],{"class":48,"line":11816},[46,36294,36295],{"class":56},"        test_acc",[46,36297,79],{"class":52},[46,36299,36300],{"class":56},"test_corrects.double().item()",[46,36302,2770],{"class":52},[46,36304,36305],{"class":56},"test_num\n",[46,36307,36308],{"class":48,"line":11821},[46,36309,36310],{"class":2253},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[46,36312,36313,36315,36317,36320],{"class":48,"line":11827},[46,36314,34425],{"class":180},[46,36316,1152],{"class":56},[46,36318,36319],{"class":173},"\"测试的准确率：\"",[46,36321,36322],{"class":56},",test_acc)\n",[46,36324,36325],{"class":48,"line":11848},[46,36326,616],{"emptyLinePlaceholder":615},[46,36328,36329],{"class":48,"line":11854},[46,36330,36331],{"class":2253},"# 实现模型的测试功能\n",[46,36333,36334,36336,36338,36340,36342],{"class":48,"line":11868},[46,36335,911],{"class":52},[46,36337,914],{"class":180},[46,36339,4970],{"class":52},[46,36341,33204],{"class":173},[46,36343,760],{"class":56},[46,36345,36346],{"class":48,"line":11874},[46,36347,36348],{"class":2253},"    # 加载模型\n",[46,36350,36351,36353,36355],{"class":48,"line":11901},[46,36352,33268],{"class":56},[46,36354,79],{"class":52},[46,36356,35798],{"class":56},[46,36358,36359],{"class":48,"line":11910},[46,36360,36361],{"class":2253},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[46,36363,36364],{"class":48,"line":11916},[46,36365,36366],{"class":2253},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[46,36368,36369,36372,36375],{"class":48,"line":11924},[46,36370,36371],{"class":56},"    model.load_state_dict(torch.load(",[46,36373,36374],{"class":173},"'best_model.pth'",[46,36376,32479],{"class":56},[46,36378,36379],{"class":48,"line":11929},[46,36380,36381],{"class":2253},"    # 数据加载\n",[46,36383,36384,36386,36388],{"class":48,"line":18605},[46,36385,35995],{"class":56},[46,36387,79],{"class":52},[46,36389,36390],{"class":56},"test_data_process()\n",[46,36392,36393],{"class":48,"line":18611},[46,36394,36395],{"class":2253},"    # 加载模型测试的函数\n",[46,36397,36398],{"class":48,"line":18634},[46,36399,36400],{"class":56},"    test_model_process(model,test_dataloader)\n",[46,36402,36403],{"class":48,"line":18640},[46,36404,616],{"emptyLinePlaceholder":615},[46,36406,36407],{"class":48,"line":18663},[46,36408,36409],{"class":2253},"    # 验证集推理实现：\n",[46,36411,36412],{"class":48,"line":18677},[46,36413,36414],{"class":2253},"    # 加载数据加载的更详细一些\n",[46,36416,36417,36419,36421,36423,36425,36427,36429],{"class":48,"line":18697},[46,36418,33216],{"class":56},[46,36420,79],{"class":52},[46,36422,33223],{"class":173},[46,36424,3744],{"class":52},[46,36426,33228],{"class":56},[46,36428,3741],{"class":52},[46,36430,36092],{"class":173},[46,36432,36433,36435,36437],{"class":48,"line":18703},[46,36434,33268],{"class":56},[46,36436,79],{"class":52},[46,36438,34264],{"class":56},[46,36440,36441],{"class":48,"line":18714},[46,36442,36443],{"class":2253},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[46,36445,36446],{"class":48,"line":18737},[46,36447,36448],{"class":2253},"    # 顺序不可改变\n",[46,36450,36451,36454,36456,36458,36461,36463,36466,36468,36471,36473,36476,36478,36481,36483,36486,36488,36491,36493,36496,36498,36501,36503,36506],{"class":48,"line":18759},[46,36452,36453],{"class":56},"    classes",[46,36455,79],{"class":52},[46,36457,3076],{"class":56},[46,36459,36460],{"class":173},"'T-shirt\u002Ftop'",[46,36462,2565],{"class":56},[46,36464,36465],{"class":173},"'Trouser'",[46,36467,2565],{"class":56},[46,36469,36470],{"class":173},"'Pullover'",[46,36472,2565],{"class":56},[46,36474,36475],{"class":173},"'Dress'",[46,36477,2565],{"class":56},[46,36479,36480],{"class":173},"'Coat'",[46,36482,2565],{"class":56},[46,36484,36485],{"class":173},"'Sandal'",[46,36487,2565],{"class":56},[46,36489,36490],{"class":173},"'Shirt'",[46,36492,2565],{"class":56},[46,36494,36495],{"class":173},"'Sneaker'",[46,36497,2565],{"class":56},[46,36499,36500],{"class":173},"'Bag'",[46,36502,2565],{"class":56},[46,36504,36505],{"class":173},"'Ankle boot'",[46,36507,35220],{"class":56},[46,36509,36510,36512],{"class":48,"line":18764},[46,36511,797],{"class":52},[46,36513,34858],{"class":56},[46,36515,36516],{"class":48,"line":18770},[46,36517,36518],{"class":2253},"        # 将数据和标签都放到设备当中\n",[46,36520,36521,36523,36526,36528],{"class":48,"line":18784},[46,36522,5422],{"class":52},[46,36524,36525],{"class":56}," b_x,b_y ",[46,36527,1146],{"class":52},[46,36529,36169],{"class":56},[46,36531,36532,36534,36536],{"class":48,"line":18797},[46,36533,34584],{"class":56},[46,36535,79],{"class":52},[46,36537,34589],{"class":56},[46,36539,36540,36542,36544],{"class":48,"line":18802},[46,36541,34599],{"class":56},[46,36543,79],{"class":52},[46,36545,34604],{"class":56},[46,36547,36548],{"class":48,"line":18816},[46,36549,616],{"emptyLinePlaceholder":615},[46,36551,36552],{"class":48,"line":18821},[46,36553,36554],{"class":2253},"            # 设置模型为验证模式\n",[46,36556,36557],{"class":48,"line":18827},[46,36558,34849],{"class":56},[46,36560,36561],{"class":48,"line":18832},[46,36562,36563],{"class":2253},"            # 模型推理结果\n",[46,36565,36566,36568,36570],{"class":48,"line":18846},[46,36567,34634],{"class":56},[46,36569,79],{"class":52},[46,36571,34639],{"class":56},[46,36573,36574],{"class":48,"line":18851},[46,36575,36576],{"class":2253},"            # 获取最大下标，最大下标就是类别号\n",[46,36578,36579,36581,36583,36585,36587,36589,36591],{"class":48,"line":18856},[46,36580,34651],{"class":56},[46,36582,79],{"class":52},[46,36584,34656],{"class":56},[46,36586,34659],{"class":439},[46,36588,79],{"class":52},[46,36590,2405],{"class":180},[46,36592,459],{"class":56},[46,36594,36595],{"class":48,"line":18870},[46,36596,36597],{"class":2253},"            # 取出张量中的数值\n",[46,36599,36600,36603,36605],{"class":48,"line":18882},[46,36601,36602],{"class":56},"            result",[46,36604,79],{"class":52},[46,36606,36607],{"class":56},"pre_lab.item()\n",[46,36609,36610,36613,36615],{"class":48,"line":18887},[46,36611,36612],{"class":56},"            label",[46,36614,79],{"class":52},[46,36616,36617],{"class":56},"b_y.item()\n",[46,36619,36620,36623,36625,36628,36631,36634,36636,36639],{"class":48,"line":18900},[46,36621,36622],{"class":180},"            print",[46,36624,1152],{"class":56},[46,36626,36627],{"class":173},"\"预测值：\"",[46,36629,36630],{"class":56},",classes[result],",[46,36632,36633],{"class":173},"\"------\"",[46,36635,2565],{"class":56},[46,36637,36638],{"class":173},"\"真实值：\"",[46,36640,36641],{"class":56},",classes[label])\n",[19,36643,36644],{},"（2）AlexNet",[23,36646,36647],{},[26,36648,36649],{},"神经网络构建",[36,36651,36653],{"className":38,"code":36652,"language":40,"meta":41,"style":41},"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",[43,36654,36655,36661,36671,36681,36693,36697,36714,36722,36737,36749,36791,36818,36861,36887,36931,36974,37017,37044,37048,37058,37063,37091,37110,37129,37133,37138,37146,37161,37171,37185,37195,37210,37225,37240,37251,37255,37260,37270,37285,37290,37304,37319,37331,37336,37347,37352,37358,37363,37375,37395,37400,37409],{"__ignoreMap":41},[46,36656,36657,36659],{"class":48,"line":49},[46,36658,53],{"class":52},[46,36660,32378],{"class":56},[46,36662,36663,36665,36667,36669],{"class":48,"line":60},[46,36664,957],{"class":52},[46,36666,32721],{"class":56},[46,36668,53],{"class":52},[46,36670,32726],{"class":56},[46,36672,36673,36675,36677,36679],{"class":48,"line":200},[46,36674,957],{"class":52},[46,36676,32738],{"class":56},[46,36678,53],{"class":52},[46,36680,32743],{"class":56},[46,36682,36683,36685,36688,36690],{"class":48,"line":211},[46,36684,53],{"class":52},[46,36686,36687],{"class":56}," torch.nn.functional ",[46,36689,398],{"class":52},[46,36691,36692],{"class":56}," F\n",[46,36694,36695],{"class":48,"line":222},[46,36696,616],{"emptyLinePlaceholder":615},[46,36698,36699,36701,36704,36706,36708,36710,36712],{"class":48,"line":636},[46,36700,16696],{"class":52},[46,36702,36703],{"class":169}," AlexNet",[46,36705,1152],{"class":56},[46,36707,32759],{"class":169},[46,36709,2744],{"class":56},[46,36711,32764],{"class":169},[46,36713,1158],{"class":56},[46,36715,36716,36718,36720],{"class":48,"line":641},[46,36717,32781],{"class":52},[46,36719,32784],{"class":180},[46,36721,32787],{"class":56},[46,36723,36724,36726,36729,36731,36733,36735],{"class":48,"line":653},[46,36725,32797],{"class":180},[46,36727,36728],{"class":56},"(AlexNet,",[46,36730,32803],{"class":180},[46,36732,32806],{"class":56},[46,36734,32809],{"class":180},[46,36736,4006],{"class":56},[46,36738,36739,36741,36744,36746],{"class":48,"line":659},[46,36740,32825],{"class":180},[46,36742,36743],{"class":56},".ReLu",[46,36745,79],{"class":52},[46,36747,36748],{"class":56},"nn.ReLU()\n",[46,36750,36751,36753,36755,36757,36759,36761,36763,36765,36767,36769,36771,36773,36775,36777,36779,36781,36783,36785,36787,36789],{"class":48,"line":665},[46,36752,32825],{"class":180},[46,36754,32828],{"class":56},[46,36756,79],{"class":52},[46,36758,32833],{"class":56},[46,36760,32836],{"class":439},[46,36762,79],{"class":52},[46,36764,2405],{"class":180},[46,36766,2565],{"class":56},[46,36768,32845],{"class":439},[46,36770,79],{"class":52},[46,36772,2397],{"class":180},[46,36774,2565],{"class":56},[46,36776,32854],{"class":439},[46,36778,79],{"class":52},[46,36780,2659],{"class":180},[46,36782,2565],{"class":56},[46,36784,32909],{"class":439},[46,36786,79],{"class":52},[46,36788,2481],{"class":180},[46,36790,459],{"class":56},[46,36792,36793,36795,36797,36799,36802,36804,36806,36808,36810,36812,36814,36816],{"class":48,"line":670},[46,36794,32825],{"class":180},[46,36796,32893],{"class":56},[46,36798,79],{"class":52},[46,36800,36801],{"class":56},"nn.MaxPool2d(",[46,36803,32854],{"class":439},[46,36805,79],{"class":52},[46,36807,2266],{"class":180},[46,36809,2565],{"class":56},[46,36811,32909],{"class":439},[46,36813,79],{"class":52},[46,36815,2272],{"class":180},[46,36817,459],{"class":56},[46,36819,36820,36822,36824,36826,36828,36830,36832,36834,36836,36838,36840,36843,36845,36847,36849,36851,36853,36855,36857,36859],{"class":48,"line":676},[46,36821,32825],{"class":180},[46,36823,32922],{"class":56},[46,36825,79],{"class":52},[46,36827,32833],{"class":56},[46,36829,32836],{"class":439},[46,36831,79],{"class":52},[46,36833,2397],{"class":180},[46,36835,2565],{"class":56},[46,36837,32845],{"class":439},[46,36839,79],{"class":52},[46,36841,36842],{"class":180},"256",[46,36844,2565],{"class":56},[46,36846,32854],{"class":439},[46,36848,79],{"class":52},[46,36850,2506],{"class":180},[46,36852,2565],{"class":56},[46,36854,32863],{"class":439},[46,36856,79],{"class":52},[46,36858,2272],{"class":180},[46,36860,459],{"class":56},[46,36862,36863,36865,36867,36869,36871,36873,36875,36877,36879,36881,36883,36885],{"class":48,"line":682},[46,36864,32825],{"class":180},[46,36866,32957],{"class":56},[46,36868,79],{"class":52},[46,36870,36801],{"class":56},[46,36872,32854],{"class":439},[46,36874,79],{"class":52},[46,36876,2266],{"class":180},[46,36878,2565],{"class":56},[46,36880,32909],{"class":439},[46,36882,79],{"class":52},[46,36884,2272],{"class":180},[46,36886,459],{"class":56},[46,36888,36889,36891,36894,36896,36898,36900,36902,36904,36906,36908,36910,36913,36915,36917,36919,36921,36923,36925,36927,36929],{"class":48,"line":688},[46,36890,32825],{"class":180},[46,36892,36893],{"class":56},".c5",[46,36895,79],{"class":52},[46,36897,32833],{"class":56},[46,36899,32836],{"class":439},[46,36901,79],{"class":52},[46,36903,36842],{"class":180},[46,36905,2565],{"class":56},[46,36907,32845],{"class":439},[46,36909,79],{"class":52},[46,36911,36912],{"class":180},"384",[46,36914,2565],{"class":56},[46,36916,32854],{"class":439},[46,36918,79],{"class":52},[46,36920,2266],{"class":180},[46,36922,2565],{"class":56},[46,36924,32863],{"class":439},[46,36926,79],{"class":52},[46,36928,2405],{"class":180},[46,36930,459],{"class":56},[46,36932,36933,36935,36938,36940,36942,36944,36946,36948,36950,36952,36954,36956,36958,36960,36962,36964,36966,36968,36970,36972],{"class":48,"line":693},[46,36934,32825],{"class":180},[46,36936,36937],{"class":56},".c6",[46,36939,79],{"class":52},[46,36941,32833],{"class":56},[46,36943,32836],{"class":439},[46,36945,79],{"class":52},[46,36947,36912],{"class":180},[46,36949,2565],{"class":56},[46,36951,32845],{"class":439},[46,36953,79],{"class":52},[46,36955,36912],{"class":180},[46,36957,2565],{"class":56},[46,36959,32854],{"class":439},[46,36961,79],{"class":52},[46,36963,2266],{"class":180},[46,36965,2565],{"class":56},[46,36967,32863],{"class":439},[46,36969,79],{"class":52},[46,36971,2405],{"class":180},[46,36973,459],{"class":56},[46,36975,36976,36978,36981,36983,36985,36987,36989,36991,36993,36995,36997,36999,37001,37003,37005,37007,37009,37011,37013,37015],{"class":48,"line":699},[46,36977,32825],{"class":180},[46,36979,36980],{"class":56},".c7",[46,36982,79],{"class":52},[46,36984,32833],{"class":56},[46,36986,32836],{"class":439},[46,36988,79],{"class":52},[46,36990,36912],{"class":180},[46,36992,2565],{"class":56},[46,36994,32845],{"class":439},[46,36996,79],{"class":52},[46,36998,36842],{"class":180},[46,37000,2565],{"class":56},[46,37002,32854],{"class":439},[46,37004,79],{"class":52},[46,37006,2266],{"class":180},[46,37008,2565],{"class":56},[46,37010,32863],{"class":439},[46,37012,79],{"class":52},[46,37014,2405],{"class":180},[46,37016,459],{"class":56},[46,37018,37019,37021,37024,37026,37028,37030,37032,37034,37036,37038,37040,37042],{"class":48,"line":705},[46,37020,32825],{"class":180},[46,37022,37023],{"class":56},".s8",[46,37025,79],{"class":52},[46,37027,36801],{"class":56},[46,37029,32854],{"class":439},[46,37031,79],{"class":52},[46,37033,2266],{"class":180},[46,37035,2565],{"class":56},[46,37037,32909],{"class":439},[46,37039,79],{"class":52},[46,37041,2272],{"class":180},[46,37043,459],{"class":56},[46,37045,37046],{"class":48,"line":711},[46,37047,32982],{"class":2253},[46,37049,37050,37052,37054,37056],{"class":48,"line":717},[46,37051,32825],{"class":180},[46,37053,32989],{"class":56},[46,37055,79],{"class":52},[46,37057,32994],{"class":56},[46,37059,37060],{"class":48,"line":723},[46,37061,37062],{"class":2253},"       # 定义全连接层\n",[46,37064,37065,37067,37070,37072,37074,37076,37078,37080,37082,37084,37086,37089],{"class":48,"line":729},[46,37066,32825],{"class":180},[46,37068,37069],{"class":56},".f1",[46,37071,79],{"class":52},[46,37073,33011],{"class":56},[46,37075,2531],{"class":180},[46,37077,2642],{"class":52},[46,37079,2531],{"class":180},[46,37081,2642],{"class":52},[46,37083,36842],{"class":180},[46,37085,2565],{"class":56},[46,37087,37088],{"class":180},"4096",[46,37090,459],{"class":56},[46,37092,37093,37095,37098,37100,37102,37104,37106,37108],{"class":48,"line":735},[46,37094,32825],{"class":180},[46,37096,37097],{"class":56},".f2",[46,37099,79],{"class":52},[46,37101,33011],{"class":56},[46,37103,37088],{"class":180},[46,37105,2565],{"class":56},[46,37107,37088],{"class":180},[46,37109,459],{"class":56},[46,37111,37112,37114,37117,37119,37121,37123,37125,37127],{"class":48,"line":740},[46,37113,32825],{"class":180},[46,37115,37116],{"class":56},".f3",[46,37118,79],{"class":52},[46,37120,33011],{"class":56},[46,37122,37088],{"class":180},[46,37124,2565],{"class":56},[46,37126,2633],{"class":180},[46,37128,459],{"class":56},[46,37130,37131],{"class":48,"line":745},[46,37132,616],{"emptyLinePlaceholder":615},[46,37134,37135],{"class":48,"line":763},[46,37136,37137],{"class":2253},"    # 定义前向传播\n",[46,37139,37140,37142,37144],{"class":48,"line":778},[46,37141,32781],{"class":52},[46,37143,33073],{"class":169},[46,37145,33076],{"class":56},[46,37147,37148,37150,37152,37154,37157,37159],{"class":48,"line":789},[46,37149,33081],{"class":56},[46,37151,79],{"class":52},[46,37153,32803],{"class":180},[46,37155,37156],{"class":56},".ReLu(",[46,37158,32803],{"class":180},[46,37160,33093],{"class":56},[46,37162,37163,37165,37167,37169],{"class":48,"line":794},[46,37164,33081],{"class":56},[46,37166,79],{"class":52},[46,37168,32803],{"class":180},[46,37170,33104],{"class":56},[46,37172,37173,37175,37177,37179,37181,37183],{"class":48,"line":806},[46,37174,33081],{"class":56},[46,37176,79],{"class":52},[46,37178,32803],{"class":180},[46,37180,37156],{"class":56},[46,37182,32803],{"class":180},[46,37184,33119],{"class":56},[46,37186,37187,37189,37191,37193],{"class":48,"line":829},[46,37188,33081],{"class":56},[46,37190,79],{"class":52},[46,37192,32803],{"class":180},[46,37194,33130],{"class":56},[46,37196,37197,37199,37201,37203,37205,37207],{"class":48,"line":840},[46,37198,33081],{"class":56},[46,37200,79],{"class":52},[46,37202,32803],{"class":180},[46,37204,37156],{"class":56},[46,37206,32803],{"class":180},[46,37208,37209],{"class":56},".c5(x))\n",[46,37211,37212,37214,37216,37218,37220,37222],{"class":48,"line":846},[46,37213,33081],{"class":56},[46,37215,79],{"class":52},[46,37217,32803],{"class":180},[46,37219,37156],{"class":56},[46,37221,32803],{"class":180},[46,37223,37224],{"class":56},".c6(x))\n",[46,37226,37227,37229,37231,37233,37235,37237],{"class":48,"line":852},[46,37228,33081],{"class":56},[46,37230,79],{"class":52},[46,37232,32803],{"class":180},[46,37234,37156],{"class":56},[46,37236,32803],{"class":180},[46,37238,37239],{"class":56},".c7(x))\n",[46,37241,37242,37244,37246,37248],{"class":48,"line":857},[46,37243,33081],{"class":56},[46,37245,79],{"class":52},[46,37247,32803],{"class":180},[46,37249,37250],{"class":56},".s8(x)\n",[46,37252,37253],{"class":48,"line":875},[46,37254,616],{"emptyLinePlaceholder":615},[46,37256,37257],{"class":48,"line":892},[46,37258,37259],{"class":2253},"        # 展平加线性全连接层\n",[46,37261,37262,37264,37266,37268],{"class":48,"line":898},[46,37263,33081],{"class":56},[46,37265,79],{"class":52},[46,37267,32803],{"class":180},[46,37269,33141],{"class":56},[46,37271,37272,37274,37276,37278,37280,37282],{"class":48,"line":903},[46,37273,33081],{"class":56},[46,37275,79],{"class":52},[46,37277,32803],{"class":180},[46,37279,37156],{"class":56},[46,37281,32803],{"class":180},[46,37283,37284],{"class":56},".f1(x))\n",[46,37286,37287],{"class":48,"line":908},[46,37288,37289],{"class":2253},"        # 还需要dropout对神经元随机进行失活\n",[46,37291,37292,37294,37296,37299,37302],{"class":48,"line":925},[46,37293,33081],{"class":56},[46,37295,79],{"class":52},[46,37297,37298],{"class":56},"F.dropout(x,",[46,37300,37301],{"class":180},"0.5",[46,37303,459],{"class":56},[46,37305,37306,37308,37310,37312,37314,37316],{"class":48,"line":1238},[46,37307,33081],{"class":56},[46,37309,79],{"class":52},[46,37311,32803],{"class":180},[46,37313,37156],{"class":56},[46,37315,32803],{"class":180},[46,37317,37318],{"class":56},".f2(x))\n",[46,37320,37321,37323,37325,37327,37329],{"class":48,"line":1251},[46,37322,33081],{"class":56},[46,37324,79],{"class":52},[46,37326,37298],{"class":56},[46,37328,37301],{"class":180},[46,37330,459],{"class":56},[46,37332,37333],{"class":48,"line":1256},[46,37334,37335],{"class":2253},"        # 直接输出\n",[46,37337,37338,37340,37342,37344],{"class":48,"line":1261},[46,37339,33081],{"class":56},[46,37341,79],{"class":52},[46,37343,32803],{"class":180},[46,37345,37346],{"class":56},".f3(x)\n",[46,37348,37349],{"class":48,"line":1274},[46,37350,37351],{"class":2253},"        # 前向传播输出\n",[46,37353,37354,37356],{"class":48,"line":10061},[46,37355,16754],{"class":52},[46,37357,33189],{"class":56},[46,37359,37360],{"class":48,"line":11720},[46,37361,37362],{"class":2253},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[46,37364,37365,37367,37369,37371,37373],{"class":48,"line":11745},[46,37366,911],{"class":52},[46,37368,914],{"class":180},[46,37370,4970],{"class":52},[46,37372,33204],{"class":173},[46,37374,760],{"class":56},[46,37376,37377,37379,37381,37383,37385,37387,37389,37391,37393],{"class":48,"line":11768},[46,37378,33216],{"class":56},[46,37380,79],{"class":52},[46,37382,32434],{"class":56},[46,37384,33223],{"class":173},[46,37386,3744],{"class":52},[46,37388,33228],{"class":56},[46,37390,3741],{"class":52},[46,37392,32458],{"class":173},[46,37394,459],{"class":56},[46,37396,37397],{"class":48,"line":11792},[46,37398,37399],{"class":2253},"    # 模型实例化，然后将实例化的模型放到设备中\n",[46,37401,37402,37404,37406],{"class":48,"line":11797},[46,37403,33268],{"class":56},[46,37405,79],{"class":52},[46,37407,37408],{"class":56},"AlexNet().to(device)\n",[46,37410,37411,37413,37415,37417,37419,37422,37424,37426],{"class":48,"line":11802},[46,37412,1227],{"class":180},[46,37414,33280],{"class":56},[46,37416,2405],{"class":180},[46,37418,2565],{"class":56},[46,37420,37421],{"class":180},"227",[46,37423,2565],{"class":56},[46,37425,37421],{"class":180},[46,37427,33293],{"class":56},[23,37429,37430],{"start":60},[26,37431,33306],{},[36,37433,37435],{"className":38,"code":37434,"language":40,"meta":41,"style":41},"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",[43,37436,37437,37443,37449,37459,37465,37475,37485,37495,37505,37515,37519,37530,37540,37544,37548,37552,37560,37572,37582,37598,37608,37640,37654,37664,37674,37678,37688,37702,37712,37722,37732,37738,37742,37746,37750,37754,37758,37766,37786,37790,37794,37798,37802,37806,37822,37826,37830,37838,37842,37846,37854,37858,37862,37866,37874,37878,37882,37886,37890,37898,37902,37910,37914,37922,37926,37934,37938,37946,37950,37954,37962,37966,37970,37974,37986,38010,38024,38028,38032,38036,38044,38048,38056,38060,38068,38072,38080,38084,38092,38096,38104,38108,38120,38124,38132,38136,38144,38148,38152,38156,38160,38168,38172,38188,38192,38200,38204,38208,38212,38216,38220,38224,38228,38244,38248,38260,38264,38276,38280,38292,38296,38304,38308,38316,38320,38324,38329,38335,38339,38348,38352,38369,38373,38382,38386,38404,38417,38422,38435,38439,38443,38451,38455,38459,38467,38471,38479,38483,38491,38495,38499,38541,38583,38587,38591,38607,38611,38627,38631,38635,38643,38647,38651,38663,38701,38706,38711,38720,38724,38738,38748,38754,38760,38766,38772,38776,38780,38786,38790,38794,38802,38806,38824,38828,38832,38836,38852,38856,38860,38864,38868,38872,38892,38912,38916,38920,38924,38932,38940,38944,38960,38980,39000,39004,39008,39016,39024,39028,39032,39036,39048,39052,39062,39070,39087],{"__ignoreMap":41},[46,37438,37439,37441],{"class":48,"line":49},[46,37440,53],{"class":52},[46,37442,33799],{"class":56},[46,37444,37445,37447],{"class":48,"line":60},[46,37446,53],{"class":52},[46,37448,610],{"class":56},[46,37450,37451,37453,37455,37457],{"class":48,"line":200},[46,37452,53],{"class":52},[46,37454,33816],{"class":56},[46,37456,398],{"class":52},[46,37458,33821],{"class":56},[46,37460,37461,37463],{"class":48,"line":211},[46,37462,53],{"class":52},[46,37464,32378],{"class":56},[46,37466,37467,37469,37471,37473],{"class":48,"line":222},[46,37468,957],{"class":52},[46,37470,33392],{"class":56},[46,37472,53],{"class":52},[46,37474,33838],{"class":56},[46,37476,37477,37479,37481,37483],{"class":48,"line":636},[46,37478,957],{"class":52},[46,37480,33346],{"class":56},[46,37482,53],{"class":52},[46,37484,33351],{"class":56},[46,37486,37487,37489,37491,37493],{"class":48,"line":641},[46,37488,957],{"class":52},[46,37490,33375],{"class":56},[46,37492,53],{"class":52},[46,37494,33380],{"class":56},[46,37496,37497,37499,37501,37503],{"class":48,"line":653},[46,37498,53],{"class":52},[46,37500,33392],{"class":56},[46,37502,398],{"class":52},[46,37504,33397],{"class":56},[46,37506,37507,37509,37511,37513],{"class":48,"line":659},[46,37508,53],{"class":52},[46,37510,33409],{"class":56},[46,37512,398],{"class":52},[46,37514,33414],{"class":56},[46,37516,37517],{"class":48,"line":665},[46,37518,33883],{"class":2253},[46,37520,37521,37523,37525,37527],{"class":48,"line":670},[46,37522,957],{"class":52},[46,37524,33890],{"class":56},[46,37526,53],{"class":52},[46,37528,37529],{"class":56}," AlexNet\n",[46,37531,37532,37534,37536,37538],{"class":48,"line":676},[46,37533,957],{"class":52},[46,37535,32721],{"class":56},[46,37537,53],{"class":52},[46,37539,32726],{"class":56},[46,37541,37542],{"class":48,"line":682},[46,37543,616],{"emptyLinePlaceholder":615},[46,37545,37546],{"class":48,"line":688},[46,37547,616],{"emptyLinePlaceholder":615},[46,37549,37550],{"class":48,"line":693},[46,37551,33918],{"class":2253},[46,37553,37554,37556,37558],{"class":48,"line":699},[46,37555,748],{"class":52},[46,37557,33925],{"class":169},[46,37559,33928],{"class":56},[46,37561,37562,37564,37566,37568,37570],{"class":48,"line":705},[46,37563,33933],{"class":56},[46,37565,79],{"class":52},[46,37567,33432],{"class":56},[46,37569,33440],{"class":173},[46,37571,33443],{"class":56},[46,37573,37574,37576,37578,37580],{"class":48,"line":711},[46,37575,33946],{"class":439},[46,37577,79],{"class":52},[46,37579,33453],{"class":180},[46,37581,33443],{"class":56},[46,37583,37584,37586,37588,37590,37592,37594,37596],{"class":48,"line":717},[46,37585,33957],{"class":439},[46,37587,79],{"class":52},[46,37589,33470],{"class":56},[46,37591,33473],{"class":439},[46,37593,79],{"class":52},[46,37595,37421],{"class":180},[46,37597,33481],{"class":56},[46,37599,37600,37602,37604,37606],{"class":48,"line":723},[46,37601,33974],{"class":439},[46,37603,79],{"class":52},[46,37605,33453],{"class":180},[46,37607,459],{"class":56},[46,37609,37610,37612,37614,37616,37618,37620,37622,37624,37626,37628,37630,37632,37634,37636,37638],{"class":48,"line":729},[46,37611,33985],{"class":56},[46,37613,79],{"class":52},[46,37615,33990],{"class":56},[46,37617,33993],{"class":180},[46,37619,1152],{"class":56},[46,37621,33998],{"class":180},[46,37623,2642],{"class":52},[46,37625,9371],{"class":180},[46,37627,34005],{"class":56},[46,37629,33993],{"class":180},[46,37631,1152],{"class":56},[46,37633,34012],{"class":180},[46,37635,2642],{"class":52},[46,37637,9371],{"class":180},[46,37639,34019],{"class":56},[46,37641,37642,37644,37646,37648,37650,37652],{"class":48,"line":735},[46,37643,34024],{"class":56},[46,37645,79],{"class":52},[46,37647,34029],{"class":56},[46,37649,33514],{"class":439},[46,37651,79],{"class":52},[46,37653,33519],{"class":56},[46,37655,37656,37658,37660,37662],{"class":48,"line":740},[46,37657,34040],{"class":439},[46,37659,79],{"class":52},[46,37661,34045],{"class":180},[46,37663,33443],{"class":56},[46,37665,37666,37668,37670,37672],{"class":48,"line":745},[46,37667,34052],{"class":439},[46,37669,79],{"class":52},[46,37671,33453],{"class":180},[46,37673,33443],{"class":56},[46,37675,37676],{"class":48,"line":763},[46,37677,34063],{"class":2253},[46,37679,37680,37682,37684,37686],{"class":48,"line":778},[46,37681,34068],{"class":439},[46,37683,79],{"class":52},[46,37685,2582],{"class":180},[46,37687,459],{"class":56},[46,37689,37690,37692,37694,37696,37698,37700],{"class":48,"line":789},[46,37691,34079],{"class":56},[46,37693,79],{"class":52},[46,37695,33511],{"class":56},[46,37697,33514],{"class":439},[46,37699,79],{"class":52},[46,37701,34090],{"class":56},[46,37703,37704,37706,37708,37710],{"class":48,"line":794},[46,37705,34095],{"class":439},[46,37707,79],{"class":52},[46,37709,34045],{"class":180},[46,37711,33443],{"class":56},[46,37713,37714,37716,37718,37720],{"class":48,"line":806},[46,37715,34106],{"class":439},[46,37717,79],{"class":52},[46,37719,33453],{"class":180},[46,37721,33443],{"class":56},[46,37723,37724,37726,37728,37730],{"class":48,"line":829},[46,37725,34117],{"class":439},[46,37727,79],{"class":52},[46,37729,2582],{"class":180},[46,37731,459],{"class":56},[46,37733,37734,37736],{"class":48,"line":840},[46,37735,6108],{"class":52},[46,37737,34130],{"class":56},[46,37739,37740],{"class":48,"line":846},[46,37741,616],{"emptyLinePlaceholder":615},[46,37743,37744],{"class":48,"line":852},[46,37745,34139],{"class":2253},[46,37747,37748],{"class":48,"line":857},[46,37749,34144],{"class":2253},[46,37751,37752],{"class":48,"line":875},[46,37753,616],{"emptyLinePlaceholder":615},[46,37755,37756],{"class":48,"line":892},[46,37757,34153],{"class":2253},[46,37759,37760,37762,37764],{"class":48,"line":898},[46,37761,748],{"class":52},[46,37763,34160],{"class":169},[46,37765,34163],{"class":56},[46,37767,37768,37770,37772,37774,37776,37778,37780,37782,37784],{"class":48,"line":903},[46,37769,33216],{"class":56},[46,37771,79],{"class":52},[46,37773,32434],{"class":56},[46,37775,33223],{"class":173},[46,37777,3744],{"class":52},[46,37779,33228],{"class":56},[46,37781,3741],{"class":52},[46,37783,34182],{"class":173},[46,37785,459],{"class":56},[46,37787,37788],{"class":48,"line":908},[46,37789,616],{"emptyLinePlaceholder":615},[46,37791,37792],{"class":48,"line":925},[46,37793,616],{"emptyLinePlaceholder":615},[46,37795,37796],{"class":48,"line":1238},[46,37797,34197],{"class":2253},[46,37799,37800],{"class":48,"line":1251},[46,37801,34202],{"class":2253},[46,37803,37804],{"class":48,"line":1256},[46,37805,34207],{"class":2253},[46,37807,37808,37810,37812,37814,37816,37818,37820],{"class":48,"line":1261},[46,37809,34212],{"class":56},[46,37811,79],{"class":52},[46,37813,34217],{"class":56},[46,37815,34220],{"class":439},[46,37817,79],{"class":52},[46,37819,34225],{"class":180},[46,37821,459],{"class":56},[46,37823,37824],{"class":48,"line":1274},[46,37825,616],{"emptyLinePlaceholder":615},[46,37827,37828],{"class":48,"line":10061},[46,37829,34236],{"class":2253},[46,37831,37832,37834,37836],{"class":48,"line":11720},[46,37833,34241],{"class":56},[46,37835,79],{"class":52},[46,37837,34246],{"class":56},[46,37839,37840],{"class":48,"line":11745},[46,37841,616],{"emptyLinePlaceholder":615},[46,37843,37844],{"class":48,"line":11768},[46,37845,34255],{"class":2253},[46,37847,37848,37850,37852],{"class":48,"line":11792},[46,37849,33268],{"class":56},[46,37851,79],{"class":52},[46,37853,34264],{"class":56},[46,37855,37856],{"class":48,"line":11797},[46,37857,34269],{"class":2253},[46,37859,37860],{"class":48,"line":11802},[46,37861,34274],{"class":2253},[46,37863,37864],{"class":48,"line":11807},[46,37865,34279],{"class":2253},[46,37867,37868,37870,37872],{"class":48,"line":11816},[46,37869,34284],{"class":56},[46,37871,79],{"class":52},[46,37873,34289],{"class":56},[46,37875,37876],{"class":48,"line":11821},[46,37877,616],{"emptyLinePlaceholder":615},[46,37879,37880],{"class":48,"line":11827},[46,37881,616],{"emptyLinePlaceholder":615},[46,37883,37884],{"class":48,"line":11848},[46,37885,34302],{"class":2253},[46,37887,37888],{"class":48,"line":11854},[46,37889,34307],{"class":2253},[46,37891,37892,37894,37896],{"class":48,"line":11868},[46,37893,34312],{"class":56},[46,37895,79],{"class":52},[46,37897,34317],{"class":180},[46,37899,37900],{"class":48,"line":11874},[46,37901,34322],{"class":2253},[46,37903,37904,37906,37908],{"class":48,"line":11901},[46,37905,34327],{"class":56},[46,37907,79],{"class":52},[46,37909,34332],{"class":56},[46,37911,37912],{"class":48,"line":11910},[46,37913,34337],{"class":2253},[46,37915,37916,37918,37920],{"class":48,"line":11916},[46,37917,34342],{"class":56},[46,37919,79],{"class":52},[46,37921,34332],{"class":56},[46,37923,37924],{"class":48,"line":11924},[46,37925,34351],{"class":2253},[46,37927,37928,37930,37932],{"class":48,"line":11929},[46,37929,34356],{"class":56},[46,37931,79],{"class":52},[46,37933,34332],{"class":56},[46,37935,37936],{"class":48,"line":18605},[46,37937,34365],{"class":2253},[46,37939,37940,37942,37944],{"class":48,"line":18611},[46,37941,34370],{"class":56},[46,37943,79],{"class":52},[46,37945,34332],{"class":56},[46,37947,37948],{"class":48,"line":18634},[46,37949,616],{"emptyLinePlaceholder":615},[46,37951,37952],{"class":48,"line":18640},[46,37953,34383],{"class":2253},[46,37955,37956,37958,37960],{"class":48,"line":18663},[46,37957,34388],{"class":56},[46,37959,79],{"class":52},[46,37961,34393],{"class":56},[46,37963,37964],{"class":48,"line":18677},[46,37965,616],{"emptyLinePlaceholder":615},[46,37967,37968],{"class":48,"line":18697},[46,37969,616],{"emptyLinePlaceholder":615},[46,37971,37972],{"class":48,"line":18703},[46,37973,34406],{"class":2253},[46,37975,37976,37978,37980,37982,37984],{"class":48,"line":18714},[46,37977,1140],{"class":52},[46,37979,34413],{"class":56},[46,37981,1146],{"class":52},[46,37983,1149],{"class":180},[46,37985,34420],{"class":56},[46,37987,37988,37990,37992,37994,37996,37998,38000,38002,38004,38006,38008],{"class":48,"line":18737},[46,37989,34425],{"class":180},[46,37991,1152],{"class":56},[46,37993,34430],{"class":173},[46,37995,34433],{"class":180},[46,37997,2770],{"class":173},[46,37999,34433],{"class":180},[46,38001,2439],{"class":173},[46,38003,34442],{"class":56},[46,38005,534],{"class":52},[46,38007,2405],{"class":180},[46,38009,32479],{"class":56},[46,38011,38012,38014,38016,38018,38020,38022],{"class":48,"line":18759},[46,38013,34425],{"class":180},[46,38015,1152],{"class":56},[46,38017,34457],{"class":173},[46,38019,2642],{"class":52},[46,38021,2633],{"class":180},[46,38023,459],{"class":56},[46,38025,38026],{"class":48,"line":18764},[46,38027,616],{"emptyLinePlaceholder":615},[46,38029,38030],{"class":48,"line":18770},[46,38031,34472],{"class":2253},[46,38033,38034],{"class":48,"line":18784},[46,38035,34477],{"class":2253},[46,38037,38038,38040,38042],{"class":48,"line":18797},[46,38039,34482],{"class":56},[46,38041,79],{"class":52},[46,38043,34317],{"class":180},[46,38045,38046],{"class":48,"line":18802},[46,38047,34491],{"class":2253},[46,38049,38050,38052,38054],{"class":48,"line":18816},[46,38051,34496],{"class":56},[46,38053,79],{"class":52},[46,38055,5105],{"class":180},[46,38057,38058],{"class":48,"line":18821},[46,38059,34505],{"class":2253},[46,38061,38062,38064,38066],{"class":48,"line":18827},[46,38063,34510],{"class":56},[46,38065,79],{"class":52},[46,38067,34317],{"class":180},[46,38069,38070],{"class":48,"line":18832},[46,38071,34519],{"class":2253},[46,38073,38074,38076,38078],{"class":48,"line":18846},[46,38075,34524],{"class":56},[46,38077,79],{"class":52},[46,38079,5105],{"class":180},[46,38081,38082],{"class":48,"line":18851},[46,38083,34533],{"class":2253},[46,38085,38086,38088,38090],{"class":48,"line":18856},[46,38087,34538],{"class":56},[46,38089,79],{"class":52},[46,38091,5105],{"class":180},[46,38093,38094],{"class":48,"line":18870},[46,38095,34547],{"class":2253},[46,38097,38098,38100,38102],{"class":48,"line":18882},[46,38099,34552],{"class":56},[46,38101,79],{"class":52},[46,38103,5105],{"class":180},[46,38105,38106],{"class":48,"line":18887},[46,38107,34561],{"class":2253},[46,38109,38110,38112,38114,38116,38118],{"class":48,"line":18900},[46,38111,5422],{"class":52},[46,38113,33578],{"class":56},[46,38115,1146],{"class":52},[46,38117,33583],{"class":180},[46,38119,34574],{"class":56},[46,38121,38122],{"class":48,"line":18905},[46,38123,34579],{"class":2253},[46,38125,38126,38128,38130],{"class":48,"line":18910},[46,38127,34584],{"class":56},[46,38129,79],{"class":52},[46,38131,34589],{"class":56},[46,38133,38134],{"class":48,"line":18915},[46,38135,34594],{"class":2253},[46,38137,38138,38140,38142],{"class":48,"line":18928},[46,38139,34599],{"class":56},[46,38141,79],{"class":52},[46,38143,34604],{"class":56},[46,38145,38146],{"class":48,"line":18933},[46,38147,34610],{"class":2253},[46,38149,38150],{"class":48,"line":34607},[46,38151,34616],{"class":56},[46,38153,38154],{"class":48,"line":34613},[46,38155,34622],{"class":2253},[46,38157,38158],{"class":48,"line":34619},[46,38159,34628],{"class":2253},[46,38161,38162,38164,38166],{"class":48,"line":34625},[46,38163,34634],{"class":56},[46,38165,79],{"class":52},[46,38167,34639],{"class":56},[46,38169,38170],{"class":48,"line":34631},[46,38171,34645],{"class":2253},[46,38173,38174,38176,38178,38180,38182,38184,38186],{"class":48,"line":34642},[46,38175,34651],{"class":56},[46,38177,79],{"class":52},[46,38179,34656],{"class":56},[46,38181,34659],{"class":439},[46,38183,79],{"class":52},[46,38185,2405],{"class":180},[46,38187,459],{"class":56},[46,38189,38190],{"class":48,"line":34648},[46,38191,34671],{"class":2253},[46,38193,38194,38196,38198],{"class":48,"line":34668},[46,38195,34677],{"class":56},[46,38197,79],{"class":52},[46,38199,34682],{"class":56},[46,38201,38202],{"class":48,"line":34674},[46,38203,34688],{"class":2253},[46,38205,38206],{"class":48,"line":34685},[46,38207,34694],{"class":56},[46,38209,38210],{"class":48,"line":34691},[46,38211,34700],{"class":2253},[46,38213,38214],{"class":48,"line":34697},[46,38215,34706],{"class":56},[46,38217,38218],{"class":48,"line":34703},[46,38219,34712],{"class":2253},[46,38221,38222],{"class":48,"line":34709},[46,38223,34718],{"class":56},[46,38225,38226],{"class":48,"line":34715},[46,38227,34724],{"class":2253},[46,38229,38230,38232,38234,38236,38238,38240,38242],{"class":48,"line":34721},[46,38231,34730],{"class":56},[46,38233,11481],{"class":52},[46,38235,34735],{"class":56},[46,38237,2642],{"class":52},[46,38239,34740],{"class":56},[46,38241,2379],{"class":180},[46,38243,459],{"class":56},[46,38245,38246],{"class":48,"line":34727},[46,38247,34750],{"class":2253},[46,38249,38250,38252,38254,38256,38258],{"class":48,"line":34747},[46,38251,34756],{"class":56},[46,38253,11481],{"class":52},[46,38255,34761],{"class":56},[46,38257,4970],{"class":52},[46,38259,34766],{"class":56},[46,38261,38262],{"class":48,"line":34753},[46,38263,34772],{"class":2253},[46,38265,38266,38268,38270,38272,38274],{"class":48,"line":34769},[46,38267,34778],{"class":56},[46,38269,11481],{"class":52},[46,38271,34740],{"class":56},[46,38273,2379],{"class":180},[46,38275,459],{"class":56},[46,38277,38278],{"class":48,"line":34775},[46,38279,34792],{"class":2253},[46,38281,38282,38284,38286,38288,38290],{"class":48,"line":34789},[46,38283,5422],{"class":52},[46,38285,34800],{"class":56},[46,38287,1146],{"class":52},[46,38289,33583],{"class":180},[46,38291,34807],{"class":56},[46,38293,38294],{"class":48,"line":34795},[46,38295,34813],{"class":2253},[46,38297,38298,38300,38302],{"class":48,"line":34810},[46,38299,34584],{"class":56},[46,38301,79],{"class":52},[46,38303,34589],{"class":56},[46,38305,38306],{"class":48,"line":34816},[46,38307,34828],{"class":2253},[46,38309,38310,38312,38314],{"class":48,"line":34825},[46,38311,34599],{"class":56},[46,38313,79],{"class":52},[46,38315,34604],{"class":56},[46,38317,38318],{"class":48,"line":34831},[46,38319,34843],{"class":2253},[46,38321,38322],{"class":48,"line":34840},[46,38323,34849],{"class":56},[46,38325,38326],{"class":48,"line":34846},[46,38327,38328],{"class":2253},"            # 验证时不计算梯度以节省内存\u002F计算\n",[46,38330,38331,38333],{"class":48,"line":34852},[46,38332,34855],{"class":52},[46,38334,34858],{"class":56},[46,38336,38337],{"class":48,"line":34861},[46,38338,34864],{"class":2253},[46,38340,38341,38344,38346],{"class":48,"line":34867},[46,38342,38343],{"class":56},"                output",[46,38345,79],{"class":52},[46,38347,34639],{"class":56},[46,38349,38350],{"class":48,"line":34878},[46,38351,34881],{"class":2253},[46,38353,38354,38357,38359,38361,38363,38365,38367],{"class":48,"line":34884},[46,38355,38356],{"class":56},"                pre_lab",[46,38358,79],{"class":52},[46,38360,34656],{"class":56},[46,38362,34659],{"class":439},[46,38364,79],{"class":52},[46,38366,2405],{"class":180},[46,38368,459],{"class":56},[46,38370,38371],{"class":48,"line":34903},[46,38372,34906],{"class":2253},[46,38374,38375,38378,38380],{"class":48,"line":34909},[46,38376,38377],{"class":56},"                val_batch_loss",[46,38379,79],{"class":52},[46,38381,34682],{"class":56},[46,38383,38384],{"class":48,"line":34920},[46,38385,34923],{"class":2253},[46,38387,38388,38391,38393,38396,38398,38400,38402],{"class":48,"line":34926},[46,38389,38390],{"class":56},"                val_loss",[46,38392,11481],{"class":52},[46,38394,38395],{"class":56},"val_batch_loss.item()",[46,38397,2642],{"class":52},[46,38399,34740],{"class":56},[46,38401,2379],{"class":180},[46,38403,459],{"class":56},[46,38405,38406,38409,38411,38413,38415],{"class":48,"line":34946},[46,38407,38408],{"class":56},"                val_corrects",[46,38410,11481],{"class":52},[46,38412,34761],{"class":56},[46,38414,4970],{"class":52},[46,38416,34766],{"class":56},[46,38418,38419],{"class":48,"line":34962},[46,38420,38421],{"class":2253},"            # 当前用于验证的样本数量\n",[46,38423,38424,38427,38429,38431,38433],{"class":48,"line":34968},[46,38425,38426],{"class":56},"            val_num",[46,38428,11481],{"class":52},[46,38430,34740],{"class":56},[46,38432,2379],{"class":180},[46,38434,459],{"class":56},[46,38436,38437],{"class":48,"line":34982},[46,38438,34985],{"class":2253},[46,38440,38441],{"class":48,"line":34988},[46,38442,34991],{"class":2253},[46,38444,38445,38447,38449],{"class":48,"line":34994},[46,38446,34997],{"class":56},[46,38448,2770],{"class":52},[46,38450,35002],{"class":56},[46,38452,38453],{"class":48,"line":35005},[46,38454,35008],{"class":2253},[46,38456,38457],{"class":48,"line":35011},[46,38458,35014],{"class":2253},[46,38460,38461,38463,38465],{"class":48,"line":35017},[46,38462,35020],{"class":56},[46,38464,2770],{"class":52},[46,38466,35002],{"class":56},[46,38468,38469],{"class":48,"line":35027},[46,38470,35030],{"class":2253},[46,38472,38473,38475,38477],{"class":48,"line":35033},[46,38474,35036],{"class":56},[46,38476,2770],{"class":52},[46,38478,35041],{"class":56},[46,38480,38481],{"class":48,"line":35044},[46,38482,35047],{"class":2253},[46,38484,38485,38487,38489],{"class":48,"line":35050},[46,38486,35053],{"class":56},[46,38488,2770],{"class":52},[46,38490,35041],{"class":56},[46,38492,38493],{"class":48,"line":35060},[46,38494,616],{"emptyLinePlaceholder":615},[46,38496,38497],{"class":48,"line":35065},[46,38498,35068],{"class":2253},[46,38500,38501,38503,38505,38507,38509,38511,38513,38515,38517,38519,38521,38523,38525,38527,38529,38531,38533,38535,38537,38539],{"class":48,"line":35071},[46,38502,34425],{"class":180},[46,38504,1152],{"class":56},[46,38506,5611],{"class":173},[46,38508,34433],{"class":180},[46,38510,35082],{"class":173},[46,38512,3082],{"class":180},[46,38514,35087],{"class":52},[46,38516,3131],{"class":180},[46,38518,35092],{"class":173},[46,38520,3082],{"class":180},[46,38522,35087],{"class":52},[46,38524,3131],{"class":180},[46,38526,5611],{"class":173},[46,38528,35103],{"class":56},[46,38530,534],{"class":52},[46,38532,2405],{"class":180},[46,38534,35110],{"class":56},[46,38536,534],{"class":52},[46,38538,2405],{"class":180},[46,38540,35117],{"class":56},[46,38542,38543,38545,38547,38549,38551,38553,38555,38557,38559,38561,38563,38565,38567,38569,38571,38573,38575,38577,38579,38581],{"class":48,"line":35120},[46,38544,34425],{"class":180},[46,38546,1152],{"class":56},[46,38548,5611],{"class":173},[46,38550,34433],{"class":180},[46,38552,35131],{"class":173},[46,38554,3082],{"class":180},[46,38556,35087],{"class":52},[46,38558,3131],{"class":180},[46,38560,35140],{"class":173},[46,38562,3082],{"class":180},[46,38564,35087],{"class":52},[46,38566,3131],{"class":180},[46,38568,5611],{"class":173},[46,38570,35151],{"class":56},[46,38572,534],{"class":52},[46,38574,2405],{"class":180},[46,38576,35158],{"class":56},[46,38578,534],{"class":52},[46,38580,2405],{"class":180},[46,38582,35117],{"class":56},[46,38584,38585],{"class":48,"line":35167},[46,38586,616],{"emptyLinePlaceholder":615},[46,38588,38589],{"class":48,"line":35172},[46,38590,35175],{"class":2253},[46,38592,38593,38595,38597,38599,38601,38603,38605],{"class":48,"line":35178},[46,38594,4525],{"class":52},[46,38596,35183],{"class":56},[46,38598,534],{"class":52},[46,38600,2405],{"class":180},[46,38602,3125],{"class":56},[46,38604,884],{"class":52},[46,38606,35194],{"class":56},[46,38608,38609],{"class":48,"line":35197},[46,38610,35200],{"class":2253},[46,38612,38613,38615,38617,38619,38621,38623,38625],{"class":48,"line":35203},[46,38614,35206],{"class":56},[46,38616,2236],{"class":180},[46,38618,79],{"class":52},[46,38620,35213],{"class":56},[46,38622,534],{"class":52},[46,38624,2405],{"class":180},[46,38626,35220],{"class":56},[46,38628,38629],{"class":48,"line":35223},[46,38630,35226],{"class":2253},[46,38632,38633],{"class":48,"line":35229},[46,38634,35232],{"class":2253},[46,38636,38637,38639,38641],{"class":48,"line":35235},[46,38638,35238],{"class":56},[46,38640,79],{"class":52},[46,38642,34289],{"class":56},[46,38644,38645],{"class":48,"line":35245},[46,38646,616],{"emptyLinePlaceholder":615},[46,38648,38649],{"class":48,"line":35250},[46,38650,35253],{"class":2253},[46,38652,38653,38655,38657,38659,38661],{"class":48,"line":35256},[46,38654,35259],{"class":56},[46,38656,79],{"class":52},[46,38658,35264],{"class":56},[46,38660,534],{"class":52},[46,38662,35269],{"class":56},[46,38664,38665,38667,38669,38671,38673,38675,38677,38679,38681,38683,38685,38687,38689,38691,38693,38695,38697,38699],{"class":48,"line":35272},[46,38666,34425],{"class":180},[46,38668,1152],{"class":56},[46,38670,35279],{"class":173},[46,38672,3082],{"class":180},[46,38674,35284],{"class":52},[46,38676,3131],{"class":180},[46,38678,2730],{"class":173},[46,38680,3082],{"class":180},[46,38682,35284],{"class":52},[46,38684,3131],{"class":180},[46,38686,35297],{"class":173},[46,38688,35300],{"class":56},[46,38690,35303],{"class":52},[46,38692,3093],{"class":180},[46,38694,35308],{"class":56},[46,38696,2515],{"class":52},[46,38698,3093],{"class":180},[46,38700,32479],{"class":56},[46,38702,38703],{"class":48,"line":35317},[46,38704,38705],{"class":2253},"    # 选择最优参数并保存\n",[46,38707,38708],{"class":48,"line":35323},[46,38709,38710],{"class":2253},"    # 保存最佳模型权重字典\n",[46,38712,38713,38716,38718],{"class":48,"line":35329},[46,38714,38715],{"class":56},"    torch.save(best_model_wts,",[46,38717,35341],{"class":173},[46,38719,459],{"class":56},[46,38721,38722],{"class":48,"line":35335},[46,38723,35361],{"class":2253},[46,38725,38726,38728,38730,38732,38734,38736],{"class":48,"line":35346},[46,38727,35367],{"class":56},[46,38729,79],{"class":52},[46,38731,35372],{"class":56},[46,38733,1516],{"class":439},[46,38735,79],{"class":52},[46,38737,3597],{"class":56},[46,38739,38740,38742,38744,38746],{"class":48,"line":35352},[46,38741,35384],{"class":173},[46,38743,3045],{"class":56},[46,38745,35389],{"class":180},[46,38747,35392],{"class":56},[46,38749,38750,38752],{"class":48,"line":35358},[46,38751,35398],{"class":173},[46,38753,35401],{"class":56},[46,38755,38756,38758],{"class":48,"line":35364},[46,38757,35407],{"class":173},[46,38759,35410],{"class":56},[46,38761,38762,38764],{"class":48,"line":35381},[46,38763,35416],{"class":173},[46,38765,35419],{"class":56},[46,38767,38768,38770],{"class":48,"line":35395},[46,38769,35425],{"class":173},[46,38771,35428],{"class":56},[46,38773,38774],{"class":48,"line":35404},[46,38775,35434],{"class":56},[46,38777,38778],{"class":48,"line":35413},[46,38779,35440],{"class":2253},[46,38781,38782,38784],{"class":48,"line":35422},[46,38783,6108],{"class":52},[46,38785,35448],{"class":56},[46,38787,38788],{"class":48,"line":35431},[46,38789,616],{"emptyLinePlaceholder":615},[46,38791,38792],{"class":48,"line":35437},[46,38793,35459],{"class":2253},[46,38795,38796,38798,38800],{"class":48,"line":35443},[46,38797,748],{"class":52},[46,38799,35467],{"class":169},[46,38801,35470],{"class":56},[46,38803,38804],{"class":48,"line":35451},[46,38805,35476],{"class":2253},[46,38807,38808,38810,38812,38814,38816,38818,38820,38822],{"class":48,"line":35456},[46,38809,35482],{"class":56},[46,38811,33670],{"class":439},[46,38813,79],{"class":52},[46,38815,1152],{"class":56},[46,38817,2685],{"class":180},[46,38819,2565],{"class":56},[46,38821,2481],{"class":180},[46,38823,32479],{"class":56},[46,38825,38826],{"class":48,"line":35462},[46,38827,35502],{"class":2253},[46,38829,38830],{"class":48,"line":35473},[46,38831,35508],{"class":2253},[46,38833,38834],{"class":48,"line":35479},[46,38835,35514],{"class":2253},[46,38837,38838,38840,38842,38844,38846,38848,38850],{"class":48,"line":35499},[46,38839,33704],{"class":56},[46,38841,2405],{"class":180},[46,38843,2565],{"class":56},[46,38845,2272],{"class":180},[46,38847,2565],{"class":56},[46,38849,2405],{"class":180},[46,38851,459],{"class":56},[46,38853,38854],{"class":48,"line":35505},[46,38855,35537],{"class":2253},[46,38857,38858],{"class":48,"line":35511},[46,38859,35543],{"class":2253},[46,38861,38862],{"class":48,"line":35517},[46,38863,35549],{"class":2253},[46,38865,38866],{"class":48,"line":35534},[46,38867,35555],{"class":2253},[46,38869,38870],{"class":48,"line":35540},[46,38871,35561],{"class":2253},[46,38873,38874,38876,38878,38880,38882,38884,38886,38888,38890],{"class":48,"line":35546},[46,38875,35567],{"class":56},[46,38877,35570],{"class":173},[46,38879,35573],{"class":56},[46,38881,35576],{"class":173},[46,38883,2565],{"class":56},[46,38885,35581],{"class":439},[46,38887,79],{"class":52},[46,38889,35586],{"class":173},[46,38891,459],{"class":56},[46,38893,38894,38896,38898,38900,38902,38904,38906,38908,38910],{"class":48,"line":35552},[46,38895,35567],{"class":56},[46,38897,35570],{"class":173},[46,38899,35598],{"class":56},[46,38901,35601],{"class":173},[46,38903,2565],{"class":56},[46,38905,35581],{"class":439},[46,38907,79],{"class":52},[46,38909,35610],{"class":173},[46,38911,459],{"class":56},[46,38913,38914],{"class":48,"line":35558},[46,38915,35618],{"class":2253},[46,38917,38918],{"class":48,"line":35564},[46,38919,35624],{"class":56},[46,38921,38922],{"class":48,"line":35591},[46,38923,35630],{"class":2253},[46,38925,38926,38928,38930],{"class":48,"line":35615},[46,38927,35636],{"class":56},[46,38929,35639],{"class":173},[46,38931,459],{"class":56},[46,38933,38934,38936,38938],{"class":48,"line":35621},[46,38935,35647],{"class":56},[46,38937,35650],{"class":173},[46,38939,459],{"class":56},[46,38941,38942],{"class":48,"line":35627},[46,38943,35658],{"class":2253},[46,38945,38946,38948,38950,38952,38954,38956,38958],{"class":48,"line":35633},[46,38947,33704],{"class":56},[46,38949,2405],{"class":180},[46,38951,2565],{"class":56},[46,38953,2272],{"class":180},[46,38955,2565],{"class":56},[46,38957,2272],{"class":180},[46,38959,459],{"class":56},[46,38961,38962,38964,38966,38968,38970,38972,38974,38976,38978],{"class":48,"line":35644},[46,38963,35567],{"class":56},[46,38965,35570],{"class":173},[46,38967,35685],{"class":56},[46,38969,35576],{"class":173},[46,38971,2565],{"class":56},[46,38973,35581],{"class":439},[46,38975,79],{"class":52},[46,38977,35696],{"class":173},[46,38979,459],{"class":56},[46,38981,38982,38984,38986,38988,38990,38992,38994,38996,38998],{"class":48,"line":35655},[46,38983,35567],{"class":56},[46,38985,35570],{"class":173},[46,38987,35708],{"class":56},[46,38989,35601],{"class":173},[46,38991,2565],{"class":56},[46,38993,35581],{"class":439},[46,38995,79],{"class":52},[46,38997,35719],{"class":173},[46,38999,459],{"class":56},[46,39001,39002],{"class":48,"line":35661},[46,39003,35727],{"class":2253},[46,39005,39006],{"class":48,"line":35678},[46,39007,35624],{"class":56},[46,39009,39010,39012,39014],{"class":48,"line":35701},[46,39011,35636],{"class":56},[46,39013,35570],{"class":173},[46,39015,459],{"class":56},[46,39017,39018,39020,39022],{"class":48,"line":35724},[46,39019,35647],{"class":56},[46,39021,35749],{"class":173},[46,39023,459],{"class":56},[46,39025,39026],{"class":48,"line":35730},[46,39027,35757],{"class":56},[46,39029,39030],{"class":48,"line":35735},[46,39031,616],{"emptyLinePlaceholder":615},[46,39033,39034],{"class":48,"line":35744},[46,39035,35768],{"class":2253},[46,39037,39038,39040,39042,39044,39046],{"class":48,"line":35754},[46,39039,911],{"class":52},[46,39041,914],{"class":180},[46,39043,4970],{"class":52},[46,39045,33204],{"class":173},[46,39047,760],{"class":56},[46,39049,39050],{"class":48,"line":35760},[46,39051,35787],{"class":2253},[46,39053,39054,39057,39059],{"class":48,"line":35765},[46,39055,39056],{"class":56},"    AlexNet",[46,39058,79],{"class":52},[46,39060,39061],{"class":56},"AlexNet()\n",[46,39063,39064,39066,39068],{"class":48,"line":35771},[46,39065,35804],{"class":56},[46,39067,79],{"class":52},[46,39069,35809],{"class":56},[46,39071,39072,39074,39076,39079,39081,39083,39085],{"class":48,"line":35784},[46,39073,35367],{"class":56},[46,39075,79],{"class":52},[46,39077,39078],{"class":56},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[46,39080,35822],{"class":439},[46,39082,79],{"class":52},[46,39084,2886],{"class":180},[46,39086,459],{"class":56},[46,39088,39089],{"class":48,"line":35790},[46,39090,35834],{"class":56},[23,39092,39093],{"start":200},[26,39094,35847],{},[36,39096,39098],{"className":38,"code":39097,"language":40,"meta":41,"style":41},"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",[43,39099,39100,39106,39116,39126,39136,39140,39150,39160,39171,39175,39179,39183,39191,39207,39217,39233,39243,39257,39261,39271,39281,39291,39297,39301,39305,39313,39317,39333,39341,39345,39349,39357,39365,39369,39373,39377,39381,39387,39391,39401,39409,39417,39421,39425,39429,39437,39441,39457,39461,39465,39469,39481,39485,39497,39501,39505,39517,39521,39531,39535,39539,39551,39555,39563,39567,39571,39579,39583,39591,39595,39599,39603,39607,39611,39627,39635,39639,39643,39691,39697,39701,39711,39719,39727,39731,39735,39739,39743,39751,39755,39771,39775,39783,39791],{"__ignoreMap":41},[46,39101,39102,39104],{"class":48,"line":49},[46,39103,53],{"class":52},[46,39105,32378],{"class":56},[46,39107,39108,39110,39112,39114],{"class":48,"line":60},[46,39109,53],{"class":52},[46,39111,33392],{"class":56},[46,39113,398],{"class":52},[46,39115,33397],{"class":56},[46,39117,39118,39120,39122,39124],{"class":48,"line":200},[46,39119,957],{"class":52},[46,39121,35875],{"class":56},[46,39123,53],{"class":52},[46,39125,35880],{"class":56},[46,39127,39128,39130,39132,39134],{"class":48,"line":211},[46,39129,957],{"class":52},[46,39131,33375],{"class":56},[46,39133,53],{"class":52},[46,39135,33380],{"class":56},[46,39137,39138],{"class":48,"line":222},[46,39139,35895],{"class":2253},[46,39141,39142,39144,39146,39148],{"class":48,"line":636},[46,39143,957],{"class":52},[46,39145,33346],{"class":56},[46,39147,53],{"class":52},[46,39149,33351],{"class":56},[46,39151,39152,39154,39156,39158],{"class":48,"line":641},[46,39153,957],{"class":52},[46,39155,33890],{"class":56},[46,39157,53],{"class":52},[46,39159,37529],{"class":56},[46,39161,39162,39164,39167,39169],{"class":48,"line":653},[46,39163,957],{"class":52},[46,39165,39166],{"class":56}," 练习.AlexNet.model ",[46,39168,53],{"class":52},[46,39170,37529],{"class":56},[46,39172,39173],{"class":48,"line":659},[46,39174,616],{"emptyLinePlaceholder":615},[46,39176,39177],{"class":48,"line":665},[46,39178,616],{"emptyLinePlaceholder":615},[46,39180,39181],{"class":48,"line":670},[46,39182,35924],{"class":2253},[46,39184,39185,39187,39189],{"class":48,"line":676},[46,39186,748],{"class":52},[46,39188,35931],{"class":169},[46,39190,33928],{"class":56},[46,39192,39193,39195,39197,39199,39201,39203,39205],{"class":48,"line":682},[46,39194,35938],{"class":56},[46,39196,79],{"class":52},[46,39198,33432],{"class":56},[46,39200,33435],{"class":439},[46,39202,79],{"class":52},[46,39204,33440],{"class":173},[46,39206,33443],{"class":56},[46,39208,39209,39211,39213,39215],{"class":48,"line":688},[46,39210,35955],{"class":439},[46,39212,79],{"class":52},[46,39214,35960],{"class":180},[46,39216,33443],{"class":56},[46,39218,39219,39221,39223,39225,39227,39229,39231],{"class":48,"line":693},[46,39220,35967],{"class":439},[46,39222,79],{"class":52},[46,39224,33470],{"class":56},[46,39226,33473],{"class":439},[46,39228,79],{"class":52},[46,39230,37421],{"class":180},[46,39232,33481],{"class":56},[46,39234,39235,39237,39239,39241],{"class":48,"line":699},[46,39236,35984],{"class":439},[46,39238,79],{"class":52},[46,39240,33453],{"class":180},[46,39242,459],{"class":56},[46,39244,39245,39247,39249,39251,39253,39255],{"class":48,"line":705},[46,39246,35995],{"class":56},[46,39248,79],{"class":52},[46,39250,33511],{"class":56},[46,39252,33514],{"class":439},[46,39254,79],{"class":52},[46,39256,36006],{"class":56},[46,39258,39259],{"class":48,"line":711},[46,39260,36011],{"class":2253},[46,39262,39263,39265,39267,39269],{"class":48,"line":717},[46,39264,36016],{"class":439},[46,39266,79],{"class":52},[46,39268,2405],{"class":180},[46,39270,33443],{"class":56},[46,39272,39273,39275,39277,39279],{"class":48,"line":723},[46,39274,36027],{"class":439},[46,39276,79],{"class":52},[46,39278,33453],{"class":180},[46,39280,33443],{"class":56},[46,39282,39283,39285,39287,39289],{"class":48,"line":729},[46,39284,36038],{"class":439},[46,39286,79],{"class":52},[46,39288,2379],{"class":180},[46,39290,459],{"class":56},[46,39292,39293,39295],{"class":48,"line":735},[46,39294,6108],{"class":52},[46,39296,36051],{"class":56},[46,39298,39299],{"class":48,"line":740},[46,39300,616],{"emptyLinePlaceholder":615},[46,39302,39303],{"class":48,"line":745},[46,39304,36060],{"class":2253},[46,39306,39307,39309,39311],{"class":48,"line":763},[46,39308,748],{"class":52},[46,39310,36067],{"class":169},[46,39312,36070],{"class":56},[46,39314,39315],{"class":48,"line":778},[46,39316,36075],{"class":2253},[46,39318,39319,39321,39323,39325,39327,39329,39331],{"class":48,"line":789},[46,39320,33216],{"class":56},[46,39322,79],{"class":52},[46,39324,33223],{"class":173},[46,39326,3744],{"class":52},[46,39328,33228],{"class":56},[46,39330,3741],{"class":52},[46,39332,36092],{"class":173},[46,39334,39335,39337,39339],{"class":48,"line":794},[46,39336,33268],{"class":56},[46,39338,79],{"class":52},[46,39340,34264],{"class":56},[46,39342,39343],{"class":48,"line":806},[46,39344,616],{"emptyLinePlaceholder":615},[46,39346,39347],{"class":48,"line":829},[46,39348,36109],{"class":2253},[46,39350,39351,39353,39355],{"class":48,"line":840},[46,39352,36114],{"class":56},[46,39354,79],{"class":52},[46,39356,34317],{"class":180},[46,39358,39359,39361,39363],{"class":48,"line":846},[46,39360,36123],{"class":56},[46,39362,79],{"class":52},[46,39364,5105],{"class":180},[46,39366,39367],{"class":48,"line":852},[46,39368,616],{"emptyLinePlaceholder":615},[46,39370,39371],{"class":48,"line":857},[46,39372,36136],{"class":2253},[46,39374,39375],{"class":48,"line":875},[46,39376,36141],{"class":2253},[46,39378,39379],{"class":48,"line":892},[46,39380,36146],{"class":2253},[46,39382,39383,39385],{"class":48,"line":898},[46,39384,797],{"class":52},[46,39386,34858],{"class":56},[46,39388,39389],{"class":48,"line":903},[46,39390,36157],{"class":2253},[46,39392,39393,39395,39397,39399],{"class":48,"line":908},[46,39394,5422],{"class":52},[46,39396,36164],{"class":56},[46,39398,1146],{"class":52},[46,39400,36169],{"class":56},[46,39402,39403,39405,39407],{"class":48,"line":925},[46,39404,36174],{"class":56},[46,39406,79],{"class":52},[46,39408,36179],{"class":56},[46,39410,39411,39413,39415],{"class":48,"line":1238},[46,39412,36184],{"class":56},[46,39414,79],{"class":52},[46,39416,36189],{"class":56},[46,39418,39419],{"class":48,"line":1251},[46,39420,36194],{"class":2253},[46,39422,39423],{"class":48,"line":1256},[46,39424,34849],{"class":56},[46,39426,39427],{"class":48,"line":1261},[46,39428,36203],{"class":2253},[46,39430,39431,39433,39435],{"class":48,"line":1274},[46,39432,34634],{"class":56},[46,39434,79],{"class":52},[46,39436,36212],{"class":56},[46,39438,39439],{"class":48,"line":10061},[46,39440,36217],{"class":2253},[46,39442,39443,39445,39447,39449,39451,39453,39455],{"class":48,"line":11720},[46,39444,34651],{"class":56},[46,39446,79],{"class":52},[46,39448,34656],{"class":56},[46,39450,34659],{"class":439},[46,39452,79],{"class":52},[46,39454,2405],{"class":180},[46,39456,459],{"class":56},[46,39458,39459],{"class":48,"line":11745},[46,39460,36238],{"class":2253},[46,39462,39463],{"class":48,"line":11768},[46,39464,36243],{"class":2253},[46,39466,39467],{"class":48,"line":11792},[46,39468,36248],{"class":2253},[46,39470,39471,39473,39475,39477,39479],{"class":48,"line":11797},[46,39472,36253],{"class":56},[46,39474,11481],{"class":52},[46,39476,34761],{"class":56},[46,39478,4970],{"class":52},[46,39480,36262],{"class":56},[46,39482,39483],{"class":48,"line":11802},[46,39484,36267],{"class":2253},[46,39486,39487,39489,39491,39493,39495],{"class":48,"line":11807},[46,39488,36272],{"class":56},[46,39490,11481],{"class":52},[46,39492,36277],{"class":56},[46,39494,2379],{"class":180},[46,39496,459],{"class":56},[46,39498,39499],{"class":48,"line":11816},[46,39500,616],{"emptyLinePlaceholder":615},[46,39502,39503],{"class":48,"line":11821},[46,39504,36290],{"class":2253},[46,39506,39507,39509,39511,39513,39515],{"class":48,"line":11827},[46,39508,36295],{"class":56},[46,39510,79],{"class":52},[46,39512,36300],{"class":56},[46,39514,2770],{"class":52},[46,39516,36305],{"class":56},[46,39518,39519],{"class":48,"line":11848},[46,39520,36310],{"class":2253},[46,39522,39523,39525,39527,39529],{"class":48,"line":11854},[46,39524,34425],{"class":180},[46,39526,1152],{"class":56},[46,39528,36319],{"class":173},[46,39530,36322],{"class":56},[46,39532,39533],{"class":48,"line":11868},[46,39534,616],{"emptyLinePlaceholder":615},[46,39536,39537],{"class":48,"line":11874},[46,39538,36331],{"class":2253},[46,39540,39541,39543,39545,39547,39549],{"class":48,"line":11901},[46,39542,911],{"class":52},[46,39544,914],{"class":180},[46,39546,4970],{"class":52},[46,39548,33204],{"class":173},[46,39550,760],{"class":56},[46,39552,39553],{"class":48,"line":11910},[46,39554,36348],{"class":2253},[46,39556,39557,39559,39561],{"class":48,"line":11916},[46,39558,33268],{"class":56},[46,39560,79],{"class":52},[46,39562,39061],{"class":56},[46,39564,39565],{"class":48,"line":11924},[46,39566,36361],{"class":2253},[46,39568,39569],{"class":48,"line":11929},[46,39570,36366],{"class":2253},[46,39572,39573,39575,39577],{"class":48,"line":18605},[46,39574,36371],{"class":56},[46,39576,36374],{"class":173},[46,39578,32479],{"class":56},[46,39580,39581],{"class":48,"line":18611},[46,39582,36381],{"class":2253},[46,39584,39585,39587,39589],{"class":48,"line":18634},[46,39586,35995],{"class":56},[46,39588,79],{"class":52},[46,39590,36390],{"class":56},[46,39592,39593],{"class":48,"line":18640},[46,39594,36395],{"class":2253},[46,39596,39597],{"class":48,"line":18663},[46,39598,36400],{"class":56},[46,39600,39601],{"class":48,"line":18677},[46,39602,616],{"emptyLinePlaceholder":615},[46,39604,39605],{"class":48,"line":18697},[46,39606,36409],{"class":2253},[46,39608,39609],{"class":48,"line":18703},[46,39610,36414],{"class":2253},[46,39612,39613,39615,39617,39619,39621,39623,39625],{"class":48,"line":18714},[46,39614,33216],{"class":56},[46,39616,79],{"class":52},[46,39618,33223],{"class":173},[46,39620,3744],{"class":52},[46,39622,33228],{"class":56},[46,39624,3741],{"class":52},[46,39626,36092],{"class":173},[46,39628,39629,39631,39633],{"class":48,"line":18737},[46,39630,33268],{"class":56},[46,39632,79],{"class":52},[46,39634,34264],{"class":56},[46,39636,39637],{"class":48,"line":18759},[46,39638,36443],{"class":2253},[46,39640,39641],{"class":48,"line":18764},[46,39642,36448],{"class":2253},[46,39644,39645,39647,39649,39651,39653,39655,39657,39659,39661,39663,39665,39667,39669,39671,39673,39675,39677,39679,39681,39683,39685,39687,39689],{"class":48,"line":18770},[46,39646,36453],{"class":56},[46,39648,79],{"class":52},[46,39650,3076],{"class":56},[46,39652,36460],{"class":173},[46,39654,2565],{"class":56},[46,39656,36465],{"class":173},[46,39658,2565],{"class":56},[46,39660,36470],{"class":173},[46,39662,2565],{"class":56},[46,39664,36475],{"class":173},[46,39666,2565],{"class":56},[46,39668,36480],{"class":173},[46,39670,2565],{"class":56},[46,39672,36485],{"class":173},[46,39674,2565],{"class":56},[46,39676,36490],{"class":173},[46,39678,2565],{"class":56},[46,39680,36495],{"class":173},[46,39682,2565],{"class":56},[46,39684,36500],{"class":173},[46,39686,2565],{"class":56},[46,39688,36505],{"class":173},[46,39690,35220],{"class":56},[46,39692,39693,39695],{"class":48,"line":18784},[46,39694,797],{"class":52},[46,39696,34858],{"class":56},[46,39698,39699],{"class":48,"line":18797},[46,39700,36518],{"class":2253},[46,39702,39703,39705,39707,39709],{"class":48,"line":18802},[46,39704,5422],{"class":52},[46,39706,36525],{"class":56},[46,39708,1146],{"class":52},[46,39710,36169],{"class":56},[46,39712,39713,39715,39717],{"class":48,"line":18816},[46,39714,34584],{"class":56},[46,39716,79],{"class":52},[46,39718,34589],{"class":56},[46,39720,39721,39723,39725],{"class":48,"line":18821},[46,39722,34599],{"class":56},[46,39724,79],{"class":52},[46,39726,34604],{"class":56},[46,39728,39729],{"class":48,"line":18827},[46,39730,616],{"emptyLinePlaceholder":615},[46,39732,39733],{"class":48,"line":18832},[46,39734,36554],{"class":2253},[46,39736,39737],{"class":48,"line":18846},[46,39738,34849],{"class":56},[46,39740,39741],{"class":48,"line":18851},[46,39742,36563],{"class":2253},[46,39744,39745,39747,39749],{"class":48,"line":18856},[46,39746,34634],{"class":56},[46,39748,79],{"class":52},[46,39750,34639],{"class":56},[46,39752,39753],{"class":48,"line":18870},[46,39754,36576],{"class":2253},[46,39756,39757,39759,39761,39763,39765,39767,39769],{"class":48,"line":18882},[46,39758,34651],{"class":56},[46,39760,79],{"class":52},[46,39762,34656],{"class":56},[46,39764,34659],{"class":439},[46,39766,79],{"class":52},[46,39768,2405],{"class":180},[46,39770,459],{"class":56},[46,39772,39773],{"class":48,"line":18887},[46,39774,36597],{"class":2253},[46,39776,39777,39779,39781],{"class":48,"line":18900},[46,39778,36602],{"class":56},[46,39780,79],{"class":52},[46,39782,36607],{"class":56},[46,39784,39785,39787,39789],{"class":48,"line":18905},[46,39786,36612],{"class":56},[46,39788,79],{"class":52},[46,39790,36617],{"class":56},[46,39792,39793,39795,39797,39799,39801,39803,39805,39807],{"class":48,"line":18910},[46,39794,36622],{"class":180},[46,39796,1152],{"class":56},[46,39798,36627],{"class":173},[46,39800,36630],{"class":56},[46,39802,36633],{"class":173},[46,39804,2565],{"class":56},[46,39806,36638],{"class":173},[46,39808,36641],{"class":56},[479,39810,39812],{"id":39811},"_22vgg","2.2.VGG",[23999,39814,39816],{"id":39815},"_221原理","2.2.1.原理",[19,39818,39819],{},[3514,39820],{"alt":41,"src":39821},"\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,39823,39824],{},[3514,39825],{"alt":41,"src":39826},"\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,39828,39829],{},[3514,39830],{"alt":41,"src":39831},"\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,39833,39834],{},"参数详细描述：",[19,39836,39837],{},[3514,39838],{"alt":41,"src":39839},"\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,39841,39842],{},[3514,39843],{"alt":41,"src":39844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-019.png",[19,39846,39847],{},[3514,39848],{"alt":41,"src":39849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-020.png",[19,39851,39852],{},[3514,39853],{"alt":41,"src":39854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-021.png",[19,39856,39857],{},[3514,39858],{"alt":41,"src":39859},"\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",[23999,39861,39863],{"id":39862},"_222代码实现","2.2.2.代码实现",[23,39865,39866],{},[26,39867,39868],{},"网络搭建",[36,39870,39872],{"className":38,"code":39871,"language":40,"meta":41,"style":41},"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",[43,39873,39874,39880,39892,39902,39912,39916,39933,39941,39960,39965,39970,39982,40020,40025,40061,40065,40094,40099,40104,40115,40151,40155,40191,40195,40223,40227,40232,40243,40279,40283,40319,40323,40359,40363,40391,40395,40400,40411,40448,40452,40488,40492,40528,40532,40560,40564,40569,40580,40616,40620,40656,40660,40696,40700,40728,40732,40737,40748,40753,40758,40763,40784,40788,40800,40804,40816,40820,40824,40829,40834,40849,40854,40864,40869,40884,40889,40908,40913,40922,40927,40937,40942,40947,40961,40966,40980,40988,40992,40996,41004,41015,41026,41037,41048,41059,41070,41076,41080,41085,41098,41118,41124,41133],{"__ignoreMap":41},[46,39875,39876,39878],{"class":48,"line":49},[46,39877,53],{"class":52},[46,39879,32378],{"class":56},[46,39881,39882,39884,39887,39889],{"class":48,"line":60},[46,39883,957],{"class":52},[46,39885,39886],{"class":56}," sympy.core.sympify ",[46,39888,53],{"class":52},[46,39890,39891],{"class":56}," kernS\n",[46,39893,39894,39896,39898,39900],{"class":48,"line":200},[46,39895,957],{"class":52},[46,39897,32721],{"class":56},[46,39899,53],{"class":52},[46,39901,32726],{"class":56},[46,39903,39904,39906,39908,39910],{"class":48,"line":211},[46,39905,957],{"class":52},[46,39907,32738],{"class":56},[46,39909,53],{"class":52},[46,39911,32743],{"class":56},[46,39913,39914],{"class":48,"line":222},[46,39915,616],{"emptyLinePlaceholder":615},[46,39917,39918,39920,39923,39925,39927,39929,39931],{"class":48,"line":636},[46,39919,16696],{"class":52},[46,39921,39922],{"class":169}," VGG16",[46,39924,1152],{"class":56},[46,39926,32759],{"class":169},[46,39928,2744],{"class":56},[46,39930,32764],{"class":169},[46,39932,1158],{"class":56},[46,39934,39935,39937,39939],{"class":48,"line":641},[46,39936,32781],{"class":52},[46,39938,32784],{"class":180},[46,39940,32787],{"class":56},[46,39942,39943,39945,39947,39950,39952,39954,39956,39958],{"class":48,"line":653},[46,39944,32797],{"class":180},[46,39946,1152],{"class":56},[46,39948,39949],{"class":180},"VGG16",[46,39951,448],{"class":56},[46,39953,32803],{"class":180},[46,39955,32806],{"class":56},[46,39957,32809],{"class":180},[46,39959,4006],{"class":56},[46,39961,39962],{"class":48,"line":659},[46,39963,39964],{"class":2253},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[46,39966,39967],{"class":48,"line":665},[46,39968,39969],{"class":2253},"        # 这里用的是灰度图\n",[46,39971,39972,39974,39977,39979],{"class":48,"line":670},[46,39973,32825],{"class":180},[46,39975,39976],{"class":56},".block1",[46,39978,79],{"class":52},[46,39980,39981],{"class":56},"nn.Sequential(\n",[46,39983,39984,39987,39989,39991,39993,39995,39997,39999,40001,40003,40005,40007,40009,40011,40013,40015,40017],{"class":48,"line":676},[46,39985,39986],{"class":56},"            nn.Conv2d(",[46,39988,32836],{"class":439},[46,39990,79],{"class":52},[46,39992,2405],{"class":180},[46,39994,2565],{"class":56},[46,39996,32845],{"class":439},[46,39998,79],{"class":52},[46,40000,2391],{"class":180},[46,40002,2565],{"class":56},[46,40004,32854],{"class":439},[46,40006,79],{"class":52},[46,40008,2266],{"class":180},[46,40010,2565],{"class":56},[46,40012,32863],{"class":439},[46,40014,79],{"class":52},[46,40016,2405],{"class":180},[46,40018,40019],{"class":56},"),\n",[46,40021,40022],{"class":48,"line":682},[46,40023,40024],{"class":56},"            nn.ReLU(),\n",[46,40026,40027,40029,40031,40033,40035,40037,40039,40041,40043,40045,40047,40049,40051,40053,40055,40057,40059],{"class":48,"line":688},[46,40028,39986],{"class":56},[46,40030,32836],{"class":439},[46,40032,79],{"class":52},[46,40034,2391],{"class":180},[46,40036,2565],{"class":56},[46,40038,32845],{"class":439},[46,40040,79],{"class":52},[46,40042,2391],{"class":180},[46,40044,2565],{"class":56},[46,40046,32854],{"class":439},[46,40048,79],{"class":52},[46,40050,2266],{"class":180},[46,40052,2565],{"class":56},[46,40054,32863],{"class":439},[46,40056,79],{"class":52},[46,40058,2405],{"class":180},[46,40060,40019],{"class":56},[46,40062,40063],{"class":48,"line":693},[46,40064,40024],{"class":56},[46,40066,40067,40070,40072,40074,40076,40078,40080,40082,40084,40086,40088,40090,40092],{"class":48,"line":699},[46,40068,40069],{"class":56},"            nn.MaxPool2d(",[46,40071,32854],{"class":439},[46,40073,79],{"class":52},[46,40075,2272],{"class":180},[46,40077,2565],{"class":56},[46,40079,32909],{"class":439},[46,40081,79],{"class":52},[46,40083,2272],{"class":180},[46,40085,2565],{"class":56},[46,40087,32863],{"class":439},[46,40089,79],{"class":52},[46,40091,2379],{"class":180},[46,40093,459],{"class":56},[46,40095,40096],{"class":48,"line":705},[46,40097,40098],{"class":56},"        )\n",[46,40100,40101],{"class":48,"line":711},[46,40102,40103],{"class":2253},"        # 第二层\n",[46,40105,40106,40108,40111,40113],{"class":48,"line":717},[46,40107,32825],{"class":180},[46,40109,40110],{"class":56},".block2",[46,40112,79],{"class":52},[46,40114,39981],{"class":56},[46,40116,40117,40119,40121,40123,40125,40127,40129,40131,40133,40135,40137,40139,40141,40143,40145,40147,40149],{"class":48,"line":723},[46,40118,39986],{"class":56},[46,40120,32836],{"class":439},[46,40122,79],{"class":52},[46,40124,2391],{"class":180},[46,40126,2565],{"class":56},[46,40128,32845],{"class":439},[46,40130,79],{"class":52},[46,40132,34045],{"class":180},[46,40134,2565],{"class":56},[46,40136,32854],{"class":439},[46,40138,79],{"class":52},[46,40140,2266],{"class":180},[46,40142,2565],{"class":56},[46,40144,32863],{"class":439},[46,40146,79],{"class":52},[46,40148,2405],{"class":180},[46,40150,40019],{"class":56},[46,40152,40153],{"class":48,"line":729},[46,40154,40024],{"class":56},[46,40156,40157,40159,40161,40163,40165,40167,40169,40171,40173,40175,40177,40179,40181,40183,40185,40187,40189],{"class":48,"line":735},[46,40158,39986],{"class":56},[46,40160,32836],{"class":439},[46,40162,79],{"class":52},[46,40164,34045],{"class":180},[46,40166,2565],{"class":56},[46,40168,32845],{"class":439},[46,40170,79],{"class":52},[46,40172,34045],{"class":180},[46,40174,2565],{"class":56},[46,40176,32854],{"class":439},[46,40178,79],{"class":52},[46,40180,2266],{"class":180},[46,40182,2565],{"class":56},[46,40184,32863],{"class":439},[46,40186,79],{"class":52},[46,40188,2405],{"class":180},[46,40190,40019],{"class":56},[46,40192,40193],{"class":48,"line":740},[46,40194,40024],{"class":56},[46,40196,40197,40199,40201,40203,40205,40207,40209,40211,40213,40215,40217,40219,40221],{"class":48,"line":745},[46,40198,40069],{"class":56},[46,40200,32854],{"class":439},[46,40202,79],{"class":52},[46,40204,2272],{"class":180},[46,40206,2565],{"class":56},[46,40208,32909],{"class":439},[46,40210,79],{"class":52},[46,40212,2272],{"class":180},[46,40214,2565],{"class":56},[46,40216,32863],{"class":439},[46,40218,79],{"class":52},[46,40220,2379],{"class":180},[46,40222,459],{"class":56},[46,40224,40225],{"class":48,"line":763},[46,40226,40098],{"class":56},[46,40228,40229],{"class":48,"line":778},[46,40230,40231],{"class":2253},"        # 第三层\n",[46,40233,40234,40236,40239,40241],{"class":48,"line":789},[46,40235,32825],{"class":180},[46,40237,40238],{"class":56},".block3",[46,40240,79],{"class":52},[46,40242,39981],{"class":56},[46,40244,40245,40247,40249,40251,40253,40255,40257,40259,40261,40263,40265,40267,40269,40271,40273,40275,40277],{"class":48,"line":794},[46,40246,39986],{"class":56},[46,40248,32836],{"class":439},[46,40250,79],{"class":52},[46,40252,34045],{"class":180},[46,40254,2565],{"class":56},[46,40256,32845],{"class":439},[46,40258,79],{"class":52},[46,40260,36842],{"class":180},[46,40262,2565],{"class":56},[46,40264,32854],{"class":439},[46,40266,79],{"class":52},[46,40268,2266],{"class":180},[46,40270,2565],{"class":56},[46,40272,32863],{"class":439},[46,40274,79],{"class":52},[46,40276,2405],{"class":180},[46,40278,40019],{"class":56},[46,40280,40281],{"class":48,"line":806},[46,40282,40024],{"class":56},[46,40284,40285,40287,40289,40291,40293,40295,40297,40299,40301,40303,40305,40307,40309,40311,40313,40315,40317],{"class":48,"line":829},[46,40286,39986],{"class":56},[46,40288,32836],{"class":439},[46,40290,79],{"class":52},[46,40292,36842],{"class":180},[46,40294,2565],{"class":56},[46,40296,32845],{"class":439},[46,40298,79],{"class":52},[46,40300,36842],{"class":180},[46,40302,2565],{"class":56},[46,40304,32854],{"class":439},[46,40306,79],{"class":52},[46,40308,2266],{"class":180},[46,40310,2565],{"class":56},[46,40312,32863],{"class":439},[46,40314,79],{"class":52},[46,40316,2405],{"class":180},[46,40318,40019],{"class":56},[46,40320,40321],{"class":48,"line":840},[46,40322,40024],{"class":56},[46,40324,40325,40327,40329,40331,40333,40335,40337,40339,40341,40343,40345,40347,40349,40351,40353,40355,40357],{"class":48,"line":846},[46,40326,39986],{"class":56},[46,40328,32836],{"class":439},[46,40330,79],{"class":52},[46,40332,36842],{"class":180},[46,40334,2565],{"class":56},[46,40336,32845],{"class":439},[46,40338,79],{"class":52},[46,40340,36842],{"class":180},[46,40342,2565],{"class":56},[46,40344,32854],{"class":439},[46,40346,79],{"class":52},[46,40348,2266],{"class":180},[46,40350,2565],{"class":56},[46,40352,32863],{"class":439},[46,40354,79],{"class":52},[46,40356,2405],{"class":180},[46,40358,40019],{"class":56},[46,40360,40361],{"class":48,"line":852},[46,40362,40024],{"class":56},[46,40364,40365,40367,40369,40371,40373,40375,40377,40379,40381,40383,40385,40387,40389],{"class":48,"line":857},[46,40366,40069],{"class":56},[46,40368,32854],{"class":439},[46,40370,79],{"class":52},[46,40372,2272],{"class":180},[46,40374,2565],{"class":56},[46,40376,32909],{"class":439},[46,40378,79],{"class":52},[46,40380,2272],{"class":180},[46,40382,2565],{"class":56},[46,40384,32863],{"class":439},[46,40386,79],{"class":52},[46,40388,2379],{"class":180},[46,40390,459],{"class":56},[46,40392,40393],{"class":48,"line":875},[46,40394,40098],{"class":56},[46,40396,40397],{"class":48,"line":892},[46,40398,40399],{"class":2253},"        # 第四层\n",[46,40401,40402,40404,40407,40409],{"class":48,"line":898},[46,40403,32825],{"class":180},[46,40405,40406],{"class":56},".block4",[46,40408,79],{"class":52},[46,40410,39981],{"class":56},[46,40412,40413,40415,40417,40419,40421,40423,40425,40427,40430,40432,40434,40436,40438,40440,40442,40444,40446],{"class":48,"line":903},[46,40414,39986],{"class":56},[46,40416,32836],{"class":439},[46,40418,79],{"class":52},[46,40420,36842],{"class":180},[46,40422,2565],{"class":56},[46,40424,32845],{"class":439},[46,40426,79],{"class":52},[46,40428,40429],{"class":180},"512",[46,40431,2565],{"class":56},[46,40433,32854],{"class":439},[46,40435,79],{"class":52},[46,40437,2266],{"class":180},[46,40439,2565],{"class":56},[46,40441,32863],{"class":439},[46,40443,79],{"class":52},[46,40445,2405],{"class":180},[46,40447,40019],{"class":56},[46,40449,40450],{"class":48,"line":908},[46,40451,40024],{"class":56},[46,40453,40454,40456,40458,40460,40462,40464,40466,40468,40470,40472,40474,40476,40478,40480,40482,40484,40486],{"class":48,"line":925},[46,40455,39986],{"class":56},[46,40457,32836],{"class":439},[46,40459,79],{"class":52},[46,40461,40429],{"class":180},[46,40463,2565],{"class":56},[46,40465,32845],{"class":439},[46,40467,79],{"class":52},[46,40469,40429],{"class":180},[46,40471,2565],{"class":56},[46,40473,32854],{"class":439},[46,40475,79],{"class":52},[46,40477,2266],{"class":180},[46,40479,2565],{"class":56},[46,40481,32863],{"class":439},[46,40483,79],{"class":52},[46,40485,2405],{"class":180},[46,40487,40019],{"class":56},[46,40489,40490],{"class":48,"line":1238},[46,40491,40024],{"class":56},[46,40493,40494,40496,40498,40500,40502,40504,40506,40508,40510,40512,40514,40516,40518,40520,40522,40524,40526],{"class":48,"line":1251},[46,40495,39986],{"class":56},[46,40497,32836],{"class":439},[46,40499,79],{"class":52},[46,40501,40429],{"class":180},[46,40503,2565],{"class":56},[46,40505,32845],{"class":439},[46,40507,79],{"class":52},[46,40509,40429],{"class":180},[46,40511,2565],{"class":56},[46,40513,32854],{"class":439},[46,40515,79],{"class":52},[46,40517,2266],{"class":180},[46,40519,2565],{"class":56},[46,40521,32863],{"class":439},[46,40523,79],{"class":52},[46,40525,2405],{"class":180},[46,40527,40019],{"class":56},[46,40529,40530],{"class":48,"line":1256},[46,40531,40024],{"class":56},[46,40533,40534,40536,40538,40540,40542,40544,40546,40548,40550,40552,40554,40556,40558],{"class":48,"line":1261},[46,40535,40069],{"class":56},[46,40537,32854],{"class":439},[46,40539,79],{"class":52},[46,40541,2272],{"class":180},[46,40543,2565],{"class":56},[46,40545,32909],{"class":439},[46,40547,79],{"class":52},[46,40549,2272],{"class":180},[46,40551,2565],{"class":56},[46,40553,32863],{"class":439},[46,40555,79],{"class":52},[46,40557,2379],{"class":180},[46,40559,459],{"class":56},[46,40561,40562],{"class":48,"line":1274},[46,40563,40098],{"class":56},[46,40565,40566],{"class":48,"line":10061},[46,40567,40568],{"class":2253},"        # 第五层\n",[46,40570,40571,40573,40576,40578],{"class":48,"line":11720},[46,40572,32825],{"class":180},[46,40574,40575],{"class":56},".block5",[46,40577,79],{"class":52},[46,40579,39981],{"class":56},[46,40581,40582,40584,40586,40588,40590,40592,40594,40596,40598,40600,40602,40604,40606,40608,40610,40612,40614],{"class":48,"line":11745},[46,40583,39986],{"class":56},[46,40585,32836],{"class":439},[46,40587,79],{"class":52},[46,40589,40429],{"class":180},[46,40591,2565],{"class":56},[46,40593,32845],{"class":439},[46,40595,79],{"class":52},[46,40597,40429],{"class":180},[46,40599,2565],{"class":56},[46,40601,32854],{"class":439},[46,40603,79],{"class":52},[46,40605,2266],{"class":180},[46,40607,2565],{"class":56},[46,40609,32863],{"class":439},[46,40611,79],{"class":52},[46,40613,2405],{"class":180},[46,40615,40019],{"class":56},[46,40617,40618],{"class":48,"line":11768},[46,40619,40024],{"class":56},[46,40621,40622,40624,40626,40628,40630,40632,40634,40636,40638,40640,40642,40644,40646,40648,40650,40652,40654],{"class":48,"line":11792},[46,40623,39986],{"class":56},[46,40625,32836],{"class":439},[46,40627,79],{"class":52},[46,40629,40429],{"class":180},[46,40631,2565],{"class":56},[46,40633,32845],{"class":439},[46,40635,79],{"class":52},[46,40637,40429],{"class":180},[46,40639,2565],{"class":56},[46,40641,32854],{"class":439},[46,40643,79],{"class":52},[46,40645,2266],{"class":180},[46,40647,2565],{"class":56},[46,40649,32863],{"class":439},[46,40651,79],{"class":52},[46,40653,2405],{"class":180},[46,40655,40019],{"class":56},[46,40657,40658],{"class":48,"line":11797},[46,40659,40024],{"class":56},[46,40661,40662,40664,40666,40668,40670,40672,40674,40676,40678,40680,40682,40684,40686,40688,40690,40692,40694],{"class":48,"line":11802},[46,40663,39986],{"class":56},[46,40665,32836],{"class":439},[46,40667,79],{"class":52},[46,40669,40429],{"class":180},[46,40671,2565],{"class":56},[46,40673,32845],{"class":439},[46,40675,79],{"class":52},[46,40677,40429],{"class":180},[46,40679,2565],{"class":56},[46,40681,32854],{"class":439},[46,40683,79],{"class":52},[46,40685,2266],{"class":180},[46,40687,2565],{"class":56},[46,40689,32863],{"class":439},[46,40691,79],{"class":52},[46,40693,2405],{"class":180},[46,40695,40019],{"class":56},[46,40697,40698],{"class":48,"line":11807},[46,40699,40024],{"class":56},[46,40701,40702,40704,40706,40708,40710,40712,40714,40716,40718,40720,40722,40724,40726],{"class":48,"line":11816},[46,40703,40069],{"class":56},[46,40705,32854],{"class":439},[46,40707,79],{"class":52},[46,40709,2272],{"class":180},[46,40711,2565],{"class":56},[46,40713,32909],{"class":439},[46,40715,79],{"class":52},[46,40717,2272],{"class":180},[46,40719,2565],{"class":56},[46,40721,32863],{"class":439},[46,40723,79],{"class":52},[46,40725,2379],{"class":180},[46,40727,459],{"class":56},[46,40729,40730],{"class":48,"line":11821},[46,40731,40098],{"class":56},[46,40733,40734],{"class":48,"line":11827},[46,40735,40736],{"class":2253},"        # 全连接层\n",[46,40738,40739,40741,40744,40746],{"class":48,"line":11848},[46,40740,32825],{"class":180},[46,40742,40743],{"class":56},".block6",[46,40745,79],{"class":52},[46,40747,39981],{"class":56},[46,40749,40750],{"class":48,"line":11854},[46,40751,40752],{"class":2253},"            # 平展操作\n",[46,40754,40755],{"class":48,"line":11868},[46,40756,40757],{"class":2253},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[46,40759,40760],{"class":48,"line":11874},[46,40761,40762],{"class":56},"            nn.Flatten(),\n",[46,40764,40765,40768,40770,40772,40774,40776,40778,40780,40782],{"class":48,"line":11901},[46,40766,40767],{"class":56},"            nn.Linear(",[46,40769,2556],{"class":180},[46,40771,2642],{"class":52},[46,40773,2556],{"class":180},[46,40775,2642],{"class":52},[46,40777,40429],{"class":180},[46,40779,2565],{"class":56},[46,40781,36842],{"class":180},[46,40783,40019],{"class":56},[46,40785,40786],{"class":48,"line":11910},[46,40787,40024],{"class":56},[46,40789,40790,40792,40794,40796,40798],{"class":48,"line":11916},[46,40791,40767],{"class":56},[46,40793,36842],{"class":180},[46,40795,2565],{"class":56},[46,40797,34045],{"class":180},[46,40799,40019],{"class":56},[46,40801,40802],{"class":48,"line":11924},[46,40803,40024],{"class":56},[46,40805,40806,40808,40810,40812,40814],{"class":48,"line":11929},[46,40807,40767],{"class":56},[46,40809,34045],{"class":180},[46,40811,2565],{"class":56},[46,40813,2633],{"class":180},[46,40815,459],{"class":56},[46,40817,40818],{"class":48,"line":18605},[46,40819,40098],{"class":56},[46,40821,40822],{"class":48,"line":18611},[46,40823,616],{"emptyLinePlaceholder":615},[46,40825,40826],{"class":48,"line":18634},[46,40827,40828],{"class":2253},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[46,40830,40831],{"class":48,"line":18640},[46,40832,40833],{"class":2253},"        # 循环遍历模型\n",[46,40835,40836,40838,40841,40843,40846],{"class":48,"line":18663},[46,40837,5422],{"class":52},[46,40839,40840],{"class":56}," m ",[46,40842,1146],{"class":52},[46,40844,40845],{"class":180}," self",[46,40847,40848],{"class":56},".modules():\n",[46,40850,40851],{"class":48,"line":18677},[46,40852,40853],{"class":2253},"            # print(m)\n",[46,40855,40856,40858,40861],{"class":48,"line":18697},[46,40857,878],{"class":52},[46,40859,40860],{"class":180}," isinstance",[46,40862,40863],{"class":56},"(m,nn.Conv2d):\n",[46,40865,40866],{"class":48,"line":18703},[46,40867,40868],{"class":2253},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[46,40870,40871,40874,40877,40879,40882],{"class":48,"line":18714},[46,40872,40873],{"class":56},"                nn.init.kaiming_normal_(m.weight,",[46,40875,40876],{"class":439},"nonlinearity",[46,40878,79],{"class":52},[46,40880,40881],{"class":173},"'relu'",[46,40883,459],{"class":56},[46,40885,40886],{"class":48,"line":18737},[46,40887,40888],{"class":2253},"                # 判断b参数是否存在\n",[46,40890,40891,40894,40897,40900,40903,40906],{"class":48,"line":18759},[46,40892,40893],{"class":52},"                if",[46,40895,40896],{"class":56}," m.bias ",[46,40898,40899],{"class":52},"is",[46,40901,40902],{"class":52}," not",[46,40904,40905],{"class":180}," None",[46,40907,760],{"class":56},[46,40909,40910],{"class":48,"line":18764},[46,40911,40912],{"class":2253},"                    # 如果参数不存在的化初始化b=0\n",[46,40914,40915,40918,40920],{"class":48,"line":18770},[46,40916,40917],{"class":56},"                    nn.init.constant_(m.bias,",[46,40919,2379],{"class":180},[46,40921,459],{"class":56},[46,40923,40924],{"class":48,"line":18784},[46,40925,40926],{"class":2253},"            # 全连接层初始化\n",[46,40928,40929,40932,40934],{"class":48,"line":18797},[46,40930,40931],{"class":52},"            elif",[46,40933,40860],{"class":180},[46,40935,40936],{"class":56},"(m,nn.Linear):\n",[46,40938,40939],{"class":48,"line":18802},[46,40940,40941],{"class":2253},"                # 这个初始化方法是利用的是正太分布的方式\n",[46,40943,40944],{"class":48,"line":18816},[46,40945,40946],{"class":2253},"                # 均值为0，方差为0.01\n",[46,40948,40949,40952,40954,40956,40959],{"class":48,"line":18821},[46,40950,40951],{"class":56},"                nn.init.normal_(m.weight,",[46,40953,2379],{"class":180},[46,40955,2565],{"class":56},[46,40957,40958],{"class":180},"0.01",[46,40960,459],{"class":56},[46,40962,40963],{"class":48,"line":18827},[46,40964,40965],{"class":2253},"                # 初始化b参数\n",[46,40967,40968,40970,40972,40974,40976,40978],{"class":48,"line":18832},[46,40969,40893],{"class":52},[46,40971,40896],{"class":56},[46,40973,40899],{"class":52},[46,40975,40902],{"class":52},[46,40977,40905],{"class":180},[46,40979,760],{"class":56},[46,40981,40982,40984,40986],{"class":48,"line":18846},[46,40983,40917],{"class":56},[46,40985,2379],{"class":180},[46,40987,459],{"class":56},[46,40989,40990],{"class":48,"line":18851},[46,40991,616],{"emptyLinePlaceholder":615},[46,40993,40994],{"class":48,"line":18856},[46,40995,37137],{"class":2253},[46,40997,40998,41000,41002],{"class":48,"line":18870},[46,40999,32781],{"class":52},[46,41001,33073],{"class":169},[46,41003,33076],{"class":56},[46,41005,41006,41008,41010,41012],{"class":48,"line":18882},[46,41007,33081],{"class":56},[46,41009,79],{"class":52},[46,41011,32803],{"class":180},[46,41013,41014],{"class":56},".block1(x)\n",[46,41016,41017,41019,41021,41023],{"class":48,"line":18887},[46,41018,33081],{"class":56},[46,41020,79],{"class":52},[46,41022,32803],{"class":180},[46,41024,41025],{"class":56},".block2(x)\n",[46,41027,41028,41030,41032,41034],{"class":48,"line":18900},[46,41029,33081],{"class":56},[46,41031,79],{"class":52},[46,41033,32803],{"class":180},[46,41035,41036],{"class":56},".block3(x)\n",[46,41038,41039,41041,41043,41045],{"class":48,"line":18905},[46,41040,33081],{"class":56},[46,41042,79],{"class":52},[46,41044,32803],{"class":180},[46,41046,41047],{"class":56},".block4(x)\n",[46,41049,41050,41052,41054,41056],{"class":48,"line":18910},[46,41051,33081],{"class":56},[46,41053,79],{"class":52},[46,41055,32803],{"class":180},[46,41057,41058],{"class":56},".block5(x)\n",[46,41060,41061,41063,41065,41067],{"class":48,"line":18915},[46,41062,33081],{"class":56},[46,41064,79],{"class":52},[46,41066,32803],{"class":180},[46,41068,41069],{"class":56},".block6(x)\n",[46,41071,41072,41074],{"class":48,"line":18928},[46,41073,16754],{"class":52},[46,41075,33189],{"class":56},[46,41077,41078],{"class":48,"line":18933},[46,41079,616],{"emptyLinePlaceholder":615},[46,41081,41082],{"class":48,"line":34607},[46,41083,41084],{"class":2253},"# 验证模型\n",[46,41086,41087,41089,41091,41093,41096],{"class":48,"line":34613},[46,41088,911],{"class":52},[46,41090,914],{"class":180},[46,41092,4970],{"class":52},[46,41094,41095],{"class":173},"'__main__'",[46,41097,760],{"class":56},[46,41099,41100,41102,41104,41106,41108,41110,41112,41114,41116],{"class":48,"line":34619},[46,41101,33216],{"class":56},[46,41103,79],{"class":52},[46,41105,32434],{"class":56},[46,41107,33223],{"class":173},[46,41109,3744],{"class":52},[46,41111,33228],{"class":56},[46,41113,3741],{"class":52},[46,41115,32458],{"class":173},[46,41117,459],{"class":56},[46,41119,41120,41122],{"class":48,"line":34625},[46,41121,1227],{"class":180},[46,41123,32467],{"class":56},[46,41125,41126,41128,41130],{"class":48,"line":34631},[46,41127,33268],{"class":56},[46,41129,79],{"class":52},[46,41131,41132],{"class":56},"VGG16().to(device)\n",[46,41134,41135,41137,41139,41141,41143,41145,41147,41149],{"class":48,"line":34642},[46,41136,1227],{"class":180},[46,41138,33280],{"class":56},[46,41140,2405],{"class":180},[46,41142,2565],{"class":56},[46,41144,33478],{"class":180},[46,41146,2565],{"class":56},[46,41148,33478],{"class":180},[46,41150,33293],{"class":56},[23,41152,41153],{"start":60},[26,41154,41155],{},"训练代码",[19,41157,41158],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[19,41160,41161],{},"解决方式:",[19,41163,41164],{},"①权重初始化",[36,41166,41168],{"className":38,"code":41167,"language":40,"meta":41,"style":41},"# 权重初始化,保证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",[43,41169,41170,41175,41180,41192,41197,41205,41210,41223,41228,41242,41247,41256,41261,41270,41275,41280,41293,41298,41312],{"__ignoreMap":41},[46,41171,41172],{"class":48,"line":49},[46,41173,41174],{"class":2253},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[46,41176,41177],{"class":48,"line":60},[46,41178,41179],{"class":2253},"# 循环遍历模型\n",[46,41181,41182,41184,41186,41188,41190],{"class":48,"line":200},[46,41183,1713],{"class":52},[46,41185,40840],{"class":56},[46,41187,1146],{"class":52},[46,41189,40845],{"class":180},[46,41191,40848],{"class":56},[46,41193,41194],{"class":48,"line":211},[46,41195,41196],{"class":2253},"    # print(m)\n",[46,41198,41199,41201,41203],{"class":48,"line":222},[46,41200,5121],{"class":52},[46,41202,40860],{"class":180},[46,41204,40863],{"class":56},[46,41206,41207],{"class":48,"line":636},[46,41208,41209],{"class":2253},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[46,41211,41212,41215,41217,41219,41221],{"class":48,"line":641},[46,41213,41214],{"class":56},"        nn.init.kaiming_normal_(m.weight,",[46,41216,40876],{"class":439},[46,41218,79],{"class":52},[46,41220,40881],{"class":173},[46,41222,459],{"class":56},[46,41224,41225],{"class":48,"line":653},[46,41226,41227],{"class":2253},"        # 判断b参数是否存在\n",[46,41229,41230,41232,41234,41236,41238,41240],{"class":48,"line":659},[46,41231,4525],{"class":52},[46,41233,40896],{"class":56},[46,41235,40899],{"class":52},[46,41237,40902],{"class":52},[46,41239,40905],{"class":180},[46,41241,760],{"class":56},[46,41243,41244],{"class":48,"line":665},[46,41245,41246],{"class":2253},"            # 如果参数不存在的化初始化b=0\n",[46,41248,41249,41252,41254],{"class":48,"line":670},[46,41250,41251],{"class":56},"            nn.init.constant_(m.bias,",[46,41253,2379],{"class":180},[46,41255,459],{"class":56},[46,41257,41258],{"class":48,"line":676},[46,41259,41260],{"class":2253},"    # 全连接层初始化\n",[46,41262,41263,41266,41268],{"class":48,"line":682},[46,41264,41265],{"class":52},"    elif",[46,41267,40860],{"class":180},[46,41269,40936],{"class":56},[46,41271,41272],{"class":48,"line":688},[46,41273,41274],{"class":2253},"        # 这个初始化方法是利用的是正太分布的方式\n",[46,41276,41277],{"class":48,"line":693},[46,41278,41279],{"class":2253},"        # 均值为0，方差为0.01\n",[46,41281,41282,41285,41287,41289,41291],{"class":48,"line":699},[46,41283,41284],{"class":56},"        nn.init.normal_(m.weight,",[46,41286,2379],{"class":180},[46,41288,2565],{"class":56},[46,41290,40958],{"class":180},[46,41292,459],{"class":56},[46,41294,41295],{"class":48,"line":705},[46,41296,41297],{"class":2253},"        # 初始化b参数\n",[46,41299,41300,41302,41304,41306,41308,41310],{"class":48,"line":711},[46,41301,4525],{"class":52},[46,41303,40896],{"class":56},[46,41305,40899],{"class":52},[46,41307,40902],{"class":52},[46,41309,40905],{"class":180},[46,41311,760],{"class":56},[46,41313,41314,41316,41318],{"class":48,"line":717},[46,41315,41251],{"class":56},[46,41317,2379],{"class":180},[46,41319,459],{"class":56},[19,41321,41322],{},"②尽可能地增加批次",[19,41324,41325],{},"训练完整代码：",[36,41327,41328],{"className":38,"code":39871,"language":40,"meta":41,"style":41},[43,41329,41330,41336,41346,41356,41366,41370,41386,41394,41412,41416,41420,41430,41466,41470,41506,41510,41538,41542,41546,41556,41592,41596,41632,41636,41664,41668,41672,41682,41718,41722,41758,41762,41798,41802,41830,41834,41838,41848,41884,41888,41924,41928,41964,41968,41996,42000,42004,42014,42050,42054,42090,42094,42130,42134,42162,42166,42170,42180,42184,42188,42192,42212,42216,42228,42232,42244,42248,42252,42256,42260,42272,42276,42284,42288,42300,42304,42318,42322,42330,42334,42342,42346,42350,42362,42366,42380,42388,42392,42396,42404,42414,42424,42434,42444,42454,42464,42470,42474,42478,42490,42510,42516,42524],{"__ignoreMap":41},[46,41331,41332,41334],{"class":48,"line":49},[46,41333,53],{"class":52},[46,41335,32378],{"class":56},[46,41337,41338,41340,41342,41344],{"class":48,"line":60},[46,41339,957],{"class":52},[46,41341,39886],{"class":56},[46,41343,53],{"class":52},[46,41345,39891],{"class":56},[46,41347,41348,41350,41352,41354],{"class":48,"line":200},[46,41349,957],{"class":52},[46,41351,32721],{"class":56},[46,41353,53],{"class":52},[46,41355,32726],{"class":56},[46,41357,41358,41360,41362,41364],{"class":48,"line":211},[46,41359,957],{"class":52},[46,41361,32738],{"class":56},[46,41363,53],{"class":52},[46,41365,32743],{"class":56},[46,41367,41368],{"class":48,"line":222},[46,41369,616],{"emptyLinePlaceholder":615},[46,41371,41372,41374,41376,41378,41380,41382,41384],{"class":48,"line":636},[46,41373,16696],{"class":52},[46,41375,39922],{"class":169},[46,41377,1152],{"class":56},[46,41379,32759],{"class":169},[46,41381,2744],{"class":56},[46,41383,32764],{"class":169},[46,41385,1158],{"class":56},[46,41387,41388,41390,41392],{"class":48,"line":641},[46,41389,32781],{"class":52},[46,41391,32784],{"class":180},[46,41393,32787],{"class":56},[46,41395,41396,41398,41400,41402,41404,41406,41408,41410],{"class":48,"line":653},[46,41397,32797],{"class":180},[46,41399,1152],{"class":56},[46,41401,39949],{"class":180},[46,41403,448],{"class":56},[46,41405,32803],{"class":180},[46,41407,32806],{"class":56},[46,41409,32809],{"class":180},[46,41411,4006],{"class":56},[46,41413,41414],{"class":48,"line":659},[46,41415,39964],{"class":2253},[46,41417,41418],{"class":48,"line":665},[46,41419,39969],{"class":2253},[46,41421,41422,41424,41426,41428],{"class":48,"line":670},[46,41423,32825],{"class":180},[46,41425,39976],{"class":56},[46,41427,79],{"class":52},[46,41429,39981],{"class":56},[46,41431,41432,41434,41436,41438,41440,41442,41444,41446,41448,41450,41452,41454,41456,41458,41460,41462,41464],{"class":48,"line":676},[46,41433,39986],{"class":56},[46,41435,32836],{"class":439},[46,41437,79],{"class":52},[46,41439,2405],{"class":180},[46,41441,2565],{"class":56},[46,41443,32845],{"class":439},[46,41445,79],{"class":52},[46,41447,2391],{"class":180},[46,41449,2565],{"class":56},[46,41451,32854],{"class":439},[46,41453,79],{"class":52},[46,41455,2266],{"class":180},[46,41457,2565],{"class":56},[46,41459,32863],{"class":439},[46,41461,79],{"class":52},[46,41463,2405],{"class":180},[46,41465,40019],{"class":56},[46,41467,41468],{"class":48,"line":682},[46,41469,40024],{"class":56},[46,41471,41472,41474,41476,41478,41480,41482,41484,41486,41488,41490,41492,41494,41496,41498,41500,41502,41504],{"class":48,"line":688},[46,41473,39986],{"class":56},[46,41475,32836],{"class":439},[46,41477,79],{"class":52},[46,41479,2391],{"class":180},[46,41481,2565],{"class":56},[46,41483,32845],{"class":439},[46,41485,79],{"class":52},[46,41487,2391],{"class":180},[46,41489,2565],{"class":56},[46,41491,32854],{"class":439},[46,41493,79],{"class":52},[46,41495,2266],{"class":180},[46,41497,2565],{"class":56},[46,41499,32863],{"class":439},[46,41501,79],{"class":52},[46,41503,2405],{"class":180},[46,41505,40019],{"class":56},[46,41507,41508],{"class":48,"line":693},[46,41509,40024],{"class":56},[46,41511,41512,41514,41516,41518,41520,41522,41524,41526,41528,41530,41532,41534,41536],{"class":48,"line":699},[46,41513,40069],{"class":56},[46,41515,32854],{"class":439},[46,41517,79],{"class":52},[46,41519,2272],{"class":180},[46,41521,2565],{"class":56},[46,41523,32909],{"class":439},[46,41525,79],{"class":52},[46,41527,2272],{"class":180},[46,41529,2565],{"class":56},[46,41531,32863],{"class":439},[46,41533,79],{"class":52},[46,41535,2379],{"class":180},[46,41537,459],{"class":56},[46,41539,41540],{"class":48,"line":705},[46,41541,40098],{"class":56},[46,41543,41544],{"class":48,"line":711},[46,41545,40103],{"class":2253},[46,41547,41548,41550,41552,41554],{"class":48,"line":717},[46,41549,32825],{"class":180},[46,41551,40110],{"class":56},[46,41553,79],{"class":52},[46,41555,39981],{"class":56},[46,41557,41558,41560,41562,41564,41566,41568,41570,41572,41574,41576,41578,41580,41582,41584,41586,41588,41590],{"class":48,"line":723},[46,41559,39986],{"class":56},[46,41561,32836],{"class":439},[46,41563,79],{"class":52},[46,41565,2391],{"class":180},[46,41567,2565],{"class":56},[46,41569,32845],{"class":439},[46,41571,79],{"class":52},[46,41573,34045],{"class":180},[46,41575,2565],{"class":56},[46,41577,32854],{"class":439},[46,41579,79],{"class":52},[46,41581,2266],{"class":180},[46,41583,2565],{"class":56},[46,41585,32863],{"class":439},[46,41587,79],{"class":52},[46,41589,2405],{"class":180},[46,41591,40019],{"class":56},[46,41593,41594],{"class":48,"line":729},[46,41595,40024],{"class":56},[46,41597,41598,41600,41602,41604,41606,41608,41610,41612,41614,41616,41618,41620,41622,41624,41626,41628,41630],{"class":48,"line":735},[46,41599,39986],{"class":56},[46,41601,32836],{"class":439},[46,41603,79],{"class":52},[46,41605,34045],{"class":180},[46,41607,2565],{"class":56},[46,41609,32845],{"class":439},[46,41611,79],{"class":52},[46,41613,34045],{"class":180},[46,41615,2565],{"class":56},[46,41617,32854],{"class":439},[46,41619,79],{"class":52},[46,41621,2266],{"class":180},[46,41623,2565],{"class":56},[46,41625,32863],{"class":439},[46,41627,79],{"class":52},[46,41629,2405],{"class":180},[46,41631,40019],{"class":56},[46,41633,41634],{"class":48,"line":740},[46,41635,40024],{"class":56},[46,41637,41638,41640,41642,41644,41646,41648,41650,41652,41654,41656,41658,41660,41662],{"class":48,"line":745},[46,41639,40069],{"class":56},[46,41641,32854],{"class":439},[46,41643,79],{"class":52},[46,41645,2272],{"class":180},[46,41647,2565],{"class":56},[46,41649,32909],{"class":439},[46,41651,79],{"class":52},[46,41653,2272],{"class":180},[46,41655,2565],{"class":56},[46,41657,32863],{"class":439},[46,41659,79],{"class":52},[46,41661,2379],{"class":180},[46,41663,459],{"class":56},[46,41665,41666],{"class":48,"line":763},[46,41667,40098],{"class":56},[46,41669,41670],{"class":48,"line":778},[46,41671,40231],{"class":2253},[46,41673,41674,41676,41678,41680],{"class":48,"line":789},[46,41675,32825],{"class":180},[46,41677,40238],{"class":56},[46,41679,79],{"class":52},[46,41681,39981],{"class":56},[46,41683,41684,41686,41688,41690,41692,41694,41696,41698,41700,41702,41704,41706,41708,41710,41712,41714,41716],{"class":48,"line":794},[46,41685,39986],{"class":56},[46,41687,32836],{"class":439},[46,41689,79],{"class":52},[46,41691,34045],{"class":180},[46,41693,2565],{"class":56},[46,41695,32845],{"class":439},[46,41697,79],{"class":52},[46,41699,36842],{"class":180},[46,41701,2565],{"class":56},[46,41703,32854],{"class":439},[46,41705,79],{"class":52},[46,41707,2266],{"class":180},[46,41709,2565],{"class":56},[46,41711,32863],{"class":439},[46,41713,79],{"class":52},[46,41715,2405],{"class":180},[46,41717,40019],{"class":56},[46,41719,41720],{"class":48,"line":806},[46,41721,40024],{"class":56},[46,41723,41724,41726,41728,41730,41732,41734,41736,41738,41740,41742,41744,41746,41748,41750,41752,41754,41756],{"class":48,"line":829},[46,41725,39986],{"class":56},[46,41727,32836],{"class":439},[46,41729,79],{"class":52},[46,41731,36842],{"class":180},[46,41733,2565],{"class":56},[46,41735,32845],{"class":439},[46,41737,79],{"class":52},[46,41739,36842],{"class":180},[46,41741,2565],{"class":56},[46,41743,32854],{"class":439},[46,41745,79],{"class":52},[46,41747,2266],{"class":180},[46,41749,2565],{"class":56},[46,41751,32863],{"class":439},[46,41753,79],{"class":52},[46,41755,2405],{"class":180},[46,41757,40019],{"class":56},[46,41759,41760],{"class":48,"line":840},[46,41761,40024],{"class":56},[46,41763,41764,41766,41768,41770,41772,41774,41776,41778,41780,41782,41784,41786,41788,41790,41792,41794,41796],{"class":48,"line":846},[46,41765,39986],{"class":56},[46,41767,32836],{"class":439},[46,41769,79],{"class":52},[46,41771,36842],{"class":180},[46,41773,2565],{"class":56},[46,41775,32845],{"class":439},[46,41777,79],{"class":52},[46,41779,36842],{"class":180},[46,41781,2565],{"class":56},[46,41783,32854],{"class":439},[46,41785,79],{"class":52},[46,41787,2266],{"class":180},[46,41789,2565],{"class":56},[46,41791,32863],{"class":439},[46,41793,79],{"class":52},[46,41795,2405],{"class":180},[46,41797,40019],{"class":56},[46,41799,41800],{"class":48,"line":852},[46,41801,40024],{"class":56},[46,41803,41804,41806,41808,41810,41812,41814,41816,41818,41820,41822,41824,41826,41828],{"class":48,"line":857},[46,41805,40069],{"class":56},[46,41807,32854],{"class":439},[46,41809,79],{"class":52},[46,41811,2272],{"class":180},[46,41813,2565],{"class":56},[46,41815,32909],{"class":439},[46,41817,79],{"class":52},[46,41819,2272],{"class":180},[46,41821,2565],{"class":56},[46,41823,32863],{"class":439},[46,41825,79],{"class":52},[46,41827,2379],{"class":180},[46,41829,459],{"class":56},[46,41831,41832],{"class":48,"line":875},[46,41833,40098],{"class":56},[46,41835,41836],{"class":48,"line":892},[46,41837,40399],{"class":2253},[46,41839,41840,41842,41844,41846],{"class":48,"line":898},[46,41841,32825],{"class":180},[46,41843,40406],{"class":56},[46,41845,79],{"class":52},[46,41847,39981],{"class":56},[46,41849,41850,41852,41854,41856,41858,41860,41862,41864,41866,41868,41870,41872,41874,41876,41878,41880,41882],{"class":48,"line":903},[46,41851,39986],{"class":56},[46,41853,32836],{"class":439},[46,41855,79],{"class":52},[46,41857,36842],{"class":180},[46,41859,2565],{"class":56},[46,41861,32845],{"class":439},[46,41863,79],{"class":52},[46,41865,40429],{"class":180},[46,41867,2565],{"class":56},[46,41869,32854],{"class":439},[46,41871,79],{"class":52},[46,41873,2266],{"class":180},[46,41875,2565],{"class":56},[46,41877,32863],{"class":439},[46,41879,79],{"class":52},[46,41881,2405],{"class":180},[46,41883,40019],{"class":56},[46,41885,41886],{"class":48,"line":908},[46,41887,40024],{"class":56},[46,41889,41890,41892,41894,41896,41898,41900,41902,41904,41906,41908,41910,41912,41914,41916,41918,41920,41922],{"class":48,"line":925},[46,41891,39986],{"class":56},[46,41893,32836],{"class":439},[46,41895,79],{"class":52},[46,41897,40429],{"class":180},[46,41899,2565],{"class":56},[46,41901,32845],{"class":439},[46,41903,79],{"class":52},[46,41905,40429],{"class":180},[46,41907,2565],{"class":56},[46,41909,32854],{"class":439},[46,41911,79],{"class":52},[46,41913,2266],{"class":180},[46,41915,2565],{"class":56},[46,41917,32863],{"class":439},[46,41919,79],{"class":52},[46,41921,2405],{"class":180},[46,41923,40019],{"class":56},[46,41925,41926],{"class":48,"line":1238},[46,41927,40024],{"class":56},[46,41929,41930,41932,41934,41936,41938,41940,41942,41944,41946,41948,41950,41952,41954,41956,41958,41960,41962],{"class":48,"line":1251},[46,41931,39986],{"class":56},[46,41933,32836],{"class":439},[46,41935,79],{"class":52},[46,41937,40429],{"class":180},[46,41939,2565],{"class":56},[46,41941,32845],{"class":439},[46,41943,79],{"class":52},[46,41945,40429],{"class":180},[46,41947,2565],{"class":56},[46,41949,32854],{"class":439},[46,41951,79],{"class":52},[46,41953,2266],{"class":180},[46,41955,2565],{"class":56},[46,41957,32863],{"class":439},[46,41959,79],{"class":52},[46,41961,2405],{"class":180},[46,41963,40019],{"class":56},[46,41965,41966],{"class":48,"line":1256},[46,41967,40024],{"class":56},[46,41969,41970,41972,41974,41976,41978,41980,41982,41984,41986,41988,41990,41992,41994],{"class":48,"line":1261},[46,41971,40069],{"class":56},[46,41973,32854],{"class":439},[46,41975,79],{"class":52},[46,41977,2272],{"class":180},[46,41979,2565],{"class":56},[46,41981,32909],{"class":439},[46,41983,79],{"class":52},[46,41985,2272],{"class":180},[46,41987,2565],{"class":56},[46,41989,32863],{"class":439},[46,41991,79],{"class":52},[46,41993,2379],{"class":180},[46,41995,459],{"class":56},[46,41997,41998],{"class":48,"line":1274},[46,41999,40098],{"class":56},[46,42001,42002],{"class":48,"line":10061},[46,42003,40568],{"class":2253},[46,42005,42006,42008,42010,42012],{"class":48,"line":11720},[46,42007,32825],{"class":180},[46,42009,40575],{"class":56},[46,42011,79],{"class":52},[46,42013,39981],{"class":56},[46,42015,42016,42018,42020,42022,42024,42026,42028,42030,42032,42034,42036,42038,42040,42042,42044,42046,42048],{"class":48,"line":11745},[46,42017,39986],{"class":56},[46,42019,32836],{"class":439},[46,42021,79],{"class":52},[46,42023,40429],{"class":180},[46,42025,2565],{"class":56},[46,42027,32845],{"class":439},[46,42029,79],{"class":52},[46,42031,40429],{"class":180},[46,42033,2565],{"class":56},[46,42035,32854],{"class":439},[46,42037,79],{"class":52},[46,42039,2266],{"class":180},[46,42041,2565],{"class":56},[46,42043,32863],{"class":439},[46,42045,79],{"class":52},[46,42047,2405],{"class":180},[46,42049,40019],{"class":56},[46,42051,42052],{"class":48,"line":11768},[46,42053,40024],{"class":56},[46,42055,42056,42058,42060,42062,42064,42066,42068,42070,42072,42074,42076,42078,42080,42082,42084,42086,42088],{"class":48,"line":11792},[46,42057,39986],{"class":56},[46,42059,32836],{"class":439},[46,42061,79],{"class":52},[46,42063,40429],{"class":180},[46,42065,2565],{"class":56},[46,42067,32845],{"class":439},[46,42069,79],{"class":52},[46,42071,40429],{"class":180},[46,42073,2565],{"class":56},[46,42075,32854],{"class":439},[46,42077,79],{"class":52},[46,42079,2266],{"class":180},[46,42081,2565],{"class":56},[46,42083,32863],{"class":439},[46,42085,79],{"class":52},[46,42087,2405],{"class":180},[46,42089,40019],{"class":56},[46,42091,42092],{"class":48,"line":11797},[46,42093,40024],{"class":56},[46,42095,42096,42098,42100,42102,42104,42106,42108,42110,42112,42114,42116,42118,42120,42122,42124,42126,42128],{"class":48,"line":11802},[46,42097,39986],{"class":56},[46,42099,32836],{"class":439},[46,42101,79],{"class":52},[46,42103,40429],{"class":180},[46,42105,2565],{"class":56},[46,42107,32845],{"class":439},[46,42109,79],{"class":52},[46,42111,40429],{"class":180},[46,42113,2565],{"class":56},[46,42115,32854],{"class":439},[46,42117,79],{"class":52},[46,42119,2266],{"class":180},[46,42121,2565],{"class":56},[46,42123,32863],{"class":439},[46,42125,79],{"class":52},[46,42127,2405],{"class":180},[46,42129,40019],{"class":56},[46,42131,42132],{"class":48,"line":11807},[46,42133,40024],{"class":56},[46,42135,42136,42138,42140,42142,42144,42146,42148,42150,42152,42154,42156,42158,42160],{"class":48,"line":11816},[46,42137,40069],{"class":56},[46,42139,32854],{"class":439},[46,42141,79],{"class":52},[46,42143,2272],{"class":180},[46,42145,2565],{"class":56},[46,42147,32909],{"class":439},[46,42149,79],{"class":52},[46,42151,2272],{"class":180},[46,42153,2565],{"class":56},[46,42155,32863],{"class":439},[46,42157,79],{"class":52},[46,42159,2379],{"class":180},[46,42161,459],{"class":56},[46,42163,42164],{"class":48,"line":11821},[46,42165,40098],{"class":56},[46,42167,42168],{"class":48,"line":11827},[46,42169,40736],{"class":2253},[46,42171,42172,42174,42176,42178],{"class":48,"line":11848},[46,42173,32825],{"class":180},[46,42175,40743],{"class":56},[46,42177,79],{"class":52},[46,42179,39981],{"class":56},[46,42181,42182],{"class":48,"line":11854},[46,42183,40752],{"class":2253},[46,42185,42186],{"class":48,"line":11868},[46,42187,40757],{"class":2253},[46,42189,42190],{"class":48,"line":11874},[46,42191,40762],{"class":56},[46,42193,42194,42196,42198,42200,42202,42204,42206,42208,42210],{"class":48,"line":11901},[46,42195,40767],{"class":56},[46,42197,2556],{"class":180},[46,42199,2642],{"class":52},[46,42201,2556],{"class":180},[46,42203,2642],{"class":52},[46,42205,40429],{"class":180},[46,42207,2565],{"class":56},[46,42209,36842],{"class":180},[46,42211,40019],{"class":56},[46,42213,42214],{"class":48,"line":11910},[46,42215,40024],{"class":56},[46,42217,42218,42220,42222,42224,42226],{"class":48,"line":11916},[46,42219,40767],{"class":56},[46,42221,36842],{"class":180},[46,42223,2565],{"class":56},[46,42225,34045],{"class":180},[46,42227,40019],{"class":56},[46,42229,42230],{"class":48,"line":11924},[46,42231,40024],{"class":56},[46,42233,42234,42236,42238,42240,42242],{"class":48,"line":11929},[46,42235,40767],{"class":56},[46,42237,34045],{"class":180},[46,42239,2565],{"class":56},[46,42241,2633],{"class":180},[46,42243,459],{"class":56},[46,42245,42246],{"class":48,"line":18605},[46,42247,40098],{"class":56},[46,42249,42250],{"class":48,"line":18611},[46,42251,616],{"emptyLinePlaceholder":615},[46,42253,42254],{"class":48,"line":18634},[46,42255,40828],{"class":2253},[46,42257,42258],{"class":48,"line":18640},[46,42259,40833],{"class":2253},[46,42261,42262,42264,42266,42268,42270],{"class":48,"line":18663},[46,42263,5422],{"class":52},[46,42265,40840],{"class":56},[46,42267,1146],{"class":52},[46,42269,40845],{"class":180},[46,42271,40848],{"class":56},[46,42273,42274],{"class":48,"line":18677},[46,42275,40853],{"class":2253},[46,42277,42278,42280,42282],{"class":48,"line":18697},[46,42279,878],{"class":52},[46,42281,40860],{"class":180},[46,42283,40863],{"class":56},[46,42285,42286],{"class":48,"line":18703},[46,42287,40868],{"class":2253},[46,42289,42290,42292,42294,42296,42298],{"class":48,"line":18714},[46,42291,40873],{"class":56},[46,42293,40876],{"class":439},[46,42295,79],{"class":52},[46,42297,40881],{"class":173},[46,42299,459],{"class":56},[46,42301,42302],{"class":48,"line":18737},[46,42303,40888],{"class":2253},[46,42305,42306,42308,42310,42312,42314,42316],{"class":48,"line":18759},[46,42307,40893],{"class":52},[46,42309,40896],{"class":56},[46,42311,40899],{"class":52},[46,42313,40902],{"class":52},[46,42315,40905],{"class":180},[46,42317,760],{"class":56},[46,42319,42320],{"class":48,"line":18764},[46,42321,40912],{"class":2253},[46,42323,42324,42326,42328],{"class":48,"line":18770},[46,42325,40917],{"class":56},[46,42327,2379],{"class":180},[46,42329,459],{"class":56},[46,42331,42332],{"class":48,"line":18784},[46,42333,40926],{"class":2253},[46,42335,42336,42338,42340],{"class":48,"line":18797},[46,42337,40931],{"class":52},[46,42339,40860],{"class":180},[46,42341,40936],{"class":56},[46,42343,42344],{"class":48,"line":18802},[46,42345,40941],{"class":2253},[46,42347,42348],{"class":48,"line":18816},[46,42349,40946],{"class":2253},[46,42351,42352,42354,42356,42358,42360],{"class":48,"line":18821},[46,42353,40951],{"class":56},[46,42355,2379],{"class":180},[46,42357,2565],{"class":56},[46,42359,40958],{"class":180},[46,42361,459],{"class":56},[46,42363,42364],{"class":48,"line":18827},[46,42365,40965],{"class":2253},[46,42367,42368,42370,42372,42374,42376,42378],{"class":48,"line":18832},[46,42369,40893],{"class":52},[46,42371,40896],{"class":56},[46,42373,40899],{"class":52},[46,42375,40902],{"class":52},[46,42377,40905],{"class":180},[46,42379,760],{"class":56},[46,42381,42382,42384,42386],{"class":48,"line":18846},[46,42383,40917],{"class":56},[46,42385,2379],{"class":180},[46,42387,459],{"class":56},[46,42389,42390],{"class":48,"line":18851},[46,42391,616],{"emptyLinePlaceholder":615},[46,42393,42394],{"class":48,"line":18856},[46,42395,37137],{"class":2253},[46,42397,42398,42400,42402],{"class":48,"line":18870},[46,42399,32781],{"class":52},[46,42401,33073],{"class":169},[46,42403,33076],{"class":56},[46,42405,42406,42408,42410,42412],{"class":48,"line":18882},[46,42407,33081],{"class":56},[46,42409,79],{"class":52},[46,42411,32803],{"class":180},[46,42413,41014],{"class":56},[46,42415,42416,42418,42420,42422],{"class":48,"line":18887},[46,42417,33081],{"class":56},[46,42419,79],{"class":52},[46,42421,32803],{"class":180},[46,42423,41025],{"class":56},[46,42425,42426,42428,42430,42432],{"class":48,"line":18900},[46,42427,33081],{"class":56},[46,42429,79],{"class":52},[46,42431,32803],{"class":180},[46,42433,41036],{"class":56},[46,42435,42436,42438,42440,42442],{"class":48,"line":18905},[46,42437,33081],{"class":56},[46,42439,79],{"class":52},[46,42441,32803],{"class":180},[46,42443,41047],{"class":56},[46,42445,42446,42448,42450,42452],{"class":48,"line":18910},[46,42447,33081],{"class":56},[46,42449,79],{"class":52},[46,42451,32803],{"class":180},[46,42453,41058],{"class":56},[46,42455,42456,42458,42460,42462],{"class":48,"line":18915},[46,42457,33081],{"class":56},[46,42459,79],{"class":52},[46,42461,32803],{"class":180},[46,42463,41069],{"class":56},[46,42465,42466,42468],{"class":48,"line":18928},[46,42467,16754],{"class":52},[46,42469,33189],{"class":56},[46,42471,42472],{"class":48,"line":18933},[46,42473,616],{"emptyLinePlaceholder":615},[46,42475,42476],{"class":48,"line":34607},[46,42477,41084],{"class":2253},[46,42479,42480,42482,42484,42486,42488],{"class":48,"line":34613},[46,42481,911],{"class":52},[46,42483,914],{"class":180},[46,42485,4970],{"class":52},[46,42487,41095],{"class":173},[46,42489,760],{"class":56},[46,42491,42492,42494,42496,42498,42500,42502,42504,42506,42508],{"class":48,"line":34619},[46,42493,33216],{"class":56},[46,42495,79],{"class":52},[46,42497,32434],{"class":56},[46,42499,33223],{"class":173},[46,42501,3744],{"class":52},[46,42503,33228],{"class":56},[46,42505,3741],{"class":52},[46,42507,32458],{"class":173},[46,42509,459],{"class":56},[46,42511,42512,42514],{"class":48,"line":34625},[46,42513,1227],{"class":180},[46,42515,32467],{"class":56},[46,42517,42518,42520,42522],{"class":48,"line":34631},[46,42519,33268],{"class":56},[46,42521,79],{"class":52},[46,42523,41132],{"class":56},[46,42525,42526,42528,42530,42532,42534,42536,42538,42540],{"class":48,"line":34642},[46,42527,1227],{"class":180},[46,42529,33280],{"class":56},[46,42531,2405],{"class":180},[46,42533,2565],{"class":56},[46,42535,33478],{"class":180},[46,42537,2565],{"class":56},[46,42539,33478],{"class":180},[46,42541,33293],{"class":56},[23,42543,42544],{"start":200},[26,42545,42546],{},"测试代码",[36,42548,42550],{"className":38,"code":42549,"language":40,"meta":41,"style":41},"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",[43,42551,42552,42558,42568,42578,42582,42592,42603,42607,42611,42615,42623,42639,42649,42665,42675,42689,42693,42703,42713,42723,42729,42733,42737,42745,42749,42765,42773,42777,42781,42789,42797,42801,42805,42809,42813,42819,42823,42833,42841,42849,42853,42857,42861,42869,42873,42889,42893,42897,42901,42913,42917,42929,42933,42937,42949,42953,42963,42967,42971,42983,42987,42996,43000,43004,43012,43016,43024,43028,43032,43036,43040,43044,43060,43068,43072,43076,43124,43130,43134,43144,43152,43160,43164,43168,43172,43176,43184,43188,43204,43208,43216,43224],{"__ignoreMap":41},[46,42553,42554,42556],{"class":48,"line":49},[46,42555,53],{"class":52},[46,42557,32378],{"class":56},[46,42559,42560,42562,42564,42566],{"class":48,"line":60},[46,42561,53],{"class":52},[46,42563,33392],{"class":56},[46,42565,398],{"class":52},[46,42567,33397],{"class":56},[46,42569,42570,42572,42574,42576],{"class":48,"line":200},[46,42571,957],{"class":52},[46,42573,33375],{"class":56},[46,42575,53],{"class":52},[46,42577,33380],{"class":56},[46,42579,42580],{"class":48,"line":211},[46,42581,35895],{"class":2253},[46,42583,42584,42586,42588,42590],{"class":48,"line":222},[46,42585,957],{"class":52},[46,42587,33346],{"class":56},[46,42589,53],{"class":52},[46,42591,33351],{"class":56},[46,42593,42594,42596,42598,42600],{"class":48,"line":636},[46,42595,957],{"class":52},[46,42597,33890],{"class":56},[46,42599,53],{"class":52},[46,42601,42602],{"class":180}," VGG16\n",[46,42604,42605],{"class":48,"line":641},[46,42606,616],{"emptyLinePlaceholder":615},[46,42608,42609],{"class":48,"line":653},[46,42610,616],{"emptyLinePlaceholder":615},[46,42612,42613],{"class":48,"line":659},[46,42614,35924],{"class":2253},[46,42616,42617,42619,42621],{"class":48,"line":665},[46,42618,748],{"class":52},[46,42620,35931],{"class":169},[46,42622,33928],{"class":56},[46,42624,42625,42627,42629,42631,42633,42635,42637],{"class":48,"line":670},[46,42626,35938],{"class":56},[46,42628,79],{"class":52},[46,42630,33432],{"class":56},[46,42632,33435],{"class":439},[46,42634,79],{"class":52},[46,42636,33440],{"class":173},[46,42638,33443],{"class":56},[46,42640,42641,42643,42645,42647],{"class":48,"line":676},[46,42642,35955],{"class":439},[46,42644,79],{"class":52},[46,42646,35960],{"class":180},[46,42648,33443],{"class":56},[46,42650,42651,42653,42655,42657,42659,42661,42663],{"class":48,"line":682},[46,42652,35967],{"class":439},[46,42654,79],{"class":52},[46,42656,33470],{"class":56},[46,42658,33473],{"class":439},[46,42660,79],{"class":52},[46,42662,33478],{"class":180},[46,42664,33481],{"class":56},[46,42666,42667,42669,42671,42673],{"class":48,"line":688},[46,42668,35984],{"class":439},[46,42670,79],{"class":52},[46,42672,33453],{"class":180},[46,42674,459],{"class":56},[46,42676,42677,42679,42681,42683,42685,42687],{"class":48,"line":693},[46,42678,35995],{"class":56},[46,42680,79],{"class":52},[46,42682,33511],{"class":56},[46,42684,33514],{"class":439},[46,42686,79],{"class":52},[46,42688,36006],{"class":56},[46,42690,42691],{"class":48,"line":699},[46,42692,36011],{"class":2253},[46,42694,42695,42697,42699,42701],{"class":48,"line":705},[46,42696,36016],{"class":439},[46,42698,79],{"class":52},[46,42700,2405],{"class":180},[46,42702,33443],{"class":56},[46,42704,42705,42707,42709,42711],{"class":48,"line":711},[46,42706,36027],{"class":439},[46,42708,79],{"class":52},[46,42710,33453],{"class":180},[46,42712,33443],{"class":56},[46,42714,42715,42717,42719,42721],{"class":48,"line":717},[46,42716,36038],{"class":439},[46,42718,79],{"class":52},[46,42720,2379],{"class":180},[46,42722,459],{"class":56},[46,42724,42725,42727],{"class":48,"line":723},[46,42726,6108],{"class":52},[46,42728,36051],{"class":56},[46,42730,42731],{"class":48,"line":729},[46,42732,616],{"emptyLinePlaceholder":615},[46,42734,42735],{"class":48,"line":735},[46,42736,36060],{"class":2253},[46,42738,42739,42741,42743],{"class":48,"line":740},[46,42740,748],{"class":52},[46,42742,36067],{"class":169},[46,42744,36070],{"class":56},[46,42746,42747],{"class":48,"line":745},[46,42748,36075],{"class":2253},[46,42750,42751,42753,42755,42757,42759,42761,42763],{"class":48,"line":763},[46,42752,33216],{"class":56},[46,42754,79],{"class":52},[46,42756,33223],{"class":173},[46,42758,3744],{"class":52},[46,42760,33228],{"class":56},[46,42762,3741],{"class":52},[46,42764,36092],{"class":173},[46,42766,42767,42769,42771],{"class":48,"line":778},[46,42768,33268],{"class":56},[46,42770,79],{"class":52},[46,42772,34264],{"class":56},[46,42774,42775],{"class":48,"line":789},[46,42776,616],{"emptyLinePlaceholder":615},[46,42778,42779],{"class":48,"line":794},[46,42780,36109],{"class":2253},[46,42782,42783,42785,42787],{"class":48,"line":806},[46,42784,36114],{"class":56},[46,42786,79],{"class":52},[46,42788,34317],{"class":180},[46,42790,42791,42793,42795],{"class":48,"line":829},[46,42792,36123],{"class":56},[46,42794,79],{"class":52},[46,42796,5105],{"class":180},[46,42798,42799],{"class":48,"line":840},[46,42800,616],{"emptyLinePlaceholder":615},[46,42802,42803],{"class":48,"line":846},[46,42804,36136],{"class":2253},[46,42806,42807],{"class":48,"line":852},[46,42808,36141],{"class":2253},[46,42810,42811],{"class":48,"line":857},[46,42812,36146],{"class":2253},[46,42814,42815,42817],{"class":48,"line":875},[46,42816,797],{"class":52},[46,42818,34858],{"class":56},[46,42820,42821],{"class":48,"line":892},[46,42822,36157],{"class":2253},[46,42824,42825,42827,42829,42831],{"class":48,"line":898},[46,42826,5422],{"class":52},[46,42828,36164],{"class":56},[46,42830,1146],{"class":52},[46,42832,36169],{"class":56},[46,42834,42835,42837,42839],{"class":48,"line":903},[46,42836,36174],{"class":56},[46,42838,79],{"class":52},[46,42840,36179],{"class":56},[46,42842,42843,42845,42847],{"class":48,"line":908},[46,42844,36184],{"class":56},[46,42846,79],{"class":52},[46,42848,36189],{"class":56},[46,42850,42851],{"class":48,"line":925},[46,42852,36194],{"class":2253},[46,42854,42855],{"class":48,"line":1238},[46,42856,34849],{"class":56},[46,42858,42859],{"class":48,"line":1251},[46,42860,36203],{"class":2253},[46,42862,42863,42865,42867],{"class":48,"line":1256},[46,42864,34634],{"class":56},[46,42866,79],{"class":52},[46,42868,36212],{"class":56},[46,42870,42871],{"class":48,"line":1261},[46,42872,36217],{"class":2253},[46,42874,42875,42877,42879,42881,42883,42885,42887],{"class":48,"line":1274},[46,42876,34651],{"class":56},[46,42878,79],{"class":52},[46,42880,34656],{"class":56},[46,42882,34659],{"class":439},[46,42884,79],{"class":52},[46,42886,2405],{"class":180},[46,42888,459],{"class":56},[46,42890,42891],{"class":48,"line":10061},[46,42892,36238],{"class":2253},[46,42894,42895],{"class":48,"line":11720},[46,42896,36243],{"class":2253},[46,42898,42899],{"class":48,"line":11745},[46,42900,36248],{"class":2253},[46,42902,42903,42905,42907,42909,42911],{"class":48,"line":11768},[46,42904,36253],{"class":56},[46,42906,11481],{"class":52},[46,42908,34761],{"class":56},[46,42910,4970],{"class":52},[46,42912,36262],{"class":56},[46,42914,42915],{"class":48,"line":11792},[46,42916,36267],{"class":2253},[46,42918,42919,42921,42923,42925,42927],{"class":48,"line":11797},[46,42920,36272],{"class":56},[46,42922,11481],{"class":52},[46,42924,36277],{"class":56},[46,42926,2379],{"class":180},[46,42928,459],{"class":56},[46,42930,42931],{"class":48,"line":11802},[46,42932,616],{"emptyLinePlaceholder":615},[46,42934,42935],{"class":48,"line":11807},[46,42936,36290],{"class":2253},[46,42938,42939,42941,42943,42945,42947],{"class":48,"line":11816},[46,42940,36295],{"class":56},[46,42942,79],{"class":52},[46,42944,36300],{"class":56},[46,42946,2770],{"class":52},[46,42948,36305],{"class":56},[46,42950,42951],{"class":48,"line":11821},[46,42952,36310],{"class":2253},[46,42954,42955,42957,42959,42961],{"class":48,"line":11827},[46,42956,34425],{"class":180},[46,42958,1152],{"class":56},[46,42960,36319],{"class":173},[46,42962,36322],{"class":56},[46,42964,42965],{"class":48,"line":11848},[46,42966,616],{"emptyLinePlaceholder":615},[46,42968,42969],{"class":48,"line":11854},[46,42970,36331],{"class":2253},[46,42972,42973,42975,42977,42979,42981],{"class":48,"line":11868},[46,42974,911],{"class":52},[46,42976,914],{"class":180},[46,42978,4970],{"class":52},[46,42980,33204],{"class":173},[46,42982,760],{"class":56},[46,42984,42985],{"class":48,"line":11874},[46,42986,36348],{"class":2253},[46,42988,42989,42991,42993],{"class":48,"line":11901},[46,42990,33268],{"class":56},[46,42992,79],{"class":52},[46,42994,42995],{"class":56},"VGG16()\n",[46,42997,42998],{"class":48,"line":11910},[46,42999,36361],{"class":2253},[46,43001,43002],{"class":48,"line":11916},[46,43003,36366],{"class":2253},[46,43005,43006,43008,43010],{"class":48,"line":11924},[46,43007,36371],{"class":56},[46,43009,36374],{"class":173},[46,43011,32479],{"class":56},[46,43013,43014],{"class":48,"line":11929},[46,43015,36381],{"class":2253},[46,43017,43018,43020,43022],{"class":48,"line":18605},[46,43019,35995],{"class":56},[46,43021,79],{"class":52},[46,43023,36390],{"class":56},[46,43025,43026],{"class":48,"line":18611},[46,43027,36395],{"class":2253},[46,43029,43030],{"class":48,"line":18634},[46,43031,36400],{"class":56},[46,43033,43034],{"class":48,"line":18640},[46,43035,616],{"emptyLinePlaceholder":615},[46,43037,43038],{"class":48,"line":18663},[46,43039,36409],{"class":2253},[46,43041,43042],{"class":48,"line":18677},[46,43043,36414],{"class":2253},[46,43045,43046,43048,43050,43052,43054,43056,43058],{"class":48,"line":18697},[46,43047,33216],{"class":56},[46,43049,79],{"class":52},[46,43051,33223],{"class":173},[46,43053,3744],{"class":52},[46,43055,33228],{"class":56},[46,43057,3741],{"class":52},[46,43059,36092],{"class":173},[46,43061,43062,43064,43066],{"class":48,"line":18703},[46,43063,33268],{"class":56},[46,43065,79],{"class":52},[46,43067,34264],{"class":56},[46,43069,43070],{"class":48,"line":18714},[46,43071,36443],{"class":2253},[46,43073,43074],{"class":48,"line":18737},[46,43075,36448],{"class":2253},[46,43077,43078,43080,43082,43084,43086,43088,43090,43092,43094,43096,43098,43100,43102,43104,43106,43108,43110,43112,43114,43116,43118,43120,43122],{"class":48,"line":18759},[46,43079,36453],{"class":56},[46,43081,79],{"class":52},[46,43083,3076],{"class":56},[46,43085,36460],{"class":173},[46,43087,2565],{"class":56},[46,43089,36465],{"class":173},[46,43091,2565],{"class":56},[46,43093,36470],{"class":173},[46,43095,2565],{"class":56},[46,43097,36475],{"class":173},[46,43099,2565],{"class":56},[46,43101,36480],{"class":173},[46,43103,2565],{"class":56},[46,43105,36485],{"class":173},[46,43107,2565],{"class":56},[46,43109,36490],{"class":173},[46,43111,2565],{"class":56},[46,43113,36495],{"class":173},[46,43115,2565],{"class":56},[46,43117,36500],{"class":173},[46,43119,2565],{"class":56},[46,43121,36505],{"class":173},[46,43123,35220],{"class":56},[46,43125,43126,43128],{"class":48,"line":18764},[46,43127,797],{"class":52},[46,43129,34858],{"class":56},[46,43131,43132],{"class":48,"line":18770},[46,43133,36518],{"class":2253},[46,43135,43136,43138,43140,43142],{"class":48,"line":18784},[46,43137,5422],{"class":52},[46,43139,36525],{"class":56},[46,43141,1146],{"class":52},[46,43143,36169],{"class":56},[46,43145,43146,43148,43150],{"class":48,"line":18797},[46,43147,34584],{"class":56},[46,43149,79],{"class":52},[46,43151,34589],{"class":56},[46,43153,43154,43156,43158],{"class":48,"line":18802},[46,43155,34599],{"class":56},[46,43157,79],{"class":52},[46,43159,34604],{"class":56},[46,43161,43162],{"class":48,"line":18816},[46,43163,616],{"emptyLinePlaceholder":615},[46,43165,43166],{"class":48,"line":18821},[46,43167,36554],{"class":2253},[46,43169,43170],{"class":48,"line":18827},[46,43171,34849],{"class":56},[46,43173,43174],{"class":48,"line":18832},[46,43175,36563],{"class":2253},[46,43177,43178,43180,43182],{"class":48,"line":18846},[46,43179,34634],{"class":56},[46,43181,79],{"class":52},[46,43183,34639],{"class":56},[46,43185,43186],{"class":48,"line":18851},[46,43187,36576],{"class":2253},[46,43189,43190,43192,43194,43196,43198,43200,43202],{"class":48,"line":18856},[46,43191,34651],{"class":56},[46,43193,79],{"class":52},[46,43195,34656],{"class":56},[46,43197,34659],{"class":439},[46,43199,79],{"class":52},[46,43201,2405],{"class":180},[46,43203,459],{"class":56},[46,43205,43206],{"class":48,"line":18870},[46,43207,36597],{"class":2253},[46,43209,43210,43212,43214],{"class":48,"line":18882},[46,43211,36602],{"class":56},[46,43213,79],{"class":52},[46,43215,36607],{"class":56},[46,43217,43218,43220,43222],{"class":48,"line":18887},[46,43219,36612],{"class":56},[46,43221,79],{"class":52},[46,43223,36617],{"class":56},[46,43225,43226,43228,43230,43232,43234,43236,43238,43240],{"class":48,"line":18900},[46,43227,36622],{"class":180},[46,43229,1152],{"class":56},[46,43231,36627],{"class":173},[46,43233,36630],{"class":56},[46,43235,36633],{"class":173},[46,43237,2565],{"class":56},[46,43239,36638],{"class":173},[46,43241,36641],{"class":56},[479,43243,43245],{"id":43244},"_23googlenet","2.3.GoogLeNet",[23999,43247,43249],{"id":43248},"_231原理","2.3.1.原理",[23,43251,43252],{},[26,43253,43254],{},"网络结构",[19,43256,43257],{},[3514,43258],{"alt":41,"src":43259},"\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,43261,43262],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[19,43264,43265],{},[3514,43266],{"alt":41,"src":43267},"\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,43269,43270],{},[3514,43271],{"alt":41,"src":43272},"\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,43274,43275],{},[3514,43276],{"alt":41,"src":43277},"\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",[23,43279,43280],{"start":60},[26,43281,43282],{},"1x1卷积的优点",[19,43284,43285],{},[3514,43286],{"alt":41,"src":43287},"\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",[23,43289,43290],{"start":200},[26,43291,43292],{},"全局平均池化层优点",[19,43294,43295],{},[3514,43296],{"alt":41,"src":43297},"\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,43299,43300],{},[3514,43301],{"alt":41,"src":43302},"\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",[23,43304,43305],{"start":211},[26,43306,43307],{},"参数详细描述",[19,43309,43310],{},[3514,43311],{"alt":41,"src":43312},"\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,43314,43315],{},[3514,43316],{"alt":41,"src":43317},"\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,43319,43320],{},[3514,43321],{"alt":41,"src":43322},"\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,43324,43325],{},[3514,43326],{"alt":41,"src":43327},"\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,43329,43330],{},[3514,43331],{"alt":41,"src":43332},"\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,43334,43335],{},[3514,43336],{"alt":41,"src":43337},"\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,43339,43340],{},[3514,43341],{"alt":41,"src":43342},"\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,43344,43345],{},[3514,43346],{"alt":41,"src":43347},"\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,43349,43350],{},[3514,43351],{"alt":41,"src":43352},"\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,43354,43355],{},[3514,43356],{"alt":41,"src":43357},"\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,43359,43360],{},[3514,43361],{"alt":41,"src":43362},"\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,43364,43365],{},[3514,43366],{"alt":41,"src":43367},"\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,43369,43370],{},[3514,43371],{"alt":41,"src":43372},"\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,43374,43375],{},[3514,43376],{"alt":41,"src":43377},"\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,43379,43380],{},[3514,43381],{"alt":41,"src":43382},"\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,43384,43385],{},[3514,43386],{"alt":41,"src":43387},"\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,43389,43390],{},[3514,43391],{"alt":41,"src":43392},"\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,43394,43395],{},[3514,43396],{"alt":41,"src":43397},"\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,43399,43400],{},[3514,43401],{"alt":41,"src":43402},"\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,43404,43405],{},[3514,43406],{"alt":41,"src":43407},"\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,43409,43410],{},[3514,43411],{"alt":41,"src":43412},"\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",[23999,43414,43416],{"id":43415},"_232代码实现","2.3.2.代码实现",[23,43418,43419],{},[26,43420,32693],{},[19,43422,43423],{},"根据原理一步一步搭建即可",[36,43425,43427],{"className":38,"code":43426,"language":40,"meta":41,"style":41},"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",[43,43428,43429,43435,43445,43455,43459,43476,43485,43500,43510,43515,43548,43553,43590,43637,43642,43678,43725,43730,43735,43770,43802,43806,43814,43830,43854,43879,43900,43905,43920,43924,43928,43933,43950,43955,43964,43979,43990,44034,44038,44066,44070,44081,44109,44113,44150,44154,44182,44186,44197,44233,44265,44293,44297,44308,44341,44373,44405,44438,44472,44500,44504,44515,44548,44580,44594,44598,44611,44615,44620,44632,44640,44662,44667,44672,44677,44682,44687,44692,44706,44714,44723,44736,44751,44760,44764,44772,44783,44794,44805,44816,44827,44833,44837,44842,44854,44874,44883],{"__ignoreMap":41},[46,43430,43431,43433],{"class":48,"line":49},[46,43432,53],{"class":52},[46,43434,32378],{"class":56},[46,43436,43437,43439,43441,43443],{"class":48,"line":60},[46,43438,957],{"class":52},[46,43440,32721],{"class":56},[46,43442,53],{"class":52},[46,43444,32726],{"class":56},[46,43446,43447,43449,43451,43453],{"class":48,"line":200},[46,43448,957],{"class":52},[46,43450,32738],{"class":56},[46,43452,53],{"class":52},[46,43454,32743],{"class":56},[46,43456,43457],{"class":48,"line":211},[46,43458,616],{"emptyLinePlaceholder":615},[46,43460,43461,43463,43466,43468,43470,43472,43474],{"class":48,"line":222},[46,43462,16696],{"class":52},[46,43464,43465],{"class":169}," Inception",[46,43467,1152],{"class":56},[46,43469,32759],{"class":169},[46,43471,2744],{"class":56},[46,43473,32764],{"class":169},[46,43475,1158],{"class":56},[46,43477,43478,43480,43482],{"class":48,"line":636},[46,43479,32781],{"class":52},[46,43481,32784],{"class":180},[46,43483,43484],{"class":56},"(self,in_channels,c1,c2,c3,c4):\n",[46,43486,43487,43489,43492,43494,43496,43498],{"class":48,"line":641},[46,43488,32797],{"class":180},[46,43490,43491],{"class":56},"(Inception,",[46,43493,32803],{"class":180},[46,43495,32806],{"class":56},[46,43497,32809],{"class":180},[46,43499,4006],{"class":56},[46,43501,43502,43504,43506,43508],{"class":48,"line":653},[46,43503,32825],{"class":180},[46,43505,36743],{"class":56},[46,43507,79],{"class":52},[46,43509,36748],{"class":56},[46,43511,43512],{"class":48,"line":659},[46,43513,43514],{"class":2253},"        # 路线1：定义1*1卷积\n",[46,43516,43517,43519,43522,43524,43526,43528,43530,43533,43535,43537,43540,43542,43544,43546],{"class":48,"line":665},[46,43518,32825],{"class":180},[46,43520,43521],{"class":56},".p1_1",[46,43523,79],{"class":52},[46,43525,32833],{"class":56},[46,43527,32836],{"class":439},[46,43529,79],{"class":52},[46,43531,43532],{"class":56},"in_channels,",[46,43534,32845],{"class":439},[46,43536,79],{"class":52},[46,43538,43539],{"class":56},"c1,",[46,43541,32854],{"class":439},[46,43543,79],{"class":52},[46,43545,2405],{"class":180},[46,43547,459],{"class":56},[46,43549,43550],{"class":48,"line":670},[46,43551,43552],{"class":2253},"        # 路线2：定义1*1卷积和3*3\n",[46,43554,43555,43557,43560,43562,43564,43566,43568,43570,43572,43574,43577,43579,43582,43584,43586,43588],{"class":48,"line":676},[46,43556,32825],{"class":180},[46,43558,43559],{"class":56},".p2_1",[46,43561,79],{"class":52},[46,43563,32833],{"class":56},[46,43565,32836],{"class":439},[46,43567,79],{"class":52},[46,43569,43532],{"class":56},[46,43571,32845],{"class":439},[46,43573,79],{"class":52},[46,43575,43576],{"class":56},"c2[",[46,43578,2379],{"class":180},[46,43580,43581],{"class":56},"],",[46,43583,32854],{"class":439},[46,43585,79],{"class":52},[46,43587,2405],{"class":180},[46,43589,459],{"class":56},[46,43591,43592,43594,43597,43599,43601,43603,43605,43607,43609,43611,43613,43615,43617,43619,43621,43623,43625,43627,43629,43631,43633,43635],{"class":48,"line":682},[46,43593,32825],{"class":180},[46,43595,43596],{"class":56},".p2_2",[46,43598,79],{"class":52},[46,43600,32833],{"class":56},[46,43602,32836],{"class":439},[46,43604,79],{"class":52},[46,43606,43576],{"class":56},[46,43608,2379],{"class":180},[46,43610,43581],{"class":56},[46,43612,32845],{"class":439},[46,43614,79],{"class":52},[46,43616,43576],{"class":56},[46,43618,2405],{"class":180},[46,43620,43581],{"class":56},[46,43622,32854],{"class":439},[46,43624,79],{"class":52},[46,43626,2266],{"class":180},[46,43628,2565],{"class":56},[46,43630,32863],{"class":439},[46,43632,79],{"class":52},[46,43634,2405],{"class":180},[46,43636,459],{"class":56},[46,43638,43639],{"class":48,"line":688},[46,43640,43641],{"class":2253},"        # 路线3：定义1*1卷积和5*5\n",[46,43643,43644,43646,43649,43651,43653,43655,43657,43659,43661,43663,43666,43668,43670,43672,43674,43676],{"class":48,"line":693},[46,43645,32825],{"class":180},[46,43647,43648],{"class":56},".p3_1",[46,43650,79],{"class":52},[46,43652,32833],{"class":56},[46,43654,32836],{"class":439},[46,43656,79],{"class":52},[46,43658,43532],{"class":56},[46,43660,32845],{"class":439},[46,43662,79],{"class":52},[46,43664,43665],{"class":56},"c3[",[46,43667,2379],{"class":180},[46,43669,43581],{"class":56},[46,43671,32854],{"class":439},[46,43673,79],{"class":52},[46,43675,2405],{"class":180},[46,43677,459],{"class":56},[46,43679,43680,43682,43685,43687,43689,43691,43693,43695,43697,43699,43701,43703,43705,43707,43709,43711,43713,43715,43717,43719,43721,43723],{"class":48,"line":699},[46,43681,32825],{"class":180},[46,43683,43684],{"class":56},".p3_2",[46,43686,79],{"class":52},[46,43688,32833],{"class":56},[46,43690,32836],{"class":439},[46,43692,79],{"class":52},[46,43694,43665],{"class":56},[46,43696,2379],{"class":180},[46,43698,43581],{"class":56},[46,43700,32845],{"class":439},[46,43702,79],{"class":52},[46,43704,43665],{"class":56},[46,43706,2405],{"class":180},[46,43708,43581],{"class":56},[46,43710,32854],{"class":439},[46,43712,79],{"class":52},[46,43714,2506],{"class":180},[46,43716,2565],{"class":56},[46,43718,32863],{"class":439},[46,43720,79],{"class":52},[46,43722,2272],{"class":180},[46,43724,459],{"class":56},[46,43726,43727],{"class":48,"line":705},[46,43728,43729],{"class":2253},"        # 路线4：定义3*3最大池化和1*1卷积\n",[46,43731,43732],{"class":48,"line":711},[46,43733,43734],{"class":2253},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[46,43736,43737,43739,43742,43744,43746,43748,43750,43752,43754,43756,43758,43760,43762,43764,43766,43768],{"class":48,"line":717},[46,43738,32825],{"class":180},[46,43740,43741],{"class":56},".p4_1",[46,43743,79],{"class":52},[46,43745,36801],{"class":56},[46,43747,32854],{"class":439},[46,43749,79],{"class":52},[46,43751,2266],{"class":180},[46,43753,2565],{"class":56},[46,43755,32909],{"class":439},[46,43757,79],{"class":52},[46,43759,2405],{"class":180},[46,43761,2565],{"class":56},[46,43763,32863],{"class":439},[46,43765,79],{"class":52},[46,43767,2405],{"class":180},[46,43769,459],{"class":56},[46,43771,43772,43774,43777,43779,43781,43783,43785,43787,43789,43791,43794,43796,43798,43800],{"class":48,"line":723},[46,43773,32825],{"class":180},[46,43775,43776],{"class":56},".p4_2",[46,43778,79],{"class":52},[46,43780,32833],{"class":56},[46,43782,32836],{"class":439},[46,43784,79],{"class":52},[46,43786,43532],{"class":56},[46,43788,32845],{"class":439},[46,43790,79],{"class":52},[46,43792,43793],{"class":56},"c4,",[46,43795,32854],{"class":439},[46,43797,79],{"class":52},[46,43799,2405],{"class":180},[46,43801,459],{"class":56},[46,43803,43804],{"class":48,"line":729},[46,43805,616],{"emptyLinePlaceholder":615},[46,43807,43808,43810,43812],{"class":48,"line":735},[46,43809,32781],{"class":52},[46,43811,33073],{"class":169},[46,43813,33076],{"class":56},[46,43815,43816,43819,43821,43823,43825,43827],{"class":48,"line":740},[46,43817,43818],{"class":56},"        p1",[46,43820,79],{"class":52},[46,43822,32803],{"class":180},[46,43824,37156],{"class":56},[46,43826,32803],{"class":180},[46,43828,43829],{"class":56},".p1_1(x))\n",[46,43831,43832,43834,43836,43838,43840,43842,43845,43847,43849,43851],{"class":48,"line":745},[46,43833,9098],{"class":56},[46,43835,79],{"class":52},[46,43837,32803],{"class":180},[46,43839,37156],{"class":56},[46,43841,32803],{"class":180},[46,43843,43844],{"class":56},".p2_2(",[46,43846,32803],{"class":180},[46,43848,37156],{"class":56},[46,43850,32803],{"class":180},[46,43852,43853],{"class":56},".p2_1(x))))\n",[46,43855,43856,43859,43861,43863,43865,43867,43870,43872,43874,43876],{"class":48,"line":763},[46,43857,43858],{"class":56},"        p3",[46,43860,79],{"class":52},[46,43862,32803],{"class":180},[46,43864,37156],{"class":56},[46,43866,32803],{"class":180},[46,43868,43869],{"class":56},".p3_2(",[46,43871,32803],{"class":180},[46,43873,37156],{"class":56},[46,43875,32803],{"class":180},[46,43877,43878],{"class":56},".p3_1(x))))\n",[46,43880,43881,43884,43886,43888,43890,43892,43895,43897],{"class":48,"line":778},[46,43882,43883],{"class":56},"        p4",[46,43885,79],{"class":52},[46,43887,32803],{"class":180},[46,43889,37156],{"class":56},[46,43891,32803],{"class":180},[46,43893,43894],{"class":56},".p4_2(",[46,43896,32803],{"class":180},[46,43898,43899],{"class":56},".p4_1(x)))\n",[46,43901,43902],{"class":48,"line":789},[46,43903,43904],{"class":2253},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[46,43906,43907,43909,43912,43914,43916,43918],{"class":48,"line":794},[46,43908,16754],{"class":52},[46,43910,43911],{"class":56}," torch.cat((p1,p2,p3,p4),",[46,43913,34659],{"class":439},[46,43915,79],{"class":52},[46,43917,2405],{"class":180},[46,43919,459],{"class":56},[46,43921,43922],{"class":48,"line":806},[46,43923,616],{"emptyLinePlaceholder":615},[46,43925,43926],{"class":48,"line":829},[46,43927,616],{"emptyLinePlaceholder":615},[46,43929,43930],{"class":48,"line":840},[46,43931,43932],{"class":2253},"# 搭建GoogLeNet网络\n",[46,43934,43935,43937,43940,43942,43944,43946,43948],{"class":48,"line":846},[46,43936,16696],{"class":52},[46,43938,43939],{"class":169}," GoogLeNet",[46,43941,1152],{"class":56},[46,43943,32759],{"class":169},[46,43945,2744],{"class":56},[46,43947,32764],{"class":169},[46,43949,1158],{"class":56},[46,43951,43952],{"class":48,"line":852},[46,43953,43954],{"class":2253},"    # 必须把Inception导入到里边\n",[46,43956,43957,43959,43961],{"class":48,"line":857},[46,43958,32781],{"class":52},[46,43960,32784],{"class":180},[46,43962,43963],{"class":56},"(self,Inception):\n",[46,43965,43966,43968,43971,43973,43975,43977],{"class":48,"line":875},[46,43967,32797],{"class":180},[46,43969,43970],{"class":56},"(GoogLeNet,",[46,43972,32803],{"class":180},[46,43974,32806],{"class":56},[46,43976,32809],{"class":180},[46,43978,4006],{"class":56},[46,43980,43981,43983,43986,43988],{"class":48,"line":892},[46,43982,32825],{"class":180},[46,43984,43985],{"class":56},".b1",[46,43987,79],{"class":52},[46,43989,39981],{"class":56},[46,43991,43992,43994,43996,43998,44000,44002,44004,44006,44008,44010,44012,44014,44016,44018,44020,44022,44024,44026,44028,44030,44032],{"class":48,"line":898},[46,43993,39986],{"class":56},[46,43995,32836],{"class":439},[46,43997,79],{"class":52},[46,43999,2405],{"class":180},[46,44001,2565],{"class":56},[46,44003,32845],{"class":439},[46,44005,79],{"class":52},[46,44007,2391],{"class":180},[46,44009,2565],{"class":56},[46,44011,32854],{"class":439},[46,44013,79],{"class":52},[46,44015,2556],{"class":180},[46,44017,2565],{"class":56},[46,44019,32909],{"class":439},[46,44021,79],{"class":52},[46,44023,2272],{"class":180},[46,44025,2565],{"class":56},[46,44027,32863],{"class":439},[46,44029,79],{"class":52},[46,44031,2266],{"class":180},[46,44033,40019],{"class":56},[46,44035,44036],{"class":48,"line":903},[46,44037,40024],{"class":56},[46,44039,44040,44042,44044,44046,44048,44050,44052,44054,44056,44058,44060,44062,44064],{"class":48,"line":908},[46,44041,40069],{"class":56},[46,44043,32854],{"class":439},[46,44045,79],{"class":52},[46,44047,2266],{"class":180},[46,44049,2565],{"class":56},[46,44051,32909],{"class":439},[46,44053,79],{"class":52},[46,44055,2272],{"class":180},[46,44057,2565],{"class":56},[46,44059,32863],{"class":439},[46,44061,79],{"class":52},[46,44063,2405],{"class":180},[46,44065,459],{"class":56},[46,44067,44068],{"class":48,"line":925},[46,44069,40098],{"class":56},[46,44071,44072,44074,44077,44079],{"class":48,"line":1238},[46,44073,32825],{"class":180},[46,44075,44076],{"class":56},".b2",[46,44078,79],{"class":52},[46,44080,39981],{"class":56},[46,44082,44083,44085,44087,44089,44091,44093,44095,44097,44099,44101,44103,44105,44107],{"class":48,"line":1251},[46,44084,39986],{"class":56},[46,44086,32836],{"class":439},[46,44088,79],{"class":52},[46,44090,2391],{"class":180},[46,44092,2565],{"class":56},[46,44094,32845],{"class":439},[46,44096,79],{"class":52},[46,44098,2391],{"class":180},[46,44100,2565],{"class":56},[46,44102,32854],{"class":439},[46,44104,79],{"class":52},[46,44106,2405],{"class":180},[46,44108,40019],{"class":56},[46,44110,44111],{"class":48,"line":1256},[46,44112,40024],{"class":56},[46,44114,44115,44117,44119,44121,44123,44125,44127,44129,44132,44134,44136,44138,44140,44142,44144,44146,44148],{"class":48,"line":1261},[46,44116,39986],{"class":56},[46,44118,32836],{"class":439},[46,44120,79],{"class":52},[46,44122,2391],{"class":180},[46,44124,2565],{"class":56},[46,44126,32845],{"class":439},[46,44128,79],{"class":52},[46,44130,44131],{"class":180},"192",[46,44133,2565],{"class":56},[46,44135,32854],{"class":439},[46,44137,79],{"class":52},[46,44139,2266],{"class":180},[46,44141,2565],{"class":56},[46,44143,32863],{"class":439},[46,44145,79],{"class":52},[46,44147,2405],{"class":180},[46,44149,40019],{"class":56},[46,44151,44152],{"class":48,"line":1274},[46,44153,40024],{"class":56},[46,44155,44156,44158,44160,44162,44164,44166,44168,44170,44172,44174,44176,44178,44180],{"class":48,"line":10061},[46,44157,40069],{"class":56},[46,44159,32854],{"class":439},[46,44161,79],{"class":52},[46,44163,2266],{"class":180},[46,44165,2565],{"class":56},[46,44167,32909],{"class":439},[46,44169,79],{"class":52},[46,44171,2272],{"class":180},[46,44173,2565],{"class":56},[46,44175,32863],{"class":439},[46,44177,79],{"class":52},[46,44179,2405],{"class":180},[46,44181,459],{"class":56},[46,44183,44184],{"class":48,"line":11720},[46,44185,40098],{"class":56},[46,44187,44188,44190,44193,44195],{"class":48,"line":11745},[46,44189,32825],{"class":180},[46,44191,44192],{"class":56},".b3",[46,44194,79],{"class":52},[46,44196,39981],{"class":56},[46,44198,44199,44202,44204,44206,44208,44211,44213,44215,44217,44220,44222,44224,44226,44229,44231],{"class":48,"line":11768},[46,44200,44201],{"class":56},"            Inception(",[46,44203,44131],{"class":180},[46,44205,2565],{"class":56},[46,44207,2391],{"class":180},[46,44209,44210],{"class":56},",(",[46,44212,2397],{"class":180},[46,44214,2565],{"class":56},[46,44216,34045],{"class":180},[46,44218,44219],{"class":56},"),(",[46,44221,2787],{"class":180},[46,44223,2565],{"class":56},[46,44225,2385],{"class":180},[46,44227,44228],{"class":56},"),",[46,44230,2385],{"class":180},[46,44232,40019],{"class":56},[46,44234,44235,44237,44239,44241,44243,44245,44247,44249,44251,44253,44255,44257,44259,44261,44263],{"class":48,"line":11792},[46,44236,44201],{"class":56},[46,44238,36842],{"class":180},[46,44240,2565],{"class":56},[46,44242,34045],{"class":180},[46,44244,44210],{"class":56},[46,44246,34045],{"class":180},[46,44248,2565],{"class":56},[46,44250,44131],{"class":180},[46,44252,44219],{"class":56},[46,44254,2385],{"class":180},[46,44256,2565],{"class":56},[46,44258,2397],{"class":180},[46,44260,44228],{"class":56},[46,44262,2391],{"class":180},[46,44264,40019],{"class":56},[46,44266,44267,44269,44271,44273,44275,44277,44279,44281,44283,44285,44287,44289,44291],{"class":48,"line":11797},[46,44268,40069],{"class":56},[46,44270,32854],{"class":439},[46,44272,79],{"class":52},[46,44274,2266],{"class":180},[46,44276,2565],{"class":56},[46,44278,32909],{"class":439},[46,44280,79],{"class":52},[46,44282,2272],{"class":180},[46,44284,2565],{"class":56},[46,44286,32863],{"class":439},[46,44288,79],{"class":52},[46,44290,2405],{"class":180},[46,44292,459],{"class":56},[46,44294,44295],{"class":48,"line":11802},[46,44296,40098],{"class":56},[46,44298,44299,44301,44304,44306],{"class":48,"line":11807},[46,44300,32825],{"class":180},[46,44302,44303],{"class":56},".b4",[46,44305,79],{"class":52},[46,44307,39981],{"class":56},[46,44309,44310,44312,44314,44316,44318,44320,44322,44324,44327,44329,44331,44333,44335,44337,44339],{"class":48,"line":11816},[46,44311,44201],{"class":56},[46,44313,445],{"class":180},[46,44315,2565],{"class":56},[46,44317,44131],{"class":180},[46,44319,44210],{"class":56},[46,44321,2397],{"class":180},[46,44323,2565],{"class":56},[46,44325,44326],{"class":180},"208",[46,44328,44219],{"class":56},[46,44330,2787],{"class":180},[46,44332,2565],{"class":56},[46,44334,2793],{"class":180},[46,44336,44228],{"class":56},[46,44338,2391],{"class":180},[46,44340,40019],{"class":56},[46,44342,44343,44345,44347,44349,44351,44353,44355,44357,44359,44361,44363,44365,44367,44369,44371],{"class":48,"line":11821},[46,44344,44201],{"class":56},[46,44346,40429],{"class":180},[46,44348,2565],{"class":56},[46,44350,23049],{"class":180},[46,44352,44210],{"class":56},[46,44354,2804],{"class":180},[46,44356,2565],{"class":56},[46,44358,33478],{"class":180},[46,44360,44219],{"class":56},[46,44362,2986],{"class":180},[46,44364,2565],{"class":56},[46,44366,2391],{"class":180},[46,44368,44228],{"class":56},[46,44370,2391],{"class":180},[46,44372,40019],{"class":56},[46,44374,44375,44377,44379,44381,44383,44385,44387,44389,44391,44393,44395,44397,44399,44401,44403],{"class":48,"line":11827},[46,44376,44201],{"class":56},[46,44378,40429],{"class":180},[46,44380,2565],{"class":56},[46,44382,34045],{"class":180},[46,44384,44210],{"class":56},[46,44386,34045],{"class":180},[46,44388,2565],{"class":56},[46,44390,36842],{"class":180},[46,44392,44219],{"class":56},[46,44394,2986],{"class":180},[46,44396,2565],{"class":56},[46,44398,2391],{"class":180},[46,44400,44228],{"class":56},[46,44402,2391],{"class":180},[46,44404,40019],{"class":56},[46,44406,44407,44409,44411,44413,44415,44417,44419,44421,44424,44426,44428,44430,44432,44434,44436],{"class":48,"line":11848},[46,44408,44201],{"class":56},[46,44410,40429],{"class":180},[46,44412,2565],{"class":56},[46,44414,2804],{"class":180},[46,44416,44210],{"class":56},[46,44418,34045],{"class":180},[46,44420,2565],{"class":56},[46,44422,44423],{"class":180},"288",[46,44425,44219],{"class":56},[46,44427,2385],{"class":180},[46,44429,2565],{"class":56},[46,44431,2391],{"class":180},[46,44433,44228],{"class":56},[46,44435,2391],{"class":180},[46,44437,40019],{"class":56},[46,44439,44440,44442,44445,44447,44449,44451,44453,44455,44458,44460,44462,44464,44466,44468,44470],{"class":48,"line":11854},[46,44441,44201],{"class":56},[46,44443,44444],{"class":180},"528",[46,44446,2565],{"class":56},[46,44448,36842],{"class":180},[46,44450,44210],{"class":56},[46,44452,23049],{"class":180},[46,44454,2565],{"class":56},[46,44456,44457],{"class":180},"320",[46,44459,44219],{"class":56},[46,44461,2385],{"class":180},[46,44463,2565],{"class":56},[46,44465,34045],{"class":180},[46,44467,44228],{"class":56},[46,44469,34045],{"class":180},[46,44471,40019],{"class":56},[46,44473,44474,44476,44478,44480,44482,44484,44486,44488,44490,44492,44494,44496,44498],{"class":48,"line":11868},[46,44475,40069],{"class":56},[46,44477,32854],{"class":439},[46,44479,79],{"class":52},[46,44481,2266],{"class":180},[46,44483,2565],{"class":56},[46,44485,32909],{"class":439},[46,44487,79],{"class":52},[46,44489,2272],{"class":180},[46,44491,2565],{"class":56},[46,44493,32863],{"class":439},[46,44495,79],{"class":52},[46,44497,2405],{"class":180},[46,44499,459],{"class":56},[46,44501,44502],{"class":48,"line":11874},[46,44503,40098],{"class":56},[46,44505,44506,44508,44511,44513],{"class":48,"line":11901},[46,44507,32825],{"class":180},[46,44509,44510],{"class":56},".b5",[46,44512,79],{"class":52},[46,44514,39981],{"class":56},[46,44516,44517,44519,44522,44524,44526,44528,44530,44532,44534,44536,44538,44540,44542,44544,44546],{"class":48,"line":11910},[46,44518,44201],{"class":56},[46,44520,44521],{"class":180},"832",[46,44523,2565],{"class":56},[46,44525,36842],{"class":180},[46,44527,44210],{"class":56},[46,44529,23049],{"class":180},[46,44531,2565],{"class":56},[46,44533,44457],{"class":180},[46,44535,44219],{"class":56},[46,44537,2385],{"class":180},[46,44539,2565],{"class":56},[46,44541,34045],{"class":180},[46,44543,44228],{"class":56},[46,44545,34045],{"class":180},[46,44547,40019],{"class":56},[46,44549,44550,44552,44554,44556,44558,44560,44562,44564,44566,44568,44570,44572,44574,44576,44578],{"class":48,"line":11916},[46,44551,44201],{"class":56},[46,44553,44521],{"class":180},[46,44555,2565],{"class":56},[46,44557,36912],{"class":180},[46,44559,44210],{"class":56},[46,44561,44131],{"class":180},[46,44563,2565],{"class":56},[46,44565,36912],{"class":180},[46,44567,44219],{"class":56},[46,44569,2793],{"class":180},[46,44571,2565],{"class":56},[46,44573,34045],{"class":180},[46,44575,44228],{"class":56},[46,44577,34045],{"class":180},[46,44579,40019],{"class":56},[46,44581,44582,44585,44587,44589,44591],{"class":48,"line":11924},[46,44583,44584],{"class":56},"            nn.AdaptiveAvgPool2d((",[46,44586,2405],{"class":180},[46,44588,2565],{"class":56},[46,44590,2405],{"class":180},[46,44592,44593],{"class":56},")),\n",[46,44595,44596],{"class":48,"line":11929},[46,44597,40762],{"class":56},[46,44599,44600,44602,44605,44607,44609],{"class":48,"line":18605},[46,44601,40767],{"class":56},[46,44603,44604],{"class":180},"1024",[46,44606,2565],{"class":56},[46,44608,2633],{"class":180},[46,44610,459],{"class":56},[46,44612,44613],{"class":48,"line":18611},[46,44614,40098],{"class":56},[46,44616,44617],{"class":48,"line":18634},[46,44618,44619],{"class":2253},"        # 对模型参数初始化\n",[46,44621,44622,44624,44626,44628,44630],{"class":48,"line":18640},[46,44623,5422],{"class":52},[46,44625,40840],{"class":56},[46,44627,1146],{"class":52},[46,44629,40845],{"class":180},[46,44631,40848],{"class":56},[46,44633,44634,44636,44638],{"class":48,"line":18663},[46,44635,878],{"class":52},[46,44637,40860],{"class":180},[46,44639,40863],{"class":56},[46,44641,44642,44644,44647,44649,44652,44654,44656,44658,44660],{"class":48,"line":18677},[46,44643,40873],{"class":56},[46,44645,44646],{"class":439},"mode",[46,44648,79],{"class":52},[46,44650,44651],{"class":173},"'fan_out'",[46,44653,2565],{"class":56},[46,44655,40876],{"class":439},[46,44657,79],{"class":52},[46,44659,40881],{"class":173},[46,44661,459],{"class":56},[46,44663,44664],{"class":48,"line":18697},[46,44665,44666],{"class":2253},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[46,44668,44669],{"class":48,"line":18703},[46,44670,44671],{"class":2253},"                # ② mode = 'fan_out'决定使用的fan值：\n",[46,44673,44674],{"class":48,"line":18714},[46,44675,44676],{"class":2253},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[46,44678,44679],{"class":48,"line":18737},[46,44680,44681],{"class":2253},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[46,44683,44684],{"class":48,"line":18759},[46,44685,44686],{"class":2253},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[46,44688,44689],{"class":48,"line":18764},[46,44690,44691],{"class":2253},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[46,44693,44694,44696,44698,44700,44702,44704],{"class":48,"line":18770},[46,44695,40893],{"class":52},[46,44697,40896],{"class":56},[46,44699,40899],{"class":52},[46,44701,40902],{"class":52},[46,44703,40905],{"class":180},[46,44705,760],{"class":56},[46,44707,44708,44710,44712],{"class":48,"line":18784},[46,44709,40917],{"class":56},[46,44711,2379],{"class":180},[46,44713,459],{"class":56},[46,44715,44716,44719,44721],{"class":48,"line":18797},[46,44717,44718],{"class":52},"                elif",[46,44720,40860],{"class":180},[46,44722,40936],{"class":56},[46,44724,44725,44728,44730,44732,44734],{"class":48,"line":18802},[46,44726,44727],{"class":56},"                    nn.init.normal_(m.weight,",[46,44729,2379],{"class":180},[46,44731,2565],{"class":56},[46,44733,40958],{"class":180},[46,44735,459],{"class":56},[46,44737,44738,44741,44743,44745,44747,44749],{"class":48,"line":18816},[46,44739,44740],{"class":52},"                    if",[46,44742,40896],{"class":56},[46,44744,40899],{"class":52},[46,44746,40902],{"class":52},[46,44748,40905],{"class":180},[46,44750,760],{"class":56},[46,44752,44753,44756,44758],{"class":48,"line":18821},[46,44754,44755],{"class":56},"                        nn.init.constant_(m.bias,",[46,44757,2379],{"class":180},[46,44759,459],{"class":56},[46,44761,44762],{"class":48,"line":18827},[46,44763,37137],{"class":2253},[46,44765,44766,44768,44770],{"class":48,"line":18832},[46,44767,32781],{"class":52},[46,44769,33073],{"class":169},[46,44771,33076],{"class":56},[46,44773,44774,44776,44778,44780],{"class":48,"line":18846},[46,44775,33081],{"class":56},[46,44777,79],{"class":52},[46,44779,32803],{"class":180},[46,44781,44782],{"class":56},".b1(x)\n",[46,44784,44785,44787,44789,44791],{"class":48,"line":18851},[46,44786,33081],{"class":56},[46,44788,79],{"class":52},[46,44790,32803],{"class":180},[46,44792,44793],{"class":56},".b2(x)\n",[46,44795,44796,44798,44800,44802],{"class":48,"line":18856},[46,44797,33081],{"class":56},[46,44799,79],{"class":52},[46,44801,32803],{"class":180},[46,44803,44804],{"class":56},".b3(x)\n",[46,44806,44807,44809,44811,44813],{"class":48,"line":18870},[46,44808,33081],{"class":56},[46,44810,79],{"class":52},[46,44812,32803],{"class":180},[46,44814,44815],{"class":56},".b4(x)\n",[46,44817,44818,44820,44822,44824],{"class":48,"line":18882},[46,44819,33081],{"class":56},[46,44821,79],{"class":52},[46,44823,32803],{"class":180},[46,44825,44826],{"class":56},".b5(x)\n",[46,44828,44829,44831],{"class":48,"line":18887},[46,44830,16754],{"class":52},[46,44832,33189],{"class":56},[46,44834,44835],{"class":48,"line":18900},[46,44836,616],{"emptyLinePlaceholder":615},[46,44838,44839],{"class":48,"line":18905},[46,44840,44841],{"class":2253},"# 模型展示\n",[46,44843,44844,44846,44848,44850,44852],{"class":48,"line":18910},[46,44845,911],{"class":52},[46,44847,914],{"class":180},[46,44849,4970],{"class":52},[46,44851,33204],{"class":173},[46,44853,760],{"class":56},[46,44855,44856,44858,44860,44862,44864,44866,44868,44870,44872],{"class":48,"line":18915},[46,44857,33216],{"class":56},[46,44859,79],{"class":52},[46,44861,32434],{"class":56},[46,44863,33223],{"class":173},[46,44865,3744],{"class":52},[46,44867,33228],{"class":56},[46,44869,3741],{"class":52},[46,44871,32458],{"class":173},[46,44873,459],{"class":56},[46,44875,44876,44878,44880],{"class":48,"line":18928},[46,44877,33268],{"class":56},[46,44879,79],{"class":52},[46,44881,44882],{"class":56},"GoogLeNet(Inception).to(device)\n",[46,44884,44885,44887,44889,44891,44893,44895,44897,44899],{"class":48,"line":18933},[46,44886,1227],{"class":180},[46,44888,33280],{"class":56},[46,44890,2405],{"class":180},[46,44892,2565],{"class":56},[46,44894,33478],{"class":180},[46,44896,2565],{"class":56},[46,44898,33478],{"class":180},[46,44900,33293],{"class":56},[23,44902,44903],{"start":60},[26,44904,41155],{},[36,44906,44908],{"className":38,"code":44907,"language":40,"meta":41,"style":41},"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",[43,44909,44910,44916,44922,44932,44938,44948,44958,44968,44978,44988,44992,45003,45013,45017,45021,45025,45033,45045,45055,45071,45081,45113,45127,45137,45147,45151,45161,45175,45185,45195,45205,45211,45215,45219,45223,45227,45231,45239,45259,45263,45267,45271,45275,45279,45295,45299,45303,45311,45315,45319,45327,45331,45335,45339,45347,45351,45355,45359,45363,45371,45375,45383,45387,45395,45399,45407,45411,45419,45423,45427,45435,45439,45443,45447,45459,45483,45497,45501,45505,45509,45517,45521,45529,45533,45541,45545,45553,45557,45565,45569,45577,45581,45593,45597,45605,45609,45617,45621,45625,45629,45633,45641,45645,45661,45665,45673,45677,45681,45685,45689,45693,45697,45701,45717,45721,45733,45737,45749,45753,45765,45769,45777,45781,45789,45793,45797,45801,45807,45811,45819,45823,45839,45843,45851,45855,45871,45883,45887,45899,45903,45907,45915,45919,45923,45931,45935,45943,45947,45955,45959,45963,46005,46047,46051,46055,46071,46075,46091,46095,46099,46107,46111,46115,46127,46165,46169,46173,46181,46185,46199,46209,46215,46221,46227,46233,46237,46241,46247,46251,46255,46263,46267,46285,46289,46293,46297,46313,46317,46321,46325,46329,46333,46353,46373,46377,46381,46385,46393,46401,46405,46421,46441,46461,46465,46469,46477,46485,46489,46493,46497,46509,46513,46523,46531,46548],{"__ignoreMap":41},[46,44911,44912,44914],{"class":48,"line":49},[46,44913,53],{"class":52},[46,44915,33799],{"class":56},[46,44917,44918,44920],{"class":48,"line":60},[46,44919,53],{"class":52},[46,44921,610],{"class":56},[46,44923,44924,44926,44928,44930],{"class":48,"line":200},[46,44925,53],{"class":52},[46,44927,33816],{"class":56},[46,44929,398],{"class":52},[46,44931,33821],{"class":56},[46,44933,44934,44936],{"class":48,"line":211},[46,44935,53],{"class":52},[46,44937,32378],{"class":56},[46,44939,44940,44942,44944,44946],{"class":48,"line":222},[46,44941,957],{"class":52},[46,44943,33392],{"class":56},[46,44945,53],{"class":52},[46,44947,33838],{"class":56},[46,44949,44950,44952,44954,44956],{"class":48,"line":636},[46,44951,957],{"class":52},[46,44953,33346],{"class":56},[46,44955,53],{"class":52},[46,44957,33351],{"class":56},[46,44959,44960,44962,44964,44966],{"class":48,"line":641},[46,44961,957],{"class":52},[46,44963,33375],{"class":56},[46,44965,53],{"class":52},[46,44967,33380],{"class":56},[46,44969,44970,44972,44974,44976],{"class":48,"line":653},[46,44971,53],{"class":52},[46,44973,33392],{"class":56},[46,44975,398],{"class":52},[46,44977,33397],{"class":56},[46,44979,44980,44982,44984,44986],{"class":48,"line":659},[46,44981,53],{"class":52},[46,44983,33409],{"class":56},[46,44985,398],{"class":52},[46,44987,33414],{"class":56},[46,44989,44990],{"class":48,"line":665},[46,44991,33883],{"class":2253},[46,44993,44994,44996,44998,45000],{"class":48,"line":670},[46,44995,957],{"class":52},[46,44997,33890],{"class":56},[46,44999,53],{"class":52},[46,45001,45002],{"class":56}," GoogLeNet, Inception\n",[46,45004,45005,45007,45009,45011],{"class":48,"line":676},[46,45006,957],{"class":52},[46,45008,32721],{"class":56},[46,45010,53],{"class":52},[46,45012,32726],{"class":56},[46,45014,45015],{"class":48,"line":682},[46,45016,616],{"emptyLinePlaceholder":615},[46,45018,45019],{"class":48,"line":688},[46,45020,616],{"emptyLinePlaceholder":615},[46,45022,45023],{"class":48,"line":693},[46,45024,33918],{"class":2253},[46,45026,45027,45029,45031],{"class":48,"line":699},[46,45028,748],{"class":52},[46,45030,33925],{"class":169},[46,45032,33928],{"class":56},[46,45034,45035,45037,45039,45041,45043],{"class":48,"line":705},[46,45036,33933],{"class":56},[46,45038,79],{"class":52},[46,45040,33432],{"class":56},[46,45042,33440],{"class":173},[46,45044,33443],{"class":56},[46,45046,45047,45049,45051,45053],{"class":48,"line":711},[46,45048,33946],{"class":439},[46,45050,79],{"class":52},[46,45052,33453],{"class":180},[46,45054,33443],{"class":56},[46,45056,45057,45059,45061,45063,45065,45067,45069],{"class":48,"line":717},[46,45058,33957],{"class":439},[46,45060,79],{"class":52},[46,45062,33470],{"class":56},[46,45064,33473],{"class":439},[46,45066,79],{"class":52},[46,45068,37421],{"class":180},[46,45070,33481],{"class":56},[46,45072,45073,45075,45077,45079],{"class":48,"line":723},[46,45074,33974],{"class":439},[46,45076,79],{"class":52},[46,45078,33453],{"class":180},[46,45080,459],{"class":56},[46,45082,45083,45085,45087,45089,45091,45093,45095,45097,45099,45101,45103,45105,45107,45109,45111],{"class":48,"line":729},[46,45084,33985],{"class":56},[46,45086,79],{"class":52},[46,45088,33990],{"class":56},[46,45090,33993],{"class":180},[46,45092,1152],{"class":56},[46,45094,33998],{"class":180},[46,45096,2642],{"class":52},[46,45098,9371],{"class":180},[46,45100,34005],{"class":56},[46,45102,33993],{"class":180},[46,45104,1152],{"class":56},[46,45106,34012],{"class":180},[46,45108,2642],{"class":52},[46,45110,9371],{"class":180},[46,45112,34019],{"class":56},[46,45114,45115,45117,45119,45121,45123,45125],{"class":48,"line":735},[46,45116,34024],{"class":56},[46,45118,79],{"class":52},[46,45120,34029],{"class":56},[46,45122,33514],{"class":439},[46,45124,79],{"class":52},[46,45126,33519],{"class":56},[46,45128,45129,45131,45133,45135],{"class":48,"line":740},[46,45130,34040],{"class":439},[46,45132,79],{"class":52},[46,45134,2385],{"class":180},[46,45136,33443],{"class":56},[46,45138,45139,45141,45143,45145],{"class":48,"line":745},[46,45140,34052],{"class":439},[46,45142,79],{"class":52},[46,45144,33453],{"class":180},[46,45146,33443],{"class":56},[46,45148,45149],{"class":48,"line":763},[46,45150,34063],{"class":2253},[46,45152,45153,45155,45157,45159],{"class":48,"line":778},[46,45154,34068],{"class":439},[46,45156,79],{"class":52},[46,45158,2582],{"class":180},[46,45160,459],{"class":56},[46,45162,45163,45165,45167,45169,45171,45173],{"class":48,"line":789},[46,45164,34079],{"class":56},[46,45166,79],{"class":52},[46,45168,33511],{"class":56},[46,45170,33514],{"class":439},[46,45172,79],{"class":52},[46,45174,34090],{"class":56},[46,45176,45177,45179,45181,45183],{"class":48,"line":794},[46,45178,34095],{"class":439},[46,45180,79],{"class":52},[46,45182,2385],{"class":180},[46,45184,33443],{"class":56},[46,45186,45187,45189,45191,45193],{"class":48,"line":806},[46,45188,34106],{"class":439},[46,45190,79],{"class":52},[46,45192,33453],{"class":180},[46,45194,33443],{"class":56},[46,45196,45197,45199,45201,45203],{"class":48,"line":829},[46,45198,34117],{"class":439},[46,45200,79],{"class":52},[46,45202,2582],{"class":180},[46,45204,459],{"class":56},[46,45206,45207,45209],{"class":48,"line":840},[46,45208,6108],{"class":52},[46,45210,34130],{"class":56},[46,45212,45213],{"class":48,"line":846},[46,45214,616],{"emptyLinePlaceholder":615},[46,45216,45217],{"class":48,"line":852},[46,45218,34139],{"class":2253},[46,45220,45221],{"class":48,"line":857},[46,45222,34144],{"class":2253},[46,45224,45225],{"class":48,"line":875},[46,45226,616],{"emptyLinePlaceholder":615},[46,45228,45229],{"class":48,"line":892},[46,45230,34153],{"class":2253},[46,45232,45233,45235,45237],{"class":48,"line":898},[46,45234,748],{"class":52},[46,45236,34160],{"class":169},[46,45238,34163],{"class":56},[46,45240,45241,45243,45245,45247,45249,45251,45253,45255,45257],{"class":48,"line":903},[46,45242,33216],{"class":56},[46,45244,79],{"class":52},[46,45246,32434],{"class":56},[46,45248,33223],{"class":173},[46,45250,3744],{"class":52},[46,45252,33228],{"class":56},[46,45254,3741],{"class":52},[46,45256,34182],{"class":173},[46,45258,459],{"class":56},[46,45260,45261],{"class":48,"line":908},[46,45262,616],{"emptyLinePlaceholder":615},[46,45264,45265],{"class":48,"line":925},[46,45266,616],{"emptyLinePlaceholder":615},[46,45268,45269],{"class":48,"line":1238},[46,45270,34197],{"class":2253},[46,45272,45273],{"class":48,"line":1251},[46,45274,34202],{"class":2253},[46,45276,45277],{"class":48,"line":1256},[46,45278,34207],{"class":2253},[46,45280,45281,45283,45285,45287,45289,45291,45293],{"class":48,"line":1261},[46,45282,34212],{"class":56},[46,45284,79],{"class":52},[46,45286,34217],{"class":56},[46,45288,34220],{"class":439},[46,45290,79],{"class":52},[46,45292,34225],{"class":180},[46,45294,459],{"class":56},[46,45296,45297],{"class":48,"line":1274},[46,45298,616],{"emptyLinePlaceholder":615},[46,45300,45301],{"class":48,"line":10061},[46,45302,34236],{"class":2253},[46,45304,45305,45307,45309],{"class":48,"line":11720},[46,45306,34241],{"class":56},[46,45308,79],{"class":52},[46,45310,34246],{"class":56},[46,45312,45313],{"class":48,"line":11745},[46,45314,616],{"emptyLinePlaceholder":615},[46,45316,45317],{"class":48,"line":11768},[46,45318,34255],{"class":2253},[46,45320,45321,45323,45325],{"class":48,"line":11792},[46,45322,33268],{"class":56},[46,45324,79],{"class":52},[46,45326,34264],{"class":56},[46,45328,45329],{"class":48,"line":11797},[46,45330,34269],{"class":2253},[46,45332,45333],{"class":48,"line":11802},[46,45334,34274],{"class":2253},[46,45336,45337],{"class":48,"line":11807},[46,45338,34279],{"class":2253},[46,45340,45341,45343,45345],{"class":48,"line":11816},[46,45342,34284],{"class":56},[46,45344,79],{"class":52},[46,45346,34289],{"class":56},[46,45348,45349],{"class":48,"line":11821},[46,45350,616],{"emptyLinePlaceholder":615},[46,45352,45353],{"class":48,"line":11827},[46,45354,616],{"emptyLinePlaceholder":615},[46,45356,45357],{"class":48,"line":11848},[46,45358,34302],{"class":2253},[46,45360,45361],{"class":48,"line":11854},[46,45362,34307],{"class":2253},[46,45364,45365,45367,45369],{"class":48,"line":11868},[46,45366,34312],{"class":56},[46,45368,79],{"class":52},[46,45370,34317],{"class":180},[46,45372,45373],{"class":48,"line":11874},[46,45374,34322],{"class":2253},[46,45376,45377,45379,45381],{"class":48,"line":11901},[46,45378,34327],{"class":56},[46,45380,79],{"class":52},[46,45382,34332],{"class":56},[46,45384,45385],{"class":48,"line":11910},[46,45386,34337],{"class":2253},[46,45388,45389,45391,45393],{"class":48,"line":11916},[46,45390,34342],{"class":56},[46,45392,79],{"class":52},[46,45394,34332],{"class":56},[46,45396,45397],{"class":48,"line":11924},[46,45398,34351],{"class":2253},[46,45400,45401,45403,45405],{"class":48,"line":11929},[46,45402,34356],{"class":56},[46,45404,79],{"class":52},[46,45406,34332],{"class":56},[46,45408,45409],{"class":48,"line":18605},[46,45410,34365],{"class":2253},[46,45412,45413,45415,45417],{"class":48,"line":18611},[46,45414,34370],{"class":56},[46,45416,79],{"class":52},[46,45418,34332],{"class":56},[46,45420,45421],{"class":48,"line":18634},[46,45422,616],{"emptyLinePlaceholder":615},[46,45424,45425],{"class":48,"line":18640},[46,45426,34383],{"class":2253},[46,45428,45429,45431,45433],{"class":48,"line":18663},[46,45430,34388],{"class":56},[46,45432,79],{"class":52},[46,45434,34393],{"class":56},[46,45436,45437],{"class":48,"line":18677},[46,45438,616],{"emptyLinePlaceholder":615},[46,45440,45441],{"class":48,"line":18697},[46,45442,616],{"emptyLinePlaceholder":615},[46,45444,45445],{"class":48,"line":18703},[46,45446,34406],{"class":2253},[46,45448,45449,45451,45453,45455,45457],{"class":48,"line":18714},[46,45450,1140],{"class":52},[46,45452,34413],{"class":56},[46,45454,1146],{"class":52},[46,45456,1149],{"class":180},[46,45458,34420],{"class":56},[46,45460,45461,45463,45465,45467,45469,45471,45473,45475,45477,45479,45481],{"class":48,"line":18737},[46,45462,34425],{"class":180},[46,45464,1152],{"class":56},[46,45466,34430],{"class":173},[46,45468,34433],{"class":180},[46,45470,2770],{"class":173},[46,45472,34433],{"class":180},[46,45474,2439],{"class":173},[46,45476,34442],{"class":56},[46,45478,534],{"class":52},[46,45480,2405],{"class":180},[46,45482,32479],{"class":56},[46,45484,45485,45487,45489,45491,45493,45495],{"class":48,"line":18759},[46,45486,34425],{"class":180},[46,45488,1152],{"class":56},[46,45490,34457],{"class":173},[46,45492,2642],{"class":52},[46,45494,2633],{"class":180},[46,45496,459],{"class":56},[46,45498,45499],{"class":48,"line":18764},[46,45500,616],{"emptyLinePlaceholder":615},[46,45502,45503],{"class":48,"line":18770},[46,45504,34472],{"class":2253},[46,45506,45507],{"class":48,"line":18784},[46,45508,34477],{"class":2253},[46,45510,45511,45513,45515],{"class":48,"line":18797},[46,45512,34482],{"class":56},[46,45514,79],{"class":52},[46,45516,34317],{"class":180},[46,45518,45519],{"class":48,"line":18802},[46,45520,34491],{"class":2253},[46,45522,45523,45525,45527],{"class":48,"line":18816},[46,45524,34496],{"class":56},[46,45526,79],{"class":52},[46,45528,5105],{"class":180},[46,45530,45531],{"class":48,"line":18821},[46,45532,34505],{"class":2253},[46,45534,45535,45537,45539],{"class":48,"line":18827},[46,45536,34510],{"class":56},[46,45538,79],{"class":52},[46,45540,34317],{"class":180},[46,45542,45543],{"class":48,"line":18832},[46,45544,34519],{"class":2253},[46,45546,45547,45549,45551],{"class":48,"line":18846},[46,45548,34524],{"class":56},[46,45550,79],{"class":52},[46,45552,5105],{"class":180},[46,45554,45555],{"class":48,"line":18851},[46,45556,34533],{"class":2253},[46,45558,45559,45561,45563],{"class":48,"line":18856},[46,45560,34538],{"class":56},[46,45562,79],{"class":52},[46,45564,5105],{"class":180},[46,45566,45567],{"class":48,"line":18870},[46,45568,34547],{"class":2253},[46,45570,45571,45573,45575],{"class":48,"line":18882},[46,45572,34552],{"class":56},[46,45574,79],{"class":52},[46,45576,5105],{"class":180},[46,45578,45579],{"class":48,"line":18887},[46,45580,34561],{"class":2253},[46,45582,45583,45585,45587,45589,45591],{"class":48,"line":18900},[46,45584,5422],{"class":52},[46,45586,33578],{"class":56},[46,45588,1146],{"class":52},[46,45590,33583],{"class":180},[46,45592,34574],{"class":56},[46,45594,45595],{"class":48,"line":18905},[46,45596,34579],{"class":2253},[46,45598,45599,45601,45603],{"class":48,"line":18910},[46,45600,34584],{"class":56},[46,45602,79],{"class":52},[46,45604,34589],{"class":56},[46,45606,45607],{"class":48,"line":18915},[46,45608,34594],{"class":2253},[46,45610,45611,45613,45615],{"class":48,"line":18928},[46,45612,34599],{"class":56},[46,45614,79],{"class":52},[46,45616,34604],{"class":56},[46,45618,45619],{"class":48,"line":18933},[46,45620,34610],{"class":2253},[46,45622,45623],{"class":48,"line":34607},[46,45624,34616],{"class":56},[46,45626,45627],{"class":48,"line":34613},[46,45628,34622],{"class":2253},[46,45630,45631],{"class":48,"line":34619},[46,45632,34628],{"class":2253},[46,45634,45635,45637,45639],{"class":48,"line":34625},[46,45636,34634],{"class":56},[46,45638,79],{"class":52},[46,45640,34639],{"class":56},[46,45642,45643],{"class":48,"line":34631},[46,45644,34645],{"class":2253},[46,45646,45647,45649,45651,45653,45655,45657,45659],{"class":48,"line":34642},[46,45648,34651],{"class":56},[46,45650,79],{"class":52},[46,45652,34656],{"class":56},[46,45654,34659],{"class":439},[46,45656,79],{"class":52},[46,45658,2405],{"class":180},[46,45660,459],{"class":56},[46,45662,45663],{"class":48,"line":34648},[46,45664,34671],{"class":2253},[46,45666,45667,45669,45671],{"class":48,"line":34668},[46,45668,34677],{"class":56},[46,45670,79],{"class":52},[46,45672,34682],{"class":56},[46,45674,45675],{"class":48,"line":34674},[46,45676,34688],{"class":2253},[46,45678,45679],{"class":48,"line":34685},[46,45680,34694],{"class":56},[46,45682,45683],{"class":48,"line":34691},[46,45684,34700],{"class":2253},[46,45686,45687],{"class":48,"line":34697},[46,45688,34706],{"class":56},[46,45690,45691],{"class":48,"line":34703},[46,45692,34712],{"class":2253},[46,45694,45695],{"class":48,"line":34709},[46,45696,34718],{"class":56},[46,45698,45699],{"class":48,"line":34715},[46,45700,34724],{"class":2253},[46,45702,45703,45705,45707,45709,45711,45713,45715],{"class":48,"line":34721},[46,45704,34730],{"class":56},[46,45706,11481],{"class":52},[46,45708,34735],{"class":56},[46,45710,2642],{"class":52},[46,45712,34740],{"class":56},[46,45714,2379],{"class":180},[46,45716,459],{"class":56},[46,45718,45719],{"class":48,"line":34727},[46,45720,34750],{"class":2253},[46,45722,45723,45725,45727,45729,45731],{"class":48,"line":34747},[46,45724,34756],{"class":56},[46,45726,11481],{"class":52},[46,45728,34761],{"class":56},[46,45730,4970],{"class":52},[46,45732,34766],{"class":56},[46,45734,45735],{"class":48,"line":34753},[46,45736,34772],{"class":2253},[46,45738,45739,45741,45743,45745,45747],{"class":48,"line":34769},[46,45740,34778],{"class":56},[46,45742,11481],{"class":52},[46,45744,34740],{"class":56},[46,45746,2379],{"class":180},[46,45748,459],{"class":56},[46,45750,45751],{"class":48,"line":34775},[46,45752,34792],{"class":2253},[46,45754,45755,45757,45759,45761,45763],{"class":48,"line":34789},[46,45756,5422],{"class":52},[46,45758,34800],{"class":56},[46,45760,1146],{"class":52},[46,45762,33583],{"class":180},[46,45764,34807],{"class":56},[46,45766,45767],{"class":48,"line":34795},[46,45768,34813],{"class":2253},[46,45770,45771,45773,45775],{"class":48,"line":34810},[46,45772,34584],{"class":56},[46,45774,79],{"class":52},[46,45776,34589],{"class":56},[46,45778,45779],{"class":48,"line":34816},[46,45780,34828],{"class":2253},[46,45782,45783,45785,45787],{"class":48,"line":34825},[46,45784,34599],{"class":56},[46,45786,79],{"class":52},[46,45788,34604],{"class":56},[46,45790,45791],{"class":48,"line":34831},[46,45792,34843],{"class":2253},[46,45794,45795],{"class":48,"line":34840},[46,45796,34849],{"class":56},[46,45798,45799],{"class":48,"line":34846},[46,45800,38328],{"class":2253},[46,45802,45803,45805],{"class":48,"line":34852},[46,45804,34855],{"class":52},[46,45806,34858],{"class":56},[46,45808,45809],{"class":48,"line":34861},[46,45810,34864],{"class":2253},[46,45812,45813,45815,45817],{"class":48,"line":34867},[46,45814,38343],{"class":56},[46,45816,79],{"class":52},[46,45818,34639],{"class":56},[46,45820,45821],{"class":48,"line":34878},[46,45822,34881],{"class":2253},[46,45824,45825,45827,45829,45831,45833,45835,45837],{"class":48,"line":34884},[46,45826,38356],{"class":56},[46,45828,79],{"class":52},[46,45830,34656],{"class":56},[46,45832,34659],{"class":439},[46,45834,79],{"class":52},[46,45836,2405],{"class":180},[46,45838,459],{"class":56},[46,45840,45841],{"class":48,"line":34903},[46,45842,34906],{"class":2253},[46,45844,45845,45847,45849],{"class":48,"line":34909},[46,45846,38377],{"class":56},[46,45848,79],{"class":52},[46,45850,34682],{"class":56},[46,45852,45853],{"class":48,"line":34920},[46,45854,34923],{"class":2253},[46,45856,45857,45859,45861,45863,45865,45867,45869],{"class":48,"line":34926},[46,45858,38390],{"class":56},[46,45860,11481],{"class":52},[46,45862,38395],{"class":56},[46,45864,2642],{"class":52},[46,45866,34740],{"class":56},[46,45868,2379],{"class":180},[46,45870,459],{"class":56},[46,45872,45873,45875,45877,45879,45881],{"class":48,"line":34946},[46,45874,38408],{"class":56},[46,45876,11481],{"class":52},[46,45878,34761],{"class":56},[46,45880,4970],{"class":52},[46,45882,34766],{"class":56},[46,45884,45885],{"class":48,"line":34962},[46,45886,38421],{"class":2253},[46,45888,45889,45891,45893,45895,45897],{"class":48,"line":34968},[46,45890,38426],{"class":56},[46,45892,11481],{"class":52},[46,45894,34740],{"class":56},[46,45896,2379],{"class":180},[46,45898,459],{"class":56},[46,45900,45901],{"class":48,"line":34982},[46,45902,34985],{"class":2253},[46,45904,45905],{"class":48,"line":34988},[46,45906,34991],{"class":2253},[46,45908,45909,45911,45913],{"class":48,"line":34994},[46,45910,34997],{"class":56},[46,45912,2770],{"class":52},[46,45914,35002],{"class":56},[46,45916,45917],{"class":48,"line":35005},[46,45918,35008],{"class":2253},[46,45920,45921],{"class":48,"line":35011},[46,45922,35014],{"class":2253},[46,45924,45925,45927,45929],{"class":48,"line":35017},[46,45926,35020],{"class":56},[46,45928,2770],{"class":52},[46,45930,35002],{"class":56},[46,45932,45933],{"class":48,"line":35027},[46,45934,35030],{"class":2253},[46,45936,45937,45939,45941],{"class":48,"line":35033},[46,45938,35036],{"class":56},[46,45940,2770],{"class":52},[46,45942,35041],{"class":56},[46,45944,45945],{"class":48,"line":35044},[46,45946,35047],{"class":2253},[46,45948,45949,45951,45953],{"class":48,"line":35050},[46,45950,35053],{"class":56},[46,45952,2770],{"class":52},[46,45954,35041],{"class":56},[46,45956,45957],{"class":48,"line":35060},[46,45958,616],{"emptyLinePlaceholder":615},[46,45960,45961],{"class":48,"line":35065},[46,45962,35068],{"class":2253},[46,45964,45965,45967,45969,45971,45973,45975,45977,45979,45981,45983,45985,45987,45989,45991,45993,45995,45997,45999,46001,46003],{"class":48,"line":35071},[46,45966,34425],{"class":180},[46,45968,1152],{"class":56},[46,45970,5611],{"class":173},[46,45972,34433],{"class":180},[46,45974,35082],{"class":173},[46,45976,3082],{"class":180},[46,45978,35087],{"class":52},[46,45980,3131],{"class":180},[46,45982,35092],{"class":173},[46,45984,3082],{"class":180},[46,45986,35087],{"class":52},[46,45988,3131],{"class":180},[46,45990,5611],{"class":173},[46,45992,35103],{"class":56},[46,45994,534],{"class":52},[46,45996,2405],{"class":180},[46,45998,35110],{"class":56},[46,46000,534],{"class":52},[46,46002,2405],{"class":180},[46,46004,35117],{"class":56},[46,46006,46007,46009,46011,46013,46015,46017,46019,46021,46023,46025,46027,46029,46031,46033,46035,46037,46039,46041,46043,46045],{"class":48,"line":35120},[46,46008,34425],{"class":180},[46,46010,1152],{"class":56},[46,46012,5611],{"class":173},[46,46014,34433],{"class":180},[46,46016,35131],{"class":173},[46,46018,3082],{"class":180},[46,46020,35087],{"class":52},[46,46022,3131],{"class":180},[46,46024,35140],{"class":173},[46,46026,3082],{"class":180},[46,46028,35087],{"class":52},[46,46030,3131],{"class":180},[46,46032,5611],{"class":173},[46,46034,35151],{"class":56},[46,46036,534],{"class":52},[46,46038,2405],{"class":180},[46,46040,35158],{"class":56},[46,46042,534],{"class":52},[46,46044,2405],{"class":180},[46,46046,35117],{"class":56},[46,46048,46049],{"class":48,"line":35167},[46,46050,616],{"emptyLinePlaceholder":615},[46,46052,46053],{"class":48,"line":35172},[46,46054,35175],{"class":2253},[46,46056,46057,46059,46061,46063,46065,46067,46069],{"class":48,"line":35178},[46,46058,4525],{"class":52},[46,46060,35183],{"class":56},[46,46062,534],{"class":52},[46,46064,2405],{"class":180},[46,46066,3125],{"class":56},[46,46068,884],{"class":52},[46,46070,35194],{"class":56},[46,46072,46073],{"class":48,"line":35197},[46,46074,35200],{"class":2253},[46,46076,46077,46079,46081,46083,46085,46087,46089],{"class":48,"line":35203},[46,46078,35206],{"class":56},[46,46080,2236],{"class":180},[46,46082,79],{"class":52},[46,46084,35213],{"class":56},[46,46086,534],{"class":52},[46,46088,2405],{"class":180},[46,46090,35220],{"class":56},[46,46092,46093],{"class":48,"line":35223},[46,46094,35226],{"class":2253},[46,46096,46097],{"class":48,"line":35229},[46,46098,35232],{"class":2253},[46,46100,46101,46103,46105],{"class":48,"line":35235},[46,46102,35238],{"class":56},[46,46104,79],{"class":52},[46,46106,34289],{"class":56},[46,46108,46109],{"class":48,"line":35245},[46,46110,616],{"emptyLinePlaceholder":615},[46,46112,46113],{"class":48,"line":35250},[46,46114,35253],{"class":2253},[46,46116,46117,46119,46121,46123,46125],{"class":48,"line":35256},[46,46118,35259],{"class":56},[46,46120,79],{"class":52},[46,46122,35264],{"class":56},[46,46124,534],{"class":52},[46,46126,35269],{"class":56},[46,46128,46129,46131,46133,46135,46137,46139,46141,46143,46145,46147,46149,46151,46153,46155,46157,46159,46161,46163],{"class":48,"line":35272},[46,46130,34425],{"class":180},[46,46132,1152],{"class":56},[46,46134,35279],{"class":173},[46,46136,3082],{"class":180},[46,46138,35284],{"class":52},[46,46140,3131],{"class":180},[46,46142,2730],{"class":173},[46,46144,3082],{"class":180},[46,46146,35284],{"class":52},[46,46148,3131],{"class":180},[46,46150,35297],{"class":173},[46,46152,35300],{"class":56},[46,46154,35303],{"class":52},[46,46156,3093],{"class":180},[46,46158,35308],{"class":56},[46,46160,2515],{"class":52},[46,46162,3093],{"class":180},[46,46164,32479],{"class":56},[46,46166,46167],{"class":48,"line":35317},[46,46168,38705],{"class":2253},[46,46170,46171],{"class":48,"line":35323},[46,46172,38710],{"class":2253},[46,46174,46175,46177,46179],{"class":48,"line":35329},[46,46176,38715],{"class":56},[46,46178,35341],{"class":173},[46,46180,459],{"class":56},[46,46182,46183],{"class":48,"line":35335},[46,46184,35361],{"class":2253},[46,46186,46187,46189,46191,46193,46195,46197],{"class":48,"line":35346},[46,46188,35367],{"class":56},[46,46190,79],{"class":52},[46,46192,35372],{"class":56},[46,46194,1516],{"class":439},[46,46196,79],{"class":52},[46,46198,3597],{"class":56},[46,46200,46201,46203,46205,46207],{"class":48,"line":35352},[46,46202,35384],{"class":173},[46,46204,3045],{"class":56},[46,46206,35389],{"class":180},[46,46208,35392],{"class":56},[46,46210,46211,46213],{"class":48,"line":35358},[46,46212,35398],{"class":173},[46,46214,35401],{"class":56},[46,46216,46217,46219],{"class":48,"line":35364},[46,46218,35407],{"class":173},[46,46220,35410],{"class":56},[46,46222,46223,46225],{"class":48,"line":35381},[46,46224,35416],{"class":173},[46,46226,35419],{"class":56},[46,46228,46229,46231],{"class":48,"line":35395},[46,46230,35425],{"class":173},[46,46232,35428],{"class":56},[46,46234,46235],{"class":48,"line":35404},[46,46236,35434],{"class":56},[46,46238,46239],{"class":48,"line":35413},[46,46240,35440],{"class":2253},[46,46242,46243,46245],{"class":48,"line":35422},[46,46244,6108],{"class":52},[46,46246,35448],{"class":56},[46,46248,46249],{"class":48,"line":35431},[46,46250,616],{"emptyLinePlaceholder":615},[46,46252,46253],{"class":48,"line":35437},[46,46254,35459],{"class":2253},[46,46256,46257,46259,46261],{"class":48,"line":35443},[46,46258,748],{"class":52},[46,46260,35467],{"class":169},[46,46262,35470],{"class":56},[46,46264,46265],{"class":48,"line":35451},[46,46266,35476],{"class":2253},[46,46268,46269,46271,46273,46275,46277,46279,46281,46283],{"class":48,"line":35456},[46,46270,35482],{"class":56},[46,46272,33670],{"class":439},[46,46274,79],{"class":52},[46,46276,1152],{"class":56},[46,46278,2685],{"class":180},[46,46280,2565],{"class":56},[46,46282,2481],{"class":180},[46,46284,32479],{"class":56},[46,46286,46287],{"class":48,"line":35462},[46,46288,35502],{"class":2253},[46,46290,46291],{"class":48,"line":35473},[46,46292,35508],{"class":2253},[46,46294,46295],{"class":48,"line":35479},[46,46296,35514],{"class":2253},[46,46298,46299,46301,46303,46305,46307,46309,46311],{"class":48,"line":35499},[46,46300,33704],{"class":56},[46,46302,2405],{"class":180},[46,46304,2565],{"class":56},[46,46306,2272],{"class":180},[46,46308,2565],{"class":56},[46,46310,2405],{"class":180},[46,46312,459],{"class":56},[46,46314,46315],{"class":48,"line":35505},[46,46316,35537],{"class":2253},[46,46318,46319],{"class":48,"line":35511},[46,46320,35543],{"class":2253},[46,46322,46323],{"class":48,"line":35517},[46,46324,35549],{"class":2253},[46,46326,46327],{"class":48,"line":35534},[46,46328,35555],{"class":2253},[46,46330,46331],{"class":48,"line":35540},[46,46332,35561],{"class":2253},[46,46334,46335,46337,46339,46341,46343,46345,46347,46349,46351],{"class":48,"line":35546},[46,46336,35567],{"class":56},[46,46338,35570],{"class":173},[46,46340,35573],{"class":56},[46,46342,35576],{"class":173},[46,46344,2565],{"class":56},[46,46346,35581],{"class":439},[46,46348,79],{"class":52},[46,46350,35586],{"class":173},[46,46352,459],{"class":56},[46,46354,46355,46357,46359,46361,46363,46365,46367,46369,46371],{"class":48,"line":35552},[46,46356,35567],{"class":56},[46,46358,35570],{"class":173},[46,46360,35598],{"class":56},[46,46362,35601],{"class":173},[46,46364,2565],{"class":56},[46,46366,35581],{"class":439},[46,46368,79],{"class":52},[46,46370,35610],{"class":173},[46,46372,459],{"class":56},[46,46374,46375],{"class":48,"line":35558},[46,46376,35618],{"class":2253},[46,46378,46379],{"class":48,"line":35564},[46,46380,35624],{"class":56},[46,46382,46383],{"class":48,"line":35591},[46,46384,35630],{"class":2253},[46,46386,46387,46389,46391],{"class":48,"line":35615},[46,46388,35636],{"class":56},[46,46390,35639],{"class":173},[46,46392,459],{"class":56},[46,46394,46395,46397,46399],{"class":48,"line":35621},[46,46396,35647],{"class":56},[46,46398,35650],{"class":173},[46,46400,459],{"class":56},[46,46402,46403],{"class":48,"line":35627},[46,46404,35658],{"class":2253},[46,46406,46407,46409,46411,46413,46415,46417,46419],{"class":48,"line":35633},[46,46408,33704],{"class":56},[46,46410,2405],{"class":180},[46,46412,2565],{"class":56},[46,46414,2272],{"class":180},[46,46416,2565],{"class":56},[46,46418,2272],{"class":180},[46,46420,459],{"class":56},[46,46422,46423,46425,46427,46429,46431,46433,46435,46437,46439],{"class":48,"line":35644},[46,46424,35567],{"class":56},[46,46426,35570],{"class":173},[46,46428,35685],{"class":56},[46,46430,35576],{"class":173},[46,46432,2565],{"class":56},[46,46434,35581],{"class":439},[46,46436,79],{"class":52},[46,46438,35696],{"class":173},[46,46440,459],{"class":56},[46,46442,46443,46445,46447,46449,46451,46453,46455,46457,46459],{"class":48,"line":35655},[46,46444,35567],{"class":56},[46,46446,35570],{"class":173},[46,46448,35708],{"class":56},[46,46450,35601],{"class":173},[46,46452,2565],{"class":56},[46,46454,35581],{"class":439},[46,46456,79],{"class":52},[46,46458,35719],{"class":173},[46,46460,459],{"class":56},[46,46462,46463],{"class":48,"line":35661},[46,46464,35727],{"class":2253},[46,46466,46467],{"class":48,"line":35678},[46,46468,35624],{"class":56},[46,46470,46471,46473,46475],{"class":48,"line":35701},[46,46472,35636],{"class":56},[46,46474,35570],{"class":173},[46,46476,459],{"class":56},[46,46478,46479,46481,46483],{"class":48,"line":35724},[46,46480,35647],{"class":56},[46,46482,35749],{"class":173},[46,46484,459],{"class":56},[46,46486,46487],{"class":48,"line":35730},[46,46488,35757],{"class":56},[46,46490,46491],{"class":48,"line":35735},[46,46492,616],{"emptyLinePlaceholder":615},[46,46494,46495],{"class":48,"line":35744},[46,46496,35768],{"class":2253},[46,46498,46499,46501,46503,46505,46507],{"class":48,"line":35754},[46,46500,911],{"class":52},[46,46502,914],{"class":180},[46,46504,4970],{"class":52},[46,46506,33204],{"class":173},[46,46508,760],{"class":56},[46,46510,46511],{"class":48,"line":35760},[46,46512,35787],{"class":2253},[46,46514,46515,46518,46520],{"class":48,"line":35765},[46,46516,46517],{"class":56},"    GoogLeNet",[46,46519,79],{"class":52},[46,46521,46522],{"class":56},"GoogLeNet(Inception)\n",[46,46524,46525,46527,46529],{"class":48,"line":35771},[46,46526,35804],{"class":56},[46,46528,79],{"class":52},[46,46530,35809],{"class":56},[46,46532,46533,46535,46537,46540,46542,46544,46546],{"class":48,"line":35784},[46,46534,35367],{"class":56},[46,46536,79],{"class":52},[46,46538,46539],{"class":56},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[46,46541,35822],{"class":439},[46,46543,79],{"class":52},[46,46545,3136],{"class":180},[46,46547,459],{"class":56},[46,46549,46550],{"class":48,"line":35790},[46,46551,35834],{"class":56},[23,46553,46554],{"start":200},[26,46555,42546],{},[36,46557,46559],{"className":38,"code":46558,"language":40,"meta":41,"style":41},"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",[43,46560,46561,46567,46577,46587,46591,46601,46612,46616,46620,46624,46632,46648,46658,46674,46684,46698,46702,46712,46722,46732,46738,46742,46746,46754,46758,46774,46782,46786,46790,46798,46806,46810,46814,46818,46822,46828,46832,46842,46850,46858,46862,46866,46870,46878,46882,46898,46902,46906,46910,46922,46926,46938,46942,46946,46958,46962,46972,46976,46980,46992,46996,47004,47008,47012,47020,47024,47032,47036,47040,47044,47048,47052,47068,47076,47080,47084,47132,47138,47142,47152,47160,47168,47172,47176,47180,47184,47192,47196,47212,47216,47224,47232],{"__ignoreMap":41},[46,46562,46563,46565],{"class":48,"line":49},[46,46564,53],{"class":52},[46,46566,32378],{"class":56},[46,46568,46569,46571,46573,46575],{"class":48,"line":60},[46,46570,53],{"class":52},[46,46572,33392],{"class":56},[46,46574,398],{"class":52},[46,46576,33397],{"class":56},[46,46578,46579,46581,46583,46585],{"class":48,"line":200},[46,46580,957],{"class":52},[46,46582,33375],{"class":56},[46,46584,53],{"class":52},[46,46586,33380],{"class":56},[46,46588,46589],{"class":48,"line":211},[46,46590,35895],{"class":2253},[46,46592,46593,46595,46597,46599],{"class":48,"line":222},[46,46594,957],{"class":52},[46,46596,33346],{"class":56},[46,46598,53],{"class":52},[46,46600,33351],{"class":56},[46,46602,46603,46605,46607,46609],{"class":48,"line":636},[46,46604,957],{"class":52},[46,46606,33890],{"class":56},[46,46608,53],{"class":52},[46,46610,46611],{"class":56}," GoogLeNet,Inception\n",[46,46613,46614],{"class":48,"line":641},[46,46615,616],{"emptyLinePlaceholder":615},[46,46617,46618],{"class":48,"line":653},[46,46619,616],{"emptyLinePlaceholder":615},[46,46621,46622],{"class":48,"line":659},[46,46623,35924],{"class":2253},[46,46625,46626,46628,46630],{"class":48,"line":665},[46,46627,748],{"class":52},[46,46629,35931],{"class":169},[46,46631,33928],{"class":56},[46,46633,46634,46636,46638,46640,46642,46644,46646],{"class":48,"line":670},[46,46635,35938],{"class":56},[46,46637,79],{"class":52},[46,46639,33432],{"class":56},[46,46641,33435],{"class":439},[46,46643,79],{"class":52},[46,46645,33440],{"class":173},[46,46647,33443],{"class":56},[46,46649,46650,46652,46654,46656],{"class":48,"line":676},[46,46651,35955],{"class":439},[46,46653,79],{"class":52},[46,46655,35960],{"class":180},[46,46657,33443],{"class":56},[46,46659,46660,46662,46664,46666,46668,46670,46672],{"class":48,"line":682},[46,46661,35967],{"class":439},[46,46663,79],{"class":52},[46,46665,33470],{"class":56},[46,46667,33473],{"class":439},[46,46669,79],{"class":52},[46,46671,37421],{"class":180},[46,46673,33481],{"class":56},[46,46675,46676,46678,46680,46682],{"class":48,"line":688},[46,46677,35984],{"class":439},[46,46679,79],{"class":52},[46,46681,33453],{"class":180},[46,46683,459],{"class":56},[46,46685,46686,46688,46690,46692,46694,46696],{"class":48,"line":693},[46,46687,35995],{"class":56},[46,46689,79],{"class":52},[46,46691,33511],{"class":56},[46,46693,33514],{"class":439},[46,46695,79],{"class":52},[46,46697,36006],{"class":56},[46,46699,46700],{"class":48,"line":699},[46,46701,36011],{"class":2253},[46,46703,46704,46706,46708,46710],{"class":48,"line":705},[46,46705,36016],{"class":439},[46,46707,79],{"class":52},[46,46709,2405],{"class":180},[46,46711,33443],{"class":56},[46,46713,46714,46716,46718,46720],{"class":48,"line":711},[46,46715,36027],{"class":439},[46,46717,79],{"class":52},[46,46719,33453],{"class":180},[46,46721,33443],{"class":56},[46,46723,46724,46726,46728,46730],{"class":48,"line":717},[46,46725,36038],{"class":439},[46,46727,79],{"class":52},[46,46729,2379],{"class":180},[46,46731,459],{"class":56},[46,46733,46734,46736],{"class":48,"line":723},[46,46735,6108],{"class":52},[46,46737,36051],{"class":56},[46,46739,46740],{"class":48,"line":729},[46,46741,616],{"emptyLinePlaceholder":615},[46,46743,46744],{"class":48,"line":735},[46,46745,36060],{"class":2253},[46,46747,46748,46750,46752],{"class":48,"line":740},[46,46749,748],{"class":52},[46,46751,36067],{"class":169},[46,46753,36070],{"class":56},[46,46755,46756],{"class":48,"line":745},[46,46757,36075],{"class":2253},[46,46759,46760,46762,46764,46766,46768,46770,46772],{"class":48,"line":763},[46,46761,33216],{"class":56},[46,46763,79],{"class":52},[46,46765,33223],{"class":173},[46,46767,3744],{"class":52},[46,46769,33228],{"class":56},[46,46771,3741],{"class":52},[46,46773,36092],{"class":173},[46,46775,46776,46778,46780],{"class":48,"line":778},[46,46777,33268],{"class":56},[46,46779,79],{"class":52},[46,46781,34264],{"class":56},[46,46783,46784],{"class":48,"line":789},[46,46785,616],{"emptyLinePlaceholder":615},[46,46787,46788],{"class":48,"line":794},[46,46789,36109],{"class":2253},[46,46791,46792,46794,46796],{"class":48,"line":806},[46,46793,36114],{"class":56},[46,46795,79],{"class":52},[46,46797,34317],{"class":180},[46,46799,46800,46802,46804],{"class":48,"line":829},[46,46801,36123],{"class":56},[46,46803,79],{"class":52},[46,46805,5105],{"class":180},[46,46807,46808],{"class":48,"line":840},[46,46809,616],{"emptyLinePlaceholder":615},[46,46811,46812],{"class":48,"line":846},[46,46813,36136],{"class":2253},[46,46815,46816],{"class":48,"line":852},[46,46817,36141],{"class":2253},[46,46819,46820],{"class":48,"line":857},[46,46821,36146],{"class":2253},[46,46823,46824,46826],{"class":48,"line":875},[46,46825,797],{"class":52},[46,46827,34858],{"class":56},[46,46829,46830],{"class":48,"line":892},[46,46831,36157],{"class":2253},[46,46833,46834,46836,46838,46840],{"class":48,"line":898},[46,46835,5422],{"class":52},[46,46837,36164],{"class":56},[46,46839,1146],{"class":52},[46,46841,36169],{"class":56},[46,46843,46844,46846,46848],{"class":48,"line":903},[46,46845,36174],{"class":56},[46,46847,79],{"class":52},[46,46849,36179],{"class":56},[46,46851,46852,46854,46856],{"class":48,"line":908},[46,46853,36184],{"class":56},[46,46855,79],{"class":52},[46,46857,36189],{"class":56},[46,46859,46860],{"class":48,"line":925},[46,46861,36194],{"class":2253},[46,46863,46864],{"class":48,"line":1238},[46,46865,34849],{"class":56},[46,46867,46868],{"class":48,"line":1251},[46,46869,36203],{"class":2253},[46,46871,46872,46874,46876],{"class":48,"line":1256},[46,46873,34634],{"class":56},[46,46875,79],{"class":52},[46,46877,36212],{"class":56},[46,46879,46880],{"class":48,"line":1261},[46,46881,36217],{"class":2253},[46,46883,46884,46886,46888,46890,46892,46894,46896],{"class":48,"line":1274},[46,46885,34651],{"class":56},[46,46887,79],{"class":52},[46,46889,34656],{"class":56},[46,46891,34659],{"class":439},[46,46893,79],{"class":52},[46,46895,2405],{"class":180},[46,46897,459],{"class":56},[46,46899,46900],{"class":48,"line":10061},[46,46901,36238],{"class":2253},[46,46903,46904],{"class":48,"line":11720},[46,46905,36243],{"class":2253},[46,46907,46908],{"class":48,"line":11745},[46,46909,36248],{"class":2253},[46,46911,46912,46914,46916,46918,46920],{"class":48,"line":11768},[46,46913,36253],{"class":56},[46,46915,11481],{"class":52},[46,46917,34761],{"class":56},[46,46919,4970],{"class":52},[46,46921,36262],{"class":56},[46,46923,46924],{"class":48,"line":11792},[46,46925,36267],{"class":2253},[46,46927,46928,46930,46932,46934,46936],{"class":48,"line":11797},[46,46929,36272],{"class":56},[46,46931,11481],{"class":52},[46,46933,36277],{"class":56},[46,46935,2379],{"class":180},[46,46937,459],{"class":56},[46,46939,46940],{"class":48,"line":11802},[46,46941,616],{"emptyLinePlaceholder":615},[46,46943,46944],{"class":48,"line":11807},[46,46945,36290],{"class":2253},[46,46947,46948,46950,46952,46954,46956],{"class":48,"line":11816},[46,46949,36295],{"class":56},[46,46951,79],{"class":52},[46,46953,36300],{"class":56},[46,46955,2770],{"class":52},[46,46957,36305],{"class":56},[46,46959,46960],{"class":48,"line":11821},[46,46961,36310],{"class":2253},[46,46963,46964,46966,46968,46970],{"class":48,"line":11827},[46,46965,34425],{"class":180},[46,46967,1152],{"class":56},[46,46969,36319],{"class":173},[46,46971,36322],{"class":56},[46,46973,46974],{"class":48,"line":11848},[46,46975,616],{"emptyLinePlaceholder":615},[46,46977,46978],{"class":48,"line":11854},[46,46979,36331],{"class":2253},[46,46981,46982,46984,46986,46988,46990],{"class":48,"line":11868},[46,46983,911],{"class":52},[46,46985,914],{"class":180},[46,46987,4970],{"class":52},[46,46989,33204],{"class":173},[46,46991,760],{"class":56},[46,46993,46994],{"class":48,"line":11874},[46,46995,36348],{"class":2253},[46,46997,46998,47000,47002],{"class":48,"line":11901},[46,46999,33268],{"class":56},[46,47001,79],{"class":52},[46,47003,46522],{"class":56},[46,47005,47006],{"class":48,"line":11910},[46,47007,36361],{"class":2253},[46,47009,47010],{"class":48,"line":11916},[46,47011,36366],{"class":2253},[46,47013,47014,47016,47018],{"class":48,"line":11924},[46,47015,36371],{"class":56},[46,47017,36374],{"class":173},[46,47019,32479],{"class":56},[46,47021,47022],{"class":48,"line":11929},[46,47023,36381],{"class":2253},[46,47025,47026,47028,47030],{"class":48,"line":18605},[46,47027,35995],{"class":56},[46,47029,79],{"class":52},[46,47031,36390],{"class":56},[46,47033,47034],{"class":48,"line":18611},[46,47035,36395],{"class":2253},[46,47037,47038],{"class":48,"line":18634},[46,47039,36400],{"class":56},[46,47041,47042],{"class":48,"line":18640},[46,47043,616],{"emptyLinePlaceholder":615},[46,47045,47046],{"class":48,"line":18663},[46,47047,36409],{"class":2253},[46,47049,47050],{"class":48,"line":18677},[46,47051,36414],{"class":2253},[46,47053,47054,47056,47058,47060,47062,47064,47066],{"class":48,"line":18697},[46,47055,33216],{"class":56},[46,47057,79],{"class":52},[46,47059,33223],{"class":173},[46,47061,3744],{"class":52},[46,47063,33228],{"class":56},[46,47065,3741],{"class":52},[46,47067,36092],{"class":173},[46,47069,47070,47072,47074],{"class":48,"line":18703},[46,47071,33268],{"class":56},[46,47073,79],{"class":52},[46,47075,34264],{"class":56},[46,47077,47078],{"class":48,"line":18714},[46,47079,36443],{"class":2253},[46,47081,47082],{"class":48,"line":18737},[46,47083,36448],{"class":2253},[46,47085,47086,47088,47090,47092,47094,47096,47098,47100,47102,47104,47106,47108,47110,47112,47114,47116,47118,47120,47122,47124,47126,47128,47130],{"class":48,"line":18759},[46,47087,36453],{"class":56},[46,47089,79],{"class":52},[46,47091,3076],{"class":56},[46,47093,36460],{"class":173},[46,47095,2565],{"class":56},[46,47097,36465],{"class":173},[46,47099,2565],{"class":56},[46,47101,36470],{"class":173},[46,47103,2565],{"class":56},[46,47105,36475],{"class":173},[46,47107,2565],{"class":56},[46,47109,36480],{"class":173},[46,47111,2565],{"class":56},[46,47113,36485],{"class":173},[46,47115,2565],{"class":56},[46,47117,36490],{"class":173},[46,47119,2565],{"class":56},[46,47121,36495],{"class":173},[46,47123,2565],{"class":56},[46,47125,36500],{"class":173},[46,47127,2565],{"class":56},[46,47129,36505],{"class":173},[46,47131,35220],{"class":56},[46,47133,47134,47136],{"class":48,"line":18764},[46,47135,797],{"class":52},[46,47137,34858],{"class":56},[46,47139,47140],{"class":48,"line":18770},[46,47141,36518],{"class":2253},[46,47143,47144,47146,47148,47150],{"class":48,"line":18784},[46,47145,5422],{"class":52},[46,47147,36525],{"class":56},[46,47149,1146],{"class":52},[46,47151,36169],{"class":56},[46,47153,47154,47156,47158],{"class":48,"line":18797},[46,47155,34584],{"class":56},[46,47157,79],{"class":52},[46,47159,34589],{"class":56},[46,47161,47162,47164,47166],{"class":48,"line":18802},[46,47163,34599],{"class":56},[46,47165,79],{"class":52},[46,47167,34604],{"class":56},[46,47169,47170],{"class":48,"line":18816},[46,47171,616],{"emptyLinePlaceholder":615},[46,47173,47174],{"class":48,"line":18821},[46,47175,36554],{"class":2253},[46,47177,47178],{"class":48,"line":18827},[46,47179,34849],{"class":56},[46,47181,47182],{"class":48,"line":18832},[46,47183,36563],{"class":2253},[46,47185,47186,47188,47190],{"class":48,"line":18846},[46,47187,34634],{"class":56},[46,47189,79],{"class":52},[46,47191,34639],{"class":56},[46,47193,47194],{"class":48,"line":18851},[46,47195,36576],{"class":2253},[46,47197,47198,47200,47202,47204,47206,47208,47210],{"class":48,"line":18856},[46,47199,34651],{"class":56},[46,47201,79],{"class":52},[46,47203,34656],{"class":56},[46,47205,34659],{"class":439},[46,47207,79],{"class":52},[46,47209,2405],{"class":180},[46,47211,459],{"class":56},[46,47213,47214],{"class":48,"line":18870},[46,47215,36597],{"class":2253},[46,47217,47218,47220,47222],{"class":48,"line":18882},[46,47219,36602],{"class":56},[46,47221,79],{"class":52},[46,47223,36607],{"class":56},[46,47225,47226,47228,47230],{"class":48,"line":18887},[46,47227,36612],{"class":56},[46,47229,79],{"class":52},[46,47231,36617],{"class":56},[46,47233,47234,47236,47238,47240,47242,47244,47246,47248],{"class":48,"line":18900},[46,47235,36622],{"class":180},[46,47237,1152],{"class":56},[46,47239,36627],{"class":173},[46,47241,36630],{"class":56},[46,47243,36633],{"class":173},[46,47245,2565],{"class":56},[46,47247,36638],{"class":173},[46,47249,36641],{"class":56},[479,47251,47253],{"id":47252},"_24训练自己的数据集","2.4.训练自己的数据集",[19,47255,47256],{},"猫狗分类任务",[19,47258,47259],{},"划分数据集和验证集",[36,47261,47263],{"className":38,"code":47262,"language":40,"meta":41,"style":41},"# 创建脚本，用于划分数据集和验证集\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",[43,47264,47265,47270,47277,47282,47293,47300,47304,47314,47328,47337,47341,47346,47356,47376,47380,47385,47395,47406,47419,47423,47428,47437,47447,47458,47462,47467,47477,47481,47486,47491,47496,47501,47506,47510,47520,47547,47560,47572,47599,47604,47609,47623,47628,47640,47655,47670,47678,47682,47687,47693,47705,47718,47723,47728,47733,47783,47789,47793],{"__ignoreMap":41},[46,47266,47267],{"class":48,"line":49},[46,47268,47269],{"class":2253},"# 创建脚本，用于划分数据集和验证集\n",[46,47271,47272,47274],{"class":48,"line":60},[46,47273,53],{"class":52},[46,47275,47276],{"class":56}," os\n",[46,47278,47279],{"class":48,"line":200},[46,47280,47281],{"class":2253},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[46,47283,47284,47286,47289,47291],{"class":48,"line":211},[46,47285,957],{"class":52},[46,47287,47288],{"class":56}," shutil ",[46,47290,53],{"class":52},[46,47292,33799],{"class":56},[46,47294,47295,47297],{"class":48,"line":222},[46,47296,53],{"class":52},[46,47298,47299],{"class":56}," random\n",[46,47301,47302],{"class":48,"line":636},[46,47303,616],{"emptyLinePlaceholder":615},[46,47305,47306,47308,47311],{"class":48,"line":641},[46,47307,748],{"class":52},[46,47309,47310],{"class":169}," mkfile",[46,47312,47313],{"class":56},"(file):\n",[46,47315,47316,47318,47320,47323,47326],{"class":48,"line":653},[46,47317,5121],{"class":52},[46,47319,40902],{"class":52},[46,47321,47322],{"class":56}," os.path.exists(",[46,47324,47325],{"class":439},"file",[46,47327,1158],{"class":56},[46,47329,47330,47333,47335],{"class":48,"line":659},[46,47331,47332],{"class":56},"        os.makedirs(",[46,47334,47325],{"class":439},[46,47336,459],{"class":56},[46,47338,47339],{"class":48,"line":665},[46,47340,616],{"emptyLinePlaceholder":615},[46,47342,47343],{"class":48,"line":670},[46,47344,47345],{"class":2253},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[46,47347,47348,47351,47353],{"class":48,"line":676},[46,47349,47350],{"class":56},"file_path",[46,47352,79],{"class":52},[46,47354,47355],{"class":173},"'data_cat_dog'\n",[46,47357,47358,47361,47363,47366,47368,47371,47373],{"class":48,"line":682},[46,47359,47360],{"class":56},"flower_class",[46,47362,79],{"class":52},[46,47364,47365],{"class":56},"[cla ",[46,47367,1713],{"class":52},[46,47369,47370],{"class":56}," cla ",[46,47372,1146],{"class":52},[46,47374,47375],{"class":56}," os.listdir(file_path)]\n",[46,47377,47378],{"class":48,"line":688},[46,47379,616],{"emptyLinePlaceholder":615},[46,47381,47382],{"class":48,"line":693},[46,47383,47384],{"class":2253},"# 创建训练集train文件夹\n",[46,47386,47387,47390,47393],{"class":48,"line":699},[46,47388,47389],{"class":56},"mkfile(",[46,47391,47392],{"class":173},"'data\u002Ftrain'",[46,47394,459],{"class":56},[46,47396,47397,47399,47401,47403],{"class":48,"line":705},[46,47398,1713],{"class":52},[46,47400,47370],{"class":56},[46,47402,1146],{"class":52},[46,47404,47405],{"class":56}," flower_class:\n",[46,47407,47408,47411,47414,47416],{"class":48,"line":711},[46,47409,47410],{"class":56},"    mkfile(",[46,47412,47413],{"class":173},"'data\u002Ftrain\u002F'",[46,47415,2668],{"class":52},[46,47417,47418],{"class":56},"cla)\n",[46,47420,47421],{"class":48,"line":717},[46,47422,616],{"emptyLinePlaceholder":615},[46,47424,47425],{"class":48,"line":723},[46,47426,47427],{"class":2253},"# 创建验证集val文件夹\n",[46,47429,47430,47432,47435],{"class":48,"line":729},[46,47431,47389],{"class":56},[46,47433,47434],{"class":173},"'data\u002Ftest'",[46,47436,459],{"class":56},[46,47438,47439,47441,47443,47445],{"class":48,"line":735},[46,47440,1713],{"class":52},[46,47442,47370],{"class":56},[46,47444,1146],{"class":52},[46,47446,47405],{"class":56},[46,47448,47449,47451,47454,47456],{"class":48,"line":740},[46,47450,47410],{"class":56},[46,47452,47453],{"class":173},"'data\u002Ftest\u002F'",[46,47455,2668],{"class":52},[46,47457,47418],{"class":56},[46,47459,47460],{"class":48,"line":745},[46,47461,616],{"emptyLinePlaceholder":615},[46,47463,47464],{"class":48,"line":763},[46,47465,47466],{"class":2253},"# 划分比例，训练集：测试集=9：1\n",[46,47468,47469,47472,47474],{"class":48,"line":778},[46,47470,47471],{"class":56},"split_rate",[46,47473,79],{"class":52},[46,47475,47476],{"class":180},"0.1\n",[46,47478,47479],{"class":48,"line":789},[46,47480,616],{"emptyLinePlaceholder":615},[46,47482,47483],{"class":48,"line":794},[46,47484,47485],{"class":2253},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[46,47487,47488],{"class":48,"line":806},[46,47489,47490],{"class":2253},"# cla_path：当前类别的原始图片路径\n",[46,47492,47493],{"class":48,"line":829},[46,47494,47495],{"class":2253},"# images：当前类别下所有图片的文件名列表\n",[46,47497,47498],{"class":48,"line":840},[46,47499,47500],{"class":2253},"# num：该类别图片总数\n",[46,47502,47503],{"class":48,"line":846},[46,47504,47505],{"class":2253},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[46,47507,47508],{"class":48,"line":852},[46,47509,616],{"emptyLinePlaceholder":615},[46,47511,47512,47514,47516,47518],{"class":48,"line":857},[46,47513,1713],{"class":52},[46,47515,47370],{"class":56},[46,47517,1146],{"class":52},[46,47519,47405],{"class":56},[46,47521,47522,47525,47527,47530,47532,47535,47538,47540,47542,47544],{"class":48,"line":875},[46,47523,47524],{"class":56},"    cla_path ",[46,47526,79],{"class":52},[46,47528,47529],{"class":56}," file_path ",[46,47531,2668],{"class":52},[46,47533,47534],{"class":173}," '\u002F'",[46,47536,47537],{"class":52}," +",[46,47539,47370],{"class":56},[46,47541,2668],{"class":52},[46,47543,47534],{"class":173},[46,47545,47546],{"class":2253},"  # 某一类别的子目录\n",[46,47548,47549,47552,47554,47557],{"class":48,"line":892},[46,47550,47551],{"class":56},"    images ",[46,47553,79],{"class":52},[46,47555,47556],{"class":56}," os.listdir(cla_path)  ",[46,47558,47559],{"class":2253},"# iamges 列表存储了该目录下所有图像的名称\n",[46,47561,47562,47565,47567,47569],{"class":48,"line":898},[46,47563,47564],{"class":56},"    num ",[46,47566,79],{"class":52},[46,47568,9344],{"class":180},[46,47570,47571],{"class":56},"(images)\n",[46,47573,47574,47577,47579,47582,47584,47586,47588,47591,47593,47596],{"class":48,"line":903},[46,47575,47576],{"class":56},"    eval_index ",[46,47578,79],{"class":52},[46,47580,47581],{"class":56}," random.sample(images, ",[46,47583,2680],{"class":439},[46,47585,79],{"class":52},[46,47587,2201],{"class":180},[46,47589,47590],{"class":56},"(num ",[46,47592,2642],{"class":52},[46,47594,47595],{"class":56}," split_rate))  ",[46,47597,47598],{"class":2253},"# 从images列表中随机抽取 k 个图像名称\n",[46,47600,47601],{"class":48,"line":908},[46,47602,47603],{"class":2253},"    # 遍历该类别下的所有图片\n",[46,47605,47606],{"class":48,"line":925},[46,47607,47608],{"class":2253},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[46,47610,47611,47613,47616,47618,47620],{"class":48,"line":1238},[46,47612,1140],{"class":52},[46,47614,47615],{"class":56}," index, image ",[46,47617,1146],{"class":52},[46,47619,33583],{"class":180},[46,47621,47622],{"class":56},"(images):\n",[46,47624,47625],{"class":48,"line":1251},[46,47626,47627],{"class":2253},"        # eval_index 中保存验证集val的图像名称\n",[46,47629,47630,47632,47635,47637],{"class":48,"line":1256},[46,47631,4525],{"class":52},[46,47633,47634],{"class":56}," image ",[46,47636,1146],{"class":52},[46,47638,47639],{"class":56}," eval_index:\n",[46,47641,47642,47645,47647,47650,47652],{"class":48,"line":1261},[46,47643,47644],{"class":56},"            image_path ",[46,47646,79],{"class":52},[46,47648,47649],{"class":56}," cla_path ",[46,47651,2668],{"class":52},[46,47653,47654],{"class":56}," image\n",[46,47656,47657,47660,47662,47665,47667],{"class":48,"line":1274},[46,47658,47659],{"class":56},"            new_path ",[46,47661,79],{"class":52},[46,47663,47664],{"class":173}," 'data\u002Ftest\u002F'",[46,47666,47537],{"class":52},[46,47668,47669],{"class":56}," cla\n",[46,47671,47672,47675],{"class":48,"line":10061},[46,47673,47674],{"class":56},"            copy(image_path, new_path)  ",[46,47676,47677],{"class":2253},"# 将选中的图像复制到新路径\n",[46,47679,47680],{"class":48,"line":11720},[46,47681,616],{"emptyLinePlaceholder":615},[46,47683,47684],{"class":48,"line":11745},[46,47685,47686],{"class":2253},"        # 其余的图像保存在训练集train中\n",[46,47688,47689,47691],{"class":48,"line":11768},[46,47690,4562],{"class":52},[46,47692,760],{"class":56},[46,47694,47695,47697,47699,47701,47703],{"class":48,"line":11792},[46,47696,47644],{"class":56},[46,47698,79],{"class":52},[46,47700,47649],{"class":56},[46,47702,2668],{"class":52},[46,47704,47654],{"class":56},[46,47706,47707,47709,47711,47714,47716],{"class":48,"line":11797},[46,47708,47659],{"class":56},[46,47710,79],{"class":52},[46,47712,47713],{"class":173}," 'data\u002Ftrain\u002F'",[46,47715,47537],{"class":52},[46,47717,47669],{"class":56},[46,47719,47720],{"class":48,"line":11802},[46,47721,47722],{"class":56},"            copy(image_path, new_path)\n",[46,47724,47725],{"class":48,"line":11807},[46,47726,47727],{"class":2253},"            # 打印进度条信息\n",[46,47729,47730],{"class":48,"line":11816},[46,47731,47732],{"class":2253},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[46,47734,47735,47737,47739,47741,47744,47746,47748,47751,47753,47755,47757,47760,47763,47765,47767,47770,47773,47775,47777,47780],{"class":48,"line":11821},[46,47736,34425],{"class":180},[46,47738,1152],{"class":56},[46,47740,2439],{"class":173},[46,47742,47743],{"class":180},"\\r",[46,47745,3076],{"class":173},[46,47747,34433],{"class":180},[46,47749,47750],{"class":173},"] processing [",[46,47752,34433],{"class":180},[46,47754,2770],{"class":173},[46,47756,34433],{"class":180},[46,47758,47759],{"class":173},"]\"",[46,47761,47762],{"class":56},".format(cla, index ",[46,47764,2668],{"class":52},[46,47766,27110],{"class":180},[46,47768,47769],{"class":56},", num), ",[46,47771,47772],{"class":439},"end",[46,47774,79],{"class":52},[46,47776,9665],{"class":173},[46,47778,47779],{"class":56},")  ",[46,47781,47782],{"class":2253},"# processing bar\n",[46,47784,47785,47787],{"class":48,"line":11827},[46,47786,1227],{"class":180},[46,47788,4006],{"class":56},[46,47790,47791],{"class":48,"line":11848},[46,47792,616],{"emptyLinePlaceholder":615},[46,47794,47795,47797,47799,47802],{"class":48,"line":11854},[46,47796,32398],{"class":180},[46,47798,1152],{"class":56},[46,47800,47801],{"class":173},"\"processing done!\"",[46,47803,459],{"class":56},[19,47805,47806],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[23999,47808,47810],{"id":47809},"_242模型代码","2.4.2.模型代码",[19,47812,47813],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[36,47815,47817],{"className":38,"code":47816,"language":40,"meta":41,"style":41},"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",[43,47818,47819,47825,47835,47845,47849,47865,47873,47887,47897,47901,47931,47935,47969,48015,48019,48053,48099,48103,48107,48141,48171,48175,48183,48197,48219,48241,48259,48263,48277,48281,48285,48301,48305,48313,48327,48337,48381,48385,48413,48417,48427,48455,48459,48495,48499,48527,48531,48541,48573,48605,48633,48637,48647,48679,48711,48743,48775,48807,48835,48839,48849,48881,48913,48925,48929,48941,48945,48949,48961,48969,48989,48993,48997,49001,49005,49009,49013,49027,49035,49043,49055,49069,49077,49081,49089,49099,49109,49119,49129,49139,49145,49149,49153,49165,49185,49193],{"__ignoreMap":41},[46,47820,47821,47823],{"class":48,"line":49},[46,47822,53],{"class":52},[46,47824,32378],{"class":56},[46,47826,47827,47829,47831,47833],{"class":48,"line":60},[46,47828,957],{"class":52},[46,47830,32721],{"class":56},[46,47832,53],{"class":52},[46,47834,32726],{"class":56},[46,47836,47837,47839,47841,47843],{"class":48,"line":200},[46,47838,957],{"class":52},[46,47840,32738],{"class":56},[46,47842,53],{"class":52},[46,47844,32743],{"class":56},[46,47846,47847],{"class":48,"line":211},[46,47848,616],{"emptyLinePlaceholder":615},[46,47850,47851,47853,47855,47857,47859,47861,47863],{"class":48,"line":222},[46,47852,16696],{"class":52},[46,47854,43465],{"class":169},[46,47856,1152],{"class":56},[46,47858,32759],{"class":169},[46,47860,2744],{"class":56},[46,47862,32764],{"class":169},[46,47864,1158],{"class":56},[46,47866,47867,47869,47871],{"class":48,"line":636},[46,47868,32781],{"class":52},[46,47870,32784],{"class":180},[46,47872,43484],{"class":56},[46,47874,47875,47877,47879,47881,47883,47885],{"class":48,"line":641},[46,47876,32797],{"class":180},[46,47878,43491],{"class":56},[46,47880,32803],{"class":180},[46,47882,32806],{"class":56},[46,47884,32809],{"class":180},[46,47886,4006],{"class":56},[46,47888,47889,47891,47893,47895],{"class":48,"line":653},[46,47890,32825],{"class":180},[46,47892,36743],{"class":56},[46,47894,79],{"class":52},[46,47896,36748],{"class":56},[46,47898,47899],{"class":48,"line":659},[46,47900,43514],{"class":2253},[46,47902,47903,47905,47907,47909,47911,47913,47915,47917,47919,47921,47923,47925,47927,47929],{"class":48,"line":665},[46,47904,32825],{"class":180},[46,47906,43521],{"class":56},[46,47908,79],{"class":52},[46,47910,32833],{"class":56},[46,47912,32836],{"class":439},[46,47914,79],{"class":52},[46,47916,43532],{"class":56},[46,47918,32845],{"class":439},[46,47920,79],{"class":52},[46,47922,43539],{"class":56},[46,47924,32854],{"class":439},[46,47926,79],{"class":52},[46,47928,2405],{"class":180},[46,47930,459],{"class":56},[46,47932,47933],{"class":48,"line":670},[46,47934,43552],{"class":2253},[46,47936,47937,47939,47941,47943,47945,47947,47949,47951,47953,47955,47957,47959,47961,47963,47965,47967],{"class":48,"line":676},[46,47938,32825],{"class":180},[46,47940,43559],{"class":56},[46,47942,79],{"class":52},[46,47944,32833],{"class":56},[46,47946,32836],{"class":439},[46,47948,79],{"class":52},[46,47950,43532],{"class":56},[46,47952,32845],{"class":439},[46,47954,79],{"class":52},[46,47956,43576],{"class":56},[46,47958,2379],{"class":180},[46,47960,43581],{"class":56},[46,47962,32854],{"class":439},[46,47964,79],{"class":52},[46,47966,2405],{"class":180},[46,47968,459],{"class":56},[46,47970,47971,47973,47975,47977,47979,47981,47983,47985,47987,47989,47991,47993,47995,47997,47999,48001,48003,48005,48007,48009,48011,48013],{"class":48,"line":682},[46,47972,32825],{"class":180},[46,47974,43596],{"class":56},[46,47976,79],{"class":52},[46,47978,32833],{"class":56},[46,47980,32836],{"class":439},[46,47982,79],{"class":52},[46,47984,43576],{"class":56},[46,47986,2379],{"class":180},[46,47988,43581],{"class":56},[46,47990,32845],{"class":439},[46,47992,79],{"class":52},[46,47994,43576],{"class":56},[46,47996,2405],{"class":180},[46,47998,43581],{"class":56},[46,48000,32854],{"class":439},[46,48002,79],{"class":52},[46,48004,2266],{"class":180},[46,48006,2565],{"class":56},[46,48008,32863],{"class":439},[46,48010,79],{"class":52},[46,48012,2405],{"class":180},[46,48014,459],{"class":56},[46,48016,48017],{"class":48,"line":688},[46,48018,43641],{"class":2253},[46,48020,48021,48023,48025,48027,48029,48031,48033,48035,48037,48039,48041,48043,48045,48047,48049,48051],{"class":48,"line":693},[46,48022,32825],{"class":180},[46,48024,43648],{"class":56},[46,48026,79],{"class":52},[46,48028,32833],{"class":56},[46,48030,32836],{"class":439},[46,48032,79],{"class":52},[46,48034,43532],{"class":56},[46,48036,32845],{"class":439},[46,48038,79],{"class":52},[46,48040,43665],{"class":56},[46,48042,2379],{"class":180},[46,48044,43581],{"class":56},[46,48046,32854],{"class":439},[46,48048,79],{"class":52},[46,48050,2405],{"class":180},[46,48052,459],{"class":56},[46,48054,48055,48057,48059,48061,48063,48065,48067,48069,48071,48073,48075,48077,48079,48081,48083,48085,48087,48089,48091,48093,48095,48097],{"class":48,"line":699},[46,48056,32825],{"class":180},[46,48058,43684],{"class":56},[46,48060,79],{"class":52},[46,48062,32833],{"class":56},[46,48064,32836],{"class":439},[46,48066,79],{"class":52},[46,48068,43665],{"class":56},[46,48070,2379],{"class":180},[46,48072,43581],{"class":56},[46,48074,32845],{"class":439},[46,48076,79],{"class":52},[46,48078,43665],{"class":56},[46,48080,2405],{"class":180},[46,48082,43581],{"class":56},[46,48084,32854],{"class":439},[46,48086,79],{"class":52},[46,48088,2506],{"class":180},[46,48090,2565],{"class":56},[46,48092,32863],{"class":439},[46,48094,79],{"class":52},[46,48096,2272],{"class":180},[46,48098,459],{"class":56},[46,48100,48101],{"class":48,"line":705},[46,48102,43729],{"class":2253},[46,48104,48105],{"class":48,"line":711},[46,48106,43734],{"class":2253},[46,48108,48109,48111,48113,48115,48117,48119,48121,48123,48125,48127,48129,48131,48133,48135,48137,48139],{"class":48,"line":717},[46,48110,32825],{"class":180},[46,48112,43741],{"class":56},[46,48114,79],{"class":52},[46,48116,36801],{"class":56},[46,48118,32854],{"class":439},[46,48120,79],{"class":52},[46,48122,2266],{"class":180},[46,48124,2565],{"class":56},[46,48126,32909],{"class":439},[46,48128,79],{"class":52},[46,48130,2405],{"class":180},[46,48132,2565],{"class":56},[46,48134,32863],{"class":439},[46,48136,79],{"class":52},[46,48138,2405],{"class":180},[46,48140,459],{"class":56},[46,48142,48143,48145,48147,48149,48151,48153,48155,48157,48159,48161,48163,48165,48167,48169],{"class":48,"line":723},[46,48144,32825],{"class":180},[46,48146,43776],{"class":56},[46,48148,79],{"class":52},[46,48150,32833],{"class":56},[46,48152,32836],{"class":439},[46,48154,79],{"class":52},[46,48156,43532],{"class":56},[46,48158,32845],{"class":439},[46,48160,79],{"class":52},[46,48162,43793],{"class":56},[46,48164,32854],{"class":439},[46,48166,79],{"class":52},[46,48168,2405],{"class":180},[46,48170,459],{"class":56},[46,48172,48173],{"class":48,"line":729},[46,48174,616],{"emptyLinePlaceholder":615},[46,48176,48177,48179,48181],{"class":48,"line":735},[46,48178,32781],{"class":52},[46,48180,33073],{"class":169},[46,48182,33076],{"class":56},[46,48184,48185,48187,48189,48191,48193,48195],{"class":48,"line":740},[46,48186,43818],{"class":56},[46,48188,79],{"class":52},[46,48190,32803],{"class":180},[46,48192,37156],{"class":56},[46,48194,32803],{"class":180},[46,48196,43829],{"class":56},[46,48198,48199,48201,48203,48205,48207,48209,48211,48213,48215,48217],{"class":48,"line":745},[46,48200,9098],{"class":56},[46,48202,79],{"class":52},[46,48204,32803],{"class":180},[46,48206,37156],{"class":56},[46,48208,32803],{"class":180},[46,48210,43844],{"class":56},[46,48212,32803],{"class":180},[46,48214,37156],{"class":56},[46,48216,32803],{"class":180},[46,48218,43853],{"class":56},[46,48220,48221,48223,48225,48227,48229,48231,48233,48235,48237,48239],{"class":48,"line":763},[46,48222,43858],{"class":56},[46,48224,79],{"class":52},[46,48226,32803],{"class":180},[46,48228,37156],{"class":56},[46,48230,32803],{"class":180},[46,48232,43869],{"class":56},[46,48234,32803],{"class":180},[46,48236,37156],{"class":56},[46,48238,32803],{"class":180},[46,48240,43878],{"class":56},[46,48242,48243,48245,48247,48249,48251,48253,48255,48257],{"class":48,"line":778},[46,48244,43883],{"class":56},[46,48246,79],{"class":52},[46,48248,32803],{"class":180},[46,48250,37156],{"class":56},[46,48252,32803],{"class":180},[46,48254,43894],{"class":56},[46,48256,32803],{"class":180},[46,48258,43899],{"class":56},[46,48260,48261],{"class":48,"line":789},[46,48262,43904],{"class":2253},[46,48264,48265,48267,48269,48271,48273,48275],{"class":48,"line":794},[46,48266,16754],{"class":52},[46,48268,43911],{"class":56},[46,48270,34659],{"class":439},[46,48272,79],{"class":52},[46,48274,2405],{"class":180},[46,48276,459],{"class":56},[46,48278,48279],{"class":48,"line":806},[46,48280,616],{"emptyLinePlaceholder":615},[46,48282,48283],{"class":48,"line":829},[46,48284,43932],{"class":2253},[46,48286,48287,48289,48291,48293,48295,48297,48299],{"class":48,"line":840},[46,48288,16696],{"class":52},[46,48290,43939],{"class":169},[46,48292,1152],{"class":56},[46,48294,32759],{"class":169},[46,48296,2744],{"class":56},[46,48298,32764],{"class":169},[46,48300,1158],{"class":56},[46,48302,48303],{"class":48,"line":846},[46,48304,43954],{"class":2253},[46,48306,48307,48309,48311],{"class":48,"line":852},[46,48308,32781],{"class":52},[46,48310,32784],{"class":180},[46,48312,43963],{"class":56},[46,48314,48315,48317,48319,48321,48323,48325],{"class":48,"line":857},[46,48316,32797],{"class":180},[46,48318,43970],{"class":56},[46,48320,32803],{"class":180},[46,48322,32806],{"class":56},[46,48324,32809],{"class":180},[46,48326,4006],{"class":56},[46,48328,48329,48331,48333,48335],{"class":48,"line":875},[46,48330,32825],{"class":180},[46,48332,43985],{"class":56},[46,48334,79],{"class":52},[46,48336,39981],{"class":56},[46,48338,48339,48341,48343,48345,48347,48349,48351,48353,48355,48357,48359,48361,48363,48365,48367,48369,48371,48373,48375,48377,48379],{"class":48,"line":892},[46,48340,39986],{"class":56},[46,48342,32836],{"class":439},[46,48344,79],{"class":52},[46,48346,2266],{"class":180},[46,48348,2565],{"class":56},[46,48350,32845],{"class":439},[46,48352,79],{"class":52},[46,48354,2391],{"class":180},[46,48356,2565],{"class":56},[46,48358,32854],{"class":439},[46,48360,79],{"class":52},[46,48362,2556],{"class":180},[46,48364,2565],{"class":56},[46,48366,32909],{"class":439},[46,48368,79],{"class":52},[46,48370,2272],{"class":180},[46,48372,2565],{"class":56},[46,48374,32863],{"class":439},[46,48376,79],{"class":52},[46,48378,2266],{"class":180},[46,48380,40019],{"class":56},[46,48382,48383],{"class":48,"line":898},[46,48384,40024],{"class":56},[46,48386,48387,48389,48391,48393,48395,48397,48399,48401,48403,48405,48407,48409,48411],{"class":48,"line":903},[46,48388,40069],{"class":56},[46,48390,32854],{"class":439},[46,48392,79],{"class":52},[46,48394,2266],{"class":180},[46,48396,2565],{"class":56},[46,48398,32909],{"class":439},[46,48400,79],{"class":52},[46,48402,2272],{"class":180},[46,48404,2565],{"class":56},[46,48406,32863],{"class":439},[46,48408,79],{"class":52},[46,48410,2405],{"class":180},[46,48412,459],{"class":56},[46,48414,48415],{"class":48,"line":908},[46,48416,40098],{"class":56},[46,48418,48419,48421,48423,48425],{"class":48,"line":925},[46,48420,32825],{"class":180},[46,48422,44076],{"class":56},[46,48424,79],{"class":52},[46,48426,39981],{"class":56},[46,48428,48429,48431,48433,48435,48437,48439,48441,48443,48445,48447,48449,48451,48453],{"class":48,"line":1238},[46,48430,39986],{"class":56},[46,48432,32836],{"class":439},[46,48434,79],{"class":52},[46,48436,2391],{"class":180},[46,48438,2565],{"class":56},[46,48440,32845],{"class":439},[46,48442,79],{"class":52},[46,48444,2391],{"class":180},[46,48446,2565],{"class":56},[46,48448,32854],{"class":439},[46,48450,79],{"class":52},[46,48452,2405],{"class":180},[46,48454,40019],{"class":56},[46,48456,48457],{"class":48,"line":1251},[46,48458,40024],{"class":56},[46,48460,48461,48463,48465,48467,48469,48471,48473,48475,48477,48479,48481,48483,48485,48487,48489,48491,48493],{"class":48,"line":1256},[46,48462,39986],{"class":56},[46,48464,32836],{"class":439},[46,48466,79],{"class":52},[46,48468,2391],{"class":180},[46,48470,2565],{"class":56},[46,48472,32845],{"class":439},[46,48474,79],{"class":52},[46,48476,44131],{"class":180},[46,48478,2565],{"class":56},[46,48480,32854],{"class":439},[46,48482,79],{"class":52},[46,48484,2266],{"class":180},[46,48486,2565],{"class":56},[46,48488,32863],{"class":439},[46,48490,79],{"class":52},[46,48492,2405],{"class":180},[46,48494,40019],{"class":56},[46,48496,48497],{"class":48,"line":1261},[46,48498,40024],{"class":56},[46,48500,48501,48503,48505,48507,48509,48511,48513,48515,48517,48519,48521,48523,48525],{"class":48,"line":1274},[46,48502,40069],{"class":56},[46,48504,32854],{"class":439},[46,48506,79],{"class":52},[46,48508,2266],{"class":180},[46,48510,2565],{"class":56},[46,48512,32909],{"class":439},[46,48514,79],{"class":52},[46,48516,2272],{"class":180},[46,48518,2565],{"class":56},[46,48520,32863],{"class":439},[46,48522,79],{"class":52},[46,48524,2405],{"class":180},[46,48526,459],{"class":56},[46,48528,48529],{"class":48,"line":10061},[46,48530,40098],{"class":56},[46,48532,48533,48535,48537,48539],{"class":48,"line":11720},[46,48534,32825],{"class":180},[46,48536,44192],{"class":56},[46,48538,79],{"class":52},[46,48540,39981],{"class":56},[46,48542,48543,48545,48547,48549,48551,48553,48555,48557,48559,48561,48563,48565,48567,48569,48571],{"class":48,"line":11745},[46,48544,44201],{"class":56},[46,48546,44131],{"class":180},[46,48548,2565],{"class":56},[46,48550,2391],{"class":180},[46,48552,44210],{"class":56},[46,48554,2397],{"class":180},[46,48556,2565],{"class":56},[46,48558,34045],{"class":180},[46,48560,44219],{"class":56},[46,48562,2787],{"class":180},[46,48564,2565],{"class":56},[46,48566,2385],{"class":180},[46,48568,44228],{"class":56},[46,48570,2385],{"class":180},[46,48572,40019],{"class":56},[46,48574,48575,48577,48579,48581,48583,48585,48587,48589,48591,48593,48595,48597,48599,48601,48603],{"class":48,"line":11768},[46,48576,44201],{"class":56},[46,48578,36842],{"class":180},[46,48580,2565],{"class":56},[46,48582,34045],{"class":180},[46,48584,44210],{"class":56},[46,48586,34045],{"class":180},[46,48588,2565],{"class":56},[46,48590,44131],{"class":180},[46,48592,44219],{"class":56},[46,48594,2385],{"class":180},[46,48596,2565],{"class":56},[46,48598,2397],{"class":180},[46,48600,44228],{"class":56},[46,48602,2391],{"class":180},[46,48604,40019],{"class":56},[46,48606,48607,48609,48611,48613,48615,48617,48619,48621,48623,48625,48627,48629,48631],{"class":48,"line":11792},[46,48608,40069],{"class":56},[46,48610,32854],{"class":439},[46,48612,79],{"class":52},[46,48614,2266],{"class":180},[46,48616,2565],{"class":56},[46,48618,32909],{"class":439},[46,48620,79],{"class":52},[46,48622,2272],{"class":180},[46,48624,2565],{"class":56},[46,48626,32863],{"class":439},[46,48628,79],{"class":52},[46,48630,2405],{"class":180},[46,48632,459],{"class":56},[46,48634,48635],{"class":48,"line":11797},[46,48636,40098],{"class":56},[46,48638,48639,48641,48643,48645],{"class":48,"line":11802},[46,48640,32825],{"class":180},[46,48642,44303],{"class":56},[46,48644,79],{"class":52},[46,48646,39981],{"class":56},[46,48648,48649,48651,48653,48655,48657,48659,48661,48663,48665,48667,48669,48671,48673,48675,48677],{"class":48,"line":11807},[46,48650,44201],{"class":56},[46,48652,445],{"class":180},[46,48654,2565],{"class":56},[46,48656,44131],{"class":180},[46,48658,44210],{"class":56},[46,48660,2397],{"class":180},[46,48662,2565],{"class":56},[46,48664,44326],{"class":180},[46,48666,44219],{"class":56},[46,48668,2787],{"class":180},[46,48670,2565],{"class":56},[46,48672,2793],{"class":180},[46,48674,44228],{"class":56},[46,48676,2391],{"class":180},[46,48678,40019],{"class":56},[46,48680,48681,48683,48685,48687,48689,48691,48693,48695,48697,48699,48701,48703,48705,48707,48709],{"class":48,"line":11816},[46,48682,44201],{"class":56},[46,48684,40429],{"class":180},[46,48686,2565],{"class":56},[46,48688,23049],{"class":180},[46,48690,44210],{"class":56},[46,48692,2804],{"class":180},[46,48694,2565],{"class":56},[46,48696,33478],{"class":180},[46,48698,44219],{"class":56},[46,48700,2986],{"class":180},[46,48702,2565],{"class":56},[46,48704,2391],{"class":180},[46,48706,44228],{"class":56},[46,48708,2391],{"class":180},[46,48710,40019],{"class":56},[46,48712,48713,48715,48717,48719,48721,48723,48725,48727,48729,48731,48733,48735,48737,48739,48741],{"class":48,"line":11821},[46,48714,44201],{"class":56},[46,48716,40429],{"class":180},[46,48718,2565],{"class":56},[46,48720,34045],{"class":180},[46,48722,44210],{"class":56},[46,48724,34045],{"class":180},[46,48726,2565],{"class":56},[46,48728,36842],{"class":180},[46,48730,44219],{"class":56},[46,48732,2986],{"class":180},[46,48734,2565],{"class":56},[46,48736,2391],{"class":180},[46,48738,44228],{"class":56},[46,48740,2391],{"class":180},[46,48742,40019],{"class":56},[46,48744,48745,48747,48749,48751,48753,48755,48757,48759,48761,48763,48765,48767,48769,48771,48773],{"class":48,"line":11827},[46,48746,44201],{"class":56},[46,48748,40429],{"class":180},[46,48750,2565],{"class":56},[46,48752,2804],{"class":180},[46,48754,44210],{"class":56},[46,48756,34045],{"class":180},[46,48758,2565],{"class":56},[46,48760,44423],{"class":180},[46,48762,44219],{"class":56},[46,48764,2385],{"class":180},[46,48766,2565],{"class":56},[46,48768,2391],{"class":180},[46,48770,44228],{"class":56},[46,48772,2391],{"class":180},[46,48774,40019],{"class":56},[46,48776,48777,48779,48781,48783,48785,48787,48789,48791,48793,48795,48797,48799,48801,48803,48805],{"class":48,"line":11848},[46,48778,44201],{"class":56},[46,48780,44444],{"class":180},[46,48782,2565],{"class":56},[46,48784,36842],{"class":180},[46,48786,44210],{"class":56},[46,48788,23049],{"class":180},[46,48790,2565],{"class":56},[46,48792,44457],{"class":180},[46,48794,44219],{"class":56},[46,48796,2385],{"class":180},[46,48798,2565],{"class":56},[46,48800,34045],{"class":180},[46,48802,44228],{"class":56},[46,48804,34045],{"class":180},[46,48806,40019],{"class":56},[46,48808,48809,48811,48813,48815,48817,48819,48821,48823,48825,48827,48829,48831,48833],{"class":48,"line":11854},[46,48810,40069],{"class":56},[46,48812,32854],{"class":439},[46,48814,79],{"class":52},[46,48816,2266],{"class":180},[46,48818,2565],{"class":56},[46,48820,32909],{"class":439},[46,48822,79],{"class":52},[46,48824,2272],{"class":180},[46,48826,2565],{"class":56},[46,48828,32863],{"class":439},[46,48830,79],{"class":52},[46,48832,2405],{"class":180},[46,48834,459],{"class":56},[46,48836,48837],{"class":48,"line":11868},[46,48838,40098],{"class":56},[46,48840,48841,48843,48845,48847],{"class":48,"line":11874},[46,48842,32825],{"class":180},[46,48844,44510],{"class":56},[46,48846,79],{"class":52},[46,48848,39981],{"class":56},[46,48850,48851,48853,48855,48857,48859,48861,48863,48865,48867,48869,48871,48873,48875,48877,48879],{"class":48,"line":11901},[46,48852,44201],{"class":56},[46,48854,44521],{"class":180},[46,48856,2565],{"class":56},[46,48858,36842],{"class":180},[46,48860,44210],{"class":56},[46,48862,23049],{"class":180},[46,48864,2565],{"class":56},[46,48866,44457],{"class":180},[46,48868,44219],{"class":56},[46,48870,2385],{"class":180},[46,48872,2565],{"class":56},[46,48874,34045],{"class":180},[46,48876,44228],{"class":56},[46,48878,34045],{"class":180},[46,48880,40019],{"class":56},[46,48882,48883,48885,48887,48889,48891,48893,48895,48897,48899,48901,48903,48905,48907,48909,48911],{"class":48,"line":11910},[46,48884,44201],{"class":56},[46,48886,44521],{"class":180},[46,48888,2565],{"class":56},[46,48890,36912],{"class":180},[46,48892,44210],{"class":56},[46,48894,44131],{"class":180},[46,48896,2565],{"class":56},[46,48898,36912],{"class":180},[46,48900,44219],{"class":56},[46,48902,2793],{"class":180},[46,48904,2565],{"class":56},[46,48906,34045],{"class":180},[46,48908,44228],{"class":56},[46,48910,34045],{"class":180},[46,48912,40019],{"class":56},[46,48914,48915,48917,48919,48921,48923],{"class":48,"line":11916},[46,48916,44584],{"class":56},[46,48918,2405],{"class":180},[46,48920,2565],{"class":56},[46,48922,2405],{"class":180},[46,48924,44593],{"class":56},[46,48926,48927],{"class":48,"line":11924},[46,48928,40762],{"class":56},[46,48930,48931,48933,48935,48937,48939],{"class":48,"line":11929},[46,48932,40767],{"class":56},[46,48934,44604],{"class":180},[46,48936,2565],{"class":56},[46,48938,2272],{"class":180},[46,48940,459],{"class":56},[46,48942,48943],{"class":48,"line":18605},[46,48944,40098],{"class":56},[46,48946,48947],{"class":48,"line":18611},[46,48948,44619],{"class":2253},[46,48950,48951,48953,48955,48957,48959],{"class":48,"line":18634},[46,48952,5422],{"class":52},[46,48954,40840],{"class":56},[46,48956,1146],{"class":52},[46,48958,40845],{"class":180},[46,48960,40848],{"class":56},[46,48962,48963,48965,48967],{"class":48,"line":18640},[46,48964,878],{"class":52},[46,48966,40860],{"class":180},[46,48968,40863],{"class":56},[46,48970,48971,48973,48975,48977,48979,48981,48983,48985,48987],{"class":48,"line":18663},[46,48972,40873],{"class":56},[46,48974,44646],{"class":439},[46,48976,79],{"class":52},[46,48978,44651],{"class":173},[46,48980,2565],{"class":56},[46,48982,40876],{"class":439},[46,48984,79],{"class":52},[46,48986,40881],{"class":173},[46,48988,459],{"class":56},[46,48990,48991],{"class":48,"line":18677},[46,48992,44666],{"class":2253},[46,48994,48995],{"class":48,"line":18697},[46,48996,44671],{"class":2253},[46,48998,48999],{"class":48,"line":18703},[46,49000,44676],{"class":2253},[46,49002,49003],{"class":48,"line":18714},[46,49004,44681],{"class":2253},[46,49006,49007],{"class":48,"line":18737},[46,49008,44686],{"class":2253},[46,49010,49011],{"class":48,"line":18759},[46,49012,44691],{"class":2253},[46,49014,49015,49017,49019,49021,49023,49025],{"class":48,"line":18764},[46,49016,40893],{"class":52},[46,49018,40896],{"class":56},[46,49020,40899],{"class":52},[46,49022,40902],{"class":52},[46,49024,40905],{"class":180},[46,49026,760],{"class":56},[46,49028,49029,49031,49033],{"class":48,"line":18770},[46,49030,40917],{"class":56},[46,49032,2379],{"class":180},[46,49034,459],{"class":56},[46,49036,49037,49039,49041],{"class":48,"line":18784},[46,49038,44718],{"class":52},[46,49040,40860],{"class":180},[46,49042,40936],{"class":56},[46,49044,49045,49047,49049,49051,49053],{"class":48,"line":18797},[46,49046,44727],{"class":56},[46,49048,2379],{"class":180},[46,49050,2565],{"class":56},[46,49052,40958],{"class":180},[46,49054,459],{"class":56},[46,49056,49057,49059,49061,49063,49065,49067],{"class":48,"line":18802},[46,49058,44740],{"class":52},[46,49060,40896],{"class":56},[46,49062,40899],{"class":52},[46,49064,40902],{"class":52},[46,49066,40905],{"class":180},[46,49068,760],{"class":56},[46,49070,49071,49073,49075],{"class":48,"line":18816},[46,49072,44755],{"class":56},[46,49074,2379],{"class":180},[46,49076,459],{"class":56},[46,49078,49079],{"class":48,"line":18821},[46,49080,37137],{"class":2253},[46,49082,49083,49085,49087],{"class":48,"line":18827},[46,49084,32781],{"class":52},[46,49086,33073],{"class":169},[46,49088,33076],{"class":56},[46,49090,49091,49093,49095,49097],{"class":48,"line":18832},[46,49092,33081],{"class":56},[46,49094,79],{"class":52},[46,49096,32803],{"class":180},[46,49098,44782],{"class":56},[46,49100,49101,49103,49105,49107],{"class":48,"line":18846},[46,49102,33081],{"class":56},[46,49104,79],{"class":52},[46,49106,32803],{"class":180},[46,49108,44793],{"class":56},[46,49110,49111,49113,49115,49117],{"class":48,"line":18851},[46,49112,33081],{"class":56},[46,49114,79],{"class":52},[46,49116,32803],{"class":180},[46,49118,44804],{"class":56},[46,49120,49121,49123,49125,49127],{"class":48,"line":18856},[46,49122,33081],{"class":56},[46,49124,79],{"class":52},[46,49126,32803],{"class":180},[46,49128,44815],{"class":56},[46,49130,49131,49133,49135,49137],{"class":48,"line":18870},[46,49132,33081],{"class":56},[46,49134,79],{"class":52},[46,49136,32803],{"class":180},[46,49138,44826],{"class":56},[46,49140,49141,49143],{"class":48,"line":18882},[46,49142,16754],{"class":52},[46,49144,33189],{"class":56},[46,49146,49147],{"class":48,"line":18887},[46,49148,616],{"emptyLinePlaceholder":615},[46,49150,49151],{"class":48,"line":18900},[46,49152,44841],{"class":2253},[46,49154,49155,49157,49159,49161,49163],{"class":48,"line":18905},[46,49156,911],{"class":52},[46,49158,914],{"class":180},[46,49160,4970],{"class":52},[46,49162,33204],{"class":173},[46,49164,760],{"class":56},[46,49166,49167,49169,49171,49173,49175,49177,49179,49181,49183],{"class":48,"line":18910},[46,49168,33216],{"class":56},[46,49170,79],{"class":52},[46,49172,32434],{"class":56},[46,49174,33223],{"class":173},[46,49176,3744],{"class":52},[46,49178,33228],{"class":56},[46,49180,3741],{"class":52},[46,49182,32458],{"class":173},[46,49184,459],{"class":56},[46,49186,49187,49189,49191],{"class":48,"line":18915},[46,49188,33268],{"class":56},[46,49190,79],{"class":52},[46,49192,44882],{"class":56},[46,49194,49195,49197,49199,49201,49203,49205,49207,49209],{"class":48,"line":18928},[46,49196,1227],{"class":180},[46,49198,33280],{"class":56},[46,49200,2405],{"class":180},[46,49202,2565],{"class":56},[46,49204,33478],{"class":180},[46,49206,2565],{"class":56},[46,49208,33478],{"class":180},[46,49210,33293],{"class":56},[23999,49212,49214],{"id":49213},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[19,49216,49217],{},"计算图片的均值与方差，用于训练中归一化处理操作",[36,49219,49221],{"className":38,"code":49220,"language":40,"meta":41,"style":41},"# 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",[43,49222,49223,49228,49238,49243,49249,49254,49264,49268,49273,49283,49287,49292,49302,49319,49323,49328,49340,49352,49383,49392,49402,49412,49416,49421,49436,49440,49445,49450,49455,49465,49470,49495,49499,49504,49519,49523,49536,49540,49545,49550,49555,49560,49565,49575,49585,49608,49616,49624,49632,49636,49648,49652,49657,49661,49665,49672,49692,49716,49723,49737,49742,49747,49751,49765,49769,49781],{"__ignoreMap":41},[46,49224,49225],{"class":48,"line":49},[46,49226,49227],{"class":2253},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[46,49229,49230,49232,49234,49236],{"class":48,"line":60},[46,49231,957],{"class":52},[46,49233,982],{"class":180},[46,49235,985],{"class":52},[46,49237,988],{"class":56},[46,49239,49240],{"class":48,"line":200},[46,49241,49242],{"class":2253},"# os 用来处理文件夹和文件路径\n",[46,49244,49245,49247],{"class":48,"line":211},[46,49246,53],{"class":52},[46,49248,47276],{"class":56},[46,49250,49251],{"class":48,"line":222},[46,49252,49253],{"class":2253},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[46,49255,49256,49258,49260,49262],{"class":48,"line":636},[46,49257,53],{"class":52},[46,49259,33358],{"class":56},[46,49261,398],{"class":52},[46,49263,33363],{"class":56},[46,49265,49266],{"class":48,"line":641},[46,49267,616],{"emptyLinePlaceholder":615},[46,49269,49270],{"class":48,"line":653},[46,49271,49272],{"class":2253},"# 文件夹路径，包含所有图片文件\n",[46,49274,49275,49278,49280],{"class":48,"line":659},[46,49276,49277],{"class":56},"folder_path ",[46,49279,79],{"class":52},[46,49281,49282],{"class":173}," 'data_cat_dog'\n",[46,49284,49285],{"class":48,"line":665},[46,49286,616],{"emptyLinePlaceholder":615},[46,49288,49289],{"class":48,"line":670},[46,49290,49291],{"class":2253},"# 初始化累积变量\n",[46,49293,49294,49297,49299],{"class":48,"line":676},[46,49295,49296],{"class":56},"total_pixels ",[46,49298,79],{"class":52},[46,49300,49301],{"class":180}," 0\n",[46,49303,49304,49307,49309,49312,49314,49316],{"class":48,"line":682},[46,49305,49306],{"class":56},"sum_normalized_pixel_values ",[46,49308,79],{"class":52},[46,49310,49311],{"class":56}," np.zeros(",[46,49313,2266],{"class":180},[46,49315,47779],{"class":56},[46,49317,49318],{"class":2253},"# 如果是RGB图像，需要三个通道的均值和方差\n",[46,49320,49321],{"class":48,"line":688},[46,49322,616],{"emptyLinePlaceholder":615},[46,49324,49325],{"class":48,"line":693},[46,49326,49327],{"class":2253},"# 遍历文件夹中的图片文件\n",[46,49329,49330,49332,49335,49337],{"class":48,"line":699},[46,49331,1713],{"class":52},[46,49333,49334],{"class":56}," root, dirs, files ",[46,49336,1146],{"class":52},[46,49338,49339],{"class":56}," os.walk(folder_path):\n",[46,49341,49342,49344,49347,49349],{"class":48,"line":705},[46,49343,1140],{"class":52},[46,49345,49346],{"class":56}," filename ",[46,49348,1146],{"class":52},[46,49350,49351],{"class":56}," files:\n",[46,49353,49354,49356,49359,49362,49364,49367,49369,49372,49374,49377,49380],{"class":48,"line":711},[46,49355,4525],{"class":52},[46,49357,49358],{"class":56}," filename.endswith((",[46,49360,49361],{"class":173},"'.jpg'",[46,49363,448],{"class":56},[46,49365,49366],{"class":173},"'.jpeg'",[46,49368,448],{"class":56},[46,49370,49371],{"class":173},"'.png'",[46,49373,448],{"class":56},[46,49375,49376],{"class":173},"'.bmp'",[46,49378,49379],{"class":56},")):  ",[46,49381,49382],{"class":2253},"# 可根据实际情况添加其他格式\n",[46,49384,49385,49387,49389],{"class":48,"line":717},[46,49386,47644],{"class":56},[46,49388,79],{"class":52},[46,49390,49391],{"class":56}," os.path.join(root, filename)\n",[46,49393,49394,49397,49399],{"class":48,"line":723},[46,49395,49396],{"class":56},"            image ",[46,49398,79],{"class":52},[46,49400,49401],{"class":56}," Image.open(image_path)\n",[46,49403,49404,49407,49409],{"class":48,"line":729},[46,49405,49406],{"class":56},"            image_array ",[46,49408,79],{"class":52},[46,49410,49411],{"class":56}," np.array(image)\n",[46,49413,49414],{"class":48,"line":735},[46,49415,616],{"emptyLinePlaceholder":615},[46,49417,49418],{"class":48,"line":740},[46,49419,49420],{"class":2253},"            # 归一化像素值到0-1之间\n",[46,49422,49423,49426,49428,49431,49433],{"class":48,"line":745},[46,49424,49425],{"class":56},"            normalized_image_array ",[46,49427,79],{"class":52},[46,49429,49430],{"class":56}," image_array ",[46,49432,2770],{"class":52},[46,49434,49435],{"class":180}," 255.0\n",[46,49437,49438],{"class":48,"line":763},[46,49439,616],{"emptyLinePlaceholder":615},[46,49441,49442],{"class":48,"line":778},[46,49443,49444],{"class":2253},"            # print(image_path)\n",[46,49446,49447],{"class":48,"line":789},[46,49448,49449],{"class":2253},"            # print(normalized_image_array.shape)\n",[46,49451,49452],{"class":48,"line":794},[46,49453,49454],{"class":2253},"            # 累积归一化后的像素值和像素数量\n",[46,49456,49457,49460,49462],{"class":48,"line":806},[46,49458,49459],{"class":56},"            total_pixels ",[46,49461,11481],{"class":52},[46,49463,49464],{"class":56}," normalized_image_array.size\n",[46,49466,49467],{"class":48,"line":829},[46,49468,49469],{"class":2253},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[46,49471,49472,49475,49477,49480,49483,49485,49487,49489,49491,49493],{"class":48,"line":840},[46,49473,49474],{"class":56},"            sum_normalized_pixel_values ",[46,49476,11481],{"class":52},[46,49478,49479],{"class":56}," np.sum(normalized_image_array, ",[46,49481,49482],{"class":439},"axis",[46,49484,79],{"class":52},[46,49486,1152],{"class":56},[46,49488,2379],{"class":180},[46,49490,448],{"class":56},[46,49492,2405],{"class":180},[46,49494,32479],{"class":56},[46,49496,49497],{"class":48,"line":846},[46,49498,616],{"emptyLinePlaceholder":615},[46,49500,49501],{"class":48,"line":852},[46,49502,49503],{"class":2253},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[46,49505,49506,49509,49511,49514,49516],{"class":48,"line":857},[46,49507,49508],{"class":56},"mean ",[46,49510,79],{"class":52},[46,49512,49513],{"class":56}," sum_normalized_pixel_values ",[46,49515,2770],{"class":52},[46,49517,49518],{"class":56}," total_pixels\n",[46,49520,49521],{"class":48,"line":875},[46,49522,616],{"emptyLinePlaceholder":615},[46,49524,49525,49528,49530,49532,49534],{"class":48,"line":892},[46,49526,49527],{"class":56},"sum_squared_diff ",[46,49529,79],{"class":52},[46,49531,49311],{"class":56},[46,49533,2266],{"class":180},[46,49535,459],{"class":56},[46,49537,49538],{"class":48,"line":898},[46,49539,616],{"emptyLinePlaceholder":615},[46,49541,49542],{"class":48,"line":903},[46,49543,49544],{"class":2253},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[46,49546,49547],{"class":48,"line":908},[46,49548,49549],{"class":2253},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[46,49551,49552],{"class":48,"line":925},[46,49553,49554],{"class":2253},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[46,49556,49557],{"class":48,"line":1238},[46,49558,49559],{"class":2253},"# Image.open(image_path)：打开图片\n",[46,49561,49562],{"class":48,"line":1251},[46,49563,49564],{"class":2253},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[46,49566,49567,49569,49571,49573],{"class":48,"line":1256},[46,49568,1713],{"class":52},[46,49570,49334],{"class":56},[46,49572,1146],{"class":52},[46,49574,49339],{"class":56},[46,49576,49577,49579,49581,49583],{"class":48,"line":1261},[46,49578,1140],{"class":52},[46,49580,49346],{"class":56},[46,49582,1146],{"class":52},[46,49584,49351],{"class":56},[46,49586,49587,49589,49591,49593,49595,49597,49599,49601,49603,49605],{"class":48,"line":1274},[46,49588,4525],{"class":52},[46,49590,49358],{"class":56},[46,49592,49361],{"class":173},[46,49594,448],{"class":56},[46,49596,49366],{"class":173},[46,49598,448],{"class":56},[46,49600,49371],{"class":173},[46,49602,448],{"class":56},[46,49604,49376],{"class":173},[46,49606,49607],{"class":56},")):\n",[46,49609,49610,49612,49614],{"class":48,"line":10061},[46,49611,47644],{"class":56},[46,49613,79],{"class":52},[46,49615,49391],{"class":56},[46,49617,49618,49620,49622],{"class":48,"line":11720},[46,49619,49396],{"class":56},[46,49621,79],{"class":52},[46,49623,49401],{"class":56},[46,49625,49626,49628,49630],{"class":48,"line":11745},[46,49627,49406],{"class":56},[46,49629,79],{"class":52},[46,49631,49411],{"class":56},[46,49633,49634],{"class":48,"line":11768},[46,49635,49420],{"class":2253},[46,49637,49638,49640,49642,49644,49646],{"class":48,"line":11792},[46,49639,49425],{"class":56},[46,49641,79],{"class":52},[46,49643,49430],{"class":56},[46,49645,2770],{"class":52},[46,49647,49435],{"class":180},[46,49649,49650],{"class":48,"line":11797},[46,49651,49449],{"class":2253},[46,49653,49654],{"class":48,"line":11802},[46,49655,49656],{"class":2253},"            # print(mean.shape)\n",[46,49658,49659],{"class":48,"line":11807},[46,49660,49444],{"class":2253},[46,49662,49663],{"class":48,"line":11816},[46,49664,616],{"emptyLinePlaceholder":615},[46,49666,49667,49670],{"class":48,"line":11821},[46,49668,49669],{"class":52},"            try",[46,49671,760],{"class":56},[46,49673,49674,49677,49679,49682,49684,49687,49689],{"class":48,"line":11827},[46,49675,49676],{"class":56},"                diff ",[46,49678,79],{"class":52},[46,49680,49681],{"class":56}," (normalized_image_array ",[46,49683,534],{"class":52},[46,49685,49686],{"class":56}," mean) ",[46,49688,12665],{"class":52},[46,49690,49691],{"class":180}," 2\n",[46,49693,49694,49697,49699,49702,49704,49706,49708,49710,49712,49714],{"class":48,"line":11848},[46,49695,49696],{"class":56},"                sum_squared_diff ",[46,49698,11481],{"class":52},[46,49700,49701],{"class":56}," np.sum(diff, ",[46,49703,49482],{"class":439},[46,49705,79],{"class":52},[46,49707,1152],{"class":56},[46,49709,2379],{"class":180},[46,49711,448],{"class":56},[46,49713,2405],{"class":180},[46,49715,32479],{"class":56},[46,49717,49718,49721],{"class":48,"line":11854},[46,49719,49720],{"class":52},"            except",[46,49722,760],{"class":56},[46,49724,49725,49728,49730,49732,49735],{"class":48,"line":11868},[46,49726,49727],{"class":180},"                print",[46,49729,1152],{"class":56},[46,49731,2247],{"class":52},[46,49733,49734],{"class":173},"\"捕获到自定义异常\"",[46,49736,459],{"class":56},[46,49738,49739],{"class":48,"line":11874},[46,49740,49741],{"class":2253},"            # diff = (normalized_image_array - mean) ** 2\n",[46,49743,49744],{"class":48,"line":11901},[46,49745,49746],{"class":2253},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[46,49748,49749],{"class":48,"line":11910},[46,49750,616],{"emptyLinePlaceholder":615},[46,49752,49753,49756,49758,49761,49763],{"class":48,"line":11916},[46,49754,49755],{"class":56},"variance ",[46,49757,79],{"class":52},[46,49759,49760],{"class":56}," sum_squared_diff ",[46,49762,2770],{"class":52},[46,49764,49518],{"class":56},[46,49766,49767],{"class":48,"line":11924},[46,49768,616],{"emptyLinePlaceholder":615},[46,49770,49771,49773,49775,49778],{"class":48,"line":11929},[46,49772,32398],{"class":180},[46,49774,1152],{"class":56},[46,49776,49777],{"class":173},"\"Mean:\"",[46,49779,49780],{"class":56},", mean)\n",[46,49782,49783,49785,49787,49790],{"class":48,"line":18605},[46,49784,32398],{"class":180},[46,49786,1152],{"class":56},[46,49788,49789],{"class":173},"\"Variance:\"",[46,49791,49792],{"class":56},", variance)\n",[36,49794,49796],{"className":38,"code":49795,"language":40,"meta":41,"style":41},"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",[43,49797,49798,49804,49810,49820,49826,49836,49850,49860,49870,49880,49884,49894,49904,49908,49912,49920,49925,49930,49949,49953,49958,49963,49968,49973,50014,50019,50029,50034,50047,50052,50057,50062,50067,50072,50076,50081,50086,50108,50112,50144,50158,50168,50178,50182,50192,50206,50216,50226,50236,50242,50246,50250,50254,50258,50262,50270,50290,50294,50298,50302,50306,50322,50326,50330,50338,50342,50346,50354,50358,50362,50366,50374,50378,50382,50386,50394,50398,50406,50410,50418,50422,50430,50434,50442,50446,50450,50458,50462,50466,50478,50502,50516,50520,50524,50528,50536,50540,50548,50552,50560,50564,50572,50576,50584,50588,50596,50600,50612,50616,50624,50628,50636,50640,50644,50648,50652,50660,50664,50680,50684,50692,50696,50700,50704,50708,50712,50716,50720,50736,50740,50752,50756,50768,50772,50784,50788,50796,50800,50808,50812,50816,50820,50826,50830,50838,50842,50858,50862,50870,50874,50890,50902,50906,50918,50922,50926,50934,50938,50942,50950,50954,50962,50966,50974,50978,50982,51024,51066,51070,51074,51090,51094,51110,51114,51118,51126,51130,51134,51146,51184,51188,51192,51200,51204,51218,51228,51234,51240,51246,51252,51256,51260,51266,51270,51274,51282,51286,51304,51308,51312,51316,51332,51336,51340,51344,51348,51352,51372,51392,51396,51400,51404,51412,51420,51424,51440,51460,51480,51484,51489,51498,51507,51512,51517,51522,51535,51540,51549,51558,51575],{"__ignoreMap":41},[46,49799,49800,49802],{"class":48,"line":49},[46,49801,53],{"class":52},[46,49803,33799],{"class":56},[46,49805,49806,49808],{"class":48,"line":60},[46,49807,53],{"class":52},[46,49809,610],{"class":56},[46,49811,49812,49814,49816,49818],{"class":48,"line":200},[46,49813,53],{"class":52},[46,49815,33816],{"class":56},[46,49817,398],{"class":52},[46,49819,33821],{"class":56},[46,49821,49822,49824],{"class":48,"line":211},[46,49823,53],{"class":52},[46,49825,32378],{"class":56},[46,49827,49828,49830,49832,49834],{"class":48,"line":222},[46,49829,957],{"class":52},[46,49831,33392],{"class":56},[46,49833,53],{"class":52},[46,49835,33838],{"class":56},[46,49837,49838,49840,49842,49844,49847],{"class":48,"line":636},[46,49839,957],{"class":52},[46,49841,33346],{"class":56},[46,49843,53],{"class":52},[46,49845,49846],{"class":56}," ImageFolder ",[46,49848,49849],{"class":2253},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[46,49851,49852,49854,49856,49858],{"class":48,"line":641},[46,49853,957],{"class":52},[46,49855,33375],{"class":56},[46,49857,53],{"class":52},[46,49859,33380],{"class":56},[46,49861,49862,49864,49866,49868],{"class":48,"line":653},[46,49863,53],{"class":52},[46,49865,33392],{"class":56},[46,49867,398],{"class":52},[46,49869,33397],{"class":56},[46,49871,49872,49874,49876,49878],{"class":48,"line":659},[46,49873,53],{"class":52},[46,49875,33409],{"class":56},[46,49877,398],{"class":52},[46,49879,33414],{"class":56},[46,49881,49882],{"class":48,"line":665},[46,49883,33883],{"class":2253},[46,49885,49886,49888,49890,49892],{"class":48,"line":670},[46,49887,957],{"class":52},[46,49889,33890],{"class":56},[46,49891,53],{"class":52},[46,49893,45002],{"class":56},[46,49895,49896,49898,49900,49902],{"class":48,"line":676},[46,49897,957],{"class":52},[46,49899,32721],{"class":56},[46,49901,53],{"class":52},[46,49903,32726],{"class":56},[46,49905,49906],{"class":48,"line":682},[46,49907,616],{"emptyLinePlaceholder":615},[46,49909,49910],{"class":48,"line":688},[46,49911,33918],{"class":2253},[46,49913,49914,49916,49918],{"class":48,"line":693},[46,49915,748],{"class":52},[46,49917,33925],{"class":169},[46,49919,33928],{"class":56},[46,49921,49922],{"class":48,"line":699},[46,49923,49924],{"class":2253},"    # 导入自己的数据集，并进行数据处理\n",[46,49926,49927],{"class":48,"line":705},[46,49928,49929],{"class":2253},"    # 定义数据集的路径\n",[46,49931,49932,49935,49937,49939,49941,49943,49947],{"class":48,"line":711},[46,49933,49934],{"class":180},"    ROOT_PATH",[46,49936,79],{"class":52},[46,49938,2856],{"class":52},[46,49940,2439],{"class":173},[46,49942,2744],{"class":180},[46,49944,49946],{"class":49945},"sA_wV","\u002Fdata\u002Ftrain",[46,49948,27125],{"class":173},[46,49950,49951],{"class":48,"line":717},[46,49952,616],{"emptyLinePlaceholder":615},[46,49954,49955],{"class":48,"line":723},[46,49956,49957],{"class":2253},"    # 定义归一化方法\n",[46,49959,49960],{"class":48,"line":729},[46,49961,49962],{"class":2253},"    # 这里需要先计算一下数据集的均值和方差\n",[46,49964,49965],{"class":48,"line":735},[46,49966,49967],{"class":2253},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[46,49969,49970],{"class":48,"line":740},[46,49971,49972],{"class":2253},"    # 第一个参数是均值，第二个参数是方差\n",[46,49974,49975,49978,49980,49983,49986,49988,49991,49993,49996,49999,50002,50004,50007,50009,50012],{"class":48,"line":745},[46,49976,49977],{"class":56},"    normalize",[46,49979,79],{"class":52},[46,49981,49982],{"class":56},"transforms.Normalize([",[46,49984,49985],{"class":180},"0.162",[46,49987,2565],{"class":56},[46,49989,49990],{"class":180},"0.151",[46,49992,2565],{"class":56},[46,49994,49995],{"class":180},"0.138",[46,49997,49998],{"class":56},"],[",[46,50000,50001],{"class":180},"0.058",[46,50003,2565],{"class":56},[46,50005,50006],{"class":180},"0.052",[46,50008,2565],{"class":56},[46,50010,50011],{"class":180},"0.048",[46,50013,6673],{"class":56},[46,50015,50016],{"class":48,"line":763},[46,50017,50018],{"class":2253},"    # 定义数据集处理方法变量\n",[46,50020,50021,50024,50026],{"class":48,"line":778},[46,50022,50023],{"class":56},"    train_transform",[46,50025,79],{"class":52},[46,50027,50028],{"class":56},"transforms.Compose([\n",[46,50030,50031],{"class":48,"line":789},[46,50032,50033],{"class":2253},"        # 调整图像大小为224*224\n",[46,50035,50036,50039,50041,50043,50045],{"class":48,"line":794},[46,50037,50038],{"class":56},"        transforms.Resize((",[46,50040,33478],{"class":180},[46,50042,2565],{"class":56},[46,50044,33478],{"class":180},[46,50046,44593],{"class":56},[46,50048,50049],{"class":48,"line":806},[46,50050,50051],{"class":2253},"        # 将图像转换为张量\n",[46,50053,50054],{"class":48,"line":829},[46,50055,50056],{"class":56},"        transforms.ToTensor(),\n",[46,50058,50059],{"class":48,"line":840},[46,50060,50061],{"class":56},"        normalize])\n",[46,50063,50064],{"class":48,"line":846},[46,50065,50066],{"class":2253},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[46,50068,50069],{"class":48,"line":852},[46,50070,50071],{"class":2253},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[46,50073,50074],{"class":48,"line":857},[46,50075,616],{"emptyLinePlaceholder":615},[46,50077,50078],{"class":48,"line":875},[46,50079,50080],{"class":2253},"    # 加载数据集\n",[46,50082,50083],{"class":48,"line":892},[46,50084,50085],{"class":2253},"    # 传入数据集路径与处理方法\n",[46,50087,50088,50090,50092,50095,50098,50100,50103,50105],{"class":48,"line":898},[46,50089,33933],{"class":56},[46,50091,79],{"class":52},[46,50093,50094],{"class":56},"ImageFolder(",[46,50096,50097],{"class":180},"ROOT_PATH",[46,50099,2565],{"class":56},[46,50101,50102],{"class":439},"transform",[46,50104,79],{"class":52},[46,50106,50107],{"class":56},"train_transform)\n",[46,50109,50110],{"class":48,"line":903},[46,50111,616],{"emptyLinePlaceholder":615},[46,50113,50114,50116,50118,50120,50122,50124,50126,50128,50130,50132,50134,50136,50138,50140,50142],{"class":48,"line":908},[46,50115,33985],{"class":56},[46,50117,79],{"class":52},[46,50119,33990],{"class":56},[46,50121,33993],{"class":180},[46,50123,1152],{"class":56},[46,50125,33998],{"class":180},[46,50127,2642],{"class":52},[46,50129,9371],{"class":180},[46,50131,34005],{"class":56},[46,50133,33993],{"class":180},[46,50135,1152],{"class":56},[46,50137,34012],{"class":180},[46,50139,2642],{"class":52},[46,50141,9371],{"class":180},[46,50143,34019],{"class":56},[46,50145,50146,50148,50150,50152,50154,50156],{"class":48,"line":925},[46,50147,34024],{"class":56},[46,50149,79],{"class":52},[46,50151,34029],{"class":56},[46,50153,33514],{"class":439},[46,50155,79],{"class":52},[46,50157,33519],{"class":56},[46,50159,50160,50162,50164,50166],{"class":48,"line":1238},[46,50161,34040],{"class":439},[46,50163,79],{"class":52},[46,50165,2385],{"class":180},[46,50167,33443],{"class":56},[46,50169,50170,50172,50174,50176],{"class":48,"line":1251},[46,50171,34052],{"class":439},[46,50173,79],{"class":52},[46,50175,33453],{"class":180},[46,50177,33443],{"class":56},[46,50179,50180],{"class":48,"line":1256},[46,50181,34063],{"class":2253},[46,50183,50184,50186,50188,50190],{"class":48,"line":1261},[46,50185,34068],{"class":439},[46,50187,79],{"class":52},[46,50189,2582],{"class":180},[46,50191,459],{"class":56},[46,50193,50194,50196,50198,50200,50202,50204],{"class":48,"line":1274},[46,50195,34079],{"class":56},[46,50197,79],{"class":52},[46,50199,33511],{"class":56},[46,50201,33514],{"class":439},[46,50203,79],{"class":52},[46,50205,34090],{"class":56},[46,50207,50208,50210,50212,50214],{"class":48,"line":10061},[46,50209,34095],{"class":439},[46,50211,79],{"class":52},[46,50213,2385],{"class":180},[46,50215,33443],{"class":56},[46,50217,50218,50220,50222,50224],{"class":48,"line":11720},[46,50219,34106],{"class":439},[46,50221,79],{"class":52},[46,50223,33453],{"class":180},[46,50225,33443],{"class":56},[46,50227,50228,50230,50232,50234],{"class":48,"line":11745},[46,50229,34117],{"class":439},[46,50231,79],{"class":52},[46,50233,2582],{"class":180},[46,50235,459],{"class":56},[46,50237,50238,50240],{"class":48,"line":11768},[46,50239,6108],{"class":52},[46,50241,34130],{"class":56},[46,50243,50244],{"class":48,"line":11792},[46,50245,616],{"emptyLinePlaceholder":615},[46,50247,50248],{"class":48,"line":11797},[46,50249,34139],{"class":2253},[46,50251,50252],{"class":48,"line":11802},[46,50253,34144],{"class":2253},[46,50255,50256],{"class":48,"line":11807},[46,50257,616],{"emptyLinePlaceholder":615},[46,50259,50260],{"class":48,"line":11816},[46,50261,34153],{"class":2253},[46,50263,50264,50266,50268],{"class":48,"line":11821},[46,50265,748],{"class":52},[46,50267,34160],{"class":169},[46,50269,34163],{"class":56},[46,50271,50272,50274,50276,50278,50280,50282,50284,50286,50288],{"class":48,"line":11827},[46,50273,33216],{"class":56},[46,50275,79],{"class":52},[46,50277,32434],{"class":56},[46,50279,33223],{"class":173},[46,50281,3744],{"class":52},[46,50283,33228],{"class":56},[46,50285,3741],{"class":52},[46,50287,34182],{"class":173},[46,50289,459],{"class":56},[46,50291,50292],{"class":48,"line":11848},[46,50293,616],{"emptyLinePlaceholder":615},[46,50295,50296],{"class":48,"line":11854},[46,50297,34197],{"class":2253},[46,50299,50300],{"class":48,"line":11868},[46,50301,34202],{"class":2253},[46,50303,50304],{"class":48,"line":11874},[46,50305,34207],{"class":2253},[46,50307,50308,50310,50312,50314,50316,50318,50320],{"class":48,"line":11901},[46,50309,34212],{"class":56},[46,50311,79],{"class":52},[46,50313,34217],{"class":56},[46,50315,34220],{"class":439},[46,50317,79],{"class":52},[46,50319,34225],{"class":180},[46,50321,459],{"class":56},[46,50323,50324],{"class":48,"line":11910},[46,50325,616],{"emptyLinePlaceholder":615},[46,50327,50328],{"class":48,"line":11916},[46,50329,34236],{"class":2253},[46,50331,50332,50334,50336],{"class":48,"line":11924},[46,50333,34241],{"class":56},[46,50335,79],{"class":52},[46,50337,34246],{"class":56},[46,50339,50340],{"class":48,"line":11929},[46,50341,616],{"emptyLinePlaceholder":615},[46,50343,50344],{"class":48,"line":18605},[46,50345,34255],{"class":2253},[46,50347,50348,50350,50352],{"class":48,"line":18611},[46,50349,33268],{"class":56},[46,50351,79],{"class":52},[46,50353,34264],{"class":56},[46,50355,50356],{"class":48,"line":18634},[46,50357,34269],{"class":2253},[46,50359,50360],{"class":48,"line":18640},[46,50361,34274],{"class":2253},[46,50363,50364],{"class":48,"line":18663},[46,50365,34279],{"class":2253},[46,50367,50368,50370,50372],{"class":48,"line":18677},[46,50369,34284],{"class":56},[46,50371,79],{"class":52},[46,50373,34289],{"class":56},[46,50375,50376],{"class":48,"line":18697},[46,50377,616],{"emptyLinePlaceholder":615},[46,50379,50380],{"class":48,"line":18703},[46,50381,34302],{"class":2253},[46,50383,50384],{"class":48,"line":18714},[46,50385,34307],{"class":2253},[46,50387,50388,50390,50392],{"class":48,"line":18737},[46,50389,34312],{"class":56},[46,50391,79],{"class":52},[46,50393,34317],{"class":180},[46,50395,50396],{"class":48,"line":18759},[46,50397,34322],{"class":2253},[46,50399,50400,50402,50404],{"class":48,"line":18764},[46,50401,34327],{"class":56},[46,50403,79],{"class":52},[46,50405,34332],{"class":56},[46,50407,50408],{"class":48,"line":18770},[46,50409,34337],{"class":2253},[46,50411,50412,50414,50416],{"class":48,"line":18784},[46,50413,34342],{"class":56},[46,50415,79],{"class":52},[46,50417,34332],{"class":56},[46,50419,50420],{"class":48,"line":18797},[46,50421,34351],{"class":2253},[46,50423,50424,50426,50428],{"class":48,"line":18802},[46,50425,34356],{"class":56},[46,50427,79],{"class":52},[46,50429,34332],{"class":56},[46,50431,50432],{"class":48,"line":18816},[46,50433,34365],{"class":2253},[46,50435,50436,50438,50440],{"class":48,"line":18821},[46,50437,34370],{"class":56},[46,50439,79],{"class":52},[46,50441,34332],{"class":56},[46,50443,50444],{"class":48,"line":18827},[46,50445,616],{"emptyLinePlaceholder":615},[46,50447,50448],{"class":48,"line":18832},[46,50449,34383],{"class":2253},[46,50451,50452,50454,50456],{"class":48,"line":18846},[46,50453,34388],{"class":56},[46,50455,79],{"class":52},[46,50457,34393],{"class":56},[46,50459,50460],{"class":48,"line":18851},[46,50461,616],{"emptyLinePlaceholder":615},[46,50463,50464],{"class":48,"line":18856},[46,50465,34406],{"class":2253},[46,50467,50468,50470,50472,50474,50476],{"class":48,"line":18870},[46,50469,1140],{"class":52},[46,50471,34413],{"class":56},[46,50473,1146],{"class":52},[46,50475,1149],{"class":180},[46,50477,34420],{"class":56},[46,50479,50480,50482,50484,50486,50488,50490,50492,50494,50496,50498,50500],{"class":48,"line":18882},[46,50481,34425],{"class":180},[46,50483,1152],{"class":56},[46,50485,34430],{"class":173},[46,50487,34433],{"class":180},[46,50489,2770],{"class":173},[46,50491,34433],{"class":180},[46,50493,2439],{"class":173},[46,50495,34442],{"class":56},[46,50497,534],{"class":52},[46,50499,2405],{"class":180},[46,50501,32479],{"class":56},[46,50503,50504,50506,50508,50510,50512,50514],{"class":48,"line":18887},[46,50505,34425],{"class":180},[46,50507,1152],{"class":56},[46,50509,34457],{"class":173},[46,50511,2642],{"class":52},[46,50513,2633],{"class":180},[46,50515,459],{"class":56},[46,50517,50518],{"class":48,"line":18900},[46,50519,616],{"emptyLinePlaceholder":615},[46,50521,50522],{"class":48,"line":18905},[46,50523,34472],{"class":2253},[46,50525,50526],{"class":48,"line":18910},[46,50527,34477],{"class":2253},[46,50529,50530,50532,50534],{"class":48,"line":18915},[46,50531,34482],{"class":56},[46,50533,79],{"class":52},[46,50535,34317],{"class":180},[46,50537,50538],{"class":48,"line":18928},[46,50539,34491],{"class":2253},[46,50541,50542,50544,50546],{"class":48,"line":18933},[46,50543,34496],{"class":56},[46,50545,79],{"class":52},[46,50547,5105],{"class":180},[46,50549,50550],{"class":48,"line":34607},[46,50551,34505],{"class":2253},[46,50553,50554,50556,50558],{"class":48,"line":34613},[46,50555,34510],{"class":56},[46,50557,79],{"class":52},[46,50559,34317],{"class":180},[46,50561,50562],{"class":48,"line":34619},[46,50563,34519],{"class":2253},[46,50565,50566,50568,50570],{"class":48,"line":34625},[46,50567,34524],{"class":56},[46,50569,79],{"class":52},[46,50571,5105],{"class":180},[46,50573,50574],{"class":48,"line":34631},[46,50575,34533],{"class":2253},[46,50577,50578,50580,50582],{"class":48,"line":34642},[46,50579,34538],{"class":56},[46,50581,79],{"class":52},[46,50583,5105],{"class":180},[46,50585,50586],{"class":48,"line":34648},[46,50587,34547],{"class":2253},[46,50589,50590,50592,50594],{"class":48,"line":34668},[46,50591,34552],{"class":56},[46,50593,79],{"class":52},[46,50595,5105],{"class":180},[46,50597,50598],{"class":48,"line":34674},[46,50599,34561],{"class":2253},[46,50601,50602,50604,50606,50608,50610],{"class":48,"line":34685},[46,50603,5422],{"class":52},[46,50605,33578],{"class":56},[46,50607,1146],{"class":52},[46,50609,33583],{"class":180},[46,50611,34574],{"class":56},[46,50613,50614],{"class":48,"line":34691},[46,50615,34579],{"class":2253},[46,50617,50618,50620,50622],{"class":48,"line":34697},[46,50619,34584],{"class":56},[46,50621,79],{"class":52},[46,50623,34589],{"class":56},[46,50625,50626],{"class":48,"line":34703},[46,50627,34594],{"class":2253},[46,50629,50630,50632,50634],{"class":48,"line":34709},[46,50631,34599],{"class":56},[46,50633,79],{"class":52},[46,50635,34604],{"class":56},[46,50637,50638],{"class":48,"line":34715},[46,50639,34610],{"class":2253},[46,50641,50642],{"class":48,"line":34721},[46,50643,34616],{"class":56},[46,50645,50646],{"class":48,"line":34727},[46,50647,34622],{"class":2253},[46,50649,50650],{"class":48,"line":34747},[46,50651,34628],{"class":2253},[46,50653,50654,50656,50658],{"class":48,"line":34753},[46,50655,34634],{"class":56},[46,50657,79],{"class":52},[46,50659,34639],{"class":56},[46,50661,50662],{"class":48,"line":34769},[46,50663,34645],{"class":2253},[46,50665,50666,50668,50670,50672,50674,50676,50678],{"class":48,"line":34775},[46,50667,34651],{"class":56},[46,50669,79],{"class":52},[46,50671,34656],{"class":56},[46,50673,34659],{"class":439},[46,50675,79],{"class":52},[46,50677,2405],{"class":180},[46,50679,459],{"class":56},[46,50681,50682],{"class":48,"line":34789},[46,50683,34671],{"class":2253},[46,50685,50686,50688,50690],{"class":48,"line":34795},[46,50687,34677],{"class":56},[46,50689,79],{"class":52},[46,50691,34682],{"class":56},[46,50693,50694],{"class":48,"line":34810},[46,50695,34688],{"class":2253},[46,50697,50698],{"class":48,"line":34816},[46,50699,34694],{"class":56},[46,50701,50702],{"class":48,"line":34825},[46,50703,34700],{"class":2253},[46,50705,50706],{"class":48,"line":34831},[46,50707,34706],{"class":56},[46,50709,50710],{"class":48,"line":34840},[46,50711,34712],{"class":2253},[46,50713,50714],{"class":48,"line":34846},[46,50715,34718],{"class":56},[46,50717,50718],{"class":48,"line":34852},[46,50719,34724],{"class":2253},[46,50721,50722,50724,50726,50728,50730,50732,50734],{"class":48,"line":34861},[46,50723,34730],{"class":56},[46,50725,11481],{"class":52},[46,50727,34735],{"class":56},[46,50729,2642],{"class":52},[46,50731,34740],{"class":56},[46,50733,2379],{"class":180},[46,50735,459],{"class":56},[46,50737,50738],{"class":48,"line":34867},[46,50739,34750],{"class":2253},[46,50741,50742,50744,50746,50748,50750],{"class":48,"line":34878},[46,50743,34756],{"class":56},[46,50745,11481],{"class":52},[46,50747,34761],{"class":56},[46,50749,4970],{"class":52},[46,50751,34766],{"class":56},[46,50753,50754],{"class":48,"line":34884},[46,50755,34772],{"class":2253},[46,50757,50758,50760,50762,50764,50766],{"class":48,"line":34903},[46,50759,34778],{"class":56},[46,50761,11481],{"class":52},[46,50763,34740],{"class":56},[46,50765,2379],{"class":180},[46,50767,459],{"class":56},[46,50769,50770],{"class":48,"line":34909},[46,50771,34792],{"class":2253},[46,50773,50774,50776,50778,50780,50782],{"class":48,"line":34920},[46,50775,5422],{"class":52},[46,50777,34800],{"class":56},[46,50779,1146],{"class":52},[46,50781,33583],{"class":180},[46,50783,34807],{"class":56},[46,50785,50786],{"class":48,"line":34926},[46,50787,34813],{"class":2253},[46,50789,50790,50792,50794],{"class":48,"line":34946},[46,50791,34584],{"class":56},[46,50793,79],{"class":52},[46,50795,34589],{"class":56},[46,50797,50798],{"class":48,"line":34962},[46,50799,34828],{"class":2253},[46,50801,50802,50804,50806],{"class":48,"line":34968},[46,50803,34599],{"class":56},[46,50805,79],{"class":52},[46,50807,34604],{"class":56},[46,50809,50810],{"class":48,"line":34982},[46,50811,34843],{"class":2253},[46,50813,50814],{"class":48,"line":34988},[46,50815,34849],{"class":56},[46,50817,50818],{"class":48,"line":34994},[46,50819,38328],{"class":2253},[46,50821,50822,50824],{"class":48,"line":35005},[46,50823,34855],{"class":52},[46,50825,34858],{"class":56},[46,50827,50828],{"class":48,"line":35011},[46,50829,34864],{"class":2253},[46,50831,50832,50834,50836],{"class":48,"line":35017},[46,50833,38343],{"class":56},[46,50835,79],{"class":52},[46,50837,34639],{"class":56},[46,50839,50840],{"class":48,"line":35027},[46,50841,34881],{"class":2253},[46,50843,50844,50846,50848,50850,50852,50854,50856],{"class":48,"line":35033},[46,50845,38356],{"class":56},[46,50847,79],{"class":52},[46,50849,34656],{"class":56},[46,50851,34659],{"class":439},[46,50853,79],{"class":52},[46,50855,2405],{"class":180},[46,50857,459],{"class":56},[46,50859,50860],{"class":48,"line":35044},[46,50861,34906],{"class":2253},[46,50863,50864,50866,50868],{"class":48,"line":35050},[46,50865,38377],{"class":56},[46,50867,79],{"class":52},[46,50869,34682],{"class":56},[46,50871,50872],{"class":48,"line":35060},[46,50873,34923],{"class":2253},[46,50875,50876,50878,50880,50882,50884,50886,50888],{"class":48,"line":35065},[46,50877,38390],{"class":56},[46,50879,11481],{"class":52},[46,50881,38395],{"class":56},[46,50883,2642],{"class":52},[46,50885,34740],{"class":56},[46,50887,2379],{"class":180},[46,50889,459],{"class":56},[46,50891,50892,50894,50896,50898,50900],{"class":48,"line":35071},[46,50893,38408],{"class":56},[46,50895,11481],{"class":52},[46,50897,34761],{"class":56},[46,50899,4970],{"class":52},[46,50901,34766],{"class":56},[46,50903,50904],{"class":48,"line":35120},[46,50905,38421],{"class":2253},[46,50907,50908,50910,50912,50914,50916],{"class":48,"line":35167},[46,50909,38426],{"class":56},[46,50911,11481],{"class":52},[46,50913,34740],{"class":56},[46,50915,2379],{"class":180},[46,50917,459],{"class":56},[46,50919,50920],{"class":48,"line":35172},[46,50921,34985],{"class":2253},[46,50923,50924],{"class":48,"line":35178},[46,50925,34991],{"class":2253},[46,50927,50928,50930,50932],{"class":48,"line":35197},[46,50929,34997],{"class":56},[46,50931,2770],{"class":52},[46,50933,35002],{"class":56},[46,50935,50936],{"class":48,"line":35203},[46,50937,35008],{"class":2253},[46,50939,50940],{"class":48,"line":35223},[46,50941,35014],{"class":2253},[46,50943,50944,50946,50948],{"class":48,"line":35229},[46,50945,35020],{"class":56},[46,50947,2770],{"class":52},[46,50949,35002],{"class":56},[46,50951,50952],{"class":48,"line":35235},[46,50953,35030],{"class":2253},[46,50955,50956,50958,50960],{"class":48,"line":35245},[46,50957,35036],{"class":56},[46,50959,2770],{"class":52},[46,50961,35041],{"class":56},[46,50963,50964],{"class":48,"line":35250},[46,50965,35047],{"class":2253},[46,50967,50968,50970,50972],{"class":48,"line":35256},[46,50969,35053],{"class":56},[46,50971,2770],{"class":52},[46,50973,35041],{"class":56},[46,50975,50976],{"class":48,"line":35272},[46,50977,616],{"emptyLinePlaceholder":615},[46,50979,50980],{"class":48,"line":35317},[46,50981,35068],{"class":2253},[46,50983,50984,50986,50988,50990,50992,50994,50996,50998,51000,51002,51004,51006,51008,51010,51012,51014,51016,51018,51020,51022],{"class":48,"line":35323},[46,50985,34425],{"class":180},[46,50987,1152],{"class":56},[46,50989,5611],{"class":173},[46,50991,34433],{"class":180},[46,50993,35082],{"class":173},[46,50995,3082],{"class":180},[46,50997,35087],{"class":52},[46,50999,3131],{"class":180},[46,51001,35092],{"class":173},[46,51003,3082],{"class":180},[46,51005,35087],{"class":52},[46,51007,3131],{"class":180},[46,51009,5611],{"class":173},[46,51011,35103],{"class":56},[46,51013,534],{"class":52},[46,51015,2405],{"class":180},[46,51017,35110],{"class":56},[46,51019,534],{"class":52},[46,51021,2405],{"class":180},[46,51023,35117],{"class":56},[46,51025,51026,51028,51030,51032,51034,51036,51038,51040,51042,51044,51046,51048,51050,51052,51054,51056,51058,51060,51062,51064],{"class":48,"line":35329},[46,51027,34425],{"class":180},[46,51029,1152],{"class":56},[46,51031,5611],{"class":173},[46,51033,34433],{"class":180},[46,51035,35131],{"class":173},[46,51037,3082],{"class":180},[46,51039,35087],{"class":52},[46,51041,3131],{"class":180},[46,51043,35140],{"class":173},[46,51045,3082],{"class":180},[46,51047,35087],{"class":52},[46,51049,3131],{"class":180},[46,51051,5611],{"class":173},[46,51053,35151],{"class":56},[46,51055,534],{"class":52},[46,51057,2405],{"class":180},[46,51059,35158],{"class":56},[46,51061,534],{"class":52},[46,51063,2405],{"class":180},[46,51065,35117],{"class":56},[46,51067,51068],{"class":48,"line":35335},[46,51069,616],{"emptyLinePlaceholder":615},[46,51071,51072],{"class":48,"line":35346},[46,51073,35175],{"class":2253},[46,51075,51076,51078,51080,51082,51084,51086,51088],{"class":48,"line":35352},[46,51077,4525],{"class":52},[46,51079,35183],{"class":56},[46,51081,534],{"class":52},[46,51083,2405],{"class":180},[46,51085,3125],{"class":56},[46,51087,884],{"class":52},[46,51089,35194],{"class":56},[46,51091,51092],{"class":48,"line":35358},[46,51093,35200],{"class":2253},[46,51095,51096,51098,51100,51102,51104,51106,51108],{"class":48,"line":35364},[46,51097,35206],{"class":56},[46,51099,2236],{"class":180},[46,51101,79],{"class":52},[46,51103,35213],{"class":56},[46,51105,534],{"class":52},[46,51107,2405],{"class":180},[46,51109,35220],{"class":56},[46,51111,51112],{"class":48,"line":35381},[46,51113,35226],{"class":2253},[46,51115,51116],{"class":48,"line":35395},[46,51117,35232],{"class":2253},[46,51119,51120,51122,51124],{"class":48,"line":35404},[46,51121,35238],{"class":56},[46,51123,79],{"class":52},[46,51125,34289],{"class":56},[46,51127,51128],{"class":48,"line":35413},[46,51129,616],{"emptyLinePlaceholder":615},[46,51131,51132],{"class":48,"line":35422},[46,51133,35253],{"class":2253},[46,51135,51136,51138,51140,51142,51144],{"class":48,"line":35431},[46,51137,35259],{"class":56},[46,51139,79],{"class":52},[46,51141,35264],{"class":56},[46,51143,534],{"class":52},[46,51145,35269],{"class":56},[46,51147,51148,51150,51152,51154,51156,51158,51160,51162,51164,51166,51168,51170,51172,51174,51176,51178,51180,51182],{"class":48,"line":35437},[46,51149,34425],{"class":180},[46,51151,1152],{"class":56},[46,51153,35279],{"class":173},[46,51155,3082],{"class":180},[46,51157,35284],{"class":52},[46,51159,3131],{"class":180},[46,51161,2730],{"class":173},[46,51163,3082],{"class":180},[46,51165,35284],{"class":52},[46,51167,3131],{"class":180},[46,51169,35297],{"class":173},[46,51171,35300],{"class":56},[46,51173,35303],{"class":52},[46,51175,3093],{"class":180},[46,51177,35308],{"class":56},[46,51179,2515],{"class":52},[46,51181,3093],{"class":180},[46,51183,32479],{"class":56},[46,51185,51186],{"class":48,"line":35443},[46,51187,38705],{"class":2253},[46,51189,51190],{"class":48,"line":35451},[46,51191,38710],{"class":2253},[46,51193,51194,51196,51198],{"class":48,"line":35456},[46,51195,38715],{"class":56},[46,51197,35341],{"class":173},[46,51199,459],{"class":56},[46,51201,51202],{"class":48,"line":35462},[46,51203,35361],{"class":2253},[46,51205,51206,51208,51210,51212,51214,51216],{"class":48,"line":35473},[46,51207,35367],{"class":56},[46,51209,79],{"class":52},[46,51211,35372],{"class":56},[46,51213,1516],{"class":439},[46,51215,79],{"class":52},[46,51217,3597],{"class":56},[46,51219,51220,51222,51224,51226],{"class":48,"line":35479},[46,51221,35384],{"class":173},[46,51223,3045],{"class":56},[46,51225,35389],{"class":180},[46,51227,35392],{"class":56},[46,51229,51230,51232],{"class":48,"line":35499},[46,51231,35398],{"class":173},[46,51233,35401],{"class":56},[46,51235,51236,51238],{"class":48,"line":35505},[46,51237,35407],{"class":173},[46,51239,35410],{"class":56},[46,51241,51242,51244],{"class":48,"line":35511},[46,51243,35416],{"class":173},[46,51245,35419],{"class":56},[46,51247,51248,51250],{"class":48,"line":35517},[46,51249,35425],{"class":173},[46,51251,35428],{"class":56},[46,51253,51254],{"class":48,"line":35534},[46,51255,35434],{"class":56},[46,51257,51258],{"class":48,"line":35540},[46,51259,35440],{"class":2253},[46,51261,51262,51264],{"class":48,"line":35546},[46,51263,6108],{"class":52},[46,51265,35448],{"class":56},[46,51267,51268],{"class":48,"line":35552},[46,51269,616],{"emptyLinePlaceholder":615},[46,51271,51272],{"class":48,"line":35558},[46,51273,35459],{"class":2253},[46,51275,51276,51278,51280],{"class":48,"line":35564},[46,51277,748],{"class":52},[46,51279,35467],{"class":169},[46,51281,35470],{"class":56},[46,51283,51284],{"class":48,"line":35591},[46,51285,35476],{"class":2253},[46,51287,51288,51290,51292,51294,51296,51298,51300,51302],{"class":48,"line":35615},[46,51289,35482],{"class":56},[46,51291,33670],{"class":439},[46,51293,79],{"class":52},[46,51295,1152],{"class":56},[46,51297,2685],{"class":180},[46,51299,2565],{"class":56},[46,51301,2481],{"class":180},[46,51303,32479],{"class":56},[46,51305,51306],{"class":48,"line":35621},[46,51307,35502],{"class":2253},[46,51309,51310],{"class":48,"line":35627},[46,51311,35508],{"class":2253},[46,51313,51314],{"class":48,"line":35633},[46,51315,35514],{"class":2253},[46,51317,51318,51320,51322,51324,51326,51328,51330],{"class":48,"line":35644},[46,51319,33704],{"class":56},[46,51321,2405],{"class":180},[46,51323,2565],{"class":56},[46,51325,2272],{"class":180},[46,51327,2565],{"class":56},[46,51329,2405],{"class":180},[46,51331,459],{"class":56},[46,51333,51334],{"class":48,"line":35655},[46,51335,35537],{"class":2253},[46,51337,51338],{"class":48,"line":35661},[46,51339,35543],{"class":2253},[46,51341,51342],{"class":48,"line":35678},[46,51343,35549],{"class":2253},[46,51345,51346],{"class":48,"line":35701},[46,51347,35555],{"class":2253},[46,51349,51350],{"class":48,"line":35724},[46,51351,35561],{"class":2253},[46,51353,51354,51356,51358,51360,51362,51364,51366,51368,51370],{"class":48,"line":35730},[46,51355,35567],{"class":56},[46,51357,35570],{"class":173},[46,51359,35573],{"class":56},[46,51361,35576],{"class":173},[46,51363,2565],{"class":56},[46,51365,35581],{"class":439},[46,51367,79],{"class":52},[46,51369,35586],{"class":173},[46,51371,459],{"class":56},[46,51373,51374,51376,51378,51380,51382,51384,51386,51388,51390],{"class":48,"line":35735},[46,51375,35567],{"class":56},[46,51377,35570],{"class":173},[46,51379,35598],{"class":56},[46,51381,35601],{"class":173},[46,51383,2565],{"class":56},[46,51385,35581],{"class":439},[46,51387,79],{"class":52},[46,51389,35610],{"class":173},[46,51391,459],{"class":56},[46,51393,51394],{"class":48,"line":35744},[46,51395,35618],{"class":2253},[46,51397,51398],{"class":48,"line":35754},[46,51399,35624],{"class":56},[46,51401,51402],{"class":48,"line":35760},[46,51403,35630],{"class":2253},[46,51405,51406,51408,51410],{"class":48,"line":35765},[46,51407,35636],{"class":56},[46,51409,35639],{"class":173},[46,51411,459],{"class":56},[46,51413,51414,51416,51418],{"class":48,"line":35771},[46,51415,35647],{"class":56},[46,51417,35650],{"class":173},[46,51419,459],{"class":56},[46,51421,51422],{"class":48,"line":35784},[46,51423,35658],{"class":2253},[46,51425,51426,51428,51430,51432,51434,51436,51438],{"class":48,"line":35790},[46,51427,33704],{"class":56},[46,51429,2405],{"class":180},[46,51431,2565],{"class":56},[46,51433,2272],{"class":180},[46,51435,2565],{"class":56},[46,51437,2272],{"class":180},[46,51439,459],{"class":56},[46,51441,51442,51444,51446,51448,51450,51452,51454,51456,51458],{"class":48,"line":35801},[46,51443,35567],{"class":56},[46,51445,35570],{"class":173},[46,51447,35685],{"class":56},[46,51449,35576],{"class":173},[46,51451,2565],{"class":56},[46,51453,35581],{"class":439},[46,51455,79],{"class":52},[46,51457,35696],{"class":173},[46,51459,459],{"class":56},[46,51461,51462,51464,51466,51468,51470,51472,51474,51476,51478],{"class":48,"line":35812},[46,51463,35567],{"class":56},[46,51465,35570],{"class":173},[46,51467,35708],{"class":56},[46,51469,35601],{"class":173},[46,51471,2565],{"class":56},[46,51473,35581],{"class":439},[46,51475,79],{"class":52},[46,51477,35719],{"class":173},[46,51479,459],{"class":56},[46,51481,51482],{"class":48,"line":35831},[46,51483,35727],{"class":2253},[46,51485,51487],{"class":48,"line":51486},219,[46,51488,35624],{"class":56},[46,51490,51492,51494,51496],{"class":48,"line":51491},220,[46,51493,35636],{"class":56},[46,51495,35570],{"class":173},[46,51497,459],{"class":56},[46,51499,51501,51503,51505],{"class":48,"line":51500},221,[46,51502,35647],{"class":56},[46,51504,35749],{"class":173},[46,51506,459],{"class":56},[46,51508,51510],{"class":48,"line":51509},222,[46,51511,35757],{"class":56},[46,51513,51515],{"class":48,"line":51514},223,[46,51516,616],{"emptyLinePlaceholder":615},[46,51518,51520],{"class":48,"line":51519},224,[46,51521,35768],{"class":2253},[46,51523,51525,51527,51529,51531,51533],{"class":48,"line":51524},225,[46,51526,911],{"class":52},[46,51528,914],{"class":180},[46,51530,4970],{"class":52},[46,51532,33204],{"class":173},[46,51534,760],{"class":56},[46,51536,51538],{"class":48,"line":51537},226,[46,51539,35787],{"class":2253},[46,51541,51543,51545,51547],{"class":48,"line":51542},227,[46,51544,46517],{"class":56},[46,51546,79],{"class":52},[46,51548,46522],{"class":56},[46,51550,51552,51554,51556],{"class":48,"line":51551},228,[46,51553,35804],{"class":56},[46,51555,79],{"class":52},[46,51557,35809],{"class":56},[46,51559,51561,51563,51565,51567,51569,51571,51573],{"class":48,"line":51560},229,[46,51562,35367],{"class":56},[46,51564,79],{"class":52},[46,51566,46539],{"class":56},[46,51568,35822],{"class":439},[46,51570,79],{"class":52},[46,51572,3093],{"class":180},[46,51574,459],{"class":56},[46,51576,51578],{"class":48,"line":51577},230,[46,51579,35834],{"class":56},[23999,51581,51583],{"id":51582},"_242测试代码","2.4.2.测试代码",[19,51585,51586],{},"使用测试集进行测试与推理",[36,51588,51590],{"className":38,"code":51589,"language":40,"meta":41,"style":41},"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",[43,51591,51592,51598,51608,51618,51629,51639,51643,51647,51655,51660,51664,51681,51685,51689,51693,51697,51701,51733,51737,51745,51749,51761,51765,51769,51773,51777,51781,51785,51789,51793,51811,51825,51829,51839,51849,51859,51865,51869,51873,51881,51885,51901,51909,51913,51917,51925,51933,51937,51941,51945,51949,51955,51959,51969,51977,51985,51989,51993,51997,52005,52009,52025,52029,52033,52037,52049,52053,52065,52069,52073,52085,52089,52099,52103,52107,52119,52123,52131,52135,52139,52147,52151,52159,52163,52167,52171,52175,52179,52195,52203,52207,52211,52229,52235,52239,52249,52257,52265,52269,52273,52277,52281,52289,52293,52309,52313,52321,52329],{"__ignoreMap":41},[46,51593,51594,51596],{"class":48,"line":49},[46,51595,53],{"class":52},[46,51597,32378],{"class":56},[46,51599,51600,51602,51604,51606],{"class":48,"line":60},[46,51601,53],{"class":52},[46,51603,33392],{"class":56},[46,51605,398],{"class":52},[46,51607,33397],{"class":56},[46,51609,51610,51612,51614,51616],{"class":48,"line":200},[46,51611,957],{"class":52},[46,51613,33375],{"class":56},[46,51615,53],{"class":52},[46,51617,33380],{"class":56},[46,51619,51620,51622,51624,51626],{"class":48,"line":211},[46,51621,957],{"class":52},[46,51623,33346],{"class":56},[46,51625,53],{"class":52},[46,51627,51628],{"class":56}," ImageFolder\n",[46,51630,51631,51633,51635,51637],{"class":48,"line":222},[46,51632,957],{"class":52},[46,51634,33890],{"class":56},[46,51636,53],{"class":52},[46,51638,46611],{"class":56},[46,51640,51641],{"class":48,"line":636},[46,51642,616],{"emptyLinePlaceholder":615},[46,51644,51645],{"class":48,"line":641},[46,51646,35924],{"class":2253},[46,51648,51649,51651,51653],{"class":48,"line":653},[46,51650,748],{"class":52},[46,51652,35931],{"class":169},[46,51654,33928],{"class":56},[46,51656,51657],{"class":48,"line":659},[46,51658,51659],{"class":2253},"   # 导入自己的数据集，并进行数据处理\n",[46,51661,51662],{"class":48,"line":665},[46,51663,49929],{"class":2253},[46,51665,51666,51668,51670,51672,51674,51676,51679],{"class":48,"line":670},[46,51667,49934],{"class":180},[46,51669,79],{"class":52},[46,51671,2856],{"class":52},[46,51673,2439],{"class":173},[46,51675,2744],{"class":180},[46,51677,51678],{"class":49945},"\u002Fdata\u002Ftest",[46,51680,27125],{"class":173},[46,51682,51683],{"class":48,"line":676},[46,51684,616],{"emptyLinePlaceholder":615},[46,51686,51687],{"class":48,"line":682},[46,51688,49957],{"class":2253},[46,51690,51691],{"class":48,"line":688},[46,51692,49962],{"class":2253},[46,51694,51695],{"class":48,"line":693},[46,51696,49967],{"class":2253},[46,51698,51699],{"class":48,"line":699},[46,51700,49972],{"class":2253},[46,51702,51703,51705,51707,51709,51711,51713,51715,51717,51719,51721,51723,51725,51727,51729,51731],{"class":48,"line":705},[46,51704,49977],{"class":56},[46,51706,79],{"class":52},[46,51708,49982],{"class":56},[46,51710,49985],{"class":180},[46,51712,2565],{"class":56},[46,51714,49990],{"class":180},[46,51716,2565],{"class":56},[46,51718,49995],{"class":180},[46,51720,49998],{"class":56},[46,51722,50001],{"class":180},[46,51724,2565],{"class":56},[46,51726,50006],{"class":180},[46,51728,2565],{"class":56},[46,51730,50011],{"class":180},[46,51732,6673],{"class":56},[46,51734,51735],{"class":48,"line":711},[46,51736,50018],{"class":2253},[46,51738,51739,51741,51743],{"class":48,"line":717},[46,51740,50023],{"class":56},[46,51742,79],{"class":52},[46,51744,50028],{"class":56},[46,51746,51747],{"class":48,"line":723},[46,51748,50033],{"class":2253},[46,51750,51751,51753,51755,51757,51759],{"class":48,"line":729},[46,51752,50038],{"class":56},[46,51754,33478],{"class":180},[46,51756,2565],{"class":56},[46,51758,33478],{"class":180},[46,51760,44593],{"class":56},[46,51762,51763],{"class":48,"line":735},[46,51764,50051],{"class":2253},[46,51766,51767],{"class":48,"line":740},[46,51768,50056],{"class":56},[46,51770,51771],{"class":48,"line":745},[46,51772,50061],{"class":56},[46,51774,51775],{"class":48,"line":763},[46,51776,50066],{"class":2253},[46,51778,51779],{"class":48,"line":778},[46,51780,50071],{"class":2253},[46,51782,51783],{"class":48,"line":789},[46,51784,616],{"emptyLinePlaceholder":615},[46,51786,51787],{"class":48,"line":794},[46,51788,50080],{"class":2253},[46,51790,51791],{"class":48,"line":806},[46,51792,50085],{"class":2253},[46,51794,51795,51797,51799,51801,51803,51805,51807,51809],{"class":48,"line":829},[46,51796,35938],{"class":56},[46,51798,79],{"class":52},[46,51800,50094],{"class":56},[46,51802,50097],{"class":180},[46,51804,2565],{"class":56},[46,51806,50102],{"class":439},[46,51808,79],{"class":52},[46,51810,50107],{"class":56},[46,51812,51813,51815,51817,51819,51821,51823],{"class":48,"line":840},[46,51814,35995],{"class":56},[46,51816,79],{"class":52},[46,51818,33511],{"class":56},[46,51820,33514],{"class":439},[46,51822,79],{"class":52},[46,51824,36006],{"class":56},[46,51826,51827],{"class":48,"line":846},[46,51828,36011],{"class":2253},[46,51830,51831,51833,51835,51837],{"class":48,"line":852},[46,51832,36016],{"class":439},[46,51834,79],{"class":52},[46,51836,2405],{"class":180},[46,51838,33443],{"class":56},[46,51840,51841,51843,51845,51847],{"class":48,"line":857},[46,51842,36027],{"class":439},[46,51844,79],{"class":52},[46,51846,33453],{"class":180},[46,51848,33443],{"class":56},[46,51850,51851,51853,51855,51857],{"class":48,"line":875},[46,51852,36038],{"class":439},[46,51854,79],{"class":52},[46,51856,2379],{"class":180},[46,51858,459],{"class":56},[46,51860,51861,51863],{"class":48,"line":892},[46,51862,6108],{"class":52},[46,51864,36051],{"class":56},[46,51866,51867],{"class":48,"line":898},[46,51868,616],{"emptyLinePlaceholder":615},[46,51870,51871],{"class":48,"line":903},[46,51872,36060],{"class":2253},[46,51874,51875,51877,51879],{"class":48,"line":908},[46,51876,748],{"class":52},[46,51878,36067],{"class":169},[46,51880,36070],{"class":56},[46,51882,51883],{"class":48,"line":925},[46,51884,36075],{"class":2253},[46,51886,51887,51889,51891,51893,51895,51897,51899],{"class":48,"line":1238},[46,51888,33216],{"class":56},[46,51890,79],{"class":52},[46,51892,33223],{"class":173},[46,51894,3744],{"class":52},[46,51896,33228],{"class":56},[46,51898,3741],{"class":52},[46,51900,36092],{"class":173},[46,51902,51903,51905,51907],{"class":48,"line":1251},[46,51904,33268],{"class":56},[46,51906,79],{"class":52},[46,51908,34264],{"class":56},[46,51910,51911],{"class":48,"line":1256},[46,51912,616],{"emptyLinePlaceholder":615},[46,51914,51915],{"class":48,"line":1261},[46,51916,36109],{"class":2253},[46,51918,51919,51921,51923],{"class":48,"line":1274},[46,51920,36114],{"class":56},[46,51922,79],{"class":52},[46,51924,34317],{"class":180},[46,51926,51927,51929,51931],{"class":48,"line":10061},[46,51928,36123],{"class":56},[46,51930,79],{"class":52},[46,51932,5105],{"class":180},[46,51934,51935],{"class":48,"line":11720},[46,51936,616],{"emptyLinePlaceholder":615},[46,51938,51939],{"class":48,"line":11745},[46,51940,36136],{"class":2253},[46,51942,51943],{"class":48,"line":11768},[46,51944,36141],{"class":2253},[46,51946,51947],{"class":48,"line":11792},[46,51948,36146],{"class":2253},[46,51950,51951,51953],{"class":48,"line":11797},[46,51952,797],{"class":52},[46,51954,34858],{"class":56},[46,51956,51957],{"class":48,"line":11802},[46,51958,36157],{"class":2253},[46,51960,51961,51963,51965,51967],{"class":48,"line":11807},[46,51962,5422],{"class":52},[46,51964,36164],{"class":56},[46,51966,1146],{"class":52},[46,51968,36169],{"class":56},[46,51970,51971,51973,51975],{"class":48,"line":11816},[46,51972,36174],{"class":56},[46,51974,79],{"class":52},[46,51976,36179],{"class":56},[46,51978,51979,51981,51983],{"class":48,"line":11821},[46,51980,36184],{"class":56},[46,51982,79],{"class":52},[46,51984,36189],{"class":56},[46,51986,51987],{"class":48,"line":11827},[46,51988,36194],{"class":2253},[46,51990,51991],{"class":48,"line":11848},[46,51992,34849],{"class":56},[46,51994,51995],{"class":48,"line":11854},[46,51996,36203],{"class":2253},[46,51998,51999,52001,52003],{"class":48,"line":11868},[46,52000,34634],{"class":56},[46,52002,79],{"class":52},[46,52004,36212],{"class":56},[46,52006,52007],{"class":48,"line":11874},[46,52008,36217],{"class":2253},[46,52010,52011,52013,52015,52017,52019,52021,52023],{"class":48,"line":11901},[46,52012,34651],{"class":56},[46,52014,79],{"class":52},[46,52016,34656],{"class":56},[46,52018,34659],{"class":439},[46,52020,79],{"class":52},[46,52022,2405],{"class":180},[46,52024,459],{"class":56},[46,52026,52027],{"class":48,"line":11910},[46,52028,36238],{"class":2253},[46,52030,52031],{"class":48,"line":11916},[46,52032,36243],{"class":2253},[46,52034,52035],{"class":48,"line":11924},[46,52036,36248],{"class":2253},[46,52038,52039,52041,52043,52045,52047],{"class":48,"line":11929},[46,52040,36253],{"class":56},[46,52042,11481],{"class":52},[46,52044,34761],{"class":56},[46,52046,4970],{"class":52},[46,52048,36262],{"class":56},[46,52050,52051],{"class":48,"line":18605},[46,52052,36267],{"class":2253},[46,52054,52055,52057,52059,52061,52063],{"class":48,"line":18611},[46,52056,36272],{"class":56},[46,52058,11481],{"class":52},[46,52060,36277],{"class":56},[46,52062,2379],{"class":180},[46,52064,459],{"class":56},[46,52066,52067],{"class":48,"line":18634},[46,52068,616],{"emptyLinePlaceholder":615},[46,52070,52071],{"class":48,"line":18640},[46,52072,36290],{"class":2253},[46,52074,52075,52077,52079,52081,52083],{"class":48,"line":18663},[46,52076,36295],{"class":56},[46,52078,79],{"class":52},[46,52080,36300],{"class":56},[46,52082,2770],{"class":52},[46,52084,36305],{"class":56},[46,52086,52087],{"class":48,"line":18677},[46,52088,36310],{"class":2253},[46,52090,52091,52093,52095,52097],{"class":48,"line":18697},[46,52092,34425],{"class":180},[46,52094,1152],{"class":56},[46,52096,36319],{"class":173},[46,52098,36322],{"class":56},[46,52100,52101],{"class":48,"line":18703},[46,52102,616],{"emptyLinePlaceholder":615},[46,52104,52105],{"class":48,"line":18714},[46,52106,36331],{"class":2253},[46,52108,52109,52111,52113,52115,52117],{"class":48,"line":18737},[46,52110,911],{"class":52},[46,52112,914],{"class":180},[46,52114,4970],{"class":52},[46,52116,33204],{"class":173},[46,52118,760],{"class":56},[46,52120,52121],{"class":48,"line":18759},[46,52122,36348],{"class":2253},[46,52124,52125,52127,52129],{"class":48,"line":18764},[46,52126,33268],{"class":56},[46,52128,79],{"class":52},[46,52130,46522],{"class":56},[46,52132,52133],{"class":48,"line":18770},[46,52134,36361],{"class":2253},[46,52136,52137],{"class":48,"line":18784},[46,52138,36366],{"class":2253},[46,52140,52141,52143,52145],{"class":48,"line":18797},[46,52142,36371],{"class":56},[46,52144,36374],{"class":173},[46,52146,32479],{"class":56},[46,52148,52149],{"class":48,"line":18802},[46,52150,36381],{"class":2253},[46,52152,52153,52155,52157],{"class":48,"line":18816},[46,52154,35995],{"class":56},[46,52156,79],{"class":52},[46,52158,36390],{"class":56},[46,52160,52161],{"class":48,"line":18821},[46,52162,36395],{"class":2253},[46,52164,52165],{"class":48,"line":18827},[46,52166,36400],{"class":56},[46,52168,52169],{"class":48,"line":18832},[46,52170,616],{"emptyLinePlaceholder":615},[46,52172,52173],{"class":48,"line":18846},[46,52174,36409],{"class":2253},[46,52176,52177],{"class":48,"line":18851},[46,52178,36414],{"class":2253},[46,52180,52181,52183,52185,52187,52189,52191,52193],{"class":48,"line":18856},[46,52182,33216],{"class":56},[46,52184,79],{"class":52},[46,52186,33223],{"class":173},[46,52188,3744],{"class":52},[46,52190,33228],{"class":56},[46,52192,3741],{"class":52},[46,52194,36092],{"class":173},[46,52196,52197,52199,52201],{"class":48,"line":18870},[46,52198,33268],{"class":56},[46,52200,79],{"class":52},[46,52202,34264],{"class":56},[46,52204,52205],{"class":48,"line":18882},[46,52206,36443],{"class":2253},[46,52208,52209],{"class":48,"line":18887},[46,52210,36448],{"class":2253},[46,52212,52213,52215,52217,52219,52222,52224,52227],{"class":48,"line":18900},[46,52214,36453],{"class":56},[46,52216,79],{"class":52},[46,52218,3076],{"class":56},[46,52220,52221],{"class":173},"'猫'",[46,52223,2565],{"class":56},[46,52225,52226],{"class":173},"'狗'",[46,52228,35220],{"class":56},[46,52230,52231,52233],{"class":48,"line":18905},[46,52232,797],{"class":52},[46,52234,34858],{"class":56},[46,52236,52237],{"class":48,"line":18910},[46,52238,36518],{"class":2253},[46,52240,52241,52243,52245,52247],{"class":48,"line":18915},[46,52242,5422],{"class":52},[46,52244,36525],{"class":56},[46,52246,1146],{"class":52},[46,52248,36169],{"class":56},[46,52250,52251,52253,52255],{"class":48,"line":18928},[46,52252,34584],{"class":56},[46,52254,79],{"class":52},[46,52256,34589],{"class":56},[46,52258,52259,52261,52263],{"class":48,"line":18933},[46,52260,34599],{"class":56},[46,52262,79],{"class":52},[46,52264,34604],{"class":56},[46,52266,52267],{"class":48,"line":34607},[46,52268,616],{"emptyLinePlaceholder":615},[46,52270,52271],{"class":48,"line":34613},[46,52272,36554],{"class":2253},[46,52274,52275],{"class":48,"line":34619},[46,52276,34849],{"class":56},[46,52278,52279],{"class":48,"line":34625},[46,52280,36563],{"class":2253},[46,52282,52283,52285,52287],{"class":48,"line":34631},[46,52284,34634],{"class":56},[46,52286,79],{"class":52},[46,52288,34639],{"class":56},[46,52290,52291],{"class":48,"line":34642},[46,52292,36576],{"class":2253},[46,52294,52295,52297,52299,52301,52303,52305,52307],{"class":48,"line":34648},[46,52296,34651],{"class":56},[46,52298,79],{"class":52},[46,52300,34656],{"class":56},[46,52302,34659],{"class":439},[46,52304,79],{"class":52},[46,52306,2405],{"class":180},[46,52308,459],{"class":56},[46,52310,52311],{"class":48,"line":34668},[46,52312,36597],{"class":2253},[46,52314,52315,52317,52319],{"class":48,"line":34674},[46,52316,36602],{"class":56},[46,52318,79],{"class":52},[46,52320,36607],{"class":56},[46,52322,52323,52325,52327],{"class":48,"line":34685},[46,52324,36612],{"class":56},[46,52326,79],{"class":52},[46,52328,36617],{"class":56},[46,52330,52331,52333,52335,52337,52339,52341,52343,52345],{"class":48,"line":34691},[46,52332,36622],{"class":180},[46,52334,1152],{"class":56},[46,52336,36627],{"class":173},[46,52338,36630],{"class":56},[46,52340,36633],{"class":173},[46,52342,2565],{"class":56},[46,52344,36638],{"class":173},[46,52346,36641],{"class":56},[2098,52348,52349],{},"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":41,"searchDepth":60,"depth":60,"links":52351},[52352,52353,52354,52355],{"id":32573,"depth":200,"text":32574},{"id":39811,"depth":200,"text":39812},{"id":43244,"depth":200,"text":43245},{"id":47252,"depth":200,"text":47253},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":32565,"description":25378},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":52362,"title":52363,"body":52364,"description":25378,"extension":2125,"meta":52371,"navigation":615,"path":52372,"seo":52373,"stem":52374,"__hash__":52375},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":52365,"toc":52369},[52366],[10,52367,52363],{"id":52368},"_3yolo模型学习",{"title":41,"searchDepth":60,"depth":60,"links":52370},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":52363,"description":25378},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":52377,"title":52378,"body":52379,"description":52386,"extension":2125,"meta":52387,"navigation":615,"path":52389,"seo":52390,"stem":52391,"__hash__":52392},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":52380,"toc":52384},[52381],[19,52382,52383],{},"yolo模型还未补充",{"title":41,"searchDepth":60,"depth":60,"links":52385},[],"深度学习学习",{"category":52388},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":52378,"description":52386},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":52394,"title":52395,"body":52396,"description":25378,"extension":2125,"meta":52421,"navigation":615,"path":52422,"seo":52423,"stem":52424,"__hash__":52425},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":52397,"toc":52419},[52398,52401,52404,52409,52416],[10,52399,52395],{"id":52400},"_1工具",[19,52402,52403],{},"提示错误插件：有问题会提前报错",[19,52405,52406],{},[3514,52407],{"alt":41,"src":52408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[19,52410,52411],{},[2426,52412,52415],{"href":52413,"rel":52414},"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",[25862],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[19,52417,52418],{},"alt键加上下箭头可以实现语句的移动",{"title":41,"searchDepth":60,"depth":60,"links":52420},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":52395,"description":25378},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":52427,"title":52428,"body":52429,"description":25378,"extension":2125,"meta":55290,"navigation":615,"path":55291,"seo":55292,"stem":55293,"__hash__":55294},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":52430,"toc":55241},[52431,52434,52438,52442,52447,52450,52455,52459,52466,52471,52478,52483,52490,52495,52499,52504,52507,52511,52516,52520,52525,52528,52531,52534,52537,52540,52543,52546,52549,52554,52559,52564,52568,52571,52574,52578,52583,52586,52594,52599,52616,52624,52629,52634,52639,52644,52649,52652,52657,52662,52666,52675,52680,52685,52689,52694,52697,52701,52706,52714,52719,52724,52727,52732,52737,52742,52745,52748,52751,52756,52761,52764,52769,52772,52777,52780,52783,52786,52791,52794,52797,52812,52817,52822,52827,52830,52833,52836,52850,52853,52858,52863,52866,52869,52872,52875,52878,52881,52884,52888,52892,52897,52901,52904,52909,52914,52917,52922,52925,52929,52934,52937,52940,52943,52946,52949,52952,52955,52958,52961,52965,52970,52975,52980,52983,52986,52990,52995,52998,53002,53005,53008,53013,53016,53019,53023,53027,53030,53035,53040,53043,53072,53077,53082,53087,53092,53096,53101,53105,53110,53113,53117,53121,53126,53130,53135,53140,53144,53149,53152,53154,53157,53162,53166,53171,53175,53179,53184,53189,53194,53199,53203,53208,53213,53218,53221,53224,53229,53232,53237,53242,53247,53252,53256,54062,54066,54409,54414,54417,54420,54423,54426,54429,54432,54435,54438,54440,54443,54445,54448,54452,54457,54460,54463,54466,54470,54475,54480,54500,54503,54507,54512,54517,54534,54538,54567,54571,54593,54595,54634,54642,54648,54652,54655,54658,54663,54668,54671,54674,54677,54682,54687,54690,54693,54696,54699,54702,54705,54708,54711,54714,54717,54720,54722,54725,54728,54731,54734,54737,54740,54743,54746,54750,54755,54758,54763,54766,54769,54772,54775,54778,54781,54784,54786,54789,54792,54795,54798,54801,54804,54808,54811,54820,54823,54828,54831,54836,54839,54842,54845,54848,54851,54854,54857,54861,54865,54868,54871,54876,54881,54886,54890,54895,54900,54903,54906,54909,54912,54915,54920,54923,54928,54930,54935,54938,54942,54947,54950,54953,54958,54962,54965,54970,54973,54976,55005,55010,55013,55016,55019,55022,55025,55029,55032,55116,55120,55123,55128,55133,55140,55143,55146,55149,55152,55155,55160,55165,55168,55171,55174,55177,55180,55183,55186,55189,55192,55194,55197,55201,55206,55211,55216,55219,55224,55229,55232,55235,55238],[10,52432,52428],{"id":52433},"_2基础语法",[14,52435,52437],{"id":52436},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[479,52439,52441],{"id":52440},"_211-js组成","2.1.1 js组成",[23,52443,52444],{},[26,52445,52446],{},"js是编程语言，html和css不是编程语言，是标记语言",[19,52448,52449],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[23,52451,52452],{"start":60},[26,52453,52454],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[479,52456,52458],{"id":52457},"_212-js书写位置","2.1.2 js书写位置",[23,52460,52461],{},[26,52462,52463],{},[2339,52464,52465],{},"内部 JavaScript",[19,52467,52468],{},[3514,52469],{"alt":41,"src":52470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[23,52472,52473],{"start":60},[26,52474,52475],{},[2339,52476,52477],{},"外部 JavaScript",[19,52479,52480],{},[3514,52481],{"alt":41,"src":52482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[23,52484,52485],{"start":200},[26,52486,52487],{},[2339,52488,52489],{},"内联 JavaScript",[19,52491,52492],{},[3514,52493],{"alt":41,"src":52494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[479,52496,52498],{"id":52497},"_213-javascript注释","2.1.3 JavaScript注释",[19,52500,52501],{},[3514,52502],{"alt":41,"src":52503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[19,52505,52506],{},"alt+shift+a一定要记住！",[479,52508,52510],{"id":52509},"_214-javascript结束符","2.1.4 JavaScript结束符",[19,52512,52513],{},[3514,52514],{"alt":41,"src":52515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[479,52517,52519],{"id":52518},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[23,52521,52522],{},[26,52523,52524],{},"输出语法：",[19,52526,52527],{},"①document.write('要出的内容')",[19,52529,52530],{},"向body内输出内容；",[19,52532,52533],{},"如果输出的内容写的是标签，也会被解析cheng",[19,52535,52536],{},"②alert('要出的内容')",[19,52538,52539],{},"页面弹出警告对话框",[19,52541,52542],{},"③console.log('控制台打印')",[19,52544,52545],{},"控制台输出语法，程序员调试使用",[19,52547,52548],{},"输入log就行，自动生成：",[19,52550,52551],{},[3514,52552],{"alt":41,"src":52553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[23,52555,52556],{"start":60},[26,52557,52558],{},"输入语法：",[19,52560,52561],{},[3514,52562],{"alt":41,"src":52563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[479,52565,52567],{"id":52566},"_2116-字面量","21.1.6 字面量",[19,52569,52570],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[19,52572,52573],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,52575,52577],{"id":52576},"_22-变量","2.2 变量",[23,52579,52580],{},[26,52581,52582],{},"变量声明",[19,52584,52585],{},"let 变量名",[3191,52587,52588,52591],{},[26,52589,52590],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[26,52592,52593],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[23,52595,52596],{"start":60},[26,52597,52598],{},"变量赋值",[36,52600,52604],{"className":52601,"code":52602,"language":52603,"meta":41,"style":41},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[43,52605,52606,52611],{"__ignoreMap":41},[46,52607,52608],{"class":48,"line":49},[46,52609,52610],{"class":56},"let age\n",[46,52612,52613],{"class":48,"line":60},[46,52614,52615],{"class":56},"age=18\n",[23,52617,52618,52621],{"start":200},[26,52619,52620],{},"连这些（变量的初始化）：let age=18",[26,52622,52623],{},"更新变量",[19,52625,52626],{},[3514,52627],{"alt":41,"src":52628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[23,52630,52631],{"start":222},[26,52632,52633],{},"声明多个变量",[19,52635,52636],{},[3514,52637],{"alt":41,"src":52638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[23,52640,52641],{"start":636},[26,52642,52643],{},"变量命名规则与规范",[19,52645,52646],{},[3514,52647],{"alt":41,"src":52648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[19,52650,52651],{},"遵守小驼峰！",[23,52653,52654],{"start":641},[26,52655,52656],{},"变量拓展-let和var的区别",[19,52658,52659],{},[3514,52660],{"alt":41,"src":52661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,52663,52665],{"id":52664},"_23-数组","2.3 数组",[36,52667,52669],{"className":52601,"code":52668,"language":52603,"meta":41,"style":41},"let arr = []\n",[43,52670,52671],{"__ignoreMap":41},[46,52672,52673],{"class":48,"line":49},[46,52674,52668],{"class":56},[19,52676,52677],{},[3514,52678],{"alt":41,"src":52679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[19,52681,52682],{},[3514,52683],{"alt":41,"src":52684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,52686,52688],{"id":52687},"_24-常量","2.4 常量",[19,52690,52691],{},[3514,52692],{"alt":41,"src":52693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[19,52695,52696],{},"const — 类似于 let ，但是变量的值无法被修改",[14,52698,52700],{"id":52699},"_25-数据类型","2.5 数据类型",[19,52702,52703],{},[3514,52704],{"alt":41,"src":52705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[23,52707,52708,52711],{},[26,52709,52710],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[26,52712,52713],{},"算数运算符：",[19,52715,52716],{},[3514,52717],{"alt":41,"src":52718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[23,52720,52721],{"start":200},[26,52722,52723],{},"数字类型（Number）",[19,52725,52726],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[19,52728,52729],{},[3514,52730],{"alt":41,"src":52731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[23,52733,52734],{"start":211},[26,52735,52736],{},"字符串类型（string）",[19,52738,52739],{},[3514,52740],{"alt":41,"src":52741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[19,52743,52744],{},"反引号也是可以使用的",[19,52746,52747],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[19,52749,52750],{},"例如：document.write(\"我今年\"+age+\"岁\")",[23,52752,52753],{"start":222},[26,52754,52755],{},"模板字符串",[19,52757,52758],{},[3514,52759],{"alt":41,"src":52760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[19,52762,52763],{},"类似于python的字符串格式化",[23,52765,52766],{"start":636},[26,52767,52768],{},"布尔类型",[19,52770,52771],{},"true 和 false",[23,52773,52774],{"start":641},[26,52775,52776],{},"未定义类型（underfined）",[19,52778,52779],{},"表示没有赋值",[19,52781,52782],{},"未定义类型是比较特殊的类型，只有一个值undefined",[19,52784,52785],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[23,52787,52788],{"start":653},[26,52789,52790],{},"null（空类型）",[19,52792,52793],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[19,52795,52796],{},"赋值了，但是内容为空",[36,52798,52800],{"className":52601,"code":52799,"language":52603,"meta":41,"style":41},"typeof null\n输出的是'object'，是一个对象数据类型\n",[43,52801,52802,52807],{"__ignoreMap":41},[46,52803,52804],{"class":48,"line":49},[46,52805,52806],{"class":56},"typeof null\n",[46,52808,52809],{"class":48,"line":60},[46,52810,52811],{"class":56},"输出的是'object'，是一个对象数据类型\n",[23,52813,52814],{"start":659},[26,52815,52816],{},"控制台检测数据类型",[19,52818,52819],{},[3514,52820],{"alt":41,"src":52821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[23,52823,52824],{"start":665},[26,52825,52826],{},"类型转换",[19,52828,52829],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[19,52831,52832],{},"转换方式：隐式转换和显示转换",[19,52834,52835],{},"①隐式转换",[3191,52837,52838,52841,52844,52847],{},[26,52839,52840],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[26,52842,52843],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[26,52845,52846],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[26,52848,52849],{},"任何数据和字符串相加结果都是字符串",[19,52851,52852],{},"②显示转换",[19,52854,52855],{},[3514,52856],{"alt":41,"src":52857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[19,52859,52860],{},[3514,52861],{"alt":41,"src":52862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[19,52864,52865],{},"在输入的时候要用好隐式转换，简单写起来",[19,52867,52868],{},"let num = +prompt(’请输入数字：‘)",[19,52870,52871],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[19,52873,52874],{},"console.log(parseInt('12.333px'))",[19,52876,52877],{},"输出为：12",[19,52879,52880],{},"console.log(parseInt('a'a'a12.333px'))",[19,52882,52883],{},"输出：NaN",[14,52885,52887],{"id":52886},"_26-运算符","2.6 运算符",[479,52889,52891],{"id":52890},"_261-赋值运算符","2.6.1 赋值运算符",[19,52893,52894],{},[3514,52895],{"alt":41,"src":52896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[479,52898,52900],{"id":52899},"_262-一元运算符","2.6.2 一元运算符",[19,52902,52903],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[19,52905,52906],{},[3514,52907],{"alt":41,"src":52908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[19,52910,52911],{},[3514,52912],{"alt":41,"src":52913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[19,52915,52916],{},"两者的区别：",[19,52918,52919],{},[3514,52920],{"alt":41,"src":52921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[19,52923,52924],{},"前置先自加；后置后加，代码执行完之后再加",[479,52926,52928],{"id":52927},"_263-比较运算符","2.6.3 比较运算符",[19,52930,52931],{},[3514,52932],{"alt":41,"src":52933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[19,52935,52936],{},"比较运算符也有隐式转换",[19,52938,52939],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[19,52941,52942],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[19,52944,52945],{},"要使用三等，开发的时候",[19,52947,52948],{},"NaN不等于任何人，包括它自己",[19,52950,52951],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[19,52953,52954],{},"7\u002F10=0.7",[19,52956,52957],{},"最后：0.5+0.2=0.7",[19,52959,52960],{},"字符串比较，比较的是字符对应的ASCII码",[479,52962,52964],{"id":52963},"_264-逻辑运算符","2.6.4 逻辑运算符",[19,52966,52967],{},[3514,52968],{"alt":41,"src":52969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[19,52971,52972],{},[3514,52973],{"alt":41,"src":52974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[19,52976,52977],{},[3514,52978],{"alt":41,"src":52979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[19,52981,52982],{},"上述题目选D",[19,52984,52985],{},"与真2假1；或真1假2",[479,52987,52989],{"id":52988},"_265-运算符优先级","2.6.5 运算符优先级",[19,52991,52992],{},[3514,52993],{"alt":41,"src":52994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[19,52996,52997],{},"先算逻辑与，后算逻辑或",[14,52999,53001],{"id":53000},"_27-语句","2.7 语句",[19,53003,53004],{},"表达式：是可以被求值的代码，会有结果给我们",[19,53006,53007],{},"语句：语句是可以被执行的代码，例如prompt()",[19,53009,53010],{},[3514,53011],{"alt":41,"src":53012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[19,53014,53015],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[19,53017,53018],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[479,53020,53022],{"id":53021},"_271-分支语句","2.7.1 分支语句",[23999,53024,53026],{"id":53025},"_2711-if分支语句","2.7.1.1 if分支语句",[19,53028,53029],{},"if语句单行简单的话，可以不写{}，写在一行就行",[23,53031,53032],{},[26,53033,53034],{},"单分支语句",[19,53036,53037],{},[3514,53038],{"alt":41,"src":53039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[19,53041,53042],{},"除了0，所有数字都为真",[36,53044,53046],{"className":52601,"code":53045,"language":52603,"meta":41,"style":41},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[43,53047,53048,53053,53058,53063,53067],{"__ignoreMap":41},[46,53049,53050],{"class":48,"line":49},[46,53051,53052],{"class":56},"if（0) {\n",[46,53054,53055],{"class":48,"line":60},[46,53056,53057],{"class":56},"    let a=1\n",[46,53059,53060],{"class":48,"line":200},[46,53061,53062],{"class":56},"    alert(typeof a)\n",[46,53064,53065],{"class":48,"line":211},[46,53066,3616],{"class":56},[46,53068,53069],{"class":48,"line":222},[46,53070,53071],{"class":56},"不输出，括号为假\n",[23,53073,53074],{"start":60},[26,53075,53076],{},"双分支语句",[19,53078,53079],{},[3514,53080],{"alt":41,"src":53081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[23,53083,53084],{"start":200},[26,53085,53086],{},"多分支语句",[19,53088,53089],{},[3514,53090],{"alt":41,"src":53091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[23999,53093,53095],{"id":53094},"_2712-三元运算符","2.7.1.2 三元运算符",[19,53097,53098],{},[3514,53099],{"alt":41,"src":53100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[23999,53102,53104],{"id":53103},"_2713-switch语句","2.7.1.3 switch语句",[19,53106,53107],{},[3514,53108],{"alt":41,"src":53109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[19,53111,53112],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[479,53114,53116],{"id":53115},"_272-循环语句","2.7.2 循环语句",[23999,53118,53120],{"id":53119},"_2721-断点演示","2.7.2.1 断点演示",[19,53122,53123],{},[3514,53124],{"alt":41,"src":53125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[23999,53127,53129],{"id":53128},"_2722-while循环","2.7.2.2 while循环",[19,53131,53132],{},[3514,53133],{"alt":41,"src":53134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[19,53136,53137],{},[3514,53138],{"alt":41,"src":53139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[23999,53141,53143],{"id":53142},"_2723-for循环","2.7.2.3 for循环",[19,53145,53146],{},[3514,53147],{"alt":41,"src":53148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[19,53150,53151],{},"for(;;) {",[19,53153,3131],{},[19,53155,53156],{},"表示无限循环",[19,53158,53159],{},[3514,53160],{"alt":41,"src":53161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[23999,53163,53165],{"id":53164},"_2724-循环的退出","2.7.2.4 循环的退出",[19,53167,53168],{},[3514,53169],{"alt":41,"src":53170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,53172,53174],{"id":53173},"_28-数组","2.8 数组",[479,53176,53178],{"id":53177},"_281-基础认识","2.8.1 基础认识",[19,53180,53181],{},[3514,53182],{"alt":41,"src":53183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[19,53185,53186],{},[3514,53187],{"alt":41,"src":53188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[19,53190,53191],{},[3514,53192],{"alt":41,"src":53193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[19,53195,53196],{},[3514,53197],{"alt":41,"src":53198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[479,53200,53202],{"id":53201},"_282-操作数组","2.8.2 操作数组",[19,53204,53205],{},[3514,53206],{"alt":41,"src":53207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[23,53209,53210],{},[26,53211,53212],{},"添加元素",[19,53214,53215],{},[3514,53216],{"alt":41,"src":53217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[19,53219,53220],{},"console.log(arr.push('green'))",[19,53222,53223],{},"输出结果：为新数组的长度",[19,53225,53226],{},[3514,53227],{"alt":41,"src":53228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[19,53230,53231],{},"push用的非常多，一定要记住",[23,53233,53234],{},[26,53235,53236],{},"删除元素",[19,53238,53239],{},[3514,53240],{"alt":41,"src":53241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[19,53243,53244],{},[3514,53245],{"alt":41,"src":53246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[19,53248,53249],{},[3514,53250],{"alt":41,"src":53251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[479,53253,53255],{"id":53254},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[36,53257,53259],{"className":52601,"code":53258,"language":52603,"meta":41,"style":41},"\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",[43,53260,53261,53275,53291,53295,53304,53322,53346,53368,53382,53390,53397,53409,53420,53424,53428,53435,53447,53462,53475,53494,53511,53526,53538,53550,53562,53566,53570,53581,53591,53603,53615,53627,53638,53642,53646,53658,53662,53676,53680,53684,53695,53709,53721,53735,53739,53748,53757,53761,53770,53774,53783,53788,53793,53806,53834,53839,53844,53869,53874,53878,53883,53888,53903,53907,53912,53942,53954,53970,53986,54000,54005,54012,54016,54021,54034,54042,54050,54054],{"__ignoreMap":41},[46,53262,53263,53266,53269,53272],{"class":48,"line":49},[46,53264,53265],{"class":56},"\u003C!",[46,53267,53268],{"class":1361},"DOCTYPE",[46,53270,53271],{"class":169}," html",[46,53273,53274],{"class":56},">\n",[46,53276,53277,53279,53281,53284,53286,53289],{"class":48,"line":60},[46,53278,821],{"class":56},[46,53280,52603],{"class":1361},[46,53282,53283],{"class":169}," lang",[46,53285,79],{"class":56},[46,53287,53288],{"class":173},"\"en\"",[46,53290,53274],{"class":56},[46,53292,53293],{"class":48,"line":200},[46,53294,616],{"emptyLinePlaceholder":615},[46,53296,53297,53299,53302],{"class":48,"line":211},[46,53298,821],{"class":56},[46,53300,53301],{"class":1361},"head",[46,53303,53274],{"class":56},[46,53305,53306,53309,53312,53315,53317,53320],{"class":48,"line":222},[46,53307,53308],{"class":56},"    \u003C",[46,53310,53311],{"class":1361},"meta",[46,53313,53314],{"class":169}," charset",[46,53316,79],{"class":56},[46,53318,53319],{"class":173},"\"UTF-8\"",[46,53321,53274],{"class":56},[46,53323,53324,53326,53328,53331,53333,53336,53339,53341,53344],{"class":48,"line":636},[46,53325,53308],{"class":56},[46,53327,53311],{"class":1361},[46,53329,53330],{"class":169}," http-equiv",[46,53332,79],{"class":56},[46,53334,53335],{"class":173},"\"X-UA-Compatible\"",[46,53337,53338],{"class":169}," content",[46,53340,79],{"class":56},[46,53342,53343],{"class":173},"\"IE=edge\"",[46,53345,53274],{"class":56},[46,53347,53348,53350,53352,53354,53356,53359,53361,53363,53366],{"class":48,"line":641},[46,53349,53308],{"class":56},[46,53351,53311],{"class":1361},[46,53353,1364],{"class":169},[46,53355,79],{"class":56},[46,53357,53358],{"class":173},"\"viewport\"",[46,53360,53338],{"class":169},[46,53362,79],{"class":56},[46,53364,53365],{"class":173},"\"width=device-width, initial-scale=1.0\"",[46,53367,53274],{"class":56},[46,53369,53370,53372,53375,53378,53380],{"class":48,"line":653},[46,53371,53308],{"class":56},[46,53373,53374],{"class":1361},"title",[46,53376,53377],{"class":56},">Document\u003C\u002F",[46,53379,53374],{"class":1361},[46,53381,53274],{"class":56},[46,53383,53384,53386,53388],{"class":48,"line":659},[46,53385,53308],{"class":56},[46,53387,2098],{"class":1361},[46,53389,53274],{"class":56},[46,53391,53392,53395],{"class":48,"line":665},[46,53393,53394],{"class":1361},"        *",[46,53396,17573],{"class":56},[46,53398,53399,53402,53405,53407],{"class":48,"line":670},[46,53400,53401],{"class":180},"            margin",[46,53403,53404],{"class":56},": ",[46,53406,2379],{"class":180},[46,53408,3345],{"class":56},[46,53410,53411,53414,53416,53418],{"class":48,"line":676},[46,53412,53413],{"class":180},"            padding",[46,53415,53404],{"class":56},[46,53417,2379],{"class":180},[46,53419,3345],{"class":56},[46,53421,53422],{"class":48,"line":682},[46,53423,4557],{"class":56},[46,53425,53426],{"class":48,"line":688},[46,53427,616],{"emptyLinePlaceholder":615},[46,53429,53430,53433],{"class":48,"line":693},[46,53431,53432],{"class":169},"        .box",[46,53434,17573],{"class":56},[46,53436,53437,53440,53442,53445],{"class":48,"line":699},[46,53438,53439],{"class":180},"            display",[46,53441,53404],{"class":56},[46,53443,53444],{"class":180},"flex",[46,53446,3345],{"class":56},[46,53448,53449,53452,53454,53457,53460],{"class":48,"line":705},[46,53450,53451],{"class":180},"            width",[46,53453,53404],{"class":56},[46,53455,53456],{"class":180},"700",[46,53458,53459],{"class":52},"px",[46,53461,3345],{"class":56},[46,53463,53464,53467,53469,53471,53473],{"class":48,"line":711},[46,53465,53466],{"class":180},"            height",[46,53468,53404],{"class":56},[46,53470,5991],{"class":180},[46,53472,53459],{"class":52},[46,53474,3345],{"class":56},[46,53476,53477,53480,53482,53484,53486,53489,53492],{"class":48,"line":717},[46,53478,53479],{"class":180},"            border-left",[46,53481,53404],{"class":56},[46,53483,2405],{"class":180},[46,53485,53459],{"class":52},[46,53487,53488],{"class":180}," solid",[46,53490,53491],{"class":180}," pink",[46,53493,3345],{"class":56},[46,53495,53496,53499,53501,53503,53505,53507,53509],{"class":48,"line":723},[46,53497,53498],{"class":180},"            border-bottom",[46,53500,53404],{"class":56},[46,53502,2405],{"class":180},[46,53504,53459],{"class":52},[46,53506,53488],{"class":180},[46,53508,53491],{"class":180},[46,53510,3345],{"class":56},[46,53512,53513,53515,53517,53519,53521,53524],{"class":48,"line":729},[46,53514,53401],{"class":180},[46,53516,53404],{"class":56},[46,53518,2842],{"class":180},[46,53520,53459],{"class":52},[46,53522,53523],{"class":180}," auto",[46,53525,3345],{"class":56},[46,53527,53528,53531,53533,53536],{"class":48,"line":735},[46,53529,53530],{"class":180},"            justify-content",[46,53532,53404],{"class":56},[46,53534,53535],{"class":180},"space-around",[46,53537,3345],{"class":56},[46,53539,53540,53543,53545,53548],{"class":48,"line":740},[46,53541,53542],{"class":180},"            align-items",[46,53544,53404],{"class":56},[46,53546,53547],{"class":180},"flex-end",[46,53549,3345],{"class":56},[46,53551,53552,53555,53557,53560],{"class":48,"line":745},[46,53553,53554],{"class":180},"            text-align",[46,53556,53404],{"class":56},[46,53558,53559],{"class":180},"center",[46,53561,3345],{"class":56},[46,53563,53564],{"class":48,"line":763},[46,53565,4557],{"class":56},[46,53567,53568],{"class":48,"line":778},[46,53569,616],{"emptyLinePlaceholder":615},[46,53571,53572,53574,53576,53579],{"class":48,"line":789},[46,53573,53432],{"class":169},[46,53575,884],{"class":52},[46,53577,53578],{"class":1361},"div",[46,53580,17573],{"class":56},[46,53582,53583,53585,53587,53589],{"class":48,"line":794},[46,53584,53439],{"class":180},[46,53586,53404],{"class":56},[46,53588,53444],{"class":180},[46,53590,3345],{"class":56},[46,53592,53593,53595,53597,53599,53601],{"class":48,"line":806},[46,53594,53451],{"class":180},[46,53596,53404],{"class":56},[46,53598,2842],{"class":180},[46,53600,53459],{"class":52},[46,53602,3345],{"class":56},[46,53604,53605,53608,53610,53613],{"class":48,"line":829},[46,53606,53607],{"class":180},"            background-color",[46,53609,53404],{"class":56},[46,53611,53612],{"class":180},"pink",[46,53614,3345],{"class":56},[46,53616,53617,53620,53622,53625],{"class":48,"line":840},[46,53618,53619],{"class":180},"            flex-direction",[46,53621,53404],{"class":56},[46,53623,53624],{"class":180},"column",[46,53626,3345],{"class":56},[46,53628,53629,53631,53633,53636],{"class":48,"line":846},[46,53630,53530],{"class":180},[46,53632,53404],{"class":56},[46,53634,53635],{"class":180},"space-between",[46,53637,3345],{"class":56},[46,53639,53640],{"class":48,"line":852},[46,53641,4557],{"class":56},[46,53643,53644],{"class":48,"line":857},[46,53645,616],{"emptyLinePlaceholder":615},[46,53647,53648,53650,53653,53656],{"class":48,"line":875},[46,53649,53432],{"class":169},[46,53651,53652],{"class":1361}," div",[46,53654,53655],{"class":1361}," span",[46,53657,17573],{"class":56},[46,53659,53660],{"class":48,"line":892},[46,53661,616],{"emptyLinePlaceholder":615},[46,53663,53664,53667,53669,53672,53674],{"class":48,"line":898},[46,53665,53666],{"class":180},"            margin-top",[46,53668,53404],{"class":56},[46,53670,53671],{"class":180},"-20",[46,53673,53459],{"class":52},[46,53675,3345],{"class":56},[46,53677,53678],{"class":48,"line":903},[46,53679,4557],{"class":56},[46,53681,53682],{"class":48,"line":908},[46,53683,616],{"emptyLinePlaceholder":615},[46,53685,53686,53688,53690,53693],{"class":48,"line":925},[46,53687,53432],{"class":169},[46,53689,53652],{"class":1361},[46,53691,53692],{"class":1361}," h4",[46,53694,17573],{"class":56},[46,53696,53697,53700,53702,53705,53707],{"class":48,"line":1238},[46,53698,53699],{"class":180},"            margin-bottom",[46,53701,53404],{"class":56},[46,53703,53704],{"class":180},"-35",[46,53706,53459],{"class":52},[46,53708,3345],{"class":56},[46,53710,53711,53713,53715,53717,53719],{"class":48,"line":1251},[46,53712,53451],{"class":180},[46,53714,53404],{"class":56},[46,53716,2543],{"class":180},[46,53718,53459],{"class":52},[46,53720,3345],{"class":56},[46,53722,53723,53726,53728,53731,53733],{"class":48,"line":1256},[46,53724,53725],{"class":180},"            margin-left",[46,53727,53404],{"class":56},[46,53729,53730],{"class":180},"-10",[46,53732,53459],{"class":52},[46,53734,3345],{"class":56},[46,53736,53737],{"class":48,"line":1261},[46,53738,4557],{"class":56},[46,53740,53741,53744,53746],{"class":48,"line":1274},[46,53742,53743],{"class":56},"    \u003C\u002F",[46,53745,2098],{"class":1361},[46,53747,53274],{"class":56},[46,53749,53750,53753,53755],{"class":48,"line":10061},[46,53751,53752],{"class":56},"\u003C\u002F",[46,53754,53301],{"class":1361},[46,53756,53274],{"class":56},[46,53758,53759],{"class":48,"line":11720},[46,53760,616],{"emptyLinePlaceholder":615},[46,53762,53763,53765,53768],{"class":48,"line":11745},[46,53764,821],{"class":56},[46,53766,53767],{"class":1361},"body",[46,53769,53274],{"class":56},[46,53771,53772],{"class":48,"line":11768},[46,53773,616],{"emptyLinePlaceholder":615},[46,53775,53776,53778,53781],{"class":48,"line":11792},[46,53777,53308],{"class":56},[46,53779,53780],{"class":1361},"script",[46,53782,53274],{"class":56},[46,53784,53785],{"class":48,"line":11797},[46,53786,53787],{"class":2253},"        \u002F\u002F 1. 四次弹框效果\n",[46,53789,53790],{"class":48,"line":11802},[46,53791,53792],{"class":2253},"        \u002F\u002F 声明一个新的数组\n",[46,53794,53795,53798,53801,53803],{"class":48,"line":11807},[46,53796,53797],{"class":52},"        let",[46,53799,53800],{"class":56}," arr ",[46,53802,79],{"class":52},[46,53804,53805],{"class":56}," []\n",[46,53807,53808,53810,53812,53815,53817,53819,53821,53823,53825,53828,53830,53832],{"class":48,"line":11816},[46,53809,5422],{"class":52},[46,53811,3702],{"class":56},[46,53813,53814],{"class":52},"let",[46,53816,11442],{"class":56},[46,53818,79],{"class":52},[46,53820,27110],{"class":180},[46,53822,11449],{"class":56},[46,53824,3639],{"class":52},[46,53826,53827],{"class":180}," 4",[46,53829,5233],{"class":56},[46,53831,4321],{"class":52},[46,53833,14445],{"class":56},[46,53835,53836],{"class":48,"line":11821},[46,53837,53838],{"class":2253},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[46,53840,53841],{"class":48,"line":11827},[46,53842,53843],{"class":2253},"            \u002F\u002F arr.push(num)\n",[46,53845,53846,53849,53852,53854,53857,53859,53862,53864,53867],{"class":48,"line":11848},[46,53847,53848],{"class":56},"            arr.",[46,53850,53851],{"class":169},"push",[46,53853,1152],{"class":56},[46,53855,53856],{"class":169},"prompt",[46,53858,1152],{"class":56},[46,53860,53861],{"class":173},"`请输入第${",[46,53863,2628],{"class":56},[46,53865,53866],{"class":173},"}季度的数据:`",[46,53868,32479],{"class":56},[46,53870,53871],{"class":48,"line":11854},[46,53872,53873],{"class":2253},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[46,53875,53876],{"class":48,"line":11868},[46,53877,4557],{"class":56},[46,53879,53880],{"class":48,"line":11874},[46,53881,53882],{"class":2253},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[46,53884,53885],{"class":48,"line":11901},[46,53886,53887],{"class":2253},"        \u002F\u002F 盒子开头\n",[46,53889,53890,53893,53896,53898,53901],{"class":48,"line":11910},[46,53891,53892],{"class":56},"        document.",[46,53894,53895],{"class":169},"write",[46,53897,1152],{"class":56},[46,53899,53900],{"class":173},"` \u003Cdiv class=\"box\">`",[46,53902,459],{"class":56},[46,53904,53905],{"class":48,"line":11916},[46,53906,616],{"emptyLinePlaceholder":615},[46,53908,53909],{"class":48,"line":11924},[46,53910,53911],{"class":2253},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[46,53913,53914,53916,53918,53920,53922,53924,53926,53928,53930,53933,53936,53938,53940],{"class":48,"line":11929},[46,53915,5422],{"class":52},[46,53917,3702],{"class":56},[46,53919,53814],{"class":52},[46,53921,11442],{"class":56},[46,53923,79],{"class":52},[46,53925,887],{"class":180},[46,53927,11449],{"class":56},[46,53929,821],{"class":52},[46,53931,53932],{"class":56}," arr.",[46,53934,53935],{"class":180},"length",[46,53937,5233],{"class":56},[46,53939,4321],{"class":52},[46,53941,14445],{"class":56},[46,53943,53944,53947,53949,53951],{"class":48,"line":18605},[46,53945,53946],{"class":56},"            document.",[46,53948,53895],{"class":169},[46,53950,1152],{"class":56},[46,53952,53953],{"class":173},"`\n",[46,53955,53956,53959,53961,53963,53965,53967],{"class":48,"line":18611},[46,53957,53958],{"class":173},"              \u003Cdiv style=\"height: ${",[46,53960,5898],{"class":56},[46,53962,3076],{"class":173},[46,53964,2628],{"class":56},[46,53966,3125],{"class":173},[46,53968,53969],{"class":173},"}px;\">\n",[46,53971,53972,53975,53977,53979,53981,53983],{"class":48,"line":18634},[46,53973,53974],{"class":173},"                \u003Cspan>${",[46,53976,5898],{"class":56},[46,53978,3076],{"class":173},[46,53980,2628],{"class":56},[46,53982,3125],{"class":173},[46,53984,53985],{"class":173},"}\u003C\u002Fspan>\n",[46,53987,53988,53991,53993,53995,53997],{"class":48,"line":18640},[46,53989,53990],{"class":173},"                \u003Ch4>第${",[46,53992,2628],{"class":56},[46,53994,47537],{"class":52},[46,53996,27110],{"class":180},[46,53998,53999],{"class":173},"}季度\u003C\u002Fh4>\n",[46,54001,54002],{"class":48,"line":18663},[46,54003,54004],{"class":173},"              \u003C\u002Fdiv>          \n",[46,54006,54007,54010],{"class":48,"line":18677},[46,54008,54009],{"class":173},"            `",[46,54011,459],{"class":56},[46,54013,54014],{"class":48,"line":18697},[46,54015,4557],{"class":56},[46,54017,54018],{"class":48,"line":18703},[46,54019,54020],{"class":2253},"        \u002F\u002F 盒子结尾\n",[46,54022,54023,54025,54027,54029,54032],{"class":48,"line":18714},[46,54024,53892],{"class":56},[46,54026,53895],{"class":169},[46,54028,1152],{"class":56},[46,54030,54031],{"class":173},"` \u003C\u002Fdiv>`",[46,54033,459],{"class":56},[46,54035,54036,54038,54040],{"class":48,"line":18737},[46,54037,53743],{"class":56},[46,54039,53780],{"class":1361},[46,54041,53274],{"class":56},[46,54043,54044,54046,54048],{"class":48,"line":18759},[46,54045,53752],{"class":56},[46,54047,53767],{"class":1361},[46,54049,53274],{"class":56},[46,54051,54052],{"class":48,"line":18764},[46,54053,616],{"emptyLinePlaceholder":615},[46,54055,54056,54058,54060],{"class":48,"line":18770},[46,54057,53752],{"class":56},[46,54059,52603],{"class":1361},[46,54061,53274],{"class":56},[479,54063,54065],{"id":54064},"_284-冒泡排序","2.8.4 冒泡排序",[36,54067,54069],{"className":52601,"code":54068,"language":52603,"meta":41,"style":41},"\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",[43,54070,54071,54081,54095,54099,54107,54122,54142,54154,54162,54166,54174,54182,54214,54247,54284,54289,54308,54313,54326,54341,54357,54361,54366,54370,54380,54389,54397,54401],{"__ignoreMap":41},[46,54072,54073,54075,54077,54079],{"class":48,"line":49},[46,54074,53265],{"class":56},[46,54076,53268],{"class":1361},[46,54078,53271],{"class":169},[46,54080,53274],{"class":56},[46,54082,54083,54085,54087,54089,54091,54093],{"class":48,"line":60},[46,54084,821],{"class":56},[46,54086,52603],{"class":1361},[46,54088,53283],{"class":169},[46,54090,79],{"class":56},[46,54092,53288],{"class":173},[46,54094,53274],{"class":56},[46,54096,54097],{"class":48,"line":200},[46,54098,616],{"emptyLinePlaceholder":615},[46,54100,54101,54103,54105],{"class":48,"line":211},[46,54102,821],{"class":56},[46,54104,53301],{"class":1361},[46,54106,53274],{"class":56},[46,54108,54109,54112,54114,54116,54118,54120],{"class":48,"line":222},[46,54110,54111],{"class":56},"  \u003C",[46,54113,53311],{"class":1361},[46,54115,53314],{"class":169},[46,54117,79],{"class":56},[46,54119,53319],{"class":173},[46,54121,53274],{"class":56},[46,54123,54124,54126,54128,54130,54132,54134,54136,54138,54140],{"class":48,"line":636},[46,54125,54111],{"class":56},[46,54127,53311],{"class":1361},[46,54129,1364],{"class":169},[46,54131,79],{"class":56},[46,54133,53358],{"class":173},[46,54135,53338],{"class":169},[46,54137,79],{"class":56},[46,54139,53365],{"class":173},[46,54141,53274],{"class":56},[46,54143,54144,54146,54148,54150,54152],{"class":48,"line":641},[46,54145,54111],{"class":56},[46,54147,53374],{"class":1361},[46,54149,53377],{"class":56},[46,54151,53374],{"class":1361},[46,54153,53274],{"class":56},[46,54155,54156,54158,54160],{"class":48,"line":653},[46,54157,53752],{"class":56},[46,54159,53301],{"class":1361},[46,54161,53274],{"class":56},[46,54163,54164],{"class":48,"line":659},[46,54165,616],{"emptyLinePlaceholder":615},[46,54167,54168,54170,54172],{"class":48,"line":665},[46,54169,821],{"class":56},[46,54171,53767],{"class":1361},[46,54173,53274],{"class":56},[46,54175,54176,54178,54180],{"class":48,"line":670},[46,54177,54111],{"class":56},[46,54179,53780],{"class":1361},[46,54181,53274],{"class":56},[46,54183,54184,54187,54189,54191,54194,54196,54198,54200,54202,54204,54206,54208,54210,54212],{"class":48,"line":676},[46,54185,54186],{"class":52},"    let",[46,54188,53800],{"class":56},[46,54190,79],{"class":52},[46,54192,54193],{"class":56}," [",[46,54195,2506],{"class":180},[46,54197,448],{"class":56},[46,54199,2481],{"class":180},[46,54201,448],{"class":56},[46,54203,2266],{"class":180},[46,54205,448],{"class":56},[46,54207,2272],{"class":180},[46,54209,448],{"class":56},[46,54211,2405],{"class":180},[46,54213,35220],{"class":56},[46,54215,54216,54218,54220,54222,54224,54226,54228,54230,54232,54234,54236,54239,54241,54243,54245],{"class":48,"line":682},[46,54217,1140],{"class":52},[46,54219,3702],{"class":56},[46,54221,53814],{"class":52},[46,54223,11442],{"class":56},[46,54225,79],{"class":52},[46,54227,887],{"class":180},[46,54229,11449],{"class":56},[46,54231,821],{"class":52},[46,54233,53932],{"class":56},[46,54235,53935],{"class":180},[46,54237,54238],{"class":52}," -",[46,54240,27110],{"class":180},[46,54242,5233],{"class":56},[46,54244,4321],{"class":52},[46,54246,14445],{"class":56},[46,54248,54249,54252,54254,54256,54258,54260,54262,54264,54266,54268,54270,54272,54274,54276,54278,54280,54282],{"class":48,"line":688},[46,54250,54251],{"class":52},"      for",[46,54253,3702],{"class":56},[46,54255,53814],{"class":52},[46,54257,11504],{"class":56},[46,54259,79],{"class":52},[46,54261,887],{"class":180},[46,54263,11511],{"class":56},[46,54265,821],{"class":52},[46,54267,53932],{"class":56},[46,54269,53935],{"class":180},[46,54271,54238],{"class":52},[46,54273,11442],{"class":56},[46,54275,534],{"class":52},[46,54277,27110],{"class":180},[46,54279,11518],{"class":56},[46,54281,4321],{"class":52},[46,54283,14445],{"class":56},[46,54285,54286],{"class":48,"line":693},[46,54287,54288],{"class":2253},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[46,54290,54291,54293,54296,54298,54301,54303,54305],{"class":48,"line":699},[46,54292,4525],{"class":52},[46,54294,54295],{"class":56}," (arr[j] ",[46,54297,884],{"class":52},[46,54299,54300],{"class":56}," arr[j ",[46,54302,2668],{"class":52},[46,54304,27110],{"class":180},[46,54306,54307],{"class":56},"]) {\n",[46,54309,54310],{"class":48,"line":705},[46,54311,54312],{"class":2253},"          \u002F\u002F 交换两个变量\n",[46,54314,54315,54318,54321,54323],{"class":48,"line":711},[46,54316,54317],{"class":52},"          let",[46,54319,54320],{"class":56}," tmp ",[46,54322,79],{"class":52},[46,54324,54325],{"class":56}," arr[j]\n",[46,54327,54328,54331,54333,54335,54337,54339],{"class":48,"line":717},[46,54329,54330],{"class":56},"          arr[j] ",[46,54332,79],{"class":52},[46,54334,54300],{"class":56},[46,54336,2668],{"class":52},[46,54338,27110],{"class":180},[46,54340,35220],{"class":56},[46,54342,54343,54346,54348,54350,54352,54354],{"class":48,"line":723},[46,54344,54345],{"class":56},"          arr[j ",[46,54347,2668],{"class":52},[46,54349,27110],{"class":180},[46,54351,6460],{"class":56},[46,54353,79],{"class":52},[46,54355,54356],{"class":56}," tmp\n",[46,54358,54359],{"class":48,"line":729},[46,54360,4557],{"class":56},[46,54362,54363],{"class":48,"line":735},[46,54364,54365],{"class":56},"      }\n",[46,54367,54368],{"class":48,"line":740},[46,54369,4217],{"class":56},[46,54371,54372,54375,54377],{"class":48,"line":745},[46,54373,54374],{"class":56},"    document.",[46,54376,53895],{"class":169},[46,54378,54379],{"class":56},"(arr)\n",[46,54381,54382,54385,54387],{"class":48,"line":763},[46,54383,54384],{"class":56},"  \u003C\u002F",[46,54386,53780],{"class":1361},[46,54388,53274],{"class":56},[46,54390,54391,54393,54395],{"class":48,"line":778},[46,54392,53752],{"class":56},[46,54394,53767],{"class":1361},[46,54396,53274],{"class":56},[46,54398,54399],{"class":48,"line":789},[46,54400,616],{"emptyLinePlaceholder":615},[46,54402,54403,54405,54407],{"class":48,"line":794},[46,54404,53752],{"class":56},[46,54406,52603],{"class":1361},[46,54408,53274],{"class":56},[19,54410,54411],{},[3514,54412],{"alt":41,"src":54413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[19,54415,54416],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[19,54418,54419],{},"let arr = [4, 2, 5, 1, 3]",[19,54421,54422],{},"\u002F\u002F 1.升序排列写法",[19,54424,54425],{},"arr.sort(function (a, b) {",[19,54427,54428],{},"return a - b",[19,54430,54431],{},"})",[19,54433,54434],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[19,54436,54437],{},"\u002F\u002F 降序排列写法",[19,54439,54425],{},[19,54441,54442],{},"return b - a",[19,54444,54431],{},[19,54446,54447],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,54449,54451],{"id":54450},"_29-函数","2.9 函数",[19,54453,54454],{},[3514,54455],{"alt":41,"src":54456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[19,54458,54459],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[19,54461,54462],{},"函数的声明用function",[19,54464,54465],{},"函数里边可以嵌套函数",[479,54467,54469],{"id":54468},"_291-函数传参","2.9.1 函数传参",[19,54471,54472],{},[3514,54473],{"alt":41,"src":54474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[19,54476,54477],{},[3514,54478],{"alt":41,"src":54479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[3191,54481,54482,54485,54488,54491,54494,54497],{},[26,54483,54484],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[26,54486,54487],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[26,54489,54490],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[26,54492,54493],{},"开发中尽量保持形参和实参个数一致",[26,54495,54496],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[26,54498,54499],{},"形参只在函数中有用，所以不需要进行声明这个变量",[19,54501,54502],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[479,54504,54506],{"id":54505},"_292-函数的返回值","2.9.2 函数的返回值",[19,54508,54509],{},[3514,54510],{"alt":41,"src":54511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[19,54513,54514],{},[3514,54515],{"alt":41,"src":54516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[3191,54518,54519,54522,54525,54528,54531],{},[26,54520,54521],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[26,54523,54524],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[26,54526,54527],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[26,54529,54530],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[26,54532,54533],{},"断点调试:进入函数内部看执行过程F11",[479,54535,54537],{"id":54536},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[36,54539,54541],{"className":52601,"code":54540,"language":52603,"meta":41,"style":41},"    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",[43,54542,54543,54548,54553,54557,54562],{"__ignoreMap":41},[46,54544,54545],{"class":48,"line":49},[46,54546,54547],{"class":56},"    function fn(a, b) {\n",[46,54549,54550],{"class":48,"line":60},[46,54551,54552],{"class":56},"      console.log(a + b);\n",[46,54554,54555],{"class":48,"line":200},[46,54556,4217],{"class":56},[46,54558,54559],{"class":48,"line":211},[46,54560,54561],{"class":56},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[46,54563,54564],{"class":48,"line":222},[46,54565,54566],{"class":56},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[479,54568,54570],{"id":54569},"_294-作用域","2.9.4 作用域",[3191,54572,54573,54579,54584,54587,54590],{},[26,54574,54575,54576],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[2339,54577,54578],{},"作用域",[26,54580,54581],{},[2339,54582,54583],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[26,54585,54586],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[26,54588,54589],{},"函数内部可以直接所使用全局变量",[26,54591,54592],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[19,54594,16635],{},[36,54596,54598],{"className":52601,"code":54597,"language":52603,"meta":41,"style":41},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[43,54599,54600,54605,54610,54614,54619,54624,54629],{"__ignoreMap":41},[46,54601,54602],{"class":48,"line":49},[46,54603,54604],{"class":56},"    function fun() {\n",[46,54606,54607],{"class":48,"line":60},[46,54608,54609],{"class":56},"      num = 10\n",[46,54611,54612],{"class":48,"line":200},[46,54613,4217],{"class":56},[46,54615,54616],{"class":48,"line":211},[46,54617,54618],{"class":56},"    fun()\n",[46,54620,54621],{"class":48,"line":222},[46,54622,54623],{"class":56},"    console.log(num)\n",[46,54625,54626],{"class":48,"line":636},[46,54627,54628],{"class":56},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[46,54630,54631],{"class":48,"line":641},[46,54632,54633],{"class":56},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[3191,54635,54636,54639],{},[26,54637,54638],{},"函数内部的形参可以看做是局部变量",[26,54640,54641],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[19,54643,54644,54645],{},"变量访问原则： ",[2339,54646,54647],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[479,54649,54651],{"id":54650},"_295-匿名函数","2.9.5 匿名函数",[19,54653,54654],{},"函数可以分为具名函数和匿名函数",[19,54656,54657],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[23,54659,54660],{},[26,54661,54662],{},"函数表达式",[19,54664,54665],{},[3514,54666],{"alt":41,"src":54667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[19,54669,54670],{},"里边也可以写参数",[19,54672,54673],{},"具名函数调用位置可以随意调整；",[19,54675,54676],{},"匿名函数函数表达式形式只能在声明后才可以使用",[23,54678,54679],{"start":60},[26,54680,54681],{},"立即执行函数",[19,54683,54684],{},[3514,54685],{"alt":41,"src":54686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[19,54688,54689],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[19,54691,54692],{},"写法：两个小括号，然后在第一个小括号中写function",[19,54694,54695],{},"(function () {})();",[19,54697,54698],{},"不要落下最后的;",[19,54700,54701],{},"立即执行函数必须要加;",[19,54703,54704],{},"分号写前写后都没问题",[19,54706,54707],{},"写前：",[19,54709,54710],{},"(function() {})()",[19,54712,54713],{},";(function () {})();",[19,54715,54716],{},"写后:",[19,54718,54719],{},"(function() {})();",[19,54721,54695],{},[19,54723,54724],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[19,54726,54727],{},"还有一种写法：",[19,54729,54730],{},"(function(){}());",[19,54732,54733],{},"或者:",[19,54735,54736],{},"!function(){}();",[19,54738,54739],{},"立即执行函数有时候也是可以加名字的：",[19,54741,54742],{},"(function flexible(window,document) {}(window,document));",[19,54744,54745],{},"省一些调用方法",[479,54747,54749],{"id":54748},"_296-逻辑中断","2.9.6 逻辑中断!!!",[19,54751,54752],{},[3514,54753],{"alt":41,"src":54754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[19,54756,54757],{},"这样就不用非得给x,y初始化了",[19,54759,54760],{},[3514,54761],{"alt":41,"src":54762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[19,54764,54765],{},"代码执行时先看左边",[19,54767,54768],{},"例如：console.log(false && 3+5)",[19,54770,54771],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[19,54773,54774],{},"&&都是真时，就返回最后一个真值",[19,54776,54777],{},"console.log(11 && 22)",[19,54779,54780],{},"输出22",[19,54782,54783],{},"逻辑与：遇真则真",[19,54785,16635],{},[19,54787,54788],{},"let age=1",[19,54790,54791],{},"console.log(11 || age++)",[19,54793,54794],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[19,54796,54797],{},"console.log(11 || 22)",[19,54799,54800],{},"||逻辑或遇到真就直接输出，输出结果为11",[19,54802,54803],{},"||如果都是假的话，就取最后一个假的值了",[479,54805,54807],{"id":54806},"_297-转换为boolean型","2.9.7 转换为Boolean型",[19,54809,54810],{},"显示转换：",[19,54812,54813,54816,54817],{},[2339,54814,54815],{},"记忆","： ",[2339,54818,54819],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[19,54821,54822],{},"空字符串为假，其他字符串全为真",[19,54824,54825],{},[3514,54826],{"alt":41,"src":54827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[19,54829,54830],{},"隐式转换：",[19,54832,54833],{},[3514,54834],{"alt":41,"src":54835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[19,54837,54838],{},"隐式转换:",[19,54840,54841],{},"null+3=3",[19,54843,54844],{},"undefined+3=NaN",[19,54846,54847],{},"null==undefined 输出true,他两个都当0看",[19,54849,54850],{},"null===undefined 输出false",[19,54852,54853],{},"undefined做任何操作都是NaN",[19,54855,54856],{},"NaN不等于NaN，NaN表示计算错误",[14,54858,54860],{"id":54859},"_210-对象","2.10 对象",[479,54862,54864],{"id":54863},"_2101-对象的介绍","2.10.1 对象的介绍",[19,54866,54867],{},"对象也是一种数据类型，里边的数据是无序的",[19,54869,54870],{},"对象由属性和方法组成",[19,54872,54873],{},[3514,54874],{"alt":41,"src":54875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[19,54877,54878],{},[3514,54879],{"alt":41,"src":54880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[19,54882,54883],{},[3514,54884],{"alt":41,"src":54885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[479,54887,54889],{"id":54888},"_2102-对象属性","2.10.2 对象属性",[19,54891,54892],{},[3514,54893],{"alt":41,"src":54894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[23,54896,54897],{},[26,54898,54899],{},"查询对象",[19,54901,54902],{},"对象名.属性 goods.uname",[19,54904,54905],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[19,54907,54908],{},"不带字符串的属性名也可以使用 对象名['属性名']",[19,54910,54911],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[19,54913,54914],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[23,54916,54917],{"start":60},[26,54918,54919],{},"重新赋值",[19,54921,54922],{},"对象名.属性=新值",[23,54924,54925],{"start":200},[26,54926,54927],{},"增加新数据",[19,54929,54922],{},[23,54931,54932],{"start":211},[26,54933,54934],{},"删除对象中的属性",[19,54936,54937],{},"delete 对象名.属性",[479,54939,54941],{"id":54940},"_2103-对象方法","2.10.3 对象方法",[19,54943,54944],{},[3514,54945],{"alt":41,"src":54946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[19,54948,54949],{},"后边跟的是匿名函数",[19,54951,54952],{},"对象外面的叫函数；对象内部的叫方法",[19,54954,54955],{},[3514,54956],{"alt":41,"src":54957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[479,54959,54961],{"id":54960},"_2104-遍历对象","2.10.4 遍历对象",[19,54963,54964],{},"理解为加括号的python字典遍历",[19,54966,54967],{},[3514,54968],{"alt":41,"src":54969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[19,54971,54972],{},"k是字符串类型",[19,54974,54975],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[36,54977,54979],{"className":52601,"code":54978,"language":52603,"meta":41,"style":41},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[43,54980,54981,54986,54991,54996,55001],{"__ignoreMap":41},[46,54982,54983],{"class":48,"line":49},[46,54984,54985],{"class":56},"   let arr = [1, 2, 3]\n",[46,54987,54988],{"class":48,"line":60},[46,54989,54990],{"class":56},"    for (let k in arr) {\n",[46,54992,54993],{"class":48,"line":200},[46,54994,54995],{"class":56},"      console.log(k)\n",[46,54997,54998],{"class":48,"line":211},[46,54999,55000],{"class":56},"      console.log(arr[k])\n",[46,55002,55003],{"class":48,"line":222},[46,55004,4217],{"class":56},[19,55006,55007],{},[3514,55008],{"alt":41,"src":55009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[19,55011,55012],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[19,55014,55015],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[19,55017,55018],{},"for in 得到的k是属性名",[53780,55020,55021],{},"\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,55023,55024],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[479,55026,55028],{"id":55027},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[19,55030,55031],{},"数组中放对象信息",[36,55033,55035],{"className":1350,"code":55034,"language":1352,"meta":41,"style":41},"\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",[43,55036,55037,55045,55050,55055,55060,55065,55070,55075,55080,55085,55090,55095,55100,55104,55108],{"__ignoreMap":41},[46,55038,55039,55041,55043],{"class":48,"line":49},[46,55040,821],{"class":56},[46,55042,53780],{"class":1361},[46,55044,53274],{"class":56},[46,55046,55047],{"class":48,"line":60},[46,55048,55049],{"class":56},"    let students = [\n",[46,55051,55052],{"class":48,"line":200},[46,55053,55054],{"class":56},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[46,55056,55057],{"class":48,"line":211},[46,55058,55059],{"class":56},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[46,55061,55062],{"class":48,"line":222},[46,55063,55064],{"class":56},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[46,55066,55067],{"class":48,"line":636},[46,55068,55069],{"class":56},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[46,55071,55072],{"class":48,"line":641},[46,55073,55074],{"class":56},"    ]\n",[46,55076,55077],{"class":48,"line":653},[46,55078,55079],{"class":56},"    for (let i = 0; i \u003C students.length; i++) {\n",[46,55081,55082],{"class":48,"line":659},[46,55083,55084],{"class":56},"      for (let k in students[i]) {\n",[46,55086,55087],{"class":48,"line":665},[46,55088,55089],{"class":56},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[46,55091,55092],{"class":48,"line":670},[46,55093,55094],{"class":56},"        \u002F\u002F输出每个人的名字：\n",[46,55096,55097],{"class":48,"line":676},[46,55098,55099],{"class":56},"        \u002F\u002Fconsole.log(students[i].name)\n",[46,55101,55102],{"class":48,"line":682},[46,55103,54365],{"class":56},[46,55105,55106],{"class":48,"line":688},[46,55107,4217],{"class":56},[46,55109,55110,55112,55114],{"class":48,"line":693},[46,55111,54384],{"class":56},[46,55113,53780],{"class":1361},[46,55115,53274],{"class":56},[479,55117,55119],{"id":55118},"_2106-内置对象","2.10.6 内置对象",[19,55121,55122],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[23,55124,55125],{},[26,55126,55127],{},"数学对象Math",[19,55129,55130],{},[3514,55131],{"alt":41,"src":55132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[19,55134,55135],{},[2426,55136,55139],{"href":55137,"rel":55138},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[25862],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[19,55141,55142],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[19,55144,55145],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[19,55147,55148],{},"数组不可以使用Math中的max,min来求最大值与最小值",[19,55150,55151],{},"null是一个空对象，可以认为：null类似于let obj={}",[19,55153,55154],{},"null属于对象数据类型",[23,55156,55157],{"start":60},[26,55158,55159],{},"生成任意范围随机数",[19,55161,55162],{},[3514,55163],{"alt":41,"src":55164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[19,55166,55167],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[19,55169,55170],{},"乘以几就取不到几",[19,55172,55173],{},"取数组中的随机元素：",[19,55175,55176],{},"let arr = ['red', 'green', 'blue']",[19,55178,55179],{},"let random = Math.floor(Math.random() * arr.length)",[19,55181,55182],{},"console.log(arr[random])",[19,55184,55185],{},"这个函数得到的是全闭区间",[19,55187,55188],{},"function getRandom(N, M) {",[19,55190,55191],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[19,55193,3131],{},[19,55195,55196],{},"console.log(getRandom(4, 8))",[479,55198,55200],{"id":55199},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[19,55202,55203],{},[3514,55204],{"alt":41,"src":55205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[19,55207,55208],{},[3514,55209],{"alt":41,"src":55210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[19,55212,55213],{},[3514,55214],{"alt":41,"src":55215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[19,55217,55218],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[19,55220,55221],{},[3514,55222],{"alt":41,"src":55223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[19,55225,55226],{},[3514,55227],{"alt":41,"src":55228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[19,55230,55231],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[19,55233,55234],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[19,55236,55237],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[2098,55239,55240],{},"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":41,"searchDepth":60,"depth":60,"links":55242},[55243,55251,55252,55253,55254,55255,55262,55266,55272,55281],{"id":52436,"depth":60,"text":52437,"children":55244},[55245,55246,55247,55248,55249,55250],{"id":52440,"depth":200,"text":52441},{"id":52457,"depth":200,"text":52458},{"id":52497,"depth":200,"text":52498},{"id":52509,"depth":200,"text":52510},{"id":52518,"depth":200,"text":52519},{"id":52566,"depth":200,"text":52567},{"id":52576,"depth":60,"text":52577},{"id":52664,"depth":60,"text":52665},{"id":52687,"depth":60,"text":52688},{"id":52699,"depth":60,"text":52700},{"id":52886,"depth":60,"text":52887,"children":55256},[55257,55258,55259,55260,55261],{"id":52890,"depth":200,"text":52891},{"id":52899,"depth":200,"text":52900},{"id":52927,"depth":200,"text":52928},{"id":52963,"depth":200,"text":52964},{"id":52988,"depth":200,"text":52989},{"id":53000,"depth":60,"text":53001,"children":55263},[55264,55265],{"id":53021,"depth":200,"text":53022},{"id":53115,"depth":200,"text":53116},{"id":53173,"depth":60,"text":53174,"children":55267},[55268,55269,55270,55271],{"id":53177,"depth":200,"text":53178},{"id":53201,"depth":200,"text":53202},{"id":53254,"depth":200,"text":53255},{"id":54064,"depth":200,"text":54065},{"id":54450,"depth":60,"text":54451,"children":55273},[55274,55275,55276,55277,55278,55279,55280],{"id":54468,"depth":200,"text":54469},{"id":54505,"depth":200,"text":54506},{"id":54536,"depth":200,"text":54537},{"id":54569,"depth":200,"text":54570},{"id":54650,"depth":200,"text":54651},{"id":54748,"depth":200,"text":54749},{"id":54806,"depth":200,"text":54807},{"id":54859,"depth":60,"text":54860,"children":55282},[55283,55284,55285,55286,55287,55288,55289],{"id":54863,"depth":200,"text":54864},{"id":54888,"depth":200,"text":54889},{"id":54940,"depth":200,"text":54941},{"id":54960,"depth":200,"text":54961},{"id":55027,"depth":200,"text":55028},{"id":55118,"depth":200,"text":55119},{"id":55199,"depth":200,"text":55200},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":52428,"description":25378},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":55296,"title":55297,"body":55298,"description":25378,"extension":2125,"meta":78638,"navigation":615,"path":78639,"seo":78640,"stem":78641,"__hash__":78642},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":55299,"toc":78578},[55300,55303,55306,55309,55314,55317,55320,55323,55327,55331,55337,55342,55350,55357,55360,55364,55369,55374,55379,55382,55385,55396,55399,55403,55406,55409,55414,55419,55424,55427,55430,55522,55525,55530,55533,55538,55541,55544,55549,55552,55557,55561,55564,55578,55582,55587,55590,55593,55597,55602,55605,55609,55613,55618,55622,55627,55630,55633,55636,55639,55642,55645,55650,55655,55683,55686,55689,55692,55697,55700,55703,55706,55709,55713,55742,55746,55751,55756,55759,55762,55765,55770,55885,55890,55895,56056,56061,56064,56068,56073,56078,56081,56084,56087,56090,56093,56096,56099,56102,56105,56108,56111,56114,56117,56120,56122,56125,56128,56131,56136,56140,56537,56540,56546,56550,56555,57837,57842,57845,57848,57851,57856,59052,59056,59062,59067,59070,59075,59080,59084,59088,59093,59096,59101,59104,59107,59111,60019,60022,60026,60247,60250,60253,60256,60482,60485,60709,60712,60716,60721,60724,60727,60955,60958,60991,60994,60998,61003,61007,61010,61013,61016,61019,61022,61025,61028,61033,62313,62317,62320,63413,63417,63420,63423,63426,63429,63433,63436,63439,63441,63449,64930,64934,64937,64940,64943,65152,65155,65159,65163,65168,65173,65176,65179,65184,65188,65193,65196,65305,65309,65314,65319,65322,65325,65329,65334,65339,65344,65347,65350,65361,65364,65369,65374,65377,65380,65453,65457,65462,65465,65467,65478,65482,65487,66813,66816,66819,66822,66824,66827,66830,66833,66836,66839,66842,66845,66848,66851,66854,66857,66860,66862,66864,66867,66871,67965,67968,67971,67987,68001,68004,68009,68015,68020,68024,68028,68033,68037,68042,68484,68489,68492,68496,68501,68504,68507,68511,68516,68520,68525,68530,68534,68539,68544,68547,68552,68557,68561,68566,68571,68675,68678,68682,68687,69053,69056,69059,69062,69065,69068,69071,69074,69077,70373,70377,70382,70387,70390,70393,70396,70399,70401,70406,70411,70414,70418,70423,70428,70433,70436,70439,70442,70445,70448,70453,70456,70460,70465,70470,70474,70479,70482,70487,70490,70493,70496,70499,70502,70507,70510,70513,70516,70519,70523,70528,70531,70535,70540,70543,70546,70550,70579,70582,70586,70590,70595,70599,70604,70607,70610,70613,70616,70619,70622,70625,70628,70631,70634,70637,70640,70643,70646,70650,70655,70660,70663,70667,70671,70676,70679,70683,70686,70689,70694,70699,70704,70709,70714,70717,70720,70725,70730,70734,70739,70742,70747,70750,70753,70756,70759,70764,70767,70776,70780,70785,70788,70791,70795,70798,70803,70807,70810,70816,70822,70826,70852,70855,72416,72419,72915,72918,72923,72928,72933,72937,72942,72947,72952,72956,72961,72964,72967,72970,72973,72977,72980,72985,72988,72993,72997,73002,73005,73010,73015,73020,73023,73026,73031,73036,73039,73042,73046,73049,73054,73057,73062,73065,73070,73075,73080,73083,73088,73153,73156,73167,73171,73176,73348,73352,73357,73360,73363,73366,73370,73381,73385,73388,73393,73398,73401,73404,73407,73410,73413,73415,73418,73421,73424,73429,73432,73437,73440,73444,73447,73450,73464,73468,73471,73526,73531,73534,73537,73542,73545,73549,73554,73684,73688,73693,73698,73779,73784,73788,73791,73796,73801,73807,73810,73813,73816,73820,73825,73828,73839,73843,73860,76907,76911,76914,76917,76920,76941,76945,76948,76956,76959,76964,76967,76970,76975,76980,76984,77005,77009,77014,77017,77020,77023,77026,77030,77035,77038,77042,77047,77050,77055,77058,77063,77066,77071,78274,78278,78283,78286,78291,78575],[10,55301,55297],{"id":55302},"_3web-apis",[19,55304,55305],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[19,55307,55308],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[19,55310,55311],{},[3514,55312],{"alt":41,"src":55313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[19,55315,55316],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[19,55318,55319],{},"建议数组和对象使用 const 来声明",[19,55321,55322],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,55324,55326],{"id":55325},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[479,55328,55330],{"id":55329},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[19,55332,55333,55336],{},[43,55334,55335],{},"document"," = HTML 文件解析后的对象化表示；",[19,55338,55339,55341],{},[43,55340,55335],{}," ≠ HTML 文件本身",[19,55343,55344,55349],{},[2339,55345,55346],{},[43,55347,55348],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[19,55351,55352,55356],{},[2339,55353,55354],{},[43,55355,55335],{}," ：容器里的内容，代表当前加载的网页（DOM）",[19,55358,55359],{},"document实际上为window.document的简写",[479,55361,55363],{"id":55362},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[19,55365,55366],{},[3514,55367],{"alt":41,"src":55368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[19,55370,55371],{},[3514,55372],{"alt":41,"src":55373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[19,55375,55376],{},[3514,55377],{"alt":41,"src":55378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[19,55380,55381],{},"console.dir()",[19,55383,55384],{},"dir用来打印对象",[3191,55386,55387,55390,55393],{},[26,55388,55389],{},"任何一个标签，都是一个对象",[26,55391,55392],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[26,55394,55395],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[19,55397,55398],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[479,55400,55402],{"id":55401},"_312-获取dom对象","3.1.2 获取DoM对象",[19,55404,55405],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[19,55407,55408],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[19,55410,55411],{},[2339,55412,55413],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[23,55415,55416],{},[26,55417,55418],{},"利用CSS选择器来获取标签元素",[19,55420,55421],{},[3514,55422],{"alt":41,"src":55423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[19,55425,55426],{},"里边的选择器必须必须加引号！！！",[19,55428,55429],{},"只选择第一个元素",[36,55431,55433],{"className":1350,"code":55432,"language":1352,"meta":41,"style":41},"\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",[43,55434,55435,55443,55464,55483,55491,55496,55501,55506,55514],{"__ignoreMap":41},[46,55436,55437,55439,55441],{"class":48,"line":49},[46,55438,821],{"class":56},[46,55440,53767],{"class":1361},[46,55442,53274],{"class":56},[46,55444,55445,55447,55449,55452,55454,55457,55460,55462],{"class":48,"line":60},[46,55446,54111],{"class":56},[46,55448,53578],{"class":1361},[46,55450,55451],{"class":169}," class",[46,55453,79],{"class":56},[46,55455,55456],{"class":173},"\"box\"",[46,55458,55459],{"class":56},">123\u003C\u002F",[46,55461,53578],{"class":1361},[46,55463,53274],{"class":56},[46,55465,55466,55468,55470,55472,55474,55476,55479,55481],{"class":48,"line":200},[46,55467,54111],{"class":56},[46,55469,53578],{"class":1361},[46,55471,55451],{"class":169},[46,55473,79],{"class":56},[46,55475,55456],{"class":173},[46,55477,55478],{"class":56},">456\u003C\u002F",[46,55480,53578],{"class":1361},[46,55482,53274],{"class":56},[46,55484,55485,55487,55489],{"class":48,"line":211},[46,55486,54111],{"class":56},[46,55488,53780],{"class":1361},[46,55490,53274],{"class":56},[46,55492,55493],{"class":48,"line":222},[46,55494,55495],{"class":56},"    \u002F\u002F 1.获取匹配的第一个元素\n",[46,55497,55498],{"class":48,"line":636},[46,55499,55500],{"class":56},"    const box = document.querySelector('div')\n",[46,55502,55503],{"class":48,"line":641},[46,55504,55505],{"class":56},"    console.dir(box)\n",[46,55507,55508,55510,55512],{"class":48,"line":653},[46,55509,54384],{"class":56},[46,55511,53780],{"class":1361},[46,55513,53274],{"class":56},[46,55515,55516,55518,55520],{"class":48,"line":659},[46,55517,53752],{"class":56},[46,55519,53767],{"class":1361},[46,55521,53274],{"class":56},[19,55523,55524],{},"只选123，不选456",[19,55526,55527],{},[3514,55528],{"alt":41,"src":55529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[19,55531,55532],{},"返回的是一个数组的集合，不能对其进行直接修改",[19,55534,55535],{},[3514,55536],{"alt":41,"src":55537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[19,55539,55540],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[19,55542,55543],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[23,55545,55546],{"start":60},[26,55547,55548],{},"其他方法来获取标签元素",[19,55550,55551],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[19,55553,55554],{},[3514,55555],{"alt":41,"src":55556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[479,55558,55560],{"id":55559},"_313-操作元素的内容","3.1.3 操作元素的内容",[19,55562,55563],{},"设置修改DOM元素内容有两种方式：",[3191,55565,55566,55569,55572,55575],{},[26,55567,55568],{},"元素.innerText=''",[26,55570,55571],{},"元素.innerHTML=''",[26,55573,55574],{},"不写字符串输出数字也是可以的",[26,55576,55577],{},"元素.innerHtml=1",[23999,55579,55581],{"id":55580},"_3131-innertext","3.1.3.1 innerText",[19,55583,55584],{},[3514,55585],{"alt":41,"src":55586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[19,55588,55589],{},"思路：实现了修改盒子中的内容！",[19,55591,55592],{},"它只显示纯文本，不解析标签",[23999,55594,55596],{"id":55595},"_3132-innerhtml","3.1.3.2 innerHTML",[19,55598,55599],{},[3514,55600],{"alt":41,"src":55601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[19,55603,55604],{},"相比于innerText，他的强大之处在于可以解析标签",[479,55606,55608],{"id":55607},"_314-操作元素属性","3.1.4 操作元素属性",[23999,55610,55612],{"id":55611},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[19,55614,55615],{},[3514,55616],{"alt":41,"src":55617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[23999,55619,55621],{"id":55620},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[19,55623,55624],{},[3514,55625],{"alt":41,"src":55626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[19,55628,55629],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[19,55631,55632],{},"div.style.backgroundColor = 'hotpink'",[19,55634,55635],{},"如果按照css的写法，-表示减，就会出错",[19,55637,55638],{},"body元素不需要再获取，直接用就行！！！！！！",[19,55640,55641],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[19,55643,55644],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[19,55646,55647],{},[3514,55648],{"alt":41,"src":55649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[19,55651,55652],{},[3514,55653],{"alt":41,"src":55654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[23,55656,55657,55660,55663,55666,55669,55672],{},[26,55658,55659],{},"className这个方式就是修改很多样式的时候来使用的！",[26,55661,55662],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[26,55664,55665],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[26,55667,55668],{},"className为属性名，如果还用class的话就导致与关键字冲突",[26,55670,55671],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[26,55673,55674,55675,55680],{},"解析标签的时候就变为了",[53578,55676],{"className":55677},[55678,55679],"nav","box",[55681,55682],"br",{},[19,55684,55685],{},"例子：",[53578,55687],{"className":55688},[55678],[53780,55690,55691],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[19,55693,55694],{},[3514,55695],{"alt":41,"src":55696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[19,55698,55699],{},"追加和删除类名用classList",[19,55701,55702],{},"常用于类似于开关的操作",[19,55704,55705],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[19,55707,55708],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[23999,55710,55712],{"id":55711},"_3143-牢记点","3.1.4.3 牢记点",[23,55714,55715,55718,55721,55724,55727,55730,55733,55736,55739],{},[26,55716,55717],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[26,55719,55720],{},"使用style属性操作css时不要忘记引号",[26,55722,55723],{},"使用className或者classList时也不要忘记引号",[26,55725,55726],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[26,55728,55729],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[26,55731,55732],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[26,55734,55735],{},"若： let arr=['1','2',3] arr[0]=1",[26,55737,55738],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[26,55740,55741],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[479,55743,55745],{"id":55744},"_315-操作表单元素","3.1.5 操作表单元素",[23,55747,55748],{},[26,55749,55750],{},"天生的属性",[19,55752,55753],{},[3514,55754],{"alt":41,"src":55755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[19,55757,55758],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[19,55760,55761],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[19,55763,55764],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[19,55766,55767],{},[3514,55768],{"alt":41,"src":55769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[36,55771,55773],{"className":52601,"code":55772,"language":52603,"meta":41,"style":41},"在复选框中如果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",[43,55774,55775,55780,55812,55817,55822,55827,55832,55836,55841,55846,55863,55875,55880],{"__ignoreMap":41},[46,55776,55777],{"class":48,"line":49},[46,55778,55779],{"class":56},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[46,55781,55782,55784,55787,55790,55792,55795,55797,55799,55801,55803,55805,55807,55810],{"class":48,"line":60},[46,55783,821],{"class":56},[46,55785,55786],{"class":1361},"input",[46,55788,55789],{"class":169}," type",[46,55791,79],{"class":56},[46,55793,55794],{"class":173},"\"checkbox\"",[46,55796,1364],{"class":169},[46,55798,79],{"class":56},[46,55800,9665],{"class":173},[46,55802,16960],{"class":169},[46,55804,79],{"class":56},[46,55806,9665],{"class":173},[46,55808,55809],{"class":169}," checked",[46,55811,53274],{"class":56},[46,55813,55814],{"class":48,"line":200},[46,55815,55816],{"class":56},"不选的话：\n",[46,55818,55819],{"class":48,"line":211},[46,55820,55821],{"class":56},"const input = document.querySelector('input')\n",[46,55823,55824],{"class":48,"line":222},[46,55825,55826],{"class":56},"input.checked=false\n",[46,55828,55829],{"class":48,"line":636},[46,55830,55831],{"class":56},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[46,55833,55834],{"class":48,"line":641},[46,55835,616],{"emptyLinePlaceholder":615},[46,55837,55838],{"class":48,"line":653},[46,55839,55840],{"class":56},"禁用按钮：\n",[46,55842,55843],{"class":48,"line":659},[46,55844,55845],{"class":56},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[46,55847,55848,55850,55853,55856,55859,55861],{"class":48,"line":665},[46,55849,821],{"class":56},[46,55851,55852],{"class":1361},"button",[46,55854,55855],{"class":169}," disabled",[46,55857,55858],{"class":56},">点击\u003C\u002F",[46,55860,55852],{"class":1361},[46,55862,53274],{"class":56},[46,55864,55865,55867,55869,55871,55873],{"class":48,"line":670},[46,55866,821],{"class":56},[46,55868,55852],{"class":1361},[46,55870,55858],{"class":56},[46,55872,55852],{"class":1361},[46,55874,53274],{"class":56},[46,55876,55877],{"class":48,"line":676},[46,55878,55879],{"class":56},"const bt = document.querySelector('button')\n",[46,55881,55882],{"class":48,"line":682},[46,55883,55884],{"class":56},"bt.disabled = false\n",[23,55886,55887],{"start":60},[26,55888,55889],{},"自定义属性",[19,55891,55892],{},[3514,55893],{"alt":41,"src":55894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[36,55896,55898],{"className":1350,"code":55897,"language":1352,"meta":41,"style":41},"\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",[43,55899,55900,55908,55936,55955,55974,55993,56012,56020,56025,56030,56035,56040,56048],{"__ignoreMap":41},[46,55901,55902,55904,55906],{"class":48,"line":49},[46,55903,821],{"class":56},[46,55905,53767],{"class":1361},[46,55907,53274],{"class":56},[46,55909,55910,55912,55914,55917,55919,55921,55924,55926,55929,55932,55934],{"class":48,"line":60},[46,55911,54111],{"class":56},[46,55913,53578],{"class":1361},[46,55915,55916],{"class":169}," data-id",[46,55918,79],{"class":56},[46,55920,5697],{"class":173},[46,55922,55923],{"class":169}," data-spm",[46,55925,79],{"class":56},[46,55927,55928],{"class":173},"\"我不知道\"",[46,55930,55931],{"class":56},">1\u003C\u002F",[46,55933,53578],{"class":1361},[46,55935,53274],{"class":56},[46,55937,55938,55940,55942,55944,55946,55948,55951,55953],{"class":48,"line":200},[46,55939,54111],{"class":56},[46,55941,53578],{"class":1361},[46,55943,55916],{"class":169},[46,55945,79],{"class":56},[46,55947,5720],{"class":173},[46,55949,55950],{"class":56},">2\u003C\u002F",[46,55952,53578],{"class":1361},[46,55954,53274],{"class":56},[46,55956,55957,55959,55961,55963,55965,55967,55970,55972],{"class":48,"line":211},[46,55958,54111],{"class":56},[46,55960,53578],{"class":1361},[46,55962,55916],{"class":169},[46,55964,79],{"class":56},[46,55966,5733],{"class":173},[46,55968,55969],{"class":56},">3\u003C\u002F",[46,55971,53578],{"class":1361},[46,55973,53274],{"class":56},[46,55975,55976,55978,55980,55982,55984,55986,55989,55991],{"class":48,"line":222},[46,55977,54111],{"class":56},[46,55979,53578],{"class":1361},[46,55981,55916],{"class":169},[46,55983,79],{"class":56},[46,55985,5746],{"class":173},[46,55987,55988],{"class":56},">4\u003C\u002F",[46,55990,53578],{"class":1361},[46,55992,53274],{"class":56},[46,55994,55995,55997,55999,56001,56003,56005,56008,56010],{"class":48,"line":636},[46,55996,54111],{"class":56},[46,55998,53578],{"class":1361},[46,56000,55916],{"class":169},[46,56002,79],{"class":56},[46,56004,5766],{"class":173},[46,56006,56007],{"class":56},">5\u003C\u002F",[46,56009,53578],{"class":1361},[46,56011,53274],{"class":56},[46,56013,56014,56016,56018],{"class":48,"line":641},[46,56015,54111],{"class":56},[46,56017,53780],{"class":1361},[46,56019,53274],{"class":56},[46,56021,56022],{"class":48,"line":653},[46,56023,56024],{"class":56},"    const one = document.querySelector('div')\n",[46,56026,56027],{"class":48,"line":659},[46,56028,56029],{"class":56},"    console.log(one.dataset)\n",[46,56031,56032],{"class":48,"line":665},[46,56033,56034],{"class":56},"    console.log(one.dataset.id)\n",[46,56036,56037],{"class":48,"line":670},[46,56038,56039],{"class":56},"    console.log(one.dataset.spm)\n",[46,56041,56042,56044,56046],{"class":48,"line":676},[46,56043,54384],{"class":56},[46,56045,53780],{"class":1361},[46,56047,53274],{"class":56},[46,56049,56050,56052,56054],{"class":48,"line":682},[46,56051,53752],{"class":56},[46,56053,53767],{"class":1361},[46,56055,53274],{"class":56},[19,56057,56058],{},[3514,56059],{"alt":41,"src":56060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[19,56062,56063],{},"document.querySelector选择的是第一个对象（元素）",[479,56065,56067],{"id":56066},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[19,56069,56070],{},[3514,56071],{"alt":41,"src":56072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[19,56074,56075],{},[3514,56076],{"alt":41,"src":56077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[19,56079,56080],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[53780,56082,56083],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[19,56085,56086],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[53780,56088,56089],{},"\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,56091,56092],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[19,56094,56095],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[19,56097,56098],{},"单位为毫秒！！！",[19,56100,56101],{},"可以搭配匿名函数来用！！！",[19,56103,56104],{},"setInterval(function () {",[19,56106,56107],{},"alert('两秒执行一次')",[19,56109,56110],{},"}, 2000)",[19,56112,56113],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[19,56115,56116],{},"function fn() {",[19,56118,56119],{},"document.write(1)",[19,56121,3131],{},[19,56123,56124],{},"setInterval(fn, 1000)",[19,56126,56127],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[19,56129,56130],{},"setInterval('fn()', 1000)",[19,56132,56133],{},[3514,56134],{"alt":41,"src":56135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[23999,56137,56139],{"id":56138},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[36,56141,56143],{"className":52601,"code":56142,"language":52603,"meta":41,"style":41},"\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",[43,56144,56145,56155,56169,56173,56181,56195,56215,56227,56235,56239,56247,56284,56289,56294,56299,56307,56315,56337,56345,56350,56372,56377,56382,56393,56398,56418,56426,56441,56456,56467,56472,56482,56492,56496,56505,56509,56517,56525,56529],{"__ignoreMap":41},[46,56146,56147,56149,56151,56153],{"class":48,"line":49},[46,56148,53265],{"class":56},[46,56150,53268],{"class":1361},[46,56152,53271],{"class":169},[46,56154,53274],{"class":56},[46,56156,56157,56159,56161,56163,56165,56167],{"class":48,"line":60},[46,56158,821],{"class":56},[46,56160,52603],{"class":1361},[46,56162,53283],{"class":169},[46,56164,79],{"class":56},[46,56166,53288],{"class":173},[46,56168,53274],{"class":56},[46,56170,56171],{"class":48,"line":200},[46,56172,616],{"emptyLinePlaceholder":615},[46,56174,56175,56177,56179],{"class":48,"line":211},[46,56176,821],{"class":56},[46,56178,53301],{"class":1361},[46,56180,53274],{"class":56},[46,56182,56183,56185,56187,56189,56191,56193],{"class":48,"line":222},[46,56184,54111],{"class":56},[46,56186,53311],{"class":1361},[46,56188,53314],{"class":169},[46,56190,79],{"class":56},[46,56192,53319],{"class":173},[46,56194,53274],{"class":56},[46,56196,56197,56199,56201,56203,56205,56207,56209,56211,56213],{"class":48,"line":636},[46,56198,54111],{"class":56},[46,56200,53311],{"class":1361},[46,56202,1364],{"class":169},[46,56204,79],{"class":56},[46,56206,53358],{"class":173},[46,56208,53338],{"class":169},[46,56210,79],{"class":56},[46,56212,53365],{"class":173},[46,56214,53274],{"class":56},[46,56216,56217,56219,56221,56223,56225],{"class":48,"line":641},[46,56218,54111],{"class":56},[46,56220,53374],{"class":1361},[46,56222,53377],{"class":56},[46,56224,53374],{"class":1361},[46,56226,53274],{"class":56},[46,56228,56229,56231,56233],{"class":48,"line":653},[46,56230,53752],{"class":56},[46,56232,53301],{"class":1361},[46,56234,53274],{"class":56},[46,56236,56237],{"class":48,"line":659},[46,56238,616],{"emptyLinePlaceholder":615},[46,56240,56241,56243,56245],{"class":48,"line":665},[46,56242,821],{"class":56},[46,56244,53767],{"class":1361},[46,56246,53274],{"class":56},[46,56248,56249,56251,56254,56256,56258,56260,56262,56264,56266,56269,56271,56274,56277,56279,56282],{"class":48,"line":670},[46,56250,54111],{"class":56},[46,56252,56253],{"class":1361},"textarea",[46,56255,1364],{"class":169},[46,56257,79],{"class":56},[46,56259,9665],{"class":173},[46,56261,16960],{"class":169},[46,56263,79],{"class":56},[46,56265,9665],{"class":173},[46,56267,56268],{"class":169}," cols",[46,56270,79],{"class":56},[46,56272,56273],{"class":173},"\"30\"",[46,56275,56276],{"class":169}," rows",[46,56278,79],{"class":56},[46,56280,56281],{"class":173},"\"10\"",[46,56283,53274],{"class":56},[46,56285,56286],{"class":48,"line":676},[46,56287,56288],{"class":56},"        用户注册协议\n",[46,56290,56291],{"class":48,"line":682},[46,56292,56293],{"class":56},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[46,56295,56296],{"class":48,"line":688},[46,56297,56298],{"class":56},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[46,56300,56301,56303,56305],{"class":48,"line":693},[46,56302,53743],{"class":56},[46,56304,56253],{"class":1361},[46,56306,53274],{"class":56},[46,56308,56309,56311,56313],{"class":48,"line":699},[46,56310,54111],{"class":56},[46,56312,55681],{"class":1361},[46,56314,53274],{"class":56},[46,56316,56317,56319,56321,56323,56325,56328,56330,56333,56335],{"class":48,"line":705},[46,56318,54111],{"class":56},[46,56320,55852],{"class":1361},[46,56322,55451],{"class":169},[46,56324,79],{"class":56},[46,56326,56327],{"class":173},"\"btn\"",[46,56329,55855],{"class":169},[46,56331,56332],{"class":56},">我已经阅读用户协议(5)\u003C\u002F",[46,56334,55852],{"class":1361},[46,56336,53274],{"class":56},[46,56338,56339,56341,56343],{"class":48,"line":711},[46,56340,54111],{"class":56},[46,56342,53780],{"class":1361},[46,56344,53274],{"class":56},[46,56346,56347],{"class":48,"line":717},[46,56348,56349],{"class":2253},"    \u002F\u002F 1. 获取元素\n",[46,56351,56352,56354,56357,56359,56362,56365,56367,56370],{"class":48,"line":723},[46,56353,13225],{"class":52},[46,56355,56356],{"class":180}," btn",[46,56358,647],{"class":52},[46,56360,56361],{"class":56}," document.",[46,56363,56364],{"class":169},"querySelector",[46,56366,1152],{"class":56},[46,56368,56369],{"class":173},"'.btn'",[46,56371,459],{"class":56},[46,56373,56374],{"class":48,"line":729},[46,56375,56376],{"class":2253},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[46,56378,56379],{"class":48,"line":735},[46,56380,56381],{"class":2253},"    \u002F\u002F 2. 倒计时\n",[46,56383,56384,56386,56388,56390],{"class":48,"line":740},[46,56385,54186],{"class":52},[46,56387,11442],{"class":56},[46,56389,79],{"class":52},[46,56391,56392],{"class":180}," 5\n",[46,56394,56395],{"class":48,"line":745},[46,56396,56397],{"class":2253},"    \u002F\u002F 2.1 开启定时器\n",[46,56399,56400,56402,56405,56407,56410,56412,56415],{"class":48,"line":763},[46,56401,54186],{"class":52},[46,56403,56404],{"class":56}," n ",[46,56406,79],{"class":52},[46,56408,56409],{"class":169}," setInterval",[46,56411,1152],{"class":56},[46,56413,56414],{"class":52},"function",[46,56416,56417],{"class":56}," () {\n",[46,56419,56420,56423],{"class":48,"line":778},[46,56421,56422],{"class":56},"      i",[46,56424,56425],{"class":52},"--\n",[46,56427,56428,56431,56433,56436,56438],{"class":48,"line":789},[46,56429,56430],{"class":56},"      btn.innerHTML ",[46,56432,79],{"class":52},[46,56434,56435],{"class":173}," `我已经阅读用户协议(${",[46,56437,2628],{"class":56},[46,56439,56440],{"class":173},"})`\n",[46,56442,56443,56446,56449,56452,56454],{"class":48,"line":794},[46,56444,56445],{"class":52},"      if",[46,56447,56448],{"class":56}," (i ",[46,56450,56451],{"class":52},"===",[46,56453,887],{"class":180},[46,56455,14445],{"class":56},[46,56457,56458,56461,56464],{"class":48,"line":806},[46,56459,56460],{"class":169},"        clearInterval",[46,56462,56463],{"class":56},"(n)  ",[46,56465,56466],{"class":2253},"\u002F\u002F 关闭定时器\n",[46,56468,56469],{"class":48,"line":829},[46,56470,56471],{"class":2253},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[46,56473,56474,56477,56479],{"class":48,"line":840},[46,56475,56476],{"class":56},"        btn.disabled ",[46,56478,79],{"class":52},[46,56480,56481],{"class":180}," false\n",[46,56483,56484,56487,56489],{"class":48,"line":846},[46,56485,56486],{"class":56},"        btn.innerHTML ",[46,56488,79],{"class":52},[46,56490,56491],{"class":173}," '同意'\n",[46,56493,56494],{"class":48,"line":852},[46,56495,54365],{"class":56},[46,56497,56498,56501,56503],{"class":48,"line":857},[46,56499,56500],{"class":56},"    }, ",[46,56502,8423],{"class":180},[46,56504,459],{"class":56},[46,56506,56507],{"class":48,"line":875},[46,56508,616],{"emptyLinePlaceholder":615},[46,56510,56511,56513,56515],{"class":48,"line":892},[46,56512,54384],{"class":56},[46,56514,53780],{"class":1361},[46,56516,53274],{"class":56},[46,56518,56519,56521,56523],{"class":48,"line":898},[46,56520,53752],{"class":56},[46,56522,53767],{"class":1361},[46,56524,53274],{"class":56},[46,56526,56527],{"class":48,"line":903},[46,56528,616],{"emptyLinePlaceholder":615},[46,56530,56531,56533,56535],{"class":48,"line":908},[46,56532,53752],{"class":56},[46,56534,52603],{"class":1361},[46,56536,53274],{"class":56},[19,56538,56539],{},"不要一直想着用死循环,避免死循环",[19,56541,56542,56545],{},[43,56543,56544],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[23999,56547,56549],{"id":56548},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[23,56551,56552],{},[26,56553,56554],{},"法1",[36,56556,56558],{"className":52601,"code":56557,"language":52603,"meta":41,"style":41},"\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",[43,56559,56560,56570,56584,56588,56596,56610,56630,56642,56650,56656,56667,56678,56682,56686,56693,56705,56709,56713,56720,56732,56746,56759,56773,56777,56781,56788,56799,56810,56821,56833,56845,56857,56861,56865,56873,56883,56896,56908,56921,56925,56929,56936,56946,56958,56970,56981,56992,57002,57014,57026,57030,57034,57043,57055,57067,57095,57108,57112,57116,57123,57134,57138,57146,57154,57158,57166,57180,57195,57219,57227,57242,57255,57263,57284,57296,57308,57320,57332,57344,57356,57368,57377,57385,57393,57401,57413,57436,57455,57474,57493,57512,57531,57550,57570,57574,57594,57613,57633,57654,57665,57682,57692,57702,57712,57717,57722,57727,57732,57757,57770,57774,57797,57801,57809,57817,57825,57829],{"__ignoreMap":41},[46,56561,56562,56564,56566,56568],{"class":48,"line":49},[46,56563,53265],{"class":56},[46,56565,53268],{"class":1361},[46,56567,53271],{"class":169},[46,56569,53274],{"class":56},[46,56571,56572,56574,56576,56578,56580,56582],{"class":48,"line":60},[46,56573,821],{"class":56},[46,56575,52603],{"class":1361},[46,56577,53283],{"class":169},[46,56579,79],{"class":56},[46,56581,53288],{"class":173},[46,56583,53274],{"class":56},[46,56585,56586],{"class":48,"line":200},[46,56587,616],{"emptyLinePlaceholder":615},[46,56589,56590,56592,56594],{"class":48,"line":211},[46,56591,821],{"class":56},[46,56593,53301],{"class":1361},[46,56595,53274],{"class":56},[46,56597,56598,56600,56602,56604,56606,56608],{"class":48,"line":222},[46,56599,54111],{"class":56},[46,56601,53311],{"class":1361},[46,56603,53314],{"class":169},[46,56605,79],{"class":56},[46,56607,53319],{"class":173},[46,56609,53274],{"class":56},[46,56611,56612,56614,56616,56618,56620,56622,56624,56626,56628],{"class":48,"line":636},[46,56613,54111],{"class":56},[46,56615,53311],{"class":1361},[46,56617,1364],{"class":169},[46,56619,79],{"class":56},[46,56621,53358],{"class":173},[46,56623,53338],{"class":169},[46,56625,79],{"class":56},[46,56627,53365],{"class":173},[46,56629,53274],{"class":56},[46,56631,56632,56634,56636,56638,56640],{"class":48,"line":641},[46,56633,54111],{"class":56},[46,56635,53374],{"class":1361},[46,56637,53377],{"class":56},[46,56639,53374],{"class":1361},[46,56641,53274],{"class":56},[46,56643,56644,56646,56648],{"class":48,"line":653},[46,56645,54111],{"class":56},[46,56647,2098],{"class":1361},[46,56649,53274],{"class":56},[46,56651,56652,56654],{"class":48,"line":659},[46,56653,8416],{"class":1361},[46,56655,17573],{"class":56},[46,56657,56658,56661,56663,56665],{"class":48,"line":665},[46,56659,56660],{"class":180},"      padding",[46,56662,53404],{"class":56},[46,56664,2379],{"class":180},[46,56666,3345],{"class":56},[46,56668,56669,56672,56674,56676],{"class":48,"line":670},[46,56670,56671],{"class":180},"      margin",[46,56673,53404],{"class":56},[46,56675,2379],{"class":180},[46,56677,3345],{"class":56},[46,56679,56680],{"class":48,"line":676},[46,56681,4217],{"class":56},[46,56683,56684],{"class":48,"line":682},[46,56685,616],{"emptyLinePlaceholder":615},[46,56687,56688,56691],{"class":48,"line":688},[46,56689,56690],{"class":1361},"    li",[46,56692,17573],{"class":56},[46,56694,56695,56698,56700,56703],{"class":48,"line":693},[46,56696,56697],{"class":180},"      list-style",[46,56699,53404],{"class":56},[46,56701,56702],{"class":180},"none",[46,56704,3345],{"class":56},[46,56706,56707],{"class":48,"line":699},[46,56708,4217],{"class":56},[46,56710,56711],{"class":48,"line":705},[46,56712,616],{"emptyLinePlaceholder":615},[46,56714,56715,56718],{"class":48,"line":711},[46,56716,56717],{"class":169},"    .box",[46,56719,17573],{"class":56},[46,56721,56722,56725,56727,56730],{"class":48,"line":717},[46,56723,56724],{"class":180},"      position",[46,56726,53404],{"class":56},[46,56728,56729],{"class":180},"relative",[46,56731,3345],{"class":56},[46,56733,56734,56737,56739,56742,56744],{"class":48,"line":723},[46,56735,56736],{"class":180},"      width",[46,56738,53404],{"class":56},[46,56740,56741],{"class":180},"976",[46,56743,53459],{"class":52},[46,56745,3345],{"class":56},[46,56747,56748,56751,56753,56755,56757],{"class":48,"line":729},[46,56749,56750],{"class":180},"      height",[46,56752,53404],{"class":56},[46,56754,3590],{"class":180},[46,56756,53459],{"class":52},[46,56758,3345],{"class":56},[46,56760,56761,56763,56765,56767,56769,56771],{"class":48,"line":735},[46,56762,56671],{"class":180},[46,56764,53404],{"class":56},[46,56766,1155],{"class":180},[46,56768,53459],{"class":52},[46,56770,53523],{"class":180},[46,56772,3345],{"class":56},[46,56774,56775],{"class":48,"line":740},[46,56776,4217],{"class":56},[46,56778,56779],{"class":48,"line":745},[46,56780,616],{"emptyLinePlaceholder":615},[46,56782,56783,56786],{"class":48,"line":763},[46,56784,56785],{"class":169},"    .slider-footer",[46,56787,17573],{"class":56},[46,56789,56790,56792,56794,56797],{"class":48,"line":778},[46,56791,56724],{"class":180},[46,56793,53404],{"class":56},[46,56795,56796],{"class":180},"absolute",[46,56798,3345],{"class":56},[46,56800,56801,56804,56806,56808],{"class":48,"line":789},[46,56802,56803],{"class":180},"      left",[46,56805,53404],{"class":56},[46,56807,2379],{"class":180},[46,56809,3345],{"class":56},[46,56811,56812,56815,56817,56819],{"class":48,"line":794},[46,56813,56814],{"class":180},"      bottom",[46,56816,53404],{"class":56},[46,56818,2379],{"class":180},[46,56820,3345],{"class":56},[46,56822,56823,56825,56827,56829,56831],{"class":48,"line":806},[46,56824,56736],{"class":180},[46,56826,53404],{"class":56},[46,56828,1155],{"class":180},[46,56830,2515],{"class":52},[46,56832,3345],{"class":56},[46,56834,56835,56837,56839,56841,56843],{"class":48,"line":829},[46,56836,56750],{"class":180},[46,56838,53404],{"class":56},[46,56840,2761],{"class":180},[46,56842,2515],{"class":52},[46,56844,3345],{"class":56},[46,56846,56847,56850,56852,56855],{"class":48,"line":840},[46,56848,56849],{"class":180},"      background-color",[46,56851,53404],{"class":56},[46,56853,56854],{"class":180},"skyblue",[46,56856,3345],{"class":56},[46,56858,56859],{"class":48,"line":846},[46,56860,4217],{"class":56},[46,56862,56863],{"class":48,"line":852},[46,56864,616],{"emptyLinePlaceholder":615},[46,56866,56867,56869,56871],{"class":48,"line":857},[46,56868,56785],{"class":169},[46,56870,8838],{"class":1361},[46,56872,17573],{"class":56},[46,56874,56875,56877,56879,56881],{"class":48,"line":875},[46,56876,56724],{"class":180},[46,56878,53404],{"class":56},[46,56880,56796],{"class":180},[46,56882,3345],{"class":56},[46,56884,56885,56888,56890,56892,56894],{"class":48,"line":892},[46,56886,56887],{"class":180},"      font-size",[46,56889,53404],{"class":56},[46,56891,3087],{"class":180},[46,56893,53459],{"class":52},[46,56895,3345],{"class":56},[46,56897,56898,56900,56902,56904,56906],{"class":48,"line":898},[46,56899,56803],{"class":180},[46,56901,53404],{"class":56},[46,56903,2886],{"class":180},[46,56905,53459],{"class":52},[46,56907,3345],{"class":56},[46,56909,56910,56913,56915,56917,56919],{"class":48,"line":903},[46,56911,56912],{"class":180},"      top",[46,56914,53404],{"class":56},[46,56916,2506],{"class":180},[46,56918,53459],{"class":52},[46,56920,3345],{"class":56},[46,56922,56923],{"class":48,"line":908},[46,56924,4217],{"class":56},[46,56926,56927],{"class":48,"line":925},[46,56928,616],{"emptyLinePlaceholder":615},[46,56930,56931,56934],{"class":48,"line":1238},[46,56932,56933],{"class":1361},"    ul",[46,56935,17573],{"class":56},[46,56937,56938,56940,56942,56944],{"class":48,"line":1251},[46,56939,56724],{"class":180},[46,56941,53404],{"class":56},[46,56943,56796],{"class":180},[46,56945,3345],{"class":56},[46,56947,56948,56950,56952,56954,56956],{"class":48,"line":1256},[46,56949,56912],{"class":180},[46,56951,53404],{"class":56},[46,56953,2967],{"class":180},[46,56955,53459],{"class":52},[46,56957,3345],{"class":56},[46,56959,56960,56962,56964,56966,56968],{"class":48,"line":1261},[46,56961,56803],{"class":180},[46,56963,53404],{"class":56},[46,56965,2886],{"class":180},[46,56967,53459],{"class":52},[46,56969,3345],{"class":56},[46,56971,56972,56975,56977,56979],{"class":48,"line":1274},[46,56973,56974],{"class":180},"      display",[46,56976,53404],{"class":56},[46,56978,53444],{"class":180},[46,56980,3345],{"class":56},[46,56982,56983,56986,56988,56990],{"class":48,"line":10061},[46,56984,56985],{"class":180},"      justify-content",[46,56987,53404],{"class":56},[46,56989,53635],{"class":180},[46,56991,3345],{"class":56},[46,56993,56994,56996,56998,57000],{"class":48,"line":11720},[46,56995,56724],{"class":180},[46,56997,53404],{"class":56},[46,56999,56796],{"class":180},[46,57001,3345],{"class":56},[46,57003,57004,57006,57008,57010,57012],{"class":48,"line":11745},[46,57005,56736],{"class":180},[46,57007,53404],{"class":56},[46,57009,6010],{"class":180},[46,57011,53459],{"class":52},[46,57013,3345],{"class":56},[46,57015,57016,57018,57020,57022,57024],{"class":48,"line":11768},[46,57017,56750],{"class":180},[46,57019,53404],{"class":56},[46,57021,2886],{"class":180},[46,57023,53459],{"class":52},[46,57025,3345],{"class":56},[46,57027,57028],{"class":48,"line":11792},[46,57029,4217],{"class":56},[46,57031,57032],{"class":48,"line":11797},[46,57033,616],{"emptyLinePlaceholder":615},[46,57035,57036,57038,57041],{"class":48,"line":11802},[46,57037,56933],{"class":1361},[46,57039,57040],{"class":1361}," li",[46,57042,17573],{"class":56},[46,57044,57045,57047,57049,57051,57053],{"class":48,"line":11807},[46,57046,56736],{"class":180},[46,57048,53404],{"class":56},[46,57050,2886],{"class":180},[46,57052,53459],{"class":52},[46,57054,3345],{"class":56},[46,57056,57057,57059,57061,57063,57065],{"class":48,"line":11816},[46,57058,56750],{"class":180},[46,57060,53404],{"class":56},[46,57062,2886],{"class":180},[46,57064,53459],{"class":52},[46,57066,3345],{"class":56},[46,57068,57069,57071,57073,57076,57078,57080,57082,57084,57086,57088,57090,57093],{"class":48,"line":11821},[46,57070,56849],{"class":180},[46,57072,53404],{"class":56},[46,57074,57075],{"class":180},"rgba",[46,57077,1152],{"class":56},[46,57079,2379],{"class":180},[46,57081,448],{"class":56},[46,57083,2379],{"class":180},[46,57085,448],{"class":56},[46,57087,2379],{"class":180},[46,57089,448],{"class":56},[46,57091,57092],{"class":180},".4",[46,57094,4740],{"class":56},[46,57096,57097,57100,57102,57104,57106],{"class":48,"line":11827},[46,57098,57099],{"class":180},"      border-radius",[46,57101,53404],{"class":56},[46,57103,2633],{"class":180},[46,57105,53459],{"class":52},[46,57107,3345],{"class":56},[46,57109,57110],{"class":48,"line":11848},[46,57111,4217],{"class":56},[46,57113,57114],{"class":48,"line":11854},[46,57115,616],{"emptyLinePlaceholder":615},[46,57117,57118,57121],{"class":48,"line":11868},[46,57119,57120],{"class":169},"    .activate",[46,57122,17573],{"class":56},[46,57124,57125,57127,57129,57132],{"class":48,"line":11874},[46,57126,56849],{"class":180},[46,57128,53404],{"class":56},[46,57130,57131],{"class":180},"#f7f7f7",[46,57133,3345],{"class":56},[46,57135,57136],{"class":48,"line":11901},[46,57137,4217],{"class":56},[46,57139,57140,57142,57144],{"class":48,"line":11910},[46,57141,54384],{"class":56},[46,57143,2098],{"class":1361},[46,57145,53274],{"class":56},[46,57147,57148,57150,57152],{"class":48,"line":11916},[46,57149,53752],{"class":56},[46,57151,53301],{"class":1361},[46,57153,53274],{"class":56},[46,57155,57156],{"class":48,"line":11924},[46,57157,616],{"emptyLinePlaceholder":615},[46,57159,57160,57162,57164],{"class":48,"line":11929},[46,57161,821],{"class":56},[46,57163,53767],{"class":1361},[46,57165,53274],{"class":56},[46,57167,57168,57170,57172,57174,57176,57178],{"class":48,"line":18605},[46,57169,54111],{"class":56},[46,57171,53578],{"class":1361},[46,57173,55451],{"class":169},[46,57175,79],{"class":56},[46,57177,55456],{"class":173},[46,57179,53274],{"class":56},[46,57181,57182,57184,57186,57188,57190,57193],{"class":48,"line":18611},[46,57183,53308],{"class":56},[46,57185,53578],{"class":1361},[46,57187,55451],{"class":169},[46,57189,79],{"class":56},[46,57191,57192],{"class":173},"\"slider-wrapper\"",[46,57194,53274],{"class":56},[46,57196,57197,57200,57202,57205,57207,57210,57213,57215,57217],{"class":48,"line":18634},[46,57198,57199],{"class":56},"      \u003C",[46,57201,3514],{"class":1361},[46,57203,57204],{"class":169}," src",[46,57206,79],{"class":56},[46,57208,57209],{"class":173},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[46,57211,57212],{"class":169}," alt",[46,57214,79],{"class":56},[46,57216,9665],{"class":173},[46,57218,53274],{"class":56},[46,57220,57221,57223,57225],{"class":48,"line":18640},[46,57222,53743],{"class":56},[46,57224,53578],{"class":1361},[46,57226,53274],{"class":56},[46,57228,57229,57231,57233,57235,57237,57240],{"class":48,"line":18663},[46,57230,53308],{"class":56},[46,57232,53578],{"class":1361},[46,57234,55451],{"class":169},[46,57236,79],{"class":56},[46,57238,57239],{"class":173},"\"slider-footer\"",[46,57241,53274],{"class":56},[46,57243,57244,57246,57248,57251,57253],{"class":48,"line":18677},[46,57245,57199],{"class":56},[46,57247,19],{"class":1361},[46,57249,57250],{"class":56},">对人类来说会不会太超前了?\u003C\u002F",[46,57252,19],{"class":1361},[46,57254,53274],{"class":56},[46,57256,57257,57259,57261],{"class":48,"line":18697},[46,57258,57199],{"class":56},[46,57260,3191],{"class":1361},[46,57262,53274],{"class":56},[46,57264,57265,57268,57270,57272,57274,57277,57280,57282],{"class":48,"line":18703},[46,57266,57267],{"class":56},"        \u003C",[46,57269,26],{"class":1361},[46,57271,55451],{"class":169},[46,57273,79],{"class":56},[46,57275,57276],{"class":173},"\"activate\"",[46,57278,57279],{"class":56},">\u003C\u002F",[46,57281,26],{"class":1361},[46,57283,53274],{"class":56},[46,57285,57286,57288,57290,57292,57294],{"class":48,"line":18714},[46,57287,57267],{"class":56},[46,57289,26],{"class":1361},[46,57291,57279],{"class":56},[46,57293,26],{"class":1361},[46,57295,53274],{"class":56},[46,57297,57298,57300,57302,57304,57306],{"class":48,"line":18737},[46,57299,57267],{"class":56},[46,57301,26],{"class":1361},[46,57303,57279],{"class":56},[46,57305,26],{"class":1361},[46,57307,53274],{"class":56},[46,57309,57310,57312,57314,57316,57318],{"class":48,"line":18759},[46,57311,57267],{"class":56},[46,57313,26],{"class":1361},[46,57315,57279],{"class":56},[46,57317,26],{"class":1361},[46,57319,53274],{"class":56},[46,57321,57322,57324,57326,57328,57330],{"class":48,"line":18764},[46,57323,57267],{"class":56},[46,57325,26],{"class":1361},[46,57327,57279],{"class":56},[46,57329,26],{"class":1361},[46,57331,53274],{"class":56},[46,57333,57334,57336,57338,57340,57342],{"class":48,"line":18770},[46,57335,57267],{"class":56},[46,57337,26],{"class":1361},[46,57339,57279],{"class":56},[46,57341,26],{"class":1361},[46,57343,53274],{"class":56},[46,57345,57346,57348,57350,57352,57354],{"class":48,"line":18784},[46,57347,57267],{"class":56},[46,57349,26],{"class":1361},[46,57351,57279],{"class":56},[46,57353,26],{"class":1361},[46,57355,53274],{"class":56},[46,57357,57358,57360,57362,57364,57366],{"class":48,"line":18797},[46,57359,57267],{"class":56},[46,57361,26],{"class":1361},[46,57363,57279],{"class":56},[46,57365,26],{"class":1361},[46,57367,53274],{"class":56},[46,57369,57370,57373,57375],{"class":48,"line":18802},[46,57371,57372],{"class":56},"      \u003C\u002F",[46,57374,3191],{"class":1361},[46,57376,53274],{"class":56},[46,57378,57379,57381,57383],{"class":48,"line":18816},[46,57380,53743],{"class":56},[46,57382,53578],{"class":1361},[46,57384,53274],{"class":56},[46,57386,57387,57389,57391],{"class":48,"line":18821},[46,57388,54384],{"class":56},[46,57390,53578],{"class":1361},[46,57392,53274],{"class":56},[46,57394,57395,57397,57399],{"class":48,"line":18827},[46,57396,54111],{"class":56},[46,57398,53780],{"class":1361},[46,57400,53274],{"class":56},[46,57402,57403,57405,57408,57410],{"class":48,"line":18832},[46,57404,13225],{"class":52},[46,57406,57407],{"class":180}," arrImage",[46,57409,647],{"class":52},[46,57411,57412],{"class":56}," [\n",[46,57414,57415,57418,57421,57424,57427,57430,57433],{"class":48,"line":18846},[46,57416,57417],{"class":56},"      { url: ",[46,57419,57420],{"class":173},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[46,57422,57423],{"class":56},", title: ",[46,57425,57426],{"class":173},"'对人类来说会不会太超前了?'",[46,57428,57429],{"class":56},", color: ",[46,57431,57432],{"class":173},"'rgba(100,67,68)'",[46,57434,57435],{"class":56}," },\n",[46,57437,57438,57440,57443,57445,57448,57450,57453],{"class":48,"line":18851},[46,57439,57417],{"class":56},[46,57441,57442],{"class":173},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[46,57444,57423],{"class":56},[46,57446,57447],{"class":173},"'开启剑与雪的黑暗传说!'",[46,57449,57429],{"class":56},[46,57451,57452],{"class":173},"'rgba(43,35,26)'",[46,57454,57435],{"class":56},[46,57456,57457,57459,57462,57464,57467,57469,57472],{"class":48,"line":18856},[46,57458,57417],{"class":56},[46,57460,57461],{"class":173},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[46,57463,57423],{"class":56},[46,57465,57466],{"class":173},"'真正的jo厨出现了!'",[46,57468,57429],{"class":56},[46,57470,57471],{"class":173},"'rgba(36,31,33)'",[46,57473,57435],{"class":56},[46,57475,57476,57478,57481,57483,57486,57488,57491],{"class":48,"line":18870},[46,57477,57417],{"class":56},[46,57479,57480],{"class":173},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[46,57482,57423],{"class":56},[46,57484,57485],{"class":173},"'李玉刚:让世界通过b站看到东方大国文化'",[46,57487,57429],{"class":56},[46,57489,57490],{"class":173},"'rgba(139,98,66)'",[46,57492,57435],{"class":56},[46,57494,57495,57497,57500,57502,57505,57507,57510],{"class":48,"line":18882},[46,57496,57417],{"class":56},[46,57498,57499],{"class":173},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[46,57501,57423],{"class":56},[46,57503,57504],{"class":173},"'快来分享你的寒假日常吧'",[46,57506,57429],{"class":56},[46,57508,57509],{"class":173},"'rgba(67,90,92)'",[46,57511,57435],{"class":56},[46,57513,57514,57516,57519,57521,57524,57526,57529],{"class":48,"line":18887},[46,57515,57417],{"class":56},[46,57517,57518],{"class":173},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[46,57520,57423],{"class":56},[46,57522,57523],{"class":173},"'哔哩哔哩小年YEAR'",[46,57525,57429],{"class":56},[46,57527,57528],{"class":173},"'rgba(166,131,143)'",[46,57530,57435],{"class":56},[46,57532,57533,57535,57538,57540,57543,57545,57548],{"class":48,"line":18900},[46,57534,57417],{"class":56},[46,57536,57537],{"class":173},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[46,57539,57423],{"class":56},[46,57541,57542],{"class":173},"'一站式解决你的电脑配置问题'",[46,57544,57429],{"class":56},[46,57546,57547],{"class":173},"'rgba(53,29,25)'",[46,57549,57435],{"class":56},[46,57551,57552,57554,57557,57559,57562,57564,57567],{"class":48,"line":18905},[46,57553,57417],{"class":56},[46,57555,57556],{"class":173},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[46,57558,57423],{"class":56},[46,57560,57561],{"class":173},"'谁不想和小猫咪贴贴呢?'",[46,57563,57429],{"class":56},[46,57565,57566],{"class":173},"'rgba(99,72,114)'",[46,57568,57569],{"class":56}," }\n",[46,57571,57572],{"class":48,"line":18910},[46,57573,55074],{"class":56},[46,57575,57576,57578,57581,57583,57585,57587,57589,57592],{"class":48,"line":18915},[46,57577,13225],{"class":52},[46,57579,57580],{"class":180}," img",[46,57582,647],{"class":52},[46,57584,56361],{"class":56},[46,57586,56364],{"class":169},[46,57588,1152],{"class":56},[46,57590,57591],{"class":173},"'.slider-wrapper img'",[46,57593,459],{"class":56},[46,57595,57596,57598,57600,57602,57604,57606,57608,57611],{"class":48,"line":18928},[46,57597,13225],{"class":52},[46,57599,8838],{"class":180},[46,57601,647],{"class":52},[46,57603,56361],{"class":56},[46,57605,56364],{"class":169},[46,57607,1152],{"class":56},[46,57609,57610],{"class":173},"'.slider-footer p'",[46,57612,459],{"class":56},[46,57614,57615,57617,57620,57622,57624,57626,57628,57631],{"class":48,"line":18933},[46,57616,13225],{"class":52},[46,57618,57619],{"class":180}," color",[46,57621,647],{"class":52},[46,57623,56361],{"class":56},[46,57625,56364],{"class":169},[46,57627,1152],{"class":56},[46,57629,57630],{"class":173},"'.slider-footer'",[46,57632,459],{"class":56},[46,57634,57635,57637,57640,57642,57644,57647,57649,57652],{"class":48,"line":34607},[46,57636,13225],{"class":52},[46,57638,57639],{"class":180}," lis",[46,57641,647],{"class":52},[46,57643,56361],{"class":56},[46,57645,57646],{"class":169},"querySelectorAll",[46,57648,1152],{"class":56},[46,57650,57651],{"class":173},"'.slider-footer ul li'",[46,57653,459],{"class":56},[46,57655,57656,57658,57660,57662],{"class":48,"line":34613},[46,57657,54186],{"class":52},[46,57659,11442],{"class":56},[46,57661,79],{"class":52},[46,57663,57664],{"class":180}," 1\n",[46,57666,57667,57669,57672,57674,57676,57678,57680],{"class":48,"line":34619},[46,57668,54186],{"class":52},[46,57670,57671],{"class":56}," timer ",[46,57673,79],{"class":52},[46,57675,56409],{"class":169},[46,57677,1152],{"class":56},[46,57679,56414],{"class":52},[46,57681,56417],{"class":56},[46,57683,57684,57687,57689],{"class":48,"line":34625},[46,57685,57686],{"class":56},"      img.src ",[46,57688,79],{"class":52},[46,57690,57691],{"class":56}," arrImage[i].url\n",[46,57693,57694,57697,57699],{"class":48,"line":34631},[46,57695,57696],{"class":56},"      p.innerHTML ",[46,57698,79],{"class":52},[46,57700,57701],{"class":56}," arrImage[i].title\n",[46,57703,57704,57707,57709],{"class":48,"line":34642},[46,57705,57706],{"class":56},"      color.style.backgroundColor ",[46,57708,79],{"class":52},[46,57710,57711],{"class":56}," arrImage[i].color\n",[46,57713,57714],{"class":48,"line":34648},[46,57715,57716],{"class":2253},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[46,57718,57719],{"class":48,"line":34668},[46,57720,57721],{"class":2253},"      \u002F\u002F li.classList.add('activate')\n",[46,57723,57724],{"class":48,"line":34674},[46,57725,57726],{"class":2253},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[46,57728,57729],{"class":48,"line":34685},[46,57730,57731],{"class":2253},"      \u002F\u002F lis[i].classList.remove('activate')\n",[46,57733,57734,57737,57739,57741,57744,57747,57750,57752,57755],{"class":48,"line":34691},[46,57735,57736],{"class":56},"      document.",[46,57738,56364],{"class":169},[46,57740,1152],{"class":56},[46,57742,57743],{"class":173},"'.activate'",[46,57745,57746],{"class":56},")?.classList.",[46,57748,57749],{"class":169},"toggle",[46,57751,1152],{"class":56},[46,57753,57754],{"class":173},"'activate'",[46,57756,459],{"class":56},[46,57758,57759,57762,57764,57766,57768],{"class":48,"line":34697},[46,57760,57761],{"class":56},"      lis[i].classList.",[46,57763,7347],{"class":169},[46,57765,1152],{"class":56},[46,57767,57754],{"class":173},[46,57769,459],{"class":56},[46,57771,57772],{"class":48,"line":34703},[46,57773,616],{"emptyLinePlaceholder":615},[46,57775,57776,57779,57781,57783,57785,57787,57789,57791,57794],{"class":48,"line":34709},[46,57777,57778],{"class":56},"      i ",[46,57780,79],{"class":52},[46,57782,56448],{"class":56},[46,57784,2668],{"class":52},[46,57786,27110],{"class":180},[46,57788,15716],{"class":56},[46,57790,2515],{"class":52},[46,57792,57793],{"class":56}," arrImage.",[46,57795,57796],{"class":180},"length\n",[46,57798,57799],{"class":48,"line":34715},[46,57800,616],{"emptyLinePlaceholder":615},[46,57802,57803,57805,57807],{"class":48,"line":34721},[46,57804,56500],{"class":56},[46,57806,8423],{"class":180},[46,57808,459],{"class":56},[46,57810,57811,57813,57815],{"class":48,"line":34727},[46,57812,54384],{"class":56},[46,57814,53780],{"class":1361},[46,57816,53274],{"class":56},[46,57818,57819,57821,57823],{"class":48,"line":34747},[46,57820,53752],{"class":56},[46,57822,53767],{"class":1361},[46,57824,53274],{"class":56},[46,57826,57827],{"class":48,"line":34753},[46,57828,616],{"emptyLinePlaceholder":615},[46,57830,57831,57833,57835],{"class":48,"line":34769},[46,57832,53752],{"class":56},[46,57834,52603],{"class":1361},[46,57836,53274],{"class":56},[19,57838,57839],{},[3514,57840],{"alt":41,"src":57841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[19,57843,57844],{},"?.就是短路保护,确保输出正常进行",[19,57846,57847],{},"不要忘记取余%,有时候可以用",[19,57849,57850],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[23,57852,57853],{"start":60},[26,57854,57855],{},"法2",[36,57857,57859],{"className":52601,"code":57858,"language":52603,"meta":41,"style":41},"\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",[43,57860,57861,57871,57885,57889,57897,57911,57931,57943,57951,57957,57967,57977,57981,57985,57991,58001,58005,58009,58015,58025,58037,58049,58063,58067,58071,58077,58087,58097,58107,58119,58131,58141,58145,58149,58157,58167,58179,58191,58203,58207,58211,58217,58227,58239,58251,58261,58271,58281,58293,58305,58309,58313,58321,58333,58345,58371,58383,58387,58391,58397,58407,58411,58419,58427,58431,58439,58453,58467,58487,58495,58509,58521,58529,58547,58559,58571,58583,58595,58607,58619,58631,58639,58647,58655,58663,58674,58690,58706,58722,58738,58754,58770,58786,58802,58806,58811,58829,58847,58857,58862,58867,58878,58884,58899,58908,58912,58917,58926,58931,58940,58945,58950,58955,58978,59008,59012,59020,59024,59032,59040,59044],{"__ignoreMap":41},[46,57862,57863,57865,57867,57869],{"class":48,"line":49},[46,57864,53265],{"class":56},[46,57866,53268],{"class":1361},[46,57868,53271],{"class":169},[46,57870,53274],{"class":56},[46,57872,57873,57875,57877,57879,57881,57883],{"class":48,"line":60},[46,57874,821],{"class":56},[46,57876,52603],{"class":1361},[46,57878,53283],{"class":169},[46,57880,79],{"class":56},[46,57882,53288],{"class":173},[46,57884,53274],{"class":56},[46,57886,57887],{"class":48,"line":200},[46,57888,616],{"emptyLinePlaceholder":615},[46,57890,57891,57893,57895],{"class":48,"line":211},[46,57892,821],{"class":56},[46,57894,53301],{"class":1361},[46,57896,53274],{"class":56},[46,57898,57899,57901,57903,57905,57907,57909],{"class":48,"line":222},[46,57900,54111],{"class":56},[46,57902,53311],{"class":1361},[46,57904,53314],{"class":169},[46,57906,79],{"class":56},[46,57908,53319],{"class":173},[46,57910,53274],{"class":56},[46,57912,57913,57915,57917,57919,57921,57923,57925,57927,57929],{"class":48,"line":636},[46,57914,54111],{"class":56},[46,57916,53311],{"class":1361},[46,57918,1364],{"class":169},[46,57920,79],{"class":56},[46,57922,53358],{"class":173},[46,57924,53338],{"class":169},[46,57926,79],{"class":56},[46,57928,53365],{"class":173},[46,57930,53274],{"class":56},[46,57932,57933,57935,57937,57939,57941],{"class":48,"line":641},[46,57934,54111],{"class":56},[46,57936,53374],{"class":1361},[46,57938,53377],{"class":56},[46,57940,53374],{"class":1361},[46,57942,53274],{"class":56},[46,57944,57945,57947,57949],{"class":48,"line":653},[46,57946,54111],{"class":56},[46,57948,2098],{"class":1361},[46,57950,53274],{"class":56},[46,57952,57953,57955],{"class":48,"line":659},[46,57954,8416],{"class":1361},[46,57956,17573],{"class":56},[46,57958,57959,57961,57963,57965],{"class":48,"line":665},[46,57960,56660],{"class":180},[46,57962,53404],{"class":56},[46,57964,2379],{"class":180},[46,57966,3345],{"class":56},[46,57968,57969,57971,57973,57975],{"class":48,"line":670},[46,57970,56671],{"class":180},[46,57972,53404],{"class":56},[46,57974,2379],{"class":180},[46,57976,3345],{"class":56},[46,57978,57979],{"class":48,"line":676},[46,57980,4217],{"class":56},[46,57982,57983],{"class":48,"line":682},[46,57984,616],{"emptyLinePlaceholder":615},[46,57986,57987,57989],{"class":48,"line":688},[46,57988,56690],{"class":1361},[46,57990,17573],{"class":56},[46,57992,57993,57995,57997,57999],{"class":48,"line":693},[46,57994,56697],{"class":180},[46,57996,53404],{"class":56},[46,57998,56702],{"class":180},[46,58000,3345],{"class":56},[46,58002,58003],{"class":48,"line":699},[46,58004,4217],{"class":56},[46,58006,58007],{"class":48,"line":705},[46,58008,616],{"emptyLinePlaceholder":615},[46,58010,58011,58013],{"class":48,"line":711},[46,58012,56717],{"class":169},[46,58014,17573],{"class":56},[46,58016,58017,58019,58021,58023],{"class":48,"line":717},[46,58018,56724],{"class":180},[46,58020,53404],{"class":56},[46,58022,56729],{"class":180},[46,58024,3345],{"class":56},[46,58026,58027,58029,58031,58033,58035],{"class":48,"line":723},[46,58028,56736],{"class":180},[46,58030,53404],{"class":56},[46,58032,56741],{"class":180},[46,58034,53459],{"class":52},[46,58036,3345],{"class":56},[46,58038,58039,58041,58043,58045,58047],{"class":48,"line":729},[46,58040,56750],{"class":180},[46,58042,53404],{"class":56},[46,58044,3590],{"class":180},[46,58046,53459],{"class":52},[46,58048,3345],{"class":56},[46,58050,58051,58053,58055,58057,58059,58061],{"class":48,"line":735},[46,58052,56671],{"class":180},[46,58054,53404],{"class":56},[46,58056,1155],{"class":180},[46,58058,53459],{"class":52},[46,58060,53523],{"class":180},[46,58062,3345],{"class":56},[46,58064,58065],{"class":48,"line":740},[46,58066,4217],{"class":56},[46,58068,58069],{"class":48,"line":745},[46,58070,616],{"emptyLinePlaceholder":615},[46,58072,58073,58075],{"class":48,"line":763},[46,58074,56785],{"class":169},[46,58076,17573],{"class":56},[46,58078,58079,58081,58083,58085],{"class":48,"line":778},[46,58080,56724],{"class":180},[46,58082,53404],{"class":56},[46,58084,56796],{"class":180},[46,58086,3345],{"class":56},[46,58088,58089,58091,58093,58095],{"class":48,"line":789},[46,58090,56803],{"class":180},[46,58092,53404],{"class":56},[46,58094,2379],{"class":180},[46,58096,3345],{"class":56},[46,58098,58099,58101,58103,58105],{"class":48,"line":794},[46,58100,56814],{"class":180},[46,58102,53404],{"class":56},[46,58104,2379],{"class":180},[46,58106,3345],{"class":56},[46,58108,58109,58111,58113,58115,58117],{"class":48,"line":806},[46,58110,56736],{"class":180},[46,58112,53404],{"class":56},[46,58114,1155],{"class":180},[46,58116,2515],{"class":52},[46,58118,3345],{"class":56},[46,58120,58121,58123,58125,58127,58129],{"class":48,"line":829},[46,58122,56750],{"class":180},[46,58124,53404],{"class":56},[46,58126,2761],{"class":180},[46,58128,2515],{"class":52},[46,58130,3345],{"class":56},[46,58132,58133,58135,58137,58139],{"class":48,"line":840},[46,58134,56849],{"class":180},[46,58136,53404],{"class":56},[46,58138,56854],{"class":180},[46,58140,3345],{"class":56},[46,58142,58143],{"class":48,"line":846},[46,58144,4217],{"class":56},[46,58146,58147],{"class":48,"line":852},[46,58148,616],{"emptyLinePlaceholder":615},[46,58150,58151,58153,58155],{"class":48,"line":857},[46,58152,56785],{"class":169},[46,58154,8838],{"class":1361},[46,58156,17573],{"class":56},[46,58158,58159,58161,58163,58165],{"class":48,"line":875},[46,58160,56724],{"class":180},[46,58162,53404],{"class":56},[46,58164,56796],{"class":180},[46,58166,3345],{"class":56},[46,58168,58169,58171,58173,58175,58177],{"class":48,"line":892},[46,58170,56887],{"class":180},[46,58172,53404],{"class":56},[46,58174,3087],{"class":180},[46,58176,53459],{"class":52},[46,58178,3345],{"class":56},[46,58180,58181,58183,58185,58187,58189],{"class":48,"line":898},[46,58182,56803],{"class":180},[46,58184,53404],{"class":56},[46,58186,2886],{"class":180},[46,58188,53459],{"class":52},[46,58190,3345],{"class":56},[46,58192,58193,58195,58197,58199,58201],{"class":48,"line":903},[46,58194,56912],{"class":180},[46,58196,53404],{"class":56},[46,58198,2506],{"class":180},[46,58200,53459],{"class":52},[46,58202,3345],{"class":56},[46,58204,58205],{"class":48,"line":908},[46,58206,4217],{"class":56},[46,58208,58209],{"class":48,"line":925},[46,58210,616],{"emptyLinePlaceholder":615},[46,58212,58213,58215],{"class":48,"line":1238},[46,58214,56933],{"class":1361},[46,58216,17573],{"class":56},[46,58218,58219,58221,58223,58225],{"class":48,"line":1251},[46,58220,56724],{"class":180},[46,58222,53404],{"class":56},[46,58224,56796],{"class":180},[46,58226,3345],{"class":56},[46,58228,58229,58231,58233,58235,58237],{"class":48,"line":1256},[46,58230,56912],{"class":180},[46,58232,53404],{"class":56},[46,58234,2967],{"class":180},[46,58236,53459],{"class":52},[46,58238,3345],{"class":56},[46,58240,58241,58243,58245,58247,58249],{"class":48,"line":1261},[46,58242,56803],{"class":180},[46,58244,53404],{"class":56},[46,58246,2886],{"class":180},[46,58248,53459],{"class":52},[46,58250,3345],{"class":56},[46,58252,58253,58255,58257,58259],{"class":48,"line":1274},[46,58254,56974],{"class":180},[46,58256,53404],{"class":56},[46,58258,53444],{"class":180},[46,58260,3345],{"class":56},[46,58262,58263,58265,58267,58269],{"class":48,"line":10061},[46,58264,56985],{"class":180},[46,58266,53404],{"class":56},[46,58268,53635],{"class":180},[46,58270,3345],{"class":56},[46,58272,58273,58275,58277,58279],{"class":48,"line":11720},[46,58274,56724],{"class":180},[46,58276,53404],{"class":56},[46,58278,56796],{"class":180},[46,58280,3345],{"class":56},[46,58282,58283,58285,58287,58289,58291],{"class":48,"line":11745},[46,58284,56736],{"class":180},[46,58286,53404],{"class":56},[46,58288,6010],{"class":180},[46,58290,53459],{"class":52},[46,58292,3345],{"class":56},[46,58294,58295,58297,58299,58301,58303],{"class":48,"line":11768},[46,58296,56750],{"class":180},[46,58298,53404],{"class":56},[46,58300,2886],{"class":180},[46,58302,53459],{"class":52},[46,58304,3345],{"class":56},[46,58306,58307],{"class":48,"line":11792},[46,58308,4217],{"class":56},[46,58310,58311],{"class":48,"line":11797},[46,58312,616],{"emptyLinePlaceholder":615},[46,58314,58315,58317,58319],{"class":48,"line":11802},[46,58316,56933],{"class":1361},[46,58318,57040],{"class":1361},[46,58320,17573],{"class":56},[46,58322,58323,58325,58327,58329,58331],{"class":48,"line":11807},[46,58324,56736],{"class":180},[46,58326,53404],{"class":56},[46,58328,2886],{"class":180},[46,58330,53459],{"class":52},[46,58332,3345],{"class":56},[46,58334,58335,58337,58339,58341,58343],{"class":48,"line":11816},[46,58336,56750],{"class":180},[46,58338,53404],{"class":56},[46,58340,2886],{"class":180},[46,58342,53459],{"class":52},[46,58344,3345],{"class":56},[46,58346,58347,58349,58351,58353,58355,58357,58359,58361,58363,58365,58367,58369],{"class":48,"line":11821},[46,58348,56849],{"class":180},[46,58350,53404],{"class":56},[46,58352,57075],{"class":180},[46,58354,1152],{"class":56},[46,58356,2379],{"class":180},[46,58358,448],{"class":56},[46,58360,2379],{"class":180},[46,58362,448],{"class":56},[46,58364,2379],{"class":180},[46,58366,448],{"class":56},[46,58368,57092],{"class":180},[46,58370,4740],{"class":56},[46,58372,58373,58375,58377,58379,58381],{"class":48,"line":11827},[46,58374,57099],{"class":180},[46,58376,53404],{"class":56},[46,58378,2633],{"class":180},[46,58380,53459],{"class":52},[46,58382,3345],{"class":56},[46,58384,58385],{"class":48,"line":11848},[46,58386,4217],{"class":56},[46,58388,58389],{"class":48,"line":11854},[46,58390,616],{"emptyLinePlaceholder":615},[46,58392,58393,58395],{"class":48,"line":11868},[46,58394,57120],{"class":169},[46,58396,17573],{"class":56},[46,58398,58399,58401,58403,58405],{"class":48,"line":11874},[46,58400,56849],{"class":180},[46,58402,53404],{"class":56},[46,58404,57131],{"class":180},[46,58406,3345],{"class":56},[46,58408,58409],{"class":48,"line":11901},[46,58410,4217],{"class":56},[46,58412,58413,58415,58417],{"class":48,"line":11910},[46,58414,54384],{"class":56},[46,58416,2098],{"class":1361},[46,58418,53274],{"class":56},[46,58420,58421,58423,58425],{"class":48,"line":11916},[46,58422,53752],{"class":56},[46,58424,53301],{"class":1361},[46,58426,53274],{"class":56},[46,58428,58429],{"class":48,"line":11924},[46,58430,616],{"emptyLinePlaceholder":615},[46,58432,58433,58435,58437],{"class":48,"line":11929},[46,58434,821],{"class":56},[46,58436,53767],{"class":1361},[46,58438,53274],{"class":56},[46,58440,58441,58443,58445,58447,58449,58451],{"class":48,"line":18605},[46,58442,54111],{"class":56},[46,58444,53578],{"class":1361},[46,58446,55451],{"class":169},[46,58448,79],{"class":56},[46,58450,55456],{"class":173},[46,58452,53274],{"class":56},[46,58454,58455,58457,58459,58461,58463,58465],{"class":48,"line":18611},[46,58456,53308],{"class":56},[46,58458,53578],{"class":1361},[46,58460,55451],{"class":169},[46,58462,79],{"class":56},[46,58464,57192],{"class":173},[46,58466,53274],{"class":56},[46,58468,58469,58471,58473,58475,58477,58479,58481,58483,58485],{"class":48,"line":18634},[46,58470,57199],{"class":56},[46,58472,3514],{"class":1361},[46,58474,57204],{"class":169},[46,58476,79],{"class":56},[46,58478,57209],{"class":173},[46,58480,57212],{"class":169},[46,58482,79],{"class":56},[46,58484,9665],{"class":173},[46,58486,53274],{"class":56},[46,58488,58489,58491,58493],{"class":48,"line":18640},[46,58490,53743],{"class":56},[46,58492,53578],{"class":1361},[46,58494,53274],{"class":56},[46,58496,58497,58499,58501,58503,58505,58507],{"class":48,"line":18663},[46,58498,53308],{"class":56},[46,58500,53578],{"class":1361},[46,58502,55451],{"class":169},[46,58504,79],{"class":56},[46,58506,57239],{"class":173},[46,58508,53274],{"class":56},[46,58510,58511,58513,58515,58517,58519],{"class":48,"line":18677},[46,58512,57199],{"class":56},[46,58514,19],{"class":1361},[46,58516,57250],{"class":56},[46,58518,19],{"class":1361},[46,58520,53274],{"class":56},[46,58522,58523,58525,58527],{"class":48,"line":18697},[46,58524,57199],{"class":56},[46,58526,3191],{"class":1361},[46,58528,53274],{"class":56},[46,58530,58531,58533,58535,58537,58539,58541,58543,58545],{"class":48,"line":18703},[46,58532,57267],{"class":56},[46,58534,26],{"class":1361},[46,58536,55451],{"class":169},[46,58538,79],{"class":56},[46,58540,57276],{"class":173},[46,58542,57279],{"class":56},[46,58544,26],{"class":1361},[46,58546,53274],{"class":56},[46,58548,58549,58551,58553,58555,58557],{"class":48,"line":18714},[46,58550,57267],{"class":56},[46,58552,26],{"class":1361},[46,58554,57279],{"class":56},[46,58556,26],{"class":1361},[46,58558,53274],{"class":56},[46,58560,58561,58563,58565,58567,58569],{"class":48,"line":18737},[46,58562,57267],{"class":56},[46,58564,26],{"class":1361},[46,58566,57279],{"class":56},[46,58568,26],{"class":1361},[46,58570,53274],{"class":56},[46,58572,58573,58575,58577,58579,58581],{"class":48,"line":18759},[46,58574,57267],{"class":56},[46,58576,26],{"class":1361},[46,58578,57279],{"class":56},[46,58580,26],{"class":1361},[46,58582,53274],{"class":56},[46,58584,58585,58587,58589,58591,58593],{"class":48,"line":18764},[46,58586,57267],{"class":56},[46,58588,26],{"class":1361},[46,58590,57279],{"class":56},[46,58592,26],{"class":1361},[46,58594,53274],{"class":56},[46,58596,58597,58599,58601,58603,58605],{"class":48,"line":18770},[46,58598,57267],{"class":56},[46,58600,26],{"class":1361},[46,58602,57279],{"class":56},[46,58604,26],{"class":1361},[46,58606,53274],{"class":56},[46,58608,58609,58611,58613,58615,58617],{"class":48,"line":18784},[46,58610,57267],{"class":56},[46,58612,26],{"class":1361},[46,58614,57279],{"class":56},[46,58616,26],{"class":1361},[46,58618,53274],{"class":56},[46,58620,58621,58623,58625,58627,58629],{"class":48,"line":18797},[46,58622,57267],{"class":56},[46,58624,26],{"class":1361},[46,58626,57279],{"class":56},[46,58628,26],{"class":1361},[46,58630,53274],{"class":56},[46,58632,58633,58635,58637],{"class":48,"line":18802},[46,58634,57372],{"class":56},[46,58636,3191],{"class":1361},[46,58638,53274],{"class":56},[46,58640,58641,58643,58645],{"class":48,"line":18816},[46,58642,53743],{"class":56},[46,58644,53578],{"class":1361},[46,58646,53274],{"class":56},[46,58648,58649,58651,58653],{"class":48,"line":18821},[46,58650,54384],{"class":56},[46,58652,53578],{"class":1361},[46,58654,53274],{"class":56},[46,58656,58657,58659,58661],{"class":48,"line":18827},[46,58658,54111],{"class":56},[46,58660,53780],{"class":1361},[46,58662,53274],{"class":56},[46,58664,58665,58667,58670,58672],{"class":48,"line":18832},[46,58666,13225],{"class":52},[46,58668,58669],{"class":180}," sliderData",[46,58671,647],{"class":52},[46,58673,57412],{"class":56},[46,58675,58676,58678,58680,58682,58684,58686,58688],{"class":48,"line":18846},[46,58677,57417],{"class":56},[46,58679,57420],{"class":173},[46,58681,57423],{"class":56},[46,58683,57426],{"class":173},[46,58685,57429],{"class":56},[46,58687,57432],{"class":173},[46,58689,57435],{"class":56},[46,58691,58692,58694,58696,58698,58700,58702,58704],{"class":48,"line":18851},[46,58693,57417],{"class":56},[46,58695,57442],{"class":173},[46,58697,57423],{"class":56},[46,58699,57447],{"class":173},[46,58701,57429],{"class":56},[46,58703,57452],{"class":173},[46,58705,57435],{"class":56},[46,58707,58708,58710,58712,58714,58716,58718,58720],{"class":48,"line":18856},[46,58709,57417],{"class":56},[46,58711,57461],{"class":173},[46,58713,57423],{"class":56},[46,58715,57466],{"class":173},[46,58717,57429],{"class":56},[46,58719,57471],{"class":173},[46,58721,57435],{"class":56},[46,58723,58724,58726,58728,58730,58732,58734,58736],{"class":48,"line":18870},[46,58725,57417],{"class":56},[46,58727,57480],{"class":173},[46,58729,57423],{"class":56},[46,58731,57485],{"class":173},[46,58733,57429],{"class":56},[46,58735,57490],{"class":173},[46,58737,57435],{"class":56},[46,58739,58740,58742,58744,58746,58748,58750,58752],{"class":48,"line":18882},[46,58741,57417],{"class":56},[46,58743,57499],{"class":173},[46,58745,57423],{"class":56},[46,58747,57504],{"class":173},[46,58749,57429],{"class":56},[46,58751,57509],{"class":173},[46,58753,57435],{"class":56},[46,58755,58756,58758,58760,58762,58764,58766,58768],{"class":48,"line":18887},[46,58757,57417],{"class":56},[46,58759,57518],{"class":173},[46,58761,57423],{"class":56},[46,58763,57523],{"class":173},[46,58765,57429],{"class":56},[46,58767,57528],{"class":173},[46,58769,57435],{"class":56},[46,58771,58772,58774,58776,58778,58780,58782,58784],{"class":48,"line":18900},[46,58773,57417],{"class":56},[46,58775,57537],{"class":173},[46,58777,57423],{"class":56},[46,58779,57542],{"class":173},[46,58781,57429],{"class":56},[46,58783,57547],{"class":173},[46,58785,57435],{"class":56},[46,58787,58788,58790,58792,58794,58796,58798,58800],{"class":48,"line":18905},[46,58789,57417],{"class":56},[46,58791,57556],{"class":173},[46,58793,57423],{"class":56},[46,58795,57561],{"class":173},[46,58797,57429],{"class":56},[46,58799,57566],{"class":173},[46,58801,57569],{"class":56},[46,58803,58804],{"class":48,"line":18910},[46,58805,55074],{"class":56},[46,58807,58808],{"class":48,"line":18915},[46,58809,58810],{"class":2253},"    \u002F\u002F 1.获取元素\n",[46,58812,58813,58815,58817,58819,58821,58823,58825,58827],{"class":48,"line":18928},[46,58814,13225],{"class":52},[46,58816,57580],{"class":180},[46,58818,647],{"class":52},[46,58820,56361],{"class":56},[46,58822,56364],{"class":169},[46,58824,1152],{"class":56},[46,58826,57591],{"class":173},[46,58828,459],{"class":56},[46,58830,58831,58833,58835,58837,58839,58841,58843,58845],{"class":48,"line":18933},[46,58832,13225],{"class":52},[46,58834,8838],{"class":180},[46,58836,647],{"class":52},[46,58838,56361],{"class":56},[46,58840,56364],{"class":169},[46,58842,1152],{"class":56},[46,58844,57610],{"class":173},[46,58846,459],{"class":56},[46,58848,58849,58851,58853,58855],{"class":48,"line":34607},[46,58850,54186],{"class":52},[46,58852,11442],{"class":56},[46,58854,79],{"class":52},[46,58856,49301],{"class":180},[46,58858,58859],{"class":48,"line":34613},[46,58860,58861],{"class":2253},"    \u002F\u002F 2.开启定时器\n",[46,58863,58864],{"class":48,"line":34619},[46,58865,58866],{"class":2253},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[46,58868,58869,58872,58874,58876],{"class":48,"line":34625},[46,58870,58871],{"class":169},"    setInterval",[46,58873,1152],{"class":56},[46,58875,56414],{"class":52},[46,58877,56417],{"class":56},[46,58879,58880,58882],{"class":48,"line":34631},[46,58881,56422],{"class":56},[46,58883,4723],{"class":52},[46,58885,58886,58888,58890,58892,58895,58897],{"class":48,"line":34642},[46,58887,56445],{"class":52},[46,58889,56448],{"class":56},[46,58891,3750],{"class":52},[46,58893,58894],{"class":56}," sliderData.",[46,58896,53935],{"class":180},[46,58898,14445],{"class":56},[46,58900,58901,58904,58906],{"class":48,"line":34648},[46,58902,58903],{"class":56},"        i ",[46,58905,79],{"class":52},[46,58907,49301],{"class":180},[46,58909,58910],{"class":48,"line":34668},[46,58911,54365],{"class":56},[46,58913,58914],{"class":48,"line":34674},[46,58915,58916],{"class":2253},"      \u002F\u002F 更换图片路径\n",[46,58918,58919,58921,58923],{"class":48,"line":34685},[46,58920,57686],{"class":56},[46,58922,79],{"class":52},[46,58924,58925],{"class":56}," sliderData[i].url\n",[46,58927,58928],{"class":48,"line":34691},[46,58929,58930],{"class":2253},"      \u002F\u002F 把文字写到p里面\n",[46,58932,58933,58935,58937],{"class":48,"line":34697},[46,58934,57696],{"class":56},[46,58936,79],{"class":52},[46,58938,58939],{"class":56}," sliderData[i].title\n",[46,58941,58942],{"class":48,"line":34703},[46,58943,58944],{"class":2253},"      \u002F\u002F 小圆点\n",[46,58946,58947],{"class":48,"line":34709},[46,58948,58949],{"class":2253},"      \u002F\u002F 先删除以前的active\n",[46,58951,58952],{"class":48,"line":34715},[46,58953,58954],{"class":2253},"      \u002F\u002F 只让当前li添加active\n",[46,58956,58957,58959,58961,58963,58966,58969,58972,58974,58976],{"class":48,"line":34721},[46,58958,57736],{"class":56},[46,58960,56364],{"class":169},[46,58962,1152],{"class":56},[46,58964,58965],{"class":173},"'.slider-footer .activate'",[46,58967,58968],{"class":56},").classList.",[46,58970,58971],{"class":169},"remove",[46,58973,1152],{"class":56},[46,58975,57754],{"class":173},[46,58977,459],{"class":56},[46,58979,58980,58982,58984,58986,58989,58991,58993,58995,58998,59000,59002,59004,59006],{"class":48,"line":34727},[46,58981,57736],{"class":56},[46,58983,56364],{"class":169},[46,58985,1152],{"class":56},[46,58987,58988],{"class":173},"`.slider-footer ul li:nth-child(${",[46,58990,2628],{"class":56},[46,58992,47537],{"class":52},[46,58994,27110],{"class":180},[46,58996,58997],{"class":173},"})`",[46,58999,58968],{"class":56},[46,59001,7347],{"class":169},[46,59003,1152],{"class":56},[46,59005,57754],{"class":173},[46,59007,459],{"class":56},[46,59009,59010],{"class":48,"line":34747},[46,59011,616],{"emptyLinePlaceholder":615},[46,59013,59014,59016,59018],{"class":48,"line":34753},[46,59015,56500],{"class":56},[46,59017,8423],{"class":180},[46,59019,459],{"class":56},[46,59021,59022],{"class":48,"line":34769},[46,59023,616],{"emptyLinePlaceholder":615},[46,59025,59026,59028,59030],{"class":48,"line":34775},[46,59027,54384],{"class":56},[46,59029,53780],{"class":1361},[46,59031,53274],{"class":56},[46,59033,59034,59036,59038],{"class":48,"line":34789},[46,59035,53752],{"class":56},[46,59037,53767],{"class":1361},[46,59039,53274],{"class":56},[46,59041,59042],{"class":48,"line":34795},[46,59043,616],{"emptyLinePlaceholder":615},[46,59045,59046,59048,59050],{"class":48,"line":34810},[46,59047,53752],{"class":56},[46,59049,52603],{"class":1361},[46,59051,53274],{"class":56},[479,59053,59055],{"id":59054},"_317-重要知识点","3.1.7 重要知识点",[19,59057,59058,59059],{},"浏览器在渲染文本时， ",[2339,59060,59061],{},"没有空格或换行符就没有“断行点”",[19,59063,59064],{},[3514,59065],{"alt":41,"src":59066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[19,59068,59069],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[19,59071,59072],{},[3514,59073],{"alt":41,"src":59074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[19,59076,59077],{},[3514,59078],{"alt":41,"src":59079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,59081,59083],{"id":59082},"_32-dom事件基础","3.2 DOM事件基础",[479,59085,59087],{"id":59086},"_321-事件监听","3.2.1 事件监听",[19,59089,59090],{},[3514,59091],{"alt":41,"src":59092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[19,59094,59095],{},"事件监听有响应的发生",[19,59097,59098],{},[3514,59099],{"alt":41,"src":59100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[19,59102,59103],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[19,59105,59106],{},"对于有名函数,要执行的函数名后边不要加()",[479,59108,59110],{"id":59109},"_322-随机点名案例","3.2.2 随机点名案例",[36,59112,59114],{"className":52601,"code":59113,"language":52603,"meta":41,"style":41},"\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",[43,59115,59116,59126,59140,59144,59152,59166,59186,59198,59206,59212,59222,59232,59236,59240,59247,59258,59262,59266,59272,59284,59298,59308,59320,59333,59337,59341,59348,59352,59365,59377,59389,59393,59397,59401,59408,59418,59422,59426,59435,59447,59459,59474,59478,59486,59494,59498,59506,59519,59533,59546,59566,59574,59589,59609,59629,59637,59641,59649,59654,59690,59710,59715,59734,59739,59750,59755,59766,59771,59790,59805,59810,59836,59846,59855,59860,59876,59881,59886,59891,59906,59910,59914,59919,59938,59955,59963,59968,59983,59987,59991,59999,60007,60011],{"__ignoreMap":41},[46,59117,59118,59120,59122,59124],{"class":48,"line":49},[46,59119,53265],{"class":56},[46,59121,53268],{"class":1361},[46,59123,53271],{"class":169},[46,59125,53274],{"class":56},[46,59127,59128,59130,59132,59134,59136,59138],{"class":48,"line":60},[46,59129,821],{"class":56},[46,59131,52603],{"class":1361},[46,59133,53283],{"class":169},[46,59135,79],{"class":56},[46,59137,53288],{"class":173},[46,59139,53274],{"class":56},[46,59141,59142],{"class":48,"line":200},[46,59143,616],{"emptyLinePlaceholder":615},[46,59145,59146,59148,59150],{"class":48,"line":211},[46,59147,821],{"class":56},[46,59149,53301],{"class":1361},[46,59151,53274],{"class":56},[46,59153,59154,59156,59158,59160,59162,59164],{"class":48,"line":222},[46,59155,54111],{"class":56},[46,59157,53311],{"class":1361},[46,59159,53314],{"class":169},[46,59161,79],{"class":56},[46,59163,53319],{"class":173},[46,59165,53274],{"class":56},[46,59167,59168,59170,59172,59174,59176,59178,59180,59182,59184],{"class":48,"line":636},[46,59169,54111],{"class":56},[46,59171,53311],{"class":1361},[46,59173,1364],{"class":169},[46,59175,79],{"class":56},[46,59177,53358],{"class":173},[46,59179,53338],{"class":169},[46,59181,79],{"class":56},[46,59183,53365],{"class":173},[46,59185,53274],{"class":56},[46,59187,59188,59190,59192,59194,59196],{"class":48,"line":641},[46,59189,54111],{"class":56},[46,59191,53374],{"class":1361},[46,59193,53377],{"class":56},[46,59195,53374],{"class":1361},[46,59197,53274],{"class":56},[46,59199,59200,59202,59204],{"class":48,"line":653},[46,59201,54111],{"class":56},[46,59203,2098],{"class":1361},[46,59205,53274],{"class":56},[46,59207,59208,59210],{"class":48,"line":659},[46,59209,8416],{"class":1361},[46,59211,17573],{"class":56},[46,59213,59214,59216,59218,59220],{"class":48,"line":665},[46,59215,56671],{"class":180},[46,59217,53404],{"class":56},[46,59219,2379],{"class":180},[46,59221,3345],{"class":56},[46,59223,59224,59226,59228,59230],{"class":48,"line":670},[46,59225,56660],{"class":180},[46,59227,53404],{"class":56},[46,59229,2379],{"class":180},[46,59231,3345],{"class":56},[46,59233,59234],{"class":48,"line":676},[46,59235,4217],{"class":56},[46,59237,59238],{"class":48,"line":682},[46,59239,616],{"emptyLinePlaceholder":615},[46,59241,59242,59245],{"class":48,"line":688},[46,59243,59244],{"class":1361},"    h2",[46,59246,17573],{"class":56},[46,59248,59249,59252,59254,59256],{"class":48,"line":693},[46,59250,59251],{"class":180},"      text-align",[46,59253,53404],{"class":56},[46,59255,53559],{"class":180},[46,59257,3345],{"class":56},[46,59259,59260],{"class":48,"line":699},[46,59261,4217],{"class":56},[46,59263,59264],{"class":48,"line":705},[46,59265,616],{"emptyLinePlaceholder":615},[46,59267,59268,59270],{"class":48,"line":711},[46,59269,56717],{"class":169},[46,59271,17573],{"class":56},[46,59273,59274,59276,59278,59280,59282],{"class":48,"line":717},[46,59275,56736],{"class":180},[46,59277,53404],{"class":56},[46,59279,3590],{"class":180},[46,59281,53459],{"class":52},[46,59283,3345],{"class":56},[46,59285,59286,59288,59290,59292,59294,59296],{"class":48,"line":723},[46,59287,56671],{"class":180},[46,59289,53404],{"class":56},[46,59291,2842],{"class":180},[46,59293,53459],{"class":52},[46,59295,53523],{"class":180},[46,59297,3345],{"class":56},[46,59299,59300,59302,59304,59306],{"class":48,"line":729},[46,59301,56974],{"class":180},[46,59303,53404],{"class":56},[46,59305,53444],{"class":180},[46,59307,3345],{"class":56},[46,59309,59310,59312,59314,59316,59318],{"class":48,"line":735},[46,59311,56887],{"class":180},[46,59313,53404],{"class":56},[46,59315,3011],{"class":180},[46,59317,53459],{"class":52},[46,59319,3345],{"class":56},[46,59321,59322,59325,59327,59329,59331],{"class":48,"line":740},[46,59323,59324],{"class":180},"      line-height",[46,59326,53404],{"class":56},[46,59328,2588],{"class":180},[46,59330,53459],{"class":52},[46,59332,3345],{"class":56},[46,59334,59335],{"class":48,"line":745},[46,59336,4217],{"class":56},[46,59338,59339],{"class":48,"line":763},[46,59340,616],{"emptyLinePlaceholder":615},[46,59342,59343,59346],{"class":48,"line":778},[46,59344,59345],{"class":169},"    .qs",[46,59347,17573],{"class":56},[46,59349,59350],{"class":48,"line":789},[46,59351,616],{"emptyLinePlaceholder":615},[46,59353,59354,59356,59358,59361,59363],{"class":48,"line":794},[46,59355,56736],{"class":180},[46,59357,53404],{"class":56},[46,59359,59360],{"class":180},"450",[46,59362,53459],{"class":52},[46,59364,3345],{"class":56},[46,59366,59367,59369,59371,59373,59375],{"class":48,"line":806},[46,59368,56750],{"class":180},[46,59370,53404],{"class":56},[46,59372,2588],{"class":180},[46,59374,53459],{"class":52},[46,59376,3345],{"class":56},[46,59378,59379,59382,59384,59387],{"class":48,"line":829},[46,59380,59381],{"class":180},"      color",[46,59383,53404],{"class":56},[46,59385,59386],{"class":180},"red",[46,59388,3345],{"class":56},[46,59390,59391],{"class":48,"line":840},[46,59392,616],{"emptyLinePlaceholder":615},[46,59394,59395],{"class":48,"line":846},[46,59396,4217],{"class":56},[46,59398,59399],{"class":48,"line":852},[46,59400,616],{"emptyLinePlaceholder":615},[46,59402,59403,59406],{"class":48,"line":857},[46,59404,59405],{"class":169},"    .btns",[46,59407,17573],{"class":56},[46,59409,59410,59412,59414,59416],{"class":48,"line":875},[46,59411,59251],{"class":180},[46,59413,53404],{"class":56},[46,59415,53559],{"class":180},[46,59417,3345],{"class":56},[46,59419,59420],{"class":48,"line":892},[46,59421,4217],{"class":56},[46,59423,59424],{"class":48,"line":898},[46,59425,616],{"emptyLinePlaceholder":615},[46,59427,59428,59430,59433],{"class":48,"line":903},[46,59429,59405],{"class":169},[46,59431,59432],{"class":1361}," button",[46,59434,17573],{"class":56},[46,59436,59437,59439,59441,59443,59445],{"class":48,"line":908},[46,59438,56736],{"class":180},[46,59440,53404],{"class":56},[46,59442,3003],{"class":180},[46,59444,53459],{"class":52},[46,59446,3345],{"class":56},[46,59448,59449,59451,59453,59455,59457],{"class":48,"line":925},[46,59450,56750],{"class":180},[46,59452,53404],{"class":56},[46,59454,2461],{"class":180},[46,59456,53459],{"class":52},[46,59458,3345],{"class":56},[46,59460,59461,59463,59465,59467,59470,59472],{"class":48,"line":1238},[46,59462,56671],{"class":180},[46,59464,53404],{"class":56},[46,59466,2379],{"class":180},[46,59468,59469],{"class":180}," 50",[46,59471,53459],{"class":52},[46,59473,3345],{"class":56},[46,59475,59476],{"class":48,"line":1251},[46,59477,4217],{"class":56},[46,59479,59480,59482,59484],{"class":48,"line":1256},[46,59481,54384],{"class":56},[46,59483,2098],{"class":1361},[46,59485,53274],{"class":56},[46,59487,59488,59490,59492],{"class":48,"line":1261},[46,59489,53752],{"class":56},[46,59491,53301],{"class":1361},[46,59493,53274],{"class":56},[46,59495,59496],{"class":48,"line":1274},[46,59497,616],{"emptyLinePlaceholder":615},[46,59499,59500,59502,59504],{"class":48,"line":10061},[46,59501,821],{"class":56},[46,59503,53767],{"class":1361},[46,59505,53274],{"class":56},[46,59507,59508,59510,59512,59515,59517],{"class":48,"line":11720},[46,59509,54111],{"class":56},[46,59511,14],{"class":1361},[46,59513,59514],{"class":56},">随机点名\u003C\u002F",[46,59516,14],{"class":1361},[46,59518,53274],{"class":56},[46,59520,59521,59523,59525,59527,59529,59531],{"class":48,"line":11745},[46,59522,54111],{"class":56},[46,59524,53578],{"class":1361},[46,59526,55451],{"class":169},[46,59528,79],{"class":56},[46,59530,55456],{"class":173},[46,59532,53274],{"class":56},[46,59534,59535,59537,59539,59542,59544],{"class":48,"line":11768},[46,59536,53308],{"class":56},[46,59538,46],{"class":1361},[46,59540,59541],{"class":56},">名字是：\u003C\u002F",[46,59543,46],{"class":1361},[46,59545,53274],{"class":56},[46,59547,59548,59550,59552,59554,59556,59559,59562,59564],{"class":48,"line":11792},[46,59549,53308],{"class":56},[46,59551,53578],{"class":1361},[46,59553,55451],{"class":169},[46,59555,79],{"class":56},[46,59557,59558],{"class":173},"\"qs\"",[46,59560,59561],{"class":56},">这里显示姓名\u003C\u002F",[46,59563,53578],{"class":1361},[46,59565,53274],{"class":56},[46,59567,59568,59570,59572],{"class":48,"line":11797},[46,59569,54384],{"class":56},[46,59571,53578],{"class":1361},[46,59573,53274],{"class":56},[46,59575,59576,59578,59580,59582,59584,59587],{"class":48,"line":11802},[46,59577,54111],{"class":56},[46,59579,53578],{"class":1361},[46,59581,55451],{"class":169},[46,59583,79],{"class":56},[46,59585,59586],{"class":173},"\"btns\"",[46,59588,53274],{"class":56},[46,59590,59591,59593,59595,59597,59599,59602,59605,59607],{"class":48,"line":11807},[46,59592,53308],{"class":56},[46,59594,55852],{"class":1361},[46,59596,55451],{"class":169},[46,59598,79],{"class":56},[46,59600,59601],{"class":173},"\"start\"",[46,59603,59604],{"class":56},">开始\u003C\u002F",[46,59606,55852],{"class":1361},[46,59608,53274],{"class":56},[46,59610,59611,59613,59615,59617,59619,59622,59625,59627],{"class":48,"line":11816},[46,59612,53308],{"class":56},[46,59614,55852],{"class":1361},[46,59616,55451],{"class":169},[46,59618,79],{"class":56},[46,59620,59621],{"class":173},"\"end\"",[46,59623,59624],{"class":56},">结束\u003C\u002F",[46,59626,55852],{"class":1361},[46,59628,53274],{"class":56},[46,59630,59631,59633,59635],{"class":48,"line":11821},[46,59632,54384],{"class":56},[46,59634,53578],{"class":1361},[46,59636,53274],{"class":56},[46,59638,59639],{"class":48,"line":11827},[46,59640,616],{"emptyLinePlaceholder":615},[46,59642,59643,59645,59647],{"class":48,"line":11848},[46,59644,54111],{"class":56},[46,59646,53780],{"class":1361},[46,59648,53274],{"class":56},[46,59650,59651],{"class":48,"line":11854},[46,59652,59653],{"class":2253},"    \u002F\u002F 数据数组\n",[46,59655,59656,59658,59661,59663,59665,59668,59670,59673,59675,59678,59680,59683,59685,59688],{"class":48,"line":11868},[46,59657,13225],{"class":52},[46,59659,59660],{"class":180}," arr",[46,59662,647],{"class":52},[46,59664,54193],{"class":56},[46,59666,59667],{"class":173},"'马超'",[46,59669,448],{"class":56},[46,59671,59672],{"class":173},"'黄忠'",[46,59674,448],{"class":56},[46,59676,59677],{"class":173},"'赵云'",[46,59679,448],{"class":56},[46,59681,59682],{"class":173},"'关羽'",[46,59684,448],{"class":56},[46,59686,59687],{"class":173},"'张飞'",[46,59689,35220],{"class":56},[46,59691,59692,59694,59697,59699,59701,59703,59705,59708],{"class":48,"line":11874},[46,59693,13225],{"class":52},[46,59695,59696],{"class":180}," qs",[46,59698,647],{"class":52},[46,59700,56361],{"class":56},[46,59702,56364],{"class":169},[46,59704,1152],{"class":56},[46,59706,59707],{"class":173},"'.qs'",[46,59709,459],{"class":56},[46,59711,59712],{"class":48,"line":11901},[46,59713,59714],{"class":2253},"    \u002F\u002F 1.业务1.开始按钮模块\n",[46,59716,59717,59719,59721,59723,59725,59727,59729,59732],{"class":48,"line":11910},[46,59718,13225],{"class":52},[46,59720,6201],{"class":180},[46,59722,647],{"class":52},[46,59724,56361],{"class":56},[46,59726,56364],{"class":169},[46,59728,1152],{"class":56},[46,59730,59731],{"class":173},"'.start'",[46,59733,459],{"class":56},[46,59735,59736],{"class":48,"line":11916},[46,59737,59738],{"class":2253},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[46,59740,59741,59743,59746,59748],{"class":48,"line":11924},[46,59742,54186],{"class":52},[46,59744,59745],{"class":56}," timerId ",[46,59747,79],{"class":52},[46,59749,49301],{"class":180},[46,59751,59752],{"class":48,"line":11929},[46,59753,59754],{"class":2253},"    \u002F\u002F 随机号要全局变量\n",[46,59756,59757,59759,59762,59764],{"class":48,"line":18605},[46,59758,54186],{"class":52},[46,59760,59761],{"class":56}," random ",[46,59763,79],{"class":52},[46,59765,49301],{"class":180},[46,59767,59768],{"class":48,"line":18611},[46,59769,59770],{"class":2253},"    \u002F\u002F 1.1 添加点击事件\n",[46,59772,59773,59776,59779,59781,59784,59786,59788],{"class":48,"line":18634},[46,59774,59775],{"class":56},"    start.",[46,59777,59778],{"class":169},"addEventListener",[46,59780,1152],{"class":56},[46,59782,59783],{"class":173},"'click'",[46,59785,448],{"class":56},[46,59787,56414],{"class":52},[46,59789,56417],{"class":56},[46,59791,59792,59795,59797,59799,59801,59803],{"class":48,"line":18640},[46,59793,59794],{"class":56},"      timerId ",[46,59796,79],{"class":52},[46,59798,56409],{"class":169},[46,59800,1152],{"class":56},[46,59802,56414],{"class":52},[46,59804,56417],{"class":56},[46,59806,59807],{"class":48,"line":18663},[46,59808,59809],{"class":2253},"        \u002F\u002F 随机数\n",[46,59811,59812,59815,59817,59820,59823,59826,59828,59830,59832,59834],{"class":48,"line":18677},[46,59813,59814],{"class":56},"        random ",[46,59816,79],{"class":52},[46,59818,59819],{"class":169}," parseInt",[46,59821,59822],{"class":56},"(Math.",[46,59824,59825],{"class":169},"random",[46,59827,15053],{"class":56},[46,59829,2642],{"class":52},[46,59831,53932],{"class":56},[46,59833,53935],{"class":180},[46,59835,459],{"class":56},[46,59837,59838,59841,59843],{"class":48,"line":18697},[46,59839,59840],{"class":56},"        qs.innerHTML ",[46,59842,79],{"class":52},[46,59844,59845],{"class":56}," arr[random]\n",[46,59847,59848,59851,59853],{"class":48,"line":18703},[46,59849,59850],{"class":56},"      }, ",[46,59852,2461],{"class":180},[46,59854,459],{"class":56},[46,59856,59857],{"class":48,"line":18714},[46,59858,59859],{"class":2253},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[46,59861,59862,59864,59867,59869,59872,59874],{"class":48,"line":18737},[46,59863,56445],{"class":52},[46,59865,59866],{"class":56}," (arr.",[46,59868,53935],{"class":180},[46,59870,59871],{"class":52}," ===",[46,59873,27110],{"class":180},[46,59875,14445],{"class":56},[46,59877,59878],{"class":48,"line":18759},[46,59879,59880],{"class":2253},"        \u002F\u002F start.disabled = true\n",[46,59882,59883],{"class":48,"line":18764},[46,59884,59885],{"class":2253},"        \u002F\u002F end.disabled = true\n",[46,59887,59888],{"class":48,"line":18770},[46,59889,59890],{"class":2253},"        \u002F\u002F 可以合起来写\n",[46,59892,59893,59896,59898,59901,59903],{"class":48,"line":18784},[46,59894,59895],{"class":56},"        start.disabled ",[46,59897,79],{"class":52},[46,59899,59900],{"class":56}," end.disabled ",[46,59902,79],{"class":52},[46,59904,59905],{"class":180}," true\n",[46,59907,59908],{"class":48,"line":18797},[46,59909,54365],{"class":56},[46,59911,59912],{"class":48,"line":18802},[46,59913,35434],{"class":56},[46,59915,59916],{"class":48,"line":18816},[46,59917,59918],{"class":2253},"    \u002F\u002F 1.2 关闭按钮模块\n",[46,59920,59921,59923,59925,59927,59929,59931,59933,59936],{"class":48,"line":18821},[46,59922,13225],{"class":52},[46,59924,6217],{"class":180},[46,59926,647],{"class":52},[46,59928,56361],{"class":56},[46,59930,56364],{"class":169},[46,59932,1152],{"class":56},[46,59934,59935],{"class":173},"'.end'",[46,59937,459],{"class":56},[46,59939,59940,59943,59945,59947,59949,59951,59953],{"class":48,"line":18827},[46,59941,59942],{"class":56},"    end.",[46,59944,59778],{"class":169},[46,59946,1152],{"class":56},[46,59948,59783],{"class":173},[46,59950,448],{"class":56},[46,59952,56414],{"class":52},[46,59954,56417],{"class":56},[46,59956,59957,59960],{"class":48,"line":18832},[46,59958,59959],{"class":169},"      clearInterval",[46,59961,59962],{"class":56},"(timerId)\n",[46,59964,59965],{"class":48,"line":18846},[46,59966,59967],{"class":2253},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[46,59969,59970,59973,59976,59979,59981],{"class":48,"line":18851},[46,59971,59972],{"class":56},"      arr.",[46,59974,59975],{"class":169},"splice",[46,59977,59978],{"class":56},"(random, ",[46,59980,2405],{"class":180},[46,59982,459],{"class":56},[46,59984,59985],{"class":48,"line":18856},[46,59986,35434],{"class":56},[46,59988,59989],{"class":48,"line":18870},[46,59990,616],{"emptyLinePlaceholder":615},[46,59992,59993,59995,59997],{"class":48,"line":18882},[46,59994,54384],{"class":56},[46,59996,53780],{"class":1361},[46,59998,53274],{"class":56},[46,60000,60001,60003,60005],{"class":48,"line":18887},[46,60002,53752],{"class":56},[46,60004,53767],{"class":1361},[46,60006,53274],{"class":56},[46,60008,60009],{"class":48,"line":18900},[46,60010,616],{"emptyLinePlaceholder":615},[46,60012,60013,60015,60017],{"class":48,"line":18905},[46,60014,53752],{"class":56},[46,60016,52603],{"class":1361},[46,60018,53274],{"class":56},[19,60020,60021],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[479,60023,60025],{"id":60024},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[36,60027,60029],{"className":52601,"code":60028,"language":52603,"meta":41,"style":41},"\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",[43,60030,60031,60041,60055,60059,60067,60081,60101,60113,60121,60125,60133,60145,60153,60172,60189,60205,60215,60219,60227,60235,60239],{"__ignoreMap":41},[46,60032,60033,60035,60037,60039],{"class":48,"line":49},[46,60034,53265],{"class":56},[46,60036,53268],{"class":1361},[46,60038,53271],{"class":169},[46,60040,53274],{"class":56},[46,60042,60043,60045,60047,60049,60051,60053],{"class":48,"line":60},[46,60044,821],{"class":56},[46,60046,52603],{"class":1361},[46,60048,53283],{"class":169},[46,60050,79],{"class":56},[46,60052,53288],{"class":173},[46,60054,53274],{"class":56},[46,60056,60057],{"class":48,"line":200},[46,60058,616],{"emptyLinePlaceholder":615},[46,60060,60061,60063,60065],{"class":48,"line":211},[46,60062,821],{"class":56},[46,60064,53301],{"class":1361},[46,60066,53274],{"class":56},[46,60068,60069,60071,60073,60075,60077,60079],{"class":48,"line":222},[46,60070,54111],{"class":56},[46,60072,53311],{"class":1361},[46,60074,53314],{"class":169},[46,60076,79],{"class":56},[46,60078,53319],{"class":173},[46,60080,53274],{"class":56},[46,60082,60083,60085,60087,60089,60091,60093,60095,60097,60099],{"class":48,"line":636},[46,60084,54111],{"class":56},[46,60086,53311],{"class":1361},[46,60088,1364],{"class":169},[46,60090,79],{"class":56},[46,60092,53358],{"class":173},[46,60094,53338],{"class":169},[46,60096,79],{"class":56},[46,60098,53365],{"class":173},[46,60100,53274],{"class":56},[46,60102,60103,60105,60107,60109,60111],{"class":48,"line":641},[46,60104,54111],{"class":56},[46,60106,53374],{"class":1361},[46,60108,53377],{"class":56},[46,60110,53374],{"class":1361},[46,60112,53274],{"class":56},[46,60114,60115,60117,60119],{"class":48,"line":653},[46,60116,53752],{"class":56},[46,60118,53301],{"class":1361},[46,60120,53274],{"class":56},[46,60122,60123],{"class":48,"line":659},[46,60124,616],{"emptyLinePlaceholder":615},[46,60126,60127,60129,60131],{"class":48,"line":665},[46,60128,821],{"class":56},[46,60130,53767],{"class":1361},[46,60132,53274],{"class":56},[46,60134,60135,60137,60139,60141,60143],{"class":48,"line":670},[46,60136,54111],{"class":56},[46,60138,55852],{"class":1361},[46,60140,55858],{"class":56},[46,60142,55852],{"class":1361},[46,60144,53274],{"class":56},[46,60146,60147,60149,60151],{"class":48,"line":676},[46,60148,54111],{"class":56},[46,60150,53780],{"class":1361},[46,60152,53274],{"class":56},[46,60154,60155,60157,60159,60161,60163,60165,60167,60170],{"class":48,"line":682},[46,60156,13225],{"class":52},[46,60158,56356],{"class":180},[46,60160,647],{"class":52},[46,60162,56361],{"class":56},[46,60164,56364],{"class":169},[46,60166,1152],{"class":56},[46,60168,60169],{"class":173},"'button'",[46,60171,459],{"class":56},[46,60173,60174,60177,60179,60181,60183,60185,60187],{"class":48,"line":688},[46,60175,60176],{"class":56},"    btn.",[46,60178,59778],{"class":169},[46,60180,1152],{"class":56},[46,60182,59783],{"class":173},[46,60184,448],{"class":56},[46,60186,56414],{"class":52},[46,60188,56417],{"class":56},[46,60190,60191,60194,60196,60198,60201,60203],{"class":48,"line":693},[46,60192,60193],{"class":52},"      const",[46,60195,4270],{"class":180},[46,60197,647],{"class":52},[46,60199,60200],{"class":56}," Math.",[46,60202,59825],{"class":169},[46,60204,4006],{"class":56},[46,60206,60207,60210,60213],{"class":48,"line":699},[46,60208,60209],{"class":56},"      console.",[46,60211,60212],{"class":169},"log",[46,60214,2210],{"class":56},[46,60216,60217],{"class":48,"line":705},[46,60218,35434],{"class":56},[46,60220,60221,60223,60225],{"class":48,"line":711},[46,60222,54384],{"class":56},[46,60224,53780],{"class":1361},[46,60226,53274],{"class":56},[46,60228,60229,60231,60233],{"class":48,"line":717},[46,60230,53752],{"class":56},[46,60232,53767],{"class":1361},[46,60234,53274],{"class":56},[46,60236,60237],{"class":48,"line":723},[46,60238,616],{"emptyLinePlaceholder":615},[46,60240,60241,60243,60245],{"class":48,"line":729},[46,60242,53752],{"class":56},[46,60244,52603],{"class":1361},[46,60246,53274],{"class":56},[19,60248,60249],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[19,60251,60252],{},"常量不可以重新赋值",[19,60254,60255],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[36,60257,60259],{"className":52601,"code":60258,"language":52603,"meta":41,"style":41},"\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",[43,60260,60261,60271,60285,60289,60297,60311,60331,60343,60351,60355,60363,60375,60383,60394,60412,60428,60442,60450,60454,60462,60470,60474],{"__ignoreMap":41},[46,60262,60263,60265,60267,60269],{"class":48,"line":49},[46,60264,53265],{"class":56},[46,60266,53268],{"class":1361},[46,60268,53271],{"class":169},[46,60270,53274],{"class":56},[46,60272,60273,60275,60277,60279,60281,60283],{"class":48,"line":60},[46,60274,821],{"class":56},[46,60276,52603],{"class":1361},[46,60278,53283],{"class":169},[46,60280,79],{"class":56},[46,60282,53288],{"class":173},[46,60284,53274],{"class":56},[46,60286,60287],{"class":48,"line":200},[46,60288,616],{"emptyLinePlaceholder":615},[46,60290,60291,60293,60295],{"class":48,"line":211},[46,60292,821],{"class":56},[46,60294,53301],{"class":1361},[46,60296,53274],{"class":56},[46,60298,60299,60301,60303,60305,60307,60309],{"class":48,"line":222},[46,60300,54111],{"class":56},[46,60302,53311],{"class":1361},[46,60304,53314],{"class":169},[46,60306,79],{"class":56},[46,60308,53319],{"class":173},[46,60310,53274],{"class":56},[46,60312,60313,60315,60317,60319,60321,60323,60325,60327,60329],{"class":48,"line":636},[46,60314,54111],{"class":56},[46,60316,53311],{"class":1361},[46,60318,1364],{"class":169},[46,60320,79],{"class":56},[46,60322,53358],{"class":173},[46,60324,53338],{"class":169},[46,60326,79],{"class":56},[46,60328,53365],{"class":173},[46,60330,53274],{"class":56},[46,60332,60333,60335,60337,60339,60341],{"class":48,"line":641},[46,60334,54111],{"class":56},[46,60336,53374],{"class":1361},[46,60338,53377],{"class":56},[46,60340,53374],{"class":1361},[46,60342,53274],{"class":56},[46,60344,60345,60347,60349],{"class":48,"line":653},[46,60346,53752],{"class":56},[46,60348,53301],{"class":1361},[46,60350,53274],{"class":56},[46,60352,60353],{"class":48,"line":659},[46,60354,616],{"emptyLinePlaceholder":615},[46,60356,60357,60359,60361],{"class":48,"line":665},[46,60358,821],{"class":56},[46,60360,53767],{"class":1361},[46,60362,53274],{"class":56},[46,60364,60365,60367,60369,60371,60373],{"class":48,"line":670},[46,60366,54111],{"class":56},[46,60368,55852],{"class":1361},[46,60370,55858],{"class":56},[46,60372,55852],{"class":1361},[46,60374,53274],{"class":56},[46,60376,60377,60379,60381],{"class":48,"line":676},[46,60378,54111],{"class":56},[46,60380,53780],{"class":1361},[46,60382,53274],{"class":56},[46,60384,60385,60387,60389,60391],{"class":48,"line":682},[46,60386,13225],{"class":52},[46,60388,4270],{"class":180},[46,60390,647],{"class":52},[46,60392,60393],{"class":180}," 10\n",[46,60395,60396,60398,60400,60402,60404,60406,60408,60410],{"class":48,"line":688},[46,60397,13225],{"class":52},[46,60399,56356],{"class":180},[46,60401,647],{"class":52},[46,60403,56361],{"class":56},[46,60405,56364],{"class":169},[46,60407,1152],{"class":56},[46,60409,60169],{"class":173},[46,60411,459],{"class":56},[46,60413,60414,60416,60418,60420,60422,60424,60426],{"class":48,"line":693},[46,60415,60176],{"class":56},[46,60417,59778],{"class":169},[46,60419,1152],{"class":56},[46,60421,59783],{"class":173},[46,60423,448],{"class":56},[46,60425,56414],{"class":52},[46,60427,56417],{"class":56},[46,60429,60430,60432,60434,60436,60438,60440],{"class":48,"line":699},[46,60431,60193],{"class":52},[46,60433,4270],{"class":180},[46,60435,647],{"class":52},[46,60437,60200],{"class":56},[46,60439,59825],{"class":169},[46,60441,4006],{"class":56},[46,60443,60444,60446,60448],{"class":48,"line":705},[46,60445,60209],{"class":56},[46,60447,60212],{"class":169},[46,60449,2210],{"class":56},[46,60451,60452],{"class":48,"line":711},[46,60453,35434],{"class":56},[46,60455,60456,60458,60460],{"class":48,"line":717},[46,60457,54384],{"class":56},[46,60459,53780],{"class":1361},[46,60461,53274],{"class":56},[46,60463,60464,60466,60468],{"class":48,"line":723},[46,60465,53752],{"class":56},[46,60467,53767],{"class":1361},[46,60469,53274],{"class":56},[46,60471,60472],{"class":48,"line":729},[46,60473,616],{"emptyLinePlaceholder":615},[46,60475,60476,60478,60480],{"class":48,"line":735},[46,60477,53752],{"class":56},[46,60479,52603],{"class":1361},[46,60481,53274],{"class":56},[19,60483,60484],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[36,60486,60488],{"className":52601,"code":60487,"language":52603,"meta":41,"style":41},"\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",[43,60489,60490,60500,60514,60518,60526,60540,60560,60572,60580,60584,60592,60604,60612,60622,60640,60656,60669,60677,60681,60689,60697,60701],{"__ignoreMap":41},[46,60491,60492,60494,60496,60498],{"class":48,"line":49},[46,60493,53265],{"class":56},[46,60495,53268],{"class":1361},[46,60497,53271],{"class":169},[46,60499,53274],{"class":56},[46,60501,60502,60504,60506,60508,60510,60512],{"class":48,"line":60},[46,60503,821],{"class":56},[46,60505,52603],{"class":1361},[46,60507,53283],{"class":169},[46,60509,79],{"class":56},[46,60511,53288],{"class":173},[46,60513,53274],{"class":56},[46,60515,60516],{"class":48,"line":200},[46,60517,616],{"emptyLinePlaceholder":615},[46,60519,60520,60522,60524],{"class":48,"line":211},[46,60521,821],{"class":56},[46,60523,53301],{"class":1361},[46,60525,53274],{"class":56},[46,60527,60528,60530,60532,60534,60536,60538],{"class":48,"line":222},[46,60529,54111],{"class":56},[46,60531,53311],{"class":1361},[46,60533,53314],{"class":169},[46,60535,79],{"class":56},[46,60537,53319],{"class":173},[46,60539,53274],{"class":56},[46,60541,60542,60544,60546,60548,60550,60552,60554,60556,60558],{"class":48,"line":636},[46,60543,54111],{"class":56},[46,60545,53311],{"class":1361},[46,60547,1364],{"class":169},[46,60549,79],{"class":56},[46,60551,53358],{"class":173},[46,60553,53338],{"class":169},[46,60555,79],{"class":56},[46,60557,53365],{"class":173},[46,60559,53274],{"class":56},[46,60561,60562,60564,60566,60568,60570],{"class":48,"line":641},[46,60563,54111],{"class":56},[46,60565,53374],{"class":1361},[46,60567,53377],{"class":56},[46,60569,53374],{"class":1361},[46,60571,53274],{"class":56},[46,60573,60574,60576,60578],{"class":48,"line":653},[46,60575,53752],{"class":56},[46,60577,53301],{"class":1361},[46,60579,53274],{"class":56},[46,60581,60582],{"class":48,"line":659},[46,60583,616],{"emptyLinePlaceholder":615},[46,60585,60586,60588,60590],{"class":48,"line":665},[46,60587,821],{"class":56},[46,60589,53767],{"class":1361},[46,60591,53274],{"class":56},[46,60593,60594,60596,60598,60600,60602],{"class":48,"line":670},[46,60595,54111],{"class":56},[46,60597,55852],{"class":1361},[46,60599,55858],{"class":56},[46,60601,55852],{"class":1361},[46,60603,53274],{"class":56},[46,60605,60606,60608,60610],{"class":48,"line":676},[46,60607,54111],{"class":56},[46,60609,53780],{"class":1361},[46,60611,53274],{"class":56},[46,60613,60614,60616,60618,60620],{"class":48,"line":682},[46,60615,13225],{"class":52},[46,60617,4270],{"class":180},[46,60619,647],{"class":52},[46,60621,60393],{"class":180},[46,60623,60624,60626,60628,60630,60632,60634,60636,60638],{"class":48,"line":688},[46,60625,13225],{"class":52},[46,60627,56356],{"class":180},[46,60629,647],{"class":52},[46,60631,56361],{"class":56},[46,60633,56364],{"class":169},[46,60635,1152],{"class":56},[46,60637,60169],{"class":173},[46,60639,459],{"class":56},[46,60641,60642,60644,60646,60648,60650,60652,60654],{"class":48,"line":693},[46,60643,60176],{"class":56},[46,60645,59778],{"class":169},[46,60647,1152],{"class":56},[46,60649,59783],{"class":173},[46,60651,448],{"class":56},[46,60653,56414],{"class":52},[46,60655,56417],{"class":56},[46,60657,60658,60661,60663,60665,60667],{"class":48,"line":699},[46,60659,60660],{"class":56},"      num ",[46,60662,79],{"class":52},[46,60664,60200],{"class":56},[46,60666,59825],{"class":169},[46,60668,4006],{"class":56},[46,60670,60671,60673,60675],{"class":48,"line":705},[46,60672,60209],{"class":56},[46,60674,60212],{"class":169},[46,60676,2210],{"class":56},[46,60678,60679],{"class":48,"line":711},[46,60680,35434],{"class":56},[46,60682,60683,60685,60687],{"class":48,"line":717},[46,60684,54384],{"class":56},[46,60686,53780],{"class":1361},[46,60688,53274],{"class":56},[46,60690,60691,60693,60695],{"class":48,"line":723},[46,60692,53752],{"class":56},[46,60694,53767],{"class":1361},[46,60696,53274],{"class":56},[46,60698,60699],{"class":48,"line":729},[46,60700,616],{"emptyLinePlaceholder":615},[46,60702,60703,60705,60707],{"class":48,"line":735},[46,60704,53752],{"class":56},[46,60706,52603],{"class":1361},[46,60708,53274],{"class":56},[19,60710,60711],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[479,60713,60715],{"id":60714},"_324-事件监听版本","3.2.4 事件监听版本",[19,60717,60718],{},[3514,60719],{"alt":41,"src":60720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[19,60722,60723],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[19,60725,60726],{},"这种方式会覆盖前边的事件监听:",[36,60728,60730],{"className":52601,"code":60729,"language":52603,"meta":41,"style":41},"\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",[43,60731,60732,60742,60756,60760,60768,60782,60802,60814,60822,60826,60834,60846,60854,60872,60886,60897,60901,60913,60923,60927,60935,60943,60947],{"__ignoreMap":41},[46,60733,60734,60736,60738,60740],{"class":48,"line":49},[46,60735,53265],{"class":56},[46,60737,53268],{"class":1361},[46,60739,53271],{"class":169},[46,60741,53274],{"class":56},[46,60743,60744,60746,60748,60750,60752,60754],{"class":48,"line":60},[46,60745,821],{"class":56},[46,60747,52603],{"class":1361},[46,60749,53283],{"class":169},[46,60751,79],{"class":56},[46,60753,53288],{"class":173},[46,60755,53274],{"class":56},[46,60757,60758],{"class":48,"line":200},[46,60759,616],{"emptyLinePlaceholder":615},[46,60761,60762,60764,60766],{"class":48,"line":211},[46,60763,821],{"class":56},[46,60765,53301],{"class":1361},[46,60767,53274],{"class":56},[46,60769,60770,60772,60774,60776,60778,60780],{"class":48,"line":222},[46,60771,54111],{"class":56},[46,60773,53311],{"class":1361},[46,60775,53314],{"class":169},[46,60777,79],{"class":56},[46,60779,53319],{"class":173},[46,60781,53274],{"class":56},[46,60783,60784,60786,60788,60790,60792,60794,60796,60798,60800],{"class":48,"line":636},[46,60785,54111],{"class":56},[46,60787,53311],{"class":1361},[46,60789,1364],{"class":169},[46,60791,79],{"class":56},[46,60793,53358],{"class":173},[46,60795,53338],{"class":169},[46,60797,79],{"class":56},[46,60799,53365],{"class":173},[46,60801,53274],{"class":56},[46,60803,60804,60806,60808,60810,60812],{"class":48,"line":641},[46,60805,54111],{"class":56},[46,60807,53374],{"class":1361},[46,60809,53377],{"class":56},[46,60811,53374],{"class":1361},[46,60813,53274],{"class":56},[46,60815,60816,60818,60820],{"class":48,"line":653},[46,60817,53752],{"class":56},[46,60819,53301],{"class":1361},[46,60821,53274],{"class":56},[46,60823,60824],{"class":48,"line":659},[46,60825,616],{"emptyLinePlaceholder":615},[46,60827,60828,60830,60832],{"class":48,"line":665},[46,60829,821],{"class":56},[46,60831,53767],{"class":1361},[46,60833,53274],{"class":56},[46,60835,60836,60838,60840,60842,60844],{"class":48,"line":670},[46,60837,54111],{"class":56},[46,60839,55852],{"class":1361},[46,60841,55858],{"class":56},[46,60843,55852],{"class":1361},[46,60845,53274],{"class":56},[46,60847,60848,60850,60852],{"class":48,"line":676},[46,60849,54111],{"class":56},[46,60851,53780],{"class":1361},[46,60853,53274],{"class":56},[46,60855,60856,60858,60860,60862,60864,60866,60868,60870],{"class":48,"line":682},[46,60857,13225],{"class":52},[46,60859,56356],{"class":180},[46,60861,647],{"class":52},[46,60863,56361],{"class":56},[46,60865,56364],{"class":169},[46,60867,1152],{"class":56},[46,60869,60169],{"class":173},[46,60871,459],{"class":56},[46,60873,60874,60876,60879,60881,60884],{"class":48,"line":688},[46,60875,60176],{"class":56},[46,60877,60878],{"class":169},"onclick",[46,60880,647],{"class":52},[46,60882,60883],{"class":52}," function",[46,60885,56417],{"class":56},[46,60887,60888,60891,60893,60895],{"class":48,"line":693},[46,60889,60890],{"class":169},"      alert",[46,60892,1152],{"class":56},[46,60894,2659],{"class":180},[46,60896,459],{"class":56},[46,60898,60899],{"class":48,"line":699},[46,60900,4217],{"class":56},[46,60902,60903,60905,60907,60909,60911],{"class":48,"line":705},[46,60904,60176],{"class":56},[46,60906,60878],{"class":169},[46,60908,647],{"class":52},[46,60910,60883],{"class":52},[46,60912,56417],{"class":56},[46,60914,60915,60917,60919,60921],{"class":48,"line":711},[46,60916,60890],{"class":169},[46,60918,1152],{"class":56},[46,60920,2936],{"class":180},[46,60922,459],{"class":56},[46,60924,60925],{"class":48,"line":717},[46,60926,4217],{"class":56},[46,60928,60929,60931,60933],{"class":48,"line":723},[46,60930,54384],{"class":56},[46,60932,53780],{"class":1361},[46,60934,53274],{"class":56},[46,60936,60937,60939,60941],{"class":48,"line":729},[46,60938,53752],{"class":56},[46,60940,53767],{"class":1361},[46,60942,53274],{"class":56},[46,60944,60945],{"class":48,"line":735},[46,60946,616],{"emptyLinePlaceholder":615},[46,60948,60949,60951,60953],{"class":48,"line":740},[46,60950,53752],{"class":56},[46,60952,52603],{"class":1361},[46,60954,53274],{"class":56},[19,60956,60957],{},"只要点击就输出结果为22,前边11被覆盖了",[36,60959,60961],{"className":52601,"code":60960,"language":52603,"meta":41,"style":41},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[43,60962,60963,60968,60973,60977,60982,60987],{"__ignoreMap":41},[46,60964,60965],{"class":48,"line":49},[46,60966,60967],{"class":56},"  btn.addEventListener('click', function () {\n",[46,60969,60970],{"class":48,"line":60},[46,60971,60972],{"class":56},"      alert(11)\n",[46,60974,60975],{"class":48,"line":200},[46,60976,35434],{"class":56},[46,60978,60979],{"class":48,"line":211},[46,60980,60981],{"class":56},"    btn.addEventListener('click', function () {\n",[46,60983,60984],{"class":48,"line":222},[46,60985,60986],{"class":56},"      alert(22)\n",[46,60988,60989],{"class":48,"line":636},[46,60990,35434],{"class":56},[19,60992,60993],{},"点击第一次输出11,第二次点击为22",[479,60995,60997],{"id":60996},"_325-事件类型","3.2.5 事件类型",[19,60999,61000],{},[3514,61001],{"alt":41,"src":61002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[23999,61004,61006],{"id":61005},"_3251-鼠标事件","3.2.5.1 鼠标事件",[19,61008,61009],{},"补充知识:",[19,61011,61012],{},"轮播图自动播放模块,可以使用",[19,61014,61015],{},"let timerId = setInterval(function () {",[19,61017,61018],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[19,61020,61021],{},"用js方法模拟进行点击事件,click必须加()",[19,61023,61024],{},"next.click()",[19,61026,61027],{},"}, 1000)",[19,61029,61030],{},[3514,61031],{"alt":41,"src":61032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[36,61034,61036],{"className":1350,"code":61035,"language":1352,"meta":41,"style":41},"\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",[43,61037,61038,61042,61052,61066,61070,61078,61093,61113,61133,61146,61154,61159,61164,61168,61172,61177,61182,61187,61192,61196,61200,61205,61210,61215,61219,61223,61228,61232,61237,61242,61246,61250,61255,61260,61265,61270,61275,61279,61283,61288,61293,61298,61303,61308,61312,61316,61321,61326,61331,61336,61341,61346,61351,61356,61361,61366,61370,61374,61379,61384,61388,61392,61397,61402,61406,61411,61416,61420,61424,61429,61433,61438,61443,61447,61452,61456,61460,61465,61470,61475,61480,61485,61490,61495,61499,61503,61507,61512,61517,61522,61527,61531,61539,61547,61551,61559,61574,61588,61609,61617,61631,61644,61659,61678,61690,61702,61714,61726,61738,61750,61762,61770,61785,61809,61833,61841,61849,61857,61865,61870,61875,61880,61885,61890,61895,61900,61905,61910,61915,61919,61924,61929,61934,61939,61944,61949,61954,61959,61964,61968,61973,61978,61983,61988,61993,61998,62003,62008,62013,62018,62023,62028,62032,62036,62041,62046,62051,62055,62060,62065,62070,62075,62080,62084,62089,62093,62097,62101,62105,62109,62113,62118,62123,62128,62133,62138,62143,62148,62153,62158,62162,62166,62171,62176,62181,62186,62191,62195,62200,62205,62210,62215,62220,62225,62229,62233,62238,62242,62247,62251,62256,62261,62266,62271,62276,62281,62285,62293,62301,62305],{"__ignoreMap":41},[46,61039,61040],{"class":48,"line":49},[46,61041,616],{"emptyLinePlaceholder":615},[46,61043,61044,61046,61048,61050],{"class":48,"line":60},[46,61045,53265],{"class":56},[46,61047,53268],{"class":52},[46,61049,53271],{"class":180},[46,61051,53274],{"class":56},[46,61053,61054,61056,61058,61060,61062,61064],{"class":48,"line":200},[46,61055,821],{"class":56},[46,61057,52603],{"class":1361},[46,61059,53283],{"class":169},[46,61061,79],{"class":56},[46,61063,53288],{"class":173},[46,61065,53274],{"class":56},[46,61067,61068],{"class":48,"line":211},[46,61069,616],{"emptyLinePlaceholder":615},[46,61071,61072,61074,61076],{"class":48,"line":222},[46,61073,821],{"class":56},[46,61075,53301],{"class":1361},[46,61077,53274],{"class":56},[46,61079,61080,61082,61084,61086,61088,61090],{"class":48,"line":636},[46,61081,54111],{"class":56},[46,61083,53311],{"class":1361},[46,61085,53314],{"class":169},[46,61087,79],{"class":56},[46,61089,53319],{"class":173},[46,61091,61092],{"class":56}," \u002F>\n",[46,61094,61095,61097,61099,61101,61103,61105,61107,61109,61111],{"class":48,"line":641},[46,61096,54111],{"class":56},[46,61098,53311],{"class":1361},[46,61100,53330],{"class":169},[46,61102,79],{"class":56},[46,61104,53335],{"class":173},[46,61106,53338],{"class":169},[46,61108,79],{"class":56},[46,61110,53343],{"class":173},[46,61112,61092],{"class":56},[46,61114,61115,61117,61119,61121,61123,61125,61127,61129,61131],{"class":48,"line":653},[46,61116,54111],{"class":56},[46,61118,53311],{"class":1361},[46,61120,1364],{"class":169},[46,61122,79],{"class":56},[46,61124,53358],{"class":173},[46,61126,53338],{"class":169},[46,61128,79],{"class":56},[46,61130,53365],{"class":173},[46,61132,61092],{"class":56},[46,61134,61135,61137,61139,61142,61144],{"class":48,"line":659},[46,61136,54111],{"class":56},[46,61138,53374],{"class":1361},[46,61140,61141],{"class":56},">轮播图点击切换\u003C\u002F",[46,61143,53374],{"class":1361},[46,61145,53274],{"class":56},[46,61147,61148,61150,61152],{"class":48,"line":665},[46,61149,54111],{"class":56},[46,61151,2098],{"class":1361},[46,61153,53274],{"class":56},[46,61155,61156],{"class":48,"line":670},[46,61157,61158],{"class":56},"    * {\n",[46,61160,61161],{"class":48,"line":676},[46,61162,61163],{"class":56},"      box-sizing: border-box;\n",[46,61165,61166],{"class":48,"line":682},[46,61167,4217],{"class":56},[46,61169,61170],{"class":48,"line":688},[46,61171,616],{"emptyLinePlaceholder":615},[46,61173,61174],{"class":48,"line":693},[46,61175,61176],{"class":56},"    .slider {\n",[46,61178,61179],{"class":48,"line":699},[46,61180,61181],{"class":56},"      width: 560px;\n",[46,61183,61184],{"class":48,"line":705},[46,61185,61186],{"class":56},"      height: 400px;\n",[46,61188,61189],{"class":48,"line":711},[46,61190,61191],{"class":56},"      overflow: hidden;\n",[46,61193,61194],{"class":48,"line":717},[46,61195,4217],{"class":56},[46,61197,61198],{"class":48,"line":723},[46,61199,616],{"emptyLinePlaceholder":615},[46,61201,61202],{"class":48,"line":729},[46,61203,61204],{"class":56},"    .slider-wrapper {\n",[46,61206,61207],{"class":48,"line":735},[46,61208,61209],{"class":56},"      width: 100%;\n",[46,61211,61212],{"class":48,"line":740},[46,61213,61214],{"class":56},"      height: 320px;\n",[46,61216,61217],{"class":48,"line":745},[46,61218,4217],{"class":56},[46,61220,61221],{"class":48,"line":763},[46,61222,616],{"emptyLinePlaceholder":615},[46,61224,61225],{"class":48,"line":778},[46,61226,61227],{"class":56},"    .slider-wrapper img {\n",[46,61229,61230],{"class":48,"line":789},[46,61231,61209],{"class":56},[46,61233,61234],{"class":48,"line":794},[46,61235,61236],{"class":56},"      height: 100%;\n",[46,61238,61239],{"class":48,"line":806},[46,61240,61241],{"class":56},"      display: block;\n",[46,61243,61244],{"class":48,"line":829},[46,61245,4217],{"class":56},[46,61247,61248],{"class":48,"line":840},[46,61249,616],{"emptyLinePlaceholder":615},[46,61251,61252],{"class":48,"line":846},[46,61253,61254],{"class":56},"    .slider-footer {\n",[46,61256,61257],{"class":48,"line":852},[46,61258,61259],{"class":56},"      height: 80px;\n",[46,61261,61262],{"class":48,"line":857},[46,61263,61264],{"class":56},"      background-color: rgb(100, 67, 68);\n",[46,61266,61267],{"class":48,"line":875},[46,61268,61269],{"class":56},"      padding: 12px 12px 0 12px;\n",[46,61271,61272],{"class":48,"line":892},[46,61273,61274],{"class":56},"      position: relative;\n",[46,61276,61277],{"class":48,"line":898},[46,61278,4217],{"class":56},[46,61280,61281],{"class":48,"line":903},[46,61282,616],{"emptyLinePlaceholder":615},[46,61284,61285],{"class":48,"line":908},[46,61286,61287],{"class":56},"    .slider-footer .toggle {\n",[46,61289,61290],{"class":48,"line":925},[46,61291,61292],{"class":56},"      position: absolute;\n",[46,61294,61295],{"class":48,"line":1238},[46,61296,61297],{"class":56},"      right: 0;\n",[46,61299,61300],{"class":48,"line":1251},[46,61301,61302],{"class":56},"      top: 12px;\n",[46,61304,61305],{"class":48,"line":1256},[46,61306,61307],{"class":56},"      display: flex;\n",[46,61309,61310],{"class":48,"line":1261},[46,61311,4217],{"class":56},[46,61313,61314],{"class":48,"line":1274},[46,61315,616],{"emptyLinePlaceholder":615},[46,61317,61318],{"class":48,"line":10061},[46,61319,61320],{"class":56},"    .slider-footer .toggle button {\n",[46,61322,61323],{"class":48,"line":11720},[46,61324,61325],{"class":56},"      margin-right: 12px;\n",[46,61327,61328],{"class":48,"line":11745},[46,61329,61330],{"class":56},"      width: 28px;\n",[46,61332,61333],{"class":48,"line":11768},[46,61334,61335],{"class":56},"      height: 28px;\n",[46,61337,61338],{"class":48,"line":11792},[46,61339,61340],{"class":56},"      appearance: none;\n",[46,61342,61343],{"class":48,"line":11797},[46,61344,61345],{"class":56},"      border: none;\n",[46,61347,61348],{"class":48,"line":11802},[46,61349,61350],{"class":56},"      background: rgba(255, 255, 255, 0.1);\n",[46,61352,61353],{"class":48,"line":11807},[46,61354,61355],{"class":56},"      color: #fff;\n",[46,61357,61358],{"class":48,"line":11816},[46,61359,61360],{"class":56},"      border-radius: 4px;\n",[46,61362,61363],{"class":48,"line":11821},[46,61364,61365],{"class":56},"      cursor: pointer;\n",[46,61367,61368],{"class":48,"line":11827},[46,61369,4217],{"class":56},[46,61371,61372],{"class":48,"line":11848},[46,61373,616],{"emptyLinePlaceholder":615},[46,61375,61376],{"class":48,"line":11854},[46,61377,61378],{"class":56},"    .slider-footer .toggle button:hover {\n",[46,61380,61381],{"class":48,"line":11868},[46,61382,61383],{"class":56},"      background: rgba(255, 255, 255, 0.2);\n",[46,61385,61386],{"class":48,"line":11874},[46,61387,4217],{"class":56},[46,61389,61390],{"class":48,"line":11901},[46,61391,616],{"emptyLinePlaceholder":615},[46,61393,61394],{"class":48,"line":11910},[46,61395,61396],{"class":56},"    .slider-footer p {\n",[46,61398,61399],{"class":48,"line":11916},[46,61400,61401],{"class":56},"      margin: 0;\n",[46,61403,61404],{"class":48,"line":11924},[46,61405,61355],{"class":56},[46,61407,61408],{"class":48,"line":11929},[46,61409,61410],{"class":56},"      font-size: 18px;\n",[46,61412,61413],{"class":48,"line":18605},[46,61414,61415],{"class":56},"      margin-bottom: 10px;\n",[46,61417,61418],{"class":48,"line":18611},[46,61419,4217],{"class":56},[46,61421,61422],{"class":48,"line":18634},[46,61423,616],{"emptyLinePlaceholder":615},[46,61425,61426],{"class":48,"line":18640},[46,61427,61428],{"class":56},"    .slider-indicator {\n",[46,61430,61431],{"class":48,"line":18663},[46,61432,61401],{"class":56},[46,61434,61435],{"class":48,"line":18677},[46,61436,61437],{"class":56},"      padding: 0;\n",[46,61439,61440],{"class":48,"line":18697},[46,61441,61442],{"class":56},"      list-style: none;\n",[46,61444,61445],{"class":48,"line":18703},[46,61446,61307],{"class":56},[46,61448,61449],{"class":48,"line":18714},[46,61450,61451],{"class":56},"      align-items: center;\n",[46,61453,61454],{"class":48,"line":18737},[46,61455,4217],{"class":56},[46,61457,61458],{"class":48,"line":18759},[46,61459,616],{"emptyLinePlaceholder":615},[46,61461,61462],{"class":48,"line":18764},[46,61463,61464],{"class":56},"    .slider-indicator li {\n",[46,61466,61467],{"class":48,"line":18770},[46,61468,61469],{"class":56},"      width: 8px;\n",[46,61471,61472],{"class":48,"line":18784},[46,61473,61474],{"class":56},"      height: 8px;\n",[46,61476,61477],{"class":48,"line":18797},[46,61478,61479],{"class":56},"      margin: 4px;\n",[46,61481,61482],{"class":48,"line":18802},[46,61483,61484],{"class":56},"      border-radius: 50%;\n",[46,61486,61487],{"class":48,"line":18816},[46,61488,61489],{"class":56},"      background: #fff;\n",[46,61491,61492],{"class":48,"line":18821},[46,61493,61494],{"class":56},"      opacity: 0.4;\n",[46,61496,61497],{"class":48,"line":18827},[46,61498,61365],{"class":56},[46,61500,61501],{"class":48,"line":18832},[46,61502,4217],{"class":56},[46,61504,61505],{"class":48,"line":18846},[46,61506,616],{"emptyLinePlaceholder":615},[46,61508,61509],{"class":48,"line":18851},[46,61510,61511],{"class":56},"    .slider-indicator li.active {\n",[46,61513,61514],{"class":48,"line":18856},[46,61515,61516],{"class":56},"      width: 12px;\n",[46,61518,61519],{"class":48,"line":18870},[46,61520,61521],{"class":56},"      height: 12px;\n",[46,61523,61524],{"class":48,"line":18882},[46,61525,61526],{"class":56},"      opacity: 1;\n",[46,61528,61529],{"class":48,"line":18887},[46,61530,4217],{"class":56},[46,61532,61533,61535,61537],{"class":48,"line":18900},[46,61534,54384],{"class":56},[46,61536,2098],{"class":1361},[46,61538,53274],{"class":56},[46,61540,61541,61543,61545],{"class":48,"line":18905},[46,61542,53752],{"class":56},[46,61544,53301],{"class":1361},[46,61546,53274],{"class":56},[46,61548,61549],{"class":48,"line":18910},[46,61550,616],{"emptyLinePlaceholder":615},[46,61552,61553,61555,61557],{"class":48,"line":18915},[46,61554,821],{"class":56},[46,61556,53767],{"class":1361},[46,61558,53274],{"class":56},[46,61560,61561,61563,61565,61567,61569,61572],{"class":48,"line":18928},[46,61562,54111],{"class":56},[46,61564,53578],{"class":1361},[46,61566,55451],{"class":169},[46,61568,79],{"class":56},[46,61570,61571],{"class":173},"\"slider\"",[46,61573,53274],{"class":56},[46,61575,61576,61578,61580,61582,61584,61586],{"class":48,"line":18933},[46,61577,53308],{"class":56},[46,61579,53578],{"class":1361},[46,61581,55451],{"class":169},[46,61583,79],{"class":56},[46,61585,57192],{"class":173},[46,61587,53274],{"class":56},[46,61589,61590,61592,61594,61596,61598,61601,61603,61605,61607],{"class":48,"line":34607},[46,61591,57199],{"class":56},[46,61593,3514],{"class":1361},[46,61595,57204],{"class":169},[46,61597,79],{"class":56},[46,61599,61600],{"class":173},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[46,61602,57212],{"class":169},[46,61604,79],{"class":56},[46,61606,9665],{"class":173},[46,61608,61092],{"class":56},[46,61610,61611,61613,61615],{"class":48,"line":34613},[46,61612,53743],{"class":56},[46,61614,53578],{"class":1361},[46,61616,53274],{"class":56},[46,61618,61619,61621,61623,61625,61627,61629],{"class":48,"line":34619},[46,61620,53308],{"class":56},[46,61622,53578],{"class":1361},[46,61624,55451],{"class":169},[46,61626,79],{"class":56},[46,61628,57239],{"class":173},[46,61630,53274],{"class":56},[46,61632,61633,61635,61637,61640,61642],{"class":48,"line":34625},[46,61634,57199],{"class":56},[46,61636,19],{"class":1361},[46,61638,61639],{"class":56},">对人类来说会不会太超前了？\u003C\u002F",[46,61641,19],{"class":1361},[46,61643,53274],{"class":56},[46,61645,61646,61648,61650,61652,61654,61657],{"class":48,"line":34631},[46,61647,57199],{"class":56},[46,61649,3191],{"class":1361},[46,61651,55451],{"class":169},[46,61653,79],{"class":56},[46,61655,61656],{"class":173},"\"slider-indicator\"",[46,61658,53274],{"class":56},[46,61660,61661,61663,61665,61667,61669,61672,61674,61676],{"class":48,"line":34642},[46,61662,57267],{"class":56},[46,61664,26],{"class":1361},[46,61666,55451],{"class":169},[46,61668,79],{"class":56},[46,61670,61671],{"class":173},"\"active\"",[46,61673,57279],{"class":56},[46,61675,26],{"class":1361},[46,61677,53274],{"class":56},[46,61679,61680,61682,61684,61686,61688],{"class":48,"line":34648},[46,61681,57267],{"class":56},[46,61683,26],{"class":1361},[46,61685,57279],{"class":56},[46,61687,26],{"class":1361},[46,61689,53274],{"class":56},[46,61691,61692,61694,61696,61698,61700],{"class":48,"line":34668},[46,61693,57267],{"class":56},[46,61695,26],{"class":1361},[46,61697,57279],{"class":56},[46,61699,26],{"class":1361},[46,61701,53274],{"class":56},[46,61703,61704,61706,61708,61710,61712],{"class":48,"line":34674},[46,61705,57267],{"class":56},[46,61707,26],{"class":1361},[46,61709,57279],{"class":56},[46,61711,26],{"class":1361},[46,61713,53274],{"class":56},[46,61715,61716,61718,61720,61722,61724],{"class":48,"line":34685},[46,61717,57267],{"class":56},[46,61719,26],{"class":1361},[46,61721,57279],{"class":56},[46,61723,26],{"class":1361},[46,61725,53274],{"class":56},[46,61727,61728,61730,61732,61734,61736],{"class":48,"line":34691},[46,61729,57267],{"class":56},[46,61731,26],{"class":1361},[46,61733,57279],{"class":56},[46,61735,26],{"class":1361},[46,61737,53274],{"class":56},[46,61739,61740,61742,61744,61746,61748],{"class":48,"line":34697},[46,61741,57267],{"class":56},[46,61743,26],{"class":1361},[46,61745,57279],{"class":56},[46,61747,26],{"class":1361},[46,61749,53274],{"class":56},[46,61751,61752,61754,61756,61758,61760],{"class":48,"line":34703},[46,61753,57267],{"class":56},[46,61755,26],{"class":1361},[46,61757,57279],{"class":56},[46,61759,26],{"class":1361},[46,61761,53274],{"class":56},[46,61763,61764,61766,61768],{"class":48,"line":34709},[46,61765,57372],{"class":56},[46,61767,3191],{"class":1361},[46,61769,53274],{"class":56},[46,61771,61772,61774,61776,61778,61780,61783],{"class":48,"line":34715},[46,61773,57199],{"class":56},[46,61775,53578],{"class":1361},[46,61777,55451],{"class":169},[46,61779,79],{"class":56},[46,61781,61782],{"class":173},"\"toggle\"",[46,61784,53274],{"class":56},[46,61786,61787,61789,61791,61793,61795,61798,61800,61803,61805,61807],{"class":48,"line":34721},[46,61788,57267],{"class":56},[46,61790,55852],{"class":1361},[46,61792,55451],{"class":169},[46,61794,79],{"class":56},[46,61796,61797],{"class":173},"\"prev\"",[46,61799,884],{"class":56},[46,61801,61802],{"class":180},"&lt;",[46,61804,53752],{"class":56},[46,61806,55852],{"class":1361},[46,61808,53274],{"class":56},[46,61810,61811,61813,61815,61817,61819,61822,61824,61827,61829,61831],{"class":48,"line":34727},[46,61812,57267],{"class":56},[46,61814,55852],{"class":1361},[46,61816,55451],{"class":169},[46,61818,79],{"class":56},[46,61820,61821],{"class":173},"\"next\"",[46,61823,884],{"class":56},[46,61825,61826],{"class":180},"&gt;",[46,61828,53752],{"class":56},[46,61830,55852],{"class":1361},[46,61832,53274],{"class":56},[46,61834,61835,61837,61839],{"class":48,"line":34747},[46,61836,57372],{"class":56},[46,61838,53578],{"class":1361},[46,61840,53274],{"class":56},[46,61842,61843,61845,61847],{"class":48,"line":34753},[46,61844,53743],{"class":56},[46,61846,53578],{"class":1361},[46,61848,53274],{"class":56},[46,61850,61851,61853,61855],{"class":48,"line":34769},[46,61852,54384],{"class":56},[46,61854,53578],{"class":1361},[46,61856,53274],{"class":56},[46,61858,61859,61861,61863],{"class":48,"line":34775},[46,61860,54111],{"class":56},[46,61862,53780],{"class":1361},[46,61864,53274],{"class":56},[46,61866,61867],{"class":48,"line":34789},[46,61868,61869],{"class":56},"    \u002F\u002F 1. 初始数据\n",[46,61871,61872],{"class":48,"line":34795},[46,61873,61874],{"class":56},"    const data = [\n",[46,61876,61877],{"class":48,"line":34810},[46,61878,61879],{"class":56},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[46,61881,61882],{"class":48,"line":34816},[46,61883,61884],{"class":56},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[46,61886,61887],{"class":48,"line":34825},[46,61888,61889],{"class":56},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[46,61891,61892],{"class":48,"line":34831},[46,61893,61894],{"class":56},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[46,61896,61897],{"class":48,"line":34840},[46,61898,61899],{"class":56},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[46,61901,61902],{"class":48,"line":34846},[46,61903,61904],{"class":56},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[46,61906,61907],{"class":48,"line":34852},[46,61908,61909],{"class":56},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[46,61911,61912],{"class":48,"line":34861},[46,61913,61914],{"class":56},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[46,61916,61917],{"class":48,"line":34867},[46,61918,55074],{"class":56},[46,61920,61921],{"class":48,"line":34878},[46,61922,61923],{"class":56},"    \u002F\u002F 获取元素\n",[46,61925,61926],{"class":48,"line":34884},[46,61927,61928],{"class":56},"    const img = document.querySelector('.slider-wrapper img')\n",[46,61930,61931],{"class":48,"line":34903},[46,61932,61933],{"class":56},"    const p = document.querySelector('.slider-footer p')\n",[46,61935,61936],{"class":48,"line":34909},[46,61937,61938],{"class":56},"    const footer = document.querySelector('.slider-footer')\n",[46,61940,61941],{"class":48,"line":34920},[46,61942,61943],{"class":56},"    \u002F\u002F 1. 右按钮业务\n",[46,61945,61946],{"class":48,"line":34926},[46,61947,61948],{"class":56},"    \u002F\u002F 1.1 获取右侧按钮 \n",[46,61950,61951],{"class":48,"line":34946},[46,61952,61953],{"class":56},"    const next = document.querySelector('.next')\n",[46,61955,61956],{"class":48,"line":34962},[46,61957,61958],{"class":56},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[46,61960,61961],{"class":48,"line":34968},[46,61962,61963],{"class":56},"    \u002F\u002F 1.2 注册点击事件\n",[46,61965,61966],{"class":48,"line":34982},[46,61967,616],{"emptyLinePlaceholder":615},[46,61969,61970],{"class":48,"line":34988},[46,61971,61972],{"class":56},"    next.addEventListener('click', function () {\n",[46,61974,61975],{"class":48,"line":34994},[46,61976,61977],{"class":56},"      \u002F\u002F console.log(11)\n",[46,61979,61980],{"class":48,"line":35005},[46,61981,61982],{"class":56},"      i++\n",[46,61984,61985],{"class":48,"line":35011},[46,61986,61987],{"class":56},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[46,61989,61990],{"class":48,"line":35017},[46,61991,61992],{"class":56},"      \u002F\u002F if (i >= 8) {\n",[46,61994,61995],{"class":48,"line":35027},[46,61996,61997],{"class":56},"      \u002F\u002F   i = 0\n",[46,61999,62000],{"class":48,"line":35033},[46,62001,62002],{"class":56},"      \u002F\u002F }\n",[46,62004,62005],{"class":48,"line":35044},[46,62006,62007],{"class":56},"      i = i >= data.length ? 0 : i\n",[46,62009,62010],{"class":48,"line":35050},[46,62011,62012],{"class":56},"      \u002F\u002F 1.3 得到对应的对象\n",[46,62014,62015],{"class":48,"line":35060},[46,62016,62017],{"class":56},"      \u002F\u002F console.log(data[i])\n",[46,62019,62020],{"class":48,"line":35065},[46,62021,62022],{"class":56},"      \u002F\u002F 调用函数\n",[46,62024,62025],{"class":48,"line":35071},[46,62026,62027],{"class":56},"      toggle()\n",[46,62029,62030],{"class":48,"line":35120},[46,62031,35434],{"class":56},[46,62033,62034],{"class":48,"line":35167},[46,62035,616],{"emptyLinePlaceholder":615},[46,62037,62038],{"class":48,"line":35172},[46,62039,62040],{"class":56},"    \u002F\u002F 2. 左侧按钮业务\n",[46,62042,62043],{"class":48,"line":35178},[46,62044,62045],{"class":56},"    \u002F\u002F 2.1 获取左侧按钮 \n",[46,62047,62048],{"class":48,"line":35197},[46,62049,62050],{"class":56},"    const prev = document.querySelector('.prev')\n",[46,62052,62053],{"class":48,"line":35203},[46,62054,61963],{"class":56},[46,62056,62057],{"class":48,"line":35223},[46,62058,62059],{"class":56},"    prev.addEventListener('click', function () {\n",[46,62061,62062],{"class":48,"line":35229},[46,62063,62064],{"class":56},"      i--\n",[46,62066,62067],{"class":48,"line":35235},[46,62068,62069],{"class":56},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[46,62071,62072],{"class":48,"line":35245},[46,62073,62074],{"class":56},"      \u002F\u002F if (i \u003C 0) {\n",[46,62076,62077],{"class":48,"line":35250},[46,62078,62079],{"class":56},"      \u002F\u002F   i = 7\n",[46,62081,62082],{"class":48,"line":35256},[46,62083,62002],{"class":56},[46,62085,62086],{"class":48,"line":35272},[46,62087,62088],{"class":56},"      i = i \u003C 0 ? data.length - 1 : i\n",[46,62090,62091],{"class":48,"line":35317},[46,62092,62012],{"class":56},[46,62094,62095],{"class":48,"line":35323},[46,62096,62017],{"class":56},[46,62098,62099],{"class":48,"line":35329},[46,62100,62022],{"class":56},[46,62102,62103],{"class":48,"line":35335},[46,62104,62027],{"class":56},[46,62106,62107],{"class":48,"line":35346},[46,62108,35434],{"class":56},[46,62110,62111],{"class":48,"line":35352},[46,62112,616],{"emptyLinePlaceholder":615},[46,62114,62115],{"class":48,"line":35358},[46,62116,62117],{"class":56},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[46,62119,62120],{"class":48,"line":35364},[46,62121,62122],{"class":56},"    function toggle() {\n",[46,62124,62125],{"class":48,"line":35381},[46,62126,62127],{"class":56},"      \u002F\u002F 1.4 渲染对应的数据\n",[46,62129,62130],{"class":48,"line":35395},[46,62131,62132],{"class":56},"      img.src = data[i].url\n",[46,62134,62135],{"class":48,"line":35404},[46,62136,62137],{"class":56},"      p.innerHTML = data[i].title\n",[46,62139,62140],{"class":48,"line":35413},[46,62141,62142],{"class":56},"      footer.style.backgroundColor = data[i].color\n",[46,62144,62145],{"class":48,"line":35422},[46,62146,62147],{"class":56},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[46,62149,62150],{"class":48,"line":35431},[46,62151,62152],{"class":56},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[46,62154,62155],{"class":48,"line":35437},[46,62156,62157],{"class":56},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[46,62159,62160],{"class":48,"line":35443},[46,62161,4217],{"class":56},[46,62163,62164],{"class":48,"line":35451},[46,62165,616],{"emptyLinePlaceholder":615},[46,62167,62168],{"class":48,"line":35456},[46,62169,62170],{"class":56},"    \u002F\u002F 3. 自动播放模块\n",[46,62172,62173],{"class":48,"line":35462},[46,62174,62175],{"class":56},"    let timerId = setInterval(function () {\n",[46,62177,62178],{"class":48,"line":35473},[46,62179,62180],{"class":56},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[46,62182,62183],{"class":48,"line":35479},[46,62184,62185],{"class":56},"      next.click()\n",[46,62187,62188],{"class":48,"line":35499},[46,62189,62190],{"class":56},"    }, 1000)\n",[46,62192,62193],{"class":48,"line":35505},[46,62194,616],{"emptyLinePlaceholder":615},[46,62196,62197],{"class":48,"line":35511},[46,62198,62199],{"class":56},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[46,62201,62202],{"class":48,"line":35517},[46,62203,62204],{"class":56},"    const slider = document.querySelector('.slider')\n",[46,62206,62207],{"class":48,"line":35534},[46,62208,62209],{"class":56},"    \u002F\u002F 注册事件\n",[46,62211,62212],{"class":48,"line":35540},[46,62213,62214],{"class":56},"    slider.addEventListener('mouseenter', function () {\n",[46,62216,62217],{"class":48,"line":35546},[46,62218,62219],{"class":56},"      \u002F\u002F 停止定时器\n",[46,62221,62222],{"class":48,"line":35552},[46,62223,62224],{"class":56},"      clearInterval(timerId)\n",[46,62226,62227],{"class":48,"line":35558},[46,62228,35434],{"class":56},[46,62230,62231],{"class":48,"line":35564},[46,62232,616],{"emptyLinePlaceholder":615},[46,62234,62235],{"class":48,"line":35591},[46,62236,62237],{"class":56},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[46,62239,62240],{"class":48,"line":35615},[46,62241,62209],{"class":56},[46,62243,62244],{"class":48,"line":35621},[46,62245,62246],{"class":56},"    slider.addEventListener('mouseleave', function () {\n",[46,62248,62249],{"class":48,"line":35627},[46,62250,62219],{"class":56},[46,62252,62253],{"class":48,"line":35633},[46,62254,62255],{"class":56},"      if (timerId) clearInterval(timerId)\n",[46,62257,62258],{"class":48,"line":35644},[46,62259,62260],{"class":56},"      \u002F\u002F 开启定时器\n",[46,62262,62263],{"class":48,"line":35655},[46,62264,62265],{"class":56},"      timerId = setInterval(function () {\n",[46,62267,62268],{"class":48,"line":35661},[46,62269,62270],{"class":56},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[46,62272,62273],{"class":48,"line":35678},[46,62274,62275],{"class":56},"        next.click()\n",[46,62277,62278],{"class":48,"line":35701},[46,62279,62280],{"class":56},"      }, 1000)\n",[46,62282,62283],{"class":48,"line":35724},[46,62284,35434],{"class":56},[46,62286,62287,62289,62291],{"class":48,"line":35730},[46,62288,54384],{"class":56},[46,62290,53780],{"class":1361},[46,62292,53274],{"class":56},[46,62294,62295,62297,62299],{"class":48,"line":35735},[46,62296,53752],{"class":56},[46,62298,53767],{"class":1361},[46,62300,53274],{"class":56},[46,62302,62303],{"class":48,"line":35744},[46,62304,616],{"emptyLinePlaceholder":615},[46,62306,62307,62309,62311],{"class":48,"line":35754},[46,62308,53752],{"class":56},[46,62310,52603],{"class":1361},[46,62312,53274],{"class":56},[23999,62314,62316],{"id":62315},"_3252-焦点事件","3.2.5.2 焦点事件",[19,62318,62319],{},"小米搜索框案例：",[36,62321,62323],{"className":52601,"code":62322,"language":52603,"meta":41,"style":41},"\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",[43,62324,62325,62335,62349,62353,62361,62375,62395,62415,62427,62435,62441,62451,62461,62473,62477,62481,62488,62492,62503,62507,62511,62518,62529,62542,62556,62560,62564,62573,62585,62597,62611,62624,62637,62655,62666,62670,62674,62683,62700,62704,62708,62715,62725,62735,62746,62759,62771,62787,62798,62810,62814,62818,62826,62837,62854,62866,62878,62889,62893,62897,62908,62919,62923,62931,62935,62943,62947,62955,62970,62993,63008,63039,63066,63093,63120,63147,63174,63201,63210,63218,63226,63231,63251,63271,63276,63281,63299,63304,63314,63319,63333,63338,63343,63360,63369,63381,63385,63393,63401,63405],{"__ignoreMap":41},[46,62326,62327,62329,62331,62333],{"class":48,"line":49},[46,62328,53265],{"class":56},[46,62330,53268],{"class":1361},[46,62332,53271],{"class":169},[46,62334,53274],{"class":56},[46,62336,62337,62339,62341,62343,62345,62347],{"class":48,"line":60},[46,62338,821],{"class":56},[46,62340,52603],{"class":1361},[46,62342,53283],{"class":169},[46,62344,79],{"class":56},[46,62346,53288],{"class":173},[46,62348,53274],{"class":56},[46,62350,62351],{"class":48,"line":200},[46,62352,616],{"emptyLinePlaceholder":615},[46,62354,62355,62357,62359],{"class":48,"line":211},[46,62356,821],{"class":56},[46,62358,53301],{"class":1361},[46,62360,53274],{"class":56},[46,62362,62363,62365,62367,62369,62371,62373],{"class":48,"line":222},[46,62364,53308],{"class":56},[46,62366,53311],{"class":1361},[46,62368,53314],{"class":169},[46,62370,79],{"class":56},[46,62372,53319],{"class":173},[46,62374,53274],{"class":56},[46,62376,62377,62379,62381,62383,62385,62387,62389,62391,62393],{"class":48,"line":636},[46,62378,53308],{"class":56},[46,62380,53311],{"class":1361},[46,62382,53330],{"class":169},[46,62384,79],{"class":56},[46,62386,53335],{"class":173},[46,62388,53338],{"class":169},[46,62390,79],{"class":56},[46,62392,53343],{"class":173},[46,62394,53274],{"class":56},[46,62396,62397,62399,62401,62403,62405,62407,62409,62411,62413],{"class":48,"line":641},[46,62398,53308],{"class":56},[46,62400,53311],{"class":1361},[46,62402,1364],{"class":169},[46,62404,79],{"class":56},[46,62406,53358],{"class":173},[46,62408,53338],{"class":169},[46,62410,79],{"class":56},[46,62412,53365],{"class":173},[46,62414,53274],{"class":56},[46,62416,62417,62419,62421,62423,62425],{"class":48,"line":653},[46,62418,53308],{"class":56},[46,62420,53374],{"class":1361},[46,62422,53377],{"class":56},[46,62424,53374],{"class":1361},[46,62426,53274],{"class":56},[46,62428,62429,62431,62433],{"class":48,"line":659},[46,62430,53308],{"class":56},[46,62432,2098],{"class":1361},[46,62434,53274],{"class":56},[46,62436,62437,62439],{"class":48,"line":665},[46,62438,53394],{"class":1361},[46,62440,17573],{"class":56},[46,62442,62443,62445,62447,62449],{"class":48,"line":670},[46,62444,53401],{"class":180},[46,62446,53404],{"class":56},[46,62448,2379],{"class":180},[46,62450,3345],{"class":56},[46,62452,62453,62455,62457,62459],{"class":48,"line":676},[46,62454,53413],{"class":180},[46,62456,53404],{"class":56},[46,62458,2379],{"class":180},[46,62460,3345],{"class":56},[46,62462,62463,62466,62468,62471],{"class":48,"line":682},[46,62464,62465],{"class":180},"            box-sizing",[46,62467,53404],{"class":56},[46,62469,62470],{"class":180},"border-box",[46,62472,3345],{"class":56},[46,62474,62475],{"class":48,"line":688},[46,62476,4557],{"class":56},[46,62478,62479],{"class":48,"line":693},[46,62480,616],{"emptyLinePlaceholder":615},[46,62482,62483,62486],{"class":48,"line":699},[46,62484,62485],{"class":1361},"        ul",[46,62487,17573],{"class":56},[46,62489,62490],{"class":48,"line":705},[46,62491,616],{"emptyLinePlaceholder":615},[46,62493,62494,62497,62499,62501],{"class":48,"line":711},[46,62495,62496],{"class":180},"            list-style",[46,62498,53404],{"class":56},[46,62500,56702],{"class":180},[46,62502,3345],{"class":56},[46,62504,62505],{"class":48,"line":717},[46,62506,4557],{"class":56},[46,62508,62509],{"class":48,"line":723},[46,62510,616],{"emptyLinePlaceholder":615},[46,62512,62513,62516],{"class":48,"line":729},[46,62514,62515],{"class":169},"        .mi",[46,62517,17573],{"class":56},[46,62519,62520,62523,62525,62527],{"class":48,"line":735},[46,62521,62522],{"class":180},"            position",[46,62524,53404],{"class":56},[46,62526,56729],{"class":180},[46,62528,3345],{"class":56},[46,62530,62531,62533,62535,62538,62540],{"class":48,"line":740},[46,62532,53451],{"class":180},[46,62534,53404],{"class":56},[46,62536,62537],{"class":180},"223",[46,62539,53459],{"class":52},[46,62541,3345],{"class":56},[46,62543,62544,62546,62548,62550,62552,62554],{"class":48,"line":745},[46,62545,53401],{"class":180},[46,62547,53404],{"class":56},[46,62549,1155],{"class":180},[46,62551,53459],{"class":52},[46,62553,53523],{"class":180},[46,62555,3345],{"class":56},[46,62557,62558],{"class":48,"line":763},[46,62559,4557],{"class":56},[46,62561,62562],{"class":48,"line":778},[46,62563,616],{"emptyLinePlaceholder":615},[46,62565,62566,62568,62571],{"class":48,"line":789},[46,62567,62515],{"class":169},[46,62569,62570],{"class":1361}," input",[46,62572,17573],{"class":56},[46,62574,62575,62577,62579,62581,62583],{"class":48,"line":794},[46,62576,53451],{"class":180},[46,62578,53404],{"class":56},[46,62580,62537],{"class":180},[46,62582,53459],{"class":52},[46,62584,3345],{"class":56},[46,62586,62587,62589,62591,62593,62595],{"class":48,"line":806},[46,62588,53466],{"class":180},[46,62590,53404],{"class":56},[46,62592,2793],{"class":180},[46,62594,53459],{"class":52},[46,62596,3345],{"class":56},[46,62598,62599,62601,62603,62605,62607,62609],{"class":48,"line":829},[46,62600,53413],{"class":180},[46,62602,53404],{"class":56},[46,62604,2379],{"class":180},[46,62606,4068],{"class":180},[46,62608,53459],{"class":52},[46,62610,3345],{"class":56},[46,62612,62613,62616,62618,62620,62622],{"class":48,"line":840},[46,62614,62615],{"class":180},"            font-size",[46,62617,53404],{"class":56},[46,62619,2735],{"class":180},[46,62621,53459],{"class":52},[46,62623,3345],{"class":56},[46,62625,62626,62629,62631,62633,62635],{"class":48,"line":846},[46,62627,62628],{"class":180},"            line-height",[46,62630,53404],{"class":56},[46,62632,2793],{"class":180},[46,62634,53459],{"class":52},[46,62636,3345],{"class":56},[46,62638,62639,62642,62644,62646,62648,62650,62653],{"class":48,"line":852},[46,62640,62641],{"class":180},"            border",[46,62643,53404],{"class":56},[46,62645,2405],{"class":180},[46,62647,53459],{"class":52},[46,62649,53488],{"class":180},[46,62651,62652],{"class":180}," #e0e0e0",[46,62654,3345],{"class":56},[46,62656,62657,62660,62662,62664],{"class":48,"line":857},[46,62658,62659],{"class":180},"            outline",[46,62661,53404],{"class":56},[46,62663,56702],{"class":180},[46,62665,3345],{"class":56},[46,62667,62668],{"class":48,"line":875},[46,62669,4557],{"class":56},[46,62671,62672],{"class":48,"line":892},[46,62673,616],{"emptyLinePlaceholder":615},[46,62675,62676,62678,62681],{"class":48,"line":898},[46,62677,62515],{"class":169},[46,62679,62680],{"class":169}," .search",[46,62682,17573],{"class":56},[46,62684,62685,62687,62689,62691,62693,62695,62698],{"class":48,"line":903},[46,62686,62641],{"class":180},[46,62688,53404],{"class":56},[46,62690,2405],{"class":180},[46,62692,53459],{"class":52},[46,62694,53488],{"class":180},[46,62696,62697],{"class":180}," #ff6700",[46,62699,3345],{"class":56},[46,62701,62702],{"class":48,"line":908},[46,62703,4557],{"class":56},[46,62705,62706],{"class":48,"line":925},[46,62707,616],{"emptyLinePlaceholder":615},[46,62709,62710,62713],{"class":48,"line":1238},[46,62711,62712],{"class":169},"        .result-list",[46,62714,17573],{"class":56},[46,62716,62717,62719,62721,62723],{"class":48,"line":1251},[46,62718,53439],{"class":180},[46,62720,53404],{"class":56},[46,62722,56702],{"class":180},[46,62724,3345],{"class":56},[46,62726,62727,62729,62731,62733],{"class":48,"line":1256},[46,62728,62522],{"class":180},[46,62730,53404],{"class":56},[46,62732,56796],{"class":180},[46,62734,3345],{"class":56},[46,62736,62737,62740,62742,62744],{"class":48,"line":1261},[46,62738,62739],{"class":180},"            left",[46,62741,53404],{"class":56},[46,62743,2379],{"class":180},[46,62745,3345],{"class":56},[46,62747,62748,62751,62753,62755,62757],{"class":48,"line":1274},[46,62749,62750],{"class":180},"            top",[46,62752,53404],{"class":56},[46,62754,2793],{"class":180},[46,62756,53459],{"class":52},[46,62758,3345],{"class":56},[46,62760,62761,62763,62765,62767,62769],{"class":48,"line":10061},[46,62762,53451],{"class":180},[46,62764,53404],{"class":56},[46,62766,62537],{"class":180},[46,62768,53459],{"class":52},[46,62770,3345],{"class":56},[46,62772,62773,62775,62777,62779,62781,62783,62785],{"class":48,"line":11720},[46,62774,62641],{"class":180},[46,62776,53404],{"class":56},[46,62778,2405],{"class":180},[46,62780,53459],{"class":52},[46,62782,53488],{"class":180},[46,62784,62697],{"class":180},[46,62786,3345],{"class":56},[46,62788,62789,62792,62794,62796],{"class":48,"line":11745},[46,62790,62791],{"class":180},"            border-top",[46,62793,53404],{"class":56},[46,62795,2379],{"class":180},[46,62797,3345],{"class":56},[46,62799,62800,62803,62805,62808],{"class":48,"line":11768},[46,62801,62802],{"class":180},"            background",[46,62804,53404],{"class":56},[46,62806,62807],{"class":180},"#fff",[46,62809,3345],{"class":56},[46,62811,62812],{"class":48,"line":11792},[46,62813,4557],{"class":56},[46,62815,62816],{"class":48,"line":11797},[46,62817,616],{"emptyLinePlaceholder":615},[46,62819,62820,62822,62824],{"class":48,"line":11802},[46,62821,62712],{"class":169},[46,62823,3450],{"class":1361},[46,62825,17573],{"class":56},[46,62827,62828,62830,62832,62835],{"class":48,"line":11807},[46,62829,53439],{"class":180},[46,62831,53404],{"class":56},[46,62833,62834],{"class":180},"block",[46,62836,3345],{"class":56},[46,62838,62839,62841,62843,62845,62847,62850,62852],{"class":48,"line":11816},[46,62840,53413],{"class":180},[46,62842,53404],{"class":56},[46,62844,2531],{"class":180},[46,62846,53459],{"class":52},[46,62848,62849],{"class":180}," 15",[46,62851,53459],{"class":52},[46,62853,3345],{"class":56},[46,62855,62856,62858,62860,62862,62864],{"class":48,"line":11821},[46,62857,62615],{"class":180},[46,62859,53404],{"class":56},[46,62861,2685],{"class":180},[46,62863,53459],{"class":52},[46,62865,3345],{"class":56},[46,62867,62868,62871,62873,62876],{"class":48,"line":11827},[46,62869,62870],{"class":180},"            color",[46,62872,53404],{"class":56},[46,62874,62875],{"class":180},"#424242",[46,62877,3345],{"class":56},[46,62879,62880,62883,62885,62887],{"class":48,"line":11848},[46,62881,62882],{"class":180},"            text-decoration",[46,62884,53404],{"class":56},[46,62886,56702],{"class":180},[46,62888,3345],{"class":56},[46,62890,62891],{"class":48,"line":11854},[46,62892,4557],{"class":56},[46,62894,62895],{"class":48,"line":11868},[46,62896,616],{"emptyLinePlaceholder":615},[46,62898,62899,62901,62903,62906],{"class":48,"line":11874},[46,62900,62712],{"class":169},[46,62902,3450],{"class":1361},[46,62904,62905],{"class":169},":hover",[46,62907,17573],{"class":56},[46,62909,62910,62912,62914,62917],{"class":48,"line":11901},[46,62911,53607],{"class":180},[46,62913,53404],{"class":56},[46,62915,62916],{"class":180},"#eee",[46,62918,3345],{"class":56},[46,62920,62921],{"class":48,"line":11910},[46,62922,4557],{"class":56},[46,62924,62925,62927,62929],{"class":48,"line":11916},[46,62926,53743],{"class":56},[46,62928,2098],{"class":1361},[46,62930,53274],{"class":56},[46,62932,62933],{"class":48,"line":11924},[46,62934,616],{"emptyLinePlaceholder":615},[46,62936,62937,62939,62941],{"class":48,"line":11929},[46,62938,53752],{"class":56},[46,62940,53301],{"class":1361},[46,62942,53274],{"class":56},[46,62944,62945],{"class":48,"line":18605},[46,62946,616],{"emptyLinePlaceholder":615},[46,62948,62949,62951,62953],{"class":48,"line":18611},[46,62950,821],{"class":56},[46,62952,53767],{"class":1361},[46,62954,53274],{"class":56},[46,62956,62957,62959,62961,62963,62965,62968],{"class":48,"line":18634},[46,62958,53308],{"class":56},[46,62960,53578],{"class":1361},[46,62962,55451],{"class":169},[46,62964,79],{"class":56},[46,62966,62967],{"class":173},"\"mi\"",[46,62969,53274],{"class":56},[46,62971,62972,62974,62976,62978,62980,62983,62986,62988,62991],{"class":48,"line":18640},[46,62973,57267],{"class":56},[46,62975,55786],{"class":1361},[46,62977,55789],{"class":169},[46,62979,79],{"class":56},[46,62981,62982],{"class":173},"\"search\"",[46,62984,62985],{"class":169}," placeholder",[46,62987,79],{"class":56},[46,62989,62990],{"class":173},"\"小米笔记本\"",[46,62992,53274],{"class":56},[46,62994,62995,62997,62999,63001,63003,63006],{"class":48,"line":18663},[46,62996,57267],{"class":56},[46,62998,3191],{"class":1361},[46,63000,55451],{"class":169},[46,63002,79],{"class":56},[46,63004,63005],{"class":173},"\"result-list\"",[46,63007,53274],{"class":56},[46,63009,63010,63013,63015,63018,63020,63023,63025,63028,63031,63033,63035,63037],{"class":48,"line":18677},[46,63011,63012],{"class":56},"            \u003C",[46,63014,26],{"class":1361},[46,63016,63017],{"class":56},">\u003C",[46,63019,2426],{"class":1361},[46,63021,63022],{"class":169}," href",[46,63024,79],{"class":56},[46,63026,63027],{"class":173},"\"#\"",[46,63029,63030],{"class":56},">全部商品\u003C\u002F",[46,63032,2426],{"class":1361},[46,63034,57279],{"class":56},[46,63036,26],{"class":1361},[46,63038,53274],{"class":56},[46,63040,63041,63043,63045,63047,63049,63051,63053,63055,63058,63060,63062,63064],{"class":48,"line":18697},[46,63042,63012],{"class":56},[46,63044,26],{"class":1361},[46,63046,63017],{"class":56},[46,63048,2426],{"class":1361},[46,63050,63022],{"class":169},[46,63052,79],{"class":56},[46,63054,63027],{"class":173},[46,63056,63057],{"class":56},">小米11\u003C\u002F",[46,63059,2426],{"class":1361},[46,63061,57279],{"class":56},[46,63063,26],{"class":1361},[46,63065,53274],{"class":56},[46,63067,63068,63070,63072,63074,63076,63078,63080,63082,63085,63087,63089,63091],{"class":48,"line":18703},[46,63069,63012],{"class":56},[46,63071,26],{"class":1361},[46,63073,63017],{"class":56},[46,63075,2426],{"class":1361},[46,63077,63022],{"class":169},[46,63079,79],{"class":56},[46,63081,63027],{"class":173},[46,63083,63084],{"class":56},">小米10S\u003C\u002F",[46,63086,2426],{"class":1361},[46,63088,57279],{"class":56},[46,63090,26],{"class":1361},[46,63092,53274],{"class":56},[46,63094,63095,63097,63099,63101,63103,63105,63107,63109,63112,63114,63116,63118],{"class":48,"line":18714},[46,63096,63012],{"class":56},[46,63098,26],{"class":1361},[46,63100,63017],{"class":56},[46,63102,2426],{"class":1361},[46,63104,63022],{"class":169},[46,63106,79],{"class":56},[46,63108,63027],{"class":173},[46,63110,63111],{"class":56},">小米笔记本\u003C\u002F",[46,63113,2426],{"class":1361},[46,63115,57279],{"class":56},[46,63117,26],{"class":1361},[46,63119,53274],{"class":56},[46,63121,63122,63124,63126,63128,63130,63132,63134,63136,63139,63141,63143,63145],{"class":48,"line":18737},[46,63123,63012],{"class":56},[46,63125,26],{"class":1361},[46,63127,63017],{"class":56},[46,63129,2426],{"class":1361},[46,63131,63022],{"class":169},[46,63133,79],{"class":56},[46,63135,63027],{"class":173},[46,63137,63138],{"class":56},">小米手机\u003C\u002F",[46,63140,2426],{"class":1361},[46,63142,57279],{"class":56},[46,63144,26],{"class":1361},[46,63146,53274],{"class":56},[46,63148,63149,63151,63153,63155,63157,63159,63161,63163,63166,63168,63170,63172],{"class":48,"line":18759},[46,63150,63012],{"class":56},[46,63152,26],{"class":1361},[46,63154,63017],{"class":56},[46,63156,2426],{"class":1361},[46,63158,63022],{"class":169},[46,63160,79],{"class":56},[46,63162,63027],{"class":173},[46,63164,63165],{"class":56},">黑鲨4\u003C\u002F",[46,63167,2426],{"class":1361},[46,63169,57279],{"class":56},[46,63171,26],{"class":1361},[46,63173,53274],{"class":56},[46,63175,63176,63178,63180,63182,63184,63186,63188,63190,63193,63195,63197,63199],{"class":48,"line":18764},[46,63177,63012],{"class":56},[46,63179,26],{"class":1361},[46,63181,63017],{"class":56},[46,63183,2426],{"class":1361},[46,63185,63022],{"class":169},[46,63187,79],{"class":56},[46,63189,63027],{"class":173},[46,63191,63192],{"class":56},">空调\u003C\u002F",[46,63194,2426],{"class":1361},[46,63196,57279],{"class":56},[46,63198,26],{"class":1361},[46,63200,53274],{"class":56},[46,63202,63203,63206,63208],{"class":48,"line":18770},[46,63204,63205],{"class":56},"        \u003C\u002F",[46,63207,3191],{"class":1361},[46,63209,53274],{"class":56},[46,63211,63212,63214,63216],{"class":48,"line":18784},[46,63213,53743],{"class":56},[46,63215,53578],{"class":1361},[46,63217,53274],{"class":56},[46,63219,63220,63222,63224],{"class":48,"line":18797},[46,63221,53308],{"class":56},[46,63223,53780],{"class":1361},[46,63225,53274],{"class":56},[46,63227,63228],{"class":48,"line":18802},[46,63229,63230],{"class":2253},"        \u002F\u002F 1. 获取元素\n",[46,63232,63233,63236,63238,63240,63242,63244,63246,63249],{"class":48,"line":18816},[46,63234,63235],{"class":52},"        const",[46,63237,62570],{"class":180},[46,63239,647],{"class":52},[46,63241,56361],{"class":56},[46,63243,56364],{"class":169},[46,63245,1152],{"class":56},[46,63247,63248],{"class":173},"'[type=search]'",[46,63250,459],{"class":56},[46,63252,63253,63255,63258,63260,63262,63264,63266,63269],{"class":48,"line":18821},[46,63254,63235],{"class":52},[46,63256,63257],{"class":180}," ul",[46,63259,647],{"class":52},[46,63261,56361],{"class":56},[46,63263,56364],{"class":169},[46,63265,1152],{"class":56},[46,63267,63268],{"class":173},"'.result-list'",[46,63270,459],{"class":56},[46,63272,63273],{"class":48,"line":18827},[46,63274,63275],{"class":2253},"        \u002F\u002F console.log(input)\n",[46,63277,63278],{"class":48,"line":18832},[46,63279,63280],{"class":2253},"        \u002F\u002F 2. 监听事件 获得焦点\n",[46,63282,63283,63286,63288,63290,63293,63295,63297],{"class":48,"line":18846},[46,63284,63285],{"class":56},"        input.",[46,63287,59778],{"class":169},[46,63289,1152],{"class":56},[46,63291,63292],{"class":173},"'focus'",[46,63294,448],{"class":56},[46,63296,56414],{"class":52},[46,63298,56417],{"class":56},[46,63300,63301],{"class":48,"line":18851},[46,63302,63303],{"class":2253},"            \u002F\u002F ul显示\n",[46,63305,63306,63309,63311],{"class":48,"line":18856},[46,63307,63308],{"class":56},"            ul.style.display ",[46,63310,79],{"class":52},[46,63312,63313],{"class":173}," 'block'\n",[46,63315,63316],{"class":48,"line":18870},[46,63317,63318],{"class":2253},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[46,63320,63321,63324,63326,63328,63331],{"class":48,"line":18882},[46,63322,63323],{"class":56},"            input.classList.",[46,63325,7347],{"class":169},[46,63327,1152],{"class":56},[46,63329,63330],{"class":173},"'search'",[46,63332,459],{"class":56},[46,63334,63335],{"class":48,"line":18887},[46,63336,63337],{"class":56},"        })\n",[46,63339,63340],{"class":48,"line":18900},[46,63341,63342],{"class":2253},"        \u002F\u002F 3. 监听事件 失去焦点\n",[46,63344,63345,63347,63349,63351,63354,63356,63358],{"class":48,"line":18905},[46,63346,63285],{"class":56},[46,63348,59778],{"class":169},[46,63350,1152],{"class":56},[46,63352,63353],{"class":173},"'blur'",[46,63355,448],{"class":56},[46,63357,56414],{"class":52},[46,63359,56417],{"class":56},[46,63361,63362,63364,63366],{"class":48,"line":18910},[46,63363,63308],{"class":56},[46,63365,79],{"class":52},[46,63367,63368],{"class":173}," 'none'\n",[46,63370,63371,63373,63375,63377,63379],{"class":48,"line":18915},[46,63372,63323],{"class":56},[46,63374,58971],{"class":169},[46,63376,1152],{"class":56},[46,63378,63330],{"class":173},[46,63380,459],{"class":56},[46,63382,63383],{"class":48,"line":18928},[46,63384,63337],{"class":56},[46,63386,63387,63389,63391],{"class":48,"line":18933},[46,63388,53743],{"class":56},[46,63390,53780],{"class":1361},[46,63392,53274],{"class":56},[46,63394,63395,63397,63399],{"class":48,"line":34607},[46,63396,53752],{"class":56},[46,63398,53767],{"class":1361},[46,63400,53274],{"class":56},[46,63402,63403],{"class":48,"line":34613},[46,63404,616],{"emptyLinePlaceholder":615},[46,63406,63407,63409,63411],{"class":48,"line":34619},[46,63408,53752],{"class":56},[46,63410,52603],{"class":1361},[46,63412,53274],{"class":56},[23999,63414,63416],{"id":63415},"_3253-键盘事件","3.2.5.3 键盘事件",[19,63418,63419],{},"评论字数统计案例",[19,63421,63422],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[19,63424,63425],{},"牢记focus伪类选择器",[53311,63427],{"charSet":63428},"UTF-8",[53311,63430],{"name":63431,"content":63432},"viewport","width=device-width, initial-scale=1.0",[53374,63434,63435],{},"Document",[2098,63437,63438],{},"\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",[55786,63440],{"type":571},[3191,63442,63443,63446],{},[26,63444,63445],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[26,63447,63448],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[36,63450,63452],{"className":52601,"code":63451,"language":52603,"meta":41,"style":41},"\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",[43,63453,63454,63464,63478,63482,63490,63504,63524,63544,63557,63565,63572,63585,63599,63609,63619,63623,63627,63634,63646,63658,63670,63682,63711,63724,63728,63732,63741,63752,63764,63775,63786,63798,63809,63821,63837,63849,63853,63857,63868,63879,63889,63901,63905,63909,63917,63928,63938,63949,63961,63974,63986,63998,64002,64006,64015,64027,64038,64051,64062,64076,64080,64084,64091,64103,64115,64125,64129,64133,64142,64154,64164,64168,64172,64183,64193,64212,64225,64229,64233,64243,64253,64257,64261,64272,64283,64295,64307,64311,64315,64326,64337,64351,64355,64359,64370,64380,64392,64396,64404,64412,64416,64424,64439,64458,64498,64511,64519,64533,64553,64561,64576,64599,64617,64632,64652,64672,64692,64700,64708,64716,64724,64744,64764,64769,64786,64795,64799,64804,64820,64828,64832,64837,64854,64859,64884,64888,64892,64897,64902,64910,64918,64922],{"__ignoreMap":41},[46,63455,63456,63458,63460,63462],{"class":48,"line":49},[46,63457,53265],{"class":56},[46,63459,53268],{"class":1361},[46,63461,53271],{"class":169},[46,63463,53274],{"class":56},[46,63465,63466,63468,63470,63472,63474,63476],{"class":48,"line":60},[46,63467,821],{"class":56},[46,63469,52603],{"class":1361},[46,63471,53283],{"class":169},[46,63473,79],{"class":56},[46,63475,53288],{"class":173},[46,63477,53274],{"class":56},[46,63479,63480],{"class":48,"line":200},[46,63481,616],{"emptyLinePlaceholder":615},[46,63483,63484,63486,63488],{"class":48,"line":211},[46,63485,821],{"class":56},[46,63487,53301],{"class":1361},[46,63489,53274],{"class":56},[46,63491,63492,63494,63496,63498,63500,63502],{"class":48,"line":222},[46,63493,54111],{"class":56},[46,63495,53311],{"class":1361},[46,63497,53314],{"class":169},[46,63499,79],{"class":56},[46,63501,53319],{"class":173},[46,63503,53274],{"class":56},[46,63505,63506,63508,63510,63512,63514,63516,63518,63520,63522],{"class":48,"line":636},[46,63507,54111],{"class":56},[46,63509,53311],{"class":1361},[46,63511,53330],{"class":169},[46,63513,79],{"class":56},[46,63515,53335],{"class":173},[46,63517,53338],{"class":169},[46,63519,79],{"class":56},[46,63521,53343],{"class":173},[46,63523,53274],{"class":56},[46,63525,63526,63528,63530,63532,63534,63536,63538,63540,63542],{"class":48,"line":641},[46,63527,54111],{"class":56},[46,63529,53311],{"class":1361},[46,63531,1364],{"class":169},[46,63533,79],{"class":56},[46,63535,53358],{"class":173},[46,63537,53338],{"class":169},[46,63539,79],{"class":56},[46,63541,53365],{"class":173},[46,63543,53274],{"class":56},[46,63545,63546,63548,63550,63553,63555],{"class":48,"line":653},[46,63547,54111],{"class":56},[46,63549,53374],{"class":1361},[46,63551,63552],{"class":56},">评论回车发布\u003C\u002F",[46,63554,53374],{"class":1361},[46,63556,53274],{"class":56},[46,63558,63559,63561,63563],{"class":48,"line":659},[46,63560,54111],{"class":56},[46,63562,2098],{"class":1361},[46,63564,53274],{"class":56},[46,63566,63567,63570],{"class":48,"line":665},[46,63568,63569],{"class":169},"    .wrapper",[46,63571,17573],{"class":56},[46,63573,63574,63577,63579,63581,63583],{"class":48,"line":670},[46,63575,63576],{"class":180},"      min-width",[46,63578,53404],{"class":56},[46,63580,6005],{"class":180},[46,63582,53459],{"class":52},[46,63584,3345],{"class":56},[46,63586,63587,63590,63592,63595,63597],{"class":48,"line":676},[46,63588,63589],{"class":180},"      max-width",[46,63591,53404],{"class":56},[46,63593,63594],{"class":180},"800",[46,63596,53459],{"class":52},[46,63598,3345],{"class":56},[46,63600,63601,63603,63605,63607],{"class":48,"line":682},[46,63602,56974],{"class":180},[46,63604,53404],{"class":56},[46,63606,53444],{"class":180},[46,63608,3345],{"class":56},[46,63610,63611,63613,63615,63617],{"class":48,"line":688},[46,63612,56985],{"class":180},[46,63614,53404],{"class":56},[46,63616,53547],{"class":180},[46,63618,3345],{"class":56},[46,63620,63621],{"class":48,"line":693},[46,63622,4217],{"class":56},[46,63624,63625],{"class":48,"line":699},[46,63626,616],{"emptyLinePlaceholder":615},[46,63628,63629,63632],{"class":48,"line":705},[46,63630,63631],{"class":169},"    .avatar",[46,63633,17573],{"class":56},[46,63635,63636,63638,63640,63642,63644],{"class":48,"line":711},[46,63637,56736],{"class":180},[46,63639,53404],{"class":56},[46,63641,2793],{"class":180},[46,63643,53459],{"class":52},[46,63645,3345],{"class":56},[46,63647,63648,63650,63652,63654,63656],{"class":48,"line":717},[46,63649,56750],{"class":180},[46,63651,53404],{"class":56},[46,63653,2793],{"class":180},[46,63655,53459],{"class":52},[46,63657,3345],{"class":56},[46,63659,63660,63662,63664,63666,63668],{"class":48,"line":723},[46,63661,57099],{"class":180},[46,63663,53404],{"class":56},[46,63665,2842],{"class":180},[46,63667,2515],{"class":52},[46,63669,3345],{"class":56},[46,63671,63672,63675,63677,63680],{"class":48,"line":729},[46,63673,63674],{"class":180},"      overflow",[46,63676,53404],{"class":56},[46,63678,63679],{"class":180},"hidden",[46,63681,3345],{"class":56},[46,63683,63684,63687,63689,63692,63694,63697,63699,63702,63704,63706,63709],{"class":48,"line":735},[46,63685,63686],{"class":180},"      background",[46,63688,53404],{"class":56},[46,63690,63691],{"class":180},"url",[46,63693,1152],{"class":56},[46,63695,63696],{"class":439},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[46,63698,15716],{"class":56},[46,63700,63701],{"class":180},"no-repeat",[46,63703,19145],{"class":180},[46,63705,26973],{"class":56},[46,63707,63708],{"class":180},"cover",[46,63710,3345],{"class":56},[46,63712,63713,63716,63718,63720,63722],{"class":48,"line":740},[46,63714,63715],{"class":180},"      margin-right",[46,63717,53404],{"class":56},[46,63719,2886],{"class":180},[46,63721,53459],{"class":52},[46,63723,3345],{"class":56},[46,63725,63726],{"class":48,"line":745},[46,63727,4217],{"class":56},[46,63729,63730],{"class":48,"line":763},[46,63731,616],{"emptyLinePlaceholder":615},[46,63733,63734,63736,63739],{"class":48,"line":778},[46,63735,63569],{"class":169},[46,63737,63738],{"class":1361}," textarea",[46,63740,17573],{"class":56},[46,63742,63743,63746,63748,63750],{"class":48,"line":789},[46,63744,63745],{"class":180},"      outline",[46,63747,53404],{"class":56},[46,63749,56702],{"class":180},[46,63751,3345],{"class":56},[46,63753,63754,63757,63759,63762],{"class":48,"line":794},[46,63755,63756],{"class":180},"      border-color",[46,63758,53404],{"class":56},[46,63760,63761],{"class":180},"transparent",[46,63763,3345],{"class":56},[46,63765,63766,63769,63771,63773],{"class":48,"line":806},[46,63767,63768],{"class":180},"      resize",[46,63770,53404],{"class":56},[46,63772,56702],{"class":180},[46,63774,3345],{"class":56},[46,63776,63777,63779,63781,63784],{"class":48,"line":829},[46,63778,63686],{"class":180},[46,63780,53404],{"class":56},[46,63782,63783],{"class":180},"#f5f5f5",[46,63785,3345],{"class":56},[46,63787,63788,63790,63792,63794,63796],{"class":48,"line":840},[46,63789,57099],{"class":180},[46,63791,53404],{"class":56},[46,63793,2481],{"class":180},[46,63795,53459],{"class":52},[46,63797,3345],{"class":56},[46,63799,63800,63803,63805,63807],{"class":48,"line":846},[46,63801,63802],{"class":180},"      flex",[46,63804,53404],{"class":56},[46,63806,2405],{"class":180},[46,63808,3345],{"class":56},[46,63810,63811,63813,63815,63817,63819],{"class":48,"line":852},[46,63812,56660],{"class":180},[46,63814,53404],{"class":56},[46,63816,2633],{"class":180},[46,63818,53459],{"class":52},[46,63820,3345],{"class":56},[46,63822,63823,63826,63828,63830,63833,63835],{"class":48,"line":857},[46,63824,63825],{"class":180},"      transition",[46,63827,53404],{"class":56},[46,63829,30110],{"class":180},[46,63831,63832],{"class":180}," 0.5",[46,63834,2881],{"class":52},[46,63836,3345],{"class":56},[46,63838,63839,63841,63843,63845,63847],{"class":48,"line":875},[46,63840,56750],{"class":180},[46,63842,53404],{"class":56},[46,63844,3136],{"class":180},[46,63846,53459],{"class":52},[46,63848,3345],{"class":56},[46,63850,63851],{"class":48,"line":892},[46,63852,4217],{"class":56},[46,63854,63855],{"class":48,"line":898},[46,63856,616],{"emptyLinePlaceholder":615},[46,63858,63859,63861,63863,63866],{"class":48,"line":903},[46,63860,63569],{"class":169},[46,63862,63738],{"class":1361},[46,63864,63865],{"class":169},":focus",[46,63867,17573],{"class":56},[46,63869,63870,63872,63874,63877],{"class":48,"line":908},[46,63871,63756],{"class":180},[46,63873,53404],{"class":56},[46,63875,63876],{"class":180},"#e4e4e4",[46,63878,3345],{"class":56},[46,63880,63881,63883,63885,63887],{"class":48,"line":925},[46,63882,63686],{"class":180},[46,63884,53404],{"class":56},[46,63886,62807],{"class":180},[46,63888,3345],{"class":56},[46,63890,63891,63893,63895,63897,63899],{"class":48,"line":1238},[46,63892,56750],{"class":180},[46,63894,53404],{"class":56},[46,63896,2842],{"class":180},[46,63898,53459],{"class":52},[46,63900,3345],{"class":56},[46,63902,63903],{"class":48,"line":1251},[46,63904,4217],{"class":56},[46,63906,63907],{"class":48,"line":1256},[46,63908,616],{"emptyLinePlaceholder":615},[46,63910,63911,63913,63915],{"class":48,"line":1261},[46,63912,63569],{"class":169},[46,63914,59432],{"class":1361},[46,63916,17573],{"class":56},[46,63918,63919,63921,63923,63926],{"class":48,"line":1274},[46,63920,63686],{"class":180},[46,63922,53404],{"class":56},[46,63924,63925],{"class":180},"#00aeec",[46,63927,3345],{"class":56},[46,63929,63930,63932,63934,63936],{"class":48,"line":10061},[46,63931,59381],{"class":180},[46,63933,53404],{"class":56},[46,63935,62807],{"class":180},[46,63937,3345],{"class":56},[46,63939,63940,63943,63945,63947],{"class":48,"line":11720},[46,63941,63942],{"class":180},"      border",[46,63944,53404],{"class":56},[46,63946,56702],{"class":180},[46,63948,3345],{"class":56},[46,63950,63951,63953,63955,63957,63959],{"class":48,"line":11745},[46,63952,57099],{"class":180},[46,63954,53404],{"class":56},[46,63956,2481],{"class":180},[46,63958,53459],{"class":52},[46,63960,3345],{"class":56},[46,63962,63963,63966,63968,63970,63972],{"class":48,"line":11768},[46,63964,63965],{"class":180},"      margin-left",[46,63967,53404],{"class":56},[46,63969,2633],{"class":180},[46,63971,53459],{"class":52},[46,63973,3345],{"class":56},[46,63975,63976,63978,63980,63982,63984],{"class":48,"line":11792},[46,63977,56736],{"class":180},[46,63979,53404],{"class":56},[46,63981,2543],{"class":180},[46,63983,53459],{"class":52},[46,63985,3345],{"class":56},[46,63987,63988,63991,63993,63996],{"class":48,"line":11797},[46,63989,63990],{"class":180},"      cursor",[46,63992,53404],{"class":56},[46,63994,63995],{"class":180},"pointer",[46,63997,3345],{"class":56},[46,63999,64000],{"class":48,"line":11802},[46,64001,4217],{"class":56},[46,64003,64004],{"class":48,"line":11807},[46,64005,616],{"emptyLinePlaceholder":615},[46,64007,64008,64010,64013],{"class":48,"line":11816},[46,64009,63569],{"class":169},[46,64011,64012],{"class":169}," .total",[46,64014,17573],{"class":56},[46,64016,64017,64019,64021,64023,64025],{"class":48,"line":11821},[46,64018,63715],{"class":180},[46,64020,53404],{"class":56},[46,64022,2798],{"class":180},[46,64024,53459],{"class":52},[46,64026,3345],{"class":56},[46,64028,64029,64031,64033,64036],{"class":48,"line":11827},[46,64030,59381],{"class":180},[46,64032,53404],{"class":56},[46,64034,64035],{"class":180},"#999",[46,64037,3345],{"class":56},[46,64039,64040,64043,64045,64047,64049],{"class":48,"line":11848},[46,64041,64042],{"class":180},"      margin-top",[46,64044,53404],{"class":56},[46,64046,2506],{"class":180},[46,64048,53459],{"class":52},[46,64050,3345],{"class":56},[46,64052,64053,64056,64058,64060],{"class":48,"line":11854},[46,64054,64055],{"class":180},"      opacity",[46,64057,53404],{"class":56},[46,64059,2379],{"class":180},[46,64061,3345],{"class":56},[46,64063,64064,64066,64068,64070,64072,64074],{"class":48,"line":11868},[46,64065,63825],{"class":180},[46,64067,53404],{"class":56},[46,64069,30110],{"class":180},[46,64071,63832],{"class":180},[46,64073,2881],{"class":52},[46,64075,3345],{"class":56},[46,64077,64078],{"class":48,"line":11874},[46,64079,4217],{"class":56},[46,64081,64082],{"class":48,"line":11901},[46,64083,616],{"emptyLinePlaceholder":615},[46,64085,64086,64089],{"class":48,"line":11910},[46,64087,64088],{"class":169},"    .list",[46,64090,17573],{"class":56},[46,64092,64093,64095,64097,64099,64101],{"class":48,"line":11916},[46,64094,63576],{"class":180},[46,64096,53404],{"class":56},[46,64098,6005],{"class":180},[46,64100,53459],{"class":52},[46,64102,3345],{"class":56},[46,64104,64105,64107,64109,64111,64113],{"class":48,"line":11924},[46,64106,63589],{"class":180},[46,64108,53404],{"class":56},[46,64110,63594],{"class":180},[46,64112,53459],{"class":52},[46,64114,3345],{"class":56},[46,64116,64117,64119,64121,64123],{"class":48,"line":11929},[46,64118,56974],{"class":180},[46,64120,53404],{"class":56},[46,64122,53444],{"class":180},[46,64124,3345],{"class":56},[46,64126,64127],{"class":48,"line":18605},[46,64128,4217],{"class":56},[46,64130,64131],{"class":48,"line":18611},[46,64132,616],{"emptyLinePlaceholder":615},[46,64134,64135,64137,64140],{"class":48,"line":18634},[46,64136,64088],{"class":169},[46,64138,64139],{"class":169}," .item",[46,64141,17573],{"class":56},[46,64143,64144,64146,64148,64150,64152],{"class":48,"line":18640},[46,64145,56736],{"class":180},[46,64147,53404],{"class":56},[46,64149,1155],{"class":180},[46,64151,2515],{"class":52},[46,64153,3345],{"class":56},[46,64155,64156,64158,64160,64162],{"class":48,"line":18663},[46,64157,56974],{"class":180},[46,64159,53404],{"class":56},[46,64161,53444],{"class":180},[46,64163,3345],{"class":56},[46,64165,64166],{"class":48,"line":18677},[46,64167,4217],{"class":56},[46,64169,64170],{"class":48,"line":18697},[46,64171,616],{"emptyLinePlaceholder":615},[46,64173,64174,64176,64178,64181],{"class":48,"line":18703},[46,64175,64088],{"class":169},[46,64177,64139],{"class":169},[46,64179,64180],{"class":169}," .info",[46,64182,17573],{"class":56},[46,64184,64185,64187,64189,64191],{"class":48,"line":18714},[46,64186,63802],{"class":180},[46,64188,53404],{"class":56},[46,64190,2405],{"class":180},[46,64192,3345],{"class":56},[46,64194,64195,64198,64200,64202,64204,64207,64210],{"class":48,"line":18737},[46,64196,64197],{"class":180},"      border-bottom",[46,64199,53404],{"class":56},[46,64201,2405],{"class":180},[46,64203,53459],{"class":52},[46,64205,64206],{"class":180}," dashed",[46,64208,64209],{"class":180}," #e4e4e4",[46,64211,3345],{"class":56},[46,64213,64214,64217,64219,64221,64223],{"class":48,"line":18759},[46,64215,64216],{"class":180},"      padding-bottom",[46,64218,53404],{"class":56},[46,64220,2633],{"class":180},[46,64222,53459],{"class":52},[46,64224,3345],{"class":56},[46,64226,64227],{"class":48,"line":18764},[46,64228,4217],{"class":56},[46,64230,64231],{"class":48,"line":18770},[46,64232,616],{"emptyLinePlaceholder":615},[46,64234,64235,64237,64239,64241],{"class":48,"line":18784},[46,64236,64088],{"class":169},[46,64238,64139],{"class":169},[46,64240,8838],{"class":1361},[46,64242,17573],{"class":56},[46,64244,64245,64247,64249,64251],{"class":48,"line":18797},[46,64246,56671],{"class":180},[46,64248,53404],{"class":56},[46,64250,2379],{"class":180},[46,64252,3345],{"class":56},[46,64254,64255],{"class":48,"line":18802},[46,64256,4217],{"class":56},[46,64258,64259],{"class":48,"line":18816},[46,64260,616],{"emptyLinePlaceholder":615},[46,64262,64263,64265,64267,64270],{"class":48,"line":18821},[46,64264,64088],{"class":169},[46,64266,64139],{"class":169},[46,64268,64269],{"class":169}," .name",[46,64271,17573],{"class":56},[46,64273,64274,64276,64278,64281],{"class":48,"line":18827},[46,64275,59381],{"class":180},[46,64277,53404],{"class":56},[46,64279,64280],{"class":180},"#FB7299",[46,64282,3345],{"class":56},[46,64284,64285,64287,64289,64291,64293],{"class":48,"line":18832},[46,64286,56887],{"class":180},[46,64288,53404],{"class":56},[46,64290,2735],{"class":180},[46,64292,53459],{"class":52},[46,64294,3345],{"class":56},[46,64296,64297,64300,64302,64305],{"class":48,"line":18846},[46,64298,64299],{"class":180},"      font-weight",[46,64301,53404],{"class":56},[46,64303,64304],{"class":180},"bold",[46,64306,3345],{"class":56},[46,64308,64309],{"class":48,"line":18851},[46,64310,4217],{"class":56},[46,64312,64313],{"class":48,"line":18856},[46,64314,616],{"emptyLinePlaceholder":615},[46,64316,64317,64319,64321,64324],{"class":48,"line":18870},[46,64318,64088],{"class":169},[46,64320,64139],{"class":169},[46,64322,64323],{"class":169}," .text",[46,64325,17573],{"class":56},[46,64327,64328,64330,64332,64335],{"class":48,"line":18882},[46,64329,59381],{"class":180},[46,64331,53404],{"class":56},[46,64333,64334],{"class":180},"#333",[46,64336,3345],{"class":56},[46,64338,64339,64341,64343,64345,64347,64349],{"class":48,"line":18887},[46,64340,56660],{"class":180},[46,64342,53404],{"class":56},[46,64344,2633],{"class":180},[46,64346,53459],{"class":52},[46,64348,887],{"class":180},[46,64350,3345],{"class":56},[46,64352,64353],{"class":48,"line":18900},[46,64354,4217],{"class":56},[46,64356,64357],{"class":48,"line":18905},[46,64358,616],{"emptyLinePlaceholder":615},[46,64360,64361,64363,64365,64368],{"class":48,"line":18910},[46,64362,64088],{"class":169},[46,64364,64139],{"class":169},[46,64366,64367],{"class":169}," .time",[46,64369,17573],{"class":56},[46,64371,64372,64374,64376,64378],{"class":48,"line":18915},[46,64373,59381],{"class":180},[46,64375,53404],{"class":56},[46,64377,64035],{"class":180},[46,64379,3345],{"class":56},[46,64381,64382,64384,64386,64388,64390],{"class":48,"line":18928},[46,64383,56887],{"class":180},[46,64385,53404],{"class":56},[46,64387,2685],{"class":180},[46,64389,53459],{"class":52},[46,64391,3345],{"class":56},[46,64393,64394],{"class":48,"line":18933},[46,64395,4217],{"class":56},[46,64397,64398,64400,64402],{"class":48,"line":34607},[46,64399,54384],{"class":56},[46,64401,2098],{"class":1361},[46,64403,53274],{"class":56},[46,64405,64406,64408,64410],{"class":48,"line":34613},[46,64407,53752],{"class":56},[46,64409,53301],{"class":1361},[46,64411,53274],{"class":56},[46,64413,64414],{"class":48,"line":34619},[46,64415,616],{"emptyLinePlaceholder":615},[46,64417,64418,64420,64422],{"class":48,"line":34625},[46,64419,821],{"class":56},[46,64421,53767],{"class":1361},[46,64423,53274],{"class":56},[46,64425,64426,64428,64430,64432,64434,64437],{"class":48,"line":34631},[46,64427,54111],{"class":56},[46,64429,53578],{"class":1361},[46,64431,55451],{"class":169},[46,64433,79],{"class":56},[46,64435,64436],{"class":173},"\"wrapper\"",[46,64438,53274],{"class":56},[46,64440,64441,64443,64445,64447,64449,64452,64454,64456],{"class":48,"line":34642},[46,64442,53308],{"class":56},[46,64444,2628],{"class":1361},[46,64446,55451],{"class":169},[46,64448,79],{"class":56},[46,64450,64451],{"class":173},"\"avatar\"",[46,64453,57279],{"class":56},[46,64455,2628],{"class":1361},[46,64457,53274],{"class":56},[46,64459,64460,64462,64464,64466,64468,64471,64473,64475,64478,64480,64482,64484,64487,64489,64492,64494,64496],{"class":48,"line":34648},[46,64461,53308],{"class":56},[46,64463,56253],{"class":1361},[46,64465,16960],{"class":169},[46,64467,79],{"class":56},[46,64469,64470],{"class":173},"\"tx\"",[46,64472,62985],{"class":169},[46,64474,79],{"class":56},[46,64476,64477],{"class":173},"\"发一条友善的评论\"",[46,64479,56276],{"class":169},[46,64481,79],{"class":56},[46,64483,5720],{"class":173},[46,64485,64486],{"class":169}," maxlength",[46,64488,79],{"class":56},[46,64490,64491],{"class":173},"\"200\"",[46,64493,57279],{"class":56},[46,64495,56253],{"class":1361},[46,64497,53274],{"class":56},[46,64499,64500,64502,64504,64507,64509],{"class":48,"line":34668},[46,64501,53308],{"class":56},[46,64503,55852],{"class":1361},[46,64505,64506],{"class":56},">发布\u003C\u002F",[46,64508,55852],{"class":1361},[46,64510,53274],{"class":56},[46,64512,64513,64515,64517],{"class":48,"line":34674},[46,64514,54384],{"class":56},[46,64516,53578],{"class":1361},[46,64518,53274],{"class":56},[46,64520,64521,64523,64525,64527,64529,64531],{"class":48,"line":34685},[46,64522,54111],{"class":56},[46,64524,53578],{"class":1361},[46,64526,55451],{"class":169},[46,64528,79],{"class":56},[46,64530,64436],{"class":173},[46,64532,53274],{"class":56},[46,64534,64535,64537,64539,64541,64543,64546,64549,64551],{"class":48,"line":34691},[46,64536,53308],{"class":56},[46,64538,46],{"class":1361},[46,64540,55451],{"class":169},[46,64542,79],{"class":56},[46,64544,64545],{"class":173},"\"total\"",[46,64547,64548],{"class":56},">0\u002F200字\u003C\u002F",[46,64550,46],{"class":1361},[46,64552,53274],{"class":56},[46,64554,64555,64557,64559],{"class":48,"line":34697},[46,64556,54384],{"class":56},[46,64558,53578],{"class":1361},[46,64560,53274],{"class":56},[46,64562,64563,64565,64567,64569,64571,64574],{"class":48,"line":34703},[46,64564,54111],{"class":56},[46,64566,53578],{"class":1361},[46,64568,55451],{"class":169},[46,64570,79],{"class":56},[46,64572,64573],{"class":173},"\"list\"",[46,64575,53274],{"class":56},[46,64577,64578,64580,64582,64584,64586,64589,64592,64594,64597],{"class":48,"line":34709},[46,64579,53308],{"class":56},[46,64581,53578],{"class":1361},[46,64583,55451],{"class":169},[46,64585,79],{"class":56},[46,64587,64588],{"class":173},"\"item\"",[46,64590,64591],{"class":169}," style",[46,64593,79],{"class":56},[46,64595,64596],{"class":173},"\"display: none;\"",[46,64598,53274],{"class":56},[46,64600,64601,64603,64605,64607,64609,64611,64613,64615],{"class":48,"line":34715},[46,64602,57199],{"class":56},[46,64604,2628],{"class":1361},[46,64606,55451],{"class":169},[46,64608,79],{"class":56},[46,64610,64451],{"class":173},[46,64612,57279],{"class":56},[46,64614,2628],{"class":1361},[46,64616,53274],{"class":56},[46,64618,64619,64621,64623,64625,64627,64630],{"class":48,"line":34721},[46,64620,57199],{"class":56},[46,64622,53578],{"class":1361},[46,64624,55451],{"class":169},[46,64626,79],{"class":56},[46,64628,64629],{"class":173},"\"info\"",[46,64631,53274],{"class":56},[46,64633,64634,64636,64638,64640,64642,64645,64648,64650],{"class":48,"line":34727},[46,64635,57267],{"class":56},[46,64637,19],{"class":1361},[46,64639,55451],{"class":169},[46,64641,79],{"class":56},[46,64643,64644],{"class":173},"\"name\"",[46,64646,64647],{"class":56},">清风徐来\u003C\u002F",[46,64649,19],{"class":1361},[46,64651,53274],{"class":56},[46,64653,64654,64656,64658,64660,64662,64665,64668,64670],{"class":48,"line":34747},[46,64655,57267],{"class":56},[46,64657,19],{"class":1361},[46,64659,55451],{"class":169},[46,64661,79],{"class":56},[46,64663,64664],{"class":173},"\"text\"",[46,64666,64667],{"class":56},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[46,64669,19],{"class":1361},[46,64671,53274],{"class":56},[46,64673,64674,64676,64678,64680,64682,64685,64688,64690],{"class":48,"line":34753},[46,64675,57267],{"class":56},[46,64677,19],{"class":1361},[46,64679,55451],{"class":169},[46,64681,79],{"class":56},[46,64683,64684],{"class":173},"\"time\"",[46,64686,64687],{"class":56},">2022-10-10 20:29:21\u003C\u002F",[46,64689,19],{"class":1361},[46,64691,53274],{"class":56},[46,64693,64694,64696,64698],{"class":48,"line":34769},[46,64695,57372],{"class":56},[46,64697,53578],{"class":1361},[46,64699,53274],{"class":56},[46,64701,64702,64704,64706],{"class":48,"line":34775},[46,64703,53743],{"class":56},[46,64705,53578],{"class":1361},[46,64707,53274],{"class":56},[46,64709,64710,64712,64714],{"class":48,"line":34789},[46,64711,54384],{"class":56},[46,64713,53578],{"class":1361},[46,64715,53274],{"class":56},[46,64717,64718,64720,64722],{"class":48,"line":34795},[46,64719,54111],{"class":56},[46,64721,53780],{"class":1361},[46,64723,53274],{"class":56},[46,64725,64726,64728,64731,64733,64735,64737,64739,64742],{"class":48,"line":34810},[46,64727,13225],{"class":52},[46,64729,64730],{"class":180}," tx",[46,64732,647],{"class":52},[46,64734,56361],{"class":56},[46,64736,56364],{"class":169},[46,64738,1152],{"class":56},[46,64740,64741],{"class":173},"'#tx'",[46,64743,459],{"class":56},[46,64745,64746,64748,64751,64753,64755,64757,64759,64762],{"class":48,"line":34816},[46,64747,13225],{"class":52},[46,64749,64750],{"class":180}," total",[46,64752,647],{"class":52},[46,64754,56361],{"class":56},[46,64756,56364],{"class":169},[46,64758,1152],{"class":56},[46,64760,64761],{"class":173},"'.total'",[46,64763,459],{"class":56},[46,64765,64766],{"class":48,"line":34825},[46,64767,64768],{"class":2253},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[46,64770,64771,64774,64776,64778,64780,64782,64784],{"class":48,"line":34831},[46,64772,64773],{"class":56},"    tx.",[46,64775,59778],{"class":169},[46,64777,1152],{"class":56},[46,64779,63292],{"class":173},[46,64781,448],{"class":56},[46,64783,56414],{"class":52},[46,64785,56417],{"class":56},[46,64787,64788,64791,64793],{"class":48,"line":34840},[46,64789,64790],{"class":56},"      total.style.opacity ",[46,64792,79],{"class":52},[46,64794,57664],{"class":180},[46,64796,64797],{"class":48,"line":34846},[46,64798,35434],{"class":56},[46,64800,64801],{"class":48,"line":34852},[46,64802,64803],{"class":2253},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[46,64805,64806,64808,64810,64812,64814,64816,64818],{"class":48,"line":34861},[46,64807,64773],{"class":56},[46,64809,59778],{"class":169},[46,64811,1152],{"class":56},[46,64813,63353],{"class":173},[46,64815,448],{"class":56},[46,64817,56414],{"class":52},[46,64819,56417],{"class":56},[46,64821,64822,64824,64826],{"class":48,"line":34867},[46,64823,64790],{"class":56},[46,64825,79],{"class":52},[46,64827,49301],{"class":180},[46,64829,64830],{"class":48,"line":34878},[46,64831,35434],{"class":56},[46,64833,64834],{"class":48,"line":34884},[46,64835,64836],{"class":2253},"    \u002F\u002F 3. 检测用户输入\n",[46,64838,64839,64841,64843,64845,64848,64850,64852],{"class":48,"line":34903},[46,64840,64773],{"class":56},[46,64842,59778],{"class":169},[46,64844,1152],{"class":56},[46,64846,64847],{"class":173},"'input'",[46,64849,448],{"class":56},[46,64851,56414],{"class":52},[46,64853,56417],{"class":56},[46,64855,64856],{"class":48,"line":34909},[46,64857,64858],{"class":2253},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[46,64860,64861,64864,64866,64869,64872,64874,64877,64879,64881],{"class":48,"line":34920},[46,64862,64863],{"class":56},"      total.innerHTML ",[46,64865,79],{"class":52},[46,64867,64868],{"class":173}," `${",[46,64870,64871],{"class":56},"tx",[46,64873,2744],{"class":173},[46,64875,64876],{"class":56},"value",[46,64878,2744],{"class":173},[46,64880,53935],{"class":180},[46,64882,64883],{"class":173},"}\u002F200字`\n",[46,64885,64886],{"class":48,"line":34926},[46,64887,35434],{"class":56},[46,64889,64890],{"class":48,"line":34946},[46,64891,616],{"emptyLinePlaceholder":615},[46,64893,64894],{"class":48,"line":34962},[46,64895,64896],{"class":2253},"    \u002F\u002F const str = 'andy'\n",[46,64898,64899],{"class":48,"line":34968},[46,64900,64901],{"class":2253},"    \u002F\u002F console.log(str.length)\n",[46,64903,64904,64906,64908],{"class":48,"line":34982},[46,64905,54384],{"class":56},[46,64907,53780],{"class":1361},[46,64909,53274],{"class":56},[46,64911,64912,64914,64916],{"class":48,"line":34988},[46,64913,53752],{"class":56},[46,64915,53767],{"class":1361},[46,64917,53274],{"class":56},[46,64919,64920],{"class":48,"line":34994},[46,64921,616],{"emptyLinePlaceholder":615},[46,64923,64924,64926,64928],{"class":48,"line":35005},[46,64925,53752],{"class":56},[46,64927,52603],{"class":1361},[46,64929,53274],{"class":56},[23999,64931,64933],{"id":64932},"_3254-change事件","3.2.5.4 change事件",[19,64935,64936],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[19,64938,64939],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[19,64941,64942],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[36,64944,64946],{"className":52601,"code":64945,"language":52603,"meta":41,"style":41},"\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",[43,64947,64948,64958,64972,64976,64984,64998,65018,65030,65038,65042,65050,65064,65072,65090,65108,65120,65124,65132,65140,65144],{"__ignoreMap":41},[46,64949,64950,64952,64954,64956],{"class":48,"line":49},[46,64951,53265],{"class":56},[46,64953,53268],{"class":1361},[46,64955,53271],{"class":169},[46,64957,53274],{"class":56},[46,64959,64960,64962,64964,64966,64968,64970],{"class":48,"line":60},[46,64961,821],{"class":56},[46,64963,52603],{"class":1361},[46,64965,53283],{"class":169},[46,64967,79],{"class":56},[46,64969,53288],{"class":173},[46,64971,53274],{"class":56},[46,64973,64974],{"class":48,"line":200},[46,64975,616],{"emptyLinePlaceholder":615},[46,64977,64978,64980,64982],{"class":48,"line":211},[46,64979,821],{"class":56},[46,64981,53301],{"class":1361},[46,64983,53274],{"class":56},[46,64985,64986,64988,64990,64992,64994,64996],{"class":48,"line":222},[46,64987,54111],{"class":56},[46,64989,53311],{"class":1361},[46,64991,53314],{"class":169},[46,64993,79],{"class":56},[46,64995,53319],{"class":173},[46,64997,53274],{"class":56},[46,64999,65000,65002,65004,65006,65008,65010,65012,65014,65016],{"class":48,"line":636},[46,65001,54111],{"class":56},[46,65003,53311],{"class":1361},[46,65005,1364],{"class":169},[46,65007,79],{"class":56},[46,65009,53358],{"class":173},[46,65011,53338],{"class":169},[46,65013,79],{"class":56},[46,65015,53365],{"class":173},[46,65017,53274],{"class":56},[46,65019,65020,65022,65024,65026,65028],{"class":48,"line":641},[46,65021,54111],{"class":56},[46,65023,53374],{"class":1361},[46,65025,53377],{"class":56},[46,65027,53374],{"class":1361},[46,65029,53274],{"class":56},[46,65031,65032,65034,65036],{"class":48,"line":653},[46,65033,53752],{"class":56},[46,65035,53301],{"class":1361},[46,65037,53274],{"class":56},[46,65039,65040],{"class":48,"line":659},[46,65041,616],{"emptyLinePlaceholder":615},[46,65043,65044,65046,65048],{"class":48,"line":665},[46,65045,821],{"class":56},[46,65047,53767],{"class":1361},[46,65049,53274],{"class":56},[46,65051,65052,65054,65056,65058,65060,65062],{"class":48,"line":670},[46,65053,54111],{"class":56},[46,65055,55786],{"class":1361},[46,65057,55789],{"class":169},[46,65059,79],{"class":56},[46,65061,64664],{"class":173},[46,65063,53274],{"class":56},[46,65065,65066,65068,65070],{"class":48,"line":676},[46,65067,54111],{"class":56},[46,65069,53780],{"class":1361},[46,65071,53274],{"class":56},[46,65073,65074,65076,65078,65080,65082,65084,65086,65088],{"class":48,"line":682},[46,65075,13225],{"class":52},[46,65077,62570],{"class":180},[46,65079,647],{"class":52},[46,65081,56361],{"class":56},[46,65083,56364],{"class":169},[46,65085,1152],{"class":56},[46,65087,64847],{"class":173},[46,65089,459],{"class":56},[46,65091,65092,65095,65097,65099,65102,65104,65106],{"class":48,"line":688},[46,65093,65094],{"class":56},"    input.",[46,65096,59778],{"class":169},[46,65098,1152],{"class":56},[46,65100,65101],{"class":173},"'change'",[46,65103,448],{"class":56},[46,65105,56414],{"class":52},[46,65107,56417],{"class":56},[46,65109,65110,65112,65114,65116,65118],{"class":48,"line":693},[46,65111,60209],{"class":56},[46,65113,60212],{"class":169},[46,65115,1152],{"class":56},[46,65117,2779],{"class":180},[46,65119,459],{"class":56},[46,65121,65122],{"class":48,"line":699},[46,65123,35434],{"class":56},[46,65125,65126,65128,65130],{"class":48,"line":705},[46,65127,54384],{"class":56},[46,65129,53780],{"class":1361},[46,65131,53274],{"class":56},[46,65133,65134,65136,65138],{"class":48,"line":711},[46,65135,53752],{"class":56},[46,65137,53767],{"class":1361},[46,65139,53274],{"class":56},[46,65141,65142],{"class":48,"line":717},[46,65143,616],{"emptyLinePlaceholder":615},[46,65145,65146,65148,65150],{"class":48,"line":723},[46,65147,53752],{"class":56},[46,65149,52603],{"class":1361},[46,65151,53274],{"class":56},[19,65153,65154],{},"总结：内容发生改变才回去触发",[479,65156,65158],{"id":65157},"_326-事件对象","3.2.6 事件对象",[23999,65160,65162],{"id":65161},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[19,65164,65165],{},[3514,65166],{"alt":41,"src":65167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[19,65169,65170],{},[3514,65171],{"alt":41,"src":65172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[19,65174,65175],{},"点击一次，就输出了事件对象，它是个对象",[19,65177,65178],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[19,65180,65181],{},[3514,65182],{"alt":41,"src":65183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[23999,65185,65187],{"id":65186},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[19,65189,65190],{},[3514,65191],{"alt":41,"src":65192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[19,65194,65195],{},"实现按特殊字符才是实现打印输出效果：",[36,65197,65199],{"className":1350,"code":65198,"language":1352,"meta":41,"style":41},"\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",[43,65200,65201,65209,65214,65228,65236,65241,65246,65251,65256,65261,65266,65271,65276,65281,65285,65289,65297],{"__ignoreMap":41},[46,65202,65203,65205,65207],{"class":48,"line":49},[46,65204,821],{"class":56},[46,65206,53767],{"class":1361},[46,65208,53274],{"class":56},[46,65210,65211],{"class":48,"line":60},[46,65212,65213],{"class":2253},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[46,65215,65216,65218,65220,65222,65224,65226],{"class":48,"line":200},[46,65217,54111],{"class":56},[46,65219,55786],{"class":1361},[46,65221,55789],{"class":169},[46,65223,79],{"class":56},[46,65225,64664],{"class":173},[46,65227,53274],{"class":56},[46,65229,65230,65232,65234],{"class":48,"line":211},[46,65231,54111],{"class":56},[46,65233,53780],{"class":1361},[46,65235,53274],{"class":56},[46,65237,65238],{"class":48,"line":222},[46,65239,65240],{"class":56},"    \u002F\u002F const btn = document.querySelector('button')\n",[46,65242,65243],{"class":48,"line":636},[46,65244,65245],{"class":56},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[46,65247,65248],{"class":48,"line":641},[46,65249,65250],{"class":56},"    \u002F\u002F   console.log(e);\n",[46,65252,65253],{"class":48,"line":653},[46,65254,65255],{"class":56},"    \u002F\u002F })\n",[46,65257,65258],{"class":48,"line":659},[46,65259,65260],{"class":56},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[46,65262,65263],{"class":48,"line":665},[46,65264,65265],{"class":56},"    const input = document.querySelector('input')\n",[46,65267,65268],{"class":48,"line":670},[46,65269,65270],{"class":56},"    input.addEventListener('keyup', function (e) {\n",[46,65272,65273],{"class":48,"line":676},[46,65274,65275],{"class":56},"      if (e.key === 'Enter') {\n",[46,65277,65278],{"class":48,"line":682},[46,65279,65280],{"class":56},"        console.log('我按下了回车键')\n",[46,65282,65283],{"class":48,"line":688},[46,65284,54365],{"class":56},[46,65286,65287],{"class":48,"line":693},[46,65288,35434],{"class":56},[46,65290,65291,65293,65295],{"class":48,"line":699},[46,65292,54384],{"class":56},[46,65294,53780],{"class":1361},[46,65296,53274],{"class":56},[46,65298,65299,65301,65303],{"class":48,"line":705},[46,65300,53752],{"class":56},[46,65302,53767],{"class":1361},[46,65304,53274],{"class":56},[23999,65306,65308],{"id":65307},"_3263-trim方法","3.2.6.3 trim方法",[19,65310,65311],{},[3514,65312],{"alt":41,"src":65313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[19,65315,65316],{},[3514,65317],{"alt":41,"src":65318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[19,65320,65321],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[19,65323,65324],{},"str.trim()",[479,65326,65328],{"id":65327},"_327-环境对象","3.2.7 环境对象",[19,65330,65331],{},[3514,65332],{"alt":41,"src":65333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[19,65335,65336],{},[3514,65337],{"alt":41,"src":65338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[19,65340,65341],{},[3514,65342],{"alt":41,"src":65343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[19,65345,65346],{},"实际函数调用是window.fn()",[19,65348,65349],{},"普通函数里面this指向的是window",[3191,65351,65352,65355,65358],{},[26,65353,65354],{},"在普通函数下，this指向的是window",[26,65356,65357],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[26,65359,65360],{},"箭头函数没有this",[19,65362,65363],{},"粗略记法就是：谁调用，this就指向谁",[19,65365,65366],{},[3514,65367],{"alt":41,"src":65368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[19,65370,65371],{},[3514,65372],{"alt":41,"src":65373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[19,65375,65376],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[19,65378,65379],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[36,65381,65383],{"className":1350,"code":65382,"language":1352,"meta":41,"style":41},"\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",[43,65384,65385,65393,65405,65413,65418,65423,65428,65433,65437,65445],{"__ignoreMap":41},[46,65386,65387,65389,65391],{"class":48,"line":49},[46,65388,821],{"class":56},[46,65390,53767],{"class":1361},[46,65392,53274],{"class":56},[46,65394,65395,65397,65399,65401,65403],{"class":48,"line":60},[46,65396,54111],{"class":56},[46,65398,55852],{"class":1361},[46,65400,55858],{"class":56},[46,65402,55852],{"class":1361},[46,65404,53274],{"class":56},[46,65406,65407,65409,65411],{"class":48,"line":200},[46,65408,54111],{"class":56},[46,65410,53780],{"class":1361},[46,65412,53274],{"class":56},[46,65414,65415],{"class":48,"line":211},[46,65416,65417],{"class":56},"    const button = document.querySelector('button')\n",[46,65419,65420],{"class":48,"line":222},[46,65421,65422],{"class":56},"    button.addEventListener('click', function () {\n",[46,65424,65425],{"class":48,"line":636},[46,65426,65427],{"class":56},"      \u002F\u002F console.log(this);\n",[46,65429,65430],{"class":48,"line":641},[46,65431,65432],{"class":56},"      this.style.color = 'pink'\n",[46,65434,65435],{"class":48,"line":653},[46,65436,35434],{"class":56},[46,65438,65439,65441,65443],{"class":48,"line":659},[46,65440,54384],{"class":56},[46,65442,53780],{"class":1361},[46,65444,53274],{"class":56},[46,65446,65447,65449,65451],{"class":48,"line":665},[46,65448,53752],{"class":56},[46,65450,53767],{"class":1361},[46,65452,53274],{"class":56},[479,65454,65456],{"id":65455},"_328-回调函数","3.2.8 回调函数",[19,65458,65459],{},[3514,65460],{"alt":41,"src":65461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[19,65463,65464],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[19,65466,13336],{},[3191,65468,65469,65472,65475],{},[26,65470,65471],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[26,65473,65474],{},"回调函数本质还是函数，只不过把它当成参数使用",[26,65476,65477],{},"使用匿名函数做为回调函数比较常见",[479,65479,65481],{"id":65480},"_329-tab栏切换","3.2.9 tab栏切换",[19,65483,65484],{},[3514,65485],{"alt":41,"src":65486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[36,65488,65490],{"className":52601,"code":65489,"language":52603,"meta":41,"style":41},"\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",[43,65491,65492,65502,65516,65520,65528,65542,65562,65582,65595,65603,65609,65619,65629,65633,65637,65644,65657,65670,65682,65698,65702,65706,65713,65725,65737,65749,65759,65769,65773,65777,65786,65798,65809,65821,65825,65829,65837,65847,65857,65867,65871,65875,65885,65899,65911,65915,65919,65931,65942,65959,65969,65973,65977,65992,66003,66013,66017,66021,66028,66043,66047,66051,66059,66069,66073,66077,66086,66096,66100,66108,66116,66120,66128,66143,66158,66171,66179,66213,66240,66267,66294,66321,66329,66337,66352,66389,66424,66459,66494,66529,66537,66545,66553,66558,66563,66583,66588,66617,66622,66627,66645,66650,66655,66660,66682,66687,66703,66707,66712,66717,66738,66743,66772,66776,66781,66785,66793,66801,66805],{"__ignoreMap":41},[46,65493,65494,65496,65498,65500],{"class":48,"line":49},[46,65495,53265],{"class":56},[46,65497,53268],{"class":1361},[46,65499,53271],{"class":169},[46,65501,53274],{"class":56},[46,65503,65504,65506,65508,65510,65512,65514],{"class":48,"line":60},[46,65505,821],{"class":56},[46,65507,52603],{"class":1361},[46,65509,53283],{"class":169},[46,65511,79],{"class":56},[46,65513,53288],{"class":173},[46,65515,53274],{"class":56},[46,65517,65518],{"class":48,"line":200},[46,65519,616],{"emptyLinePlaceholder":615},[46,65521,65522,65524,65526],{"class":48,"line":211},[46,65523,821],{"class":56},[46,65525,53301],{"class":1361},[46,65527,53274],{"class":56},[46,65529,65530,65532,65534,65536,65538,65540],{"class":48,"line":222},[46,65531,54111],{"class":56},[46,65533,53311],{"class":1361},[46,65535,53314],{"class":169},[46,65537,79],{"class":56},[46,65539,53319],{"class":173},[46,65541,61092],{"class":56},[46,65543,65544,65546,65548,65550,65552,65554,65556,65558,65560],{"class":48,"line":636},[46,65545,54111],{"class":56},[46,65547,53311],{"class":1361},[46,65549,53330],{"class":169},[46,65551,79],{"class":56},[46,65553,53335],{"class":173},[46,65555,53338],{"class":169},[46,65557,79],{"class":56},[46,65559,53343],{"class":173},[46,65561,61092],{"class":56},[46,65563,65564,65566,65568,65570,65572,65574,65576,65578,65580],{"class":48,"line":641},[46,65565,54111],{"class":56},[46,65567,53311],{"class":1361},[46,65569,1364],{"class":169},[46,65571,79],{"class":56},[46,65573,53358],{"class":173},[46,65575,53338],{"class":169},[46,65577,79],{"class":56},[46,65579,53365],{"class":173},[46,65581,61092],{"class":56},[46,65583,65584,65586,65588,65591,65593],{"class":48,"line":653},[46,65585,54111],{"class":56},[46,65587,53374],{"class":1361},[46,65589,65590],{"class":56},">tab栏切换\u003C\u002F",[46,65592,53374],{"class":1361},[46,65594,53274],{"class":56},[46,65596,65597,65599,65601],{"class":48,"line":659},[46,65598,54111],{"class":56},[46,65600,2098],{"class":1361},[46,65602,53274],{"class":56},[46,65604,65605,65607],{"class":48,"line":665},[46,65606,8416],{"class":1361},[46,65608,17573],{"class":56},[46,65610,65611,65613,65615,65617],{"class":48,"line":670},[46,65612,56671],{"class":180},[46,65614,53404],{"class":56},[46,65616,2379],{"class":180},[46,65618,3345],{"class":56},[46,65620,65621,65623,65625,65627],{"class":48,"line":676},[46,65622,56660],{"class":180},[46,65624,53404],{"class":56},[46,65626,2379],{"class":180},[46,65628,3345],{"class":56},[46,65630,65631],{"class":48,"line":682},[46,65632,4217],{"class":56},[46,65634,65635],{"class":48,"line":688},[46,65636,616],{"emptyLinePlaceholder":615},[46,65638,65639,65642],{"class":48,"line":693},[46,65640,65641],{"class":169},"    .tab",[46,65643,17573],{"class":56},[46,65645,65646,65648,65650,65653,65655],{"class":48,"line":699},[46,65647,56736],{"class":180},[46,65649,53404],{"class":56},[46,65651,65652],{"class":180},"590",[46,65654,53459],{"class":52},[46,65656,3345],{"class":56},[46,65658,65659,65661,65663,65666,65668],{"class":48,"line":705},[46,65660,56750],{"class":180},[46,65662,53404],{"class":56},[46,65664,65665],{"class":180},"340",[46,65667,53459],{"class":52},[46,65669,3345],{"class":56},[46,65671,65672,65674,65676,65678,65680],{"class":48,"line":711},[46,65673,56671],{"class":180},[46,65675,53404],{"class":56},[46,65677,2886],{"class":180},[46,65679,53459],{"class":52},[46,65681,3345],{"class":56},[46,65683,65684,65686,65688,65690,65692,65694,65696],{"class":48,"line":717},[46,65685,63942],{"class":180},[46,65687,53404],{"class":56},[46,65689,2405],{"class":180},[46,65691,53459],{"class":52},[46,65693,53488],{"class":180},[46,65695,64209],{"class":180},[46,65697,3345],{"class":56},[46,65699,65700],{"class":48,"line":723},[46,65701,4217],{"class":56},[46,65703,65704],{"class":48,"line":729},[46,65705,616],{"emptyLinePlaceholder":615},[46,65707,65708,65711],{"class":48,"line":735},[46,65709,65710],{"class":169},"    .tab-nav",[46,65712,17573],{"class":56},[46,65714,65715,65717,65719,65721,65723],{"class":48,"line":740},[46,65716,56736],{"class":180},[46,65718,53404],{"class":56},[46,65720,1155],{"class":180},[46,65722,2515],{"class":52},[46,65724,3345],{"class":56},[46,65726,65727,65729,65731,65733,65735],{"class":48,"line":745},[46,65728,56750],{"class":180},[46,65730,53404],{"class":56},[46,65732,3093],{"class":180},[46,65734,53459],{"class":52},[46,65736,3345],{"class":56},[46,65738,65739,65741,65743,65745,65747],{"class":48,"line":763},[46,65740,59324],{"class":180},[46,65742,53404],{"class":56},[46,65744,3093],{"class":180},[46,65746,53459],{"class":52},[46,65748,3345],{"class":56},[46,65750,65751,65753,65755,65757],{"class":48,"line":778},[46,65752,56974],{"class":180},[46,65754,53404],{"class":56},[46,65756,53444],{"class":180},[46,65758,3345],{"class":56},[46,65760,65761,65763,65765,65767],{"class":48,"line":789},[46,65762,56985],{"class":180},[46,65764,53404],{"class":56},[46,65766,53635],{"class":180},[46,65768,3345],{"class":56},[46,65770,65771],{"class":48,"line":794},[46,65772,4217],{"class":56},[46,65774,65775],{"class":48,"line":806},[46,65776,616],{"emptyLinePlaceholder":615},[46,65778,65779,65781,65784],{"class":48,"line":829},[46,65780,65710],{"class":169},[46,65782,65783],{"class":1361}," h3",[46,65785,17573],{"class":56},[46,65787,65788,65790,65792,65794,65796],{"class":48,"line":840},[46,65789,56887],{"class":180},[46,65791,53404],{"class":56},[46,65793,2986],{"class":180},[46,65795,53459],{"class":52},[46,65797,3345],{"class":56},[46,65799,65800,65802,65804,65807],{"class":48,"line":846},[46,65801,64299],{"class":180},[46,65803,53404],{"class":56},[46,65805,65806],{"class":180},"normal",[46,65808,3345],{"class":56},[46,65810,65811,65813,65815,65817,65819],{"class":48,"line":852},[46,65812,63965],{"class":180},[46,65814,53404],{"class":56},[46,65816,2886],{"class":180},[46,65818,53459],{"class":52},[46,65820,3345],{"class":56},[46,65822,65823],{"class":48,"line":857},[46,65824,4217],{"class":56},[46,65826,65827],{"class":48,"line":875},[46,65828,616],{"emptyLinePlaceholder":615},[46,65830,65831,65833,65835],{"class":48,"line":892},[46,65832,65710],{"class":169},[46,65834,63257],{"class":1361},[46,65836,17573],{"class":56},[46,65838,65839,65841,65843,65845],{"class":48,"line":898},[46,65840,56697],{"class":180},[46,65842,53404],{"class":56},[46,65844,56702],{"class":180},[46,65846,3345],{"class":56},[46,65848,65849,65851,65853,65855],{"class":48,"line":903},[46,65850,56974],{"class":180},[46,65852,53404],{"class":56},[46,65854,53444],{"class":180},[46,65856,3345],{"class":56},[46,65858,65859,65861,65863,65865],{"class":48,"line":908},[46,65860,56985],{"class":180},[46,65862,53404],{"class":56},[46,65864,53547],{"class":180},[46,65866,3345],{"class":56},[46,65868,65869],{"class":48,"line":925},[46,65870,4217],{"class":56},[46,65872,65873],{"class":48,"line":1238},[46,65874,616],{"emptyLinePlaceholder":615},[46,65876,65877,65879,65881,65883],{"class":48,"line":1251},[46,65878,65710],{"class":169},[46,65880,63257],{"class":1361},[46,65882,57040],{"class":1361},[46,65884,17573],{"class":56},[46,65886,65887,65889,65891,65893,65895,65897],{"class":48,"line":1256},[46,65888,56671],{"class":180},[46,65890,53404],{"class":56},[46,65892,2379],{"class":180},[46,65894,10954],{"class":180},[46,65896,53459],{"class":52},[46,65898,3345],{"class":56},[46,65900,65901,65903,65905,65907,65909],{"class":48,"line":1261},[46,65902,56887],{"class":180},[46,65904,53404],{"class":56},[46,65906,2735],{"class":180},[46,65908,53459],{"class":52},[46,65910,3345],{"class":56},[46,65912,65913],{"class":48,"line":1274},[46,65914,4217],{"class":56},[46,65916,65917],{"class":48,"line":10061},[46,65918,616],{"emptyLinePlaceholder":615},[46,65920,65921,65923,65925,65927,65929],{"class":48,"line":11720},[46,65922,65710],{"class":169},[46,65924,63257],{"class":1361},[46,65926,57040],{"class":1361},[46,65928,3450],{"class":1361},[46,65930,17573],{"class":56},[46,65932,65933,65936,65938,65940],{"class":48,"line":11745},[46,65934,65935],{"class":180},"      text-decoration",[46,65937,53404],{"class":56},[46,65939,56702],{"class":180},[46,65941,3345],{"class":56},[46,65943,65944,65946,65948,65950,65952,65954,65957],{"class":48,"line":11768},[46,65945,64197],{"class":180},[46,65947,53404],{"class":56},[46,65949,2272],{"class":180},[46,65951,53459],{"class":52},[46,65953,53488],{"class":180},[46,65955,65956],{"class":180}," transparent",[46,65958,3345],{"class":56},[46,65960,65961,65963,65965,65967],{"class":48,"line":11792},[46,65962,59381],{"class":180},[46,65964,53404],{"class":56},[46,65966,64334],{"class":180},[46,65968,3345],{"class":56},[46,65970,65971],{"class":48,"line":11797},[46,65972,4217],{"class":56},[46,65974,65975],{"class":48,"line":11802},[46,65976,616],{"emptyLinePlaceholder":615},[46,65978,65979,65981,65983,65985,65987,65990],{"class":48,"line":11807},[46,65980,65710],{"class":169},[46,65982,63257],{"class":1361},[46,65984,57040],{"class":1361},[46,65986,3450],{"class":1361},[46,65988,65989],{"class":169},".active",[46,65991,17573],{"class":56},[46,65993,65994,65996,65998,66001],{"class":48,"line":11816},[46,65995,63756],{"class":180},[46,65997,53404],{"class":56},[46,65999,66000],{"class":180},"#e1251b",[46,66002,3345],{"class":56},[46,66004,66005,66007,66009,66011],{"class":48,"line":11821},[46,66006,59381],{"class":180},[46,66008,53404],{"class":56},[46,66010,66000],{"class":180},[46,66012,3345],{"class":56},[46,66014,66015],{"class":48,"line":11827},[46,66016,4217],{"class":56},[46,66018,66019],{"class":48,"line":11848},[46,66020,616],{"emptyLinePlaceholder":615},[46,66022,66023,66026],{"class":48,"line":11854},[46,66024,66025],{"class":169},"    .tab-content",[46,66027,17573],{"class":56},[46,66029,66030,66032,66034,66036,66039,66041],{"class":48,"line":11868},[46,66031,56660],{"class":180},[46,66033,53404],{"class":56},[46,66035,2379],{"class":180},[46,66037,66038],{"class":180}," 16",[46,66040,53459],{"class":52},[46,66042,3345],{"class":56},[46,66044,66045],{"class":48,"line":11874},[46,66046,4217],{"class":56},[46,66048,66049],{"class":48,"line":11901},[46,66050,616],{"emptyLinePlaceholder":615},[46,66052,66053,66055,66057],{"class":48,"line":11910},[46,66054,66025],{"class":169},[46,66056,64139],{"class":169},[46,66058,17573],{"class":56},[46,66060,66061,66063,66065,66067],{"class":48,"line":11916},[46,66062,56974],{"class":180},[46,66064,53404],{"class":56},[46,66066,56702],{"class":180},[46,66068,3345],{"class":56},[46,66070,66071],{"class":48,"line":11924},[46,66072,4217],{"class":56},[46,66074,66075],{"class":48,"line":11929},[46,66076,616],{"emptyLinePlaceholder":615},[46,66078,66079,66081,66084],{"class":48,"line":18605},[46,66080,66025],{"class":169},[46,66082,66083],{"class":169}," .item.active",[46,66085,17573],{"class":56},[46,66087,66088,66090,66092,66094],{"class":48,"line":18611},[46,66089,56974],{"class":180},[46,66091,53404],{"class":56},[46,66093,62834],{"class":180},[46,66095,3345],{"class":56},[46,66097,66098],{"class":48,"line":18634},[46,66099,4217],{"class":56},[46,66101,66102,66104,66106],{"class":48,"line":18640},[46,66103,54384],{"class":56},[46,66105,2098],{"class":1361},[46,66107,53274],{"class":56},[46,66109,66110,66112,66114],{"class":48,"line":18663},[46,66111,53752],{"class":56},[46,66113,53301],{"class":1361},[46,66115,53274],{"class":56},[46,66117,66118],{"class":48,"line":18677},[46,66119,616],{"emptyLinePlaceholder":615},[46,66121,66122,66124,66126],{"class":48,"line":18697},[46,66123,821],{"class":56},[46,66125,53767],{"class":1361},[46,66127,53274],{"class":56},[46,66129,66130,66132,66134,66136,66138,66141],{"class":48,"line":18703},[46,66131,54111],{"class":56},[46,66133,53578],{"class":1361},[46,66135,55451],{"class":169},[46,66137,79],{"class":56},[46,66139,66140],{"class":173},"\"tab\"",[46,66142,53274],{"class":56},[46,66144,66145,66147,66149,66151,66153,66156],{"class":48,"line":18714},[46,66146,53308],{"class":56},[46,66148,53578],{"class":1361},[46,66150,55451],{"class":169},[46,66152,79],{"class":56},[46,66154,66155],{"class":173},"\"tab-nav\"",[46,66157,53274],{"class":56},[46,66159,66160,66162,66164,66167,66169],{"class":48,"line":18737},[46,66161,57199],{"class":56},[46,66163,479],{"class":1361},[46,66165,66166],{"class":56},">每日特价\u003C\u002F",[46,66168,479],{"class":1361},[46,66170,53274],{"class":56},[46,66172,66173,66175,66177],{"class":48,"line":18759},[46,66174,57199],{"class":56},[46,66176,3191],{"class":1361},[46,66178,53274],{"class":56},[46,66180,66181,66183,66185,66187,66189,66191,66193,66195,66197,66199,66202,66205,66207,66209,66211],{"class":48,"line":18764},[46,66182,57267],{"class":56},[46,66184,26],{"class":1361},[46,66186,63017],{"class":56},[46,66188,2426],{"class":1361},[46,66190,55451],{"class":169},[46,66192,79],{"class":56},[46,66194,61671],{"class":173},[46,66196,63022],{"class":169},[46,66198,79],{"class":56},[46,66200,66201],{"class":173},"\"javascript:;\"",[46,66203,66204],{"class":56},">精选\u003C\u002F",[46,66206,2426],{"class":1361},[46,66208,57279],{"class":56},[46,66210,26],{"class":1361},[46,66212,53274],{"class":56},[46,66214,66215,66217,66219,66221,66223,66225,66227,66229,66232,66234,66236,66238],{"class":48,"line":18770},[46,66216,57267],{"class":56},[46,66218,26],{"class":1361},[46,66220,63017],{"class":56},[46,66222,2426],{"class":1361},[46,66224,63022],{"class":169},[46,66226,79],{"class":56},[46,66228,66201],{"class":173},[46,66230,66231],{"class":56},">美食\u003C\u002F",[46,66233,2426],{"class":1361},[46,66235,57279],{"class":56},[46,66237,26],{"class":1361},[46,66239,53274],{"class":56},[46,66241,66242,66244,66246,66248,66250,66252,66254,66256,66259,66261,66263,66265],{"class":48,"line":18784},[46,66243,57267],{"class":56},[46,66245,26],{"class":1361},[46,66247,63017],{"class":56},[46,66249,2426],{"class":1361},[46,66251,63022],{"class":169},[46,66253,79],{"class":56},[46,66255,66201],{"class":173},[46,66257,66258],{"class":56},">百货\u003C\u002F",[46,66260,2426],{"class":1361},[46,66262,57279],{"class":56},[46,66264,26],{"class":1361},[46,66266,53274],{"class":56},[46,66268,66269,66271,66273,66275,66277,66279,66281,66283,66286,66288,66290,66292],{"class":48,"line":18797},[46,66270,57267],{"class":56},[46,66272,26],{"class":1361},[46,66274,63017],{"class":56},[46,66276,2426],{"class":1361},[46,66278,63022],{"class":169},[46,66280,79],{"class":56},[46,66282,66201],{"class":173},[46,66284,66285],{"class":56},">个护\u003C\u002F",[46,66287,2426],{"class":1361},[46,66289,57279],{"class":56},[46,66291,26],{"class":1361},[46,66293,53274],{"class":56},[46,66295,66296,66298,66300,66302,66304,66306,66308,66310,66313,66315,66317,66319],{"class":48,"line":18802},[46,66297,57267],{"class":56},[46,66299,26],{"class":1361},[46,66301,63017],{"class":56},[46,66303,2426],{"class":1361},[46,66305,63022],{"class":169},[46,66307,79],{"class":56},[46,66309,66201],{"class":173},[46,66311,66312],{"class":56},">预告\u003C\u002F",[46,66314,2426],{"class":1361},[46,66316,57279],{"class":56},[46,66318,26],{"class":1361},[46,66320,53274],{"class":56},[46,66322,66323,66325,66327],{"class":48,"line":18816},[46,66324,57372],{"class":56},[46,66326,3191],{"class":1361},[46,66328,53274],{"class":56},[46,66330,66331,66333,66335],{"class":48,"line":18821},[46,66332,53743],{"class":56},[46,66334,53578],{"class":1361},[46,66336,53274],{"class":56},[46,66338,66339,66341,66343,66345,66347,66350],{"class":48,"line":18827},[46,66340,53308],{"class":56},[46,66342,53578],{"class":1361},[46,66344,55451],{"class":169},[46,66346,79],{"class":56},[46,66348,66349],{"class":173},"\"tab-content\"",[46,66351,53274],{"class":56},[46,66353,66354,66356,66358,66360,66362,66365,66367,66369,66371,66373,66376,66378,66380,66382,66385,66387],{"class":48,"line":18832},[46,66355,57199],{"class":56},[46,66357,53578],{"class":1361},[46,66359,55451],{"class":169},[46,66361,79],{"class":56},[46,66363,66364],{"class":173},"\"item active\"",[46,66366,63017],{"class":56},[46,66368,3514],{"class":1361},[46,66370,57204],{"class":169},[46,66372,79],{"class":56},[46,66374,66375],{"class":173},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[46,66377,57212],{"class":169},[46,66379,79],{"class":56},[46,66381,9665],{"class":173},[46,66383,66384],{"class":56}," \u002F>\u003C\u002F",[46,66386,53578],{"class":1361},[46,66388,53274],{"class":56},[46,66390,66391,66393,66395,66397,66399,66401,66403,66405,66407,66409,66412,66414,66416,66418,66420,66422],{"class":48,"line":18846},[46,66392,57199],{"class":56},[46,66394,53578],{"class":1361},[46,66396,55451],{"class":169},[46,66398,79],{"class":56},[46,66400,64588],{"class":173},[46,66402,63017],{"class":56},[46,66404,3514],{"class":1361},[46,66406,57204],{"class":169},[46,66408,79],{"class":56},[46,66410,66411],{"class":173},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[46,66413,57212],{"class":169},[46,66415,79],{"class":56},[46,66417,9665],{"class":173},[46,66419,66384],{"class":56},[46,66421,53578],{"class":1361},[46,66423,53274],{"class":56},[46,66425,66426,66428,66430,66432,66434,66436,66438,66440,66442,66444,66447,66449,66451,66453,66455,66457],{"class":48,"line":18851},[46,66427,57199],{"class":56},[46,66429,53578],{"class":1361},[46,66431,55451],{"class":169},[46,66433,79],{"class":56},[46,66435,64588],{"class":173},[46,66437,63017],{"class":56},[46,66439,3514],{"class":1361},[46,66441,57204],{"class":169},[46,66443,79],{"class":56},[46,66445,66446],{"class":173},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[46,66448,57212],{"class":169},[46,66450,79],{"class":56},[46,66452,9665],{"class":173},[46,66454,66384],{"class":56},[46,66456,53578],{"class":1361},[46,66458,53274],{"class":56},[46,66460,66461,66463,66465,66467,66469,66471,66473,66475,66477,66479,66482,66484,66486,66488,66490,66492],{"class":48,"line":18856},[46,66462,57199],{"class":56},[46,66464,53578],{"class":1361},[46,66466,55451],{"class":169},[46,66468,79],{"class":56},[46,66470,64588],{"class":173},[46,66472,63017],{"class":56},[46,66474,3514],{"class":1361},[46,66476,57204],{"class":169},[46,66478,79],{"class":56},[46,66480,66481],{"class":173},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[46,66483,57212],{"class":169},[46,66485,79],{"class":56},[46,66487,9665],{"class":173},[46,66489,66384],{"class":56},[46,66491,53578],{"class":1361},[46,66493,53274],{"class":56},[46,66495,66496,66498,66500,66502,66504,66506,66508,66510,66512,66514,66517,66519,66521,66523,66525,66527],{"class":48,"line":18870},[46,66497,57199],{"class":56},[46,66499,53578],{"class":1361},[46,66501,55451],{"class":169},[46,66503,79],{"class":56},[46,66505,64588],{"class":173},[46,66507,63017],{"class":56},[46,66509,3514],{"class":1361},[46,66511,57204],{"class":169},[46,66513,79],{"class":56},[46,66515,66516],{"class":173},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[46,66518,57212],{"class":169},[46,66520,79],{"class":56},[46,66522,9665],{"class":173},[46,66524,66384],{"class":56},[46,66526,53578],{"class":1361},[46,66528,53274],{"class":56},[46,66530,66531,66533,66535],{"class":48,"line":18882},[46,66532,53743],{"class":56},[46,66534,53578],{"class":1361},[46,66536,53274],{"class":56},[46,66538,66539,66541,66543],{"class":48,"line":18887},[46,66540,54384],{"class":56},[46,66542,53578],{"class":1361},[46,66544,53274],{"class":56},[46,66546,66547,66549,66551],{"class":48,"line":18900},[46,66548,54111],{"class":56},[46,66550,53780],{"class":1361},[46,66552,53274],{"class":56},[46,66554,66555],{"class":48,"line":18905},[46,66556,66557],{"class":2253},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[46,66559,66560],{"class":48,"line":18910},[46,66561,66562],{"class":2253},"    \u002F\u002F 1.1 获取 a 元素 \n",[46,66564,66565,66567,66570,66572,66574,66576,66578,66581],{"class":48,"line":18915},[46,66566,13225],{"class":52},[46,66568,66569],{"class":180}," as",[46,66571,647],{"class":52},[46,66573,56361],{"class":56},[46,66575,57646],{"class":169},[46,66577,1152],{"class":56},[46,66579,66580],{"class":173},"'.tab-nav a'",[46,66582,459],{"class":56},[46,66584,66585],{"class":48,"line":18928},[46,66586,66587],{"class":2253},"    \u002F\u002F console.log(as) \n",[46,66589,66590,66592,66594,66596,66598,66600,66602,66604,66606,66609,66611,66613,66615],{"class":48,"line":18933},[46,66591,1140],{"class":52},[46,66593,3702],{"class":56},[46,66595,53814],{"class":52},[46,66597,11442],{"class":56},[46,66599,79],{"class":52},[46,66601,887],{"class":180},[46,66603,11449],{"class":56},[46,66605,821],{"class":52},[46,66607,66608],{"class":56}," as.",[46,66610,53935],{"class":180},[46,66612,5233],{"class":56},[46,66614,4321],{"class":52},[46,66616,14445],{"class":56},[46,66618,66619],{"class":48,"line":34607},[46,66620,66621],{"class":2253},"      \u002F\u002F console.log(as[i])\n",[46,66623,66624],{"class":48,"line":34613},[46,66625,66626],{"class":2253},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[46,66628,66629,66632,66634,66636,66639,66641,66643],{"class":48,"line":34619},[46,66630,66631],{"class":56},"      as[i].",[46,66633,59778],{"class":169},[46,66635,1152],{"class":56},[46,66637,66638],{"class":173},"'mouseenter'",[46,66640,448],{"class":56},[46,66642,56414],{"class":52},[46,66644,56417],{"class":56},[46,66646,66647],{"class":48,"line":34625},[46,66648,66649],{"class":2253},"        \u002F\u002F console.log('鼠标经过')\n",[46,66651,66652],{"class":48,"line":34631},[46,66653,66654],{"class":2253},"        \u002F\u002F 排他思想  \n",[46,66656,66657],{"class":48,"line":34642},[46,66658,66659],{"class":2253},"        \u002F\u002F 干掉别人 移除类active\n",[46,66661,66662,66664,66666,66668,66671,66673,66675,66677,66680],{"class":48,"line":34648},[46,66663,53892],{"class":56},[46,66665,56364],{"class":169},[46,66667,1152],{"class":56},[46,66669,66670],{"class":173},"'.tab-nav .active'",[46,66672,58968],{"class":56},[46,66674,58971],{"class":169},[46,66676,1152],{"class":56},[46,66678,66679],{"class":173},"'active'",[46,66681,459],{"class":56},[46,66683,66684],{"class":48,"line":34668},[46,66685,66686],{"class":2253},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[46,66688,66689,66692,66695,66697,66699,66701],{"class":48,"line":34674},[46,66690,66691],{"class":180},"        this",[46,66693,66694],{"class":56},".classList.",[46,66696,7347],{"class":169},[46,66698,1152],{"class":56},[46,66700,66679],{"class":173},[46,66702,459],{"class":56},[46,66704,66705],{"class":48,"line":34685},[46,66706,616],{"emptyLinePlaceholder":615},[46,66708,66709],{"class":48,"line":34691},[46,66710,66711],{"class":2253},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[46,66713,66714],{"class":48,"line":34697},[46,66715,66716],{"class":2253},"        \u002F\u002F 干掉别人\n",[46,66718,66719,66721,66723,66725,66728,66730,66732,66734,66736],{"class":48,"line":34703},[46,66720,53892],{"class":56},[46,66722,56364],{"class":169},[46,66724,1152],{"class":56},[46,66726,66727],{"class":173},"'.tab-content .active'",[46,66729,58968],{"class":56},[46,66731,58971],{"class":169},[46,66733,1152],{"class":56},[46,66735,66679],{"class":173},[46,66737,459],{"class":56},[46,66739,66740],{"class":48,"line":34709},[46,66741,66742],{"class":2253},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[46,66744,66745,66747,66749,66751,66754,66756,66758,66760,66762,66764,66766,66768,66770],{"class":48,"line":34715},[46,66746,53892],{"class":56},[46,66748,56364],{"class":169},[46,66750,1152],{"class":56},[46,66752,66753],{"class":173},"`.tab-content .item:nth-child(${",[46,66755,2628],{"class":56},[46,66757,47537],{"class":52},[46,66759,27110],{"class":180},[46,66761,58997],{"class":173},[46,66763,58968],{"class":56},[46,66765,7347],{"class":169},[46,66767,1152],{"class":56},[46,66769,66679],{"class":173},[46,66771,459],{"class":56},[46,66773,66774],{"class":48,"line":34721},[46,66775,616],{"emptyLinePlaceholder":615},[46,66777,66778],{"class":48,"line":34727},[46,66779,66780],{"class":56},"      })\n",[46,66782,66783],{"class":48,"line":34747},[46,66784,4217],{"class":56},[46,66786,66787,66789,66791],{"class":48,"line":34753},[46,66788,54384],{"class":56},[46,66790,53780],{"class":1361},[46,66792,53274],{"class":56},[46,66794,66795,66797,66799],{"class":48,"line":34769},[46,66796,53752],{"class":56},[46,66798,53767],{"class":1361},[46,66800,53274],{"class":56},[46,66802,66803],{"class":48,"line":34775},[46,66804,616],{"emptyLinePlaceholder":615},[46,66806,66807,66809,66811],{"class":48,"line":34789},[46,66808,53752],{"class":56},[46,66810,52603],{"class":1361},[46,66812,53274],{"class":56},[19,66814,66815],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[19,66817,66818],{},"在监听事件中，this指向的就是他的调用者",[19,66820,66821],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[19,66823,55685],{},[19,66825,66826],{},"(function () {",[19,66828,66829],{},"const list = document.querySelector('.xtx-elevator-list')",[19,66831,66832],{},"list.addEventListener('click', function (e) {",[19,66834,66835],{},"if (e.target.tagName === 'A') {",[19,66837,66838],{},"\u002F\u002F 排他思想",[19,66840,66841],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[19,66843,66844],{},"const old = document.querySelector('.xtx-elevator-list .active')",[19,66846,66847],{},"\u002F\u002F console.log(old);",[19,66849,66850],{},"\u002F\u002F 判断",[19,66852,66853],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[19,66855,66856],{},"if (old) old.classList.remove('active')",[19,66858,66859],{},"e.target.classList.add('active')",[19,66861,3131],{},[19,66863,54431],{},[19,66865,66866],{},"})();",[479,66868,66870],{"id":66869},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[36,66872,66874],{"className":52601,"code":66873,"language":52603,"meta":41,"style":41},"\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",[43,66875,66876,66886,66890,66898,66902,66916,66930,66942,66950,66956,66966,66976,66980,66984,66991,67003,67014,67031,67044,67058,67068,67072,67076,67083,67094,67112,67122,67134,67138,67142,67149,67166,67177,67189,67193,67197,67204,67216,67220,67228,67236,67240,67248,67256,67264,67279,67323,67331,67344,67357,67370,67378,67386,67394,67422,67430,67442,67455,67468,67476,67484,67492,67518,67526,67539,67551,67564,67572,67580,67588,67614,67622,67635,67647,67660,67668,67676,67684,67689,67709,67714,67734,67739,67756,67761,67769,67774,67803,67816,67820,67824,67829,67833,67861,67866,67883,67888,67893,67898,67903,67929,67933,67937,67945,67953,67957],{"__ignoreMap":41},[46,66877,66878,66880,66882,66884],{"class":48,"line":49},[46,66879,53265],{"class":56},[46,66881,53268],{"class":1361},[46,66883,53271],{"class":169},[46,66885,53274],{"class":56},[46,66887,66888],{"class":48,"line":60},[46,66889,616],{"emptyLinePlaceholder":615},[46,66891,66892,66894,66896],{"class":48,"line":200},[46,66893,821],{"class":56},[46,66895,52603],{"class":1361},[46,66897,53274],{"class":56},[46,66899,66900],{"class":48,"line":211},[46,66901,616],{"emptyLinePlaceholder":615},[46,66903,66904,66906,66908,66910,66912,66914],{"class":48,"line":222},[46,66905,821],{"class":56},[46,66907,53301],{"class":1361},[46,66909,53283],{"class":169},[46,66911,79],{"class":56},[46,66913,53288],{"class":173},[46,66915,53274],{"class":56},[46,66917,66918,66920,66922,66924,66926,66928],{"class":48,"line":636},[46,66919,54111],{"class":56},[46,66921,53311],{"class":1361},[46,66923,53314],{"class":169},[46,66925,79],{"class":56},[46,66927,53319],{"class":173},[46,66929,53274],{"class":56},[46,66931,66932,66934,66936,66938,66940],{"class":48,"line":641},[46,66933,54111],{"class":56},[46,66935,53374],{"class":1361},[46,66937,57279],{"class":56},[46,66939,53374],{"class":1361},[46,66941,53274],{"class":56},[46,66943,66944,66946,66948],{"class":48,"line":653},[46,66945,54111],{"class":56},[46,66947,2098],{"class":1361},[46,66949,53274],{"class":56},[46,66951,66952,66954],{"class":48,"line":659},[46,66953,8416],{"class":1361},[46,66955,17573],{"class":56},[46,66957,66958,66960,66962,66964],{"class":48,"line":665},[46,66959,56671],{"class":180},[46,66961,53404],{"class":56},[46,66963,2379],{"class":180},[46,66965,3345],{"class":56},[46,66967,66968,66970,66972,66974],{"class":48,"line":670},[46,66969,56660],{"class":180},[46,66971,53404],{"class":56},[46,66973,2379],{"class":180},[46,66975,3345],{"class":56},[46,66977,66978],{"class":48,"line":676},[46,66979,4217],{"class":56},[46,66981,66982],{"class":48,"line":682},[46,66983,616],{"emptyLinePlaceholder":615},[46,66985,66986,66989],{"class":48,"line":688},[46,66987,66988],{"class":1361},"    table",[46,66990,17573],{"class":56},[46,66992,66993,66996,66998,67001],{"class":48,"line":693},[46,66994,66995],{"class":180},"      border-collapse",[46,66997,53404],{"class":56},[46,66999,67000],{"class":180},"collapse",[46,67002,3345],{"class":56},[46,67004,67005,67008,67010,67012],{"class":48,"line":699},[46,67006,67007],{"class":180},"      border-spacing",[46,67009,53404],{"class":56},[46,67011,2379],{"class":180},[46,67013,3345],{"class":56},[46,67015,67016,67018,67020,67022,67024,67026,67029],{"class":48,"line":705},[46,67017,63942],{"class":180},[46,67019,53404],{"class":56},[46,67021,2405],{"class":180},[46,67023,53459],{"class":52},[46,67025,53488],{"class":180},[46,67027,67028],{"class":180}," #c0c0c0",[46,67030,3345],{"class":56},[46,67032,67033,67035,67037,67040,67042],{"class":48,"line":711},[46,67034,56736],{"class":180},[46,67036,53404],{"class":56},[46,67038,67039],{"class":180},"500",[46,67041,53459],{"class":52},[46,67043,3345],{"class":56},[46,67045,67046,67048,67050,67052,67054,67056],{"class":48,"line":717},[46,67047,56671],{"class":180},[46,67049,53404],{"class":56},[46,67051,1155],{"class":180},[46,67053,53459],{"class":52},[46,67055,53523],{"class":180},[46,67057,3345],{"class":56},[46,67059,67060,67062,67064,67066],{"class":48,"line":723},[46,67061,59251],{"class":180},[46,67063,53404],{"class":56},[46,67065,53559],{"class":180},[46,67067,3345],{"class":56},[46,67069,67070],{"class":48,"line":729},[46,67071,4217],{"class":56},[46,67073,67074],{"class":48,"line":735},[46,67075,616],{"emptyLinePlaceholder":615},[46,67077,67078,67081],{"class":48,"line":740},[46,67079,67080],{"class":1361},"    th",[46,67082,17573],{"class":56},[46,67084,67085,67087,67089,67092],{"class":48,"line":745},[46,67086,56849],{"class":180},[46,67088,53404],{"class":56},[46,67090,67091],{"class":180},"#09c",[46,67093,3345],{"class":56},[46,67095,67096,67099,67101,67103,67105,67107,67110],{"class":48,"line":763},[46,67097,67098],{"class":180},"      font",[46,67100,53404],{"class":56},[46,67102,64304],{"class":180},[46,67104,66038],{"class":180},[46,67106,53459],{"class":52},[46,67108,67109],{"class":173}," \"微软雅黑\"",[46,67111,3345],{"class":56},[46,67113,67114,67116,67118,67120],{"class":48,"line":778},[46,67115,59381],{"class":180},[46,67117,53404],{"class":56},[46,67119,62807],{"class":180},[46,67121,3345],{"class":56},[46,67123,67124,67126,67128,67130,67132],{"class":48,"line":789},[46,67125,56750],{"class":180},[46,67127,53404],{"class":56},[46,67129,2986],{"class":180},[46,67131,53459],{"class":52},[46,67133,3345],{"class":56},[46,67135,67136],{"class":48,"line":794},[46,67137,4217],{"class":56},[46,67139,67140],{"class":48,"line":806},[46,67141,616],{"emptyLinePlaceholder":615},[46,67143,67144,67147],{"class":48,"line":829},[46,67145,67146],{"class":1361},"    td",[46,67148,17573],{"class":56},[46,67150,67151,67153,67155,67157,67159,67161,67164],{"class":48,"line":840},[46,67152,63942],{"class":180},[46,67154,53404],{"class":56},[46,67156,2405],{"class":180},[46,67158,53459],{"class":52},[46,67160,53488],{"class":180},[46,67162,67163],{"class":180}," #d0d0d0",[46,67165,3345],{"class":56},[46,67167,67168,67170,67172,67175],{"class":48,"line":846},[46,67169,59381],{"class":180},[46,67171,53404],{"class":56},[46,67173,67174],{"class":180},"#404060",[46,67176,3345],{"class":56},[46,67178,67179,67181,67183,67185,67187],{"class":48,"line":852},[46,67180,56660],{"class":180},[46,67182,53404],{"class":56},[46,67184,2633],{"class":180},[46,67186,53459],{"class":52},[46,67188,3345],{"class":56},[46,67190,67191],{"class":48,"line":857},[46,67192,4217],{"class":56},[46,67194,67195],{"class":48,"line":875},[46,67196,616],{"emptyLinePlaceholder":615},[46,67198,67199,67202],{"class":48,"line":892},[46,67200,67201],{"class":169},"    .allCheck",[46,67203,17573],{"class":56},[46,67205,67206,67208,67210,67212,67214],{"class":48,"line":898},[46,67207,56736],{"class":180},[46,67209,53404],{"class":56},[46,67211,2798],{"class":180},[46,67213,53459],{"class":52},[46,67215,3345],{"class":56},[46,67217,67218],{"class":48,"line":903},[46,67219,4217],{"class":56},[46,67221,67222,67224,67226],{"class":48,"line":908},[46,67223,54384],{"class":56},[46,67225,2098],{"class":1361},[46,67227,53274],{"class":56},[46,67229,67230,67232,67234],{"class":48,"line":925},[46,67231,53752],{"class":56},[46,67233,53301],{"class":1361},[46,67235,53274],{"class":56},[46,67237,67238],{"class":48,"line":1238},[46,67239,616],{"emptyLinePlaceholder":615},[46,67241,67242,67244,67246],{"class":48,"line":1251},[46,67243,821],{"class":56},[46,67245,53767],{"class":1361},[46,67247,53274],{"class":56},[46,67249,67250,67252,67254],{"class":48,"line":1256},[46,67251,54111],{"class":56},[46,67253,97],{"class":1361},[46,67255,53274],{"class":56},[46,67257,67258,67260,67262],{"class":48,"line":1261},[46,67259,53308],{"class":56},[46,67261,103],{"class":1361},[46,67263,53274],{"class":56},[46,67265,67266,67268,67270,67272,67274,67277],{"class":48,"line":1274},[46,67267,57199],{"class":56},[46,67269,106],{"class":1361},[46,67271,55451],{"class":169},[46,67273,79],{"class":56},[46,67275,67276],{"class":173},"\"allCheck\"",[46,67278,53274],{"class":56},[46,67280,67281,67283,67285,67287,67289,67291,67293,67295,67297,67299,67301,67304,67307,67309,67311,67313,67316,67319,67321],{"class":48,"line":10061},[46,67282,57267],{"class":56},[46,67284,55786],{"class":1361},[46,67286,55789],{"class":169},[46,67288,79],{"class":56},[46,67290,55794],{"class":173},[46,67292,1364],{"class":169},[46,67294,79],{"class":56},[46,67296,9665],{"class":173},[46,67298,16960],{"class":169},[46,67300,79],{"class":56},[46,67302,67303],{"class":173},"\"checkAll\"",[46,67305,67306],{"class":56},"> \u003C",[46,67308,46],{"class":1361},[46,67310,55451],{"class":169},[46,67312,79],{"class":56},[46,67314,67315],{"class":173},"\"all\"",[46,67317,67318],{"class":56},">全选\u003C\u002F",[46,67320,46],{"class":1361},[46,67322,53274],{"class":56},[46,67324,67325,67327,67329],{"class":48,"line":11720},[46,67326,57372],{"class":56},[46,67328,106],{"class":1361},[46,67330,53274],{"class":56},[46,67332,67333,67335,67337,67340,67342],{"class":48,"line":11745},[46,67334,57199],{"class":56},[46,67336,106],{"class":1361},[46,67338,67339],{"class":56},">商品\u003C\u002F",[46,67341,106],{"class":1361},[46,67343,53274],{"class":56},[46,67345,67346,67348,67350,67353,67355],{"class":48,"line":11768},[46,67347,57199],{"class":56},[46,67349,106],{"class":1361},[46,67351,67352],{"class":56},">商家\u003C\u002F",[46,67354,106],{"class":1361},[46,67356,53274],{"class":56},[46,67358,67359,67361,67363,67366,67368],{"class":48,"line":11792},[46,67360,57199],{"class":56},[46,67362,106],{"class":1361},[46,67364,67365],{"class":56},">价格\u003C\u002F",[46,67367,106],{"class":1361},[46,67369,53274],{"class":56},[46,67371,67372,67374,67376],{"class":48,"line":11797},[46,67373,53743],{"class":56},[46,67375,103],{"class":1361},[46,67377,53274],{"class":56},[46,67379,67380,67382,67384],{"class":48,"line":11802},[46,67381,53308],{"class":56},[46,67383,103],{"class":1361},[46,67385,53274],{"class":56},[46,67387,67388,67390,67392],{"class":48,"line":11807},[46,67389,57199],{"class":56},[46,67391,125],{"class":1361},[46,67393,53274],{"class":56},[46,67395,67396,67398,67400,67402,67404,67406,67408,67410,67413,67415,67417,67420],{"class":48,"line":11816},[46,67397,57267],{"class":56},[46,67399,55786],{"class":1361},[46,67401,55789],{"class":169},[46,67403,79],{"class":56},[46,67405,55794],{"class":173},[46,67407,1364],{"class":169},[46,67409,79],{"class":56},[46,67411,67412],{"class":173},"\"check\"",[46,67414,55451],{"class":169},[46,67416,79],{"class":56},[46,67418,67419],{"class":173},"\"ck\"",[46,67421,53274],{"class":56},[46,67423,67424,67426,67428],{"class":48,"line":11821},[46,67425,57372],{"class":56},[46,67427,125],{"class":1361},[46,67429,53274],{"class":56},[46,67431,67432,67434,67436,67438,67440],{"class":48,"line":11827},[46,67433,57199],{"class":56},[46,67435,125],{"class":1361},[46,67437,63138],{"class":56},[46,67439,125],{"class":1361},[46,67441,53274],{"class":56},[46,67443,67444,67446,67448,67451,67453],{"class":48,"line":11848},[46,67445,57199],{"class":56},[46,67447,125],{"class":1361},[46,67449,67450],{"class":56},">小米\u003C\u002F",[46,67452,125],{"class":1361},[46,67454,53274],{"class":56},[46,67456,67457,67459,67461,67464,67466],{"class":48,"line":11854},[46,67458,57199],{"class":56},[46,67460,125],{"class":1361},[46,67462,67463],{"class":56},">￥1999\u003C\u002F",[46,67465,125],{"class":1361},[46,67467,53274],{"class":56},[46,67469,67470,67472,67474],{"class":48,"line":11868},[46,67471,53743],{"class":56},[46,67473,103],{"class":1361},[46,67475,53274],{"class":56},[46,67477,67478,67480,67482],{"class":48,"line":11874},[46,67479,53308],{"class":56},[46,67481,103],{"class":1361},[46,67483,53274],{"class":56},[46,67485,67486,67488,67490],{"class":48,"line":11901},[46,67487,57199],{"class":56},[46,67489,125],{"class":1361},[46,67491,53274],{"class":56},[46,67493,67494,67496,67498,67500,67502,67504,67506,67508,67510,67512,67514,67516],{"class":48,"line":11910},[46,67495,57267],{"class":56},[46,67497,55786],{"class":1361},[46,67499,55789],{"class":169},[46,67501,79],{"class":56},[46,67503,55794],{"class":173},[46,67505,1364],{"class":169},[46,67507,79],{"class":56},[46,67509,67412],{"class":173},[46,67511,55451],{"class":169},[46,67513,79],{"class":56},[46,67515,67419],{"class":173},[46,67517,53274],{"class":56},[46,67519,67520,67522,67524],{"class":48,"line":11916},[46,67521,57372],{"class":56},[46,67523,125],{"class":1361},[46,67525,53274],{"class":56},[46,67527,67528,67530,67532,67535,67537],{"class":48,"line":11924},[46,67529,57199],{"class":56},[46,67531,125],{"class":1361},[46,67533,67534],{"class":56},">小米净水器\u003C\u002F",[46,67536,125],{"class":1361},[46,67538,53274],{"class":56},[46,67540,67541,67543,67545,67547,67549],{"class":48,"line":11929},[46,67542,57199],{"class":56},[46,67544,125],{"class":1361},[46,67546,67450],{"class":56},[46,67548,125],{"class":1361},[46,67550,53274],{"class":56},[46,67552,67553,67555,67557,67560,67562],{"class":48,"line":18605},[46,67554,57199],{"class":56},[46,67556,125],{"class":1361},[46,67558,67559],{"class":56},">￥4999\u003C\u002F",[46,67561,125],{"class":1361},[46,67563,53274],{"class":56},[46,67565,67566,67568,67570],{"class":48,"line":18611},[46,67567,53743],{"class":56},[46,67569,103],{"class":1361},[46,67571,53274],{"class":56},[46,67573,67574,67576,67578],{"class":48,"line":18634},[46,67575,53308],{"class":56},[46,67577,103],{"class":1361},[46,67579,53274],{"class":56},[46,67581,67582,67584,67586],{"class":48,"line":18640},[46,67583,57199],{"class":56},[46,67585,125],{"class":1361},[46,67587,53274],{"class":56},[46,67589,67590,67592,67594,67596,67598,67600,67602,67604,67606,67608,67610,67612],{"class":48,"line":18663},[46,67591,57267],{"class":56},[46,67593,55786],{"class":1361},[46,67595,55789],{"class":169},[46,67597,79],{"class":56},[46,67599,55794],{"class":173},[46,67601,1364],{"class":169},[46,67603,79],{"class":56},[46,67605,67412],{"class":173},[46,67607,55451],{"class":169},[46,67609,79],{"class":56},[46,67611,67419],{"class":173},[46,67613,53274],{"class":56},[46,67615,67616,67618,67620],{"class":48,"line":18677},[46,67617,57372],{"class":56},[46,67619,125],{"class":1361},[46,67621,53274],{"class":56},[46,67623,67624,67626,67628,67631,67633],{"class":48,"line":18697},[46,67625,57199],{"class":56},[46,67627,125],{"class":1361},[46,67629,67630],{"class":56},">小米电视\u003C\u002F",[46,67632,125],{"class":1361},[46,67634,53274],{"class":56},[46,67636,67637,67639,67641,67643,67645],{"class":48,"line":18703},[46,67638,57199],{"class":56},[46,67640,125],{"class":1361},[46,67642,67450],{"class":56},[46,67644,125],{"class":1361},[46,67646,53274],{"class":56},[46,67648,67649,67651,67653,67656,67658],{"class":48,"line":18714},[46,67650,57199],{"class":56},[46,67652,125],{"class":1361},[46,67654,67655],{"class":56},">￥5999\u003C\u002F",[46,67657,125],{"class":1361},[46,67659,53274],{"class":56},[46,67661,67662,67664,67666],{"class":48,"line":18737},[46,67663,53743],{"class":56},[46,67665,103],{"class":1361},[46,67667,53274],{"class":56},[46,67669,67670,67672,67674],{"class":48,"line":18759},[46,67671,54384],{"class":56},[46,67673,97],{"class":1361},[46,67675,53274],{"class":56},[46,67677,67678,67680,67682],{"class":48,"line":18764},[46,67679,54111],{"class":56},[46,67681,53780],{"class":1361},[46,67683,53274],{"class":56},[46,67685,67686],{"class":48,"line":18770},[46,67687,67688],{"class":2253},"    \u002F\u002F 1. 获取大复选框\n",[46,67690,67691,67693,67696,67698,67700,67702,67704,67707],{"class":48,"line":18784},[46,67692,13225],{"class":52},[46,67694,67695],{"class":180}," checkAll",[46,67697,647],{"class":52},[46,67699,56361],{"class":56},[46,67701,56364],{"class":169},[46,67703,1152],{"class":56},[46,67705,67706],{"class":173},"'#checkAll'",[46,67708,459],{"class":56},[46,67710,67711],{"class":48,"line":18797},[46,67712,67713],{"class":2253},"    \u002F\u002F 2. 获取所有的小复选框\n",[46,67715,67716,67718,67721,67723,67725,67727,67729,67732],{"class":48,"line":18802},[46,67717,13225],{"class":52},[46,67719,67720],{"class":180}," cks",[46,67722,647],{"class":52},[46,67724,56361],{"class":56},[46,67726,57646],{"class":169},[46,67728,1152],{"class":56},[46,67730,67731],{"class":173},"'.ck'",[46,67733,459],{"class":56},[46,67735,67736],{"class":48,"line":18816},[46,67737,67738],{"class":2253},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[46,67740,67741,67744,67746,67748,67750,67752,67754],{"class":48,"line":18821},[46,67742,67743],{"class":56},"    checkAll.",[46,67745,59778],{"class":169},[46,67747,1152],{"class":56},[46,67749,59783],{"class":173},[46,67751,448],{"class":56},[46,67753,56414],{"class":52},[46,67755,56417],{"class":56},[46,67757,67758],{"class":48,"line":18827},[46,67759,67760],{"class":2253},"      \u002F\u002F 得到当前大复选框的选中状态\n",[46,67762,67763,67766],{"class":48,"line":18832},[46,67764,67765],{"class":2253},"      \u002F\u002F console.log(checkAll.checked)",[46,67767,67768],{"class":2253},"  \u002F\u002F 得到 是 true 或者是 false\n",[46,67770,67771],{"class":48,"line":18846},[46,67772,67773],{"class":2253},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[46,67775,67776,67778,67780,67782,67784,67786,67788,67790,67792,67795,67797,67799,67801],{"class":48,"line":18851},[46,67777,54251],{"class":52},[46,67779,3702],{"class":56},[46,67781,53814],{"class":52},[46,67783,11442],{"class":56},[46,67785,79],{"class":52},[46,67787,887],{"class":180},[46,67789,11449],{"class":56},[46,67791,821],{"class":52},[46,67793,67794],{"class":56}," cks.",[46,67796,53935],{"class":180},[46,67798,5233],{"class":56},[46,67800,4321],{"class":52},[46,67802,14445],{"class":56},[46,67804,67805,67808,67810,67813],{"class":48,"line":18856},[46,67806,67807],{"class":56},"        cks[i].checked ",[46,67809,79],{"class":52},[46,67811,67812],{"class":180}," this",[46,67814,67815],{"class":56},".checked\n",[46,67817,67818],{"class":48,"line":18870},[46,67819,54365],{"class":56},[46,67821,67822],{"class":48,"line":18882},[46,67823,35434],{"class":56},[46,67825,67826],{"class":48,"line":18887},[46,67827,67828],{"class":2253},"    \u002F\u002F 5. 小复选框控制大复选框\n",[46,67830,67831],{"class":48,"line":18900},[46,67832,616],{"emptyLinePlaceholder":615},[46,67834,67835,67837,67839,67841,67843,67845,67847,67849,67851,67853,67855,67857,67859],{"class":48,"line":18905},[46,67836,1140],{"class":52},[46,67838,3702],{"class":56},[46,67840,53814],{"class":52},[46,67842,11442],{"class":56},[46,67844,79],{"class":52},[46,67846,887],{"class":180},[46,67848,11449],{"class":56},[46,67850,821],{"class":52},[46,67852,67794],{"class":56},[46,67854,53935],{"class":180},[46,67856,5233],{"class":56},[46,67858,4321],{"class":52},[46,67860,14445],{"class":56},[46,67862,67863],{"class":48,"line":18910},[46,67864,67865],{"class":2253},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[46,67867,67868,67871,67873,67875,67877,67879,67881],{"class":48,"line":18915},[46,67869,67870],{"class":56},"      cks[i].",[46,67872,59778],{"class":169},[46,67874,1152],{"class":56},[46,67876,59783],{"class":173},[46,67878,448],{"class":56},[46,67880,56414],{"class":52},[46,67882,56417],{"class":56},[46,67884,67885],{"class":48,"line":18928},[46,67886,67887],{"class":2253},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[46,67889,67890],{"class":48,"line":18933},[46,67891,67892],{"class":2253},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[46,67894,67895],{"class":48,"line":34607},[46,67896,67897],{"class":2253},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[46,67899,67900],{"class":48,"line":34613},[46,67901,67902],{"class":2253},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[46,67904,67905,67908,67910,67912,67914,67916,67919,67921,67923,67925,67927],{"class":48,"line":34619},[46,67906,67907],{"class":56},"        checkAll.checked ",[46,67909,79],{"class":52},[46,67911,56361],{"class":56},[46,67913,57646],{"class":169},[46,67915,1152],{"class":56},[46,67917,67918],{"class":173},"'.ck:checked'",[46,67920,32806],{"class":56},[46,67922,53935],{"class":180},[46,67924,59871],{"class":52},[46,67926,67794],{"class":56},[46,67928,57796],{"class":180},[46,67930,67931],{"class":48,"line":34625},[46,67932,66780],{"class":56},[46,67934,67935],{"class":48,"line":34631},[46,67936,4217],{"class":56},[46,67938,67939,67941,67943],{"class":48,"line":34642},[46,67940,54384],{"class":56},[46,67942,53780],{"class":1361},[46,67944,53274],{"class":56},[46,67946,67947,67949,67951],{"class":48,"line":34648},[46,67948,53752],{"class":56},[46,67950,53767],{"class":1361},[46,67952,53274],{"class":56},[46,67954,67955],{"class":48,"line":34668},[46,67956,616],{"emptyLinePlaceholder":615},[46,67958,67959,67961,67963],{"class":48,"line":34674},[46,67960,53752],{"class":56},[46,67962,52603],{"class":1361},[46,67964,53274],{"class":56},[19,67966,67967],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[19,67969,67970],{},"用好之间比较得到的布尔值！！！",[19,67972,67973,67974,67977,67978,3702,67981,2770,67983,67986],{},"在 JS 里访问的时候，",[43,67975,67976],{},"checkbox.checked"," 是一个 ",[2339,67979,67980],{},"布尔值",[43,67982,3414],{},[43,67984,67985],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[19,67988,67989,67990,67993,67994],{},"HTML 的 ",[43,67991,67992],{},"checked=\"checked\""," 只是 ",[2339,67995,67996,67997,68000],{},"初始值；JS 的 ",[43,67998,67999],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[19,68002,68003],{},"：checked是一个伪类选择器",[19,68005,68006],{},[3514,68007],{"alt":41,"src":68008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[19,68010,68011,68014],{},[68012,68013],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[19,68016,68017],{},[3514,68018],{"alt":41,"src":68019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,68021,68023],{"id":68022},"_33-dom事件进阶","3.3 DOM事件进阶",[479,68025,68027],{"id":68026},"_331-事件流","3.3.1 事件流",[19,68029,68030],{},[3514,68031],{"alt":41,"src":68032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[23999,68034,68036],{"id":68035},"_3311-事件捕获","3.3.1.1 事件捕获",[19,68038,68039],{},[3514,68040],{"alt":41,"src":68041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[36,68043,68045],{"className":52601,"code":68044,"language":52603,"meta":41,"style":41},"\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",[43,68046,68047,68057,68071,68075,68083,68097,68117,68129,68137,68144,68156,68168,68178,68182,68186,68193,68205,68217,68227,68231,68239,68247,68251,68259,68274,68293,68301,68309,68329,68349,68365,68376,68384,68401,68412,68420,68437,68448,68456,68464,68472,68476],{"__ignoreMap":41},[46,68048,68049,68051,68053,68055],{"class":48,"line":49},[46,68050,53265],{"class":56},[46,68052,53268],{"class":1361},[46,68054,53271],{"class":169},[46,68056,53274],{"class":56},[46,68058,68059,68061,68063,68065,68067,68069],{"class":48,"line":60},[46,68060,821],{"class":56},[46,68062,52603],{"class":1361},[46,68064,53283],{"class":169},[46,68066,79],{"class":56},[46,68068,53288],{"class":173},[46,68070,53274],{"class":56},[46,68072,68073],{"class":48,"line":200},[46,68074,616],{"emptyLinePlaceholder":615},[46,68076,68077,68079,68081],{"class":48,"line":211},[46,68078,821],{"class":56},[46,68080,53301],{"class":1361},[46,68082,53274],{"class":56},[46,68084,68085,68087,68089,68091,68093,68095],{"class":48,"line":222},[46,68086,54111],{"class":56},[46,68088,53311],{"class":1361},[46,68090,53314],{"class":169},[46,68092,79],{"class":56},[46,68094,53319],{"class":173},[46,68096,53274],{"class":56},[46,68098,68099,68101,68103,68105,68107,68109,68111,68113,68115],{"class":48,"line":636},[46,68100,54111],{"class":56},[46,68102,53311],{"class":1361},[46,68104,1364],{"class":169},[46,68106,79],{"class":56},[46,68108,53358],{"class":173},[46,68110,53338],{"class":169},[46,68112,79],{"class":56},[46,68114,53365],{"class":173},[46,68116,53274],{"class":56},[46,68118,68119,68121,68123,68125,68127],{"class":48,"line":641},[46,68120,54111],{"class":56},[46,68122,53374],{"class":1361},[46,68124,53377],{"class":56},[46,68126,53374],{"class":1361},[46,68128,53274],{"class":56},[46,68130,68131,68133,68135],{"class":48,"line":653},[46,68132,54111],{"class":56},[46,68134,2098],{"class":1361},[46,68136,53274],{"class":56},[46,68138,68139,68142],{"class":48,"line":659},[46,68140,68141],{"class":169},"    .father",[46,68143,17573],{"class":56},[46,68145,68146,68148,68150,68152,68154],{"class":48,"line":665},[46,68147,56736],{"class":180},[46,68149,53404],{"class":56},[46,68151,67039],{"class":180},[46,68153,53459],{"class":52},[46,68155,3345],{"class":56},[46,68157,68158,68160,68162,68164,68166],{"class":48,"line":670},[46,68159,56750],{"class":180},[46,68161,53404],{"class":56},[46,68163,67039],{"class":180},[46,68165,53459],{"class":52},[46,68167,3345],{"class":56},[46,68169,68170,68172,68174,68176],{"class":48,"line":676},[46,68171,56849],{"class":180},[46,68173,53404],{"class":56},[46,68175,53612],{"class":180},[46,68177,3345],{"class":56},[46,68179,68180],{"class":48,"line":682},[46,68181,4217],{"class":56},[46,68183,68184],{"class":48,"line":688},[46,68185,616],{"emptyLinePlaceholder":615},[46,68187,68188,68191],{"class":48,"line":693},[46,68189,68190],{"class":169},"    .son",[46,68192,17573],{"class":56},[46,68194,68195,68197,68199,68201,68203],{"class":48,"line":699},[46,68196,56736],{"class":180},[46,68198,53404],{"class":56},[46,68200,3762],{"class":180},[46,68202,53459],{"class":52},[46,68204,3345],{"class":56},[46,68206,68207,68209,68211,68213,68215],{"class":48,"line":705},[46,68208,56750],{"class":180},[46,68210,53404],{"class":56},[46,68212,3762],{"class":180},[46,68214,53459],{"class":52},[46,68216,3345],{"class":56},[46,68218,68219,68221,68223,68225],{"class":48,"line":711},[46,68220,56849],{"class":180},[46,68222,53404],{"class":56},[46,68224,56854],{"class":180},[46,68226,3345],{"class":56},[46,68228,68229],{"class":48,"line":717},[46,68230,4217],{"class":56},[46,68232,68233,68235,68237],{"class":48,"line":723},[46,68234,54384],{"class":56},[46,68236,2098],{"class":1361},[46,68238,53274],{"class":56},[46,68240,68241,68243,68245],{"class":48,"line":729},[46,68242,53752],{"class":56},[46,68244,53301],{"class":1361},[46,68246,53274],{"class":56},[46,68248,68249],{"class":48,"line":735},[46,68250,616],{"emptyLinePlaceholder":615},[46,68252,68253,68255,68257],{"class":48,"line":740},[46,68254,821],{"class":56},[46,68256,53767],{"class":1361},[46,68258,53274],{"class":56},[46,68260,68261,68263,68265,68267,68269,68272],{"class":48,"line":745},[46,68262,54111],{"class":56},[46,68264,53578],{"class":1361},[46,68266,55451],{"class":169},[46,68268,79],{"class":56},[46,68270,68271],{"class":173},"\"father\"",[46,68273,53274],{"class":56},[46,68275,68276,68278,68280,68282,68284,68287,68289,68291],{"class":48,"line":763},[46,68277,53308],{"class":56},[46,68279,53578],{"class":1361},[46,68281,55451],{"class":169},[46,68283,79],{"class":56},[46,68285,68286],{"class":173},"\"son\"",[46,68288,57279],{"class":56},[46,68290,53578],{"class":1361},[46,68292,53274],{"class":56},[46,68294,68295,68297,68299],{"class":48,"line":778},[46,68296,54384],{"class":56},[46,68298,53578],{"class":1361},[46,68300,53274],{"class":56},[46,68302,68303,68305,68307],{"class":48,"line":789},[46,68304,54111],{"class":56},[46,68306,53780],{"class":1361},[46,68308,53274],{"class":56},[46,68310,68311,68313,68316,68318,68320,68322,68324,68327],{"class":48,"line":794},[46,68312,13225],{"class":52},[46,68314,68315],{"class":180}," fa",[46,68317,647],{"class":52},[46,68319,56361],{"class":56},[46,68321,56364],{"class":169},[46,68323,1152],{"class":56},[46,68325,68326],{"class":173},"'.father'",[46,68328,459],{"class":56},[46,68330,68331,68333,68336,68338,68340,68342,68344,68347],{"class":48,"line":806},[46,68332,13225],{"class":52},[46,68334,68335],{"class":180}," son",[46,68337,647],{"class":52},[46,68339,56361],{"class":56},[46,68341,56364],{"class":169},[46,68343,1152],{"class":56},[46,68345,68346],{"class":173},"'.son'",[46,68348,459],{"class":56},[46,68350,68351,68353,68355,68357,68359,68361,68363],{"class":48,"line":829},[46,68352,54374],{"class":56},[46,68354,59778],{"class":169},[46,68356,1152],{"class":56},[46,68358,59783],{"class":173},[46,68360,448],{"class":56},[46,68362,56414],{"class":52},[46,68364,56417],{"class":56},[46,68366,68367,68369,68371,68374],{"class":48,"line":840},[46,68368,60890],{"class":169},[46,68370,1152],{"class":56},[46,68372,68373],{"class":173},"'woshiu1'",[46,68375,459],{"class":56},[46,68377,68378,68380,68382],{"class":48,"line":846},[46,68379,56500],{"class":56},[46,68381,3414],{"class":180},[46,68383,459],{"class":56},[46,68385,68386,68389,68391,68393,68395,68397,68399],{"class":48,"line":852},[46,68387,68388],{"class":56},"    fa.",[46,68390,59778],{"class":169},[46,68392,1152],{"class":56},[46,68394,59783],{"class":173},[46,68396,448],{"class":56},[46,68398,56414],{"class":52},[46,68400,56417],{"class":56},[46,68402,68403,68405,68407,68410],{"class":48,"line":857},[46,68404,60890],{"class":169},[46,68406,1152],{"class":56},[46,68408,68409],{"class":173},"'1'",[46,68411,459],{"class":56},[46,68413,68414,68416,68418],{"class":48,"line":875},[46,68415,56500],{"class":56},[46,68417,3414],{"class":180},[46,68419,459],{"class":56},[46,68421,68422,68425,68427,68429,68431,68433,68435],{"class":48,"line":892},[46,68423,68424],{"class":56},"    son.",[46,68426,59778],{"class":169},[46,68428,1152],{"class":56},[46,68430,59783],{"class":173},[46,68432,448],{"class":56},[46,68434,56414],{"class":52},[46,68436,56417],{"class":56},[46,68438,68439,68441,68443,68446],{"class":48,"line":898},[46,68440,60890],{"class":169},[46,68442,1152],{"class":56},[46,68444,68445],{"class":173},"'2'",[46,68447,459],{"class":56},[46,68449,68450,68452,68454],{"class":48,"line":903},[46,68451,56500],{"class":56},[46,68453,3414],{"class":180},[46,68455,459],{"class":56},[46,68457,68458,68460,68462],{"class":48,"line":908},[46,68459,54384],{"class":56},[46,68461,53780],{"class":1361},[46,68463,53274],{"class":56},[46,68465,68466,68468,68470],{"class":48,"line":925},[46,68467,53752],{"class":56},[46,68469,53767],{"class":1361},[46,68471,53274],{"class":56},[46,68473,68474],{"class":48,"line":1238},[46,68475,616],{"emptyLinePlaceholder":615},[46,68477,68478,68480,68482],{"class":48,"line":1251},[46,68479,53752],{"class":56},[46,68481,52603],{"class":1361},[46,68483,53274],{"class":56},[19,68485,68486],{},[3514,68487],{"alt":41,"src":68488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[19,68490,68491],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[23999,68493,68495],{"id":68494},"_3312-事件冒泡","3.3.1.2 事件冒泡",[19,68497,68498],{},[3514,68499],{"alt":41,"src":68500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[19,68502,68503],{},"反着来",[19,68505,68506],{},"注意是同名事件，比如都是‘click’",[23999,68508,68510],{"id":68509},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[19,68512,68513],{},[3514,68514],{"alt":41,"src":68515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[23999,68517,68519],{"id":68518},"_3314-解绑事件","3.3.1.4 解绑事件",[19,68521,68522],{},[3514,68523],{"alt":41,"src":68524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[19,68526,68527],{},[3514,68528],{"alt":41,"src":68529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[23999,68531,68533],{"id":68532},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[23,68535,68536],{},[26,68537,68538],{},"事件类型的区别",[19,68540,68541],{},[3514,68542],{"alt":41,"src":68543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[19,68545,68546],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[23,68548,68549],{"start":60},[26,68550,68551],{},"注册事件的区别",[19,68553,68554],{},[3514,68555],{"alt":41,"src":68556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[23999,68558,68560],{"id":68559},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[19,68562,68563],{},[3514,68564],{"alt":41,"src":68565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[19,68567,68568],{},[3514,68569],{"alt":41,"src":68570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[36,68572,68574],{"className":1350,"code":68573,"language":1352,"meta":41,"style":41},"\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",[43,68575,68576,68584,68601,68624,68632,68637,68642,68647,68651,68659,68667],{"__ignoreMap":41},[46,68577,68578,68580,68582],{"class":48,"line":49},[46,68579,821],{"class":56},[46,68581,53767],{"class":1361},[46,68583,53274],{"class":56},[46,68585,68586,68588,68591,68594,68596,68599],{"class":48,"line":60},[46,68587,54111],{"class":56},[46,68589,68590],{"class":1361},"form",[46,68592,68593],{"class":169}," action",[46,68595,79],{"class":56},[46,68597,68598],{"class":173},"\"http:\u002F\u002Fwww.itcast.cn\"",[46,68600,53274],{"class":56},[46,68602,68603,68605,68607,68609,68611,68614,68617,68619,68622],{"class":48,"line":200},[46,68604,53308],{"class":56},[46,68606,55786],{"class":1361},[46,68608,55789],{"class":169},[46,68610,79],{"class":56},[46,68612,68613],{"class":173},"\"submit\"",[46,68615,68616],{"class":169}," value",[46,68618,79],{"class":56},[46,68620,68621],{"class":173},"\"免费注册\"",[46,68623,53274],{"class":56},[46,68625,68626,68628,68630],{"class":48,"line":211},[46,68627,53308],{"class":56},[46,68629,53780],{"class":1361},[46,68631,53274],{"class":56},[46,68633,68634],{"class":48,"line":222},[46,68635,68636],{"class":56},"      const form = document.querySelector('form')\n",[46,68638,68639],{"class":48,"line":636},[46,68640,68641],{"class":56},"      form.addEventListener('submit', function (e) {\n",[46,68643,68644],{"class":48,"line":641},[46,68645,68646],{"class":56},"        e.preventDefault()\n",[46,68648,68649],{"class":48,"line":653},[46,68650,66780],{"class":56},[46,68652,68653,68655,68657],{"class":48,"line":659},[46,68654,53743],{"class":56},[46,68656,53780],{"class":1361},[46,68658,53274],{"class":56},[46,68660,68661,68663,68665],{"class":48,"line":665},[46,68662,54384],{"class":56},[46,68664,68590],{"class":1361},[46,68666,53274],{"class":56},[46,68668,68669,68671,68673],{"class":48,"line":670},[46,68670,53752],{"class":56},[46,68672,53767],{"class":1361},[46,68674,53274],{"class":56},[19,68676,68677],{},"点击不在跳转！！！",[479,68679,68681],{"id":68680},"_332-事件委托","3.3.2 事件委托",[19,68683,68684],{},[3514,68685],{"alt":41,"src":68686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[36,68688,68690],{"className":52601,"code":68689,"language":52603,"meta":41,"style":41},"\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",[43,68691,68692,68702,68716,68720,68728,68742,68762,68774,68782,68786,68794,68802,68814,68826,68838,68850,68862,68875,68883,68891,68896,68915,68936,68941,68946,68951,68956,68965,68969,68979,68983,68988,68993,69007,69017,69021,69025,69033,69041,69045],{"__ignoreMap":41},[46,68693,68694,68696,68698,68700],{"class":48,"line":49},[46,68695,53265],{"class":56},[46,68697,53268],{"class":1361},[46,68699,53271],{"class":169},[46,68701,53274],{"class":56},[46,68703,68704,68706,68708,68710,68712,68714],{"class":48,"line":60},[46,68705,821],{"class":56},[46,68707,52603],{"class":1361},[46,68709,53283],{"class":169},[46,68711,79],{"class":56},[46,68713,53288],{"class":173},[46,68715,53274],{"class":56},[46,68717,68718],{"class":48,"line":200},[46,68719,616],{"emptyLinePlaceholder":615},[46,68721,68722,68724,68726],{"class":48,"line":211},[46,68723,821],{"class":56},[46,68725,53301],{"class":1361},[46,68727,53274],{"class":56},[46,68729,68730,68732,68734,68736,68738,68740],{"class":48,"line":222},[46,68731,54111],{"class":56},[46,68733,53311],{"class":1361},[46,68735,53314],{"class":169},[46,68737,79],{"class":56},[46,68739,53319],{"class":173},[46,68741,53274],{"class":56},[46,68743,68744,68746,68748,68750,68752,68754,68756,68758,68760],{"class":48,"line":636},[46,68745,54111],{"class":56},[46,68747,53311],{"class":1361},[46,68749,1364],{"class":169},[46,68751,79],{"class":56},[46,68753,53358],{"class":173},[46,68755,53338],{"class":169},[46,68757,79],{"class":56},[46,68759,53365],{"class":173},[46,68761,53274],{"class":56},[46,68763,68764,68766,68768,68770,68772],{"class":48,"line":641},[46,68765,54111],{"class":56},[46,68767,53374],{"class":1361},[46,68769,53377],{"class":56},[46,68771,53374],{"class":1361},[46,68773,53274],{"class":56},[46,68775,68776,68778,68780],{"class":48,"line":653},[46,68777,53752],{"class":56},[46,68779,53301],{"class":1361},[46,68781,53274],{"class":56},[46,68783,68784],{"class":48,"line":659},[46,68785,616],{"emptyLinePlaceholder":615},[46,68787,68788,68790,68792],{"class":48,"line":665},[46,68789,821],{"class":56},[46,68791,53767],{"class":1361},[46,68793,53274],{"class":56},[46,68795,68796,68798,68800],{"class":48,"line":670},[46,68797,54111],{"class":56},[46,68799,3191],{"class":1361},[46,68801,53274],{"class":56},[46,68803,68804,68806,68808,68810,68812],{"class":48,"line":676},[46,68805,53308],{"class":56},[46,68807,26],{"class":1361},[46,68809,55931],{"class":56},[46,68811,26],{"class":1361},[46,68813,53274],{"class":56},[46,68815,68816,68818,68820,68822,68824],{"class":48,"line":682},[46,68817,53308],{"class":56},[46,68819,26],{"class":1361},[46,68821,55950],{"class":56},[46,68823,26],{"class":1361},[46,68825,53274],{"class":56},[46,68827,68828,68830,68832,68834,68836],{"class":48,"line":688},[46,68829,53308],{"class":56},[46,68831,26],{"class":1361},[46,68833,55969],{"class":56},[46,68835,26],{"class":1361},[46,68837,53274],{"class":56},[46,68839,68840,68842,68844,68846,68848],{"class":48,"line":693},[46,68841,53308],{"class":56},[46,68843,26],{"class":1361},[46,68845,55988],{"class":56},[46,68847,26],{"class":1361},[46,68849,53274],{"class":56},[46,68851,68852,68854,68856,68858,68860],{"class":48,"line":699},[46,68853,53308],{"class":56},[46,68855,26],{"class":1361},[46,68857,56007],{"class":56},[46,68859,26],{"class":1361},[46,68861,53274],{"class":56},[46,68863,68864,68866,68868,68871,68873],{"class":48,"line":705},[46,68865,53308],{"class":56},[46,68867,19],{"class":1361},[46,68869,68870],{"class":56},">我不需要变色\u003C\u002F",[46,68872,19],{"class":1361},[46,68874,53274],{"class":56},[46,68876,68877,68879,68881],{"class":48,"line":711},[46,68878,54384],{"class":56},[46,68880,3191],{"class":1361},[46,68882,53274],{"class":56},[46,68884,68885,68887,68889],{"class":48,"line":717},[46,68886,54111],{"class":56},[46,68888,53780],{"class":1361},[46,68890,53274],{"class":56},[46,68892,68893],{"class":48,"line":723},[46,68894,68895],{"class":2253},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[46,68897,68898,68900,68902,68904,68906,68908,68910,68913],{"class":48,"line":729},[46,68899,13225],{"class":52},[46,68901,63257],{"class":180},[46,68903,647],{"class":52},[46,68905,56361],{"class":56},[46,68907,56364],{"class":169},[46,68909,1152],{"class":56},[46,68911,68912],{"class":173},"'ul'",[46,68914,459],{"class":56},[46,68916,68917,68920,68922,68924,68926,68928,68930,68932,68934],{"class":48,"line":735},[46,68918,68919],{"class":56},"    ul.",[46,68921,59778],{"class":169},[46,68923,1152],{"class":56},[46,68925,59783],{"class":173},[46,68927,448],{"class":56},[46,68929,56414],{"class":52},[46,68931,3702],{"class":56},[46,68933,2269],{"class":439},[46,68935,14445],{"class":56},[46,68937,68938],{"class":48,"line":740},[46,68939,68940],{"class":2253},"      \u002F\u002F alert(1)\n",[46,68942,68943],{"class":48,"line":745},[46,68944,68945],{"class":2253},"      \u002F\u002F e.target就是我们点击的对象\n",[46,68947,68948],{"class":48,"line":763},[46,68949,68950],{"class":2253},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[46,68952,68953],{"class":48,"line":778},[46,68954,68955],{"class":2253},"      \u002F\u002F e.target.style.color = 'red'\n",[46,68957,68958,68960,68962],{"class":48,"line":789},[46,68959,60209],{"class":56},[46,68961,60212],{"class":169},[46,68963,68964],{"class":56},"(e)\n",[46,68966,68967],{"class":48,"line":794},[46,68968,616],{"emptyLinePlaceholder":615},[46,68970,68971,68973,68976],{"class":48,"line":806},[46,68972,60209],{"class":56},[46,68974,68975],{"class":169},"dir",[46,68977,68978],{"class":56},"(e.target)\n",[46,68980,68981],{"class":48,"line":829},[46,68982,616],{"emptyLinePlaceholder":615},[46,68984,68985],{"class":48,"line":840},[46,68986,68987],{"class":2253},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[46,68989,68990],{"class":48,"line":846},[46,68991,68992],{"class":2253},"      \u002F\u002F 通过tagName来进行判断\n",[46,68994,68995,68997,69000,69002,69005],{"class":48,"line":852},[46,68996,56445],{"class":52},[46,68998,68999],{"class":56}," (e.target.tagName ",[46,69001,56451],{"class":52},[46,69003,69004],{"class":173}," 'LI'",[46,69006,14445],{"class":56},[46,69008,69009,69012,69014],{"class":48,"line":857},[46,69010,69011],{"class":56},"        e.target.style.color ",[46,69013,79],{"class":52},[46,69015,69016],{"class":173}," 'red'\n",[46,69018,69019],{"class":48,"line":875},[46,69020,54365],{"class":56},[46,69022,69023],{"class":48,"line":892},[46,69024,35434],{"class":56},[46,69026,69027,69029,69031],{"class":48,"line":898},[46,69028,54384],{"class":56},[46,69030,53780],{"class":1361},[46,69032,53274],{"class":56},[46,69034,69035,69037,69039],{"class":48,"line":903},[46,69036,53752],{"class":56},[46,69038,53767],{"class":1361},[46,69040,53274],{"class":56},[46,69042,69043],{"class":48,"line":908},[46,69044,616],{"emptyLinePlaceholder":615},[46,69046,69047,69049,69051],{"class":48,"line":925},[46,69048,53752],{"class":56},[46,69050,52603],{"class":1361},[46,69052,53274],{"class":56},[19,69054,69055],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[19,69057,69058],{},"if(e.target.ragName==='P') {}",[19,69060,69061],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[19,69063,69064],{},"通过事件委托的方式实现tab栏切换改造：",[19,69066,69067],{},"一定要记住自定义属性！！！！！！",[19,69069,69070],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[19,69072,69073],{},"id是自定义的属性名",[19,69075,69076],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[36,69078,69080],{"className":52601,"code":69079,"language":52603,"meta":41,"style":41},"\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",[43,69081,69082,69092,69106,69110,69118,69132,69152,69172,69184,69192,69198,69208,69218,69222,69226,69232,69244,69256,69268,69284,69288,69292,69298,69310,69322,69334,69344,69354,69358,69362,69370,69382,69392,69404,69408,69412,69420,69430,69440,69450,69454,69458,69468,69482,69494,69498,69502,69514,69524,69540,69550,69554,69558,69572,69582,69592,69596,69600,69606,69620,69624,69628,69636,69646,69650,69654,69663,69673,69677,69685,69693,69697,69705,69719,69733,69745,69753,69792,69824,69856,69888,69920,69928,69936,69950,69984,70018,70052,70086,70120,70128,70136,70144,70149,70154,70173,70178,70198,70206,70211,70224,70245,70258,70262,70267,70272,70285,70305,70333,70337,70341,70345,70353,70361,70365],{"__ignoreMap":41},[46,69083,69084,69086,69088,69090],{"class":48,"line":49},[46,69085,53265],{"class":56},[46,69087,53268],{"class":1361},[46,69089,53271],{"class":169},[46,69091,53274],{"class":56},[46,69093,69094,69096,69098,69100,69102,69104],{"class":48,"line":60},[46,69095,821],{"class":56},[46,69097,52603],{"class":1361},[46,69099,53283],{"class":169},[46,69101,79],{"class":56},[46,69103,53288],{"class":173},[46,69105,53274],{"class":56},[46,69107,69108],{"class":48,"line":200},[46,69109,616],{"emptyLinePlaceholder":615},[46,69111,69112,69114,69116],{"class":48,"line":211},[46,69113,821],{"class":56},[46,69115,53301],{"class":1361},[46,69117,53274],{"class":56},[46,69119,69120,69122,69124,69126,69128,69130],{"class":48,"line":222},[46,69121,54111],{"class":56},[46,69123,53311],{"class":1361},[46,69125,53314],{"class":169},[46,69127,79],{"class":56},[46,69129,53319],{"class":173},[46,69131,61092],{"class":56},[46,69133,69134,69136,69138,69140,69142,69144,69146,69148,69150],{"class":48,"line":636},[46,69135,54111],{"class":56},[46,69137,53311],{"class":1361},[46,69139,53330],{"class":169},[46,69141,79],{"class":56},[46,69143,53335],{"class":173},[46,69145,53338],{"class":169},[46,69147,79],{"class":56},[46,69149,53343],{"class":173},[46,69151,61092],{"class":56},[46,69153,69154,69156,69158,69160,69162,69164,69166,69168,69170],{"class":48,"line":641},[46,69155,54111],{"class":56},[46,69157,53311],{"class":1361},[46,69159,1364],{"class":169},[46,69161,79],{"class":56},[46,69163,53358],{"class":173},[46,69165,53338],{"class":169},[46,69167,79],{"class":56},[46,69169,53365],{"class":173},[46,69171,61092],{"class":56},[46,69173,69174,69176,69178,69180,69182],{"class":48,"line":653},[46,69175,54111],{"class":56},[46,69177,53374],{"class":1361},[46,69179,65590],{"class":56},[46,69181,53374],{"class":1361},[46,69183,53274],{"class":56},[46,69185,69186,69188,69190],{"class":48,"line":659},[46,69187,54111],{"class":56},[46,69189,2098],{"class":1361},[46,69191,53274],{"class":56},[46,69193,69194,69196],{"class":48,"line":665},[46,69195,8416],{"class":1361},[46,69197,17573],{"class":56},[46,69199,69200,69202,69204,69206],{"class":48,"line":670},[46,69201,56671],{"class":180},[46,69203,53404],{"class":56},[46,69205,2379],{"class":180},[46,69207,3345],{"class":56},[46,69209,69210,69212,69214,69216],{"class":48,"line":676},[46,69211,56660],{"class":180},[46,69213,53404],{"class":56},[46,69215,2379],{"class":180},[46,69217,3345],{"class":56},[46,69219,69220],{"class":48,"line":682},[46,69221,4217],{"class":56},[46,69223,69224],{"class":48,"line":688},[46,69225,616],{"emptyLinePlaceholder":615},[46,69227,69228,69230],{"class":48,"line":693},[46,69229,65641],{"class":169},[46,69231,17573],{"class":56},[46,69233,69234,69236,69238,69240,69242],{"class":48,"line":699},[46,69235,56736],{"class":180},[46,69237,53404],{"class":56},[46,69239,65652],{"class":180},[46,69241,53459],{"class":52},[46,69243,3345],{"class":56},[46,69245,69246,69248,69250,69252,69254],{"class":48,"line":705},[46,69247,56750],{"class":180},[46,69249,53404],{"class":56},[46,69251,65665],{"class":180},[46,69253,53459],{"class":52},[46,69255,3345],{"class":56},[46,69257,69258,69260,69262,69264,69266],{"class":48,"line":711},[46,69259,56671],{"class":180},[46,69261,53404],{"class":56},[46,69263,2886],{"class":180},[46,69265,53459],{"class":52},[46,69267,3345],{"class":56},[46,69269,69270,69272,69274,69276,69278,69280,69282],{"class":48,"line":717},[46,69271,63942],{"class":180},[46,69273,53404],{"class":56},[46,69275,2405],{"class":180},[46,69277,53459],{"class":52},[46,69279,53488],{"class":180},[46,69281,64209],{"class":180},[46,69283,3345],{"class":56},[46,69285,69286],{"class":48,"line":723},[46,69287,4217],{"class":56},[46,69289,69290],{"class":48,"line":729},[46,69291,616],{"emptyLinePlaceholder":615},[46,69293,69294,69296],{"class":48,"line":735},[46,69295,65710],{"class":169},[46,69297,17573],{"class":56},[46,69299,69300,69302,69304,69306,69308],{"class":48,"line":740},[46,69301,56736],{"class":180},[46,69303,53404],{"class":56},[46,69305,1155],{"class":180},[46,69307,2515],{"class":52},[46,69309,3345],{"class":56},[46,69311,69312,69314,69316,69318,69320],{"class":48,"line":745},[46,69313,56750],{"class":180},[46,69315,53404],{"class":56},[46,69317,3093],{"class":180},[46,69319,53459],{"class":52},[46,69321,3345],{"class":56},[46,69323,69324,69326,69328,69330,69332],{"class":48,"line":763},[46,69325,59324],{"class":180},[46,69327,53404],{"class":56},[46,69329,3093],{"class":180},[46,69331,53459],{"class":52},[46,69333,3345],{"class":56},[46,69335,69336,69338,69340,69342],{"class":48,"line":778},[46,69337,56974],{"class":180},[46,69339,53404],{"class":56},[46,69341,53444],{"class":180},[46,69343,3345],{"class":56},[46,69345,69346,69348,69350,69352],{"class":48,"line":789},[46,69347,56985],{"class":180},[46,69349,53404],{"class":56},[46,69351,53635],{"class":180},[46,69353,3345],{"class":56},[46,69355,69356],{"class":48,"line":794},[46,69357,4217],{"class":56},[46,69359,69360],{"class":48,"line":806},[46,69361,616],{"emptyLinePlaceholder":615},[46,69363,69364,69366,69368],{"class":48,"line":829},[46,69365,65710],{"class":169},[46,69367,65783],{"class":1361},[46,69369,17573],{"class":56},[46,69371,69372,69374,69376,69378,69380],{"class":48,"line":840},[46,69373,56887],{"class":180},[46,69375,53404],{"class":56},[46,69377,2986],{"class":180},[46,69379,53459],{"class":52},[46,69381,3345],{"class":56},[46,69383,69384,69386,69388,69390],{"class":48,"line":846},[46,69385,64299],{"class":180},[46,69387,53404],{"class":56},[46,69389,65806],{"class":180},[46,69391,3345],{"class":56},[46,69393,69394,69396,69398,69400,69402],{"class":48,"line":852},[46,69395,63965],{"class":180},[46,69397,53404],{"class":56},[46,69399,2886],{"class":180},[46,69401,53459],{"class":52},[46,69403,3345],{"class":56},[46,69405,69406],{"class":48,"line":857},[46,69407,4217],{"class":56},[46,69409,69410],{"class":48,"line":875},[46,69411,616],{"emptyLinePlaceholder":615},[46,69413,69414,69416,69418],{"class":48,"line":892},[46,69415,65710],{"class":169},[46,69417,63257],{"class":1361},[46,69419,17573],{"class":56},[46,69421,69422,69424,69426,69428],{"class":48,"line":898},[46,69423,56697],{"class":180},[46,69425,53404],{"class":56},[46,69427,56702],{"class":180},[46,69429,3345],{"class":56},[46,69431,69432,69434,69436,69438],{"class":48,"line":903},[46,69433,56974],{"class":180},[46,69435,53404],{"class":56},[46,69437,53444],{"class":180},[46,69439,3345],{"class":56},[46,69441,69442,69444,69446,69448],{"class":48,"line":908},[46,69443,56985],{"class":180},[46,69445,53404],{"class":56},[46,69447,53547],{"class":180},[46,69449,3345],{"class":56},[46,69451,69452],{"class":48,"line":925},[46,69453,4217],{"class":56},[46,69455,69456],{"class":48,"line":1238},[46,69457,616],{"emptyLinePlaceholder":615},[46,69459,69460,69462,69464,69466],{"class":48,"line":1251},[46,69461,65710],{"class":169},[46,69463,63257],{"class":1361},[46,69465,57040],{"class":1361},[46,69467,17573],{"class":56},[46,69469,69470,69472,69474,69476,69478,69480],{"class":48,"line":1256},[46,69471,56671],{"class":180},[46,69473,53404],{"class":56},[46,69475,2379],{"class":180},[46,69477,10954],{"class":180},[46,69479,53459],{"class":52},[46,69481,3345],{"class":56},[46,69483,69484,69486,69488,69490,69492],{"class":48,"line":1261},[46,69485,56887],{"class":180},[46,69487,53404],{"class":56},[46,69489,2735],{"class":180},[46,69491,53459],{"class":52},[46,69493,3345],{"class":56},[46,69495,69496],{"class":48,"line":1274},[46,69497,4217],{"class":56},[46,69499,69500],{"class":48,"line":10061},[46,69501,616],{"emptyLinePlaceholder":615},[46,69503,69504,69506,69508,69510,69512],{"class":48,"line":11720},[46,69505,65710],{"class":169},[46,69507,63257],{"class":1361},[46,69509,57040],{"class":1361},[46,69511,3450],{"class":1361},[46,69513,17573],{"class":56},[46,69515,69516,69518,69520,69522],{"class":48,"line":11745},[46,69517,65935],{"class":180},[46,69519,53404],{"class":56},[46,69521,56702],{"class":180},[46,69523,3345],{"class":56},[46,69525,69526,69528,69530,69532,69534,69536,69538],{"class":48,"line":11768},[46,69527,64197],{"class":180},[46,69529,53404],{"class":56},[46,69531,2272],{"class":180},[46,69533,53459],{"class":52},[46,69535,53488],{"class":180},[46,69537,65956],{"class":180},[46,69539,3345],{"class":56},[46,69541,69542,69544,69546,69548],{"class":48,"line":11792},[46,69543,59381],{"class":180},[46,69545,53404],{"class":56},[46,69547,64334],{"class":180},[46,69549,3345],{"class":56},[46,69551,69552],{"class":48,"line":11797},[46,69553,4217],{"class":56},[46,69555,69556],{"class":48,"line":11802},[46,69557,616],{"emptyLinePlaceholder":615},[46,69559,69560,69562,69564,69566,69568,69570],{"class":48,"line":11807},[46,69561,65710],{"class":169},[46,69563,63257],{"class":1361},[46,69565,57040],{"class":1361},[46,69567,3450],{"class":1361},[46,69569,65989],{"class":169},[46,69571,17573],{"class":56},[46,69573,69574,69576,69578,69580],{"class":48,"line":11816},[46,69575,63756],{"class":180},[46,69577,53404],{"class":56},[46,69579,66000],{"class":180},[46,69581,3345],{"class":56},[46,69583,69584,69586,69588,69590],{"class":48,"line":11821},[46,69585,59381],{"class":180},[46,69587,53404],{"class":56},[46,69589,66000],{"class":180},[46,69591,3345],{"class":56},[46,69593,69594],{"class":48,"line":11827},[46,69595,4217],{"class":56},[46,69597,69598],{"class":48,"line":11848},[46,69599,616],{"emptyLinePlaceholder":615},[46,69601,69602,69604],{"class":48,"line":11854},[46,69603,66025],{"class":169},[46,69605,17573],{"class":56},[46,69607,69608,69610,69612,69614,69616,69618],{"class":48,"line":11868},[46,69609,56660],{"class":180},[46,69611,53404],{"class":56},[46,69613,2379],{"class":180},[46,69615,66038],{"class":180},[46,69617,53459],{"class":52},[46,69619,3345],{"class":56},[46,69621,69622],{"class":48,"line":11874},[46,69623,4217],{"class":56},[46,69625,69626],{"class":48,"line":11901},[46,69627,616],{"emptyLinePlaceholder":615},[46,69629,69630,69632,69634],{"class":48,"line":11910},[46,69631,66025],{"class":169},[46,69633,64139],{"class":169},[46,69635,17573],{"class":56},[46,69637,69638,69640,69642,69644],{"class":48,"line":11916},[46,69639,56974],{"class":180},[46,69641,53404],{"class":56},[46,69643,56702],{"class":180},[46,69645,3345],{"class":56},[46,69647,69648],{"class":48,"line":11924},[46,69649,4217],{"class":56},[46,69651,69652],{"class":48,"line":11929},[46,69653,616],{"emptyLinePlaceholder":615},[46,69655,69656,69658,69661],{"class":48,"line":18605},[46,69657,66025],{"class":169},[46,69659,69660],{"class":169}," .active",[46,69662,17573],{"class":56},[46,69664,69665,69667,69669,69671],{"class":48,"line":18611},[46,69666,56974],{"class":180},[46,69668,53404],{"class":56},[46,69670,62834],{"class":180},[46,69672,3345],{"class":56},[46,69674,69675],{"class":48,"line":18634},[46,69676,4217],{"class":56},[46,69678,69679,69681,69683],{"class":48,"line":18640},[46,69680,54384],{"class":56},[46,69682,2098],{"class":1361},[46,69684,53274],{"class":56},[46,69686,69687,69689,69691],{"class":48,"line":18663},[46,69688,53752],{"class":56},[46,69690,53301],{"class":1361},[46,69692,53274],{"class":56},[46,69694,69695],{"class":48,"line":18677},[46,69696,616],{"emptyLinePlaceholder":615},[46,69698,69699,69701,69703],{"class":48,"line":18697},[46,69700,821],{"class":56},[46,69702,53767],{"class":1361},[46,69704,53274],{"class":56},[46,69706,69707,69709,69711,69713,69715,69717],{"class":48,"line":18703},[46,69708,54111],{"class":56},[46,69710,53578],{"class":1361},[46,69712,55451],{"class":169},[46,69714,79],{"class":56},[46,69716,66140],{"class":173},[46,69718,53274],{"class":56},[46,69720,69721,69723,69725,69727,69729,69731],{"class":48,"line":18714},[46,69722,53308],{"class":56},[46,69724,53578],{"class":1361},[46,69726,55451],{"class":169},[46,69728,79],{"class":56},[46,69730,66155],{"class":173},[46,69732,53274],{"class":56},[46,69734,69735,69737,69739,69741,69743],{"class":48,"line":18737},[46,69736,57199],{"class":56},[46,69738,479],{"class":1361},[46,69740,66166],{"class":56},[46,69742,479],{"class":1361},[46,69744,53274],{"class":56},[46,69746,69747,69749,69751],{"class":48,"line":18759},[46,69748,57199],{"class":56},[46,69750,3191],{"class":1361},[46,69752,53274],{"class":56},[46,69754,69755,69757,69759,69761,69763,69765,69767,69769,69771,69773,69775,69777,69779,69782,69784,69786,69788,69790],{"class":48,"line":18764},[46,69756,57267],{"class":56},[46,69758,26],{"class":1361},[46,69760,63017],{"class":56},[46,69762,2426],{"class":1361},[46,69764,55451],{"class":169},[46,69766,79],{"class":56},[46,69768,61671],{"class":173},[46,69770,63022],{"class":169},[46,69772,79],{"class":56},[46,69774,66201],{"class":173},[46,69776,55916],{"class":169},[46,69778,79],{"class":56},[46,69780,69781],{"class":173},"\"0\"",[46,69783,66204],{"class":56},[46,69785,2426],{"class":1361},[46,69787,57279],{"class":56},[46,69789,26],{"class":1361},[46,69791,53274],{"class":56},[46,69793,69794,69796,69798,69800,69802,69804,69806,69808,69810,69812,69814,69816,69818,69820,69822],{"class":48,"line":18770},[46,69795,57267],{"class":56},[46,69797,26],{"class":1361},[46,69799,63017],{"class":56},[46,69801,2426],{"class":1361},[46,69803,63022],{"class":169},[46,69805,79],{"class":56},[46,69807,66201],{"class":173},[46,69809,55916],{"class":169},[46,69811,79],{"class":56},[46,69813,5697],{"class":173},[46,69815,66231],{"class":56},[46,69817,2426],{"class":1361},[46,69819,57279],{"class":56},[46,69821,26],{"class":1361},[46,69823,53274],{"class":56},[46,69825,69826,69828,69830,69832,69834,69836,69838,69840,69842,69844,69846,69848,69850,69852,69854],{"class":48,"line":18784},[46,69827,57267],{"class":56},[46,69829,26],{"class":1361},[46,69831,63017],{"class":56},[46,69833,2426],{"class":1361},[46,69835,63022],{"class":169},[46,69837,79],{"class":56},[46,69839,66201],{"class":173},[46,69841,55916],{"class":169},[46,69843,79],{"class":56},[46,69845,5720],{"class":173},[46,69847,66258],{"class":56},[46,69849,2426],{"class":1361},[46,69851,57279],{"class":56},[46,69853,26],{"class":1361},[46,69855,53274],{"class":56},[46,69857,69858,69860,69862,69864,69866,69868,69870,69872,69874,69876,69878,69880,69882,69884,69886],{"class":48,"line":18797},[46,69859,57267],{"class":56},[46,69861,26],{"class":1361},[46,69863,63017],{"class":56},[46,69865,2426],{"class":1361},[46,69867,63022],{"class":169},[46,69869,79],{"class":56},[46,69871,66201],{"class":173},[46,69873,55916],{"class":169},[46,69875,79],{"class":56},[46,69877,5733],{"class":173},[46,69879,66285],{"class":56},[46,69881,2426],{"class":1361},[46,69883,57279],{"class":56},[46,69885,26],{"class":1361},[46,69887,53274],{"class":56},[46,69889,69890,69892,69894,69896,69898,69900,69902,69904,69906,69908,69910,69912,69914,69916,69918],{"class":48,"line":18802},[46,69891,57267],{"class":56},[46,69893,26],{"class":1361},[46,69895,63017],{"class":56},[46,69897,2426],{"class":1361},[46,69899,63022],{"class":169},[46,69901,79],{"class":56},[46,69903,66201],{"class":173},[46,69905,55916],{"class":169},[46,69907,79],{"class":56},[46,69909,5746],{"class":173},[46,69911,66312],{"class":56},[46,69913,2426],{"class":1361},[46,69915,57279],{"class":56},[46,69917,26],{"class":1361},[46,69919,53274],{"class":56},[46,69921,69922,69924,69926],{"class":48,"line":18816},[46,69923,57372],{"class":56},[46,69925,3191],{"class":1361},[46,69927,53274],{"class":56},[46,69929,69930,69932,69934],{"class":48,"line":18821},[46,69931,53743],{"class":56},[46,69933,53578],{"class":1361},[46,69935,53274],{"class":56},[46,69937,69938,69940,69942,69944,69946,69948],{"class":48,"line":18827},[46,69939,53308],{"class":56},[46,69941,53578],{"class":1361},[46,69943,55451],{"class":169},[46,69945,79],{"class":56},[46,69947,66349],{"class":173},[46,69949,53274],{"class":56},[46,69951,69952,69954,69956,69958,69960,69962,69964,69966,69968,69970,69972,69974,69976,69978,69980,69982],{"class":48,"line":18832},[46,69953,57199],{"class":56},[46,69955,53578],{"class":1361},[46,69957,55451],{"class":169},[46,69959,79],{"class":56},[46,69961,66364],{"class":173},[46,69963,63017],{"class":56},[46,69965,3514],{"class":1361},[46,69967,57204],{"class":169},[46,69969,79],{"class":56},[46,69971,66375],{"class":173},[46,69973,57212],{"class":169},[46,69975,79],{"class":56},[46,69977,9665],{"class":173},[46,69979,66384],{"class":56},[46,69981,53578],{"class":1361},[46,69983,53274],{"class":56},[46,69985,69986,69988,69990,69992,69994,69996,69998,70000,70002,70004,70006,70008,70010,70012,70014,70016],{"class":48,"line":18846},[46,69987,57199],{"class":56},[46,69989,53578],{"class":1361},[46,69991,55451],{"class":169},[46,69993,79],{"class":56},[46,69995,64588],{"class":173},[46,69997,63017],{"class":56},[46,69999,3514],{"class":1361},[46,70001,57204],{"class":169},[46,70003,79],{"class":56},[46,70005,66411],{"class":173},[46,70007,57212],{"class":169},[46,70009,79],{"class":56},[46,70011,9665],{"class":173},[46,70013,66384],{"class":56},[46,70015,53578],{"class":1361},[46,70017,53274],{"class":56},[46,70019,70020,70022,70024,70026,70028,70030,70032,70034,70036,70038,70040,70042,70044,70046,70048,70050],{"class":48,"line":18851},[46,70021,57199],{"class":56},[46,70023,53578],{"class":1361},[46,70025,55451],{"class":169},[46,70027,79],{"class":56},[46,70029,64588],{"class":173},[46,70031,63017],{"class":56},[46,70033,3514],{"class":1361},[46,70035,57204],{"class":169},[46,70037,79],{"class":56},[46,70039,66446],{"class":173},[46,70041,57212],{"class":169},[46,70043,79],{"class":56},[46,70045,9665],{"class":173},[46,70047,66384],{"class":56},[46,70049,53578],{"class":1361},[46,70051,53274],{"class":56},[46,70053,70054,70056,70058,70060,70062,70064,70066,70068,70070,70072,70074,70076,70078,70080,70082,70084],{"class":48,"line":18856},[46,70055,57199],{"class":56},[46,70057,53578],{"class":1361},[46,70059,55451],{"class":169},[46,70061,79],{"class":56},[46,70063,64588],{"class":173},[46,70065,63017],{"class":56},[46,70067,3514],{"class":1361},[46,70069,57204],{"class":169},[46,70071,79],{"class":56},[46,70073,66481],{"class":173},[46,70075,57212],{"class":169},[46,70077,79],{"class":56},[46,70079,9665],{"class":173},[46,70081,66384],{"class":56},[46,70083,53578],{"class":1361},[46,70085,53274],{"class":56},[46,70087,70088,70090,70092,70094,70096,70098,70100,70102,70104,70106,70108,70110,70112,70114,70116,70118],{"class":48,"line":18870},[46,70089,57199],{"class":56},[46,70091,53578],{"class":1361},[46,70093,55451],{"class":169},[46,70095,79],{"class":56},[46,70097,64588],{"class":173},[46,70099,63017],{"class":56},[46,70101,3514],{"class":1361},[46,70103,57204],{"class":169},[46,70105,79],{"class":56},[46,70107,66516],{"class":173},[46,70109,57212],{"class":169},[46,70111,79],{"class":56},[46,70113,9665],{"class":173},[46,70115,66384],{"class":56},[46,70117,53578],{"class":1361},[46,70119,53274],{"class":56},[46,70121,70122,70124,70126],{"class":48,"line":18882},[46,70123,53743],{"class":56},[46,70125,53578],{"class":1361},[46,70127,53274],{"class":56},[46,70129,70130,70132,70134],{"class":48,"line":18887},[46,70131,54384],{"class":56},[46,70133,53578],{"class":1361},[46,70135,53274],{"class":56},[46,70137,70138,70140,70142],{"class":48,"line":18900},[46,70139,54111],{"class":56},[46,70141,53780],{"class":1361},[46,70143,53274],{"class":56},[46,70145,70146],{"class":48,"line":18905},[46,70147,70148],{"class":2253},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[46,70150,70151],{"class":48,"line":18910},[46,70152,70153],{"class":2253},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[46,70155,70156,70158,70160,70162,70164,70166,70168,70171],{"class":48,"line":18915},[46,70157,13225],{"class":52},[46,70159,63257],{"class":180},[46,70161,647],{"class":52},[46,70163,56361],{"class":56},[46,70165,56364],{"class":169},[46,70167,1152],{"class":56},[46,70169,70170],{"class":173},"'.tab-nav ul'",[46,70172,459],{"class":56},[46,70174,70175],{"class":48,"line":18928},[46,70176,70177],{"class":2253},"    \u002F\u002F 2.添加事件\n",[46,70179,70180,70182,70184,70186,70188,70190,70192,70194,70196],{"class":48,"line":18933},[46,70181,68919],{"class":56},[46,70183,59778],{"class":169},[46,70185,1152],{"class":56},[46,70187,59783],{"class":173},[46,70189,448],{"class":56},[46,70191,56414],{"class":52},[46,70193,3702],{"class":56},[46,70195,2269],{"class":439},[46,70197,14445],{"class":56},[46,70199,70200,70202,70204],{"class":48,"line":34607},[46,70201,60209],{"class":56},[46,70203,68975],{"class":169},[46,70205,68978],{"class":56},[46,70207,70208],{"class":48,"line":34613},[46,70209,70210],{"class":2253},"      \u002F\u002Fe.targer是我们点击的对象\n",[46,70212,70213,70215,70217,70219,70222],{"class":48,"line":34619},[46,70214,56445],{"class":52},[46,70216,68999],{"class":56},[46,70218,56451],{"class":52},[46,70220,70221],{"class":173}," 'A'",[46,70223,14445],{"class":56},[46,70225,70226,70228,70230,70232,70235,70237,70239,70241,70243],{"class":48,"line":34625},[46,70227,53892],{"class":56},[46,70229,56364],{"class":169},[46,70231,1152],{"class":56},[46,70233,70234],{"class":173},"'.active'",[46,70236,58968],{"class":56},[46,70238,58971],{"class":169},[46,70240,1152],{"class":56},[46,70242,66679],{"class":173},[46,70244,459],{"class":56},[46,70246,70247,70250,70252,70254,70256],{"class":48,"line":34631},[46,70248,70249],{"class":56},"        e.target.classList.",[46,70251,7347],{"class":169},[46,70253,1152],{"class":56},[46,70255,66679],{"class":173},[46,70257,459],{"class":56},[46,70259,70260],{"class":48,"line":34642},[46,70261,616],{"emptyLinePlaceholder":615},[46,70263,70264],{"class":48,"line":34648},[46,70265,70266],{"class":2253},"        \u002F\u002F 下面大盒子模块\n",[46,70268,70269],{"class":48,"line":34668},[46,70270,70271],{"class":2253},"        \u002F\u002F console.log(e.target.dataset.id)\n",[46,70273,70274,70276,70278,70280,70282],{"class":48,"line":34674},[46,70275,63235],{"class":52},[46,70277,5052],{"class":180},[46,70279,647],{"class":52},[46,70281,47537],{"class":52},[46,70283,70284],{"class":56},"e.target.dataset.id\n",[46,70286,70287,70289,70291,70293,70295,70297,70299,70301,70303],{"class":48,"line":34685},[46,70288,53892],{"class":56},[46,70290,56364],{"class":169},[46,70292,1152],{"class":56},[46,70294,66727],{"class":173},[46,70296,58968],{"class":56},[46,70298,58971],{"class":169},[46,70300,1152],{"class":56},[46,70302,66679],{"class":173},[46,70304,459],{"class":56},[46,70306,70307,70309,70311,70313,70315,70317,70319,70321,70323,70325,70327,70329,70331],{"class":48,"line":34691},[46,70308,53892],{"class":56},[46,70310,56364],{"class":169},[46,70312,1152],{"class":56},[46,70314,66753],{"class":173},[46,70316,2628],{"class":56},[46,70318,47537],{"class":52},[46,70320,27110],{"class":180},[46,70322,58997],{"class":173},[46,70324,58968],{"class":56},[46,70326,7347],{"class":169},[46,70328,1152],{"class":56},[46,70330,66679],{"class":173},[46,70332,459],{"class":56},[46,70334,70335],{"class":48,"line":34697},[46,70336,616],{"emptyLinePlaceholder":615},[46,70338,70339],{"class":48,"line":34703},[46,70340,54365],{"class":56},[46,70342,70343],{"class":48,"line":34709},[46,70344,35434],{"class":56},[46,70346,70347,70349,70351],{"class":48,"line":34715},[46,70348,54384],{"class":56},[46,70350,53780],{"class":1361},[46,70352,53274],{"class":56},[46,70354,70355,70357,70359],{"class":48,"line":34721},[46,70356,53752],{"class":56},[46,70358,53767],{"class":1361},[46,70360,53274],{"class":56},[46,70362,70363],{"class":48,"line":34727},[46,70364,616],{"emptyLinePlaceholder":615},[46,70366,70367,70369,70371],{"class":48,"line":34747},[46,70368,53752],{"class":56},[46,70370,52603],{"class":1361},[46,70372,53274],{"class":56},[479,70374,70376],{"id":70375},"_333-页面加载事件","3.3.3 页面加载事件",[23,70378,70379],{},[26,70380,70381],{},"load",[19,70383,70384],{},[3514,70385],{"alt":41,"src":70386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[19,70388,70389],{},"window代表整个窗口，比document还要大",[19,70391,70392],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[19,70394,70395],{},"img.addEventListener('load', function () {",[19,70397,70398],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[19,70400,54431],{},[23,70402,70403],{"start":60},[26,70404,70405],{},"DOMContentLoaded",[19,70407,70408],{},[3514,70409],{"alt":41,"src":70410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[19,70412,70413],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[479,70415,70417],{"id":70416},"_334-元素滚动事件","3.3.4 元素滚动事件",[19,70419,70420],{},[3514,70421],{"alt":41,"src":70422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[19,70424,70425],{},[3514,70426],{"alt":41,"src":70427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[19,70429,70430],{},[3514,70431],{"alt":41,"src":70432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[19,70434,70435],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[19,70437,70438],{},"获得的是数字型数据，不带单位",[19,70440,70441],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[19,70443,70444],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[19,70446,70447],{},"它是通过document.documentElement来获取",[19,70449,70450],{},[3514,70451],{"alt":41,"src":70452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[19,70454,70455],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[479,70457,70459],{"id":70458},"_335-页面缩放事件","3.3.5 页面缩放事件",[19,70461,70462],{},[3514,70463],{"alt":41,"src":70464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[19,70466,70467],{},[3514,70468],{"alt":41,"src":70469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[479,70471,70473],{"id":70472},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[19,70475,70476],{},[3514,70477],{"alt":41,"src":70478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[19,70480,70481],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[19,70483,70484],{},[3514,70485],{"alt":41,"src":70486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[19,70488,70489],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[19,70491,70492],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[19,70494,70495],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[19,70497,70498],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[19,70500,70501],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[19,70503,70504],{},[3514,70505],{"alt":41,"src":70506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[19,70508,70509],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[19,70511,70512],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[19,70514,70515],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[19,70517,70518],{},"e.pageX-box.getBoundingClientRect()",[479,70520,70522],{"id":70521},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[19,70524,70525],{},[3514,70526],{"alt":41,"src":70527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[19,70529,70530],{},"这个是相对于视口来说的，它是个方法，不是属性值",[479,70532,70534],{"id":70533},"_338-总结","3.3.8 总结",[19,70536,70537],{},[3514,70538],{"alt":41,"src":70539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[19,70541,70542],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[19,70544,70545],{},"修改盒子的宽高只能通过width和height来实现",[479,70547,70549],{"id":70548},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[36,70551,70553],{"className":52601,"code":70552,"language":52603,"meta":41,"style":41},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[43,70554,70555,70560,70565,70570,70575],{"__ignoreMap":41},[46,70556,70557],{"class":48,"line":49},[46,70558,70559],{"class":56},"\u002F* 页面滑动 *\u002F\n",[46,70561,70562],{"class":48,"line":60},[46,70563,70564],{"class":56},"html {\n",[46,70566,70567],{"class":48,"line":200},[46,70568,70569],{"class":56},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[46,70571,70572],{"class":48,"line":211},[46,70573,70574],{"class":56},"  scroll-behavior: smooth;\n",[46,70576,70577],{"class":48,"line":222},[46,70578,3616],{"class":56},[19,70580,70581],{},"默认是auto",[479,70583,70585],{"id":70584},"_3310-日期对象","3.3.10 日期对象",[23999,70587,70589],{"id":70588},"_33101-实例化","3.3.10.1 实例化",[19,70591,70592],{},[3514,70593],{"alt":41,"src":70594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[23999,70596,70598],{"id":70597},"_33102-时期对象方法","3.3.10.2 时期对象方法",[19,70600,70601],{},[3514,70602],{"alt":41,"src":70603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[19,70605,70606],{},"月份+1",[19,70608,70609],{},"老外认为第一天为0，星期天",[19,70611,70612],{},"方法使用的时候必须要跟括号",[19,70614,70615],{},"快速获得日期",[19,70617,70618],{},"\u002F\u002F 得到年月日",[19,70620,70621],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[19,70623,70624],{},"\u002F\u002F 得到当地日期",[19,70626,70627],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[19,70629,70630],{},"\u002F\u002F 得到当地时间",[19,70632,70633],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[19,70635,70636],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[19,70638,70639],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[53780,70641,70642],{},"\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,70644,70645],{},"学会去封装函数！",[23999,70647,70649],{"id":70648},"_33103-时间戳","3.3.10.3 时间戳",[19,70651,70652],{},[3514,70653],{"alt":41,"src":70654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[19,70656,70657],{},[3514,70658],{"alt":41,"src":70659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[19,70661,70662],{},"三种方法记住一个就可以",[479,70664,70666],{"id":70665},"_3311-节点操作","3.3.11 节点操作",[23999,70668,70670],{"id":70669},"_33111-dom节点","3.3.11.1 DOM节点",[19,70672,70673],{},[3514,70674],{"alt":41,"src":70675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[19,70677,70678],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[23999,70680,70682],{"id":70681},"_33112-查找节点","3.3.11.2 查找节点",[19,70684,70685],{},"前边的document.querySelector()是获取的元素",[19,70687,70688],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[19,70690,70691],{},[3514,70692],{"alt":41,"src":70693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[23,70695,70696],{},[26,70697,70698],{},"父节点",[19,70700,70701],{},[3514,70702],{"alt":41,"src":70703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[23,70705,70706],{"start":60},[26,70707,70708],{},"子节点",[19,70710,70711],{},[3514,70712],{"alt":41,"src":70713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[19,70715,70716],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[19,70718,70719],{},"children获得的是伪数组，是亲儿子",[23,70721,70722],{"start":200},[26,70723,70724],{},"兄弟节点",[19,70726,70727],{},[3514,70728],{"alt":41,"src":70729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[23999,70731,70733],{"id":70732},"_33113-增加节点","3.3.11.3 增加节点",[19,70735,70736],{},[3514,70737],{"alt":41,"src":70738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[19,70740,70741],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[19,70743,70744],{},[3514,70745],{"alt":41,"src":70746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[19,70748,70749],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[19,70751,70752],{},"下面是写法的部分展示，就按照下边的格式来写",[19,70754,70755],{},"例：",[53780,70757,70758],{},"\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,70760,70761],{},[3514,70762],{"alt":41,"src":70763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[19,70765,70766],{},"false只克隆标签，里边的内容不会克隆过来",[36,70768,70770],{"className":52601,"code":70769,"language":52603,"meta":41,"style":41},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[43,70771,70772],{"__ignoreMap":41},[46,70773,70774],{"class":48,"line":49},[46,70775,70769],{"class":56},[23999,70777,70779],{"id":70778},"_33114-删除节点","3.3.11.4 删除节点",[19,70781,70782],{},[3514,70783],{"alt":41,"src":70784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[19,70786,70787],{},"父亲删儿子",[19,70789,70790],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[479,70792,70794],{"id":70793},"_3312-m端事件","3.3.12 M端事件",[19,70796,70797],{},"M端就是移动端",[19,70799,70800],{},[3514,70801],{"alt":41,"src":70802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[479,70804,70806],{"id":70805},"_3313-插件","3.3.13 插件",[19,70808,70809],{},"要熟悉官网！！！",[19,70811,70812],{},[2426,70813,70814],{"href":70814,"rel":70815},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[25862],[19,70817,70818],{},[2426,70819,70820],{"href":70820,"rel":70821},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[25862],[479,70823,70825],{"id":70824},"_3314-学生信息表","3.3.14 学生信息表",[23,70827,70828,70831,70834,70837,70840,70843,70846,70849],{},[26,70829,70830],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[26,70832,70833],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[26,70835,70836],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[26,70838,70839],{},"用好表单元素自带的属性，value,name等",[26,70841,70842],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[26,70844,70845],{},"不要忘记事件对象",[26,70847,70848],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[26,70850,70851],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[19,70853,70854],{},"结构：",[36,70856,70858],{"className":52601,"code":70857,"language":52603,"meta":41,"style":41},"\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",[43,70859,70860,70870,70884,70888,70896,70910,70930,70951,70964,70988,70996,71000,71008,71021,71042,71070,71098,71103,71125,71145,71164,71172,71200,71222,71242,71262,71282,71302,71322,71330,71350,71358,71362,71375,71383,71391,71399,71412,71425,71438,71451,71464,71477,71490,71498,71506,71514,71519,71524,71529,71534,71539,71544,71549,71554,71559,71564,71569,71574,71579,71587,71595,71603,71607,71627,71646,71666,71686,71706,71726,71730,71735,71755,71760,71770,71775,71780,71800,71822,71827,71837,71841,71845,71850,71855,71884,71898,71913,71917,71921,71925,71930,71941,71954,71959,71964,71969,71974,71979,71983,71988,71993,72002,72007,72012,72024,72029,72036,72040,72045,72055,72060,72070,72075,72103,72124,72134,72154,72172,72189,72206,72223,72240,72244,72254,72259,72264,72269,72280,72284,72288,72292,72297,72302,72323,72335,72340,72345,72350,72364,72369,72376,72380,72384,72392,72396,72404,72408],{"__ignoreMap":41},[46,70861,70862,70864,70866,70868],{"class":48,"line":49},[46,70863,53265],{"class":56},[46,70865,53268],{"class":1361},[46,70867,53271],{"class":169},[46,70869,53274],{"class":56},[46,70871,70872,70874,70876,70878,70880,70882],{"class":48,"line":60},[46,70873,821],{"class":56},[46,70875,52603],{"class":1361},[46,70877,53283],{"class":169},[46,70879,79],{"class":56},[46,70881,53288],{"class":173},[46,70883,53274],{"class":56},[46,70885,70886],{"class":48,"line":200},[46,70887,616],{"emptyLinePlaceholder":615},[46,70889,70890,70892,70894],{"class":48,"line":211},[46,70891,821],{"class":56},[46,70893,53301],{"class":1361},[46,70895,53274],{"class":56},[46,70897,70898,70900,70902,70904,70906,70908],{"class":48,"line":222},[46,70899,54111],{"class":56},[46,70901,53311],{"class":1361},[46,70903,53314],{"class":169},[46,70905,79],{"class":56},[46,70907,53319],{"class":173},[46,70909,61092],{"class":56},[46,70911,70912,70914,70916,70918,70920,70922,70924,70926,70928],{"class":48,"line":636},[46,70913,54111],{"class":56},[46,70915,53311],{"class":1361},[46,70917,1364],{"class":169},[46,70919,79],{"class":56},[46,70921,53358],{"class":173},[46,70923,53338],{"class":169},[46,70925,79],{"class":56},[46,70927,53365],{"class":173},[46,70929,61092],{"class":56},[46,70931,70932,70934,70936,70938,70940,70942,70944,70946,70949],{"class":48,"line":641},[46,70933,54111],{"class":56},[46,70935,53311],{"class":1361},[46,70937,53330],{"class":169},[46,70939,79],{"class":56},[46,70941,53335],{"class":173},[46,70943,53338],{"class":169},[46,70945,79],{"class":56},[46,70947,70948],{"class":173},"\"ie=edge\"",[46,70950,61092],{"class":56},[46,70952,70953,70955,70957,70960,70962],{"class":48,"line":653},[46,70954,54111],{"class":56},[46,70956,53374],{"class":1361},[46,70958,70959],{"class":56},">学生信息管理\u003C\u002F",[46,70961,53374],{"class":1361},[46,70963,53274],{"class":56},[46,70965,70966,70968,70971,70974,70976,70979,70981,70983,70986],{"class":48,"line":659},[46,70967,54111],{"class":56},[46,70969,70970],{"class":1361},"link",[46,70972,70973],{"class":169}," rel",[46,70975,79],{"class":56},[46,70977,70978],{"class":173},"\"stylesheet\"",[46,70980,63022],{"class":169},[46,70982,79],{"class":56},[46,70984,70985],{"class":173},"\"css\u002Findex.css\"",[46,70987,61092],{"class":56},[46,70989,70990,70992,70994],{"class":48,"line":665},[46,70991,53752],{"class":56},[46,70993,53301],{"class":1361},[46,70995,53274],{"class":56},[46,70997,70998],{"class":48,"line":670},[46,70999,616],{"emptyLinePlaceholder":615},[46,71001,71002,71004,71006],{"class":48,"line":676},[46,71003,821],{"class":56},[46,71005,53767],{"class":1361},[46,71007,53274],{"class":56},[46,71009,71010,71012,71014,71017,71019],{"class":48,"line":682},[46,71011,54111],{"class":56},[46,71013,10],{"class":1361},[46,71015,71016],{"class":56},">新增学员\u003C\u002F",[46,71018,10],{"class":1361},[46,71020,53274],{"class":56},[46,71022,71023,71025,71027,71029,71031,71033,71036,71038,71040],{"class":48,"line":688},[46,71024,54111],{"class":56},[46,71026,68590],{"class":1361},[46,71028,55451],{"class":169},[46,71030,79],{"class":56},[46,71032,64629],{"class":173},[46,71034,71035],{"class":169}," autocomplete",[46,71037,79],{"class":56},[46,71039,33753],{"class":173},[46,71041,53274],{"class":56},[46,71043,71044,71047,71049,71051,71053,71055,71057,71059,71062,71064,71066,71068],{"class":48,"line":693},[46,71045,71046],{"class":56},"    姓名：\u003C",[46,71048,55786],{"class":1361},[46,71050,55789],{"class":169},[46,71052,79],{"class":56},[46,71054,64664],{"class":173},[46,71056,55451],{"class":169},[46,71058,79],{"class":56},[46,71060,71061],{"class":173},"\"uname\"",[46,71063,1364],{"class":169},[46,71065,79],{"class":56},[46,71067,71061],{"class":173},[46,71069,61092],{"class":56},[46,71071,71072,71075,71077,71079,71081,71083,71085,71087,71090,71092,71094,71096],{"class":48,"line":699},[46,71073,71074],{"class":56},"    年龄：\u003C",[46,71076,55786],{"class":1361},[46,71078,55789],{"class":169},[46,71080,79],{"class":56},[46,71082,64664],{"class":173},[46,71084,55451],{"class":169},[46,71086,79],{"class":56},[46,71088,71089],{"class":173},"\"age\"",[46,71091,1364],{"class":169},[46,71093,79],{"class":56},[46,71095,71089],{"class":173},[46,71097,61092],{"class":56},[46,71099,71100],{"class":48,"line":705},[46,71101,71102],{"class":56},"    性别:\n",[46,71104,71105,71107,71110,71112,71114,71117,71119,71121,71123],{"class":48,"line":711},[46,71106,53308],{"class":56},[46,71108,71109],{"class":1361},"select",[46,71111,1364],{"class":169},[46,71113,79],{"class":56},[46,71115,71116],{"class":173},"\"gender\"",[46,71118,55451],{"class":169},[46,71120,79],{"class":56},[46,71122,71116],{"class":173},[46,71124,53274],{"class":56},[46,71126,71127,71129,71132,71134,71136,71138,71141,71143],{"class":48,"line":717},[46,71128,57199],{"class":56},[46,71130,71131],{"class":1361},"option",[46,71133,68616],{"class":169},[46,71135,79],{"class":56},[46,71137,11965],{"class":173},[46,71139,71140],{"class":56},">男\u003C\u002F",[46,71142,71131],{"class":1361},[46,71144,53274],{"class":56},[46,71146,71147,71149,71151,71153,71155,71157,71160,71162],{"class":48,"line":723},[46,71148,57199],{"class":56},[46,71150,71131],{"class":1361},[46,71152,68616],{"class":169},[46,71154,79],{"class":56},[46,71156,12034],{"class":173},[46,71158,71159],{"class":56},">女\u003C\u002F",[46,71161,71131],{"class":1361},[46,71163,53274],{"class":56},[46,71165,71166,71168,71170],{"class":48,"line":729},[46,71167,53743],{"class":56},[46,71169,71109],{"class":1361},[46,71171,53274],{"class":56},[46,71173,71174,71177,71179,71181,71183,71185,71187,71189,71192,71194,71196,71198],{"class":48,"line":735},[46,71175,71176],{"class":56},"    薪资：\u003C",[46,71178,55786],{"class":1361},[46,71180,55789],{"class":169},[46,71182,79],{"class":56},[46,71184,64664],{"class":173},[46,71186,55451],{"class":169},[46,71188,79],{"class":56},[46,71190,71191],{"class":173},"\"salary\"",[46,71193,1364],{"class":169},[46,71195,79],{"class":56},[46,71197,71191],{"class":173},[46,71199,61092],{"class":56},[46,71201,71202,71205,71207,71209,71211,71214,71216,71218,71220],{"class":48,"line":740},[46,71203,71204],{"class":56},"    就业城市：\u003C",[46,71206,71109],{"class":1361},[46,71208,1364],{"class":169},[46,71210,79],{"class":56},[46,71212,71213],{"class":173},"\"city\"",[46,71215,55451],{"class":169},[46,71217,79],{"class":56},[46,71219,71213],{"class":173},[46,71221,53274],{"class":56},[46,71223,71224,71226,71228,71230,71232,71235,71238,71240],{"class":48,"line":745},[46,71225,57199],{"class":56},[46,71227,71131],{"class":1361},[46,71229,68616],{"class":169},[46,71231,79],{"class":56},[46,71233,71234],{"class":173},"\"北京\"",[46,71236,71237],{"class":56},">北京\u003C\u002F",[46,71239,71131],{"class":1361},[46,71241,53274],{"class":56},[46,71243,71244,71246,71248,71250,71252,71255,71258,71260],{"class":48,"line":763},[46,71245,57199],{"class":56},[46,71247,71131],{"class":1361},[46,71249,68616],{"class":169},[46,71251,79],{"class":56},[46,71253,71254],{"class":173},"\"上海\"",[46,71256,71257],{"class":56},">上海\u003C\u002F",[46,71259,71131],{"class":1361},[46,71261,53274],{"class":56},[46,71263,71264,71266,71268,71270,71272,71275,71278,71280],{"class":48,"line":778},[46,71265,57199],{"class":56},[46,71267,71131],{"class":1361},[46,71269,68616],{"class":169},[46,71271,79],{"class":56},[46,71273,71274],{"class":173},"\"广州\"",[46,71276,71277],{"class":56},">广州\u003C\u002F",[46,71279,71131],{"class":1361},[46,71281,53274],{"class":56},[46,71283,71284,71286,71288,71290,71292,71295,71298,71300],{"class":48,"line":789},[46,71285,57199],{"class":56},[46,71287,71131],{"class":1361},[46,71289,68616],{"class":169},[46,71291,79],{"class":56},[46,71293,71294],{"class":173},"\"深圳\"",[46,71296,71297],{"class":56},">深圳\u003C\u002F",[46,71299,71131],{"class":1361},[46,71301,53274],{"class":56},[46,71303,71304,71306,71308,71310,71312,71315,71318,71320],{"class":48,"line":794},[46,71305,57199],{"class":56},[46,71307,71131],{"class":1361},[46,71309,68616],{"class":169},[46,71311,79],{"class":56},[46,71313,71314],{"class":173},"\"曹县\"",[46,71316,71317],{"class":56},">曹县\u003C\u002F",[46,71319,71131],{"class":1361},[46,71321,53274],{"class":56},[46,71323,71324,71326,71328],{"class":48,"line":806},[46,71325,53743],{"class":56},[46,71327,71109],{"class":1361},[46,71329,53274],{"class":56},[46,71331,71332,71334,71336,71338,71340,71343,71346,71348],{"class":48,"line":829},[46,71333,53308],{"class":56},[46,71335,55852],{"class":1361},[46,71337,55451],{"class":169},[46,71339,79],{"class":56},[46,71341,71342],{"class":173},"\"add\"",[46,71344,71345],{"class":56},">录入\u003C\u002F",[46,71347,55852],{"class":1361},[46,71349,53274],{"class":56},[46,71351,71352,71354,71356],{"class":48,"line":840},[46,71353,54384],{"class":56},[46,71355,68590],{"class":1361},[46,71357,53274],{"class":56},[46,71359,71360],{"class":48,"line":846},[46,71361,616],{"emptyLinePlaceholder":615},[46,71363,71364,71366,71368,71371,71373],{"class":48,"line":852},[46,71365,54111],{"class":56},[46,71367,10],{"class":1361},[46,71369,71370],{"class":56},">就业榜\u003C\u002F",[46,71372,10],{"class":1361},[46,71374,53274],{"class":56},[46,71376,71377,71379,71381],{"class":48,"line":857},[46,71378,54111],{"class":56},[46,71380,97],{"class":1361},[46,71382,53274],{"class":56},[46,71384,71385,71387,71389],{"class":48,"line":875},[46,71386,53308],{"class":56},[46,71388,100],{"class":1361},[46,71390,53274],{"class":56},[46,71392,71393,71395,71397],{"class":48,"line":892},[46,71394,57199],{"class":56},[46,71396,103],{"class":1361},[46,71398,53274],{"class":56},[46,71400,71401,71403,71405,71408,71410],{"class":48,"line":898},[46,71402,57267],{"class":56},[46,71404,106],{"class":1361},[46,71406,71407],{"class":56},">序号\u003C\u002F",[46,71409,106],{"class":1361},[46,71411,53274],{"class":56},[46,71413,71414,71416,71418,71421,71423],{"class":48,"line":903},[46,71415,57267],{"class":56},[46,71417,106],{"class":1361},[46,71419,71420],{"class":56},">姓名\u003C\u002F",[46,71422,106],{"class":1361},[46,71424,53274],{"class":56},[46,71426,71427,71429,71431,71434,71436],{"class":48,"line":908},[46,71428,57267],{"class":56},[46,71430,106],{"class":1361},[46,71432,71433],{"class":56},">年龄\u003C\u002F",[46,71435,106],{"class":1361},[46,71437,53274],{"class":56},[46,71439,71440,71442,71444,71447,71449],{"class":48,"line":925},[46,71441,57267],{"class":56},[46,71443,106],{"class":1361},[46,71445,71446],{"class":56},">性别\u003C\u002F",[46,71448,106],{"class":1361},[46,71450,53274],{"class":56},[46,71452,71453,71455,71457,71460,71462],{"class":48,"line":1238},[46,71454,57267],{"class":56},[46,71456,106],{"class":1361},[46,71458,71459],{"class":56},">薪资\u003C\u002F",[46,71461,106],{"class":1361},[46,71463,53274],{"class":56},[46,71465,71466,71468,71470,71473,71475],{"class":48,"line":1251},[46,71467,57267],{"class":56},[46,71469,106],{"class":1361},[46,71471,71472],{"class":56},">就业城市\u003C\u002F",[46,71474,106],{"class":1361},[46,71476,53274],{"class":56},[46,71478,71479,71481,71483,71486,71488],{"class":48,"line":1256},[46,71480,57267],{"class":56},[46,71482,106],{"class":1361},[46,71484,71485],{"class":56},">操作\u003C\u002F",[46,71487,106],{"class":1361},[46,71489,53274],{"class":56},[46,71491,71492,71494,71496],{"class":48,"line":1261},[46,71493,57372],{"class":56},[46,71495,103],{"class":1361},[46,71497,53274],{"class":56},[46,71499,71500,71502,71504],{"class":48,"line":1274},[46,71501,53743],{"class":56},[46,71503,100],{"class":1361},[46,71505,53274],{"class":56},[46,71507,71508,71510,71512],{"class":48,"line":10061},[46,71509,53308],{"class":56},[46,71511,120],{"class":1361},[46,71513,53274],{"class":56},[46,71515,71516],{"class":48,"line":11720},[46,71517,71518],{"class":2253},"      \u003C!-- \n",[46,71520,71521],{"class":48,"line":11745},[46,71522,71523],{"class":2253},"        \u003Ctr>\n",[46,71525,71526],{"class":48,"line":11768},[46,71527,71528],{"class":2253},"          \u003Ctd>1001\u003C\u002Ftd>\n",[46,71530,71531],{"class":48,"line":11792},[46,71532,71533],{"class":2253},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[46,71535,71536],{"class":48,"line":11797},[46,71537,71538],{"class":2253},"          \u003Ctd>19\u003C\u002Ftd>\n",[46,71540,71541],{"class":48,"line":11802},[46,71542,71543],{"class":2253},"          \u003Ctd>男\u003C\u002Ftd>\n",[46,71545,71546],{"class":48,"line":11807},[46,71547,71548],{"class":2253},"          \u003Ctd>15000\u003C\u002Ftd>\n",[46,71550,71551],{"class":48,"line":11816},[46,71552,71553],{"class":2253},"          \u003Ctd>上海\u003C\u002Ftd>\n",[46,71555,71556],{"class":48,"line":11821},[46,71557,71558],{"class":2253},"          \u003Ctd>\n",[46,71560,71561],{"class":48,"line":11827},[46,71562,71563],{"class":2253},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[46,71565,71566],{"class":48,"line":11848},[46,71567,71568],{"class":2253},"          \u003C\u002Ftd>\n",[46,71570,71571],{"class":48,"line":11854},[46,71572,71573],{"class":2253},"        \u003C\u002Ftr> \n",[46,71575,71576],{"class":48,"line":11868},[46,71577,71578],{"class":2253},"        -->\n",[46,71580,71581,71583,71585],{"class":48,"line":11874},[46,71582,53743],{"class":56},[46,71584,120],{"class":1361},[46,71586,53274],{"class":56},[46,71588,71589,71591,71593],{"class":48,"line":11901},[46,71590,54384],{"class":56},[46,71592,97],{"class":1361},[46,71594,53274],{"class":56},[46,71596,71597,71599,71601],{"class":48,"line":11910},[46,71598,54111],{"class":56},[46,71600,53780],{"class":1361},[46,71602,53274],{"class":56},[46,71604,71605],{"class":48,"line":11916},[46,71606,61923],{"class":2253},[46,71608,71609,71611,71614,71616,71618,71620,71622,71625],{"class":48,"line":11924},[46,71610,13225],{"class":52},[46,71612,71613],{"class":180}," uname",[46,71615,647],{"class":52},[46,71617,56361],{"class":56},[46,71619,56364],{"class":169},[46,71621,1152],{"class":56},[46,71623,71624],{"class":173},"'.uname'",[46,71626,459],{"class":56},[46,71628,71629,71631,71633,71635,71637,71639,71641,71644],{"class":48,"line":11929},[46,71630,13225],{"class":52},[46,71632,17690],{"class":180},[46,71634,647],{"class":52},[46,71636,56361],{"class":56},[46,71638,56364],{"class":169},[46,71640,1152],{"class":56},[46,71642,71643],{"class":173},"'.age'",[46,71645,459],{"class":56},[46,71647,71648,71650,71653,71655,71657,71659,71661,71664],{"class":48,"line":18605},[46,71649,13225],{"class":52},[46,71651,71652],{"class":180}," gender",[46,71654,647],{"class":52},[46,71656,56361],{"class":56},[46,71658,56364],{"class":169},[46,71660,1152],{"class":56},[46,71662,71663],{"class":173},"'.gender'",[46,71665,459],{"class":56},[46,71667,71668,71670,71673,71675,71677,71679,71681,71684],{"class":48,"line":18611},[46,71669,13225],{"class":52},[46,71671,71672],{"class":180}," salary",[46,71674,647],{"class":52},[46,71676,56361],{"class":56},[46,71678,56364],{"class":169},[46,71680,1152],{"class":56},[46,71682,71683],{"class":173},"'.salary'",[46,71685,459],{"class":56},[46,71687,71688,71690,71693,71695,71697,71699,71701,71704],{"class":48,"line":18634},[46,71689,13225],{"class":52},[46,71691,71692],{"class":180}," city",[46,71694,647],{"class":52},[46,71696,56361],{"class":56},[46,71698,56364],{"class":169},[46,71700,1152],{"class":56},[46,71702,71703],{"class":173},"'.city'",[46,71705,459],{"class":56},[46,71707,71708,71710,71713,71715,71717,71719,71721,71724],{"class":48,"line":18640},[46,71709,13225],{"class":52},[46,71711,71712],{"class":180}," tbody",[46,71714,647],{"class":52},[46,71716,56361],{"class":56},[46,71718,56364],{"class":169},[46,71720,1152],{"class":56},[46,71722,71723],{"class":173},"'tbody'",[46,71725,459],{"class":56},[46,71727,71728],{"class":48,"line":18663},[46,71729,616],{"emptyLinePlaceholder":615},[46,71731,71732],{"class":48,"line":18677},[46,71733,71734],{"class":2253},"    \u002F\u002F 获取所有带有name属性的元素\n",[46,71736,71737,71739,71742,71744,71746,71748,71750,71753],{"class":48,"line":18697},[46,71738,13225],{"class":52},[46,71740,71741],{"class":180}," items",[46,71743,647],{"class":52},[46,71745,56361],{"class":56},[46,71747,57646],{"class":169},[46,71749,1152],{"class":56},[46,71751,71752],{"class":173},"'[name]'",[46,71754,459],{"class":56},[46,71756,71757],{"class":48,"line":18703},[46,71758,71759],{"class":2253},"    \u002F\u002F 声明一个空的数组\n",[46,71761,71762,71764,71766,71768],{"class":48,"line":18714},[46,71763,13225],{"class":52},[46,71765,59660],{"class":180},[46,71767,647],{"class":52},[46,71769,53805],{"class":56},[46,71771,71772],{"class":48,"line":18737},[46,71773,71774],{"class":2253},"    \u002F\u002F 1.录入模块\n",[46,71776,71777],{"class":48,"line":18759},[46,71778,71779],{"class":2253},"    \u002F\u002F 1.1这是一个表单提交事件\n",[46,71781,71782,71784,71787,71789,71791,71793,71795,71798],{"class":48,"line":18764},[46,71783,13225],{"class":52},[46,71785,71786],{"class":180}," info",[46,71788,647],{"class":52},[46,71790,56361],{"class":56},[46,71792,56364],{"class":169},[46,71794,1152],{"class":56},[46,71796,71797],{"class":173},"'.info'",[46,71799,459],{"class":56},[46,71801,71802,71805,71807,71809,71812,71814,71816,71818,71820],{"class":48,"line":18770},[46,71803,71804],{"class":56},"    info.",[46,71806,59778],{"class":169},[46,71808,1152],{"class":56},[46,71810,71811],{"class":173},"'submit'",[46,71813,448],{"class":56},[46,71815,56414],{"class":52},[46,71817,3702],{"class":56},[46,71819,2269],{"class":439},[46,71821,14445],{"class":56},[46,71823,71824],{"class":48,"line":18784},[46,71825,71826],{"class":2253},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[46,71828,71829,71832,71835],{"class":48,"line":18797},[46,71830,71831],{"class":56},"      e.",[46,71833,71834],{"class":169},"preventDefault",[46,71836,4006],{"class":56},[46,71838,71839],{"class":48,"line":18802},[46,71840,61977],{"class":2253},[46,71842,71843],{"class":48,"line":18816},[46,71844,616],{"emptyLinePlaceholder":615},[46,71846,71847],{"class":48,"line":18821},[46,71848,71849],{"class":2253},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[46,71851,71852],{"class":48,"line":18827},[46,71853,71854],{"class":2253},"      \u002F\u002F 先遍历循环\n",[46,71856,71857,71859,71861,71863,71865,71867,71869,71871,71873,71876,71878,71880,71882],{"class":48,"line":18832},[46,71858,54251],{"class":52},[46,71860,3702],{"class":56},[46,71862,53814],{"class":52},[46,71864,11442],{"class":56},[46,71866,79],{"class":52},[46,71868,887],{"class":180},[46,71870,11449],{"class":56},[46,71872,821],{"class":52},[46,71874,71875],{"class":56}," items.",[46,71877,53935],{"class":180},[46,71879,5233],{"class":56},[46,71881,4321],{"class":52},[46,71883,14445],{"class":56},[46,71885,71886,71888,71891,71893,71896],{"class":48,"line":18846},[46,71887,4525],{"class":52},[46,71889,71890],{"class":56}," (items[i].value ",[46,71892,56451],{"class":52},[46,71894,71895],{"class":173}," ''",[46,71897,14445],{"class":56},[46,71899,71900,71903,71906,71908,71911],{"class":48,"line":18851},[46,71901,71902],{"class":52},"          return",[46,71904,71905],{"class":169}," alert",[46,71907,1152],{"class":56},[46,71909,71910],{"class":173},"'输入内容不能为空'",[46,71912,459],{"class":56},[46,71914,71915],{"class":48,"line":18856},[46,71916,4557],{"class":56},[46,71918,71919],{"class":48,"line":18870},[46,71920,54365],{"class":56},[46,71922,71923],{"class":48,"line":18882},[46,71924,616],{"emptyLinePlaceholder":615},[46,71926,71927],{"class":48,"line":18887},[46,71928,71929],{"class":2253},"      \u002F\u002F 创建新的对象\n",[46,71931,71932,71934,71937,71939],{"class":48,"line":18900},[46,71933,60193],{"class":52},[46,71935,71936],{"class":180}," obj",[46,71938,647],{"class":52},[46,71940,17573],{"class":56},[46,71942,71943,71946,71948,71950,71952],{"class":48,"line":18905},[46,71944,71945],{"class":56},"        stuID: arr.",[46,71947,53935],{"class":180},[46,71949,47537],{"class":52},[46,71951,27110],{"class":180},[46,71953,33443],{"class":56},[46,71955,71956],{"class":48,"line":18910},[46,71957,71958],{"class":56},"        uname: uname.value,\n",[46,71960,71961],{"class":48,"line":18915},[46,71962,71963],{"class":56},"        age: age.value,\n",[46,71965,71966],{"class":48,"line":18928},[46,71967,71968],{"class":56},"        gender: gender.value,\n",[46,71970,71971],{"class":48,"line":18933},[46,71972,71973],{"class":56},"        salary: salary.value,\n",[46,71975,71976],{"class":48,"line":34607},[46,71977,71978],{"class":56},"        city: city.value\n",[46,71980,71981],{"class":48,"line":34613},[46,71982,54365],{"class":56},[46,71984,71985],{"class":48,"line":34619},[46,71986,71987],{"class":2253},"      \u002F\u002F console.log(obj);\n",[46,71989,71990],{"class":48,"line":34625},[46,71991,71992],{"class":2253},"      \u002F\u002F 追加到数组里面\n",[46,71994,71995,71997,71999],{"class":48,"line":34631},[46,71996,59972],{"class":56},[46,71998,53851],{"class":169},[46,72000,72001],{"class":56},"(obj)\n",[46,72003,72004],{"class":48,"line":34642},[46,72005,72006],{"class":2253},"      \u002F\u002F console.log(arr);\n",[46,72008,72009],{"class":48,"line":34648},[46,72010,72011],{"class":2253},"      \u002F\u002F 清空表单  reset重置表单\n",[46,72013,72014,72017,72019,72022],{"class":48,"line":34668},[46,72015,72016],{"class":180},"      this",[46,72018,2744],{"class":56},[46,72020,72021],{"class":169},"reset",[46,72023,4006],{"class":56},[46,72025,72026],{"class":48,"line":34674},[46,72027,72028],{"class":2253},"      \u002F\u002F 调用渲染函数\n",[46,72030,72031,72034],{"class":48,"line":34685},[46,72032,72033],{"class":169},"      render",[46,72035,4006],{"class":56},[46,72037,72038],{"class":48,"line":34691},[46,72039,35434],{"class":56},[46,72041,72042],{"class":48,"line":34697},[46,72043,72044],{"class":2253},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[46,72046,72047,72050,72053],{"class":48,"line":34703},[46,72048,72049],{"class":52},"    function",[46,72051,72052],{"class":169}," render",[46,72054,12857],{"class":56},[46,72056,72057],{"class":48,"line":34709},[46,72058,72059],{"class":2253},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[46,72061,72062,72065,72067],{"class":48,"line":34715},[46,72063,72064],{"class":56},"      tbody.innerHTML ",[46,72066,79],{"class":52},[46,72068,72069],{"class":173}," ''\n",[46,72071,72072],{"class":48,"line":34721},[46,72073,72074],{"class":2253},"      \u002F\u002F 遍历数组\n",[46,72076,72077,72079,72081,72083,72085,72087,72089,72091,72093,72095,72097,72099,72101],{"class":48,"line":34727},[46,72078,54251],{"class":52},[46,72080,3702],{"class":56},[46,72082,53814],{"class":52},[46,72084,11442],{"class":56},[46,72086,79],{"class":52},[46,72088,887],{"class":180},[46,72090,11449],{"class":56},[46,72092,821],{"class":52},[46,72094,53932],{"class":56},[46,72096,53935],{"class":180},[46,72098,5233],{"class":56},[46,72100,4321],{"class":52},[46,72102,14445],{"class":56},[46,72104,72105,72107,72110,72112,72114,72117,72119,72122],{"class":48,"line":34747},[46,72106,63235],{"class":52},[46,72108,72109],{"class":180}," tr",[46,72111,647],{"class":52},[46,72113,56361],{"class":56},[46,72115,72116],{"class":169},"createElement",[46,72118,1152],{"class":56},[46,72120,72121],{"class":173},"'tr'",[46,72123,459],{"class":56},[46,72125,72126,72129,72131],{"class":48,"line":34753},[46,72127,72128],{"class":56},"        tr.innerHTML ",[46,72130,79],{"class":52},[46,72132,72133],{"class":173}," `\n",[46,72135,72136,72139,72141,72143,72145,72148,72151],{"class":48,"line":34769},[46,72137,72138],{"class":173},"        \u003Ctd>${",[46,72140,5898],{"class":56},[46,72142,3076],{"class":173},[46,72144,2628],{"class":56},[46,72146,72147],{"class":173},"].",[46,72149,72150],{"class":56},"stuID",[46,72152,72153],{"class":173},"}\u003C\u002Ftd>\n",[46,72155,72156,72159,72161,72163,72165,72167,72170],{"class":48,"line":34775},[46,72157,72158],{"class":173},"          \u003Ctd>${",[46,72160,5898],{"class":56},[46,72162,3076],{"class":173},[46,72164,2628],{"class":56},[46,72166,72147],{"class":173},[46,72168,72169],{"class":56},"uname",[46,72171,72153],{"class":173},[46,72173,72174,72176,72178,72180,72182,72184,72187],{"class":48,"line":34789},[46,72175,72158],{"class":173},[46,72177,5898],{"class":56},[46,72179,3076],{"class":173},[46,72181,2628],{"class":56},[46,72183,72147],{"class":173},[46,72185,72186],{"class":56},"age",[46,72188,72153],{"class":173},[46,72190,72191,72193,72195,72197,72199,72201,72204],{"class":48,"line":34795},[46,72192,72158],{"class":173},[46,72194,5898],{"class":56},[46,72196,3076],{"class":173},[46,72198,2628],{"class":56},[46,72200,72147],{"class":173},[46,72202,72203],{"class":56},"gender",[46,72205,72153],{"class":173},[46,72207,72208,72210,72212,72214,72216,72218,72221],{"class":48,"line":34810},[46,72209,72158],{"class":173},[46,72211,5898],{"class":56},[46,72213,3076],{"class":173},[46,72215,2628],{"class":56},[46,72217,72147],{"class":173},[46,72219,72220],{"class":56},"salary",[46,72222,72153],{"class":173},[46,72224,72225,72227,72229,72231,72233,72235,72238],{"class":48,"line":34816},[46,72226,72158],{"class":173},[46,72228,5898],{"class":56},[46,72230,3076],{"class":173},[46,72232,2628],{"class":56},[46,72234,72147],{"class":173},[46,72236,72237],{"class":56},"city",[46,72239,72153],{"class":173},[46,72241,72242],{"class":48,"line":34825},[46,72243,71558],{"class":173},[46,72245,72246,72249,72251],{"class":48,"line":34831},[46,72247,72248],{"class":173},"            \u003Ca href=\"javascript:\" data-id=${",[46,72250,2628],{"class":56},[46,72252,72253],{"class":173},"}>删除\u003C\u002Fa>\n",[46,72255,72256],{"class":48,"line":34840},[46,72257,72258],{"class":173},"          \u003C\u002Ftd> \n",[46,72260,72261],{"class":48,"line":34846},[46,72262,72263],{"class":173},"          `\n",[46,72265,72266],{"class":48,"line":34852},[46,72267,72268],{"class":2253},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[46,72270,72271,72274,72277],{"class":48,"line":34861},[46,72272,72273],{"class":56},"        tbody.",[46,72275,72276],{"class":169},"appendChild",[46,72278,72279],{"class":56},"(tr)\n",[46,72281,72282],{"class":48,"line":34867},[46,72283,54365],{"class":56},[46,72285,72286],{"class":48,"line":34878},[46,72287,4217],{"class":56},[46,72289,72290],{"class":48,"line":34884},[46,72291,616],{"emptyLinePlaceholder":615},[46,72293,72294],{"class":48,"line":34903},[46,72295,72296],{"class":2253},"    \u002F\u002F 3.删除委托\n",[46,72298,72299],{"class":48,"line":34909},[46,72300,72301],{"class":2253},"    \u002F\u002F 3.1 事件委托 tbody\n",[46,72303,72304,72307,72309,72311,72313,72315,72317,72319,72321],{"class":48,"line":34920},[46,72305,72306],{"class":56},"    tbody.",[46,72308,59778],{"class":169},[46,72310,1152],{"class":56},[46,72312,59783],{"class":173},[46,72314,448],{"class":56},[46,72316,56414],{"class":52},[46,72318,3702],{"class":56},[46,72320,2269],{"class":439},[46,72322,14445],{"class":56},[46,72324,72325,72327,72329,72331,72333],{"class":48,"line":34926},[46,72326,56445],{"class":52},[46,72328,68999],{"class":56},[46,72330,56451],{"class":52},[46,72332,70221],{"class":173},[46,72334,14445],{"class":56},[46,72336,72337],{"class":48,"line":34946},[46,72338,72339],{"class":2253},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[46,72341,72342],{"class":48,"line":34962},[46,72343,72344],{"class":2253},"        \u002F\u002F console.log(e.target.dataset.id);\n",[46,72346,72347],{"class":48,"line":34968},[46,72348,72349],{"class":2253},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[46,72351,72352,72355,72357,72360,72362],{"class":48,"line":34982},[46,72353,72354],{"class":56},"        arr.",[46,72356,59975],{"class":169},[46,72358,72359],{"class":56},"(e.target.dataset.id, ",[46,72361,2405],{"class":180},[46,72363,459],{"class":56},[46,72365,72366],{"class":48,"line":34988},[46,72367,72368],{"class":2253},"        \u002F\u002F 重新渲染一次\n",[46,72370,72371,72374],{"class":48,"line":34994},[46,72372,72373],{"class":169},"        render",[46,72375,4006],{"class":56},[46,72377,72378],{"class":48,"line":35005},[46,72379,54365],{"class":56},[46,72381,72382],{"class":48,"line":35011},[46,72383,35434],{"class":56},[46,72385,72386,72388,72390],{"class":48,"line":35017},[46,72387,54384],{"class":56},[46,72389,53780],{"class":1361},[46,72391,53274],{"class":56},[46,72393,72394],{"class":48,"line":35027},[46,72395,616],{"emptyLinePlaceholder":615},[46,72397,72398,72400,72402],{"class":48,"line":35033},[46,72399,53752],{"class":56},[46,72401,53767],{"class":1361},[46,72403,53274],{"class":56},[46,72405,72406],{"class":48,"line":35044},[46,72407,616],{"emptyLinePlaceholder":615},[46,72409,72410,72412,72414],{"class":48,"line":35050},[46,72411,53752],{"class":56},[46,72413,52603],{"class":1361},[46,72415,53274],{"class":56},[19,72417,72418],{},"样式：",[36,72420,72424],{"className":72421,"code":72422,"language":72423,"meta":41,"style":41},"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",[43,72425,72426,72431,72441,72450,72454,72458,72463,72473,72478,72482,72487,72497,72502,72511,72515,72519,72524,72529,72539,72549,72554,72558,72563,72572,72582,72587,72597,72607,72611,72616,72624,72628,72633,72638,72643,72651,72660,72664,72669,72678,72682,72687,72696,72700,72705,72714,72723,72731,72735,72740,72749,72759,72768,72778,72784,72793,72803,72813,72817,72822,72831,72839,72849,72857,72866,72875,72885,72893,72897,72902,72911],{"__ignoreMap":41},[46,72427,72428],{"class":48,"line":49},[46,72429,72430],{"class":56},"* {\n",[46,72432,72433,72436,72438],{"class":48,"line":60},[46,72434,72435],{"class":1361},"  margin",[46,72437,53404],{"class":56},[46,72439,72440],{"class":173},"0;\n",[46,72442,72443,72446,72448],{"class":48,"line":200},[46,72444,72445],{"class":173},"  padding",[46,72447,53404],{"class":56},[46,72449,72440],{"class":173},[46,72451,72452],{"class":48,"line":211},[46,72453,3616],{"class":56},[46,72455,72456],{"class":48,"line":222},[46,72457,616],{"emptyLinePlaceholder":615},[46,72459,72460],{"class":48,"line":636},[46,72461,72462],{"class":173},"a {\n",[46,72464,72465,72468,72470],{"class":48,"line":641},[46,72466,72467],{"class":1361},"  text-decoration",[46,72469,53404],{"class":56},[46,72471,72472],{"class":173},"none;\n",[46,72474,72475],{"class":48,"line":653},[46,72476,72477],{"class":173},"  color:#721c24;\n",[46,72479,72480],{"class":48,"line":659},[46,72481,3616],{"class":56},[46,72483,72484],{"class":48,"line":665},[46,72485,72486],{"class":173},"h1 {\n",[46,72488,72489,72492,72494],{"class":48,"line":670},[46,72490,72491],{"class":1361},"  text-align",[46,72493,53404],{"class":56},[46,72495,72496],{"class":173},"center;\n",[46,72498,72499],{"class":48,"line":676},[46,72500,72501],{"class":173},"  color:#333;\n",[46,72503,72504,72506,72508],{"class":48,"line":682},[46,72505,72435],{"class":1361},[46,72507,53404],{"class":56},[46,72509,72510],{"class":173},"20px 0;\n",[46,72512,72513],{"class":48,"line":688},[46,72514,4695],{"class":56},[46,72516,72517],{"class":48,"line":693},[46,72518,3616],{"class":56},[46,72520,72521],{"class":48,"line":699},[46,72522,72523],{"class":173},"table {\n",[46,72525,72526],{"class":48,"line":705},[46,72527,72528],{"class":173},"  margin:0 auto;\n",[46,72530,72531,72534,72536],{"class":48,"line":711},[46,72532,72533],{"class":1361},"  width",[46,72535,53404],{"class":56},[46,72537,72538],{"class":173},"800px;\n",[46,72540,72541,72544,72546],{"class":48,"line":717},[46,72542,72543],{"class":1361},"  border-collapse",[46,72545,53404],{"class":56},[46,72547,72548],{"class":173},"collapse;\n",[46,72550,72551],{"class":48,"line":723},[46,72552,72553],{"class":173},"  color:#004085;\n",[46,72555,72556],{"class":48,"line":729},[46,72557,3616],{"class":56},[46,72559,72560],{"class":48,"line":735},[46,72561,72562],{"class":173},"th {\n",[46,72564,72565,72567,72569],{"class":48,"line":740},[46,72566,72445],{"class":1361},[46,72568,53404],{"class":56},[46,72570,72571],{"class":173},"10px;\n",[46,72573,72574,72577,72579],{"class":48,"line":745},[46,72575,72576],{"class":1361},"  background",[46,72578,53404],{"class":56},[46,72580,72581],{"class":2253},"#cfe5ff;\n",[46,72583,72584],{"class":48,"line":763},[46,72585,72586],{"class":56},"  \n",[46,72588,72589,72592,72594],{"class":48,"line":778},[46,72590,72591],{"class":1361},"  font-size",[46,72593,53404],{"class":56},[46,72595,72596],{"class":173},"20px;\n",[46,72598,72599,72602,72604],{"class":48,"line":789},[46,72600,72601],{"class":1361},"  font-weight",[46,72603,53404],{"class":56},[46,72605,72606],{"class":173},"400;\n",[46,72608,72609],{"class":48,"line":794},[46,72610,3616],{"class":56},[46,72612,72613],{"class":48,"line":806},[46,72614,72615],{"class":173},"td,th {\n",[46,72617,72618,72621],{"class":48,"line":829},[46,72619,72620],{"class":173},"  border:1px solid",[46,72622,72623],{"class":2253}," #b8daff;\n",[46,72625,72626],{"class":48,"line":840},[46,72627,3616],{"class":56},[46,72629,72630],{"class":48,"line":846},[46,72631,72632],{"class":173},"td {\n",[46,72634,72635],{"class":48,"line":852},[46,72636,72637],{"class":173},"  padding:10px;\n",[46,72639,72640],{"class":48,"line":857},[46,72641,72642],{"class":173},"  color:#666;\n",[46,72644,72645,72647,72649],{"class":48,"line":875},[46,72646,72491],{"class":1361},[46,72648,53404],{"class":56},[46,72650,72496],{"class":173},[46,72652,72653,72655,72657],{"class":48,"line":892},[46,72654,72591],{"class":1361},[46,72656,53404],{"class":56},[46,72658,72659],{"class":173},"16px;\n",[46,72661,72662],{"class":48,"line":898},[46,72663,3616],{"class":56},[46,72665,72666],{"class":48,"line":903},[46,72667,72668],{"class":173},"tbody tr {\n",[46,72670,72671,72673,72675],{"class":48,"line":908},[46,72672,72576],{"class":1361},[46,72674,53404],{"class":56},[46,72676,72677],{"class":2253},"#fff;\n",[46,72679,72680],{"class":48,"line":925},[46,72681,3616],{"class":56},[46,72683,72684],{"class":48,"line":1238},[46,72685,72686],{"class":173},"tbody tr:hover {\n",[46,72688,72689,72691,72693],{"class":48,"line":1251},[46,72690,72576],{"class":1361},[46,72692,53404],{"class":56},[46,72694,72695],{"class":2253},"#e1ecf8;\n",[46,72697,72698],{"class":48,"line":1256},[46,72699,3616],{"class":56},[46,72701,72702],{"class":48,"line":1261},[46,72703,72704],{"class":173},".info {\n",[46,72706,72707,72709,72711],{"class":48,"line":1274},[46,72708,72533],{"class":1361},[46,72710,53404],{"class":56},[46,72712,72713],{"class":173},"900px;\n",[46,72715,72716,72718,72720],{"class":48,"line":10061},[46,72717,72435],{"class":1361},[46,72719,53404],{"class":56},[46,72721,72722],{"class":173},"50px auto;\n",[46,72724,72725,72727,72729],{"class":48,"line":11720},[46,72726,72491],{"class":1361},[46,72728,53404],{"class":56},[46,72730,72496],{"class":173},[46,72732,72733],{"class":48,"line":11745},[46,72734,3616],{"class":56},[46,72736,72737],{"class":48,"line":11768},[46,72738,72739],{"class":173},".info  input, .info select {\n",[46,72741,72742,72744,72746],{"class":48,"line":11792},[46,72743,72533],{"class":1361},[46,72745,53404],{"class":56},[46,72747,72748],{"class":173},"80px;\n",[46,72750,72751,72754,72756],{"class":48,"line":11797},[46,72752,72753],{"class":1361},"  height",[46,72755,53404],{"class":56},[46,72757,72758],{"class":173},"27px;\n",[46,72760,72761,72764,72766],{"class":48,"line":11802},[46,72762,72763],{"class":1361},"  outline",[46,72765,53404],{"class":56},[46,72767,72472],{"class":173},[46,72769,72770,72773,72775],{"class":48,"line":11807},[46,72771,72772],{"class":1361},"  border-radius",[46,72774,53404],{"class":56},[46,72776,72777],{"class":173},"5px;\n",[46,72779,72780,72782],{"class":48,"line":11816},[46,72781,72620],{"class":173},[46,72783,72623],{"class":2253},[46,72785,72786,72789,72791],{"class":48,"line":11821},[46,72787,72788],{"class":1361},"  padding-left",[46,72790,53404],{"class":56},[46,72792,72777],{"class":173},[46,72794,72795,72798,72800],{"class":48,"line":11827},[46,72796,72797],{"class":1361},"  box-sizing",[46,72799,53404],{"class":56},[46,72801,72802],{"class":173},"border-box;\n",[46,72804,72805,72808,72810],{"class":48,"line":11848},[46,72806,72807],{"class":1361},"  margin-right",[46,72809,53404],{"class":56},[46,72811,72812],{"class":173},"15px;\n",[46,72814,72815],{"class":48,"line":11854},[46,72816,3616],{"class":56},[46,72818,72819],{"class":48,"line":11868},[46,72820,72821],{"class":173},".info button {\n",[46,72823,72824,72826,72828],{"class":48,"line":11874},[46,72825,72533],{"class":1361},[46,72827,53404],{"class":56},[46,72829,72830],{"class":173},"60px;\n",[46,72832,72833,72835,72837],{"class":48,"line":11901},[46,72834,72753],{"class":1361},[46,72836,53404],{"class":56},[46,72838,72758],{"class":173},[46,72840,72841,72844,72846],{"class":48,"line":11910},[46,72842,72843],{"class":1361},"  background-color",[46,72845,53404],{"class":56},[46,72847,72848],{"class":2253},"#004085;\n",[46,72850,72851,72853,72855],{"class":48,"line":11916},[46,72852,72763],{"class":1361},[46,72854,53404],{"class":56},[46,72856,72472],{"class":173},[46,72858,72859,72862,72864],{"class":48,"line":11924},[46,72860,72861],{"class":1361},"  border",[46,72863,53404],{"class":56},[46,72865,72440],{"class":173},[46,72867,72868,72871,72873],{"class":48,"line":11929},[46,72869,72870],{"class":1361},"  color",[46,72872,53404],{"class":56},[46,72874,72677],{"class":2253},[46,72876,72877,72880,72882],{"class":48,"line":18605},[46,72878,72879],{"class":1361},"  cursor",[46,72881,53404],{"class":56},[46,72883,72884],{"class":173},"pointer;\n",[46,72886,72887,72889,72891],{"class":48,"line":18611},[46,72888,72772],{"class":1361},[46,72890,53404],{"class":56},[46,72892,72777],{"class":173},[46,72894,72895],{"class":48,"line":18634},[46,72896,3616],{"class":56},[46,72898,72899],{"class":48,"line":18640},[46,72900,72901],{"class":173},".info .age {\n",[46,72903,72904,72906,72908],{"class":48,"line":18663},[46,72905,72533],{"class":1361},[46,72907,53404],{"class":56},[46,72909,72910],{"class":173},"50px;\n",[46,72912,72913],{"class":48,"line":18677},[46,72914,3616],{"class":56},[19,72916,72917],{},"思路：",[19,72919,72920],{},[3514,72921],{"alt":41,"src":72922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[19,72924,72925],{},[3514,72926],{"alt":41,"src":72927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[19,72929,72930],{},[3514,72931],{"alt":41,"src":72932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[479,72934,72936],{"id":72935},"_3315-重绘回流","3.3.15 重绘回流",[19,72938,72939],{},[3514,72940],{"alt":41,"src":72941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[19,72943,72944],{},[3514,72945],{"alt":41,"src":72946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[19,72948,72949],{},[3514,72950],{"alt":41,"src":72951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,72953,72955],{"id":72954},"_34-bom","3.4 BOM",[19,72957,72958],{},[3514,72959],{"alt":41,"src":72960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[19,72962,72963],{},"平时写的document省略了window而已，实际上是window.document",[19,72965,72966],{},"函数也是这样，调用的时候实际为window.fn()",[19,72968,72969],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[19,72971,72972],{},"window大部分情况下可以省略",[479,72974,72976],{"id":72975},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[19,72978,72979],{},"只执行一次",[19,72981,72982],{},[3514,72983],{"alt":41,"src":72984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[19,72986,72987],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[19,72989,72990],{},[3514,72991],{"alt":41,"src":72992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[479,72994,72996],{"id":72995},"_342-js执行机制","3.4.2 JS执行机制",[19,72998,72999],{},[3514,73000],{"alt":41,"src":73001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[19,73003,73004],{},"两个的结果都是1111 3333 2222",[19,73006,73007],{},[3514,73008],{"alt":41,"src":73009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[19,73011,73012],{},[3514,73013],{"alt":41,"src":73014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[19,73016,73017],{},[3514,73018],{"alt":41,"src":73019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[19,73021,73022],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[19,73024,73025],{},"工作流程：",[19,73027,73028],{},[3514,73029],{"alt":41,"src":73030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[19,73032,73033],{},[3514,73034],{"alt":41,"src":73035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[19,73037,73038],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[19,73040,73041],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[479,73043,73045],{"id":73044},"_343-location对象","3.4.3 location对象",[19,73047,73048],{},"location对象属于window这个全局对象下的，可以 省略window",[19,73050,73051],{},[3514,73052],{"alt":41,"src":73053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[19,73055,73056],{},"href可以跳转页面",[23,73058,73059],{},[26,73060,73061],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[19,73063,73064],{},"search得到提交信息之后网站后边的地址",[19,73066,73067],{},[3514,73068],{"alt":41,"src":73069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[19,73071,73072],{},[3514,73073],{"alt":41,"src":73074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[23,73076,73077],{"start":60},[26,73078,73079],{},"hash:这个获取单页面应用#后边的地址",[19,73081,73082],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[19,73084,73085],{},[3514,73086],{"alt":41,"src":73087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[36,73089,73091],{"className":1350,"code":73090,"language":1352,"meta":41,"style":41},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[43,73092,73093,73113,73133],{"__ignoreMap":41},[46,73094,73095,73097,73099,73101,73103,73106,73109,73111],{"class":48,"line":49},[46,73096,54111],{"class":56},[46,73098,2426],{"class":1361},[46,73100,63022],{"class":169},[46,73102,79],{"class":56},[46,73104,73105],{"class":173},"\"#\u002Fmy\"",[46,73107,73108],{"class":56},">我的\u003C\u002F",[46,73110,2426],{"class":1361},[46,73112,53274],{"class":56},[46,73114,73115,73117,73119,73121,73123,73126,73129,73131],{"class":48,"line":60},[46,73116,54111],{"class":56},[46,73118,2426],{"class":1361},[46,73120,63022],{"class":169},[46,73122,79],{"class":56},[46,73124,73125],{"class":173},"\"#\u002Ffriend\"",[46,73127,73128],{"class":56},">关注\u003C\u002F",[46,73130,2426],{"class":1361},[46,73132,53274],{"class":56},[46,73134,73135,73137,73139,73141,73143,73146,73149,73151],{"class":48,"line":200},[46,73136,54111],{"class":56},[46,73138,2426],{"class":1361},[46,73140,63022],{"class":169},[46,73142,79],{"class":56},[46,73144,73145],{"class":173},"\"#\u002Fdownload\"",[46,73147,73148],{"class":56},">下载\u003C\u002F",[46,73150,2426],{"class":1361},[46,73152,53274],{"class":56},[19,73154,73155],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[23,73157,73158],{"start":200},[26,73159,73160,73161,73163,73164,73166],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[55681,73162],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[55681,73165],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[479,73168,73170],{"id":73169},"_345-navigator对象","3.4.5 navigator对象",[19,73172,73173],{},[3514,73174],{"alt":41,"src":73175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[36,73177,73181],{"className":73178,"code":73179,"language":73180,"meta":41,"style":41},"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",[43,73182,73183,73188,73199,73211,73216,73267,73308,73313,73326,73338,73343],{"__ignoreMap":41},[46,73184,73185],{"class":48,"line":49},[46,73186,73187],{"class":2253},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[46,73189,73190,73192,73194,73196],{"class":48,"line":60},[46,73191,2414],{"class":52},[46,73193,1152],{"class":56},[46,73195,56414],{"class":52},[46,73197,73198],{"class":56}," () { \n",[46,73200,73201,73203,73206,73208],{"class":48,"line":200},[46,73202,8805],{"class":52},[46,73204,73205],{"class":180}," userAgent",[46,73207,647],{"class":52},[46,73209,73210],{"class":56}," navigator.userAgent \n",[46,73212,73213],{"class":48,"line":211},[46,73214,73215],{"class":2253},"\u002F\u002F 验证是否为Android或iPhone \n",[46,73217,73218,73220,73223,73225,73228,73231,73233,73235,73238,73240,73243,73247,73249,73251,73253,73256,73258,73260,73262,73264],{"class":48,"line":222},[46,73219,8805],{"class":52},[46,73221,73222],{"class":180}," android",[46,73224,647],{"class":52},[46,73226,73227],{"class":56}," userAgent.",[46,73229,73230],{"class":169},"match",[46,73232,1152],{"class":56},[46,73234,2770],{"class":173},[46,73236,73237],{"class":49945},"(Android);",[46,73239,3170],{"class":52},[46,73241,73242],{"class":180},"[\\s",[46,73244,73246],{"class":73245},"snhLl","\\\u002F",[46,73248,3125],{"class":180},[46,73250,2668],{"class":52},[46,73252,1152],{"class":49945},[46,73254,73255],{"class":180},"[\\d.]",[46,73257,2668],{"class":52},[46,73259,2616],{"class":49945},[46,73261,3170],{"class":52},[46,73263,2770],{"class":173},[46,73265,73266],{"class":56},") \n",[46,73268,73269,73271,73274,73276,73278,73280,73282,73284,73287,73290,73293,73295,73297,73300,73302,73304,73306],{"class":48,"line":636},[46,73270,8805],{"class":52},[46,73272,73273],{"class":180}," iphone",[46,73275,647],{"class":52},[46,73277,73227],{"class":56},[46,73279,73230],{"class":169},[46,73281,1152],{"class":56},[46,73283,2770],{"class":173},[46,73285,73286],{"class":49945},"(iPhone",[46,73288,73289],{"class":180},"\\s",[46,73291,73292],{"class":49945},"OS)",[46,73294,73289],{"class":180},[46,73296,1152],{"class":49945},[46,73298,73299],{"class":180},"[\\d_]",[46,73301,2668],{"class":52},[46,73303,2616],{"class":49945},[46,73305,2770],{"class":173},[46,73307,73266],{"class":56},[46,73309,73310],{"class":48,"line":641},[46,73311,73312],{"class":2253},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[46,73314,73315,73317,73320,73323],{"class":48,"line":653},[46,73316,911],{"class":52},[46,73318,73319],{"class":56}," (android ",[46,73321,73322],{"class":52},"||",[46,73324,73325],{"class":56}," iphone) { \n",[46,73327,73328,73331,73333,73336],{"class":48,"line":659},[46,73329,73330],{"class":56},"location.href ",[46,73332,79],{"class":52},[46,73334,73335],{"class":173}," 'http:\u002F\u002Fm.itcast.cn'",[46,73337,4695],{"class":56},[46,73339,73340],{"class":48,"line":665},[46,73341,73342],{"class":56},"} \n",[46,73344,73345],{"class":48,"line":670},[46,73346,73347],{"class":56},"})()\n",[479,73349,73351],{"id":73350},"_346-histroy对象","3.4.6 histroy对象",[19,73353,73354],{},[3514,73355],{"alt":41,"src":73356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[19,73358,73359],{},"浏览器地址的前进与后退!!!",[19,73361,73362],{},"history.back() 等效于 history.go(-1)",[19,73364,73365],{},"history.forward() 等效于 history.go(1)",[14,73367,73369],{"id":73368},"_35-本地存储","3.5 本地存储",[23,73371,73372,73375,73378],{},[26,73373,73374],{},"数据存储在用户浏览器中",[26,73376,73377],{},"设置、读取方便、甚至页面刷新不丢失数据",[26,73379,73380],{},"容量较大，sessionStorage和localStorage约 5M 左右",[479,73382,73384],{"id":73383},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[19,73386,73387],{},"只能存储字符串",[19,73389,73390],{},[3514,73391],{"alt":41,"src":73392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[19,73394,73395],{},[3514,73396],{"alt":41,"src":73397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[19,73399,73400],{},"键值对要加引号,不然就会当变量来看了",[19,73402,73403],{},"localStorage.setItem('uname', 'pink')",[19,73405,73406],{},"刷新之后信息不再丢失",[19,73408,73409],{},"操作key,value会跟着变",[19,73411,73412],{},"删除只删除键就可以,即名字",[19,73414,73403],{},[19,73416,73417],{},"改:",[19,73419,73420],{},"localStorage.setItem('uname','red')",[19,73422,73423],{},"有这个键就是改,没有这个键就是改",[19,73425,73426],{},[3514,73427],{"alt":41,"src":73428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[19,73430,73431],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[19,73433,73434],{},[3514,73435],{"alt":41,"src":73436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[19,73438,73439],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[479,73441,73443],{"id":73442},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[19,73445,73446],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[19,73448,73449],{},"特性:",[23,73451,73452,73455,73458,73461],{},[26,73453,73454],{},"生命周期为关闭浏览器窗口",[26,73456,73457],{},"在同一个窗口(页面)下数据可以共享",[26,73459,73460],{},"以键值对的形式存储使用",[26,73462,73463],{},"用法跟localStorage 基本相同",[479,73465,73467],{"id":73466},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[19,73469,73470],{},"本地只能存储字符串,无法直接存储复杂数据类型",[36,73472,73474],{"className":1350,"code":73473,"language":1352,"meta":41,"style":41},"\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",[43,73475,73476,73484,73489,73494,73499,73504,73508,73513,73518],{"__ignoreMap":41},[46,73477,73478,73480,73482],{"class":48,"line":49},[46,73479,821],{"class":56},[46,73481,53780],{"class":1361},[46,73483,53274],{"class":56},[46,73485,73486],{"class":48,"line":60},[46,73487,73488],{"class":56},"    const obj = {\n",[46,73490,73491],{"class":48,"line":200},[46,73492,73493],{"class":56},"      uname: 'pink老师',\n",[46,73495,73496],{"class":48,"line":211},[46,73497,73498],{"class":56},"      age: 18,\n",[46,73500,73501],{"class":48,"line":222},[46,73502,73503],{"class":56},"      gender: '女'\n",[46,73505,73506],{"class":48,"line":636},[46,73507,4217],{"class":56},[46,73509,73510],{"class":48,"line":641},[46,73511,73512],{"class":56},"    \u002F\u002F 存储复杂数据类型\n",[46,73514,73515],{"class":48,"line":653},[46,73516,73517],{"class":56},"    localStorage.setItem('obj', obj)\n",[46,73519,73520,73522,73524],{"class":48,"line":659},[46,73521,54384],{"class":56},[46,73523,53780],{"class":1361},[46,73525,53274],{"class":56},[19,73527,73528],{},[3514,73529],{"alt":41,"src":73530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[19,73532,73533],{},"如果获取一下数据:",[19,73535,73536],{},"log(localStorage.getItem('obj'))",[19,73538,73539],{},[3514,73540],{"alt":41,"src":73541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[19,73543,73544],{},"发现直接存对象是使用不了的!!!",[23999,73546,73548],{"id":73547},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[19,73550,73551],{},[3514,73552],{"alt":41,"src":73553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[36,73555,73557],{"className":52601,"code":73556,"language":52603,"meta":41,"style":41},"\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",[43,73558,73559,73567,73577,73587,73596,73604,73608,73612,73638,73657,73665,73669,73674,73679],{"__ignoreMap":41},[46,73560,73561,73563,73565],{"class":48,"line":49},[46,73562,821],{"class":56},[46,73564,53780],{"class":1361},[46,73566,53274],{"class":56},[46,73568,73569,73571,73573,73575],{"class":48,"line":60},[46,73570,13225],{"class":52},[46,73572,71936],{"class":180},[46,73574,647],{"class":52},[46,73576,17573],{"class":56},[46,73578,73579,73582,73585],{"class":48,"line":200},[46,73580,73581],{"class":56},"      uname: ",[46,73583,73584],{"class":173},"'pink老师'",[46,73586,33443],{"class":56},[46,73588,73589,73592,73594],{"class":48,"line":211},[46,73590,73591],{"class":56},"      age: ",[46,73593,2836],{"class":180},[46,73595,33443],{"class":56},[46,73597,73598,73601],{"class":48,"line":222},[46,73599,73600],{"class":56},"      gender: ",[46,73602,73603],{"class":173},"'女'\n",[46,73605,73606],{"class":48,"line":636},[46,73607,4217],{"class":56},[46,73609,73610],{"class":48,"line":641},[46,73611,73512],{"class":2253},[46,73613,73614,73617,73620,73622,73625,73627,73630,73632,73635],{"class":48,"line":653},[46,73615,73616],{"class":56},"  localStorage.",[46,73618,73619],{"class":169},"setItem",[46,73621,1152],{"class":56},[46,73623,73624],{"class":173},"'obj'",[46,73626,448],{"class":56},[46,73628,73629],{"class":180},"JSON",[46,73631,2744],{"class":56},[46,73633,73634],{"class":169},"stringify",[46,73636,73637],{"class":56},"(obj))\n",[46,73639,73640,73643,73645,73648,73651,73653,73655],{"class":48,"line":659},[46,73641,73642],{"class":56},"  console.",[46,73644,60212],{"class":169},[46,73646,73647],{"class":56},"(localStorage.",[46,73649,73650],{"class":169},"getItem",[46,73652,1152],{"class":56},[46,73654,73624],{"class":173},[46,73656,32479],{"class":56},[46,73658,73659,73661,73663],{"class":48,"line":665},[46,73660,54384],{"class":56},[46,73662,53780],{"class":1361},[46,73664,53274],{"class":56},[46,73666,73667],{"class":48,"line":670},[46,73668,72586],{"class":56},[46,73670,73671],{"class":48,"line":676},[46,73672,73673],{"class":56},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[46,73675,73676],{"class":48,"line":682},[46,73677,73678],{"class":56},"  类型是字符串的\n",[46,73680,73681],{"class":48,"line":688},[46,73682,73683],{"class":56},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[23999,73685,73687],{"id":73686},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[19,73689,73690],{},[3514,73691],{"alt":41,"src":73692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[19,73694,73695],{},[3514,73696],{"alt":41,"src":73697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[36,73699,73701],{"className":1350,"code":73700,"language":1352,"meta":41,"style":41},"  \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",[43,73702,73703,73711,73715,73719,73723,73727,73731,73736,73741,73746,73751,73756,73761,73766,73771],{"__ignoreMap":41},[46,73704,73705,73707,73709],{"class":48,"line":49},[46,73706,54111],{"class":56},[46,73708,53780],{"class":1361},[46,73710,53274],{"class":56},[46,73712,73713],{"class":48,"line":60},[46,73714,73488],{"class":56},[46,73716,73717],{"class":48,"line":200},[46,73718,73493],{"class":56},[46,73720,73721],{"class":48,"line":211},[46,73722,73498],{"class":56},[46,73724,73725],{"class":48,"line":222},[46,73726,73503],{"class":56},[46,73728,73729],{"class":48,"line":636},[46,73730,4217],{"class":56},[46,73732,73733],{"class":48,"line":641},[46,73734,73735],{"class":56},"    \u002F\u002F 1.存储复杂数据类型\n",[46,73737,73738],{"class":48,"line":653},[46,73739,73740],{"class":56},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[46,73742,73743],{"class":48,"line":659},[46,73744,73745],{"class":56},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[46,73747,73748],{"class":48,"line":665},[46,73749,73750],{"class":56},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[46,73752,73753],{"class":48,"line":670},[46,73754,73755],{"class":56},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[46,73757,73758],{"class":48,"line":676},[46,73759,73760],{"class":56},"    \u002F\u002F 取\n",[46,73762,73763],{"class":48,"line":682},[46,73764,73765],{"class":56},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[46,73767,73768],{"class":48,"line":688},[46,73769,73770],{"class":56},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[46,73772,73773,73775,73777],{"class":48,"line":693},[46,73774,54384],{"class":56},[46,73776,53780],{"class":1361},[46,73778,53274],{"class":56},[19,73780,73781],{},[3514,73782],{"alt":41,"src":73783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[479,73785,73787],{"id":73786},"_356-数组map方法","3.5.6 数组map方法",[19,73789,73790],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[19,73792,73793],{},[3514,73794],{"alt":41,"src":73795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[19,73797,73798],{},[3514,73799],{"alt":41,"src":73800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[19,73802,73803,73806],{},[2339,73804,73805],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[19,73808,73809],{},"map有返回值，但是forEach没有返回值",[19,73811,73812],{},"map是个方法。用的时候要加 ()",[19,73814,73815],{},"map返回的是一个数组",[479,73817,73819],{"id":73818},"_357-数组中join方法","3.5.7 数组中join方法",[19,73821,73822],{},[3514,73823],{"alt":41,"src":73824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[19,73826,73827],{},"类似于python中拼接字符串一样！",[23,73829,73830,73833,73836],{},[26,73831,73832],{},"小括号为空则逗号分开",[26,73834,73835],{},"小括号为空字符串 ''，则元素之间没有分隔符",[26,73837,73838],{},"小括号用啥符号就用进行分割",[479,73840,73842],{"id":73841},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[23,73844,73845,73848,73851,73854,73857],{},[26,73846,73847],{},"记住本地时间获取快速方式：new Date().toDateString()",[26,73849,73850],{},"尽量减少DOM操作，用好map+join的渲染方式",[26,73852,73853],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[26,73855,73856],{},"return可以实现函数的结束",[26,73858,73859],{},"禁止跳转是 preventDefault() 不要忘记",[36,73861,73863],{"className":52601,"code":73862,"language":52603,"meta":41,"style":41},"\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",[43,73864,73865,73875,73889,73893,73901,73915,73935,73947,73955,73961,73971,73981,73985,73989,73995,74005,74017,74021,74025,74032,74044,74058,74068,74072,74076,74083,74090,74097,74109,74121,74131,74143,74147,74151,74158,74165,74177,74189,74199,74211,74241,74245,74249,74256,74268,74280,74304,74314,74324,74328,74332,74340,74351,74363,74375,74387,74404,74416,74428,74432,74436,74443,74455,74467,74479,74490,74508,74521,74533,74557,74568,74572,74576,74584,74594,74598,74602,74608,74620,74631,74641,74645,74649,74655,74677,74681,74685,74691,74697,74709,74719,74731,74761,74774,74791,74795,74799,74810,74832,74842,74846,74850,74863,74873,74885,74897,74909,74921,74931,74941,74951,74962,74975,74979,74987,74995,74999,75007,75020,75040,75073,75106,75139,75165,75183,75201,75209,75235,75253,75271,75289,75307,75325,75333,75341,75359,75367,75396,75404,75412,75420,75433,75445,75457,75469,75481,75493,75506,75518,75526,75534,75542,75547,75552,75556,75560,75564,75568,75572,75576,75581,75586,75591,75596,75604,75612,75620,75625,75630,75635,75640,75645,75650,75655,75660,75665,75670,75675,75680,75685,75690,75694,75699,75704,75714,75723,75727,75732,75741,75757,75799,75839,75878,75943,75951,75955,75960,75978,75986,75991,75996,76026,76032,76037,76050,76062,76074,76086,76098,76110,76122,76126,76136,76140,76145,76150,76154,76163,76167,76172,76177,76196,76201,76221,76225,76230,76234,76239,76257,76275,76293,76312,76331,76350,76355,76361,76382,76388,76397,76403,76409,76415,76442,76455,76460,76470,76476,76482,76488,76494,76499,76505,76511,76517,76523,76556,76561,76566,76571,76576,76582,76588,76594,76605,76610,76616,76623,76637,76643,76667,76672,76677,76683,76689,76710,76716,76729,76735,76741,76747,76753,76758,76764,76770,76776,76794,76808,76814,76822,76828,76850,76855,76860,76865,76870,76875,76884,76893,76898],{"__ignoreMap":41},[46,73866,73867,73869,73871,73873],{"class":48,"line":49},[46,73868,53265],{"class":56},[46,73870,53268],{"class":1361},[46,73872,53271],{"class":169},[46,73874,53274],{"class":56},[46,73876,73877,73879,73881,73883,73885,73887],{"class":48,"line":60},[46,73878,821],{"class":56},[46,73880,52603],{"class":1361},[46,73882,53283],{"class":169},[46,73884,79],{"class":56},[46,73886,53288],{"class":173},[46,73888,53274],{"class":56},[46,73890,73891],{"class":48,"line":200},[46,73892,616],{"emptyLinePlaceholder":615},[46,73894,73895,73897,73899],{"class":48,"line":211},[46,73896,821],{"class":56},[46,73898,53301],{"class":1361},[46,73900,53274],{"class":56},[46,73902,73903,73905,73907,73909,73911,73913],{"class":48,"line":222},[46,73904,54111],{"class":56},[46,73906,53311],{"class":1361},[46,73908,53314],{"class":169},[46,73910,79],{"class":56},[46,73912,53319],{"class":173},[46,73914,53274],{"class":56},[46,73916,73917,73919,73921,73923,73925,73927,73929,73931,73933],{"class":48,"line":636},[46,73918,54111],{"class":56},[46,73920,53311],{"class":1361},[46,73922,1364],{"class":169},[46,73924,79],{"class":56},[46,73926,53358],{"class":173},[46,73928,53338],{"class":169},[46,73930,79],{"class":56},[46,73932,53365],{"class":173},[46,73934,53274],{"class":56},[46,73936,73937,73939,73941,73943,73945],{"class":48,"line":641},[46,73938,54111],{"class":56},[46,73940,53374],{"class":1361},[46,73942,53377],{"class":56},[46,73944,53374],{"class":1361},[46,73946,53274],{"class":56},[46,73948,73949,73951,73953],{"class":48,"line":653},[46,73950,54111],{"class":56},[46,73952,2098],{"class":1361},[46,73954,53274],{"class":56},[46,73956,73957,73959],{"class":48,"line":659},[46,73958,8416],{"class":1361},[46,73960,17573],{"class":56},[46,73962,73963,73965,73967,73969],{"class":48,"line":665},[46,73964,56660],{"class":180},[46,73966,53404],{"class":56},[46,73968,2379],{"class":180},[46,73970,3345],{"class":56},[46,73972,73973,73975,73977,73979],{"class":48,"line":670},[46,73974,56671],{"class":180},[46,73976,53404],{"class":56},[46,73978,2379],{"class":180},[46,73980,3345],{"class":56},[46,73982,73983],{"class":48,"line":676},[46,73984,4217],{"class":56},[46,73986,73987],{"class":48,"line":682},[46,73988,616],{"emptyLinePlaceholder":615},[46,73990,73991,73993],{"class":48,"line":688},[46,73992,59244],{"class":1361},[46,73994,17573],{"class":56},[46,73996,73997,73999,74001,74003],{"class":48,"line":693},[46,73998,59251],{"class":180},[46,74000,53404],{"class":56},[46,74002,53559],{"class":180},[46,74004,3345],{"class":56},[46,74006,74007,74009,74011,74013,74015],{"class":48,"line":699},[46,74008,64042],{"class":180},[46,74010,53404],{"class":56},[46,74012,2886],{"class":180},[46,74014,53459],{"class":52},[46,74016,3345],{"class":56},[46,74018,74019],{"class":48,"line":705},[46,74020,4217],{"class":56},[46,74022,74023],{"class":48,"line":711},[46,74024,616],{"emptyLinePlaceholder":615},[46,74026,74027,74030],{"class":48,"line":717},[46,74028,74029],{"class":169},"    .info",[46,74031,17573],{"class":56},[46,74033,74034,74036,74038,74040,74042],{"class":48,"line":723},[46,74035,56736],{"class":180},[46,74037,53404],{"class":56},[46,74039,53456],{"class":180},[46,74041,53459],{"class":52},[46,74043,3345],{"class":56},[46,74045,74046,74048,74050,74052,74054,74056],{"class":48,"line":729},[46,74047,56671],{"class":180},[46,74049,53404],{"class":56},[46,74051,2633],{"class":180},[46,74053,53459],{"class":52},[46,74055,53523],{"class":180},[46,74057,3345],{"class":56},[46,74059,74060,74062,74064,74066],{"class":48,"line":735},[46,74061,59251],{"class":180},[46,74063,53404],{"class":56},[46,74065,53559],{"class":180},[46,74067,3345],{"class":56},[46,74069,74070],{"class":48,"line":740},[46,74071,4217],{"class":56},[46,74073,74074],{"class":48,"line":745},[46,74075,616],{"emptyLinePlaceholder":615},[46,74077,74078,74081],{"class":48,"line":763},[46,74079,74080],{"class":169},"    .uname",[46,74082,33443],{"class":56},[46,74084,74085,74088],{"class":48,"line":778},[46,74086,74087],{"class":169},"    .age",[46,74089,33443],{"class":56},[46,74091,74092,74095],{"class":48,"line":789},[46,74093,74094],{"class":169},"    .salary",[46,74096,17573],{"class":56},[46,74098,74099,74101,74103,74105,74107],{"class":48,"line":794},[46,74100,56736],{"class":180},[46,74102,53404],{"class":56},[46,74104,1155],{"class":180},[46,74106,53459],{"class":52},[46,74108,3345],{"class":56},[46,74110,74111,74113,74115,74117,74119],{"class":48,"line":806},[46,74112,56750],{"class":180},[46,74114,53404],{"class":56},[46,74116,2886],{"class":180},[46,74118,53459],{"class":52},[46,74120,3345],{"class":56},[46,74122,74123,74125,74127,74129],{"class":48,"line":829},[46,74124,63745],{"class":180},[46,74126,53404],{"class":56},[46,74128,56702],{"class":180},[46,74130,3345],{"class":56},[46,74132,74133,74135,74137,74139,74141],{"class":48,"line":840},[46,74134,63715],{"class":180},[46,74136,53404],{"class":56},[46,74138,2761],{"class":180},[46,74140,53459],{"class":52},[46,74142,3345],{"class":56},[46,74144,74145],{"class":48,"line":846},[46,74146,4217],{"class":56},[46,74148,74149],{"class":48,"line":852},[46,74150,616],{"emptyLinePlaceholder":615},[46,74152,74153,74156],{"class":48,"line":857},[46,74154,74155],{"class":169},"    .gender",[46,74157,33443],{"class":56},[46,74159,74160,74163],{"class":48,"line":875},[46,74161,74162],{"class":169},"    .city",[46,74164,17573],{"class":56},[46,74166,74167,74169,74171,74173,74175],{"class":48,"line":892},[46,74168,56736],{"class":180},[46,74170,53404],{"class":56},[46,74172,1155],{"class":180},[46,74174,53459],{"class":52},[46,74176,3345],{"class":56},[46,74178,74179,74181,74183,74185,74187],{"class":48,"line":898},[46,74180,56750],{"class":180},[46,74182,53404],{"class":56},[46,74184,3011],{"class":180},[46,74186,53459],{"class":52},[46,74188,3345],{"class":56},[46,74190,74191,74193,74195,74197],{"class":48,"line":903},[46,74192,63745],{"class":180},[46,74194,53404],{"class":56},[46,74196,56702],{"class":180},[46,74198,3345],{"class":56},[46,74200,74201,74203,74205,74207,74209],{"class":48,"line":908},[46,74202,63715],{"class":180},[46,74204,53404],{"class":56},[46,74206,2761],{"class":180},[46,74208,53459],{"class":52},[46,74210,3345],{"class":56},[46,74212,74213,74215,74217,74219,74221,74223,74226,74228,74230,74232,74235,74237,74239],{"class":48,"line":925},[46,74214,63942],{"class":180},[46,74216,53404],{"class":56},[46,74218,2405],{"class":180},[46,74220,53459],{"class":52},[46,74222,53488],{"class":180},[46,74224,74225],{"class":180}," rgb",[46,74227,1152],{"class":56},[46,74229,3762],{"class":180},[46,74231,448],{"class":56},[46,74233,74234],{"class":180},"197",[46,74236,448],{"class":56},[46,74238,74234],{"class":180},[46,74240,4740],{"class":56},[46,74242,74243],{"class":48,"line":1238},[46,74244,4217],{"class":56},[46,74246,74247],{"class":48,"line":1251},[46,74248,616],{"emptyLinePlaceholder":615},[46,74250,74251,74254],{"class":48,"line":1256},[46,74252,74253],{"class":1361},"    button",[46,74255,17573],{"class":56},[46,74257,74258,74260,74262,74264,74266],{"class":48,"line":1261},[46,74259,56750],{"class":180},[46,74261,53404],{"class":56},[46,74263,3011],{"class":180},[46,74265,53459],{"class":52},[46,74267,3345],{"class":56},[46,74269,74270,74272,74274,74276,74278],{"class":48,"line":1274},[46,74271,56736],{"class":180},[46,74273,53404],{"class":56},[46,74275,2671],{"class":180},[46,74277,53459],{"class":52},[46,74279,3345],{"class":56},[46,74281,74282,74284,74286,74289,74291,74293,74295,74298,74300,74302],{"class":48,"line":10061},[46,74283,56849],{"class":180},[46,74285,53404],{"class":56},[46,74287,74288],{"class":180},"rgb",[46,74290,1152],{"class":56},[46,74292,3153],{"class":180},[46,74294,448],{"class":56},[46,74296,74297],{"class":180},"187",[46,74299,448],{"class":56},[46,74301,2487],{"class":180},[46,74303,4740],{"class":56},[46,74305,74306,74308,74310,74312],{"class":48,"line":11720},[46,74307,59381],{"class":180},[46,74309,53404],{"class":56},[46,74311,62807],{"class":180},[46,74313,3345],{"class":56},[46,74315,74316,74318,74320,74322],{"class":48,"line":11745},[46,74317,63942],{"class":180},[46,74319,53404],{"class":56},[46,74321,2379],{"class":180},[46,74323,3345],{"class":56},[46,74325,74326],{"class":48,"line":11768},[46,74327,4217],{"class":56},[46,74329,74330],{"class":48,"line":11792},[46,74331,616],{"emptyLinePlaceholder":615},[46,74333,74334,74336,74338],{"class":48,"line":11797},[46,74335,74253],{"class":1361},[46,74337,53655],{"class":1361},[46,74339,17573],{"class":56},[46,74341,74342,74344,74346,74349],{"class":48,"line":11802},[46,74343,56974],{"class":180},[46,74345,53404],{"class":56},[46,74347,74348],{"class":180},"inline-block",[46,74350,3345],{"class":56},[46,74352,74353,74355,74357,74359,74361],{"class":48,"line":11807},[46,74354,56736],{"class":180},[46,74356,53404],{"class":56},[46,74358,2633],{"class":180},[46,74360,53459],{"class":52},[46,74362,3345],{"class":56},[46,74364,74365,74367,74369,74371,74373],{"class":48,"line":11816},[46,74366,56750],{"class":180},[46,74368,53404],{"class":56},[46,74370,2633],{"class":180},[46,74372,53459],{"class":52},[46,74374,3345],{"class":56},[46,74376,74377,74379,74381,74383,74385],{"class":48,"line":11821},[46,74378,59324],{"class":180},[46,74380,53404],{"class":56},[46,74382,2659],{"class":180},[46,74384,53459],{"class":52},[46,74386,3345],{"class":56},[46,74388,74389,74391,74393,74395,74397,74399,74402],{"class":48,"line":11827},[46,74390,63942],{"class":180},[46,74392,53404],{"class":56},[46,74394,2405],{"class":180},[46,74396,53459],{"class":52},[46,74398,53488],{"class":180},[46,74400,74401],{"class":180}," #fff",[46,74403,3345],{"class":56},[46,74405,74406,74408,74410,74412,74414],{"class":48,"line":11848},[46,74407,57099],{"class":180},[46,74409,53404],{"class":56},[46,74411,2506],{"class":180},[46,74413,53459],{"class":52},[46,74415,3345],{"class":56},[46,74417,74418,74420,74422,74424,74426],{"class":48,"line":11854},[46,74419,63715],{"class":180},[46,74421,53404],{"class":56},[46,74423,2405],{"class":180},[46,74425,53459],{"class":52},[46,74427,3345],{"class":56},[46,74429,74430],{"class":48,"line":11868},[46,74431,4217],{"class":56},[46,74433,74434],{"class":48,"line":11874},[46,74435,616],{"emptyLinePlaceholder":615},[46,74437,74438,74441],{"class":48,"line":11901},[46,74439,74440],{"class":169},"    .total",[46,74442,17573],{"class":56},[46,74444,74445,74447,74449,74451,74453],{"class":48,"line":11910},[46,74446,56736],{"class":180},[46,74448,53404],{"class":56},[46,74450,63594],{"class":180},[46,74452,53459],{"class":52},[46,74454,3345],{"class":56},[46,74456,74457,74459,74461,74463,74465],{"class":48,"line":11916},[46,74458,56750],{"class":180},[46,74460,53404],{"class":56},[46,74462,2588],{"class":180},[46,74464,53459],{"class":52},[46,74466,3345],{"class":56},[46,74468,74469,74471,74473,74475,74477],{"class":48,"line":11924},[46,74470,59324],{"class":180},[46,74472,53404],{"class":56},[46,74474,2588],{"class":180},[46,74476,53459],{"class":52},[46,74478,3345],{"class":56},[46,74480,74481,74483,74485,74488],{"class":48,"line":11929},[46,74482,59251],{"class":180},[46,74484,53404],{"class":56},[46,74486,74487],{"class":180},"right",[46,74489,3345],{"class":56},[46,74491,74492,74494,74496,74498,74500,74502,74504,74506],{"class":48,"line":18605},[46,74493,56671],{"class":180},[46,74495,53404],{"class":56},[46,74497,2588],{"class":180},[46,74499,53459],{"class":52},[46,74501,53523],{"class":180},[46,74503,4068],{"class":180},[46,74505,53459],{"class":52},[46,74507,3345],{"class":56},[46,74509,74510,74513,74515,74517,74519],{"class":48,"line":18611},[46,74511,74512],{"class":180},"      padding-right",[46,74514,53404],{"class":56},[46,74516,2633],{"class":180},[46,74518,53459],{"class":52},[46,74520,3345],{"class":56},[46,74522,74523,74525,74527,74529,74531],{"class":48,"line":18634},[46,74524,56887],{"class":180},[46,74526,53404],{"class":56},[46,74528,2710],{"class":180},[46,74530,53459],{"class":52},[46,74532,3345],{"class":56},[46,74534,74535,74537,74539,74541,74543,74546,74548,74551,74553,74555],{"class":48,"line":18640},[46,74536,56849],{"class":180},[46,74538,53404],{"class":56},[46,74540,74288],{"class":180},[46,74542,1152],{"class":56},[46,74544,74545],{"class":180},"237",[46,74547,448],{"class":56},[46,74549,74550],{"class":180},"235",[46,74552,448],{"class":56},[46,74554,74550],{"class":180},[46,74556,4740],{"class":56},[46,74558,74559,74562,74564,74566],{"class":48,"line":18663},[46,74560,74561],{"class":180},"      box-sizing",[46,74563,53404],{"class":56},[46,74565,62470],{"class":180},[46,74567,3345],{"class":56},[46,74569,74570],{"class":48,"line":18677},[46,74571,4217],{"class":56},[46,74573,74574],{"class":48,"line":18697},[46,74575,616],{"emptyLinePlaceholder":615},[46,74577,74578,74580,74582],{"class":48,"line":18703},[46,74579,74440],{"class":169},[46,74581,53655],{"class":1361},[46,74583,17573],{"class":56},[46,74585,74586,74588,74590,74592],{"class":48,"line":18714},[46,74587,59381],{"class":180},[46,74589,53404],{"class":56},[46,74591,59386],{"class":180},[46,74593,3345],{"class":56},[46,74595,74596],{"class":48,"line":18737},[46,74597,4217],{"class":56},[46,74599,74600],{"class":48,"line":18759},[46,74601,616],{"emptyLinePlaceholder":615},[46,74603,74604,74606],{"class":48,"line":18764},[46,74605,66988],{"class":1361},[46,74607,17573],{"class":56},[46,74609,74610,74612,74614,74616,74618],{"class":48,"line":18770},[46,74611,56736],{"class":180},[46,74613,53404],{"class":56},[46,74615,63594],{"class":180},[46,74617,53459],{"class":52},[46,74619,3345],{"class":56},[46,74621,74622,74624,74626,74629],{"class":48,"line":18784},[46,74623,56671],{"class":180},[46,74625,53404],{"class":56},[46,74627,74628],{"class":180},"auto",[46,74630,3345],{"class":56},[46,74632,74633,74635,74637,74639],{"class":48,"line":18797},[46,74634,66995],{"class":180},[46,74636,53404],{"class":56},[46,74638,67000],{"class":180},[46,74640,3345],{"class":56},[46,74642,74643],{"class":48,"line":18802},[46,74644,4217],{"class":56},[46,74646,74647],{"class":48,"line":18816},[46,74648,616],{"emptyLinePlaceholder":615},[46,74650,74651,74653],{"class":48,"line":18821},[46,74652,67080],{"class":1361},[46,74654,17573],{"class":56},[46,74656,74657,74659,74661,74663,74665,74667,74669,74671,74673,74675],{"class":48,"line":18827},[46,74658,56849],{"class":180},[46,74660,53404],{"class":56},[46,74662,74288],{"class":180},[46,74664,1152],{"class":56},[46,74666,74545],{"class":180},[46,74668,448],{"class":56},[46,74670,74550],{"class":180},[46,74672,448],{"class":56},[46,74674,74550],{"class":180},[46,74676,4740],{"class":56},[46,74678,74679],{"class":48,"line":18832},[46,74680,4217],{"class":56},[46,74682,74683],{"class":48,"line":18846},[46,74684,616],{"emptyLinePlaceholder":615},[46,74686,74687,74689],{"class":48,"line":18851},[46,74688,67080],{"class":1361},[46,74690,33443],{"class":56},[46,74692,74693,74695],{"class":48,"line":18856},[46,74694,67146],{"class":1361},[46,74696,17573],{"class":56},[46,74698,74699,74701,74703,74705,74707],{"class":48,"line":18870},[46,74700,56750],{"class":180},[46,74702,53404],{"class":56},[46,74704,2461],{"class":180},[46,74706,53459],{"class":52},[46,74708,3345],{"class":56},[46,74710,74711,74713,74715,74717],{"class":48,"line":18882},[46,74712,59251],{"class":180},[46,74714,53404],{"class":56},[46,74716,108],{"class":180},[46,74718,3345],{"class":56},[46,74720,74721,74723,74725,74727,74729],{"class":48,"line":18887},[46,74722,56887],{"class":180},[46,74724,53404],{"class":56},[46,74726,2735],{"class":180},[46,74728,53459],{"class":52},[46,74730,3345],{"class":56},[46,74732,74733,74735,74737,74739,74741,74743,74745,74747,74750,74752,74755,74757,74759],{"class":48,"line":18900},[46,74734,63942],{"class":180},[46,74736,53404],{"class":56},[46,74738,2405],{"class":180},[46,74740,53459],{"class":52},[46,74742,53488],{"class":180},[46,74744,74225],{"class":180},[46,74746,1152],{"class":56},[46,74748,74749],{"class":180},"228",[46,74751,448],{"class":56},[46,74753,74754],{"class":180},"225",[46,74756,448],{"class":56},[46,74758,74754],{"class":180},[46,74760,4740],{"class":56},[46,74762,74763,74766,74768,74770,74772],{"class":48,"line":18905},[46,74764,74765],{"class":180},"      padding-left",[46,74767,53404],{"class":56},[46,74769,2506],{"class":180},[46,74771,53459],{"class":52},[46,74773,3345],{"class":56},[46,74775,74776,74778,74780,74782,74785,74787,74789],{"class":48,"line":18910},[46,74777,63825],{"class":180},[46,74779,53404],{"class":56},[46,74781,30110],{"class":180},[46,74783,74784],{"class":180}," linear",[46,74786,63832],{"class":180},[46,74788,2881],{"class":52},[46,74790,3345],{"class":56},[46,74792,74793],{"class":48,"line":18915},[46,74794,4217],{"class":56},[46,74796,74797],{"class":48,"line":18928},[46,74798,616],{"emptyLinePlaceholder":615},[46,74800,74801,74804,74806,74808],{"class":48,"line":18933},[46,74802,74803],{"class":1361},"    tbody",[46,74805,72109],{"class":1361},[46,74807,62905],{"class":169},[46,74809,17573],{"class":56},[46,74811,74812,74814,74816,74818,74820,74822,74824,74826,74828,74830],{"class":48,"line":34607},[46,74813,56849],{"class":180},[46,74815,53404],{"class":56},[46,74817,74288],{"class":180},[46,74819,1152],{"class":56},[46,74821,74545],{"class":180},[46,74823,448],{"class":56},[46,74825,74550],{"class":180},[46,74827,448],{"class":56},[46,74829,74550],{"class":180},[46,74831,4740],{"class":56},[46,74833,74834,74836,74838,74840],{"class":48,"line":34613},[46,74835,63990],{"class":180},[46,74837,53404],{"class":56},[46,74839,63995],{"class":180},[46,74841,3345],{"class":56},[46,74843,74844],{"class":48,"line":34619},[46,74845,4217],{"class":56},[46,74847,74848],{"class":48,"line":34625},[46,74849,616],{"emptyLinePlaceholder":615},[46,74851,74852,74854,74856,74859,74861],{"class":48,"line":34631},[46,74853,74803],{"class":1361},[46,74855,72109],{"class":1361},[46,74857,74858],{"class":1361}," td",[46,74860,3450],{"class":1361},[46,74862,17573],{"class":56},[46,74864,74865,74867,74869,74871],{"class":48,"line":34642},[46,74866,56974],{"class":180},[46,74868,53404],{"class":56},[46,74870,62834],{"class":180},[46,74872,3345],{"class":56},[46,74874,74875,74877,74879,74881,74883],{"class":48,"line":34648},[46,74876,56736],{"class":180},[46,74878,53404],{"class":56},[46,74880,3093],{"class":180},[46,74882,53459],{"class":52},[46,74884,3345],{"class":56},[46,74886,74887,74889,74891,74893,74895],{"class":48,"line":34668},[46,74888,56750],{"class":180},[46,74890,53404],{"class":56},[46,74892,3011],{"class":180},[46,74894,53459],{"class":52},[46,74896,3345],{"class":56},[46,74898,74899,74901,74903,74905,74907],{"class":48,"line":34674},[46,74900,59324],{"class":180},[46,74902,53404],{"class":56},[46,74904,3011],{"class":180},[46,74906,53459],{"class":52},[46,74908,3345],{"class":56},[46,74910,74911,74913,74915,74917,74919],{"class":48,"line":34685},[46,74912,64042],{"class":180},[46,74914,53404],{"class":56},[46,74916,2272],{"class":180},[46,74918,53459],{"class":52},[46,74920,3345],{"class":56},[46,74922,74923,74925,74927,74929],{"class":48,"line":34691},[46,74924,59381],{"class":180},[46,74926,53404],{"class":56},[46,74928,62807],{"class":180},[46,74930,3345],{"class":56},[46,74932,74933,74935,74937,74939],{"class":48,"line":34697},[46,74934,59251],{"class":180},[46,74936,53404],{"class":56},[46,74938,53559],{"class":180},[46,74940,3345],{"class":56},[46,74942,74943,74945,74947,74949],{"class":48,"line":34703},[46,74944,65935],{"class":180},[46,74946,53404],{"class":56},[46,74948,56702],{"class":180},[46,74950,3345],{"class":56},[46,74952,74953,74955,74957,74960],{"class":48,"line":34709},[46,74954,56849],{"class":180},[46,74956,53404],{"class":56},[46,74958,74959],{"class":180},"orange",[46,74961,3345],{"class":56},[46,74963,74964,74966,74968,74971,74973],{"class":48,"line":34715},[46,74965,57099],{"class":180},[46,74967,53404],{"class":56},[46,74969,74970],{"class":180},"12.5",[46,74972,53459],{"class":52},[46,74974,3345],{"class":56},[46,74976,74977],{"class":48,"line":34721},[46,74978,4217],{"class":56},[46,74980,74981,74983,74985],{"class":48,"line":34727},[46,74982,54384],{"class":56},[46,74984,2098],{"class":1361},[46,74986,53274],{"class":56},[46,74988,74989,74991,74993],{"class":48,"line":34747},[46,74990,53752],{"class":56},[46,74992,53301],{"class":1361},[46,74994,53274],{"class":56},[46,74996,74997],{"class":48,"line":34753},[46,74998,616],{"emptyLinePlaceholder":615},[46,75000,75001,75003,75005],{"class":48,"line":34769},[46,75002,821],{"class":56},[46,75004,53767],{"class":1361},[46,75006,53274],{"class":56},[46,75008,75009,75011,75013,75016,75018],{"class":48,"line":34775},[46,75010,54111],{"class":56},[46,75012,14],{"class":1361},[46,75014,75015],{"class":56},">学生就业统计表\u003C\u002F",[46,75017,14],{"class":1361},[46,75019,53274],{"class":56},[46,75021,75022,75024,75026,75028,75030,75032,75034,75036,75038],{"class":48,"line":34789},[46,75023,54111],{"class":56},[46,75025,68590],{"class":1361},[46,75027,55451],{"class":169},[46,75029,79],{"class":56},[46,75031,64629],{"class":173},[46,75033,71035],{"class":169},[46,75035,79],{"class":56},[46,75037,33753],{"class":173},[46,75039,53274],{"class":56},[46,75041,75042,75044,75046,75048,75050,75052,75054,75056,75058,75060,75062,75065,75067,75069,75071],{"class":48,"line":34795},[46,75043,53308],{"class":56},[46,75045,55786],{"class":1361},[46,75047,55789],{"class":169},[46,75049,79],{"class":56},[46,75051,64664],{"class":173},[46,75053,1364],{"class":169},[46,75055,79],{"class":56},[46,75057,71061],{"class":173},[46,75059,62985],{"class":169},[46,75061,79],{"class":56},[46,75063,75064],{"class":173},"\"姓名\"",[46,75066,55451],{"class":169},[46,75068,79],{"class":56},[46,75070,71061],{"class":173},[46,75072,53274],{"class":56},[46,75074,75075,75077,75079,75081,75083,75085,75087,75089,75091,75093,75095,75098,75100,75102,75104],{"class":48,"line":34810},[46,75076,53308],{"class":56},[46,75078,55786],{"class":1361},[46,75080,55789],{"class":169},[46,75082,79],{"class":56},[46,75084,64664],{"class":173},[46,75086,1364],{"class":169},[46,75088,79],{"class":56},[46,75090,71089],{"class":173},[46,75092,62985],{"class":169},[46,75094,79],{"class":56},[46,75096,75097],{"class":173},"\"年龄\"",[46,75099,55451],{"class":169},[46,75101,79],{"class":56},[46,75103,71089],{"class":173},[46,75105,53274],{"class":56},[46,75107,75108,75110,75112,75114,75116,75118,75120,75122,75124,75126,75128,75131,75133,75135,75137],{"class":48,"line":34816},[46,75109,53308],{"class":56},[46,75111,55786],{"class":1361},[46,75113,55789],{"class":169},[46,75115,79],{"class":56},[46,75117,64664],{"class":173},[46,75119,1364],{"class":169},[46,75121,79],{"class":56},[46,75123,71191],{"class":173},[46,75125,62985],{"class":169},[46,75127,79],{"class":56},[46,75129,75130],{"class":173},"\"薪资\"",[46,75132,55451],{"class":169},[46,75134,79],{"class":56},[46,75136,71191],{"class":173},[46,75138,53274],{"class":56},[46,75140,75141,75143,75145,75147,75149,75151,75153,75155,75157,75159,75161,75163],{"class":48,"line":34825},[46,75142,53308],{"class":56},[46,75144,71109],{"class":1361},[46,75146,1364],{"class":169},[46,75148,79],{"class":56},[46,75150,71116],{"class":173},[46,75152,16960],{"class":169},[46,75154,79],{"class":56},[46,75156,9665],{"class":173},[46,75158,55451],{"class":169},[46,75160,79],{"class":56},[46,75162,71116],{"class":173},[46,75164,53274],{"class":56},[46,75166,75167,75169,75171,75173,75175,75177,75179,75181],{"class":48,"line":34831},[46,75168,57199],{"class":56},[46,75170,71131],{"class":1361},[46,75172,68616],{"class":169},[46,75174,79],{"class":56},[46,75176,11965],{"class":173},[46,75178,71140],{"class":56},[46,75180,71131],{"class":1361},[46,75182,53274],{"class":56},[46,75184,75185,75187,75189,75191,75193,75195,75197,75199],{"class":48,"line":34840},[46,75186,57199],{"class":56},[46,75188,71131],{"class":1361},[46,75190,68616],{"class":169},[46,75192,79],{"class":56},[46,75194,12034],{"class":173},[46,75196,71159],{"class":56},[46,75198,71131],{"class":1361},[46,75200,53274],{"class":56},[46,75202,75203,75205,75207],{"class":48,"line":34846},[46,75204,53743],{"class":56},[46,75206,71109],{"class":1361},[46,75208,53274],{"class":56},[46,75210,75211,75213,75215,75217,75219,75221,75223,75225,75227,75229,75231,75233],{"class":48,"line":34852},[46,75212,53308],{"class":56},[46,75214,71109],{"class":1361},[46,75216,1364],{"class":169},[46,75218,79],{"class":56},[46,75220,71213],{"class":173},[46,75222,16960],{"class":169},[46,75224,79],{"class":56},[46,75226,9665],{"class":173},[46,75228,55451],{"class":169},[46,75230,79],{"class":56},[46,75232,71213],{"class":173},[46,75234,53274],{"class":56},[46,75236,75237,75239,75241,75243,75245,75247,75249,75251],{"class":48,"line":34861},[46,75238,57199],{"class":56},[46,75240,71131],{"class":1361},[46,75242,68616],{"class":169},[46,75244,79],{"class":56},[46,75246,71234],{"class":173},[46,75248,71237],{"class":56},[46,75250,71131],{"class":1361},[46,75252,53274],{"class":56},[46,75254,75255,75257,75259,75261,75263,75265,75267,75269],{"class":48,"line":34867},[46,75256,57199],{"class":56},[46,75258,71131],{"class":1361},[46,75260,68616],{"class":169},[46,75262,79],{"class":56},[46,75264,71254],{"class":173},[46,75266,71257],{"class":56},[46,75268,71131],{"class":1361},[46,75270,53274],{"class":56},[46,75272,75273,75275,75277,75279,75281,75283,75285,75287],{"class":48,"line":34878},[46,75274,57199],{"class":56},[46,75276,71131],{"class":1361},[46,75278,68616],{"class":169},[46,75280,79],{"class":56},[46,75282,71274],{"class":173},[46,75284,71277],{"class":56},[46,75286,71131],{"class":1361},[46,75288,53274],{"class":56},[46,75290,75291,75293,75295,75297,75299,75301,75303,75305],{"class":48,"line":34884},[46,75292,57199],{"class":56},[46,75294,71131],{"class":1361},[46,75296,68616],{"class":169},[46,75298,79],{"class":56},[46,75300,71294],{"class":173},[46,75302,71297],{"class":56},[46,75304,71131],{"class":1361},[46,75306,53274],{"class":56},[46,75308,75309,75311,75313,75315,75317,75319,75321,75323],{"class":48,"line":34903},[46,75310,57199],{"class":56},[46,75312,71131],{"class":1361},[46,75314,68616],{"class":169},[46,75316,79],{"class":56},[46,75318,71314],{"class":173},[46,75320,71317],{"class":56},[46,75322,71131],{"class":1361},[46,75324,53274],{"class":56},[46,75326,75327,75329,75331],{"class":48,"line":34909},[46,75328,53743],{"class":56},[46,75330,71109],{"class":1361},[46,75332,53274],{"class":56},[46,75334,75335,75337,75339],{"class":48,"line":34920},[46,75336,53308],{"class":56},[46,75338,55852],{"class":1361},[46,75340,53274],{"class":56},[46,75342,75343,75345,75347,75350,75352,75355,75357],{"class":48,"line":34926},[46,75344,57199],{"class":56},[46,75346,46],{"class":1361},[46,75348,75349],{"class":56},">+\u003C\u002F",[46,75351,46],{"class":1361},[46,75353,75354],{"class":56},">添加\u003C\u002F",[46,75356,55852],{"class":1361},[46,75358,53274],{"class":56},[46,75360,75361,75363,75365],{"class":48,"line":34946},[46,75362,54384],{"class":56},[46,75364,68590],{"class":1361},[46,75366,53274],{"class":56},[46,75368,75369,75371,75373,75375,75377,75379,75382,75384,75387,75389,75392,75394],{"class":48,"line":34962},[46,75370,54111],{"class":56},[46,75372,53578],{"class":1361},[46,75374,55451],{"class":169},[46,75376,79],{"class":56},[46,75378,64545],{"class":173},[46,75380,75381],{"class":56},">共有数据 \u003C",[46,75383,46],{"class":1361},[46,75385,75386],{"class":56},">0\u003C\u002F",[46,75388,46],{"class":1361},[46,75390,75391],{"class":56},"> 条\u003C\u002F",[46,75393,53578],{"class":1361},[46,75395,53274],{"class":56},[46,75397,75398,75400,75402],{"class":48,"line":34968},[46,75399,54111],{"class":56},[46,75401,97],{"class":1361},[46,75403,53274],{"class":56},[46,75405,75406,75408,75410],{"class":48,"line":34982},[46,75407,53308],{"class":56},[46,75409,100],{"class":1361},[46,75411,53274],{"class":56},[46,75413,75414,75416,75418],{"class":48,"line":34988},[46,75415,57199],{"class":56},[46,75417,103],{"class":1361},[46,75419,53274],{"class":56},[46,75421,75422,75424,75426,75429,75431],{"class":48,"line":34994},[46,75423,57267],{"class":56},[46,75425,106],{"class":1361},[46,75427,75428],{"class":56},">ID\u003C\u002F",[46,75430,106],{"class":1361},[46,75432,53274],{"class":56},[46,75434,75435,75437,75439,75441,75443],{"class":48,"line":35005},[46,75436,57267],{"class":56},[46,75438,106],{"class":1361},[46,75440,71420],{"class":56},[46,75442,106],{"class":1361},[46,75444,53274],{"class":56},[46,75446,75447,75449,75451,75453,75455],{"class":48,"line":35011},[46,75448,57267],{"class":56},[46,75450,106],{"class":1361},[46,75452,71433],{"class":56},[46,75454,106],{"class":1361},[46,75456,53274],{"class":56},[46,75458,75459,75461,75463,75465,75467],{"class":48,"line":35017},[46,75460,57267],{"class":56},[46,75462,106],{"class":1361},[46,75464,71446],{"class":56},[46,75466,106],{"class":1361},[46,75468,53274],{"class":56},[46,75470,75471,75473,75475,75477,75479],{"class":48,"line":35027},[46,75472,57267],{"class":56},[46,75474,106],{"class":1361},[46,75476,71459],{"class":56},[46,75478,106],{"class":1361},[46,75480,53274],{"class":56},[46,75482,75483,75485,75487,75489,75491],{"class":48,"line":35033},[46,75484,57267],{"class":56},[46,75486,106],{"class":1361},[46,75488,71472],{"class":56},[46,75490,106],{"class":1361},[46,75492,53274],{"class":56},[46,75494,75495,75497,75499,75502,75504],{"class":48,"line":35044},[46,75496,57267],{"class":56},[46,75498,106],{"class":1361},[46,75500,75501],{"class":56},">录入时间\u003C\u002F",[46,75503,106],{"class":1361},[46,75505,53274],{"class":56},[46,75507,75508,75510,75512,75514,75516],{"class":48,"line":35050},[46,75509,57267],{"class":56},[46,75511,106],{"class":1361},[46,75513,71485],{"class":56},[46,75515,106],{"class":1361},[46,75517,53274],{"class":56},[46,75519,75520,75522,75524],{"class":48,"line":35060},[46,75521,57372],{"class":56},[46,75523,103],{"class":1361},[46,75525,53274],{"class":56},[46,75527,75528,75530,75532],{"class":48,"line":35065},[46,75529,53743],{"class":56},[46,75531,100],{"class":1361},[46,75533,53274],{"class":56},[46,75535,75536,75538,75540],{"class":48,"line":35071},[46,75537,53308],{"class":56},[46,75539,120],{"class":1361},[46,75541,53274],{"class":56},[46,75543,75544],{"class":48,"line":35120},[46,75545,75546],{"class":2253},"      \u003C!-- \u003Ctr>\n",[46,75548,75549],{"class":48,"line":35167},[46,75550,75551],{"class":2253},"        \u003Ctd>1\u003C\u002Ftd>\n",[46,75553,75554],{"class":48,"line":35172},[46,75555,75551],{"class":2253},[46,75557,75558],{"class":48,"line":35178},[46,75559,75551],{"class":2253},[46,75561,75562],{"class":48,"line":35197},[46,75563,75551],{"class":2253},[46,75565,75566],{"class":48,"line":35203},[46,75567,75551],{"class":2253},[46,75569,75570],{"class":48,"line":35223},[46,75571,75551],{"class":2253},[46,75573,75574],{"class":48,"line":35229},[46,75575,75551],{"class":2253},[46,75577,75578],{"class":48,"line":35235},[46,75579,75580],{"class":2253},"        \u003Ctd>\n",[46,75582,75583],{"class":48,"line":35245},[46,75584,75585],{"class":2253},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[46,75587,75588],{"class":48,"line":35250},[46,75589,75590],{"class":2253},"        \u003C\u002Ftd>\n",[46,75592,75593],{"class":48,"line":35256},[46,75594,75595],{"class":2253},"      \u003C\u002Ftr> -->\n",[46,75597,75598,75600,75602],{"class":48,"line":35272},[46,75599,53743],{"class":56},[46,75601,120],{"class":1361},[46,75603,53274],{"class":56},[46,75605,75606,75608,75610],{"class":48,"line":35317},[46,75607,54384],{"class":56},[46,75609,97],{"class":1361},[46,75611,53274],{"class":56},[46,75613,75614,75616,75618],{"class":48,"line":35323},[46,75615,54111],{"class":56},[46,75617,53780],{"class":1361},[46,75619,53274],{"class":56},[46,75621,75622],{"class":48,"line":35329},[46,75623,75624],{"class":2253},"    \u002F\u002F const initData = [{\n",[46,75626,75627],{"class":48,"line":35335},[46,75628,75629],{"class":2253},"    \u002F\u002F   unameId: 1,\n",[46,75631,75632],{"class":48,"line":35346},[46,75633,75634],{"class":2253},"    \u002F\u002F   uname: '华晨宇',\n",[46,75636,75637],{"class":48,"line":35352},[46,75638,75639],{"class":2253},"    \u002F\u002F   age: 22,\n",[46,75641,75642],{"class":48,"line":35358},[46,75643,75644],{"class":2253},"    \u002F\u002F   salary: 12000,\n",[46,75646,75647],{"class":48,"line":35364},[46,75648,75649],{"class":2253},"    \u002F\u002F   gender: '男',\n",[46,75651,75652],{"class":48,"line":35381},[46,75653,75654],{"class":2253},"    \u002F\u002F   city: '北京',\n",[46,75656,75657],{"class":48,"line":35395},[46,75658,75659],{"class":2253},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[46,75661,75662],{"class":48,"line":35404},[46,75663,75664],{"class":2253},"    \u002F\u002F }]\n",[46,75666,75667],{"class":48,"line":35413},[46,75668,75669],{"class":2253},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[46,75671,75672],{"class":48,"line":35422},[46,75673,75674],{"class":2253},"    \u002F\u002F 1.渲染业务\n",[46,75676,75677],{"class":48,"line":35431},[46,75678,75679],{"class":2253},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[46,75681,75682],{"class":48,"line":35437},[46,75683,75684],{"class":2253},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[46,75686,75687],{"class":48,"line":35443},[46,75688,75689],{"class":2253},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[46,75691,75692],{"class":48,"line":35451},[46,75693,616],{"emptyLinePlaceholder":615},[46,75695,75696],{"class":48,"line":35456},[46,75697,75698],{"class":2253},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[46,75700,75701],{"class":48,"line":35462},[46,75702,75703],{"class":2253},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[46,75705,75706,75708,75710,75712],{"class":48,"line":35473},[46,75707,13225],{"class":52},[46,75709,59660],{"class":180},[46,75711,647],{"class":52},[46,75713,53805],{"class":56},[46,75715,75716,75719,75721],{"class":48,"line":35479},[46,75717,75718],{"class":56},"    console.",[46,75720,60212],{"class":169},[46,75722,54379],{"class":56},[46,75724,75725],{"class":48,"line":35499},[46,75726,616],{"emptyLinePlaceholder":615},[46,75728,75729],{"class":48,"line":35505},[46,75730,75731],{"class":2253},"    \u002F\u002F 时间函数\n",[46,75733,75734,75736,75739],{"class":48,"line":35511},[46,75735,72049],{"class":52},[46,75737,75738],{"class":169}," getTime",[46,75740,12857],{"class":56},[46,75742,75743,75745,75748,75750,75752,75755],{"class":48,"line":35517},[46,75744,60193],{"class":52},[46,75746,75747],{"class":180}," date",[46,75749,647],{"class":52},[46,75751,13582],{"class":52},[46,75753,75754],{"class":169}," Date",[46,75756,4006],{"class":56},[46,75758,75759,75761,75763,75765,75768,75771,75773,75775,75777,75780,75783,75785,75787,75789,75791,75793,75795,75797],{"class":48,"line":35534},[46,75760,60193],{"class":52},[46,75762,18092],{"class":180},[46,75764,647],{"class":52},[46,75766,75767],{"class":56}," date.",[46,75769,75770],{"class":169},"getHours",[46,75772,15053],{"class":56},[46,75774,821],{"class":52},[46,75776,4068],{"class":180},[46,75778,75779],{"class":52}," ?",[46,75781,75782],{"class":173}," '0'",[46,75784,47537],{"class":52},[46,75786,75767],{"class":56},[46,75788,75770],{"class":169},[46,75790,15053],{"class":56},[46,75792,3045],{"class":52},[46,75794,75767],{"class":56},[46,75796,75770],{"class":169},[46,75798,4006],{"class":56},[46,75800,75801,75803,75806,75808,75810,75813,75815,75817,75819,75821,75823,75825,75827,75829,75831,75833,75835,75837],{"class":48,"line":35540},[46,75802,60193],{"class":52},[46,75804,75805],{"class":180}," m",[46,75807,647],{"class":52},[46,75809,75767],{"class":56},[46,75811,75812],{"class":169},"getMinutes",[46,75814,15053],{"class":56},[46,75816,821],{"class":52},[46,75818,4068],{"class":180},[46,75820,75779],{"class":52},[46,75822,75782],{"class":173},[46,75824,47537],{"class":52},[46,75826,75767],{"class":56},[46,75828,75812],{"class":169},[46,75830,15053],{"class":56},[46,75832,3045],{"class":52},[46,75834,75767],{"class":56},[46,75836,75812],{"class":169},[46,75838,4006],{"class":56},[46,75840,75841,75843,75845,75847,75849,75852,75854,75856,75858,75860,75862,75864,75866,75868,75870,75872,75874,75876],{"class":48,"line":35546},[46,75842,60193],{"class":52},[46,75844,10432],{"class":180},[46,75846,647],{"class":52},[46,75848,75767],{"class":56},[46,75850,75851],{"class":169},"getSeconds",[46,75853,15053],{"class":56},[46,75855,821],{"class":52},[46,75857,4068],{"class":180},[46,75859,75779],{"class":52},[46,75861,75782],{"class":173},[46,75863,47537],{"class":52},[46,75865,75767],{"class":56},[46,75867,75851],{"class":169},[46,75869,15053],{"class":56},[46,75871,3045],{"class":52},[46,75873,75767],{"class":56},[46,75875,75851],{"class":169},[46,75877,4006],{"class":56},[46,75879,75880,75882,75885,75887,75889,75892,75894,75897,75899,75902,75904,75906,75909,75911,75913,75915,75917,75919,75921,75924,75926,75929,75931,75934,75936,75938,75940],{"class":48,"line":35552},[46,75881,60193],{"class":52},[46,75883,75884],{"class":180}," str",[46,75886,647],{"class":52},[46,75888,64868],{"class":173},[46,75890,75891],{"class":56},"date",[46,75893,2744],{"class":173},[46,75895,75896],{"class":169},"getFullYear",[46,75898,4455],{"class":173},[46,75900,75901],{"class":173},"}\u002F${",[46,75903,75891],{"class":56},[46,75905,2744],{"class":173},[46,75907,75908],{"class":169},"getMonth",[46,75910,15053],{"class":173},[46,75912,2668],{"class":52},[46,75914,27110],{"class":180},[46,75916,75901],{"class":173},[46,75918,75891],{"class":56},[46,75920,2744],{"class":173},[46,75922,75923],{"class":169},"getDate",[46,75925,4455],{"class":173},[46,75927,75928],{"class":173},"} ${",[46,75930,2602],{"class":56},[46,75932,75933],{"class":173},"}:${",[46,75935,2730],{"class":56},[46,75937,75933],{"class":173},[46,75939,2881],{"class":56},[46,75941,75942],{"class":173},"}`\n",[46,75944,75945,75948],{"class":48,"line":35558},[46,75946,75947],{"class":52},"      return",[46,75949,75950],{"class":56}," str\n",[46,75952,75953],{"class":48,"line":35564},[46,75954,4217],{"class":56},[46,75956,75957],{"class":48,"line":35591},[46,75958,75959],{"class":2253},"    \u002F\u002F 渲染函数\n",[46,75961,75962,75964,75966,75968,75970,75972,75974,75976],{"class":48,"line":35615},[46,75963,13225],{"class":52},[46,75965,71712],{"class":180},[46,75967,647],{"class":52},[46,75969,56361],{"class":56},[46,75971,56364],{"class":169},[46,75973,1152],{"class":56},[46,75975,71723],{"class":173},[46,75977,459],{"class":56},[46,75979,75980,75982,75984],{"class":48,"line":35621},[46,75981,72049],{"class":52},[46,75983,72052],{"class":169},[46,75985,12857],{"class":56},[46,75987,75988],{"class":48,"line":35627},[46,75989,75990],{"class":2253},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[46,75992,75993],{"class":48,"line":35633},[46,75994,75995],{"class":2253},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[46,75997,75998,76000,76003,76005,76007,76010,76012,76014,76016,76019,76021,76024],{"class":48,"line":35644},[46,75999,60193],{"class":52},[46,76001,76002],{"class":180}," trArr",[46,76004,647],{"class":52},[46,76006,53932],{"class":56},[46,76008,76009],{"class":169},"map",[46,76011,1152],{"class":56},[46,76013,56414],{"class":52},[46,76015,3702],{"class":56},[46,76017,76018],{"class":439},"ele",[46,76020,448],{"class":56},[46,76022,76023],{"class":439},"index",[46,76025,14445],{"class":56},[46,76027,76028,76030],{"class":48,"line":35655},[46,76029,16754],{"class":52},[46,76031,72133],{"class":173},[46,76033,76034],{"class":48,"line":35661},[46,76035,76036],{"class":173},"      \u003Ctr>\n",[46,76038,76039,76041,76043,76045,76048],{"class":48,"line":35678},[46,76040,72138],{"class":173},[46,76042,76018],{"class":56},[46,76044,2744],{"class":173},[46,76046,76047],{"class":56},"unameId",[46,76049,72153],{"class":173},[46,76051,76052,76054,76056,76058,76060],{"class":48,"line":35701},[46,76053,72138],{"class":173},[46,76055,76018],{"class":56},[46,76057,2744],{"class":173},[46,76059,72169],{"class":56},[46,76061,72153],{"class":173},[46,76063,76064,76066,76068,76070,76072],{"class":48,"line":35724},[46,76065,72138],{"class":173},[46,76067,76018],{"class":56},[46,76069,2744],{"class":173},[46,76071,72186],{"class":56},[46,76073,72153],{"class":173},[46,76075,76076,76078,76080,76082,76084],{"class":48,"line":35730},[46,76077,72138],{"class":173},[46,76079,76018],{"class":56},[46,76081,2744],{"class":173},[46,76083,72203],{"class":56},[46,76085,72153],{"class":173},[46,76087,76088,76090,76092,76094,76096],{"class":48,"line":35735},[46,76089,72138],{"class":173},[46,76091,76018],{"class":56},[46,76093,2744],{"class":173},[46,76095,72220],{"class":56},[46,76097,72153],{"class":173},[46,76099,76100,76102,76104,76106,76108],{"class":48,"line":35744},[46,76101,72138],{"class":173},[46,76103,76018],{"class":56},[46,76105,2744],{"class":173},[46,76107,72237],{"class":56},[46,76109,72153],{"class":173},[46,76111,76112,76114,76116,76118,76120],{"class":48,"line":35754},[46,76113,72138],{"class":173},[46,76115,76018],{"class":56},[46,76117,2744],{"class":173},[46,76119,4416],{"class":56},[46,76121,72153],{"class":173},[46,76123,76124],{"class":48,"line":35760},[46,76125,75580],{"class":173},[46,76127,76128,76131,76133],{"class":48,"line":35765},[46,76129,76130],{"class":173},"          \u003Ca href=\"#\" data-id=\"${",[46,76132,76023],{"class":56},[46,76134,76135],{"class":173},"}\">删除\u003C\u002Fa>\n",[46,76137,76138],{"class":48,"line":35771},[46,76139,75590],{"class":173},[46,76141,76142],{"class":48,"line":35784},[46,76143,76144],{"class":173},"      \u003C\u002Ftr>\n",[46,76146,76147],{"class":48,"line":35790},[46,76148,76149],{"class":173},"  `\n",[46,76151,76152],{"class":48,"line":35801},[46,76153,66780],{"class":56},[46,76155,76156,76158,76160],{"class":48,"line":35812},[46,76157,60209],{"class":56},[46,76159,60212],{"class":169},[46,76161,76162],{"class":56},"(trArr)\n",[46,76164,76165],{"class":48,"line":35831},[46,76166,616],{"emptyLinePlaceholder":615},[46,76168,76169],{"class":48,"line":51486},[46,76170,76171],{"class":2253},"      \u002F\u002F (2) 把数组转换为字符串join\n",[46,76173,76174],{"class":48,"line":51491},[46,76175,76176],{"class":2253},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[46,76178,76179,76181,76183,76186,76189,76191,76194],{"class":48,"line":51500},[46,76180,72064],{"class":56},[46,76182,79],{"class":52},[46,76184,76185],{"class":56}," trArr.",[46,76187,76188],{"class":169},"join",[46,76190,1152],{"class":56},[46,76192,76193],{"class":173},"''",[46,76195,459],{"class":56},[46,76197,76198],{"class":48,"line":51509},[46,76199,76200],{"class":2253},"      \u002F\u002F 显示共有几条\n",[46,76202,76203,76205,76207,76209,76212,76215,76217,76219],{"class":48,"line":51514},[46,76204,57736],{"class":56},[46,76206,56364],{"class":169},[46,76208,1152],{"class":56},[46,76210,76211],{"class":173},"'.total span'",[46,76213,76214],{"class":56},").innerHTML ",[46,76216,79],{"class":52},[46,76218,53932],{"class":56},[46,76220,57796],{"class":180},[46,76222,76223],{"class":48,"line":51519},[46,76224,4217],{"class":56},[46,76226,76227],{"class":48,"line":51524},[46,76228,76229],{"class":2253},"    \u002F\u002F render()\n",[46,76231,76232],{"class":48,"line":51537},[46,76233,616],{"emptyLinePlaceholder":615},[46,76235,76236],{"class":48,"line":51542},[46,76237,76238],{"class":2253},"    \u002F\u002F 获取DOM对象\n",[46,76240,76241,76243,76245,76247,76249,76251,76253,76255],{"class":48,"line":51551},[46,76242,13225],{"class":52},[46,76244,71786],{"class":180},[46,76246,647],{"class":52},[46,76248,56361],{"class":56},[46,76250,56364],{"class":169},[46,76252,1152],{"class":56},[46,76254,71797],{"class":173},[46,76256,459],{"class":56},[46,76258,76259,76261,76263,76265,76267,76269,76271,76273],{"class":48,"line":51560},[46,76260,13225],{"class":52},[46,76262,71613],{"class":180},[46,76264,647],{"class":52},[46,76266,56361],{"class":56},[46,76268,56364],{"class":169},[46,76270,1152],{"class":56},[46,76272,71624],{"class":173},[46,76274,459],{"class":56},[46,76276,76277,76279,76281,76283,76285,76287,76289,76291],{"class":48,"line":51577},[46,76278,13225],{"class":52},[46,76280,17690],{"class":180},[46,76282,647],{"class":52},[46,76284,56361],{"class":56},[46,76286,56364],{"class":169},[46,76288,1152],{"class":56},[46,76290,71643],{"class":173},[46,76292,459],{"class":56},[46,76294,76296,76298,76300,76302,76304,76306,76308,76310],{"class":48,"line":76295},231,[46,76297,13225],{"class":52},[46,76299,71672],{"class":180},[46,76301,647],{"class":52},[46,76303,56361],{"class":56},[46,76305,56364],{"class":169},[46,76307,1152],{"class":56},[46,76309,71683],{"class":173},[46,76311,459],{"class":56},[46,76313,76315,76317,76319,76321,76323,76325,76327,76329],{"class":48,"line":76314},232,[46,76316,13225],{"class":52},[46,76318,71652],{"class":180},[46,76320,647],{"class":52},[46,76322,56361],{"class":56},[46,76324,56364],{"class":169},[46,76326,1152],{"class":56},[46,76328,71663],{"class":173},[46,76330,459],{"class":56},[46,76332,76334,76336,76338,76340,76342,76344,76346,76348],{"class":48,"line":76333},233,[46,76335,13225],{"class":52},[46,76337,71692],{"class":180},[46,76339,647],{"class":52},[46,76341,56361],{"class":56},[46,76343,56364],{"class":169},[46,76345,1152],{"class":56},[46,76347,71703],{"class":173},[46,76349,459],{"class":56},[46,76351,76353],{"class":48,"line":76352},234,[46,76354,616],{"emptyLinePlaceholder":615},[46,76356,76358],{"class":48,"line":76357},235,[46,76359,76360],{"class":2253},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[46,76362,76364,76366,76368,76370,76372,76374,76376,76378,76380],{"class":48,"line":76363},236,[46,76365,71804],{"class":56},[46,76367,59778],{"class":169},[46,76369,1152],{"class":56},[46,76371,71811],{"class":173},[46,76373,448],{"class":56},[46,76375,56414],{"class":52},[46,76377,3702],{"class":56},[46,76379,2269],{"class":439},[46,76381,14445],{"class":56},[46,76383,76385],{"class":48,"line":76384},237,[46,76386,76387],{"class":2253},"      \u002F\u002F 禁止浏览器跳转\n",[46,76389,76391,76393,76395],{"class":48,"line":76390},238,[46,76392,71831],{"class":56},[46,76394,71834],{"class":169},[46,76396,4006],{"class":56},[46,76398,76400],{"class":48,"line":76399},239,[46,76401,76402],{"class":2253},"      \u002F\u002F 非空判断\n",[46,76404,76406],{"class":48,"line":76405},240,[46,76407,76408],{"class":2253},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[46,76410,76412],{"class":48,"line":76411},241,[46,76413,76414],{"class":2253},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[46,76416,76418,76420,76422,76424,76427,76429,76432,76435,76437,76439],{"class":48,"line":76417},242,[46,76419,56445],{"class":52},[46,76421,3702],{"class":56},[46,76423,2414],{"class":52},[46,76425,76426],{"class":56},"uname.value ",[46,76428,73322],{"class":52},[46,76430,76431],{"class":52}," !",[46,76433,76434],{"class":56},"age.value ",[46,76436,73322],{"class":52},[46,76438,76431],{"class":52},[46,76440,76441],{"class":56},"salary.value) {\n",[46,76443,76445,76447,76449,76451,76453],{"class":48,"line":76444},243,[46,76446,16754],{"class":52},[46,76448,71905],{"class":169},[46,76450,1152],{"class":56},[46,76452,71910],{"class":173},[46,76454,459],{"class":56},[46,76456,76458],{"class":48,"line":76457},244,[46,76459,54365],{"class":56},[46,76461,76463,76465,76467],{"class":48,"line":76462},245,[46,76464,59972],{"class":56},[46,76466,53851],{"class":169},[46,76468,76469],{"class":56},"({\n",[46,76471,76473],{"class":48,"line":76472},246,[46,76474,76475],{"class":2253},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[46,76477,76479],{"class":48,"line":76478},247,[46,76480,76481],{"class":2253},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[46,76483,76485],{"class":48,"line":76484},248,[46,76486,76487],{"class":2253},"        \u002F\u002F 对象的序号应为数组长度+1\n",[46,76489,76491],{"class":48,"line":76490},249,[46,76492,76493],{"class":2253},"        \u002F\u002F unameId: arr.length + 1,\n",[46,76495,76497],{"class":48,"line":76496},250,[46,76498,616],{"emptyLinePlaceholder":615},[46,76500,76502],{"class":48,"line":76501},251,[46,76503,76504],{"class":2253},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[46,76506,76508],{"class":48,"line":76507},252,[46,76509,76510],{"class":2253},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[46,76512,76514],{"class":48,"line":76513},253,[46,76515,76516],{"class":2253},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[46,76518,76520],{"class":48,"line":76519},254,[46,76521,76522],{"class":2253},"        \u002F\u002F 0当假看\n",[46,76524,76526,76529,76531,76533,76536,76538,76540,76542,76545,76547,76549,76552,76554],{"class":48,"line":76525},255,[46,76527,76528],{"class":56},"        unameId: arr.",[46,76530,53935],{"class":180},[46,76532,75779],{"class":52},[46,76534,76535],{"class":56}," arr[arr.",[46,76537,53935],{"class":180},[46,76539,54238],{"class":52},[46,76541,27110],{"class":180},[46,76543,76544],{"class":56},"].unameId ",[46,76546,2668],{"class":52},[46,76548,27110],{"class":180},[46,76550,76551],{"class":52}," :",[46,76553,27110],{"class":180},[46,76555,33443],{"class":56},[46,76557,76559],{"class":48,"line":76558},256,[46,76560,71958],{"class":56},[46,76562,76564],{"class":48,"line":76563},257,[46,76565,71963],{"class":56},[46,76567,76569],{"class":48,"line":76568},258,[46,76570,71973],{"class":56},[46,76572,76574],{"class":48,"line":76573},259,[46,76575,71968],{"class":56},[46,76577,76579],{"class":48,"line":76578},260,[46,76580,76581],{"class":56},"        city: city.value,\n",[46,76583,76585],{"class":48,"line":76584},261,[46,76586,76587],{"class":2253},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[46,76589,76591],{"class":48,"line":76590},262,[46,76592,76593],{"class":2253},"        \u002F\u002F time: new Date().toDateString()\n",[46,76595,76597,76600,76603],{"class":48,"line":76596},263,[46,76598,76599],{"class":56},"        time: ",[46,76601,76602],{"class":169},"getTime",[46,76604,4006],{"class":56},[46,76606,76608],{"class":48,"line":76607},264,[46,76609,66780],{"class":56},[46,76611,76613],{"class":48,"line":76612},265,[46,76614,76615],{"class":2253},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[46,76617,76619,76621],{"class":48,"line":76618},266,[46,76620,72033],{"class":169},[46,76622,4006],{"class":56},[46,76624,76626,76628,76630,76632,76634],{"class":48,"line":76625},267,[46,76627,72016],{"class":180},[46,76629,2744],{"class":56},[46,76631,72021],{"class":169},[46,76633,15053],{"class":56},[46,76635,76636],{"class":2253},"\u002F\u002F重置表单\n",[46,76638,76640],{"class":48,"line":76639},268,[46,76641,76642],{"class":2253},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[46,76644,76646,76649,76651,76653,76656,76658,76660,76662,76664],{"class":48,"line":76645},269,[46,76647,76648],{"class":56},"      localStorage.",[46,76650,73619],{"class":169},[46,76652,1152],{"class":56},[46,76654,76655],{"class":173},"'data'",[46,76657,448],{"class":56},[46,76659,73629],{"class":180},[46,76661,2744],{"class":56},[46,76663,73634],{"class":169},[46,76665,76666],{"class":56},"(arr))\n",[46,76668,76670],{"class":48,"line":76669},270,[46,76671,35434],{"class":56},[46,76673,76675],{"class":48,"line":76674},271,[46,76676,616],{"emptyLinePlaceholder":615},[46,76678,76680],{"class":48,"line":76679},272,[46,76681,76682],{"class":2253},"    \u002F\u002F 3.删除业务\n",[46,76684,76686],{"class":48,"line":76685},273,[46,76687,76688],{"class":2253},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[46,76690,76692,76694,76696,76698,76700,76702,76704,76706,76708],{"class":48,"line":76691},274,[46,76693,72306],{"class":56},[46,76695,59778],{"class":169},[46,76697,1152],{"class":56},[46,76699,59783],{"class":173},[46,76701,448],{"class":56},[46,76703,56414],{"class":52},[46,76705,3702],{"class":56},[46,76707,2269],{"class":439},[46,76709,14445],{"class":56},[46,76711,76713],{"class":48,"line":76712},275,[46,76714,76715],{"class":2253},"      \u002F\u002F 判断是否点击的是删除按钮\n",[46,76717,76719,76721,76723,76725,76727],{"class":48,"line":76718},276,[46,76720,56445],{"class":52},[46,76722,68999],{"class":56},[46,76724,56451],{"class":52},[46,76726,70221],{"class":173},[46,76728,14445],{"class":56},[46,76730,76732],{"class":48,"line":76731},277,[46,76733,76734],{"class":2253},"        \u002F\u002F alert(1)\n",[46,76736,76738],{"class":48,"line":76737},278,[46,76739,76740],{"class":2253},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[46,76742,76744],{"class":48,"line":76743},279,[46,76745,76746],{"class":2253},"        \u002F\u002F console.log(e.target)\n",[46,76748,76750],{"class":48,"line":76749},280,[46,76751,76752],{"class":2253},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[46,76754,76756],{"class":48,"line":76755},281,[46,76757,616],{"emptyLinePlaceholder":615},[46,76759,76761],{"class":48,"line":76760},282,[46,76762,76763],{"class":2253},"        \u002F\u002F 确认框，确然是否真的要删除\n",[46,76765,76767],{"class":48,"line":76766},283,[46,76768,76769],{"class":2253},"        \u002F\u002F confirm()为确认框\n",[46,76771,76773],{"class":48,"line":76772},284,[46,76774,76775],{"class":2253},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[46,76777,76779,76781,76783,76786,76788,76791],{"class":48,"line":76778},285,[46,76780,4525],{"class":52},[46,76782,3702],{"class":56},[46,76784,76785],{"class":169},"confirm",[46,76787,1152],{"class":56},[46,76789,76790],{"class":173},"'您确定要删除这条数据吗？'",[46,76792,76793],{"class":56},")) {\n",[46,76795,76797,76800,76802,76804,76806],{"class":48,"line":76796},286,[46,76798,76799],{"class":56},"          arr.",[46,76801,59975],{"class":169},[46,76803,72359],{"class":56},[46,76805,2405],{"class":180},[46,76807,459],{"class":56},[46,76809,76811],{"class":48,"line":76810},287,[46,76812,76813],{"class":2253},"          \u002F\u002F 3.4 重新渲染页面\n",[46,76815,76817,76820],{"class":48,"line":76816},288,[46,76818,76819],{"class":169},"          render",[46,76821,4006],{"class":56},[46,76823,76825],{"class":48,"line":76824},289,[46,76826,76827],{"class":2253},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[46,76829,76831,76834,76836,76838,76840,76842,76844,76846,76848],{"class":48,"line":76830},290,[46,76832,76833],{"class":56},"          localStorage.",[46,76835,73619],{"class":169},[46,76837,1152],{"class":56},[46,76839,76655],{"class":173},[46,76841,448],{"class":56},[46,76843,73629],{"class":180},[46,76845,2744],{"class":56},[46,76847,73634],{"class":169},[46,76849,76666],{"class":56},[46,76851,76853],{"class":48,"line":76852},291,[46,76854,4557],{"class":56},[46,76856,76858],{"class":48,"line":76857},292,[46,76859,54365],{"class":56},[46,76861,76863],{"class":48,"line":76862},293,[46,76864,616],{"emptyLinePlaceholder":615},[46,76866,76868],{"class":48,"line":76867},294,[46,76869,35434],{"class":56},[46,76871,76873],{"class":48,"line":76872},295,[46,76874,616],{"emptyLinePlaceholder":615},[46,76876,76878,76880,76882],{"class":48,"line":76877},296,[46,76879,54384],{"class":56},[46,76881,53780],{"class":1361},[46,76883,53274],{"class":56},[46,76885,76887,76889,76891],{"class":48,"line":76886},297,[46,76888,53752],{"class":56},[46,76890,53767],{"class":1361},[46,76892,53274],{"class":56},[46,76894,76896],{"class":48,"line":76895},298,[46,76897,616],{"emptyLinePlaceholder":615},[46,76899,76901,76903,76905],{"class":48,"line":76900},299,[46,76902,53752],{"class":56},[46,76904,52603],{"class":1361},[46,76906,53274],{"class":56},[14,76908,76910],{"id":76909},"_36-正则表达式","3.6 正则表达式",[19,76912,76913],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[19,76915,76916],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[19,76918,76919],{},"正则表达式的作用：",[3191,76921,76922,76929,76935],{},[26,76923,76924,76925,76928],{},"表单验证（ ",[2339,76926,76927],{},"匹配"," ）",[26,76930,76931,76932,76928],{},"过滤敏感词（ ",[2339,76933,76934],{},"替换",[26,76936,76937,76938,76928],{},"字符串中提取我们想要的部分（ ",[2339,76939,76940],{},"提取",[479,76942,76944],{"id":76943},"_361-语法","3.6.1 语法",[19,76946,76947],{},"正则表达式使用步骤：",[23,76949,76950,76953],{},[26,76951,76952],{},"定义规则",[26,76954,76955],{},"查找是否匹配",[19,76957,76958],{},"正则表达式里边不需要写引号",[19,76960,76961],{},[3514,76962],{"alt":41,"src":76963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[19,76965,76966],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[19,76968,76969],{},"reg.test(str)",[19,76971,76972],{},[3514,76973],{"alt":41,"src":76974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[19,76976,76977],{},[3514,76978],{"alt":41,"src":76979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[479,76981,76983],{"id":76982},"_362-元字符","3.6.2 元字符",[23,76985,76986,76989,76992,76995,77002],{},[26,76987,76988],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[26,76990,76991],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[26,76993,76994],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[26,76996,76997,76998],{},"正则验证工具：",[2426,76999,77000],{"href":77000,"rel":77001},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[25862],[26,77003,77004],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[23999,77006,77008],{"id":77007},"_3621-边界符","3.6.2.1 边界符",[19,77010,77011],{},[3514,77012],{"alt":41,"src":77013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[19,77015,77016],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[19,77018,77019],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[19,77021,77022],{},"只匹配一次",[19,77024,77025],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[23999,77027,77029],{"id":77028},"_3622-量词","3.6.2.2 量词",[19,77031,77032],{},[3514,77033],{"alt":41,"src":77034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[19,77036,77037],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[23999,77039,77041],{"id":77040},"_3623-元字符","3.6.2.3 元字符",[19,77043,77044],{},[3514,77045],{"alt":41,"src":77046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[19,77048,77049],{},"匹配的是a或b或c []只选一个",[19,77051,77052],{},[3514,77053],{"alt":41,"src":77054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[19,77056,77057],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[19,77059,77060],{},[3514,77061],{"alt":41,"src":77062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[19,77064,77065],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[19,77067,77068],{},[3514,77069],{"alt":41,"src":77070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[36,77072,77074],{"className":52601,"code":77073,"language":52603,"meta":41,"style":41},"\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",[43,77075,77076,77086,77100,77104,77112,77126,77146,77158,77166,77170,77178,77186,77191,77222,77249,77277,77281,77286,77314,77345,77350,77355,77386,77418,77450,77454,77459,77490,77520,77550,77554,77559,77590,77621,77651,77681,77685,77690,77723,77727,77732,77763,77794,77798,77803,77834,77864,77895,77899,77904,77936,77967,77998,78025,78056,78088,78121,78152,78183,78215,78246,78254,78262,78266],{"__ignoreMap":41},[46,77077,77078,77080,77082,77084],{"class":48,"line":49},[46,77079,53265],{"class":56},[46,77081,53268],{"class":1361},[46,77083,53271],{"class":169},[46,77085,53274],{"class":56},[46,77087,77088,77090,77092,77094,77096,77098],{"class":48,"line":60},[46,77089,821],{"class":56},[46,77091,52603],{"class":1361},[46,77093,53283],{"class":169},[46,77095,79],{"class":56},[46,77097,53288],{"class":173},[46,77099,53274],{"class":56},[46,77101,77102],{"class":48,"line":200},[46,77103,616],{"emptyLinePlaceholder":615},[46,77105,77106,77108,77110],{"class":48,"line":211},[46,77107,821],{"class":56},[46,77109,53301],{"class":1361},[46,77111,53274],{"class":56},[46,77113,77114,77116,77118,77120,77122,77124],{"class":48,"line":222},[46,77115,54111],{"class":56},[46,77117,53311],{"class":1361},[46,77119,53314],{"class":169},[46,77121,79],{"class":56},[46,77123,53319],{"class":173},[46,77125,53274],{"class":56},[46,77127,77128,77130,77132,77134,77136,77138,77140,77142,77144],{"class":48,"line":636},[46,77129,54111],{"class":56},[46,77131,53311],{"class":1361},[46,77133,1364],{"class":169},[46,77135,79],{"class":56},[46,77137,53358],{"class":173},[46,77139,53338],{"class":169},[46,77141,79],{"class":56},[46,77143,53365],{"class":173},[46,77145,53274],{"class":56},[46,77147,77148,77150,77152,77154,77156],{"class":48,"line":641},[46,77149,54111],{"class":56},[46,77151,53374],{"class":1361},[46,77153,53377],{"class":56},[46,77155,53374],{"class":1361},[46,77157,53274],{"class":56},[46,77159,77160,77162,77164],{"class":48,"line":653},[46,77161,53752],{"class":56},[46,77163,53301],{"class":1361},[46,77165,53274],{"class":56},[46,77167,77168],{"class":48,"line":659},[46,77169,616],{"emptyLinePlaceholder":615},[46,77171,77172,77174,77176],{"class":48,"line":665},[46,77173,821],{"class":56},[46,77175,53767],{"class":1361},[46,77177,53274],{"class":56},[46,77179,77180,77182,77184],{"class":48,"line":670},[46,77181,54111],{"class":56},[46,77183,53780],{"class":1361},[46,77185,53274],{"class":56},[46,77187,77188],{"class":48,"line":676},[46,77189,77190],{"class":2253},"    \u002F\u002F 元字符中\n",[46,77192,77193,77195,77197,77199,77201,77204,77206,77208,77211,77213,77216,77219],{"class":48,"line":682},[46,77194,75718],{"class":56},[46,77196,60212],{"class":169},[46,77198,1152],{"class":56},[46,77200,2770],{"class":173},[46,77202,77203],{"class":49945},"哈",[46,77205,2770],{"class":173},[46,77207,2744],{"class":56},[46,77209,77210],{"class":169},"test",[46,77212,1152],{"class":56},[46,77214,77215],{"class":173},"'哈'",[46,77217,77218],{"class":56},"))  ",[46,77220,77221],{"class":2253},"\u002F\u002Ftrue\n",[46,77223,77224,77226,77228,77230,77232,77234,77236,77238,77240,77242,77245,77247],{"class":48,"line":688},[46,77225,75718],{"class":56},[46,77227,60212],{"class":169},[46,77229,1152],{"class":56},[46,77231,2770],{"class":173},[46,77233,77203],{"class":49945},[46,77235,2770],{"class":173},[46,77237,2744],{"class":56},[46,77239,77210],{"class":169},[46,77241,1152],{"class":56},[46,77243,77244],{"class":173},"'哈哈'",[46,77246,77218],{"class":56},[46,77248,77221],{"class":2253},[46,77250,77251,77253,77255,77257,77259,77261,77263,77265,77267,77269,77272,77275],{"class":48,"line":693},[46,77252,75718],{"class":56},[46,77254,60212],{"class":169},[46,77256,1152],{"class":56},[46,77258,2770],{"class":173},[46,77260,77203],{"class":49945},[46,77262,2770],{"class":173},[46,77264,2744],{"class":56},[46,77266,77210],{"class":169},[46,77268,1152],{"class":56},[46,77270,77271],{"class":173},"'二哈'",[46,77273,77274],{"class":56},"))   ",[46,77276,77221],{"class":2253},[46,77278,77279],{"class":48,"line":699},[46,77280,616],{"emptyLinePlaceholder":615},[46,77282,77283],{"class":48,"line":705},[46,77284,77285],{"class":2253},"    \u002F\u002F 1.边界符\n",[46,77287,77288,77290,77292,77294,77296,77298,77300,77302,77304,77306,77308,77310,77312],{"class":48,"line":711},[46,77289,75718],{"class":56},[46,77291,60212],{"class":169},[46,77293,1152],{"class":56},[46,77295,2770],{"class":173},[46,77297,3150],{"class":52},[46,77299,77203],{"class":49945},[46,77301,2770],{"class":173},[46,77303,2744],{"class":56},[46,77305,77210],{"class":169},[46,77307,1152],{"class":56},[46,77309,77215],{"class":173},[46,77311,77218],{"class":56},[46,77313,77221],{"class":2253},[46,77315,77316,77318,77320,77322,77324,77326,77328,77330,77332,77334,77336,77338,77340,77342],{"class":48,"line":717},[46,77317,75718],{"class":56},[46,77319,60212],{"class":169},[46,77321,1152],{"class":56},[46,77323,2770],{"class":173},[46,77325,3150],{"class":52},[46,77327,77203],{"class":49945},[46,77329,2490],{"class":52},[46,77331,2770],{"class":173},[46,77333,2744],{"class":56},[46,77335,77210],{"class":169},[46,77337,1152],{"class":56},[46,77339,77244],{"class":173},[46,77341,77218],{"class":56},[46,77343,77344],{"class":2253},"\u002F\u002Ffalse\n",[46,77346,77347],{"class":48,"line":723},[46,77348,77349],{"class":2253},"    \u002F\u002F 2.量词\n",[46,77351,77352],{"class":48,"line":729},[46,77353,77354],{"class":2253},"    \u002F\u002F 量词 * 类似于 >= 0\n",[46,77356,77357,77359,77361,77363,77365,77367,77369,77372,77374,77376,77378,77380,77382,77384],{"class":48,"line":735},[46,77358,75718],{"class":56},[46,77360,60212],{"class":169},[46,77362,1152],{"class":56},[46,77364,2770],{"class":173},[46,77366,3150],{"class":52},[46,77368,77203],{"class":49945},[46,77370,77371],{"class":52},"*$",[46,77373,2770],{"class":173},[46,77375,2744],{"class":56},[46,77377,77210],{"class":169},[46,77379,1152],{"class":56},[46,77381,77244],{"class":173},[46,77383,77218],{"class":56},[46,77385,77221],{"class":2253},[46,77387,77388,77390,77392,77394,77396,77398,77400,77402,77404,77406,77408,77410,77413,77415],{"class":48,"line":740},[46,77389,75718],{"class":56},[46,77391,60212],{"class":169},[46,77393,1152],{"class":56},[46,77395,2770],{"class":173},[46,77397,3150],{"class":52},[46,77399,77203],{"class":49945},[46,77401,77371],{"class":52},[46,77403,2770],{"class":173},[46,77405,2744],{"class":56},[46,77407,77210],{"class":169},[46,77409,1152],{"class":56},[46,77411,77412],{"class":173},"'二哈好傻'",[46,77414,77218],{"class":56},[46,77416,77417],{"class":2253},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[46,77419,77420,77422,77424,77426,77428,77430,77432,77434,77436,77438,77440,77442,77445,77447],{"class":48,"line":745},[46,77421,75718],{"class":56},[46,77423,60212],{"class":169},[46,77425,1152],{"class":56},[46,77427,2770],{"class":173},[46,77429,3150],{"class":52},[46,77431,77203],{"class":49945},[46,77433,77371],{"class":52},[46,77435,2770],{"class":173},[46,77437,2744],{"class":56},[46,77439,77210],{"class":169},[46,77441,1152],{"class":56},[46,77443,77444],{"class":173},"'哈好哈'",[46,77446,77274],{"class":56},[46,77448,77449],{"class":2253},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[46,77451,77452],{"class":48,"line":763},[46,77453,616],{"emptyLinePlaceholder":615},[46,77455,77456],{"class":48,"line":778},[46,77457,77458],{"class":2253},"    \u002F\u002F +类似于>=1\n",[46,77460,77461,77463,77465,77467,77469,77471,77473,77476,77478,77480,77482,77484,77486,77488],{"class":48,"line":789},[46,77462,75718],{"class":56},[46,77464,60212],{"class":169},[46,77466,1152],{"class":56},[46,77468,2770],{"class":173},[46,77470,3150],{"class":52},[46,77472,77203],{"class":49945},[46,77474,77475],{"class":52},"+$",[46,77477,2770],{"class":173},[46,77479,2744],{"class":56},[46,77481,77210],{"class":169},[46,77483,1152],{"class":56},[46,77485,77244],{"class":173},[46,77487,77218],{"class":56},[46,77489,77221],{"class":2253},[46,77491,77492,77494,77496,77498,77500,77502,77504,77506,77508,77510,77512,77514,77516,77518],{"class":48,"line":794},[46,77493,75718],{"class":56},[46,77495,60212],{"class":169},[46,77497,1152],{"class":56},[46,77499,2770],{"class":173},[46,77501,3150],{"class":52},[46,77503,77203],{"class":49945},[46,77505,77475],{"class":52},[46,77507,2770],{"class":173},[46,77509,2744],{"class":56},[46,77511,77210],{"class":169},[46,77513,1152],{"class":56},[46,77515,77412],{"class":173},[46,77517,77218],{"class":56},[46,77519,77417],{"class":2253},[46,77521,77522,77524,77526,77528,77530,77532,77534,77536,77538,77540,77542,77544,77546,77548],{"class":48,"line":806},[46,77523,75718],{"class":56},[46,77525,60212],{"class":169},[46,77527,1152],{"class":56},[46,77529,2770],{"class":173},[46,77531,3150],{"class":52},[46,77533,77203],{"class":49945},[46,77535,77475],{"class":52},[46,77537,2770],{"class":173},[46,77539,2744],{"class":56},[46,77541,77210],{"class":169},[46,77543,1152],{"class":56},[46,77545,77444],{"class":173},[46,77547,77274],{"class":56},[46,77549,77344],{"class":2253},[46,77551,77552],{"class":48,"line":829},[46,77553,616],{"emptyLinePlaceholder":615},[46,77555,77556],{"class":48,"line":840},[46,77557,77558],{"class":2253},"    \u002F\u002F ?类似于0次或一次\n",[46,77560,77561,77563,77565,77567,77569,77571,77574,77576,77578,77580,77582,77584,77586,77588],{"class":48,"line":846},[46,77562,75718],{"class":56},[46,77564,60212],{"class":169},[46,77566,1152],{"class":56},[46,77568,2770],{"class":173},[46,77570,3150],{"class":52},[46,77572,77573],{"class":49945},"哈？",[46,77575,2490],{"class":52},[46,77577,2770],{"class":173},[46,77579,2744],{"class":56},[46,77581,77210],{"class":169},[46,77583,1152],{"class":56},[46,77585,76193],{"class":173},[46,77587,77274],{"class":56},[46,77589,77221],{"class":2253},[46,77591,77592,77594,77596,77598,77600,77602,77604,77607,77609,77611,77613,77615,77617,77619],{"class":48,"line":852},[46,77593,75718],{"class":56},[46,77595,60212],{"class":169},[46,77597,1152],{"class":56},[46,77599,2770],{"class":173},[46,77601,3150],{"class":52},[46,77603,77203],{"class":49945},[46,77605,77606],{"class":52},"?$",[46,77608,2770],{"class":173},[46,77610,2744],{"class":56},[46,77612,77210],{"class":169},[46,77614,1152],{"class":56},[46,77616,77244],{"class":173},[46,77618,77218],{"class":56},[46,77620,77344],{"class":2253},[46,77622,77623,77625,77627,77629,77631,77633,77635,77637,77639,77641,77643,77645,77647,77649],{"class":48,"line":857},[46,77624,75718],{"class":56},[46,77626,60212],{"class":169},[46,77628,1152],{"class":56},[46,77630,2770],{"class":173},[46,77632,3150],{"class":52},[46,77634,77203],{"class":49945},[46,77636,77606],{"class":52},[46,77638,2770],{"class":173},[46,77640,2744],{"class":56},[46,77642,77210],{"class":169},[46,77644,1152],{"class":56},[46,77646,77412],{"class":173},[46,77648,77218],{"class":56},[46,77650,77417],{"class":2253},[46,77652,77653,77655,77657,77659,77661,77663,77665,77667,77669,77671,77673,77675,77677,77679],{"class":48,"line":875},[46,77654,75718],{"class":56},[46,77656,60212],{"class":169},[46,77658,1152],{"class":56},[46,77660,2770],{"class":173},[46,77662,3150],{"class":52},[46,77664,77203],{"class":49945},[46,77666,77606],{"class":52},[46,77668,2770],{"class":173},[46,77670,2744],{"class":56},[46,77672,77210],{"class":169},[46,77674,1152],{"class":56},[46,77676,77444],{"class":173},[46,77678,77218],{"class":56},[46,77680,77344],{"class":2253},[46,77682,77683],{"class":48,"line":892},[46,77684,616],{"emptyLinePlaceholder":615},[46,77686,77687],{"class":48,"line":898},[46,77688,77689],{"class":2253},"    \u002F\u002F {n}写几，就必须出现几次\n",[46,77691,77692,77694,77696,77698,77700,77702,77704,77707,77709,77711,77713,77715,77718,77721],{"class":48,"line":903},[46,77693,75718],{"class":56},[46,77695,60212],{"class":169},[46,77697,1152],{"class":56},[46,77699,2770],{"class":173},[46,77701,3150],{"class":52},[46,77703,77203],{"class":49945},[46,77705,77706],{"class":52},"{4}$",[46,77708,2770],{"class":173},[46,77710,2744],{"class":56},[46,77712,77210],{"class":169},[46,77714,1152],{"class":56},[46,77716,77717],{"class":173},"'哈哈哈哈'",[46,77719,77720],{"class":56},")) ",[46,77722,77221],{"class":2253},[46,77724,77725],{"class":48,"line":908},[46,77726,616],{"emptyLinePlaceholder":615},[46,77728,77729],{"class":48,"line":925},[46,77730,77731],{"class":2253},"    \u002F\u002F {n,}大于等于n次\n",[46,77733,77734,77736,77738,77740,77742,77744,77746,77749,77751,77753,77755,77757,77759,77761],{"class":48,"line":1238},[46,77735,75718],{"class":56},[46,77737,60212],{"class":169},[46,77739,1152],{"class":56},[46,77741,2770],{"class":173},[46,77743,3150],{"class":52},[46,77745,77203],{"class":49945},[46,77747,77748],{"class":52},"{4,}$",[46,77750,2770],{"class":173},[46,77752,2744],{"class":56},[46,77754,77210],{"class":169},[46,77756,1152],{"class":56},[46,77758,77717],{"class":173},[46,77760,77720],{"class":56},[46,77762,77221],{"class":2253},[46,77764,77765,77767,77769,77771,77773,77775,77777,77779,77781,77783,77785,77787,77790,77792],{"class":48,"line":1251},[46,77766,75718],{"class":56},[46,77768,60212],{"class":169},[46,77770,1152],{"class":56},[46,77772,2770],{"class":173},[46,77774,3150],{"class":52},[46,77776,77203],{"class":49945},[46,77778,77748],{"class":52},[46,77780,2770],{"class":173},[46,77782,2744],{"class":56},[46,77784,77210],{"class":169},[46,77786,1152],{"class":56},[46,77788,77789],{"class":173},"'哈哈哈哈哈'",[46,77791,77720],{"class":56},[46,77793,77221],{"class":2253},[46,77795,77796],{"class":48,"line":1256},[46,77797,616],{"emptyLinePlaceholder":615},[46,77799,77800],{"class":48,"line":1261},[46,77801,77802],{"class":2253},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[46,77804,77805,77807,77809,77811,77813,77815,77817,77820,77822,77824,77826,77828,77830,77832],{"class":48,"line":1274},[46,77806,75718],{"class":56},[46,77808,60212],{"class":169},[46,77810,1152],{"class":56},[46,77812,2770],{"class":173},[46,77814,3150],{"class":52},[46,77816,77203],{"class":49945},[46,77818,77819],{"class":52},"{4,6}$",[46,77821,2770],{"class":173},[46,77823,2744],{"class":56},[46,77825,77210],{"class":169},[46,77827,1152],{"class":56},[46,77829,77717],{"class":173},[46,77831,77720],{"class":56},[46,77833,77221],{"class":2253},[46,77835,77836,77838,77840,77842,77844,77846,77848,77850,77852,77854,77856,77858,77860,77862],{"class":48,"line":10061},[46,77837,75718],{"class":56},[46,77839,60212],{"class":169},[46,77841,1152],{"class":56},[46,77843,2770],{"class":173},[46,77845,3150],{"class":52},[46,77847,77203],{"class":49945},[46,77849,77819],{"class":52},[46,77851,2770],{"class":173},[46,77853,2744],{"class":56},[46,77855,77210],{"class":169},[46,77857,1152],{"class":56},[46,77859,77789],{"class":173},[46,77861,77720],{"class":56},[46,77863,77221],{"class":2253},[46,77865,77866,77868,77870,77872,77874,77876,77878,77880,77882,77884,77886,77888,77891,77893],{"class":48,"line":11720},[46,77867,75718],{"class":56},[46,77869,60212],{"class":169},[46,77871,1152],{"class":56},[46,77873,2770],{"class":173},[46,77875,3150],{"class":52},[46,77877,77203],{"class":49945},[46,77879,77819],{"class":52},[46,77881,2770],{"class":173},[46,77883,2744],{"class":56},[46,77885,77210],{"class":169},[46,77887,1152],{"class":56},[46,77889,77890],{"class":173},"'哈哈哈哈哈哈哈'",[46,77892,77720],{"class":56},[46,77894,77344],{"class":2253},[46,77896,77897],{"class":48,"line":11745},[46,77898,616],{"emptyLinePlaceholder":615},[46,77900,77901],{"class":48,"line":11768},[46,77902,77903],{"class":2253},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[46,77905,77906,77908,77910,77912,77914,77916,77919,77921,77923,77925,77927,77929,77932,77934],{"class":48,"line":11792},[46,77907,75718],{"class":56},[46,77909,60212],{"class":169},[46,77911,1152],{"class":56},[46,77913,2770],{"class":173},[46,77915,3150],{"class":52},[46,77917,77918],{"class":180},"[abc]",[46,77920,2490],{"class":52},[46,77922,2770],{"class":173},[46,77924,2744],{"class":56},[46,77926,77210],{"class":169},[46,77928,1152],{"class":56},[46,77930,77931],{"class":173},"'a'",[46,77933,77218],{"class":56},[46,77935,77221],{"class":2253},[46,77937,77938,77940,77942,77944,77946,77948,77950,77952,77954,77956,77958,77960,77963,77965],{"class":48,"line":11797},[46,77939,75718],{"class":56},[46,77941,60212],{"class":169},[46,77943,1152],{"class":56},[46,77945,2770],{"class":173},[46,77947,3150],{"class":52},[46,77949,77918],{"class":180},[46,77951,2490],{"class":52},[46,77953,2770],{"class":173},[46,77955,2744],{"class":56},[46,77957,77210],{"class":169},[46,77959,1152],{"class":56},[46,77961,77962],{"class":173},"'b'",[46,77964,77218],{"class":56},[46,77966,77221],{"class":2253},[46,77968,77969,77971,77973,77975,77977,77979,77981,77983,77985,77987,77989,77991,77994,77996],{"class":48,"line":11802},[46,77970,75718],{"class":56},[46,77972,60212],{"class":169},[46,77974,1152],{"class":56},[46,77976,2770],{"class":173},[46,77978,3150],{"class":52},[46,77980,77918],{"class":180},[46,77982,2490],{"class":52},[46,77984,2770],{"class":173},[46,77986,2744],{"class":56},[46,77988,77210],{"class":169},[46,77990,1152],{"class":56},[46,77992,77993],{"class":173},"'c'",[46,77995,77218],{"class":56},[46,77997,77221],{"class":2253},[46,77999,78000,78002,78004,78006,78008,78010,78012,78014,78016,78018,78021,78023],{"class":48,"line":11807},[46,78001,75718],{"class":56},[46,78003,60212],{"class":169},[46,78005,1152],{"class":56},[46,78007,2770],{"class":173},[46,78009,77918],{"class":180},[46,78011,2770],{"class":173},[46,78013,2744],{"class":56},[46,78015,77210],{"class":169},[46,78017,1152],{"class":56},[46,78019,78020],{"class":173},"'ab'",[46,78022,77218],{"class":56},[46,78024,77221],{"class":2253},[46,78026,78027,78029,78031,78033,78035,78037,78039,78041,78043,78045,78047,78049,78051,78053],{"class":48,"line":11816},[46,78028,75718],{"class":56},[46,78030,60212],{"class":169},[46,78032,1152],{"class":56},[46,78034,2770],{"class":173},[46,78036,3150],{"class":52},[46,78038,77918],{"class":180},[46,78040,2490],{"class":52},[46,78042,2770],{"class":173},[46,78044,2744],{"class":56},[46,78046,77210],{"class":169},[46,78048,1152],{"class":56},[46,78050,78020],{"class":173},[46,78052,77218],{"class":56},[46,78054,78055],{"class":2253},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[46,78057,78058,78060,78062,78064,78066,78068,78070,78073,78075,78077,78079,78081,78083,78085],{"class":48,"line":11821},[46,78059,75718],{"class":56},[46,78061,60212],{"class":169},[46,78063,1152],{"class":56},[46,78065,2770],{"class":173},[46,78067,3150],{"class":52},[46,78069,77918],{"class":180},[46,78071,78072],{"class":52},"{2}$",[46,78074,2770],{"class":173},[46,78076,2744],{"class":56},[46,78078,77210],{"class":169},[46,78080,1152],{"class":56},[46,78082,78020],{"class":173},[46,78084,77218],{"class":56},[46,78086,78087],{"class":2253},"\u002F\u002Ftrue   可以选两个\n",[46,78089,78090,78092,78094,78096,78098,78100,78103,78105,78107,78109,78111,78113,78116,78118],{"class":48,"line":11827},[46,78091,75718],{"class":56},[46,78093,60212],{"class":169},[46,78095,1152],{"class":56},[46,78097,2770],{"class":173},[46,78099,3150],{"class":52},[46,78101,78102],{"class":180},"[a-z]",[46,78104,2490],{"class":52},[46,78106,2770],{"class":173},[46,78108,2744],{"class":56},[46,78110,77210],{"class":169},[46,78112,1152],{"class":56},[46,78114,78115],{"class":173},"'p'",[46,78117,77274],{"class":56},[46,78119,78120],{"class":2253},"\u002F\u002Ftrue   依然只能选一个\n",[46,78122,78123,78125,78127,78129,78131,78133,78136,78138,78140,78142,78144,78146,78148,78150],{"class":48,"line":11848},[46,78124,75718],{"class":56},[46,78126,60212],{"class":169},[46,78128,1152],{"class":56},[46,78130,2770],{"class":173},[46,78132,3150],{"class":52},[46,78134,78135],{"class":180},"[A-Z]",[46,78137,2490],{"class":52},[46,78139,2770],{"class":173},[46,78141,2744],{"class":56},[46,78143,77210],{"class":169},[46,78145,1152],{"class":56},[46,78147,78115],{"class":173},[46,78149,77274],{"class":56},[46,78151,77344],{"class":2253},[46,78153,78154,78156,78158,78160,78162,78164,78166,78168,78170,78172,78174,78176,78179,78181],{"class":48,"line":11854},[46,78155,75718],{"class":56},[46,78157,60212],{"class":169},[46,78159,1152],{"class":56},[46,78161,2770],{"class":173},[46,78163,3150],{"class":52},[46,78165,78135],{"class":180},[46,78167,2490],{"class":52},[46,78169,2770],{"class":173},[46,78171,2744],{"class":56},[46,78173,77210],{"class":169},[46,78175,1152],{"class":56},[46,78177,78178],{"class":173},"'P'",[46,78180,77274],{"class":56},[46,78182,77221],{"class":2253},[46,78184,78185,78187,78189,78191,78193,78195,78198,78200,78202,78204,78206,78208,78211,78213],{"class":48,"line":11868},[46,78186,75718],{"class":56},[46,78188,60212],{"class":169},[46,78190,1152],{"class":56},[46,78192,2770],{"class":173},[46,78194,3150],{"class":52},[46,78196,78197],{"class":180},"[0-9]",[46,78199,2490],{"class":52},[46,78201,2770],{"class":173},[46,78203,2744],{"class":56},[46,78205,77210],{"class":169},[46,78207,1152],{"class":56},[46,78209,78210],{"class":173},"'0'",[46,78212,77274],{"class":56},[46,78214,77221],{"class":2253},[46,78216,78217,78219,78221,78223,78225,78227,78230,78232,78234,78236,78238,78240,78242,78244],{"class":48,"line":11874},[46,78218,75718],{"class":56},[46,78220,60212],{"class":169},[46,78222,1152],{"class":56},[46,78224,2770],{"class":173},[46,78226,3150],{"class":52},[46,78228,78229],{"class":180},"[a-zA-Z0-9]",[46,78231,2490],{"class":52},[46,78233,2770],{"class":173},[46,78235,2744],{"class":56},[46,78237,77210],{"class":169},[46,78239,1152],{"class":56},[46,78241,78115],{"class":173},[46,78243,77218],{"class":56},[46,78245,77221],{"class":2253},[46,78247,78248,78250,78252],{"class":48,"line":11901},[46,78249,54384],{"class":56},[46,78251,53780],{"class":1361},[46,78253,53274],{"class":56},[46,78255,78256,78258,78260],{"class":48,"line":11910},[46,78257,53752],{"class":56},[46,78259,53767],{"class":1361},[46,78261,53274],{"class":56},[46,78263,78264],{"class":48,"line":11916},[46,78265,616],{"emptyLinePlaceholder":615},[46,78267,78268,78270,78272],{"class":48,"line":11924},[46,78269,53752],{"class":56},[46,78271,52603],{"class":1361},[46,78273,53274],{"class":56},[23999,78275,78277],{"id":78276},"_3624-修饰符","3.6.2.4 修饰符",[19,78279,78280],{},[3514,78281],{"alt":41,"src":78282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[19,78284,78285],{},"replace是个方法，使用的时候一定不要忘记括号()",[19,78287,78288],{},[3514,78289],{"alt":41,"src":78290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[36,78292,78294],{"className":52601,"code":78293,"language":52603,"meta":41,"style":41},"\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",[43,78295,78296,78306,78320,78328,78342,78362,78374,78382,78390,78398,78430,78461,78466,78498,78509,78542,78551,78559,78567],{"__ignoreMap":41},[46,78297,78298,78300,78302,78304],{"class":48,"line":49},[46,78299,53265],{"class":56},[46,78301,53268],{"class":1361},[46,78303,53271],{"class":169},[46,78305,53274],{"class":56},[46,78307,78308,78310,78312,78314,78316,78318],{"class":48,"line":60},[46,78309,821],{"class":56},[46,78311,52603],{"class":1361},[46,78313,53283],{"class":169},[46,78315,79],{"class":56},[46,78317,53288],{"class":173},[46,78319,53274],{"class":56},[46,78321,78322,78324,78326],{"class":48,"line":200},[46,78323,821],{"class":56},[46,78325,53301],{"class":1361},[46,78327,53274],{"class":56},[46,78329,78330,78332,78334,78336,78338,78340],{"class":48,"line":211},[46,78331,54111],{"class":56},[46,78333,53311],{"class":1361},[46,78335,53314],{"class":169},[46,78337,79],{"class":56},[46,78339,53319],{"class":173},[46,78341,53274],{"class":56},[46,78343,78344,78346,78348,78350,78352,78354,78356,78358,78360],{"class":48,"line":222},[46,78345,54111],{"class":56},[46,78347,53311],{"class":1361},[46,78349,1364],{"class":169},[46,78351,79],{"class":56},[46,78353,53358],{"class":173},[46,78355,53338],{"class":169},[46,78357,79],{"class":56},[46,78359,53365],{"class":173},[46,78361,53274],{"class":56},[46,78363,78364,78366,78368,78370,78372],{"class":48,"line":636},[46,78365,54111],{"class":56},[46,78367,53374],{"class":1361},[46,78369,53377],{"class":56},[46,78371,53374],{"class":1361},[46,78373,53274],{"class":56},[46,78375,78376,78378,78380],{"class":48,"line":641},[46,78377,53752],{"class":56},[46,78379,53301],{"class":1361},[46,78381,53274],{"class":56},[46,78383,78384,78386,78388],{"class":48,"line":653},[46,78385,821],{"class":56},[46,78387,53767],{"class":1361},[46,78389,53274],{"class":56},[46,78391,78392,78394,78396],{"class":48,"line":659},[46,78393,54111],{"class":56},[46,78395,53780],{"class":1361},[46,78397,53274],{"class":56},[46,78399,78400,78402,78404,78406,78408,78410,78413,78415,78417,78419,78421,78423,78426,78428],{"class":48,"line":665},[46,78401,75718],{"class":56},[46,78403,60212],{"class":169},[46,78405,1152],{"class":56},[46,78407,2770],{"class":173},[46,78409,3150],{"class":52},[46,78411,78412],{"class":49945},"java",[46,78414,2490],{"class":52},[46,78416,2770],{"class":173},[46,78418,2744],{"class":56},[46,78420,77210],{"class":169},[46,78422,1152],{"class":56},[46,78424,78425],{"class":173},"'java'",[46,78427,77720],{"class":56},[46,78429,77221],{"class":2253},[46,78431,78432,78434,78436,78438,78440,78442,78444,78446,78448,78450,78452,78454,78457,78459],{"class":48,"line":670},[46,78433,75718],{"class":56},[46,78435,60212],{"class":169},[46,78437,1152],{"class":56},[46,78439,2770],{"class":173},[46,78441,3150],{"class":52},[46,78443,78412],{"class":49945},[46,78445,2490],{"class":52},[46,78447,2770],{"class":173},[46,78449,2744],{"class":56},[46,78451,77210],{"class":169},[46,78453,1152],{"class":56},[46,78455,78456],{"class":173},"'Java'",[46,78458,77720],{"class":56},[46,78460,77344],{"class":2253},[46,78462,78463],{"class":48,"line":676},[46,78464,78465],{"class":2253},"    \u002F\u002F 不区分大小写、\n",[46,78467,78468,78470,78472,78474,78476,78478,78480,78482,78484,78486,78488,78490,78492,78494,78496],{"class":48,"line":682},[46,78469,75718],{"class":56},[46,78471,60212],{"class":169},[46,78473,1152],{"class":56},[46,78475,2770],{"class":173},[46,78477,3150],{"class":52},[46,78479,78412],{"class":49945},[46,78481,2490],{"class":52},[46,78483,2770],{"class":173},[46,78485,2628],{"class":52},[46,78487,2744],{"class":56},[46,78489,77210],{"class":169},[46,78491,1152],{"class":56},[46,78493,78456],{"class":173},[46,78495,77720],{"class":56},[46,78497,77221],{"class":2253},[46,78499,78500,78502,78504,78506],{"class":48,"line":688},[46,78501,13225],{"class":52},[46,78503,75884],{"class":180},[46,78505,647],{"class":52},[46,78507,78508],{"class":173}," 'java是一门编程语言，学完java工资很高'\n",[46,78510,78511,78513,78516,78518,78521,78524,78526,78528,78530,78532,78535,78537,78540],{"class":48,"line":693},[46,78512,13225],{"class":52},[46,78514,78515],{"class":180}," result",[46,78517,647],{"class":52},[46,78519,78520],{"class":56}," str.",[46,78522,78523],{"class":169},"replace",[46,78525,1152],{"class":56},[46,78527,2770],{"class":173},[46,78529,78412],{"class":49945},[46,78531,2770],{"class":173},[46,78533,78534],{"class":52},"ig",[46,78536,448],{"class":56},[46,78538,78539],{"class":173},"'前端'",[46,78541,459],{"class":56},[46,78543,78544,78546,78548],{"class":48,"line":699},[46,78545,75718],{"class":56},[46,78547,60212],{"class":169},[46,78549,78550],{"class":56},"(result)\n",[46,78552,78553,78555,78557],{"class":48,"line":705},[46,78554,54384],{"class":56},[46,78556,53780],{"class":1361},[46,78558,53274],{"class":56},[46,78560,78561,78563,78565],{"class":48,"line":711},[46,78562,53752],{"class":56},[46,78564,53767],{"class":1361},[46,78566,53274],{"class":56},[46,78568,78569,78571,78573],{"class":48,"line":717},[46,78570,53752],{"class":56},[46,78572,52603],{"class":1361},[46,78574,53274],{"class":56},[2098,78576,78577],{},"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":41,"searchDepth":60,"depth":60,"links":78579},[78580,78590,78602,78619,78626,78634],{"id":55325,"depth":60,"text":55326,"children":78581},[78582,78583,78584,78585,78586,78587,78588,78589],{"id":55329,"depth":200,"text":55330},{"id":55362,"depth":200,"text":55363},{"id":55401,"depth":200,"text":55402},{"id":55559,"depth":200,"text":55560},{"id":55607,"depth":200,"text":55608},{"id":55744,"depth":200,"text":55745},{"id":56066,"depth":200,"text":56067},{"id":59054,"depth":200,"text":59055},{"id":59082,"depth":60,"text":59083,"children":78591},[78592,78593,78594,78595,78596,78597,78598,78599,78600,78601],{"id":59086,"depth":200,"text":59087},{"id":59109,"depth":200,"text":59110},{"id":60024,"depth":200,"text":60025},{"id":60714,"depth":200,"text":60715},{"id":60996,"depth":200,"text":60997},{"id":65157,"depth":200,"text":65158},{"id":65327,"depth":200,"text":65328},{"id":65455,"depth":200,"text":65456},{"id":65480,"depth":200,"text":65481},{"id":66869,"depth":200,"text":66870},{"id":68022,"depth":60,"text":68023,"children":78603},[78604,78605,78606,78607,78608,78609,78610,78611,78612,78613,78614,78615,78616,78617,78618],{"id":68026,"depth":200,"text":68027},{"id":68680,"depth":200,"text":68681},{"id":70375,"depth":200,"text":70376},{"id":70416,"depth":200,"text":70417},{"id":70458,"depth":200,"text":70459},{"id":70472,"depth":200,"text":70473},{"id":70521,"depth":200,"text":70522},{"id":70533,"depth":200,"text":70534},{"id":70548,"depth":200,"text":70549},{"id":70584,"depth":200,"text":70585},{"id":70665,"depth":200,"text":70666},{"id":70793,"depth":200,"text":70794},{"id":70805,"depth":200,"text":70806},{"id":70824,"depth":200,"text":70825},{"id":72935,"depth":200,"text":72936},{"id":72954,"depth":60,"text":72955,"children":78620},[78621,78622,78623,78624,78625],{"id":72975,"depth":200,"text":72976},{"id":72995,"depth":200,"text":72996},{"id":73044,"depth":200,"text":73045},{"id":73169,"depth":200,"text":73170},{"id":73350,"depth":200,"text":73351},{"id":73368,"depth":60,"text":73369,"children":78627},[78628,78629,78630,78631,78632,78633],{"id":73383,"depth":200,"text":73384},{"id":73442,"depth":200,"text":73443},{"id":73466,"depth":200,"text":73467},{"id":73786,"depth":200,"text":73787},{"id":73818,"depth":200,"text":73819},{"id":73841,"depth":200,"text":73842},{"id":76909,"depth":60,"text":76910,"children":78635},[78636,78637],{"id":76943,"depth":200,"text":76944},{"id":76982,"depth":200,"text":76983},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":55297,"description":25378},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":78644,"title":78645,"body":78646,"description":25378,"extension":2125,"meta":94781,"navigation":615,"path":94782,"seo":94783,"stem":94784,"__hash__":94785},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":78647,"toc":94717},[78648,78651,78654,78658,78662,78667,78672,78683,78687,78692,78695,78699,78702,78707,78711,78715,78718,78723,78726,78730,78733,78741,78744,78748,78753,78758,78761,78765,78770,78775,78778,78782,78787,78790,78795,78798,78803,78806,78811,78816,78819,78822,78826,78831,78836,78839,78843,78847,78850,78853,78856,78860,78864,78869,78874,78877,78881,78886,78891,78894,78897,78900,78903,78906,78909,78912,78915,78918,78923,78927,78932,78937,78940,78943,78946,78949,78952,78955,78958,78961,78965,78969,78972,78975,78978,78983,78985,78988,78991,78994,78997,79000,79003,79006,79009,79012,79015,79018,79021,79024,79029,79034,79039,79042,79046,79049,79054,79058,79060,79071,79076,79177,79180,79183,79186,79189,79192,79195,79198,79201,79203,79206,79209,79212,79215,79218,79220,79223,79226,79229,79232,79235,79238,79240,79243,79245,79247,79250,79254,79258,79261,79264,79267,79270,79273,79276,79279,79282,79285,79290,79410,79413,79416,79421,79424,79427,79430,79433,79438,79441,79444,79447,79450,79455,79458,79558,79623,79697,79701,79704,79707,79711,79714,79728,79757,79760,79763,79766,79769,79772,79775,79778,79780,79783,79786,79789,79792,79796,79801,79805,79810,79885,79888,80071,80074,80077,80080,80083,80086,80088,80091,80094,80097,80100,80103,80106,80108,80112,80115,80120,80123,80126,80129,80132,80134,80139,80142,80145,80148,80151,80153,80158,80161,80164,80166,80168,80171,80175,80178,80181,80186,80189,80192,80195,80245,80250,80254,80259,80262,80331,80334,80343,80347,80352,80355,80358,80366,80369,80386,82187,82191,82195,82200,82203,82207,82213,82219,82371,82376,82381,82384,82387,82390,82393,82396,82399,82402,82405,82408,82411,82414,82417,82422,82426,82429,82440,82444,82449,82452,82455,82458,82461,82464,82466,82469,82472,82475,82478,82480,82497,82500,82504,82507,82512,82517,82520,82523,82527,82530,82533,82542,82545,82549,82552,82557,82562,82629,82633,82636,82639,82644,82649,82735,82740,82744,82747,82750,82765,82768,82773,82777,82782,82891,82894,82905,83055,83059,83064,83173,83177,83182,83187,83192,83195,83202,83222,83258,83422,83427,83430,83435,83442,83445,83448,83451,83510,83566,83622,83626,83631,83946,83949,83953,83956,83961,84070,84075,84079,84084,84088,84159,84163,84165,84168,84171,84209,84485,84489,84505,84571,84605,84609,84612,84617,84646,84653,84662,84667,84682,84687,84696,84699,84836,84840,84902,84906,84911,85156,85160,85165,85168,85171,85174,85177,85181,85186,86767,86771,86775,86781,86784,86789,86793,86796,86801,86804,86815,86819,86824,86828,86833,86838,86841,86846,86850,86854,86857,86862,86867,86870,86873,86876,86998,87003,87105,87108,87111,87115,87120,87292,87297,87301,87304,87309,87375,87380,87383,87514,87517,87522,87525,87528,87619,87624,87627,87630,87633,87636,87641,87646,87649,87654,87659,87664,87668,87671,87674,87679,87684,87689,87694,87748,87751,87754,87759,87762,87765,87770,87775,87780,87784,87789,87803,87808,87811,87816,87820,87825,87830,87835,87840,87845,87850,87855,87860,87863,87867,87872,87875,87878,87881,87886,87891,87894,87897,87901,87904,87907,87912,87917,87922,87927,87930,87935,87940,88001,88006,88009,88014,89255,89260,89264,89268,89273,89276,89281,89286,89289,89294,89296,89301,89305,89308,89311,89322,89326,89331,89336,89391,89396,89401,89406,89617,89622,89626,89631,89634,89636,89639,89642,90089,90094,90101,90107,90110,90113,90377,90382,90386,90651,90656,90660,90665,90670,90675,90680,91011,91014,91019,91024,91027,91031,91035,91040,91045,91050,91055,91060,91065,91069,91072,91077,91082,91085,91159,91164,91169,91174,91176,91179,91549,91554,91559,91564,91567,91570,91672,91677,91682,91785,91789,91794,91798,91802,91807,91812,91815,91820,91823,91826,92219,92224,92227,92230,92233,92236,92756,92760,92765,92770,92775,92778,92783,92786,92789,93171,93176,93178,93180,93183,93186,93698,93702,93763,93766,93769,93772,93776,93779,93784,93789,94714],[10,78649,78645],{"id":78650},"_4js进阶",[19,78652,78653],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,78655,78657],{"id":78656},"_41-作用域","4.1 作用域",[479,78659,78661],{"id":78660},"_411-局部作用域","4.1.1 局部作用域",[19,78663,78664],{},[3514,78665],{"alt":41,"src":78666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[19,78668,78669],{},[3514,78670],{"alt":41,"src":78671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[3191,78673,78674,78677,78680],{},[26,78675,78676],{},"函数作用域在函数内部",[26,78678,78679],{},"块级作用域在{}",[26,78681,78682],{},"对象的那个{}不是作用域，不是块作用域",[479,78684,78686],{"id":78685},"_412-全局作用域","4.1.2 全局作用域",[19,78688,78689],{},[3514,78690],{"alt":41,"src":78691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[19,78693,78694],{},"window.a=10不要这样写",[479,78696,78698],{"id":78697},"_413-作用域链","4.1.3 作用域链",[19,78700,78701],{},"变量查找机制",[19,78703,78704],{},[3514,78705],{"alt":41,"src":78706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,78708,78710],{"id":78709},"_42-垃圾回收机制","4.2 垃圾回收机制",[479,78712,78714],{"id":78713},"_421-大体介绍","4.2.1 大体介绍",[19,78716,78717],{},"垃圾回收机制(Garbage Collection) 简称 GC",[19,78719,78720],{},[3514,78721],{"alt":41,"src":78722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[19,78724,78725],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[479,78727,78729],{"id":78728},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[19,78731,78732],{},"堆栈空间分配区别：",[23,78734,78735,78738],{},[26,78736,78737],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[26,78739,78740],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[19,78742,78743],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[23999,78745,78747],{"id":78746},"_4221-引用计数","4.2.2.1 引用计数",[19,78749,78750],{},[3514,78751],{"alt":41,"src":78752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[19,78754,78755],{},[3514,78756],{"alt":41,"src":78757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[19,78759,78760],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[23999,78762,78764],{"id":78763},"_4222-标记清除法","4.2.2.2 标记清除法",[19,78766,78767],{},[3514,78768],{"alt":41,"src":78769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[19,78771,78772],{},[3514,78773],{"alt":41,"src":78774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[19,78776,78777],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,78779,78781],{"id":78780},"_43-闭包","4.3 闭包",[19,78783,78784],{},[3514,78785],{"alt":41,"src":78786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[19,78788,78789],{},"闭包：内层函数+外层函数的变量",[19,78791,78792],{},[3514,78793],{"alt":41,"src":78794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[19,78796,78797],{},"closure就是闭包",[19,78799,78800],{},[3514,78801],{"alt":41,"src":78802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[19,78804,78805],{},"内层函数必须包含外层函数的变量才是闭包",[19,78807,78808],{},[3514,78809],{"alt":41,"src":78810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[19,78812,78813],{},[3514,78814],{"alt":41,"src":78815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[19,78817,78818],{},"闭包可能会引起内存泄漏",[19,78820,78821],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,78823,78825],{"id":78824},"_44-变量提升","4.4 变量提升",[19,78827,78828],{},[3514,78829],{"alt":41,"src":78830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[19,78832,78833],{},[3514,78834],{"alt":41,"src":78835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[19,78837,78838],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,78840,78842],{"id":78841},"_45-函数进阶","4.5 函数进阶",[479,78844,78846],{"id":78845},"_451-函数提升","4.5.1 函数提升",[19,78848,78849],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[19,78851,78852],{},"只提升函数声明，不提升函数调用",[53780,78854,78855],{},"\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",[479,78857,78859],{"id":78858},"_452-函数参数","4.5.2 函数参数",[23999,78861,78863],{"id":78862},"_4521-动态参数","4.5.2.1 动态参数",[19,78865,78866],{},[3514,78867],{"alt":41,"src":78868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[19,78870,78871],{},[3514,78872],{"alt":41,"src":78873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[19,78875,78876],{},"箭头函数里边没有arguments",[23999,78878,78880],{"id":78879},"_4522-剩余参数","4.5.2.2 剩余参数",[19,78882,78883],{},[3514,78884],{"alt":41,"src":78885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[19,78887,78888],{},[3514,78889],{"alt":41,"src":78890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[19,78892,78893],{},"剩余参数使用的时候不需要写...",[19,78895,78896],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[19,78898,78899],{},"  function getSum(a,b,...arr) {",[19,78901,78902],{},"  console.log(11)",[19,78904,78905],{},"  }",[19,78907,78908],{},"  getSum(1,2,3,4)",[19,78910,78911],{},"  将1传给a，2传给b，剩下的传给剩余参数",[19,78913,78914],{},"  getSum(1,2)",[19,78916,78917],{},"  将1传给a，2传给b，剩余参数为一个空数组",[19,78919,78920],{},[3514,78921],{"alt":41,"src":78922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[23999,78924,78926],{"id":78925},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[19,78928,78929],{},[3514,78930],{"alt":41,"src":78931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[19,78933,78934],{},[3514,78935],{"alt":41,"src":78936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[19,78938,78939],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[19,78941,78942],{},"展开运算符可以用于数组之间的合并：",[19,78944,78945],{},"const arr1 = [1, 2, 3]",[19,78947,78948],{},"const arr2 = [3, 4, 5]",[19,78950,78951],{},"const arr = [...arr1, ...arr2]",[19,78953,78954],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[19,78956,78957],{},"剩余参数：函数参数使用，得到真数组",[19,78959,78960],{},"展开运算符：数组中使用，数组展开",[479,78962,78964],{"id":78963},"_453-箭头函数","4.5.3 箭头函数",[23999,78966,78968],{"id":78967},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[19,78970,78971],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[19,78973,78974],{},"它不是万能的！！！",[19,78976,78977],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[19,78979,78980],{},[3514,78981],{"alt":41,"src":78982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[19,78984,2226],{},[19,78986,78987],{},"① 只有一个形参的时候，可以省略小括号：",[19,78989,78990],{},"const fn=x=>{console.log(x)}",[19,78992,78993],{},"② 只有一行代码时可以省略大括号：",[19,78995,78996],{},"const fn=x=>console.log(11)",[19,78998,78999],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[19,79001,79002],{},"const fn=x=>x+x",[19,79004,79005],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[19,79007,79008],{},"⑤ 阻止表单默认提交：",[19,79010,79011],{},"const form = document.querySelector('form')",[19,79013,79014],{},"form.addEventListener('click', ev => ev.preventDefault())",[19,79016,79017],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[19,79019,79020],{},"const fn=uname=>({uname:uname})",[19,79022,79023],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[19,79025,79026],{},[3514,79027],{"alt":41,"src":79028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[19,79030,79031],{},[3514,79032],{"alt":41,"src":79033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[19,79035,79036],{},[3514,79037],{"alt":41,"src":79038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[19,79040,79041],{},"一定不要忘记用()，有()就理解为自带return",[23999,79043,79045],{"id":79044},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[19,79047,79048],{},"箭头函数是没有动态参数的arguments",[19,79050,79051],{},[3514,79052],{"alt":41,"src":79053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[23999,79055,79057],{"id":79056},"_4533-箭头函数this","4.5.3.3 箭头函数this",[19,79059,13336],{},[23,79061,79062,79065,79068],{},[26,79063,79064],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[26,79066,79067],{},"事件回调函数使用箭头函数时，this 为全局的 window",[26,79069,79070],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[19,79072,79073],{},[3514,79074],{"alt":41,"src":79075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[36,79077,79079],{"className":1350,"code":79078,"language":1352,"meta":41,"style":41},"  \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",[43,79080,79081,79089,79094,79099,79104,79109,79114,79118,79123,79127,79131,79136,79141,79146,79150,79154,79159,79164,79169],{"__ignoreMap":41},[46,79082,79083,79085,79087],{"class":48,"line":49},[46,79084,54111],{"class":56},[46,79086,53780],{"class":1361},[46,79088,53274],{"class":56},[46,79090,79091],{"class":48,"line":60},[46,79092,79093],{"class":56},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[46,79095,79096],{"class":48,"line":200},[46,79097,79098],{"class":56},"    console.log(this) \u002F\u002F指向window\n",[46,79100,79101],{"class":48,"line":211},[46,79102,79103],{"class":56},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[46,79105,79106],{"class":48,"line":222},[46,79107,79108],{"class":56},"    function fn() {\n",[46,79110,79111],{"class":48,"line":636},[46,79112,79113],{"class":56},"      console.log(this)  \u002F\u002F指向window\n",[46,79115,79116],{"class":48,"line":641},[46,79117,4217],{"class":56},[46,79119,79120],{"class":48,"line":653},[46,79121,79122],{"class":56},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[46,79124,79125],{"class":48,"line":659},[46,79126,616],{"emptyLinePlaceholder":615},[46,79128,79129],{"class":48,"line":665},[46,79130,73488],{"class":56},[46,79132,79133],{"class":48,"line":670},[46,79134,79135],{"class":56},"      name: 'andy',\n",[46,79137,79138],{"class":48,"line":676},[46,79139,79140],{"class":56},"      sayHai: function () {\n",[46,79142,79143],{"class":48,"line":682},[46,79144,79145],{"class":56},"        console.log(this)\n",[46,79147,79148],{"class":48,"line":688},[46,79149,54365],{"class":56},[46,79151,79152],{"class":48,"line":693},[46,79153,4217],{"class":56},[46,79155,79156],{"class":48,"line":699},[46,79157,79158],{"class":56},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[46,79160,79161],{"class":48,"line":705},[46,79162,79163],{"class":56},"    \u002F\u002F 2.箭头函数的this\n",[46,79165,79166],{"class":48,"line":711},[46,79167,79168],{"class":56},"    const fn = () => console.log(this)\n",[46,79170,79171,79173,79175],{"class":48,"line":717},[46,79172,54384],{"class":56},[46,79174,53780],{"class":1361},[46,79176,53274],{"class":56},[19,79178,79179],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[19,79181,79182],{},"const fn = () => console.log(this)",[19,79184,79185],{},"fn() \u002F\u002F指向window",[19,79187,79188],{},"\u002F\u002F 3.对象方法箭头函数 this",[19,79190,79191],{},"①",[19,79193,79194],{},"const obj = {",[19,79196,79197],{},"uname: 'pink老师',",[19,79199,79200],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[19,79202,3131],{},[19,79204,79205],{},"调用对象里边的函数",[19,79207,79208],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[19,79210,79211],{},"obj.sayHai()",[19,79213,79214],{},"②",[19,79216,79217],{},"const obj1 = {",[19,79219,79197],{},[19,79221,79222],{},"sayHai: function () {",[19,79224,79225],{},"let i = 10",[19,79227,79228],{},"const count = () => {",[19,79230,79231],{},"console.log(this)",[19,79233,79234],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[19,79236,79237],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[19,79239,3131],{},[19,79241,79242],{},"count()",[19,79244,3131],{},[19,79246,3131],{},[19,79248,79249],{},"obj1.sayHai()",[14,79251,79253],{"id":79252},"_46-解构赋值","4.6 解构赋值",[479,79255,79257],{"id":79256},"_461-数组解构","4.6.1 数组解构",[19,79259,79260],{},"以前要是使用数组中的值的话：",[19,79262,79263],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[19,79265,79266],{},"const arr=[100,60,80]",[19,79268,79269],{},"const max=arr[0]",[19,79271,79272],{},"const min=arr[1]",[19,79274,79275],{},"const avg=arr[2]",[19,79277,79278],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[19,79280,79281],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[19,79283,79284],{},"这个写法就类似于上边的那种用很多const的方法",[19,79286,79287],{},[3514,79288],{"alt":41,"src":79289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[36,79291,79293],{"className":52601,"code":79292,"language":52603,"meta":41,"style":41},"①变量之间交换值:\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",[43,79294,79295,79300,79305,79310,79315,79320,79324,79328,79333,79337,79342,79347,79351,79356,79361,79372,79382,79387,79392,79397,79401,79405],{"__ignoreMap":41},[46,79296,79297],{"class":48,"line":49},[46,79298,79299],{"class":56},"①变量之间交换值:\n",[46,79301,79302],{"class":48,"line":60},[46,79303,79304],{"class":56},"let a=1\n",[46,79306,79307],{"class":48,"line":200},[46,79308,79309],{"class":56},"let b=2;\n",[46,79311,79312],{"class":48,"line":211},[46,79313,79314],{"class":56},"必须加这行代码，不然就会报错\n",[46,79316,79317],{"class":48,"line":222},[46,79318,79319],{"class":56},"[b,a]=[a,b]\n",[46,79321,79322],{"class":48,"line":636},[46,79323,616],{"emptyLinePlaceholder":615},[46,79325,79326],{"class":48,"line":641},[46,79327,616],{"emptyLinePlaceholder":615},[46,79329,79330],{"class":48,"line":653},[46,79331,79332],{"class":56},"可以写成下面的方式：\n",[46,79334,79335],{"class":48,"line":659},[46,79336,79304],{"class":56},[46,79338,79339],{"class":48,"line":665},[46,79340,79341],{"class":56},"let b=2\n",[46,79343,79344],{"class":48,"line":670},[46,79345,79346],{"class":56},";[b,a]=[a,b]\n",[46,79348,79349],{"class":48,"line":676},[46,79350,616],{"emptyLinePlaceholder":615},[46,79352,79353],{"class":48,"line":682},[46,79354,79355],{"class":56},"②排序\n",[46,79357,79358],{"class":48,"line":688},[46,79359,79360],{"class":56},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[46,79362,79363,79366,79369],{"class":48,"line":693},[46,79364,79365],{"class":56},"for (let i = 0; i ",[46,79367,821],{"class":79368},"s7hpK",[46,79370,79371],{"class":56}," arr1.length; i++) {\n",[46,79373,79374,79377,79379],{"class":48,"line":699},[46,79375,79376],{"class":56},"   for (let j = 0; j ",[46,79378,821],{"class":79368},[46,79380,79381],{"class":56}," arr1.length - 1; j++) {\n",[46,79383,79384],{"class":48,"line":705},[46,79385,79386],{"class":56},"      if (arr1[j] > arr1[j + 1]) {\n",[46,79388,79389],{"class":48,"line":711},[46,79390,79391],{"class":56},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[46,79393,79394],{"class":48,"line":717},[46,79395,79396],{"class":56},"       }\n",[46,79398,79399],{"class":48,"line":723},[46,79400,6326],{"class":56},[46,79402,79403],{"class":48,"line":729},[46,79404,3616],{"class":56},[46,79406,79407],{"class":48,"line":735},[46,79408,79409],{"class":56},"console.log(arr1)\n",[19,79411,79412],{},"数组解构的细节：",[19,79414,79415],{},"①变量多，单元值少",[19,79417,79418],{},[3514,79419],{"alt":41,"src":79420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[19,79422,79423],{},"防止出现undefined的方法：",[19,79425,79426],{},"const [a=0,b=0] =[1]",[19,79428,79429],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[19,79431,79432],{},"②变量少，单元值多",[19,79434,79435],{},[3514,79436],{"alt":41,"src":79437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[19,79439,79440],{},"此时可以使用剩余参数来接收多余的值",[19,79442,79443],{},"const [a,b,...c]=[1,2,3,4]",[19,79445,79446],{},"console.log(c) 输出[3,4]",[19,79448,79449],{},"③可以按需导入，忽略某些返回值",[19,79451,79452],{},[3514,79453],{"alt":41,"src":79454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[19,79456,79457],{},"④支持多维数组的结构",[36,79459,79463],{"className":79460,"code":79461,"language":79462,"meta":41,"style":41},"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",[43,79464,79465,79493,79509,79524,79539],{"__ignoreMap":41},[46,79466,79467,79469,79471,79473,79475,79477,79479,79481,79484,79486,79488,79490],{"class":48,"line":49},[46,79468,8805],{"class":52},[46,79470,53800],{"class":56},[46,79472,79],{"class":52},[46,79474,54193],{"class":56},[46,79476,2405],{"class":180},[46,79478,448],{"class":56},[46,79480,2272],{"class":180},[46,79482,79483],{"class":56},", [",[46,79485,2266],{"class":180},[46,79487,448],{"class":56},[46,79489,2481],{"class":180},[46,79491,79492],{"class":56},"]]\n",[46,79494,79495,79498,79500,79502,79504,79506],{"class":48,"line":60},[46,79496,79497],{"class":56},"console.",[46,79499,60212],{"class":169},[46,79501,5869],{"class":56},[46,79503,2379],{"class":180},[46,79505,6233],{"class":56},[46,79507,79508],{"class":2253},"  \u002F\u002F1\n",[46,79510,79511,79513,79515,79517,79519,79521],{"class":48,"line":200},[46,79512,79497],{"class":56},[46,79514,60212],{"class":169},[46,79516,5869],{"class":56},[46,79518,2405],{"class":180},[46,79520,6233],{"class":56},[46,79522,79523],{"class":2253},"  \u002F\u002F2\n",[46,79525,79526,79528,79530,79532,79534,79536],{"class":48,"line":211},[46,79527,79497],{"class":56},[46,79529,60212],{"class":169},[46,79531,5869],{"class":56},[46,79533,2272],{"class":180},[46,79535,6233],{"class":56},[46,79537,79538],{"class":2253},"  \u002F\u002F[3,4]\n",[46,79540,79541,79543,79545,79547,79549,79551,79553,79555],{"class":48,"line":222},[46,79542,79497],{"class":56},[46,79544,60212],{"class":169},[46,79546,5869],{"class":56},[46,79548,2272],{"class":180},[46,79550,6917],{"class":56},[46,79552,2379],{"class":180},[46,79554,6233],{"class":56},[46,79556,79557],{"class":2253},"  \u002F\u002F3\n",[36,79559,79561],{"className":79460,"code":79560,"language":79462,"meta":41,"style":41},"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",[43,79562,79563,79590,79601,79612],{"__ignoreMap":41},[46,79564,79565,79567,79570,79572,79574,79576,79578,79580,79582,79584,79586,79588],{"class":48,"line":49},[46,79566,8805],{"class":52},[46,79568,79569],{"class":56}," [a, b, c] ",[46,79571,79],{"class":52},[46,79573,54193],{"class":56},[46,79575,2405],{"class":180},[46,79577,448],{"class":56},[46,79579,2272],{"class":180},[46,79581,79483],{"class":56},[46,79583,2266],{"class":180},[46,79585,448],{"class":56},[46,79587,2481],{"class":180},[46,79589,79492],{"class":56},[46,79591,79592,79594,79596,79599],{"class":48,"line":60},[46,79593,79497],{"class":56},[46,79595,60212],{"class":169},[46,79597,79598],{"class":56},"(a)",[46,79600,79508],{"class":2253},[46,79602,79603,79605,79607,79610],{"class":48,"line":200},[46,79604,79497],{"class":56},[46,79606,60212],{"class":169},[46,79608,79609],{"class":56},"(b)",[46,79611,79523],{"class":2253},[46,79613,79614,79616,79618,79621],{"class":48,"line":211},[46,79615,79497],{"class":56},[46,79617,60212],{"class":169},[46,79619,79620],{"class":56},"(c)",[46,79622,79538],{"class":2253},[36,79624,79626],{"className":79460,"code":79625,"language":79462,"meta":41,"style":41},"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",[43,79627,79628,79655,79665,79675,79685],{"__ignoreMap":41},[46,79629,79630,79632,79635,79637,79639,79641,79643,79645,79647,79649,79651,79653],{"class":48,"line":49},[46,79631,8805],{"class":52},[46,79633,79634],{"class":56}," [a, b, [c, d]] ",[46,79636,79],{"class":52},[46,79638,54193],{"class":56},[46,79640,2405],{"class":180},[46,79642,448],{"class":56},[46,79644,2272],{"class":180},[46,79646,79483],{"class":56},[46,79648,2266],{"class":180},[46,79650,448],{"class":56},[46,79652,2481],{"class":180},[46,79654,79492],{"class":56},[46,79656,79657,79659,79661,79663],{"class":48,"line":60},[46,79658,79497],{"class":56},[46,79660,60212],{"class":169},[46,79662,79598],{"class":56},[46,79664,79508],{"class":2253},[46,79666,79667,79669,79671,79673],{"class":48,"line":200},[46,79668,79497],{"class":56},[46,79670,60212],{"class":169},[46,79672,79609],{"class":56},[46,79674,79523],{"class":2253},[46,79676,79677,79679,79681,79683],{"class":48,"line":211},[46,79678,79497],{"class":56},[46,79680,60212],{"class":169},[46,79682,79620],{"class":56},[46,79684,79557],{"class":2253},[46,79686,79687,79689,79691,79694],{"class":48,"line":222},[46,79688,79497],{"class":56},[46,79690,60212],{"class":169},[46,79692,79693],{"class":56},"(d)",[46,79695,79696],{"class":2253},"  \u002F\u002F4\n",[479,79698,79700],{"id":79699},"_462-对象解构","4.6.2 对象解构",[19,79702,79703],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[19,79705,79706],{},"用的非常非常多！！！！！！",[23999,79708,79710],{"id":79709},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[19,79712,79713],{},"基本语法：",[23,79715,79716,79719,79722,79725],{},[26,79717,79718],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[26,79720,79721],{},"对象属性的值将被赋值给与属性名相同的变量",[26,79723,79724],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[26,79726,79727],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[36,79729,79731],{"className":52601,"code":79730,"language":52603,"meta":41,"style":41},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[43,79732,79733,79738,79743,79748,79752],{"__ignoreMap":41},[46,79734,79735],{"class":48,"line":49},[46,79736,79737],{"class":56},"const obj = {\n",[46,79739,79740],{"class":48,"line":60},[46,79741,79742],{"class":56},"   uname: 'pink老师',\n",[46,79744,79745],{"class":48,"line":200},[46,79746,79747],{"class":56},"   age: 18,\n",[46,79749,79750],{"class":48,"line":211},[46,79751,3616],{"class":56},[46,79753,79754],{"class":48,"line":222},[46,79755,79756],{"class":56},"const { uname, age } = obj\n",[19,79758,79759],{},"上方代码这样写等价于：",[19,79761,79762],{},"const uname等价于obj.uname",[19,79764,79765],{},"变量名可以重新改名：",[19,79767,79768],{},"const uname='red老师'",[19,79770,79771],{},"const user={",[19,79773,79774],{},"  uname:'pink老师',",[19,79776,79777],{},"  age:18",[19,79779,3131],{},[19,79781,79782],{},"const {uname,age}=user",[19,79784,79785],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[19,79787,79788],{},"const {旧变量名：新变量名}=对象",[19,79790,79791],{},"const {uname:username,age}=user",[23999,79793,79795],{"id":79794},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[19,79797,79798],{},[3514,79799],{"alt":41,"src":79800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[23999,79802,79804],{"id":79803},"_4623-多级对象解构","4.6.2.3 多级对象解构",[19,79806,79807],{},[3514,79808],{"alt":41,"src":79809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[36,79811,79813],{"className":1350,"code":79812,"language":1352,"meta":41,"style":41},"  \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",[43,79814,79815,79823,79828,79833,79838,79843,79848,79853,79858,79863,79867,79872,79877],{"__ignoreMap":41},[46,79816,79817,79819,79821],{"class":48,"line":49},[46,79818,54111],{"class":56},[46,79820,53780],{"class":1361},[46,79822,53274],{"class":56},[46,79824,79825],{"class":48,"line":60},[46,79826,79827],{"class":56},"    const pig = {\n",[46,79829,79830],{"class":48,"line":200},[46,79831,79832],{"class":56},"      name: '佩奇',\n",[46,79834,79835],{"class":48,"line":211},[46,79836,79837],{"class":56},"      family: {\n",[46,79839,79840],{"class":48,"line":222},[46,79841,79842],{"class":56},"        mother: '猪妈妈',\n",[46,79844,79845],{"class":48,"line":636},[46,79846,79847],{"class":56},"        father: '猪爸爸',\n",[46,79849,79850],{"class":48,"line":641},[46,79851,79852],{"class":56},"        sister: '乔治'\n",[46,79854,79855],{"class":48,"line":653},[46,79856,79857],{"class":56},"      },\n",[46,79859,79860],{"class":48,"line":659},[46,79861,79862],{"class":56},"      age: 6\n",[46,79864,79865],{"class":48,"line":665},[46,79866,4217],{"class":56},[46,79868,79869],{"class":48,"line":670},[46,79870,79871],{"class":56},"    \u002F\u002F 多级对象解构\n",[46,79873,79874],{"class":48,"line":676},[46,79875,79876],{"class":56},"    const { name, family: { mother, father, sister }, age } = pig\n",[46,79878,79879,79881,79883],{"class":48,"line":682},[46,79880,54384],{"class":56},[46,79882,53780],{"class":1361},[46,79884,53274],{"class":56},[19,79886,79887],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[36,79889,79892],{"className":79890,"code":79891,"language":78412,"meta":41,"style":41},"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",[43,79893,79894,79899,79910,79922,79934,79943,79947,79958,79970,79980,79985,79989,79999,80010,80019,80023,80027,80038,80049,80058,80062,80067],{"__ignoreMap":41},[46,79895,79896],{"class":48,"line":49},[46,79897,79898],{"class":2253},"    \u002F\u002F 这是后台传递过来的数据\n",[46,79900,79901,79903,79906,79908],{"class":48,"line":60},[46,79902,13225],{"class":52},[46,79904,79905],{"class":56}," msg ",[46,79907,79],{"class":52},[46,79909,17573],{"class":56},[46,79911,79912,79915,79917,79920],{"class":48,"line":200},[46,79913,79914],{"class":173},"      \"code\"",[46,79916,3045],{"class":52},[46,79918,79919],{"class":180}," 200",[46,79921,33443],{"class":56},[46,79923,79924,79927,79929,79932],{"class":48,"line":211},[46,79925,79926],{"class":173},"      \"msg\"",[46,79928,3045],{"class":52},[46,79930,79931],{"class":173}," \"获取新闻列表成功\"",[46,79933,33443],{"class":56},[46,79935,79936,79939,79941],{"class":48,"line":222},[46,79937,79938],{"class":173},"      \"data\"",[46,79940,3045],{"class":52},[46,79942,57412],{"class":56},[46,79944,79945],{"class":48,"line":636},[46,79946,4538],{"class":56},[46,79948,79949,79952,79954,79956],{"class":48,"line":641},[46,79950,79951],{"class":173},"          \"id\"",[46,79953,3045],{"class":52},[46,79955,27110],{"class":180},[46,79957,33443],{"class":56},[46,79959,79960,79963,79965,79968],{"class":48,"line":653},[46,79961,79962],{"class":173},"          \"title\"",[46,79964,3045],{"class":52},[46,79966,79967],{"class":173}," \"5G商用自己，三大运用商收入下降\"",[46,79969,33443],{"class":56},[46,79971,79972,79975,79977],{"class":48,"line":659},[46,79973,79974],{"class":173},"          \"count\"",[46,79976,3045],{"class":52},[46,79978,79979],{"class":180}," 58\n",[46,79981,79982],{"class":48,"line":665},[46,79983,79984],{"class":56},"        },\n",[46,79986,79987],{"class":48,"line":670},[46,79988,4538],{"class":56},[46,79990,79991,79993,79995,79997],{"class":48,"line":676},[46,79992,79951],{"class":173},[46,79994,3045],{"class":52},[46,79996,16757],{"class":180},[46,79998,33443],{"class":56},[46,80000,80001,80003,80005,80008],{"class":48,"line":682},[46,80002,79962],{"class":173},[46,80004,3045],{"class":52},[46,80006,80007],{"class":173}," \"国际媒体头条速览\"",[46,80009,33443],{"class":56},[46,80011,80012,80014,80016],{"class":48,"line":688},[46,80013,79974],{"class":173},[46,80015,3045],{"class":52},[46,80017,80018],{"class":180}," 56\n",[46,80020,80021],{"class":48,"line":693},[46,80022,79984],{"class":56},[46,80024,80025],{"class":48,"line":699},[46,80026,4538],{"class":56},[46,80028,80029,80031,80033,80036],{"class":48,"line":705},[46,80030,79951],{"class":173},[46,80032,3045],{"class":52},[46,80034,80035],{"class":180}," 3",[46,80037,33443],{"class":56},[46,80039,80040,80042,80044,80047],{"class":48,"line":711},[46,80041,79962],{"class":173},[46,80043,3045],{"class":52},[46,80045,80046],{"class":173}," \"乌克兰和俄罗斯持续冲突\"",[46,80048,33443],{"class":56},[46,80050,80051,80053,80055],{"class":48,"line":717},[46,80052,79974],{"class":173},[46,80054,3045],{"class":52},[46,80056,80057],{"class":180}," 1669\n",[46,80059,80060],{"class":48,"line":723},[46,80061,79984],{"class":56},[46,80063,80064],{"class":48,"line":729},[46,80065,80066],{"class":56},"      ]\n",[46,80068,80069],{"class":48,"line":735},[46,80070,4217],{"class":56},[19,80072,80073],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[19,80075,80076],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[19,80078,80079],{},"\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,80081,80082],{},"function({data}) {",[19,80084,80085],{},"console.log(data)",[19,80087,3131],{},[19,80089,80090],{},"render(msg)",[19,80092,80093],{},"实参传递给形参的时候解构了",[19,80095,80096],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[19,80098,80099],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[19,80101,80102],{},"function render({data:mydata}) {",[19,80104,80105],{},"  console.log(data)",[19,80107,3131],{},[479,80109,80111],{"id":80110},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[19,80113,80114],{},"有两种情况：一个是数组结构，一个是立即执行函数",[23,80116,80117],{},[26,80118,80119],{},"如果对一个数组进行遍历，有两种方式：",[19,80121,80122],{},"①法1",[19,80124,80125],{},"const arr=[1,2,3]",[19,80127,80128],{},"arr.map(function(item,index) {",[19,80130,80131],{},"  console.log(item)",[19,80133,54431],{},[19,80135,80136],{},[3514,80137],{"alt":41,"src":80138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[19,80140,80141],{},"②法2",[19,80143,80144],{},"const str='pink'",[19,80146,80147],{},"[1,2,3].map(function(item,index) {",[19,80149,80150],{},"console.log(item)",[19,80152,54431],{},[19,80154,80155],{},[3514,80156],{"alt":41,"src":80157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[19,80159,80160],{},"此时会报错",[19,80162,80163],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[19,80165,80150],{},[19,80167,54431],{},[19,80169,80170],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,80172,80174],{"id":80173},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[19,80176,80177],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[19,80179,80180],{},"可以理解为加强版的for循环",[19,80182,80183],{},[3514,80184],{"alt":41,"src":80185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[19,80187,80188],{},"里边不写return，不返回数组，只遍历不返回",[19,80190,80191],{},"map是返回数组",[19,80193,80194],{},"forEach主要用于遍历数组对象",[36,80196,80198],{"className":1350,"code":80197,"language":1352,"meta":41,"style":41},"  \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",[43,80199,80200,80208,80213,80218,80223,80228,80232,80237],{"__ignoreMap":41},[46,80201,80202,80204,80206],{"class":48,"line":49},[46,80203,54111],{"class":56},[46,80205,53780],{"class":1361},[46,80207,53274],{"class":56},[46,80209,80210],{"class":48,"line":60},[46,80211,80212],{"class":56},"    const arr = ['red', 'green', 'pink']\n",[46,80214,80215],{"class":48,"line":200},[46,80216,80217],{"class":56},"    const result = arr.forEach(function (item, index) {\n",[46,80219,80220],{"class":48,"line":211},[46,80221,80222],{"class":56},"      console.log(item)\n",[46,80224,80225],{"class":48,"line":222},[46,80226,80227],{"class":56},"      console.log(index)\n",[46,80229,80230],{"class":48,"line":636},[46,80231,35434],{"class":56},[46,80233,80234],{"class":48,"line":641},[46,80235,80236],{"class":56},"    console.log(result)\n",[46,80238,80239,80241,80243],{"class":48,"line":653},[46,80240,54384],{"class":56},[46,80242,53780],{"class":1361},[46,80244,53274],{"class":56},[19,80246,80247],{},[3514,80248],{"alt":41,"src":80249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,80251,80253],{"id":80252},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[19,80255,80256],{},[3514,80257],{"alt":41,"src":80258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[19,80260,80261],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[36,80263,80265],{"className":1350,"code":80264,"language":1352,"meta":41,"style":41},"\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",[43,80266,80267,80275,80283,80288,80293,80297,80301,80306,80310,80315,80323],{"__ignoreMap":41},[46,80268,80269,80271,80273],{"class":48,"line":49},[46,80270,821],{"class":56},[46,80272,53767],{"class":1361},[46,80274,53274],{"class":56},[46,80276,80277,80279,80281],{"class":48,"line":60},[46,80278,54111],{"class":56},[46,80280,53780],{"class":1361},[46,80282,53274],{"class":56},[46,80284,80285],{"class":48,"line":200},[46,80286,80287],{"class":56},"    const arr = [10, 20, 30]\n",[46,80289,80290],{"class":48,"line":211},[46,80291,80292],{"class":56},"    const newArr = arr.filter(function (item, index) {\n",[46,80294,80295],{"class":48,"line":222},[46,80296,80222],{"class":56},[46,80298,80299],{"class":48,"line":636},[46,80300,80227],{"class":56},[46,80302,80303],{"class":48,"line":641},[46,80304,80305],{"class":56},"      return item >= 20\n",[46,80307,80308],{"class":48,"line":653},[46,80309,35434],{"class":56},[46,80311,80312],{"class":48,"line":659},[46,80313,80314],{"class":56},"    console.log(newArr)\n",[46,80316,80317,80319,80321],{"class":48,"line":665},[46,80318,54384],{"class":56},[46,80320,53780],{"class":1361},[46,80322,53274],{"class":56},[46,80324,80325,80327,80329],{"class":48,"line":670},[46,80326,53752],{"class":56},[46,80328,53767],{"class":1361},[46,80330,53274],{"class":56},[19,80332,80333],{},"这个也可以写成箭头函数：",[36,80335,80337],{"className":52601,"code":80336,"language":52603,"meta":41,"style":41},"const newArr = arr.filter(item => item >= 20)\n",[43,80338,80339],{"__ignoreMap":41},[46,80340,80341],{"class":48,"line":49},[46,80342,80336],{"class":56},[14,80344,80346],{"id":80345},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[19,80348,80349],{},[3514,80350],{"alt":41,"src":80351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[19,80353,80354],{},"步骤：",[19,80356,80357],{},"①：渲染页面模块",[3191,80359,80360,80363],{},[26,80361,80362],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[26,80364,80365],{},"用forEach+字符串的形式",[19,80367,80368],{},"②：点击不同需求，显示不同页面内容",[3191,80370,80371,80374,80377,80380,80383],{},[26,80372,80373],{},"点击采取事件委托方式 .filter",[26,80375,80376],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[26,80378,80379],{},"筛选条件是根据点击的 data-index 来判断",[26,80381,80382],{},"可以使用对象解构，把事件对象解构",[26,80384,80385],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[36,80387,80389],{"className":52601,"code":80388,"language":52603,"meta":41,"style":41},"\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",[43,80390,80391,80401,80415,80419,80427,80441,80461,80473,80481,80487,80497,80507,80517,80521,80525,80531,80544,80556,80566,80578,80582,80586,80593,80606,80618,80635,80653,80666,80670,80674,80686,80696,80700,80704,80711,80752,80779,80789,80793,80797,80805,80817,80821,80825,80833,80845,80857,80868,80872,80876,80885,80897,80908,80912,80916,80925,80937,80949,80953,80957,80964,80974,80986,80998,81013,81017,81021,81029,81045,81055,81065,81075,81087,81091,81095,81105,81116,81126,81130,81138,81146,81150,81158,81173,81199,81224,81249,81268,81276,81290,81295,81300,81305,81310,81315,81323,81331,81336,81347,81352,81362,81372,81382,81392,81396,81400,81409,81418,81427,81436,81440,81444,81453,81462,81471,81480,81484,81488,81497,81506,81515,81524,81528,81532,81541,81550,81559,81568,81572,81576,81585,81594,81603,81612,81616,81620,81629,81638,81647,81656,81660,81664,81673,81682,81690,81699,81703,81707,81711,81716,81728,81733,81745,81749,81766,81793,81802,81807,81817,81827,81836,81841,81846,81850,81855,81872,81876,81881,81889,81894,81921,81926,81946,81951,81963,81968,81973,81978,81989,82003,82040,82058,82091,82108,82132,82136,82141,82147,82151,82155,82159,82167,82175,82179],{"__ignoreMap":41},[46,80392,80393,80395,80397,80399],{"class":48,"line":49},[46,80394,53265],{"class":56},[46,80396,53268],{"class":1361},[46,80398,53271],{"class":169},[46,80400,53274],{"class":56},[46,80402,80403,80405,80407,80409,80411,80413],{"class":48,"line":60},[46,80404,821],{"class":56},[46,80406,52603],{"class":1361},[46,80408,53283],{"class":169},[46,80410,79],{"class":56},[46,80412,53288],{"class":173},[46,80414,53274],{"class":56},[46,80416,80417],{"class":48,"line":200},[46,80418,616],{"emptyLinePlaceholder":615},[46,80420,80421,80423,80425],{"class":48,"line":211},[46,80422,821],{"class":56},[46,80424,53301],{"class":1361},[46,80426,53274],{"class":56},[46,80428,80429,80431,80433,80435,80437,80439],{"class":48,"line":222},[46,80430,54111],{"class":56},[46,80432,53311],{"class":1361},[46,80434,53314],{"class":169},[46,80436,79],{"class":56},[46,80438,53319],{"class":173},[46,80440,53274],{"class":56},[46,80442,80443,80445,80447,80449,80451,80453,80455,80457,80459],{"class":48,"line":636},[46,80444,54111],{"class":56},[46,80446,53311],{"class":1361},[46,80448,1364],{"class":169},[46,80450,79],{"class":56},[46,80452,53358],{"class":173},[46,80454,53338],{"class":169},[46,80456,79],{"class":56},[46,80458,53365],{"class":173},[46,80460,53274],{"class":56},[46,80462,80463,80465,80467,80469,80471],{"class":48,"line":641},[46,80464,54111],{"class":56},[46,80466,53374],{"class":1361},[46,80468,53377],{"class":56},[46,80470,53374],{"class":1361},[46,80472,53274],{"class":56},[46,80474,80475,80477,80479],{"class":48,"line":653},[46,80476,54111],{"class":56},[46,80478,2098],{"class":1361},[46,80480,53274],{"class":56},[46,80482,80483,80485],{"class":48,"line":659},[46,80484,8416],{"class":1361},[46,80486,17573],{"class":56},[46,80488,80489,80491,80493,80495],{"class":48,"line":665},[46,80490,56660],{"class":180},[46,80492,53404],{"class":56},[46,80494,2379],{"class":180},[46,80496,3345],{"class":56},[46,80498,80499,80501,80503,80505],{"class":48,"line":670},[46,80500,56671],{"class":180},[46,80502,53404],{"class":56},[46,80504,2379],{"class":180},[46,80506,3345],{"class":56},[46,80508,80509,80511,80513,80515],{"class":48,"line":676},[46,80510,74561],{"class":180},[46,80512,53404],{"class":56},[46,80514,62470],{"class":180},[46,80516,3345],{"class":56},[46,80518,80519],{"class":48,"line":682},[46,80520,4217],{"class":56},[46,80522,80523],{"class":48,"line":688},[46,80524,616],{"emptyLinePlaceholder":615},[46,80526,80527,80529],{"class":48,"line":693},[46,80528,64088],{"class":169},[46,80530,17573],{"class":56},[46,80532,80533,80535,80537,80540,80542],{"class":48,"line":699},[46,80534,56736],{"class":180},[46,80536,53404],{"class":56},[46,80538,80539],{"class":180},"990",[46,80541,53459],{"class":52},[46,80543,3345],{"class":56},[46,80545,80546,80548,80550,80552,80554],{"class":48,"line":705},[46,80547,56671],{"class":180},[46,80549,53404],{"class":56},[46,80551,2379],{"class":180},[46,80553,53523],{"class":180},[46,80555,3345],{"class":56},[46,80557,80558,80560,80562,80564],{"class":48,"line":711},[46,80559,56974],{"class":180},[46,80561,53404],{"class":56},[46,80563,53444],{"class":180},[46,80565,3345],{"class":56},[46,80567,80568,80571,80573,80576],{"class":48,"line":717},[46,80569,80570],{"class":180},"      flex-wrap",[46,80572,53404],{"class":56},[46,80574,80575],{"class":180},"wrap",[46,80577,3345],{"class":56},[46,80579,80580],{"class":48,"line":723},[46,80581,4217],{"class":56},[46,80583,80584],{"class":48,"line":729},[46,80585,616],{"emptyLinePlaceholder":615},[46,80587,80588,80591],{"class":48,"line":735},[46,80589,80590],{"class":169},"    .item",[46,80592,17573],{"class":56},[46,80594,80595,80597,80599,80602,80604],{"class":48,"line":740},[46,80596,56736],{"class":180},[46,80598,53404],{"class":56},[46,80600,80601],{"class":180},"240",[46,80603,53459],{"class":52},[46,80605,3345],{"class":56},[46,80607,80608,80610,80612,80614,80616],{"class":48,"line":745},[46,80609,63965],{"class":180},[46,80611,53404],{"class":56},[46,80613,2633],{"class":180},[46,80615,53459],{"class":52},[46,80617,3345],{"class":56},[46,80619,80620,80622,80624,80626,80628,80631,80633],{"class":48,"line":763},[46,80621,56660],{"class":180},[46,80623,53404],{"class":56},[46,80625,2886],{"class":180},[46,80627,53459],{"class":52},[46,80629,80630],{"class":180}," 30",[46,80632,53459],{"class":52},[46,80634,3345],{"class":56},[46,80636,80637,80639,80641,80643,80646,80649,80651],{"class":48,"line":778},[46,80638,63825],{"class":180},[46,80640,53404],{"class":56},[46,80642,30110],{"class":180},[46,80644,80645],{"class":180}," ease",[46,80647,80648],{"class":180}," .5",[46,80650,2881],{"class":52},[46,80652,3345],{"class":56},[46,80654,80655,80658,80660,80662,80664],{"class":48,"line":789},[46,80656,80657],{"class":180},"      margin-bottom",[46,80659,53404],{"class":56},[46,80661,2886],{"class":180},[46,80663,53459],{"class":52},[46,80665,3345],{"class":56},[46,80667,80668],{"class":48,"line":794},[46,80669,4217],{"class":56},[46,80671,80672],{"class":48,"line":806},[46,80673,616],{"emptyLinePlaceholder":615},[46,80675,80676,80679,80681,80684],{"class":48,"line":829},[46,80677,80678],{"class":169},"    .item:nth-child",[46,80680,1152],{"class":56},[46,80682,80683],{"class":180},"4n",[46,80685,14445],{"class":56},[46,80687,80688,80690,80692,80694],{"class":48,"line":840},[46,80689,63965],{"class":180},[46,80691,53404],{"class":56},[46,80693,2379],{"class":180},[46,80695,3345],{"class":56},[46,80697,80698],{"class":48,"line":846},[46,80699,4217],{"class":56},[46,80701,80702],{"class":48,"line":852},[46,80703,616],{"emptyLinePlaceholder":615},[46,80705,80706,80709],{"class":48,"line":857},[46,80707,80708],{"class":169},"    .item:hover",[46,80710,17573],{"class":56},[46,80712,80713,80716,80718,80720,80722,80724,80726,80728,80730,80733,80735,80737,80739,80741,80743,80745,80747,80750],{"class":48,"line":875},[46,80714,80715],{"class":180},"      box-shadow",[46,80717,53404],{"class":56},[46,80719,2379],{"class":180},[46,80721,53459],{"class":52},[46,80723,887],{"class":180},[46,80725,53459],{"class":52},[46,80727,4178],{"class":180},[46,80729,53459],{"class":52},[46,80731,80732],{"class":180}," rgba",[46,80734,1152],{"class":56},[46,80736,2379],{"class":180},[46,80738,448],{"class":56},[46,80740,2379],{"class":180},[46,80742,448],{"class":56},[46,80744,2379],{"class":180},[46,80746,448],{"class":56},[46,80748,80749],{"class":180},".2",[46,80751,4740],{"class":56},[46,80753,80754,80757,80759,80762,80764,80766,80768,80771,80773,80775,80777],{"class":48,"line":892},[46,80755,80756],{"class":180},"      transform",[46,80758,53404],{"class":56},[46,80760,80761],{"class":180},"translate3d",[46,80763,1152],{"class":56},[46,80765,2379],{"class":180},[46,80767,448],{"class":56},[46,80769,80770],{"class":180},"-4",[46,80772,53459],{"class":52},[46,80774,448],{"class":56},[46,80776,2379],{"class":180},[46,80778,4740],{"class":56},[46,80780,80781,80783,80785,80787],{"class":48,"line":898},[46,80782,63990],{"class":180},[46,80784,53404],{"class":56},[46,80786,63995],{"class":180},[46,80788,3345],{"class":56},[46,80790,80791],{"class":48,"line":903},[46,80792,4217],{"class":56},[46,80794,80795],{"class":48,"line":908},[46,80796,616],{"emptyLinePlaceholder":615},[46,80798,80799,80801,80803],{"class":48,"line":925},[46,80800,80590],{"class":169},[46,80802,57580],{"class":1361},[46,80804,17573],{"class":56},[46,80806,80807,80809,80811,80813,80815],{"class":48,"line":1238},[46,80808,56736],{"class":180},[46,80810,53404],{"class":56},[46,80812,1155],{"class":180},[46,80814,2515],{"class":52},[46,80816,3345],{"class":56},[46,80818,80819],{"class":48,"line":1251},[46,80820,4217],{"class":56},[46,80822,80823],{"class":48,"line":1256},[46,80824,616],{"emptyLinePlaceholder":615},[46,80826,80827,80829,80831],{"class":48,"line":1261},[46,80828,80590],{"class":169},[46,80830,64269],{"class":169},[46,80832,17573],{"class":56},[46,80834,80835,80837,80839,80841,80843],{"class":48,"line":1274},[46,80836,56887],{"class":180},[46,80838,53404],{"class":56},[46,80840,2836],{"class":180},[46,80842,53459],{"class":52},[46,80844,3345],{"class":56},[46,80846,80847,80849,80851,80853,80855],{"class":48,"line":10061},[46,80848,80657],{"class":180},[46,80850,53404],{"class":56},[46,80852,2633],{"class":180},[46,80854,53459],{"class":52},[46,80856,3345],{"class":56},[46,80858,80859,80861,80863,80866],{"class":48,"line":11720},[46,80860,59381],{"class":180},[46,80862,53404],{"class":56},[46,80864,80865],{"class":180},"#666",[46,80867,3345],{"class":56},[46,80869,80870],{"class":48,"line":11745},[46,80871,4217],{"class":56},[46,80873,80874],{"class":48,"line":11768},[46,80875,616],{"emptyLinePlaceholder":615},[46,80877,80878,80880,80883],{"class":48,"line":11792},[46,80879,80590],{"class":169},[46,80881,80882],{"class":169}," .price",[46,80884,17573],{"class":56},[46,80886,80887,80889,80891,80893,80895],{"class":48,"line":11797},[46,80888,56887],{"class":180},[46,80890,53404],{"class":56},[46,80892,2936],{"class":180},[46,80894,53459],{"class":52},[46,80896,3345],{"class":56},[46,80898,80899,80901,80903,80906],{"class":48,"line":11802},[46,80900,59381],{"class":180},[46,80902,53404],{"class":56},[46,80904,80905],{"class":180},"firebrick",[46,80907,3345],{"class":56},[46,80909,80910],{"class":48,"line":11807},[46,80911,4217],{"class":56},[46,80913,80914],{"class":48,"line":11816},[46,80915,616],{"emptyLinePlaceholder":615},[46,80917,80918,80920,80923],{"class":48,"line":11821},[46,80919,80590],{"class":169},[46,80921,80922],{"class":169}," .price::before",[46,80924,17573],{"class":56},[46,80926,80927,80930,80932,80935],{"class":48,"line":11827},[46,80928,80929],{"class":180},"      content",[46,80931,53404],{"class":56},[46,80933,80934],{"class":173},"'￥'",[46,80936,3345],{"class":56},[46,80938,80939,80941,80943,80945,80947],{"class":48,"line":11848},[46,80940,56887],{"class":180},[46,80942,53404],{"class":56},[46,80944,2735],{"class":180},[46,80946,53459],{"class":52},[46,80948,3345],{"class":56},[46,80950,80951],{"class":48,"line":11854},[46,80952,4217],{"class":56},[46,80954,80955],{"class":48,"line":11868},[46,80956,616],{"emptyLinePlaceholder":615},[46,80958,80959,80962],{"class":48,"line":11874},[46,80960,80961],{"class":169},"    .filter",[46,80963,17573],{"class":56},[46,80965,80966,80968,80970,80972],{"class":48,"line":11901},[46,80967,56974],{"class":180},[46,80969,53404],{"class":56},[46,80971,53444],{"class":180},[46,80973,3345],{"class":56},[46,80975,80976,80978,80980,80982,80984],{"class":48,"line":11910},[46,80977,56736],{"class":180},[46,80979,53404],{"class":56},[46,80981,80539],{"class":180},[46,80983,53459],{"class":52},[46,80985,3345],{"class":56},[46,80987,80988,80990,80992,80994,80996],{"class":48,"line":11916},[46,80989,56671],{"class":180},[46,80991,53404],{"class":56},[46,80993,2379],{"class":180},[46,80995,53523],{"class":180},[46,80997,3345],{"class":56},[46,80999,81000,81002,81004,81006,81008,81010],{"class":48,"line":11924},[46,81001,56660],{"class":180},[46,81003,53404],{"class":56},[46,81005,2842],{"class":180},[46,81007,53459],{"class":52},[46,81009,80630],{"class":180},[46,81011,81012],{"class":52},"px\n",[46,81014,81015],{"class":48,"line":11929},[46,81016,4217],{"class":56},[46,81018,81019],{"class":48,"line":18605},[46,81020,616],{"emptyLinePlaceholder":615},[46,81022,81023,81025,81027],{"class":48,"line":18611},[46,81024,80961],{"class":169},[46,81026,3450],{"class":1361},[46,81028,17573],{"class":56},[46,81030,81031,81033,81035,81037,81039,81041,81043],{"class":48,"line":18634},[46,81032,56660],{"class":180},[46,81034,53404],{"class":56},[46,81036,2633],{"class":180},[46,81038,53459],{"class":52},[46,81040,10954],{"class":180},[46,81042,53459],{"class":52},[46,81044,3345],{"class":56},[46,81046,81047,81049,81051,81053],{"class":48,"line":18640},[46,81048,63686],{"class":180},[46,81050,53404],{"class":56},[46,81052,63783],{"class":180},[46,81054,3345],{"class":56},[46,81056,81057,81059,81061,81063],{"class":48,"line":18663},[46,81058,59381],{"class":180},[46,81060,53404],{"class":56},[46,81062,80865],{"class":180},[46,81064,3345],{"class":56},[46,81066,81067,81069,81071,81073],{"class":48,"line":18677},[46,81068,65935],{"class":180},[46,81070,53404],{"class":56},[46,81072,56702],{"class":180},[46,81074,3345],{"class":56},[46,81076,81077,81079,81081,81083,81085],{"class":48,"line":18697},[46,81078,63715],{"class":180},[46,81080,53404],{"class":56},[46,81082,2886],{"class":180},[46,81084,53459],{"class":52},[46,81086,3345],{"class":56},[46,81088,81089],{"class":48,"line":18703},[46,81090,4217],{"class":56},[46,81092,81093],{"class":48,"line":18714},[46,81094,616],{"emptyLinePlaceholder":615},[46,81096,81097,81099,81101,81103],{"class":48,"line":18737},[46,81098,80961],{"class":169},[46,81100,3450],{"class":1361},[46,81102,63865],{"class":169},[46,81104,17573],{"class":56},[46,81106,81107,81109,81111,81114],{"class":48,"line":18759},[46,81108,56849],{"class":180},[46,81110,53404],{"class":56},[46,81112,81113],{"class":180},"#05943c",[46,81115,3345],{"class":56},[46,81117,81118,81120,81122,81124],{"class":48,"line":18764},[46,81119,59381],{"class":180},[46,81121,53404],{"class":56},[46,81123,62807],{"class":180},[46,81125,3345],{"class":56},[46,81127,81128],{"class":48,"line":18770},[46,81129,4217],{"class":56},[46,81131,81132,81134,81136],{"class":48,"line":18784},[46,81133,54384],{"class":56},[46,81135,2098],{"class":1361},[46,81137,53274],{"class":56},[46,81139,81140,81142,81144],{"class":48,"line":18797},[46,81141,53752],{"class":56},[46,81143,53301],{"class":1361},[46,81145,53274],{"class":56},[46,81147,81148],{"class":48,"line":18802},[46,81149,616],{"emptyLinePlaceholder":615},[46,81151,81152,81154,81156],{"class":48,"line":18816},[46,81153,821],{"class":56},[46,81155,53767],{"class":1361},[46,81157,53274],{"class":56},[46,81159,81160,81162,81164,81166,81168,81171],{"class":48,"line":18821},[46,81161,54111],{"class":56},[46,81163,53578],{"class":1361},[46,81165,55451],{"class":169},[46,81167,79],{"class":56},[46,81169,81170],{"class":173},"\"filter\"",[46,81172,53274],{"class":56},[46,81174,81175,81177,81179,81181,81183,81185,81188,81190,81192,81195,81197],{"class":48,"line":18827},[46,81176,53308],{"class":56},[46,81178,2426],{"class":1361},[46,81180,63022],{"class":169},[46,81182,79],{"class":56},[46,81184,63027],{"class":173},[46,81186,81187],{"class":169}," data-index",[46,81189,79],{"class":56},[46,81191,5697],{"class":173},[46,81193,81194],{"class":56},">0-100元\u003C\u002F",[46,81196,2426],{"class":1361},[46,81198,53274],{"class":56},[46,81200,81201,81203,81205,81207,81209,81211,81213,81215,81217,81220,81222],{"class":48,"line":18832},[46,81202,53308],{"class":56},[46,81204,2426],{"class":1361},[46,81206,63022],{"class":169},[46,81208,79],{"class":56},[46,81210,63027],{"class":173},[46,81212,81187],{"class":169},[46,81214,79],{"class":56},[46,81216,5720],{"class":173},[46,81218,81219],{"class":56},">100-300元\u003C\u002F",[46,81221,2426],{"class":1361},[46,81223,53274],{"class":56},[46,81225,81226,81228,81230,81232,81234,81236,81238,81240,81242,81245,81247],{"class":48,"line":18846},[46,81227,53308],{"class":56},[46,81229,2426],{"class":1361},[46,81231,63022],{"class":169},[46,81233,79],{"class":56},[46,81235,63027],{"class":173},[46,81237,81187],{"class":169},[46,81239,79],{"class":56},[46,81241,5733],{"class":173},[46,81243,81244],{"class":56},">300元以上\u003C\u002F",[46,81246,2426],{"class":1361},[46,81248,53274],{"class":56},[46,81250,81251,81253,81255,81257,81259,81261,81264,81266],{"class":48,"line":18851},[46,81252,53308],{"class":56},[46,81254,2426],{"class":1361},[46,81256,63022],{"class":169},[46,81258,79],{"class":56},[46,81260,63027],{"class":173},[46,81262,81263],{"class":56},">全部区间\u003C\u002F",[46,81265,2426],{"class":1361},[46,81267,53274],{"class":56},[46,81269,81270,81272,81274],{"class":48,"line":18856},[46,81271,54384],{"class":56},[46,81273,53578],{"class":1361},[46,81275,53274],{"class":56},[46,81277,81278,81280,81282,81284,81286,81288],{"class":48,"line":18870},[46,81279,54111],{"class":56},[46,81281,53578],{"class":1361},[46,81283,55451],{"class":169},[46,81285,79],{"class":56},[46,81287,64573],{"class":173},[46,81289,53274],{"class":56},[46,81291,81292],{"class":48,"line":18882},[46,81293,81294],{"class":2253},"    \u003C!-- \u003Cdiv class=\"item\">\n",[46,81296,81297],{"class":48,"line":18887},[46,81298,81299],{"class":2253},"      \u003Cimg src=\"\" alt=\"\">\n",[46,81301,81302],{"class":48,"line":18900},[46,81303,81304],{"class":2253},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[46,81306,81307],{"class":48,"line":18905},[46,81308,81309],{"class":2253},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[46,81311,81312],{"class":48,"line":18910},[46,81313,81314],{"class":2253},"    \u003C\u002Fdiv> -->\n",[46,81316,81317,81319,81321],{"class":48,"line":18915},[46,81318,54384],{"class":56},[46,81320,53578],{"class":1361},[46,81322,53274],{"class":56},[46,81324,81325,81327,81329],{"class":48,"line":18928},[46,81326,54111],{"class":56},[46,81328,53780],{"class":1361},[46,81330,53274],{"class":56},[46,81332,81333],{"class":48,"line":18933},[46,81334,81335],{"class":2253},"    \u002F\u002F 2. 初始化数据\n",[46,81337,81338,81340,81343,81345],{"class":48,"line":34607},[46,81339,13225],{"class":52},[46,81341,81342],{"class":180}," goodsList",[46,81344,647],{"class":52},[46,81346,57412],{"class":56},[46,81348,81349],{"class":48,"line":34613},[46,81350,81351],{"class":56},"      {\n",[46,81353,81354,81357,81360],{"class":48,"line":34619},[46,81355,81356],{"class":56},"        id: ",[46,81358,81359],{"class":173},"'4001172'",[46,81361,33443],{"class":56},[46,81363,81364,81367,81370],{"class":48,"line":34625},[46,81365,81366],{"class":56},"        name: ",[46,81368,81369],{"class":173},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[46,81371,33443],{"class":56},[46,81373,81374,81377,81380],{"class":48,"line":34631},[46,81375,81376],{"class":56},"        price: ",[46,81378,81379],{"class":173},"'289.00'",[46,81381,33443],{"class":56},[46,81383,81384,81387,81390],{"class":48,"line":34642},[46,81385,81386],{"class":56},"        picture: ",[46,81388,81389],{"class":173},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[46,81391,33443],{"class":56},[46,81393,81394],{"class":48,"line":34648},[46,81395,79857],{"class":56},[46,81397,81398],{"class":48,"line":34668},[46,81399,81351],{"class":56},[46,81401,81402,81404,81407],{"class":48,"line":34674},[46,81403,81356],{"class":56},[46,81405,81406],{"class":173},"'4001594'",[46,81408,33443],{"class":56},[46,81410,81411,81413,81416],{"class":48,"line":34685},[46,81412,81366],{"class":56},[46,81414,81415],{"class":173},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[46,81417,33443],{"class":56},[46,81419,81420,81422,81425],{"class":48,"line":34691},[46,81421,81376],{"class":56},[46,81423,81424],{"class":173},"'288.00'",[46,81426,33443],{"class":56},[46,81428,81429,81431,81434],{"class":48,"line":34697},[46,81430,81386],{"class":56},[46,81432,81433],{"class":173},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[46,81435,33443],{"class":56},[46,81437,81438],{"class":48,"line":34703},[46,81439,79857],{"class":56},[46,81441,81442],{"class":48,"line":34709},[46,81443,81351],{"class":56},[46,81445,81446,81448,81451],{"class":48,"line":34715},[46,81447,81356],{"class":56},[46,81449,81450],{"class":173},"'4001009'",[46,81452,33443],{"class":56},[46,81454,81455,81457,81460],{"class":48,"line":34721},[46,81456,81366],{"class":56},[46,81458,81459],{"class":173},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[46,81461,33443],{"class":56},[46,81463,81464,81466,81469],{"class":48,"line":34727},[46,81465,81376],{"class":56},[46,81467,81468],{"class":173},"'109.00'",[46,81470,33443],{"class":56},[46,81472,81473,81475,81478],{"class":48,"line":34747},[46,81474,81386],{"class":56},[46,81476,81477],{"class":173},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[46,81479,33443],{"class":56},[46,81481,81482],{"class":48,"line":34753},[46,81483,79857],{"class":56},[46,81485,81486],{"class":48,"line":34769},[46,81487,81351],{"class":56},[46,81489,81490,81492,81495],{"class":48,"line":34775},[46,81491,81356],{"class":56},[46,81493,81494],{"class":173},"'4001874'",[46,81496,33443],{"class":56},[46,81498,81499,81501,81504],{"class":48,"line":34789},[46,81500,81366],{"class":56},[46,81502,81503],{"class":173},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[46,81505,33443],{"class":56},[46,81507,81508,81510,81513],{"class":48,"line":34795},[46,81509,81376],{"class":56},[46,81511,81512],{"class":173},"'488.00'",[46,81514,33443],{"class":56},[46,81516,81517,81519,81522],{"class":48,"line":34810},[46,81518,81386],{"class":56},[46,81520,81521],{"class":173},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[46,81523,33443],{"class":56},[46,81525,81526],{"class":48,"line":34816},[46,81527,79857],{"class":56},[46,81529,81530],{"class":48,"line":34825},[46,81531,81351],{"class":56},[46,81533,81534,81536,81539],{"class":48,"line":34831},[46,81535,81356],{"class":56},[46,81537,81538],{"class":173},"'4001649'",[46,81540,33443],{"class":56},[46,81542,81543,81545,81548],{"class":48,"line":34840},[46,81544,81366],{"class":56},[46,81546,81547],{"class":173},"'大师监制龙泉青瓷茶叶罐'",[46,81549,33443],{"class":56},[46,81551,81552,81554,81557],{"class":48,"line":34846},[46,81553,81376],{"class":56},[46,81555,81556],{"class":173},"'139.00'",[46,81558,33443],{"class":56},[46,81560,81561,81563,81566],{"class":48,"line":34852},[46,81562,81386],{"class":56},[46,81564,81565],{"class":173},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[46,81567,33443],{"class":56},[46,81569,81570],{"class":48,"line":34861},[46,81571,79857],{"class":56},[46,81573,81574],{"class":48,"line":34867},[46,81575,81351],{"class":56},[46,81577,81578,81580,81583],{"class":48,"line":34878},[46,81579,81356],{"class":56},[46,81581,81582],{"class":173},"'3997185'",[46,81584,33443],{"class":56},[46,81586,81587,81589,81592],{"class":48,"line":34884},[46,81588,81366],{"class":56},[46,81590,81591],{"class":173},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[46,81593,33443],{"class":56},[46,81595,81596,81598,81601],{"class":48,"line":34903},[46,81597,81376],{"class":56},[46,81599,81600],{"class":173},"'108.00'",[46,81602,33443],{"class":56},[46,81604,81605,81607,81610],{"class":48,"line":34909},[46,81606,81386],{"class":56},[46,81608,81609],{"class":173},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[46,81611,33443],{"class":56},[46,81613,81614],{"class":48,"line":34920},[46,81615,79857],{"class":56},[46,81617,81618],{"class":48,"line":34926},[46,81619,81351],{"class":56},[46,81621,81622,81624,81627],{"class":48,"line":34946},[46,81623,81356],{"class":56},[46,81625,81626],{"class":173},"'3997403'",[46,81628,33443],{"class":56},[46,81630,81631,81633,81636],{"class":48,"line":34962},[46,81632,81366],{"class":56},[46,81634,81635],{"class":173},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[46,81637,33443],{"class":56},[46,81639,81640,81642,81645],{"class":48,"line":34968},[46,81641,81376],{"class":56},[46,81643,81644],{"class":173},"'100.00'",[46,81646,33443],{"class":56},[46,81648,81649,81651,81654],{"class":48,"line":34982},[46,81650,81386],{"class":56},[46,81652,81653],{"class":173},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[46,81655,33443],{"class":56},[46,81657,81658],{"class":48,"line":34988},[46,81659,79857],{"class":56},[46,81661,81662],{"class":48,"line":34994},[46,81663,81351],{"class":56},[46,81665,81666,81668,81671],{"class":48,"line":35005},[46,81667,81356],{"class":56},[46,81669,81670],{"class":173},"'3998274'",[46,81672,33443],{"class":56},[46,81674,81675,81677,81680],{"class":48,"line":35011},[46,81676,81366],{"class":56},[46,81678,81679],{"class":173},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[46,81681,33443],{"class":56},[46,81683,81684,81686,81688],{"class":48,"line":35017},[46,81685,81376],{"class":56},[46,81687,81556],{"class":173},[46,81689,33443],{"class":56},[46,81691,81692,81694,81697],{"class":48,"line":35027},[46,81693,81386],{"class":56},[46,81695,81696],{"class":173},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[46,81698,33443],{"class":56},[46,81700,81701],{"class":48,"line":35033},[46,81702,79857],{"class":56},[46,81704,81705],{"class":48,"line":35044},[46,81706,55074],{"class":56},[46,81708,81709],{"class":48,"line":35050},[46,81710,616],{"emptyLinePlaceholder":615},[46,81712,81713],{"class":48,"line":35060},[46,81714,81715],{"class":2253},"    \u002F\u002F 1.渲染函数\n",[46,81717,81718,81720,81722,81724,81726],{"class":48,"line":35065},[46,81719,72049],{"class":52},[46,81721,72052],{"class":169},[46,81723,1152],{"class":56},[46,81725,5898],{"class":439},[46,81727,14445],{"class":56},[46,81729,81730],{"class":48,"line":35071},[46,81731,81732],{"class":2253},"      \u002F\u002F 声明空字符串\n",[46,81734,81735,81738,81741,81743],{"class":48,"line":35120},[46,81736,81737],{"class":52},"      let",[46,81739,81740],{"class":56}," str ",[46,81742,79],{"class":52},[46,81744,72069],{"class":173},[46,81746,81747],{"class":48,"line":35167},[46,81748,72074],{"class":2253},[46,81750,81751,81753,81756,81758,81761,81764],{"class":48,"line":35172},[46,81752,59972],{"class":56},[46,81754,81755],{"class":169},"forEach",[46,81757,1152],{"class":56},[46,81759,81760],{"class":439},"item",[46,81762,81763],{"class":52}," =>",[46,81765,17573],{"class":56},[46,81767,81768,81770,81773,81775,81777,81780,81782,81785,81788,81790],{"class":48,"line":35178},[46,81769,63235],{"class":52},[46,81771,81772],{"class":56}," { ",[46,81774,1653],{"class":180},[46,81776,448],{"class":56},[46,81778,81779],{"class":180},"price",[46,81781,448],{"class":56},[46,81783,81784],{"class":180},"picture",[46,81786,81787],{"class":56}," } ",[46,81789,79],{"class":52},[46,81791,81792],{"class":56}," item\n",[46,81794,81795,81798,81800],{"class":48,"line":35197},[46,81796,81797],{"class":56},"        str ",[46,81799,11481],{"class":52},[46,81801,72133],{"class":173},[46,81803,81804],{"class":48,"line":35203},[46,81805,81806],{"class":173},"          \u003Cdiv class=\"item\">\n",[46,81808,81809,81812,81814],{"class":48,"line":35223},[46,81810,81811],{"class":173},"            \u003Cimg src=\"${",[46,81813,81784],{"class":56},[46,81815,81816],{"class":173},"}\" alt=\"\">\n",[46,81818,81819,81822,81824],{"class":48,"line":35229},[46,81820,81821],{"class":173},"            \u003Cp class=\"name\">${",[46,81823,1653],{"class":56},[46,81825,81826],{"class":173},"}\u003C\u002Fp>\n",[46,81828,81829,81832,81834],{"class":48,"line":35235},[46,81830,81831],{"class":173},"            \u003Cp class=\"price\">${",[46,81833,81779],{"class":56},[46,81835,81826],{"class":173},[46,81837,81838],{"class":48,"line":35245},[46,81839,81840],{"class":173},"          \u003C\u002Fdiv>\n",[46,81842,81843],{"class":48,"line":35250},[46,81844,81845],{"class":173},"        `\n",[46,81847,81848],{"class":48,"line":35256},[46,81849,66780],{"class":56},[46,81851,81852],{"class":48,"line":35272},[46,81853,81854],{"class":2253},"      \u002F\u002F 追加给List\n",[46,81856,81857,81859,81861,81863,81866,81868,81870],{"class":48,"line":35317},[46,81858,57736],{"class":56},[46,81860,56364],{"class":169},[46,81862,1152],{"class":56},[46,81864,81865],{"class":173},"'.list'",[46,81867,76214],{"class":56},[46,81869,79],{"class":52},[46,81871,75950],{"class":56},[46,81873,81874],{"class":48,"line":35323},[46,81875,4217],{"class":56},[46,81877,81878],{"class":48,"line":35329},[46,81879,81880],{"class":2253},"    \u002F\u002F 页面一打开就需要渲染\n",[46,81882,81883,81886],{"class":48,"line":35335},[46,81884,81885],{"class":169},"    render",[46,81887,81888],{"class":56},"(goodsList)\n",[46,81890,81891],{"class":48,"line":35346},[46,81892,81893],{"class":2253},"    \u002F\u002F 2.过滤筛选\n",[46,81895,81896,81898,81900,81902,81905,81907,81909,81911,81913,81915,81917,81919],{"class":48,"line":35352},[46,81897,54374],{"class":56},[46,81899,56364],{"class":169},[46,81901,1152],{"class":56},[46,81903,81904],{"class":173},"'.filter'",[46,81906,32806],{"class":56},[46,81908,59778],{"class":169},[46,81910,1152],{"class":56},[46,81912,59783],{"class":173},[46,81914,448],{"class":56},[46,81916,2269],{"class":439},[46,81918,81763],{"class":52},[46,81920,17573],{"class":56},[46,81922,81923],{"class":48,"line":35358},[46,81924,81925],{"class":2253},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[46,81927,81928,81930,81932,81935,81937,81939,81941,81943],{"class":48,"line":35364},[46,81929,60193],{"class":52},[46,81931,81772],{"class":56},[46,81933,81934],{"class":180},"tagName",[46,81936,448],{"class":56},[46,81938,33514],{"class":180},[46,81940,81787],{"class":56},[46,81942,79],{"class":52},[46,81944,81945],{"class":56}," e.target\n",[46,81947,81948],{"class":48,"line":35381},[46,81949,81950],{"class":2253},"      \u002F\u002F 判断\n",[46,81952,81953,81955,81957,81959,81961],{"class":48,"line":35395},[46,81954,56445],{"class":52},[46,81956,68999],{"class":56},[46,81958,56451],{"class":52},[46,81960,70221],{"class":173},[46,81962,14445],{"class":56},[46,81964,81965],{"class":48,"line":35404},[46,81966,81967],{"class":2253},"        \u002F\u002F console.log(11)\n",[46,81969,81970],{"class":48,"line":35413},[46,81971,81972],{"class":2253},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[46,81974,81975],{"class":48,"line":35422},[46,81976,81977],{"class":2253},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[46,81979,81980,81982,81984,81986],{"class":48,"line":35431},[46,81981,53797],{"class":52},[46,81983,53800],{"class":56},[46,81985,79],{"class":52},[46,81987,81988],{"class":56}," goodsList\n",[46,81990,81991,81993,81996,81998,82001],{"class":48,"line":35437},[46,81992,4525],{"class":52},[46,81994,81995],{"class":56}," (dataset.index ",[46,81997,56451],{"class":52},[46,81999,82000],{"class":173}," '1'",[46,82002,14445],{"class":56},[46,82004,82005,82008,82010,82013,82016,82018,82020,82022,82025,82027,82029,82032,82034,82036,82038],{"class":48,"line":35443},[46,82006,82007],{"class":56},"          arr ",[46,82009,79],{"class":52},[46,82011,82012],{"class":56}," goodsList.",[46,82014,82015],{"class":169},"filter",[46,82017,1152],{"class":56},[46,82019,81760],{"class":439},[46,82021,81763],{"class":52},[46,82023,82024],{"class":56}," item.price ",[46,82026,3750],{"class":52},[46,82028,887],{"class":180},[46,82030,82031],{"class":52}," &&",[46,82033,82024],{"class":56},[46,82035,3639],{"class":52},[46,82037,7767],{"class":180},[46,82039,459],{"class":56},[46,82041,82042,82045,82047,82049,82051,82053,82056],{"class":48,"line":35451},[46,82043,82044],{"class":56},"        } ",[46,82046,3741],{"class":52},[46,82048,3744],{"class":52},[46,82050,81995],{"class":56},[46,82052,56451],{"class":52},[46,82054,82055],{"class":173}," '2'",[46,82057,14445],{"class":56},[46,82059,82060,82062,82064,82066,82068,82070,82072,82074,82076,82078,82080,82082,82084,82086,82089],{"class":48,"line":35456},[46,82061,82007],{"class":56},[46,82063,79],{"class":52},[46,82065,82012],{"class":56},[46,82067,82015],{"class":169},[46,82069,1152],{"class":56},[46,82071,81760],{"class":439},[46,82073,81763],{"class":52},[46,82075,82024],{"class":56},[46,82077,3750],{"class":52},[46,82079,7767],{"class":180},[46,82081,82031],{"class":52},[46,82083,82024],{"class":56},[46,82085,3639],{"class":52},[46,82087,82088],{"class":180}," 300",[46,82090,459],{"class":56},[46,82092,82093,82095,82097,82099,82101,82103,82106],{"class":48,"line":35462},[46,82094,82044],{"class":56},[46,82096,3741],{"class":52},[46,82098,3744],{"class":52},[46,82100,81995],{"class":56},[46,82102,56451],{"class":52},[46,82104,82105],{"class":173}," '3'",[46,82107,14445],{"class":56},[46,82109,82110,82112,82114,82116,82118,82120,82122,82124,82126,82128,82130],{"class":48,"line":35473},[46,82111,82007],{"class":56},[46,82113,79],{"class":52},[46,82115,82012],{"class":56},[46,82117,82015],{"class":169},[46,82119,1152],{"class":56},[46,82121,81760],{"class":439},[46,82123,81763],{"class":52},[46,82125,82024],{"class":56},[46,82127,3750],{"class":52},[46,82129,82088],{"class":180},[46,82131,459],{"class":56},[46,82133,82134],{"class":48,"line":35479},[46,82135,4557],{"class":56},[46,82137,82138],{"class":48,"line":35499},[46,82139,82140],{"class":2253},"        \u002F\u002F 渲染函数\n",[46,82142,82143,82145],{"class":48,"line":35505},[46,82144,72373],{"class":169},[46,82146,54379],{"class":56},[46,82148,82149],{"class":48,"line":35511},[46,82150,54365],{"class":56},[46,82152,82153],{"class":48,"line":35517},[46,82154,616],{"emptyLinePlaceholder":615},[46,82156,82157],{"class":48,"line":35534},[46,82158,35434],{"class":56},[46,82160,82161,82163,82165],{"class":48,"line":35540},[46,82162,54384],{"class":56},[46,82164,53780],{"class":1361},[46,82166,53274],{"class":56},[46,82168,82169,82171,82173],{"class":48,"line":35546},[46,82170,53752],{"class":56},[46,82172,53767],{"class":1361},[46,82174,53274],{"class":56},[46,82176,82177],{"class":48,"line":35552},[46,82178,616],{"emptyLinePlaceholder":615},[46,82180,82181,82183,82185],{"class":48,"line":35558},[46,82182,53752],{"class":56},[46,82184,52603],{"class":1361},[46,82186,53274],{"class":56},[14,82188,82190],{"id":82189},"_410-深入了解对象","4.10 深入了解对象",[479,82192,82194],{"id":82193},"_4101-创建对象","4.10.1 创建对象",[19,82196,82197],{},[3514,82198],{"alt":41,"src":82199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[19,82201,82202],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[479,82204,82206],{"id":82205},"_4102-构造函数","4.10.2 构造函数",[19,82208,82209,82212],{},[2339,82210,82211],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[19,82214,82215,82218],{},[2339,82216,82217],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[36,82220,82222],{"className":52601,"code":82221,"language":52603,"meta":41,"style":41},"\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",[43,82223,82224,82232,82237,82258,82271,82283,82295,82299,82304,82331,82336,82363],{"__ignoreMap":41},[46,82225,82226,82228,82230],{"class":48,"line":49},[46,82227,821],{"class":56},[46,82229,53780],{"class":1361},[46,82231,53274],{"class":56},[46,82233,82234],{"class":48,"line":60},[46,82235,82236],{"class":2253},"\u002F\u002F例：\n",[46,82238,82239,82241,82244,82246,82248,82250,82252,82254,82256],{"class":48,"line":200},[46,82240,56414],{"class":52},[46,82242,82243],{"class":169}," Pig",[46,82245,1152],{"class":56},[46,82247,1653],{"class":439},[46,82249,2565],{"class":56},[46,82251,72186],{"class":439},[46,82253,2565],{"class":56},[46,82255,72203],{"class":439},[46,82257,14445],{"class":56},[46,82259,82260,82263,82266,82268],{"class":48,"line":211},[46,82261,82262],{"class":180},"    this",[46,82264,82265],{"class":56},".name",[46,82267,79],{"class":52},[46,82269,82270],{"class":56},"name\n",[46,82272,82273,82275,82278,82280],{"class":48,"line":222},[46,82274,82262],{"class":180},[46,82276,82277],{"class":56},".age",[46,82279,79],{"class":52},[46,82281,82282],{"class":56},"age\n",[46,82284,82285,82287,82290,82292],{"class":48,"line":636},[46,82286,82262],{"class":180},[46,82288,82289],{"class":56},".gender",[46,82291,79],{"class":52},[46,82293,82294],{"class":56},"gender    \n",[46,82296,82297],{"class":48,"line":641},[46,82298,3616],{"class":56},[46,82300,82301],{"class":48,"line":653},[46,82302,82303],{"class":2253},"\u002F\u002F创建佩奇对象\n",[46,82305,82306,82308,82311,82313,82315,82317,82320,82322,82324,82326,82329],{"class":48,"line":659},[46,82307,8805],{"class":52},[46,82309,82310],{"class":180}," Peppa",[46,82312,13721],{"class":52},[46,82314,82243],{"class":169},[46,82316,1152],{"class":56},[46,82318,82319],{"class":173},"'佩奇'",[46,82321,2565],{"class":56},[46,82323,2531],{"class":180},[46,82325,2565],{"class":56},[46,82327,82328],{"class":173},"'女'",[46,82330,459],{"class":56},[46,82332,82333],{"class":48,"line":665},[46,82334,82335],{"class":2253},"\u002F\u002F创建乔治对象\n",[46,82337,82338,82340,82343,82345,82347,82349,82352,82354,82356,82358,82361],{"class":48,"line":670},[46,82339,8805],{"class":52},[46,82341,82342],{"class":180}," George",[46,82344,13721],{"class":52},[46,82346,82243],{"class":169},[46,82348,1152],{"class":56},[46,82350,82351],{"class":173},"'乔治'",[46,82353,2565],{"class":56},[46,82355,2266],{"class":180},[46,82357,2565],{"class":56},[46,82359,82360],{"class":173},"'男'",[46,82362,459],{"class":56},[46,82364,82365,82367,82369],{"class":48,"line":676},[46,82366,53752],{"class":56},[46,82368,53780],{"class":1361},[46,82370,53274],{"class":56},[19,82372,82373],{},[3514,82374],{"alt":41,"src":82375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[19,82377,82378],{},[3514,82379],{"alt":41,"src":82380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[19,82382,82383],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[19,82385,82386],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[19,82388,82389],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[19,82391,82392],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[19,82394,82395],{},"这里用等号是因为：对象.属性=值",[19,82397,82398],{},"①利用对象字面量创建对象",[19,82400,82401],{},"const o={",[19,82403,82404],{},"name:'pink'",[19,82406,82407],{},"} ②利用new Object创建对象",[19,82409,82410],{},"const o=new Object({name:'pink'})",[19,82412,82413],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[19,82415,82416],{},"构造函数创建对象的执行过程：",[19,82418,82419],{},[3514,82420],{"alt":41,"src":82421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[479,82423,82425],{"id":82424},"_4103-实例成员","4.10.3 实例成员",[19,82427,82428],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[23,82430,82431,82434,82437],{},[26,82432,82433],{},"实例对象的属性和方法即为实例成员",[26,82435,82436],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[26,82438,82439],{},"构造函数创建的实例对象彼此独立互不影响",[479,82441,82443],{"id":82442},"_4104-静态成员","4.10.4 静态成员",[19,82445,82446],{},[3514,82447],{"alt":41,"src":82448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[19,82450,82451],{},"静态成员有Date.now() Math.PI Math.random()",[19,82453,82454],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[19,82456,82457],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[19,82459,82460],{},"function Pig(name) n {",[19,82462,82463],{},"this.name=name",[19,82465,3131],{},[19,82467,82468],{},"Pig.eyes=2",[19,82470,82471],{},"Pig.sayHai=function () { console.log(this) }",[19,82473,82474],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[19,82476,82477],{},"console.log(Pig.eyes) \u002F\u002F2",[19,82479,13336],{},[23,82481,82482,82485,82488,82491,82494],{},[26,82483,82484],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[26,82486,82487],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[26,82489,82490],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[26,82492,82493],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[26,82495,82496],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[19,82498,82499],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[479,82501,82503],{"id":82502},"_4105-内置构造函数","4.10.5 内置构造函数",[19,82505,82506],{},"内置构造函数包含：",[19,82508,82509],{},[3514,82510],{"alt":41,"src":82511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[19,82513,82514],{},[3514,82515],{"alt":41,"src":82516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[19,82518,82519],{},"这些基本数据类型，js对他们进行了包装",[53780,82521,82522],{},"\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",[23999,82524,82526],{"id":82525},"_41051-object","4.10.5.1 Object",[19,82528,82529],{},"Object 是内置的构造函数，用于创建普通对象",[19,82531,82532],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[36,82534,82536],{"className":52601,"code":82535,"language":52603,"meta":41,"style":41},"const user=new Object({name:'小明',age:15})\n",[43,82537,82538],{"__ignoreMap":41},[46,82539,82540],{"class":48,"line":49},[46,82541,82535],{"class":56},[19,82543,82544],{},"三个常用的静态方法：",[24911,82546,82548],{"id":82547},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[19,82550,82551],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[19,82553,82554],{},[3514,82555],{"alt":41,"src":82556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[19,82558,82559],{},[3514,82560],{"alt":41,"src":82561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[36,82563,82565],{"className":1350,"code":82564,"language":1352,"meta":41,"style":41},"\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",[43,82566,82567,82575,82583,82588,82593,82598,82603,82608,82613,82621],{"__ignoreMap":41},[46,82568,82569,82571,82573],{"class":48,"line":49},[46,82570,821],{"class":56},[46,82572,53767],{"class":1361},[46,82574,53274],{"class":56},[46,82576,82577,82579,82581],{"class":48,"line":60},[46,82578,54111],{"class":56},[46,82580,53780],{"class":1361},[46,82582,53274],{"class":56},[46,82584,82585],{"class":48,"line":200},[46,82586,82587],{"class":56},"    const o = { name: 'pink', age: 6 }\n",[46,82589,82590],{"class":48,"line":211},[46,82591,82592],{"class":56},"    \u002F\u002F 获得所有属性名\n",[46,82594,82595],{"class":48,"line":222},[46,82596,82597],{"class":56},"    const arr = Object.keys(o)\n",[46,82599,82600],{"class":48,"line":636},[46,82601,82602],{"class":56},"    console.log(arr)\n",[46,82604,82605],{"class":48,"line":641},[46,82606,82607],{"class":56},"    \u002F\u002F 获得所有属性值\n",[46,82609,82610],{"class":48,"line":653},[46,82611,82612],{"class":56},"    console.log(Object.values(o))\n",[46,82614,82615,82617,82619],{"class":48,"line":659},[46,82616,54384],{"class":56},[46,82618,53780],{"class":1361},[46,82620,53274],{"class":56},[46,82622,82623,82625,82627],{"class":48,"line":665},[46,82624,53752],{"class":56},[46,82626,53767],{"class":1361},[46,82628,53274],{"class":56},[24911,82630,82632],{"id":82631},"_410512-object-assign","4.10.5.1.2 Object. assign",[19,82634,82635],{},"Object.assign(oo,o)",[19,82637,82638],{},"后的东西添加给前 是追加",[19,82640,82641],{},[3514,82642],{"alt":41,"src":82643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[19,82645,82646],{},[3514,82647],{"alt":41,"src":82648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[36,82650,82652],{"className":1350,"code":82651,"language":1352,"meta":41,"style":41},"\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",[43,82653,82654,82662,82670,82674,82678,82682,82686,82690,82694,82699,82704,82709,82714,82719,82727],{"__ignoreMap":41},[46,82655,82656,82658,82660],{"class":48,"line":49},[46,82657,821],{"class":56},[46,82659,53767],{"class":1361},[46,82661,53274],{"class":56},[46,82663,82664,82666,82668],{"class":48,"line":60},[46,82665,54111],{"class":56},[46,82667,53780],{"class":1361},[46,82669,53274],{"class":56},[46,82671,82672],{"class":48,"line":200},[46,82673,82587],{"class":56},[46,82675,82676],{"class":48,"line":211},[46,82677,82592],{"class":56},[46,82679,82680],{"class":48,"line":222},[46,82681,82597],{"class":56},[46,82683,82684],{"class":48,"line":636},[46,82685,82602],{"class":56},[46,82687,82688],{"class":48,"line":641},[46,82689,82607],{"class":56},[46,82691,82692],{"class":48,"line":653},[46,82693,82612],{"class":56},[46,82695,82696],{"class":48,"line":659},[46,82697,82698],{"class":56},"    const oo = {}\n",[46,82700,82701],{"class":48,"line":665},[46,82702,82703],{"class":56},"    Object.assign(oo, o)\n",[46,82705,82706],{"class":48,"line":670},[46,82707,82708],{"class":56},"    console.log(oo)\n",[46,82710,82711],{"class":48,"line":676},[46,82712,82713],{"class":56},"    Object.assign(o, { gender: '女' })\n",[46,82715,82716],{"class":48,"line":682},[46,82717,82718],{"class":56},"    console.log(o)\n",[46,82720,82721,82723,82725],{"class":48,"line":688},[46,82722,54384],{"class":56},[46,82724,53780],{"class":1361},[46,82726,53274],{"class":56},[46,82728,82729,82731,82733],{"class":48,"line":693},[46,82730,53752],{"class":56},[46,82732,53767],{"class":1361},[46,82734,53274],{"class":56},[19,82736,82737],{},[3514,82738],{"alt":41,"src":82739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[23999,82741,82743],{"id":82742},"_41052-array","4.10.5.2 Array",[19,82745,82746],{},"Array 是内置的构造函数，用于创建数组",[19,82748,82749],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[36,82751,82753],{"className":52601,"code":82752,"language":52603,"meta":41,"style":41},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[43,82754,82755,82760],{"__ignoreMap":41},[46,82756,82757],{"class":48,"line":49},[46,82758,82759],{"class":56},"const arr=new Array(3,5)\n",[46,82761,82762],{"class":48,"line":60},[46,82763,82764],{"class":56},"console.log(arr)  \u002F\u002F[3,5]\n",[19,82766,82767],{},"Array的实例方法，这个方法是实例成员",[19,82769,82770],{},[3514,82771],{"alt":41,"src":82772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[24911,82774,82776],{"id":82775},"_410521-reduce","4.10.5.2.1 reduce",[19,82778,82779],{},[3514,82780],{"alt":41,"src":82781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[36,82783,82785],{"className":1350,"code":82784,"language":1352,"meta":41,"style":41},"\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",[43,82786,82787,82795,82803,82808,82813,82818,82823,82827,82832,82837,82842,82846,82851,82856,82860,82865,82870,82875,82883],{"__ignoreMap":41},[46,82788,82789,82791,82793],{"class":48,"line":49},[46,82790,821],{"class":56},[46,82792,53767],{"class":1361},[46,82794,53274],{"class":56},[46,82796,82797,82799,82801],{"class":48,"line":60},[46,82798,54111],{"class":56},[46,82800,53780],{"class":1361},[46,82802,53274],{"class":56},[46,82804,82805],{"class":48,"line":200},[46,82806,82807],{"class":56},"    const arr = [1, 5, 8]\n",[46,82809,82810],{"class":48,"line":211},[46,82811,82812],{"class":56},"    \u002F\u002F 1.没有初始值\n",[46,82814,82815],{"class":48,"line":222},[46,82816,82817],{"class":56},"    const total = arr.reduce(function (prev, current) {\n",[46,82819,82820],{"class":48,"line":636},[46,82821,82822],{"class":56},"      return prev + current\n",[46,82824,82825],{"class":48,"line":641},[46,82826,35434],{"class":56},[46,82828,82829],{"class":48,"line":653},[46,82830,82831],{"class":56},"    console.log(total)   \u002F\u002F14\n",[46,82833,82834],{"class":48,"line":659},[46,82835,82836],{"class":56},"    \u002F\u002F 2.有初始值\n",[46,82838,82839],{"class":48,"line":665},[46,82840,82841],{"class":56},"    const total1 = arr.reduce(function (prev, current) {\n",[46,82843,82844],{"class":48,"line":670},[46,82845,82822],{"class":56},[46,82847,82848],{"class":48,"line":676},[46,82849,82850],{"class":56},"    }, 10)\n",[46,82852,82853],{"class":48,"line":682},[46,82854,82855],{"class":56},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[46,82857,82858],{"class":48,"line":688},[46,82859,616],{"emptyLinePlaceholder":615},[46,82861,82862],{"class":48,"line":693},[46,82863,82864],{"class":56},"    \u002F\u002F 3.箭头函数写法\n",[46,82866,82867],{"class":48,"line":699},[46,82868,82869],{"class":56},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[46,82871,82872],{"class":48,"line":705},[46,82873,82874],{"class":56},"    console.log(total2)   \u002F\u002F24\n",[46,82876,82877,82879,82881],{"class":48,"line":711},[46,82878,54384],{"class":56},[46,82880,53780],{"class":1361},[46,82882,53274],{"class":56},[46,82884,82885,82887,82889],{"class":48,"line":717},[46,82886,53752],{"class":56},[46,82888,53767],{"class":1361},[46,82890,53274],{"class":56},[19,82892,82893],{},"执行过程：",[23,82895,82896,82899,82902],{},[26,82897,82898],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[26,82900,82901],{},"每一次循环，把返回值给作为下一次循环的上一次值",[26,82903,82904],{},"如果有起始值，则起始值作为上一次值",[36,82906,82908],{"className":1350,"code":82907,"language":1352,"meta":41,"style":41},"\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",[43,82909,82910,82918,82926,82930,82934,82938,82942,82946,82950,82955,82960,82965,82970,82975,82979,82983,82987,82991,82995,82999,83004,83008,83013,83017,83022,83027,83031,83035,83039,83047],{"__ignoreMap":41},[46,82911,82912,82914,82916],{"class":48,"line":49},[46,82913,821],{"class":56},[46,82915,53767],{"class":1361},[46,82917,53274],{"class":56},[46,82919,82920,82922,82924],{"class":48,"line":60},[46,82921,54111],{"class":56},[46,82923,53780],{"class":1361},[46,82925,53274],{"class":56},[46,82927,82928],{"class":48,"line":200},[46,82929,82807],{"class":56},[46,82931,82932],{"class":48,"line":211},[46,82933,82812],{"class":56},[46,82935,82936],{"class":48,"line":222},[46,82937,82817],{"class":56},[46,82939,82940],{"class":48,"line":636},[46,82941,82822],{"class":56},[46,82943,82944],{"class":48,"line":641},[46,82945,35434],{"class":56},[46,82947,82948],{"class":48,"line":653},[46,82949,82831],{"class":56},[46,82951,82952],{"class":48,"line":659},[46,82953,82954],{"class":56},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[46,82956,82957],{"class":48,"line":665},[46,82958,82959],{"class":56},"    \u002F\u002F     1              5                    6\n",[46,82961,82962],{"class":48,"line":670},[46,82963,82964],{"class":56},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[46,82966,82967],{"class":48,"line":676},[46,82968,82969],{"class":56},"    \u002F\u002F     6              8                    14\n",[46,82971,82972],{"class":48,"line":682},[46,82973,82974],{"class":56},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[46,82976,82977],{"class":48,"line":688},[46,82978,82836],{"class":56},[46,82980,82981],{"class":48,"line":693},[46,82982,82841],{"class":56},[46,82984,82985],{"class":48,"line":699},[46,82986,82822],{"class":56},[46,82988,82989],{"class":48,"line":705},[46,82990,82850],{"class":56},[46,82992,82993],{"class":48,"line":711},[46,82994,82855],{"class":56},[46,82996,82997],{"class":48,"line":717},[46,82998,82954],{"class":56},[46,83000,83001],{"class":48,"line":723},[46,83002,83003],{"class":56},"    \u002F\u002F     10             1                     11\n",[46,83005,83006],{"class":48,"line":729},[46,83007,82964],{"class":56},[46,83009,83010],{"class":48,"line":735},[46,83011,83012],{"class":56},"    \u002F\u002F     11             5                    16\n",[46,83014,83015],{"class":48,"line":740},[46,83016,82964],{"class":56},[46,83018,83019],{"class":48,"line":745},[46,83020,83021],{"class":56},"    \u002F\u002F     16             8                    24\n",[46,83023,83024],{"class":48,"line":763},[46,83025,83026],{"class":56},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[46,83028,83029],{"class":48,"line":778},[46,83030,82864],{"class":56},[46,83032,83033],{"class":48,"line":789},[46,83034,82869],{"class":56},[46,83036,83037],{"class":48,"line":794},[46,83038,82874],{"class":56},[46,83040,83041,83043,83045],{"class":48,"line":806},[46,83042,54384],{"class":56},[46,83044,53780],{"class":1361},[46,83046,53274],{"class":56},[46,83048,83049,83051,83053],{"class":48,"line":829},[46,83050,53752],{"class":56},[46,83052,53767],{"class":1361},[46,83054,53274],{"class":56},[24911,83056,83058],{"id":83057},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[19,83060,83061],{},[3514,83062],{"alt":41,"src":83063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[36,83065,83067],{"className":1350,"code":83066,"language":1352,"meta":41,"style":41},"\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",[43,83068,83069,83077,83085,83090,83095,83100,83105,83109,83114,83119,83124,83129,83134,83139,83143,83148,83152,83157,83165],{"__ignoreMap":41},[46,83070,83071,83073,83075],{"class":48,"line":49},[46,83072,821],{"class":56},[46,83074,53767],{"class":1361},[46,83076,53274],{"class":56},[46,83078,83079,83081,83083],{"class":48,"line":60},[46,83080,54111],{"class":56},[46,83082,53780],{"class":1361},[46,83084,53274],{"class":56},[46,83086,83087],{"class":48,"line":200},[46,83088,83089],{"class":56},"    const arr = [\n",[46,83091,83092],{"class":48,"line":211},[46,83093,83094],{"class":56},"      { name: '张三', salary: 10000 },\n",[46,83096,83097],{"class":48,"line":222},[46,83098,83099],{"class":56},"      { name: '李四', salary: 10000 },\n",[46,83101,83102],{"class":48,"line":636},[46,83103,83104],{"class":56},"      { name: '王五', salary: 10000 }\n",[46,83106,83107],{"class":48,"line":641},[46,83108,55074],{"class":56},[46,83110,83111],{"class":48,"line":653},[46,83112,83113],{"class":56},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[46,83115,83116],{"class":48,"line":659},[46,83117,83118],{"class":56},"    \u002F\u002F prev是累计值\n",[46,83120,83121],{"class":48,"line":665},[46,83122,83123],{"class":56},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[46,83125,83126],{"class":48,"line":670},[46,83127,83128],{"class":56},"    console.log(total)\n",[46,83130,83131],{"class":48,"line":676},[46,83132,83133],{"class":56},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[46,83135,83136],{"class":48,"line":682},[46,83137,83138],{"class":56},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[46,83140,83141],{"class":48,"line":688},[46,83142,83133],{"class":56},[46,83144,83145],{"class":48,"line":693},[46,83146,83147],{"class":56},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[46,83149,83150],{"class":48,"line":699},[46,83151,83133],{"class":56},[46,83153,83154],{"class":48,"line":705},[46,83155,83156],{"class":56},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[46,83158,83159,83161,83163],{"class":48,"line":711},[46,83160,54384],{"class":56},[46,83162,53780],{"class":1361},[46,83164,53274],{"class":56},[46,83166,83167,83169,83171],{"class":48,"line":717},[46,83168,53752],{"class":56},[46,83170,53767],{"class":1361},[46,83172,53274],{"class":56},[24911,83174,83176],{"id":83175},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[19,83178,83179],{},[3514,83180],{"alt":41,"src":83181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[19,83183,83184],{},[3514,83185],{"alt":41,"src":83186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[23,83188,83189],{},[26,83190,83191],{},"find()",[19,83193,83194],{},"循环查找，找到第一个就ok",[19,83196,83197],{},[2426,83198,83201],{"href":83199,"rel":83200},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[25862],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[36,83203,83205],{"className":52601,"code":83204,"language":52603,"meta":41,"style":41},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[43,83206,83207,83212,83217],{"__ignoreMap":41},[46,83208,83209],{"class":48,"line":49},[46,83210,83211],{"class":56},"const array1 = [5, 12, 8, 130, 44]\n",[46,83213,83214],{"class":48,"line":60},[46,83215,83216],{"class":56},"const found = array1.find((element) => element > 10)\n",[46,83218,83219],{"class":48,"line":200},[46,83220,83221],{"class":56},"console.log(found)  \u002F\u002F12\n",[19,83223,83224,83226,83227,83232,83233,83236,83237,83239,83240,83245,83246,83248,83249,83251,83252,83254,83255],{},[43,83225,83191],{}," 方法是一个",[2426,83228,83231],{"href":83229,"rel":83230},"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",[25862],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[43,83234,83235],{},"callbackFn"," 函数，直到 ",[43,83238,83235],{}," 返回一个",[2426,83241,83244],{"href":83242,"rel":83243},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[25862],"真值","。然后 ",[43,83247,83191],{}," 返回该元素并停止迭代数组。如果 ",[43,83250,83235],{}," 从未返回真值，则 ",[43,83253,83191],{}," 返回 ",[43,83256,83257],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[36,83259,83261],{"className":1350,"code":83260,"language":1352,"meta":41,"style":41},"\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",[43,83262,83263,83271,83279,83284,83289,83294,83298,83303,83308,83312,83317,83322,83326,83330,83335,83340,83344,83348,83353,83358,83363,83368,83373,83377,83382,83387,83392,83397,83401,83406,83414],{"__ignoreMap":41},[46,83264,83265,83267,83269],{"class":48,"line":49},[46,83266,821],{"class":56},[46,83268,53767],{"class":1361},[46,83270,53274],{"class":56},[46,83272,83273,83275,83277],{"class":48,"line":60},[46,83274,54111],{"class":56},[46,83276,53780],{"class":1361},[46,83278,53274],{"class":56},[46,83280,83281],{"class":48,"line":200},[46,83282,83283],{"class":56},"    const arr = ['red', 'blue', 'green']\n",[46,83285,83286],{"class":48,"line":211},[46,83287,83288],{"class":56},"    const found = arr.find(item => item === 'pink')\n",[46,83290,83291],{"class":48,"line":222},[46,83292,83293],{"class":56},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[46,83295,83296],{"class":48,"line":636},[46,83297,616],{"emptyLinePlaceholder":615},[46,83299,83300],{"class":48,"line":641},[46,83301,83302],{"class":56},"    \u002F\u002F 使用场景，用于查找数据\n",[46,83304,83305],{"class":48,"line":653},[46,83306,83307],{"class":56},"    const arr1 = [\n",[46,83309,83310],{"class":48,"line":659},[46,83311,81351],{"class":56},[46,83313,83314],{"class":48,"line":665},[46,83315,83316],{"class":56},"        name: '小米',\n",[46,83318,83319],{"class":48,"line":670},[46,83320,83321],{"class":56},"        price: 1999\n",[46,83323,83324],{"class":48,"line":676},[46,83325,79857],{"class":56},[46,83327,83328],{"class":48,"line":682},[46,83329,81351],{"class":56},[46,83331,83332],{"class":48,"line":688},[46,83333,83334],{"class":56},"        name: '华为',\n",[46,83336,83337],{"class":48,"line":693},[46,83338,83339],{"class":56},"        price: 3999\n",[46,83341,83342],{"class":48,"line":699},[46,83343,54365],{"class":56},[46,83345,83346],{"class":48,"line":705},[46,83347,55074],{"class":56},[46,83349,83350],{"class":48,"line":711},[46,83351,83352],{"class":56},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[46,83354,83355],{"class":48,"line":717},[46,83356,83357],{"class":56},"    \u002F\u002F const found1 = arr1.find(item => {\n",[46,83359,83360],{"class":48,"line":723},[46,83361,83362],{"class":56},"    \u002F\u002F   if (item.name === '小米') {\n",[46,83364,83365],{"class":48,"line":729},[46,83366,83367],{"class":56},"    \u002F\u002F     return item\n",[46,83369,83370],{"class":48,"line":735},[46,83371,83372],{"class":56},"    \u002F\u002F   }\n",[46,83374,83375],{"class":48,"line":740},[46,83376,65255],{"class":56},[46,83378,83379],{"class":48,"line":745},[46,83380,83381],{"class":56},"    \u002F\u002F 另一种写法\n",[46,83383,83384],{"class":48,"line":763},[46,83385,83386],{"class":56},"    const found1 = arr1.find(item => {\n",[46,83388,83389],{"class":48,"line":778},[46,83390,83391],{"class":56},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[46,83393,83394],{"class":48,"line":789},[46,83395,83396],{"class":56},"      return item.name = '小米'\n",[46,83398,83399],{"class":48,"line":794},[46,83400,35434],{"class":56},[46,83402,83403],{"class":48,"line":806},[46,83404,83405],{"class":56},"    console.log(found1)\n",[46,83407,83408,83410,83412],{"class":48,"line":829},[46,83409,54384],{"class":56},[46,83411,53780],{"class":1361},[46,83413,53274],{"class":56},[46,83415,83416,83418,83420],{"class":48,"line":840},[46,83417,53752],{"class":56},[46,83419,53767],{"class":1361},[46,83421,53274],{"class":56},[19,83423,83424],{},[3514,83425],{"alt":41,"src":83426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[19,83428,83429],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[23,83431,83432],{"start":60},[26,83433,83434],{},"every()返回的是布尔值",[19,83436,83437],{},[2426,83438,83441],{"href":83439,"rel":83440},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[25862],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[19,83443,83444],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[19,83446,83447],{},"some是只有有一个就没问题",[19,83449,83450],{},"every是必须全是才行",[36,83452,83456],{"className":83453,"code":83454,"language":83455,"meta":41,"style":41},"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",[43,83457,83458,83474,83488,83492,83501],{"__ignoreMap":41},[46,83459,83460,83462,83465,83467,83469,83472],{"class":48,"line":49},[46,83461,56414],{"class":52},[46,83463,83464],{"class":56}," isBigEnough(element, ",[46,83466,76023],{"class":52},[46,83468,448],{"class":56},[46,83470,83471],{"class":52},"array",[46,83473,14445],{"class":56},[46,83475,83476,83479,83482,83484,83486],{"class":48,"line":60},[46,83477,83478],{"class":52},"  return",[46,83480,83481],{"class":56}," element ",[46,83483,3750],{"class":52},[46,83485,4068],{"class":180},[46,83487,3345],{"class":56},[46,83489,83490],{"class":48,"line":200},[46,83491,3616],{"class":56},[46,83493,83494,83497,83499],{"class":48,"line":211},[46,83495,83496],{"class":56},"[12, 5, 8, 130, 44].every(isBigEnough); ",[46,83498,35303],{"class":52},[46,83500,56481],{"class":56},[46,83502,83503,83506,83508],{"class":48,"line":222},[46,83504,83505],{"class":56},"[12, 54, 18, 130, 44].every(isBigEnough); ",[46,83507,35303],{"class":52},[46,83509,59905],{"class":56},[36,83511,83513],{"className":1350,"code":83512,"language":1352,"meta":41,"style":41},"\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",[43,83514,83515,83523,83531,83536,83540,83545,83550,83558],{"__ignoreMap":41},[46,83516,83517,83519,83521],{"class":48,"line":49},[46,83518,821],{"class":56},[46,83520,53767],{"class":1361},[46,83522,53274],{"class":56},[46,83524,83525,83527,83529],{"class":48,"line":60},[46,83526,54111],{"class":56},[46,83528,53780],{"class":1361},[46,83530,53274],{"class":56},[46,83532,83533],{"class":48,"line":200},[46,83534,83535],{"class":56},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[46,83537,83538],{"class":48,"line":211},[46,83539,80287],{"class":56},[46,83541,83542],{"class":48,"line":222},[46,83543,83544],{"class":56},"    const flag = arr.every(item => item >= 10)\n",[46,83546,83547],{"class":48,"line":636},[46,83548,83549],{"class":56},"    console.log(flag)    \u002F\u002Ftrue\n",[46,83551,83552,83554,83556],{"class":48,"line":641},[46,83553,54384],{"class":56},[46,83555,53780],{"class":1361},[46,83557,53274],{"class":56},[46,83559,83560,83562,83564],{"class":48,"line":653},[46,83561,53752],{"class":56},[46,83563,53767],{"class":1361},[46,83565,53274],{"class":56},[36,83567,83569],{"className":1350,"code":83568,"language":1352,"meta":41,"style":41},"\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",[43,83570,83571,83579,83587,83591,83596,83601,83606,83614],{"__ignoreMap":41},[46,83572,83573,83575,83577],{"class":48,"line":49},[46,83574,821],{"class":56},[46,83576,53767],{"class":1361},[46,83578,53274],{"class":56},[46,83580,83581,83583,83585],{"class":48,"line":60},[46,83582,54111],{"class":56},[46,83584,53780],{"class":1361},[46,83586,53274],{"class":56},[46,83588,83589],{"class":48,"line":200},[46,83590,83535],{"class":56},[46,83592,83593],{"class":48,"line":211},[46,83594,83595],{"class":56},"    const arr = [10, 0, 5]\n",[46,83597,83598],{"class":48,"line":222},[46,83599,83600],{"class":56},"    const flag = arr.some(item => item >= 10)\n",[46,83602,83603],{"class":48,"line":636},[46,83604,83605],{"class":56},"    console.log(flag)   \u002F\u002Ftrue\n",[46,83607,83608,83610,83612],{"class":48,"line":641},[46,83609,54384],{"class":56},[46,83611,53780],{"class":1361},[46,83613,53274],{"class":56},[46,83615,83616,83618,83620],{"class":48,"line":653},[46,83617,53752],{"class":56},[46,83619,53767],{"class":1361},[46,83621,53274],{"class":56},[24911,83623,83625],{"id":83624},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[19,83627,83628],{},[3514,83629],{"alt":41,"src":83630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[36,83632,83634],{"className":52601,"code":83633,"language":52603,"meta":41,"style":41},"\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",[43,83635,83636,83646,83660,83664,83672,83686,83706,83718,83726,83733,83745,83757,83769,83781,83791,83801,83805,83813,83821,83825,83833,83845,83853,83875,83880,83885,83918,83926,83934,83938],{"__ignoreMap":41},[46,83637,83638,83640,83642,83644],{"class":48,"line":49},[46,83639,53265],{"class":56},[46,83641,53268],{"class":1361},[46,83643,53271],{"class":169},[46,83645,53274],{"class":56},[46,83647,83648,83650,83652,83654,83656,83658],{"class":48,"line":60},[46,83649,821],{"class":56},[46,83651,52603],{"class":1361},[46,83653,53283],{"class":169},[46,83655,79],{"class":56},[46,83657,53288],{"class":173},[46,83659,53274],{"class":56},[46,83661,83662],{"class":48,"line":200},[46,83663,616],{"emptyLinePlaceholder":615},[46,83665,83666,83668,83670],{"class":48,"line":211},[46,83667,821],{"class":56},[46,83669,53301],{"class":1361},[46,83671,53274],{"class":56},[46,83673,83674,83676,83678,83680,83682,83684],{"class":48,"line":222},[46,83675,54111],{"class":56},[46,83677,53311],{"class":1361},[46,83679,53314],{"class":169},[46,83681,79],{"class":56},[46,83683,53319],{"class":173},[46,83685,53274],{"class":56},[46,83687,83688,83690,83692,83694,83696,83698,83700,83702,83704],{"class":48,"line":636},[46,83689,54111],{"class":56},[46,83691,53311],{"class":1361},[46,83693,1364],{"class":169},[46,83695,79],{"class":56},[46,83697,53358],{"class":173},[46,83699,53338],{"class":169},[46,83701,79],{"class":56},[46,83703,53365],{"class":173},[46,83705,53274],{"class":56},[46,83707,83708,83710,83712,83714,83716],{"class":48,"line":641},[46,83709,54111],{"class":56},[46,83711,53374],{"class":1361},[46,83713,53377],{"class":56},[46,83715,53374],{"class":1361},[46,83717,53274],{"class":56},[46,83719,83720,83722,83724],{"class":48,"line":653},[46,83721,54111],{"class":56},[46,83723,2098],{"class":1361},[46,83725,53274],{"class":56},[46,83727,83728,83731],{"class":48,"line":659},[46,83729,83730],{"class":1361},"    div",[46,83732,17573],{"class":56},[46,83734,83735,83737,83739,83741,83743],{"class":48,"line":665},[46,83736,56736],{"class":180},[46,83738,53404],{"class":56},[46,83740,3762],{"class":180},[46,83742,53459],{"class":52},[46,83744,3345],{"class":56},[46,83746,83747,83749,83751,83753,83755],{"class":48,"line":670},[46,83748,56750],{"class":180},[46,83750,53404],{"class":56},[46,83752,2588],{"class":180},[46,83754,53459],{"class":52},[46,83756,3345],{"class":56},[46,83758,83759,83761,83763,83765,83767],{"class":48,"line":676},[46,83760,59324],{"class":180},[46,83762,53404],{"class":56},[46,83764,2588],{"class":180},[46,83766,53459],{"class":52},[46,83768,3345],{"class":56},[46,83770,83771,83773,83775,83777,83779],{"class":48,"line":682},[46,83772,67098],{"class":180},[46,83774,53404],{"class":56},[46,83776,2685],{"class":180},[46,83778,53459],{"class":52},[46,83780,3345],{"class":56},[46,83782,83783,83785,83787,83789],{"class":48,"line":688},[46,83784,59251],{"class":180},[46,83786,53404],{"class":56},[46,83788,53559],{"class":180},[46,83790,3345],{"class":56},[46,83792,83793,83795,83797,83799],{"class":48,"line":693},[46,83794,56849],{"class":180},[46,83796,53404],{"class":56},[46,83798,53612],{"class":180},[46,83800,3345],{"class":56},[46,83802,83803],{"class":48,"line":699},[46,83804,4217],{"class":56},[46,83806,83807,83809,83811],{"class":48,"line":705},[46,83808,54384],{"class":56},[46,83810,2098],{"class":1361},[46,83812,53274],{"class":56},[46,83814,83815,83817,83819],{"class":48,"line":711},[46,83816,53752],{"class":56},[46,83818,53301],{"class":1361},[46,83820,53274],{"class":56},[46,83822,83823],{"class":48,"line":717},[46,83824,616],{"emptyLinePlaceholder":615},[46,83826,83827,83829,83831],{"class":48,"line":723},[46,83828,821],{"class":56},[46,83830,53767],{"class":1361},[46,83832,53274],{"class":56},[46,83834,83835,83837,83839,83841,83843],{"class":48,"line":729},[46,83836,54111],{"class":56},[46,83838,53578],{"class":1361},[46,83840,57279],{"class":56},[46,83842,53578],{"class":1361},[46,83844,53274],{"class":56},[46,83846,83847,83849,83851],{"class":48,"line":735},[46,83848,54111],{"class":56},[46,83850,53780],{"class":1361},[46,83852,53274],{"class":56},[46,83854,83855,83857,83860,83862,83865,83868,83870,83873],{"class":48,"line":740},[46,83856,13225],{"class":52},[46,83858,83859],{"class":180}," spec",[46,83861,647],{"class":52},[46,83863,83864],{"class":56}," { size: ",[46,83866,83867],{"class":173},"'40cm*40cm'",[46,83869,57429],{"class":56},[46,83871,83872],{"class":173},"'黑色'",[46,83874,57569],{"class":56},[46,83876,83877],{"class":48,"line":745},[46,83878,83879],{"class":2253},"    \u002F\u002F const arr = Object.values(spec)\n",[46,83881,83882],{"class":48,"line":763},[46,83883,83884],{"class":2253},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[46,83886,83887,83889,83891,83893,83896,83898,83900,83903,83906,83909,83911,83913,83916],{"class":48,"line":778},[46,83888,54374],{"class":56},[46,83890,56364],{"class":169},[46,83892,1152],{"class":56},[46,83894,83895],{"class":173},"'div'",[46,83897,76214],{"class":56},[46,83899,79],{"class":52},[46,83901,83902],{"class":56}," Object.",[46,83904,83905],{"class":169},"values",[46,83907,83908],{"class":56},"(spec).",[46,83910,76188],{"class":169},[46,83912,1152],{"class":56},[46,83914,83915],{"class":173},"'\u002F'",[46,83917,459],{"class":56},[46,83919,83920,83922,83924],{"class":48,"line":789},[46,83921,54384],{"class":56},[46,83923,53780],{"class":1361},[46,83925,53274],{"class":56},[46,83927,83928,83930,83932],{"class":48,"line":794},[46,83929,53752],{"class":56},[46,83931,53767],{"class":1361},[46,83933,53274],{"class":56},[46,83935,83936],{"class":48,"line":806},[46,83937,616],{"emptyLinePlaceholder":615},[46,83939,83940,83942,83944],{"class":48,"line":829},[46,83941,53752],{"class":56},[46,83943,52603],{"class":1361},[46,83945,53274],{"class":56},[19,83947,83948],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[24911,83950,83952],{"id":83951},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[19,83954,83955],{},"静态方法，将伪数组转换为真数组",[19,83957,83958],{},[3514,83959],{"alt":41,"src":83960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[36,83962,83964],{"className":1350,"code":83963,"language":1352,"meta":41,"style":41},"\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",[43,83965,83966,83974,83982,83994,84006,84018,84026,84034,84039,84044,84049,84054,84062],{"__ignoreMap":41},[46,83967,83968,83970,83972],{"class":48,"line":49},[46,83969,821],{"class":56},[46,83971,53767],{"class":1361},[46,83973,53274],{"class":56},[46,83975,83976,83978,83980],{"class":48,"line":60},[46,83977,54111],{"class":56},[46,83979,3191],{"class":1361},[46,83981,53274],{"class":56},[46,83983,83984,83986,83988,83990,83992],{"class":48,"line":200},[46,83985,53308],{"class":56},[46,83987,26],{"class":1361},[46,83989,57279],{"class":56},[46,83991,26],{"class":1361},[46,83993,53274],{"class":56},[46,83995,83996,83998,84000,84002,84004],{"class":48,"line":211},[46,83997,53308],{"class":56},[46,83999,26],{"class":1361},[46,84001,57279],{"class":56},[46,84003,26],{"class":1361},[46,84005,53274],{"class":56},[46,84007,84008,84010,84012,84014,84016],{"class":48,"line":222},[46,84009,53308],{"class":56},[46,84011,26],{"class":1361},[46,84013,57279],{"class":56},[46,84015,26],{"class":1361},[46,84017,53274],{"class":56},[46,84019,84020,84022,84024],{"class":48,"line":636},[46,84021,54384],{"class":56},[46,84023,3191],{"class":1361},[46,84025,53274],{"class":56},[46,84027,84028,84030,84032],{"class":48,"line":641},[46,84029,54111],{"class":56},[46,84031,53780],{"class":1361},[46,84033,53274],{"class":56},[46,84035,84036],{"class":48,"line":653},[46,84037,84038],{"class":56},"    const lis = document.querySelectorAll('li')\n",[46,84040,84041],{"class":48,"line":659},[46,84042,84043],{"class":56},"    const liss = Array.from(lis)\n",[46,84045,84046],{"class":48,"line":665},[46,84047,84048],{"class":56},"    liss.pop()\n",[46,84050,84051],{"class":48,"line":670},[46,84052,84053],{"class":56},"    console.log(liss)\n",[46,84055,84056,84058,84060],{"class":48,"line":676},[46,84057,54384],{"class":56},[46,84059,53780],{"class":1361},[46,84061,53274],{"class":56},[46,84063,84064,84066,84068],{"class":48,"line":682},[46,84065,53752],{"class":56},[46,84067,53767],{"class":1361},[46,84069,53274],{"class":56},[19,84071,84072],{},[3514,84073],{"alt":41,"src":84074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[23999,84076,84078],{"id":84077},"_41053-string","4.10.5.3 String",[19,84080,84081],{},[3514,84082],{"alt":41,"src":84083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[24911,84085,84087],{"id":84086},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[36,84089,84091],{"className":1350,"code":84090,"language":1352,"meta":41,"style":41},"\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",[43,84092,84093,84101,84109,84114,84119,84124,84128,84133,84138,84143,84151],{"__ignoreMap":41},[46,84094,84095,84097,84099],{"class":48,"line":49},[46,84096,821],{"class":56},[46,84098,53767],{"class":1361},[46,84100,53274],{"class":56},[46,84102,84103,84105,84107],{"class":48,"line":60},[46,84104,54111],{"class":56},[46,84106,53780],{"class":1361},[46,84108,53274],{"class":56},[46,84110,84111],{"class":48,"line":200},[46,84112,84113],{"class":56},"    \u002F\u002F 把字符串转化为数组\n",[46,84115,84116],{"class":48,"line":211},[46,84117,84118],{"class":56},"    const str = 'pink,red'\n",[46,84120,84121],{"class":48,"line":222},[46,84122,84123],{"class":56},"    const arr = str.split(',')\n",[46,84125,84126],{"class":48,"line":636},[46,84127,82602],{"class":56},[46,84129,84130],{"class":48,"line":641},[46,84131,84132],{"class":56},"    const str1 = '2025-8-25'\n",[46,84134,84135],{"class":48,"line":653},[46,84136,84137],{"class":56},"    const arr1 = str1.split('-')\n",[46,84139,84140],{"class":48,"line":659},[46,84141,84142],{"class":56},"    console.log(arr1)\n",[46,84144,84145,84147,84149],{"class":48,"line":665},[46,84146,54384],{"class":56},[46,84148,53780],{"class":1361},[46,84150,53274],{"class":56},[46,84152,84153,84155,84157],{"class":48,"line":670},[46,84154,53752],{"class":56},[46,84156,53767],{"class":1361},[46,84158,53274],{"class":56},[24911,84160,84162],{"id":84161},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[19,84164,7197],{},[19,84166,84167],{},"substring(indexStart)",[19,84169,84170],{},"substring(indexStart, indexEnd)",[3191,84172,84173,84184,84196,84206],{},[26,84174,84175,84176,84179,84180,84183],{},"如果省略了 ",[43,84177,84178],{},"indexEnd","，则 ",[43,84181,84182],{},"substring()"," 提取字符直到字符串的末尾",[26,84185,84186,84187,84190,84191,84179,84193,84195],{},"如果 ",[43,84188,84189],{},"indexStart"," 等于 ",[43,84192,84178],{},[43,84194,84182],{}," 返回一个空字符串",[26,84197,84186,84198,84200,84201,84179,84203,84205],{},[43,84199,84189],{}," 大于 ",[43,84202,84178],{},[43,84204,84182],{}," 的效果就像交换了这两个参数一样",[26,84207,84208],{},"结束的索引号不包含想要截取的部分",[36,84210,84212],{"className":83453,"code":84211,"language":83455,"meta":41,"style":41},"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",[43,84213,84214,84226,84230,84264,84294,84298,84329,84333,84360,84390,84420,84424,84455],{"__ignoreMap":41},[46,84215,84216,84219,84221,84224],{"class":48,"line":49},[46,84217,84218],{"class":56},"const anyString ",[46,84220,79],{"class":52},[46,84222,84223],{"class":173}," \"Mozilla\"",[46,84225,3345],{"class":56},[46,84227,84228],{"class":48,"line":60},[46,84229,616],{"emptyLinePlaceholder":615},[46,84231,84232,84235,84237,84239,84241,84244,84246,84249,84251,84253,84255,84257,84259,84261],{"class":48,"line":200},[46,84233,84234],{"class":180},"console",[46,84236,2744],{"class":56},[46,84238,60212],{"class":180},[46,84240,1152],{"class":56},[46,84242,84243],{"class":180},"anyString",[46,84245,2744],{"class":56},[46,84247,84248],{"class":180},"substring",[46,84250,1152],{"class":56},[46,84252,2379],{"class":180},[46,84254,448],{"class":56},[46,84256,2405],{"class":180},[46,84258,77218],{"class":56},[46,84260,35303],{"class":52},[46,84262,84263],{"class":173}," 'M'\n",[46,84265,84266,84268,84270,84272,84274,84276,84278,84280,84282,84284,84286,84288,84290,84292],{"class":48,"line":211},[46,84267,84234],{"class":180},[46,84269,2744],{"class":56},[46,84271,60212],{"class":180},[46,84273,1152],{"class":56},[46,84275,84243],{"class":180},[46,84277,2744],{"class":56},[46,84279,84248],{"class":180},[46,84281,1152],{"class":56},[46,84283,2405],{"class":180},[46,84285,448],{"class":56},[46,84287,2379],{"class":180},[46,84289,77218],{"class":56},[46,84291,35303],{"class":52},[46,84293,84263],{"class":173},[46,84295,84296],{"class":48,"line":222},[46,84297,616],{"emptyLinePlaceholder":615},[46,84299,84300,84302,84304,84306,84308,84310,84312,84314,84316,84318,84320,84322,84324,84326],{"class":48,"line":636},[46,84301,84234],{"class":180},[46,84303,2744],{"class":56},[46,84305,60212],{"class":180},[46,84307,1152],{"class":56},[46,84309,84243],{"class":180},[46,84311,2744],{"class":56},[46,84313,84248],{"class":180},[46,84315,1152],{"class":56},[46,84317,2379],{"class":180},[46,84319,448],{"class":56},[46,84321,2531],{"class":180},[46,84323,77218],{"class":56},[46,84325,35303],{"class":52},[46,84327,84328],{"class":173}," 'Mozill'\n",[46,84330,84331],{"class":48,"line":641},[46,84332,616],{"emptyLinePlaceholder":615},[46,84334,84335,84337,84339,84341,84343,84345,84347,84349,84351,84353,84355,84357],{"class":48,"line":653},[46,84336,84234],{"class":180},[46,84338,2744],{"class":56},[46,84340,60212],{"class":180},[46,84342,1152],{"class":56},[46,84344,84243],{"class":180},[46,84346,2744],{"class":56},[46,84348,84248],{"class":180},[46,84350,1152],{"class":56},[46,84352,2481],{"class":180},[46,84354,77218],{"class":56},[46,84356,35303],{"class":52},[46,84358,84359],{"class":173}," 'lla'\n",[46,84361,84362,84364,84366,84368,84370,84372,84374,84376,84378,84380,84382,84384,84386,84388],{"class":48,"line":659},[46,84363,84234],{"class":180},[46,84365,2744],{"class":56},[46,84367,60212],{"class":180},[46,84369,1152],{"class":56},[46,84371,84243],{"class":180},[46,84373,2744],{"class":56},[46,84375,84248],{"class":180},[46,84377,1152],{"class":56},[46,84379,2481],{"class":180},[46,84381,448],{"class":56},[46,84383,2556],{"class":180},[46,84385,77274],{"class":56},[46,84387,35303],{"class":52},[46,84389,84359],{"class":173},[46,84391,84392,84394,84396,84398,84400,84402,84404,84406,84408,84410,84412,84414,84416,84418],{"class":48,"line":665},[46,84393,84234],{"class":180},[46,84395,2744],{"class":56},[46,84397,60212],{"class":180},[46,84399,1152],{"class":56},[46,84401,84243],{"class":180},[46,84403,2744],{"class":56},[46,84405,84248],{"class":180},[46,84407,1152],{"class":56},[46,84409,2556],{"class":180},[46,84411,448],{"class":56},[46,84413,2481],{"class":180},[46,84415,77218],{"class":56},[46,84417,35303],{"class":52},[46,84419,84359],{"class":173},[46,84421,84422],{"class":48,"line":670},[46,84423,616],{"emptyLinePlaceholder":615},[46,84425,84426,84428,84430,84432,84434,84436,84438,84440,84442,84444,84446,84448,84450,84452],{"class":48,"line":676},[46,84427,84234],{"class":180},[46,84429,2744],{"class":56},[46,84431,60212],{"class":180},[46,84433,1152],{"class":56},[46,84435,84243],{"class":180},[46,84437,2744],{"class":56},[46,84439,84248],{"class":180},[46,84441,1152],{"class":56},[46,84443,2379],{"class":180},[46,84445,448],{"class":56},[46,84447,2556],{"class":180},[46,84449,77218],{"class":56},[46,84451,35303],{"class":52},[46,84453,84454],{"class":173}," 'Mozilla'\n",[46,84456,84457,84459,84461,84463,84465,84467,84469,84471,84473,84475,84477,84479,84481,84483],{"class":48,"line":682},[46,84458,84234],{"class":180},[46,84460,2744],{"class":56},[46,84462,60212],{"class":180},[46,84464,1152],{"class":56},[46,84466,84243],{"class":180},[46,84468,2744],{"class":56},[46,84470,84248],{"class":180},[46,84472,1152],{"class":56},[46,84474,2379],{"class":180},[46,84476,448],{"class":56},[46,84478,2633],{"class":180},[46,84480,77218],{"class":56},[46,84482,35303],{"class":52},[46,84484,84454],{"class":173},[24911,84486,84488],{"id":84487},"_410533-startswith","4.10.5.3.3 startsWith",[19,84490,84491,84494,84495,84500,84501,2006,84503],{},[43,84492,84493],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[2339,84496,84497],{},[43,84498,84499],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[43,84502,3414],{},[43,84504,67985],{},[36,84506,84508],{"className":79460,"code":84507,"language":79462,"meta":41,"style":41},"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",[43,84509,84510,84522,84541,84546,84566],{"__ignoreMap":41},[46,84511,84512,84514,84517,84519],{"class":48,"line":49},[46,84513,8805],{"class":52},[46,84515,84516],{"class":56}," str1 ",[46,84518,79],{"class":52},[46,84520,84521],{"class":173}," \"Saturday night plans\"\n",[46,84523,84524,84526,84528,84531,84534,84536,84539],{"class":48,"line":60},[46,84525,79497],{"class":56},[46,84527,60212],{"class":169},[46,84529,84530],{"class":56},"(str1.",[46,84532,84533],{"class":169},"startsWith",[46,84535,1152],{"class":56},[46,84537,84538],{"class":173},"\"Sat\"",[46,84540,32479],{"class":56},[46,84542,84543],{"class":48,"line":200},[46,84544,84545],{"class":2253},"\u002F\u002F Expected output: true\n",[46,84547,84548,84550,84552,84554,84556,84558,84560,84562,84564],{"class":48,"line":211},[46,84549,79497],{"class":56},[46,84551,60212],{"class":169},[46,84553,84530],{"class":56},[46,84555,84533],{"class":169},[46,84557,1152],{"class":56},[46,84559,84538],{"class":173},[46,84561,448],{"class":56},[46,84563,2266],{"class":180},[46,84565,32479],{"class":56},[46,84567,84568],{"class":48,"line":222},[46,84569,84570],{"class":2253},"\u002F\u002F Expected output: false\n",[36,84572,84574],{"className":52601,"code":84573,"language":52603,"meta":41,"style":41},"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",[43,84575,84576,84581,84586,84590,84595,84600],{"__ignoreMap":41},[46,84577,84578],{"class":48,"line":49},[46,84579,84580],{"class":56},"startsWith(searchString)\n",[46,84582,84583],{"class":48,"line":60},[46,84584,84585],{"class":56},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[46,84587,84588],{"class":48,"line":200},[46,84589,616],{"emptyLinePlaceholder":615},[46,84591,84592],{"class":48,"line":211},[46,84593,84594],{"class":56},"const str3 = 'pink老师上课中'\n",[46,84596,84597],{"class":48,"line":222},[46,84598,84599],{"class":56},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[46,84601,84602],{"class":48,"line":636},[46,84603,84604],{"class":56},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[24911,84606,84608],{"id":84607},"_410534-includes","4.10.5.3.4 includes",[19,84610,84611],{},"includes(searchString) includes(searchString, position)",[23,84613,84614],{},[26,84615,84616],{},"searchString:",[19,84618,84619,84620,84622,84623,84628,84629,84634,84635,23501,84638,84641,84642,84645],{},"一个要在 ",[43,84621,3354],{}," 中查找的字符串。",[2426,84624,84627],{"href":84625,"rel":84626},"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",[25862],"不能是正则表达式","。所有非正则表达式的值都会被",[2426,84630,84633],{"href":84631,"rel":84632},"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",[25862],"强制转换为字符串","，因此如果该参数被省略或传入 ",[43,84636,84637],{},"undefined",[43,84639,84640],{},"includes()"," 方法会在字符串中搜索 ",[43,84643,84644],{},"\"undefined\"","，这通常不是你想要的",[23,84647,84648],{"start":60},[26,84649,84650,3045],{},[43,84651,84652],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[19,84654,84655,84656,84659,84660],{},"在字符串中开始搜索 ",[43,84657,84658],{},"searchString"," 的位置。默认值为 ",[43,84661,2379],{},[23,84663,84664],{"start":200},[26,84665,84666],{},"返回值：",[19,84668,84669,84670,84672,84673,84677,84678],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[43,84671,84658],{}," 为空字符串的情况），则返回 ",[2339,84674,84675],{},[43,84676,3414],{}," ，否则返回 ",[2339,84679,84680],{},[43,84681,67985],{},[23,84683,84684],{"start":211},[26,84685,84686],{},"异常：",[19,84688,84186,84689,15797,84691,84695],{},[43,84690,84658],{},[2426,84692,84694],{"href":84625,"rel":84693},[25862],"是一个正则表达式","，则会抛出",[19,84697,84698],{},"只要是有就是true，不需要非得以谁开头结尾",[36,84700,84702],{"className":79460,"code":84701,"language":79462,"meta":41,"style":41},"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",[43,84703,84704,84715,84738,84757,84777,84799,84818],{"__ignoreMap":41},[46,84705,84706,84708,84710,84712],{"class":48,"line":49},[46,84707,8805],{"class":52},[46,84709,81740],{"class":56},[46,84711,79],{"class":52},[46,84713,84714],{"class":173}," \"To be, or not to be, that is the question.\"\n",[46,84716,84717,84719,84721,84724,84727,84729,84732,84735],{"class":48,"line":60},[46,84718,79497],{"class":56},[46,84720,60212],{"class":169},[46,84722,84723],{"class":56},"(str.",[46,84725,84726],{"class":169},"includes",[46,84728,1152],{"class":56},[46,84730,84731],{"class":173},"\"To be\"",[46,84733,84734],{"class":56},"))",[46,84736,84737],{"class":2253},"  \u002F\u002F true\n",[46,84739,84740,84742,84744,84746,84748,84750,84753,84755],{"class":48,"line":200},[46,84741,79497],{"class":56},[46,84743,60212],{"class":169},[46,84745,84723],{"class":56},[46,84747,84726],{"class":169},[46,84749,1152],{"class":56},[46,84751,84752],{"class":173},"\"question\"",[46,84754,84734],{"class":56},[46,84756,84737],{"class":2253},[46,84758,84759,84761,84763,84765,84767,84769,84772,84774],{"class":48,"line":211},[46,84760,79497],{"class":56},[46,84762,60212],{"class":169},[46,84764,84723],{"class":56},[46,84766,84726],{"class":169},[46,84768,1152],{"class":56},[46,84770,84771],{"class":173},"\"nonexistent\"",[46,84773,84734],{"class":56},[46,84775,84776],{"class":2253},"  \u002F\u002F false\n",[46,84778,84779,84781,84783,84785,84787,84789,84791,84793,84795,84797],{"class":48,"line":222},[46,84780,79497],{"class":56},[46,84782,60212],{"class":169},[46,84784,84723],{"class":56},[46,84786,84726],{"class":169},[46,84788,1152],{"class":56},[46,84790,84731],{"class":173},[46,84792,448],{"class":56},[46,84794,2405],{"class":180},[46,84796,84734],{"class":56},[46,84798,84776],{"class":2253},[46,84800,84801,84803,84805,84807,84809,84811,84814,84816],{"class":48,"line":636},[46,84802,79497],{"class":56},[46,84804,60212],{"class":169},[46,84806,84723],{"class":56},[46,84808,84726],{"class":169},[46,84810,1152],{"class":56},[46,84812,84813],{"class":173},"\"TO BE\"",[46,84815,84734],{"class":56},[46,84817,84776],{"class":2253},[46,84819,84820,84822,84824,84826,84828,84830,84832,84834],{"class":48,"line":641},[46,84821,79497],{"class":56},[46,84823,60212],{"class":169},[46,84825,84723],{"class":56},[46,84827,84726],{"class":169},[46,84829,1152],{"class":56},[46,84831,9665],{"class":173},[46,84833,84734],{"class":56},[46,84835,84737],{"class":2253},[24911,84837,84839],{"id":84838},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[36,84841,84843],{"className":1350,"code":84842,"language":1352,"meta":41,"style":41},"\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",[43,84844,84845,84853,84861,84866,84871,84876,84881,84886,84894],{"__ignoreMap":41},[46,84846,84847,84849,84851],{"class":48,"line":49},[46,84848,821],{"class":56},[46,84850,53767],{"class":1361},[46,84852,53274],{"class":56},[46,84854,84855,84857,84859],{"class":48,"line":60},[46,84856,54111],{"class":56},[46,84858,53780],{"class":1361},[46,84860,53274],{"class":56},[46,84862,84863],{"class":48,"line":200},[46,84864,84865],{"class":56},"    const num = 10\n",[46,84867,84868],{"class":48,"line":211},[46,84869,84870],{"class":56},"    \u002F\u002F 强制转换\n",[46,84872,84873],{"class":48,"line":222},[46,84874,84875],{"class":56},"    console.log(String(num))\n",[46,84877,84878],{"class":48,"line":636},[46,84879,84880],{"class":56},"    \u002F\u002F toString()方法转换\n",[46,84882,84883],{"class":48,"line":641},[46,84884,84885],{"class":56},"    console.log(num.toString())\n",[46,84887,84888,84890,84892],{"class":48,"line":653},[46,84889,54384],{"class":56},[46,84891,53780],{"class":1361},[46,84893,53274],{"class":56},[46,84895,84896,84898,84900],{"class":48,"line":659},[46,84897,53752],{"class":56},[46,84899,53767],{"class":1361},[46,84901,53274],{"class":56},[24911,84903,84905],{"id":84904},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[19,84907,84908],{},[3514,84909],{"alt":41,"src":84910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[36,84912,84914],{"className":52601,"code":84913,"language":52603,"meta":41,"style":41},"\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",[43,84915,84916,84926,84940,84944,84952,84966,84986,84998,85006,85010,85018,85030,85038,85050,85055,85060,85065,85112,85128,85136,85144,85148],{"__ignoreMap":41},[46,84917,84918,84920,84922,84924],{"class":48,"line":49},[46,84919,53265],{"class":56},[46,84921,53268],{"class":1361},[46,84923,53271],{"class":169},[46,84925,53274],{"class":56},[46,84927,84928,84930,84932,84934,84936,84938],{"class":48,"line":60},[46,84929,821],{"class":56},[46,84931,52603],{"class":1361},[46,84933,53283],{"class":169},[46,84935,79],{"class":56},[46,84937,53288],{"class":173},[46,84939,53274],{"class":56},[46,84941,84942],{"class":48,"line":200},[46,84943,616],{"emptyLinePlaceholder":615},[46,84945,84946,84948,84950],{"class":48,"line":211},[46,84947,821],{"class":56},[46,84949,53301],{"class":1361},[46,84951,53274],{"class":56},[46,84953,84954,84956,84958,84960,84962,84964],{"class":48,"line":222},[46,84955,54111],{"class":56},[46,84957,53311],{"class":1361},[46,84959,53314],{"class":169},[46,84961,79],{"class":56},[46,84963,53319],{"class":173},[46,84965,53274],{"class":56},[46,84967,84968,84970,84972,84974,84976,84978,84980,84982,84984],{"class":48,"line":636},[46,84969,54111],{"class":56},[46,84971,53311],{"class":1361},[46,84973,1364],{"class":169},[46,84975,79],{"class":56},[46,84977,53358],{"class":173},[46,84979,53338],{"class":169},[46,84981,79],{"class":56},[46,84983,53365],{"class":173},[46,84985,53274],{"class":56},[46,84987,84988,84990,84992,84994,84996],{"class":48,"line":641},[46,84989,54111],{"class":56},[46,84991,53374],{"class":1361},[46,84993,53377],{"class":56},[46,84995,53374],{"class":1361},[46,84997,53274],{"class":56},[46,84999,85000,85002,85004],{"class":48,"line":653},[46,85001,53752],{"class":56},[46,85003,53301],{"class":1361},[46,85005,53274],{"class":56},[46,85007,85008],{"class":48,"line":659},[46,85009,616],{"emptyLinePlaceholder":615},[46,85011,85012,85014,85016],{"class":48,"line":665},[46,85013,821],{"class":56},[46,85015,53767],{"class":1361},[46,85017,53274],{"class":56},[46,85019,85020,85022,85024,85026,85028],{"class":48,"line":670},[46,85021,54111],{"class":56},[46,85023,53578],{"class":1361},[46,85025,57279],{"class":56},[46,85027,53578],{"class":1361},[46,85029,53274],{"class":56},[46,85031,85032,85034,85036],{"class":48,"line":676},[46,85033,54111],{"class":56},[46,85035,53780],{"class":1361},[46,85037,53274],{"class":56},[46,85039,85040,85042,85045,85047],{"class":48,"line":682},[46,85041,13225],{"class":52},[46,85043,85044],{"class":180}," gift",[46,85046,647],{"class":52},[46,85048,85049],{"class":173}," '50g的茶叶，清洗球'\n",[46,85051,85052],{"class":48,"line":688},[46,85053,85054],{"class":2253},"    \u002F\u002F 1.把字符串拆分为数组\n",[46,85056,85057],{"class":48,"line":693},[46,85058,85059],{"class":2253},"    \u002F\u002F console.log(gift.split(','))\n",[46,85061,85062],{"class":48,"line":699},[46,85063,85064],{"class":2253},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[46,85066,85067,85069,85071,85073,85076,85079,85081,85084,85086,85088,85090,85092,85094,85097,85099,85102,85104,85106,85108,85110],{"class":48,"line":705},[46,85068,13225],{"class":52},[46,85070,75884],{"class":180},[46,85072,647],{"class":52},[46,85074,85075],{"class":56}," gift.",[46,85077,85078],{"class":169},"split",[46,85080,1152],{"class":56},[46,85082,85083],{"class":173},"'，'",[46,85085,32806],{"class":56},[46,85087,76009],{"class":169},[46,85089,1152],{"class":56},[46,85091,81760],{"class":439},[46,85093,81763],{"class":52},[46,85095,85096],{"class":173}," `\u003Cspan>【赠品】${",[46,85098,81760],{"class":56},[46,85100,85101],{"class":173},"}\u003C\u002Fspan>\u003Cbr>`",[46,85103,32806],{"class":56},[46,85105,76188],{"class":169},[46,85107,1152],{"class":56},[46,85109,76193],{"class":173},[46,85111,459],{"class":56},[46,85113,85114,85116,85118,85120,85122,85124,85126],{"class":48,"line":711},[46,85115,54374],{"class":56},[46,85117,56364],{"class":169},[46,85119,1152],{"class":56},[46,85121,83895],{"class":173},[46,85123,76214],{"class":56},[46,85125,79],{"class":52},[46,85127,75950],{"class":56},[46,85129,85130,85132,85134],{"class":48,"line":717},[46,85131,54384],{"class":56},[46,85133,53780],{"class":1361},[46,85135,53274],{"class":56},[46,85137,85138,85140,85142],{"class":48,"line":723},[46,85139,53752],{"class":56},[46,85141,53767],{"class":1361},[46,85143,53274],{"class":56},[46,85145,85146],{"class":48,"line":729},[46,85147,616],{"emptyLinePlaceholder":615},[46,85149,85150,85152,85154],{"class":48,"line":735},[46,85151,53752],{"class":56},[46,85153,52603],{"class":1361},[46,85155,53274],{"class":56},[23999,85157,85159],{"id":85158},"_41054-number","4.10.5.4 Number",[19,85161,85162],{},[3514,85163],{"alt":41,"src":85164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[19,85166,85167],{},"整数也可以进行toFixed来保留小数",[19,85169,85170],{},"比如：",[19,85172,85173],{},"const price=10",[19,85175,85176],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[23999,85178,85180],{"id":85179},"_41055-购物车展示","4.10.5.5 购物车展示",[19,85182,85183],{},[3514,85184],{"alt":41,"src":85185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[36,85187,85189],{"className":52601,"code":85188,"language":52603,"meta":41,"style":41},"\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",[43,85190,85191,85201,85215,85219,85227,85241,85261,85273,85281,85287,85297,85307,85317,85321,85325,85331,85343,85357,85361,85365,85371,85383,85399,85409,85425,85429,85433,85439,85449,85459,85463,85467,85475,85487,85499,85511,85515,85519,85527,85539,85543,85547,85558,85568,85580,85592,85602,85606,85610,85618,85627,85639,85649,85659,85663,85667,85675,85684,85691,85701,85713,85717,85721,85730,85740,85751,85763,85775,85779,85783,85792,85802,85813,85817,85821,85827,85839,85851,85861,85871,85889,85901,85905,85909,85918,85930,85940,85950,85962,85966,85974,85982,85986,85994,86008,86016,86030,86058,86066,86074,86084,86088,86096,86104,86113,86121,86130,86140,86144,86148,86156,86164,86173,86181,86189,86202,86206,86210,86218,86226,86235,86243,86251,86266,86270,86274,86282,86290,86299,86307,86315,86329,86337,86341,86345,86350,86376,86381,86418,86423,86446,86451,86505,86510,86546,86550,86556,86561,86570,86584,86593,86612,86621,86631,86636,86641,86654,86659,86713,86739,86747,86755,86759],{"__ignoreMap":41},[46,85192,85193,85195,85197,85199],{"class":48,"line":49},[46,85194,53265],{"class":56},[46,85196,53268],{"class":1361},[46,85198,53271],{"class":169},[46,85200,53274],{"class":56},[46,85202,85203,85205,85207,85209,85211,85213],{"class":48,"line":60},[46,85204,821],{"class":56},[46,85206,52603],{"class":1361},[46,85208,53283],{"class":169},[46,85210,79],{"class":56},[46,85212,53288],{"class":173},[46,85214,53274],{"class":56},[46,85216,85217],{"class":48,"line":200},[46,85218,616],{"emptyLinePlaceholder":615},[46,85220,85221,85223,85225],{"class":48,"line":211},[46,85222,821],{"class":56},[46,85224,53301],{"class":1361},[46,85226,53274],{"class":56},[46,85228,85229,85231,85233,85235,85237,85239],{"class":48,"line":222},[46,85230,54111],{"class":56},[46,85232,53311],{"class":1361},[46,85234,53314],{"class":169},[46,85236,79],{"class":56},[46,85238,53319],{"class":173},[46,85240,53274],{"class":56},[46,85242,85243,85245,85247,85249,85251,85253,85255,85257,85259],{"class":48,"line":636},[46,85244,54111],{"class":56},[46,85246,53311],{"class":1361},[46,85248,1364],{"class":169},[46,85250,79],{"class":56},[46,85252,53358],{"class":173},[46,85254,53338],{"class":169},[46,85256,79],{"class":56},[46,85258,53365],{"class":173},[46,85260,53274],{"class":56},[46,85262,85263,85265,85267,85269,85271],{"class":48,"line":641},[46,85264,54111],{"class":56},[46,85266,53374],{"class":1361},[46,85268,53377],{"class":56},[46,85270,53374],{"class":1361},[46,85272,53274],{"class":56},[46,85274,85275,85277,85279],{"class":48,"line":653},[46,85276,54111],{"class":56},[46,85278,2098],{"class":1361},[46,85280,53274],{"class":56},[46,85282,85283,85285],{"class":48,"line":659},[46,85284,8416],{"class":1361},[46,85286,17573],{"class":56},[46,85288,85289,85291,85293,85295],{"class":48,"line":665},[46,85290,56660],{"class":180},[46,85292,53404],{"class":56},[46,85294,2379],{"class":180},[46,85296,3345],{"class":56},[46,85298,85299,85301,85303,85305],{"class":48,"line":670},[46,85300,56671],{"class":180},[46,85302,53404],{"class":56},[46,85304,2379],{"class":180},[46,85306,3345],{"class":56},[46,85308,85309,85311,85313,85315],{"class":48,"line":676},[46,85310,74561],{"class":180},[46,85312,53404],{"class":56},[46,85314,62470],{"class":180},[46,85316,3345],{"class":56},[46,85318,85319],{"class":48,"line":682},[46,85320,4217],{"class":56},[46,85322,85323],{"class":48,"line":688},[46,85324,616],{"emptyLinePlaceholder":615},[46,85326,85327,85329],{"class":48,"line":693},[46,85328,64088],{"class":169},[46,85330,17573],{"class":56},[46,85332,85333,85335,85337,85339,85341],{"class":48,"line":699},[46,85334,56736],{"class":180},[46,85336,53404],{"class":56},[46,85338,80539],{"class":180},[46,85340,53459],{"class":52},[46,85342,3345],{"class":56},[46,85344,85345,85347,85349,85351,85353,85355],{"class":48,"line":705},[46,85346,56671],{"class":180},[46,85348,53404],{"class":56},[46,85350,1155],{"class":180},[46,85352,53459],{"class":52},[46,85354,53523],{"class":180},[46,85356,3345],{"class":56},[46,85358,85359],{"class":48,"line":711},[46,85360,4217],{"class":56},[46,85362,85363],{"class":48,"line":717},[46,85364,616],{"emptyLinePlaceholder":615},[46,85366,85367,85369],{"class":48,"line":723},[46,85368,80590],{"class":169},[46,85370,17573],{"class":56},[46,85372,85373,85375,85377,85379,85381],{"class":48,"line":729},[46,85374,56660],{"class":180},[46,85376,53404],{"class":56},[46,85378,2761],{"class":180},[46,85380,53459],{"class":52},[46,85382,3345],{"class":56},[46,85384,85385,85387,85389,85391,85393,85395,85397],{"class":48,"line":735},[46,85386,63825],{"class":180},[46,85388,53404],{"class":56},[46,85390,30110],{"class":180},[46,85392,80645],{"class":180},[46,85394,80648],{"class":180},[46,85396,2881],{"class":52},[46,85398,3345],{"class":56},[46,85400,85401,85403,85405,85407],{"class":48,"line":740},[46,85402,56974],{"class":180},[46,85404,53404],{"class":56},[46,85406,53444],{"class":180},[46,85408,3345],{"class":56},[46,85410,85411,85413,85415,85417,85419,85421,85423],{"class":48,"line":745},[46,85412,63942],{"class":180},[46,85414,53404],{"class":56},[46,85416,2405],{"class":180},[46,85418,53459],{"class":52},[46,85420,53488],{"class":180},[46,85422,64209],{"class":180},[46,85424,3345],{"class":56},[46,85426,85427],{"class":48,"line":763},[46,85428,4217],{"class":56},[46,85430,85431],{"class":48,"line":778},[46,85432,616],{"emptyLinePlaceholder":615},[46,85434,85435,85437],{"class":48,"line":789},[46,85436,80708],{"class":169},[46,85438,17573],{"class":56},[46,85440,85441,85443,85445,85447],{"class":48,"line":794},[46,85442,63990],{"class":180},[46,85444,53404],{"class":56},[46,85446,63995],{"class":180},[46,85448,3345],{"class":56},[46,85450,85451,85453,85455,85457],{"class":48,"line":806},[46,85452,56849],{"class":180},[46,85454,53404],{"class":56},[46,85456,63783],{"class":180},[46,85458,3345],{"class":56},[46,85460,85461],{"class":48,"line":829},[46,85462,4217],{"class":56},[46,85464,85465],{"class":48,"line":840},[46,85466,616],{"emptyLinePlaceholder":615},[46,85468,85469,85471,85473],{"class":48,"line":846},[46,85470,80590],{"class":169},[46,85472,57580],{"class":1361},[46,85474,17573],{"class":56},[46,85476,85477,85479,85481,85483,85485],{"class":48,"line":852},[46,85478,56736],{"class":180},[46,85480,53404],{"class":56},[46,85482,2798],{"class":180},[46,85484,53459],{"class":52},[46,85486,3345],{"class":56},[46,85488,85489,85491,85493,85495,85497],{"class":48,"line":857},[46,85490,56750],{"class":180},[46,85492,53404],{"class":56},[46,85494,2798],{"class":180},[46,85496,53459],{"class":52},[46,85498,3345],{"class":56},[46,85500,85501,85503,85505,85507,85509],{"class":48,"line":875},[46,85502,63715],{"class":180},[46,85504,53404],{"class":56},[46,85506,2506],{"class":180},[46,85508,53459],{"class":52},[46,85510,3345],{"class":56},[46,85512,85513],{"class":48,"line":892},[46,85514,4217],{"class":56},[46,85516,85517],{"class":48,"line":898},[46,85518,616],{"emptyLinePlaceholder":615},[46,85520,85521,85523,85525],{"class":48,"line":903},[46,85522,80590],{"class":169},[46,85524,64269],{"class":169},[46,85526,17573],{"class":56},[46,85528,85529,85531,85533,85535,85537],{"class":48,"line":908},[46,85530,56736],{"class":180},[46,85532,53404],{"class":56},[46,85534,3762],{"class":180},[46,85536,53459],{"class":52},[46,85538,3345],{"class":56},[46,85540,85541],{"class":48,"line":925},[46,85542,4217],{"class":56},[46,85544,85545],{"class":48,"line":1238},[46,85546,616],{"emptyLinePlaceholder":615},[46,85548,85549,85551,85553,85556],{"class":48,"line":1251},[46,85550,80590],{"class":169},[46,85552,64269],{"class":169},[46,85554,85555],{"class":169}," .tag",[46,85557,17573],{"class":56},[46,85559,85560,85562,85564,85566],{"class":48,"line":1256},[46,85561,56974],{"class":180},[46,85563,53404],{"class":56},[46,85565,62834],{"class":180},[46,85567,3345],{"class":56},[46,85569,85570,85572,85574,85576,85578],{"class":48,"line":1261},[46,85571,56660],{"class":180},[46,85573,53404],{"class":56},[46,85575,2272],{"class":180},[46,85577,53459],{"class":52},[46,85579,3345],{"class":56},[46,85581,85582,85584,85586,85588,85590],{"class":48,"line":1274},[46,85583,56887],{"class":180},[46,85585,53404],{"class":56},[46,85587,2685],{"class":180},[46,85589,53459],{"class":52},[46,85591,3345],{"class":56},[46,85593,85594,85596,85598,85600],{"class":48,"line":10061},[46,85595,59381],{"class":180},[46,85597,53404],{"class":56},[46,85599,64035],{"class":180},[46,85601,3345],{"class":56},[46,85603,85604],{"class":48,"line":11720},[46,85605,4217],{"class":56},[46,85607,85608],{"class":48,"line":11745},[46,85609,616],{"emptyLinePlaceholder":615},[46,85611,85612,85614,85616],{"class":48,"line":11768},[46,85613,80590],{"class":169},[46,85615,80882],{"class":169},[46,85617,33443],{"class":56},[46,85619,85620,85622,85625],{"class":48,"line":11792},[46,85621,80590],{"class":169},[46,85623,85624],{"class":169}," .sub-total",[46,85626,17573],{"class":56},[46,85628,85629,85631,85633,85635,85637],{"class":48,"line":11797},[46,85630,56887],{"class":180},[46,85632,53404],{"class":56},[46,85634,2836],{"class":180},[46,85636,53459],{"class":52},[46,85638,3345],{"class":56},[46,85640,85641,85643,85645,85647],{"class":48,"line":11802},[46,85642,59381],{"class":180},[46,85644,53404],{"class":56},[46,85646,80905],{"class":180},[46,85648,3345],{"class":56},[46,85650,85651,85653,85655,85657],{"class":48,"line":11807},[46,85652,63802],{"class":180},[46,85654,53404],{"class":56},[46,85656,2405],{"class":180},[46,85658,3345],{"class":56},[46,85660,85661],{"class":48,"line":11816},[46,85662,4217],{"class":56},[46,85664,85665],{"class":48,"line":11821},[46,85666,616],{"emptyLinePlaceholder":615},[46,85668,85669,85671,85673],{"class":48,"line":11827},[46,85670,80590],{"class":169},[46,85672,80922],{"class":169},[46,85674,33443],{"class":56},[46,85676,85677,85679,85682],{"class":48,"line":11848},[46,85678,80590],{"class":169},[46,85680,85681],{"class":169}," .sub-total::before",[46,85683,33443],{"class":56},[46,85685,85686,85689],{"class":48,"line":11854},[46,85687,85688],{"class":169},"    .amount::before",[46,85690,17573],{"class":56},[46,85692,85693,85695,85697,85699],{"class":48,"line":11868},[46,85694,80929],{"class":180},[46,85696,53404],{"class":56},[46,85698,80934],{"class":173},[46,85700,3345],{"class":56},[46,85702,85703,85705,85707,85709,85711],{"class":48,"line":11874},[46,85704,56887],{"class":180},[46,85706,53404],{"class":56},[46,85708,2685],{"class":180},[46,85710,53459],{"class":52},[46,85712,3345],{"class":56},[46,85714,85715],{"class":48,"line":11901},[46,85716,4217],{"class":56},[46,85718,85719],{"class":48,"line":11910},[46,85720,616],{"emptyLinePlaceholder":615},[46,85722,85723,85725,85728],{"class":48,"line":11916},[46,85724,80590],{"class":169},[46,85726,85727],{"class":169}," .spec",[46,85729,17573],{"class":56},[46,85731,85732,85734,85736,85738],{"class":48,"line":11924},[46,85733,63802],{"class":180},[46,85735,53404],{"class":56},[46,85737,2272],{"class":180},[46,85739,3345],{"class":56},[46,85741,85742,85744,85746,85749],{"class":48,"line":11929},[46,85743,59381],{"class":180},[46,85745,53404],{"class":56},[46,85747,85748],{"class":180},"#888",[46,85750,3345],{"class":56},[46,85752,85753,85755,85757,85759,85761],{"class":48,"line":18605},[46,85754,56887],{"class":180},[46,85756,53404],{"class":56},[46,85758,2735],{"class":180},[46,85760,53459],{"class":52},[46,85762,3345],{"class":56},[46,85764,85765,85767,85769,85771,85773],{"class":48,"line":18611},[46,85766,63965],{"class":180},[46,85768,53404],{"class":56},[46,85770,2886],{"class":180},[46,85772,53459],{"class":52},[46,85774,3345],{"class":56},[46,85776,85777],{"class":48,"line":18634},[46,85778,4217],{"class":56},[46,85780,85781],{"class":48,"line":18640},[46,85782,616],{"emptyLinePlaceholder":615},[46,85784,85785,85787,85790],{"class":48,"line":18663},[46,85786,80590],{"class":169},[46,85788,85789],{"class":169}," .count",[46,85791,17573],{"class":56},[46,85793,85794,85796,85798,85800],{"class":48,"line":18677},[46,85795,63802],{"class":180},[46,85797,53404],{"class":56},[46,85799,2405],{"class":180},[46,85801,3345],{"class":56},[46,85803,85804,85806,85808,85811],{"class":48,"line":18697},[46,85805,59381],{"class":180},[46,85807,53404],{"class":56},[46,85809,85810],{"class":180},"#aaa",[46,85812,3345],{"class":56},[46,85814,85815],{"class":48,"line":18703},[46,85816,4217],{"class":56},[46,85818,85819],{"class":48,"line":18714},[46,85820,616],{"emptyLinePlaceholder":615},[46,85822,85823,85825],{"class":48,"line":18737},[46,85824,74440],{"class":169},[46,85826,17573],{"class":56},[46,85828,85829,85831,85833,85835,85837],{"class":48,"line":18759},[46,85830,56736],{"class":180},[46,85832,53404],{"class":56},[46,85834,80539],{"class":180},[46,85836,53459],{"class":52},[46,85838,3345],{"class":56},[46,85840,85841,85843,85845,85847,85849],{"class":48,"line":18764},[46,85842,56671],{"class":180},[46,85844,53404],{"class":56},[46,85846,2379],{"class":180},[46,85848,53523],{"class":180},[46,85850,3345],{"class":56},[46,85852,85853,85855,85857,85859],{"class":48,"line":18770},[46,85854,56974],{"class":180},[46,85856,53404],{"class":56},[46,85858,53444],{"class":180},[46,85860,3345],{"class":56},[46,85862,85863,85865,85867,85869],{"class":48,"line":18784},[46,85864,56985],{"class":180},[46,85866,53404],{"class":56},[46,85868,53547],{"class":180},[46,85870,3345],{"class":56},[46,85872,85873,85876,85878,85880,85882,85884,85887],{"class":48,"line":18797},[46,85874,85875],{"class":180},"      border-top",[46,85877,53404],{"class":56},[46,85879,2405],{"class":180},[46,85881,53459],{"class":52},[46,85883,53488],{"class":180},[46,85885,85886],{"class":180}," #4e4e4e",[46,85888,3345],{"class":56},[46,85890,85891,85893,85895,85897,85899],{"class":48,"line":18802},[46,85892,56660],{"class":180},[46,85894,53404],{"class":56},[46,85896,2886],{"class":180},[46,85898,53459],{"class":52},[46,85900,3345],{"class":56},[46,85902,85903],{"class":48,"line":18816},[46,85904,4217],{"class":56},[46,85906,85907],{"class":48,"line":18821},[46,85908,616],{"emptyLinePlaceholder":615},[46,85910,85911,85913,85916],{"class":48,"line":18827},[46,85912,74440],{"class":169},[46,85914,85915],{"class":169}," .amount",[46,85917,17573],{"class":56},[46,85919,85920,85922,85924,85926,85928],{"class":48,"line":18832},[46,85921,56887],{"class":180},[46,85923,53404],{"class":56},[46,85925,2836],{"class":180},[46,85927,53459],{"class":52},[46,85929,3345],{"class":56},[46,85931,85932,85934,85936,85938],{"class":48,"line":18846},[46,85933,59381],{"class":180},[46,85935,53404],{"class":56},[46,85937,80905],{"class":180},[46,85939,3345],{"class":56},[46,85941,85942,85944,85946,85948],{"class":48,"line":18851},[46,85943,64299],{"class":180},[46,85945,53404],{"class":56},[46,85947,53456],{"class":180},[46,85949,3345],{"class":56},[46,85951,85952,85954,85956,85958,85960],{"class":48,"line":18856},[46,85953,63715],{"class":180},[46,85955,53404],{"class":56},[46,85957,2842],{"class":180},[46,85959,53459],{"class":52},[46,85961,3345],{"class":56},[46,85963,85964],{"class":48,"line":18870},[46,85965,4217],{"class":56},[46,85967,85968,85970,85972],{"class":48,"line":18882},[46,85969,54384],{"class":56},[46,85971,2098],{"class":1361},[46,85973,53274],{"class":56},[46,85975,85976,85978,85980],{"class":48,"line":18887},[46,85977,53752],{"class":56},[46,85979,53301],{"class":1361},[46,85981,53274],{"class":56},[46,85983,85984],{"class":48,"line":18900},[46,85985,616],{"emptyLinePlaceholder":615},[46,85987,85988,85990,85992],{"class":48,"line":18905},[46,85989,821],{"class":56},[46,85991,53767],{"class":1361},[46,85993,53274],{"class":56},[46,85995,85996,85998,86000,86002,86004,86006],{"class":48,"line":18910},[46,85997,54111],{"class":56},[46,85999,53578],{"class":1361},[46,86001,55451],{"class":169},[46,86003,79],{"class":56},[46,86005,64573],{"class":173},[46,86007,53274],{"class":56},[46,86009,86010,86012,86014],{"class":48,"line":18915},[46,86011,54384],{"class":56},[46,86013,53578],{"class":1361},[46,86015,53274],{"class":56},[46,86017,86018,86020,86022,86024,86026,86028],{"class":48,"line":18928},[46,86019,54111],{"class":56},[46,86021,53578],{"class":1361},[46,86023,55451],{"class":169},[46,86025,79],{"class":56},[46,86027,64545],{"class":173},[46,86029,53274],{"class":56},[46,86031,86032,86034,86036,86039,86041,86043,86045,86048,86050,86052,86054,86056],{"class":48,"line":18933},[46,86033,53308],{"class":56},[46,86035,53578],{"class":1361},[46,86037,86038],{"class":56},">合计：\u003C",[46,86040,46],{"class":1361},[46,86042,55451],{"class":169},[46,86044,79],{"class":56},[46,86046,86047],{"class":173},"\"amount\"",[46,86049,57279],{"class":56},[46,86051,46],{"class":1361},[46,86053,57279],{"class":56},[46,86055,53578],{"class":1361},[46,86057,53274],{"class":56},[46,86059,86060,86062,86064],{"class":48,"line":34607},[46,86061,54384],{"class":56},[46,86063,53578],{"class":1361},[46,86065,53274],{"class":56},[46,86067,86068,86070,86072],{"class":48,"line":34613},[46,86069,54111],{"class":56},[46,86071,53780],{"class":1361},[46,86073,53274],{"class":56},[46,86075,86076,86078,86080,86082],{"class":48,"line":34619},[46,86077,13225],{"class":52},[46,86079,81342],{"class":180},[46,86081,647],{"class":52},[46,86083,57412],{"class":56},[46,86085,86086],{"class":48,"line":34625},[46,86087,81351],{"class":56},[46,86089,86090,86092,86094],{"class":48,"line":34631},[46,86091,81356],{"class":56},[46,86093,81359],{"class":173},[46,86095,33443],{"class":56},[46,86097,86098,86100,86102],{"class":48,"line":34642},[46,86099,81366],{"class":56},[46,86101,81369],{"class":173},[46,86103,33443],{"class":56},[46,86105,86106,86108,86111],{"class":48,"line":34648},[46,86107,81376],{"class":56},[46,86109,86110],{"class":180},"289.9",[46,86112,33443],{"class":56},[46,86114,86115,86117,86119],{"class":48,"line":34668},[46,86116,81386],{"class":56},[46,86118,81389],{"class":173},[46,86120,33443],{"class":56},[46,86122,86123,86126,86128],{"class":48,"line":34674},[46,86124,86125],{"class":56},"        count: ",[46,86127,2272],{"class":180},[46,86129,33443],{"class":56},[46,86131,86132,86135,86138],{"class":48,"line":34685},[46,86133,86134],{"class":56},"        spec: { color: ",[46,86136,86137],{"class":173},"'白色'",[46,86139,57569],{"class":56},[46,86141,86142],{"class":48,"line":34691},[46,86143,79857],{"class":56},[46,86145,86146],{"class":48,"line":34697},[46,86147,81351],{"class":56},[46,86149,86150,86152,86154],{"class":48,"line":34703},[46,86151,81356],{"class":56},[46,86153,81450],{"class":173},[46,86155,33443],{"class":56},[46,86157,86158,86160,86162],{"class":48,"line":34709},[46,86159,81366],{"class":56},[46,86161,81459],{"class":173},[46,86163,33443],{"class":56},[46,86165,86166,86168,86171],{"class":48,"line":34715},[46,86167,81376],{"class":56},[46,86169,86170],{"class":180},"109.8",[46,86172,33443],{"class":56},[46,86174,86175,86177,86179],{"class":48,"line":34721},[46,86176,81386],{"class":56},[46,86178,81477],{"class":173},[46,86180,33443],{"class":56},[46,86182,86183,86185,86187],{"class":48,"line":34727},[46,86184,86125],{"class":56},[46,86186,2266],{"class":180},[46,86188,33443],{"class":56},[46,86190,86191,86194,86196,86198,86200],{"class":48,"line":34747},[46,86192,86193],{"class":56},"        spec: { size: ",[46,86195,83867],{"class":173},[46,86197,57429],{"class":56},[46,86199,83872],{"class":173},[46,86201,57569],{"class":56},[46,86203,86204],{"class":48,"line":34753},[46,86205,79857],{"class":56},[46,86207,86208],{"class":48,"line":34769},[46,86209,81351],{"class":56},[46,86211,86212,86214,86216],{"class":48,"line":34775},[46,86213,81356],{"class":56},[46,86215,81494],{"class":173},[46,86217,33443],{"class":56},[46,86219,86220,86222,86224],{"class":48,"line":34789},[46,86221,81366],{"class":56},[46,86223,81503],{"class":173},[46,86225,33443],{"class":56},[46,86227,86228,86230,86233],{"class":48,"line":34795},[46,86229,81376],{"class":56},[46,86231,86232],{"class":180},"488",[46,86234,33443],{"class":56},[46,86236,86237,86239,86241],{"class":48,"line":34810},[46,86238,81386],{"class":56},[46,86240,81521],{"class":173},[46,86242,33443],{"class":56},[46,86244,86245,86247,86249],{"class":48,"line":34816},[46,86246,86125],{"class":56},[46,86248,2405],{"class":180},[46,86250,33443],{"class":56},[46,86252,86253,86255,86258,86261,86264],{"class":48,"line":34825},[46,86254,86134],{"class":56},[46,86256,86257],{"class":173},"'青色'",[46,86259,86260],{"class":56},", sum: ",[46,86262,86263],{"class":173},"'一大四小'",[46,86265,57569],{"class":56},[46,86267,86268],{"class":48,"line":34831},[46,86269,79857],{"class":56},[46,86271,86272],{"class":48,"line":34840},[46,86273,81351],{"class":56},[46,86275,86276,86278,86280],{"class":48,"line":34846},[46,86277,81356],{"class":56},[46,86279,81538],{"class":173},[46,86281,33443],{"class":56},[46,86283,86284,86286,86288],{"class":48,"line":34852},[46,86285,81366],{"class":56},[46,86287,81547],{"class":173},[46,86289,33443],{"class":56},[46,86291,86292,86294,86297],{"class":48,"line":34861},[46,86293,81376],{"class":56},[46,86295,86296],{"class":180},"139",[46,86298,33443],{"class":56},[46,86300,86301,86303,86305],{"class":48,"line":34867},[46,86302,81386],{"class":56},[46,86304,81565],{"class":173},[46,86306,33443],{"class":56},[46,86308,86309,86311,86313],{"class":48,"line":34878},[46,86310,86125],{"class":56},[46,86312,2405],{"class":180},[46,86314,33443],{"class":56},[46,86316,86317,86319,86322,86324,86327],{"class":48,"line":34884},[46,86318,86193],{"class":56},[46,86320,86321],{"class":173},"'小号'",[46,86323,57429],{"class":56},[46,86325,86326],{"class":173},"'紫色'",[46,86328,57435],{"class":56},[46,86330,86331,86334],{"class":48,"line":34903},[46,86332,86333],{"class":56},"        gift: ",[46,86335,86336],{"class":173},"'50g茶叶,清洗球'\n",[46,86338,86339],{"class":48,"line":34909},[46,86340,54365],{"class":56},[46,86342,86343],{"class":48,"line":34920},[46,86344,55074],{"class":56},[46,86346,86347],{"class":48,"line":34926},[46,86348,86349],{"class":2253},"    \u002F\u002F  1.根据数据渲染页面\n",[46,86351,86352,86354,86356,86358,86360,86362,86364,86366,86368,86370,86372,86374],{"class":48,"line":34946},[46,86353,54374],{"class":56},[46,86355,56364],{"class":169},[46,86357,1152],{"class":56},[46,86359,81865],{"class":173},[46,86361,76214],{"class":56},[46,86363,79],{"class":52},[46,86365,82012],{"class":56},[46,86367,76009],{"class":169},[46,86369,1152],{"class":56},[46,86371,81760],{"class":439},[46,86373,81763],{"class":52},[46,86375,17573],{"class":56},[46,86377,86378],{"class":48,"line":34962},[46,86379,86380],{"class":2253},"      \u002F\u002F 对象解构\n",[46,86382,86383,86385,86387,86389,86391,86393,86395,86398,86400,86402,86404,86407,86409,86412,86414,86416],{"class":48,"line":34968},[46,86384,60193],{"class":52},[46,86386,81772],{"class":56},[46,86388,81784],{"class":180},[46,86390,448],{"class":56},[46,86392,1653],{"class":180},[46,86394,448],{"class":56},[46,86396,86397],{"class":180},"count",[46,86399,448],{"class":56},[46,86401,81779],{"class":180},[46,86403,448],{"class":56},[46,86405,86406],{"class":180},"spec",[46,86408,448],{"class":56},[46,86410,86411],{"class":180},"gift",[46,86413,81787],{"class":56},[46,86415,79],{"class":52},[46,86417,81792],{"class":56},[46,86419,86420],{"class":48,"line":34982},[46,86421,86422],{"class":2253},"      \u002F\u002F 规格文字模块处理\n",[46,86424,86425,86427,86430,86432,86434,86436,86438,86440,86442,86444],{"class":48,"line":34988},[46,86426,60193],{"class":52},[46,86428,86429],{"class":180}," text",[46,86431,647],{"class":52},[46,86433,83902],{"class":56},[46,86435,83905],{"class":169},[46,86437,83908],{"class":56},[46,86439,76188],{"class":169},[46,86441,1152],{"class":56},[46,86443,83915],{"class":173},[46,86445,459],{"class":56},[46,86447,86448],{"class":48,"line":34994},[46,86449,86450],{"class":2253},"      \u002F\u002F 处理赠品模块\n",[46,86452,86453,86455,86457,86459,86462,86464,86466,86468,86470,86473,86475,86477,86479,86481,86483,86486,86488,86491,86493,86495,86497,86499,86501,86503],{"class":48,"line":35005},[46,86454,60193],{"class":52},[46,86456,75884],{"class":180},[46,86458,647],{"class":52},[46,86460,86461],{"class":56}," gift ",[46,86463,3170],{"class":52},[46,86465,85075],{"class":56},[46,86467,85078],{"class":169},[46,86469,1152],{"class":56},[46,86471,86472],{"class":173},"','",[46,86474,32806],{"class":56},[46,86476,76009],{"class":169},[46,86478,1152],{"class":56},[46,86480,81760],{"class":439},[46,86482,81763],{"class":52},[46,86484,86485],{"class":173}," `\u003Cspan class=\"tag\">【赠品】${",[46,86487,81760],{"class":56},[46,86489,86490],{"class":173},"}\u003C\u002Fspan>`",[46,86492,32806],{"class":56},[46,86494,76188],{"class":169},[46,86496,1152],{"class":56},[46,86498,76193],{"class":173},[46,86500,15716],{"class":56},[46,86502,3045],{"class":52},[46,86504,72069],{"class":173},[46,86506,86507],{"class":48,"line":35011},[46,86508,86509],{"class":2253},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[46,86511,86512,86514,86517,86519,86522,86524,86526,86528,86531,86533,86535,86537,86540,86542,86544],{"class":48,"line":35017},[46,86513,60193],{"class":52},[46,86515,86516],{"class":180}," subtotal",[46,86518,647],{"class":52},[46,86520,86521],{"class":56}," ((price ",[46,86523,2642],{"class":52},[46,86525,7767],{"class":180},[46,86527,8531],{"class":52},[46,86529,86530],{"class":56}," count) ",[46,86532,2770],{"class":52},[46,86534,7767],{"class":180},[46,86536,32806],{"class":56},[46,86538,86539],{"class":169},"toFixed",[46,86541,1152],{"class":56},[46,86543,2272],{"class":180},[46,86545,459],{"class":56},[46,86547,86548],{"class":48,"line":35027},[46,86549,616],{"emptyLinePlaceholder":615},[46,86551,86552,86554],{"class":48,"line":35033},[46,86553,75947],{"class":52},[46,86555,72133],{"class":173},[46,86557,86558],{"class":48,"line":35044},[46,86559,86560],{"class":173},"        \u003Cdiv class=\"item\">\n",[46,86562,86563,86566,86568],{"class":48,"line":35050},[46,86564,86565],{"class":173},"          \u003Cimg src=\"${",[46,86567,81784],{"class":56},[46,86569,81816],{"class":173},[46,86571,86572,86575,86577,86580,86582],{"class":48,"line":35060},[46,86573,86574],{"class":173},"          \u003Cp class=\"name\">${",[46,86576,1653],{"class":56},[46,86578,86579],{"class":173},"}${",[46,86581,3354],{"class":56},[46,86583,81826],{"class":173},[46,86585,86586,86589,86591],{"class":48,"line":35065},[46,86587,86588],{"class":173},"          \u003Cp class=\"spec\">${",[46,86590,571],{"class":56},[46,86592,81826],{"class":173},[46,86594,86595,86598,86600,86602,86604,86606,86608,86610],{"class":48,"line":35071},[46,86596,86597],{"class":173},"          \u003Cp class=\"price\">${",[46,86599,81779],{"class":56},[46,86601,2744],{"class":173},[46,86603,86539],{"class":169},[46,86605,1152],{"class":173},[46,86607,2272],{"class":180},[46,86609,2616],{"class":173},[46,86611,81826],{"class":173},[46,86613,86614,86617,86619],{"class":48,"line":35120},[46,86615,86616],{"class":173},"          \u003Cp class=\"count\">x${",[46,86618,86397],{"class":56},[46,86620,81826],{"class":173},[46,86622,86623,86626,86629],{"class":48,"line":35167},[46,86624,86625],{"class":173},"          \u003Cp class=\"sub-total\">${",[46,86627,86628],{"class":56},"subtotal",[46,86630,81826],{"class":173},[46,86632,86633],{"class":48,"line":35172},[46,86634,86635],{"class":173},"        \u003C\u002Fdiv> \n",[46,86637,86638],{"class":48,"line":35178},[46,86639,86640],{"class":173},"             `\n",[46,86642,86643,86646,86648,86650,86652],{"class":48,"line":35197},[46,86644,86645],{"class":56},"    }).",[46,86647,76188],{"class":169},[46,86649,1152],{"class":56},[46,86651,76193],{"class":173},[46,86653,459],{"class":56},[46,86655,86656],{"class":48,"line":35203},[46,86657,86658],{"class":2253},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[46,86660,86661,86663,86665,86667,86669,86672,86674,86677,86679,86681,86683,86686,86689,86691,86694,86696,86698,86700,86703,86705,86707,86709,86711],{"class":48,"line":35223},[46,86662,13225],{"class":52},[46,86664,64750],{"class":180},[46,86666,647],{"class":52},[46,86668,82012],{"class":56},[46,86670,86671],{"class":169},"reduce",[46,86673,4405],{"class":56},[46,86675,86676],{"class":439},"prev",[46,86678,448],{"class":56},[46,86680,81760],{"class":439},[46,86682,15716],{"class":56},[46,86684,86685],{"class":52},"=>",[46,86687,86688],{"class":56}," prev ",[46,86690,2668],{"class":52},[46,86692,86693],{"class":56}," (item.price ",[46,86695,2642],{"class":52},[46,86697,7767],{"class":180},[46,86699,8531],{"class":52},[46,86701,86702],{"class":56}," item.count) ",[46,86704,2770],{"class":52},[46,86706,7767],{"class":180},[46,86708,448],{"class":56},[46,86710,2379],{"class":180},[46,86712,459],{"class":56},[46,86714,86715,86717,86719,86721,86724,86726,86728,86731,86733,86735,86737],{"class":48,"line":35229},[46,86716,54374],{"class":56},[46,86718,56364],{"class":169},[46,86720,1152],{"class":56},[46,86722,86723],{"class":173},"'.amount'",[46,86725,76214],{"class":56},[46,86727,79],{"class":52},[46,86729,86730],{"class":56}," total.",[46,86732,86539],{"class":169},[46,86734,1152],{"class":56},[46,86736,2272],{"class":180},[46,86738,459],{"class":56},[46,86740,86741,86743,86745],{"class":48,"line":35235},[46,86742,54384],{"class":56},[46,86744,53780],{"class":1361},[46,86746,53274],{"class":56},[46,86748,86749,86751,86753],{"class":48,"line":35245},[46,86750,53752],{"class":56},[46,86752,53767],{"class":1361},[46,86754,53274],{"class":56},[46,86756,86757],{"class":48,"line":35250},[46,86758,616],{"emptyLinePlaceholder":615},[46,86760,86761,86763,86765],{"class":48,"line":35256},[46,86762,53752],{"class":56},[46,86764,52603],{"class":1361},[46,86766,53274],{"class":56},[14,86768,86770],{"id":86769},"_411-编程思想","4.11 编程思想",[479,86772,86774],{"id":86773},"_4111-面向过程介绍","4.11.1 面向过程介绍",[19,86776,86777,86780],{},[2339,86778,86779],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[19,86782,86783],{},"调用就可以了",[19,86785,86786],{},[3514,86787],{"alt":41,"src":86788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[479,86790,86792],{"id":86791},"_4112-面向对象","4.11.2 面向对象",[19,86794,86795],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[19,86797,86798],{},[3514,86799],{"alt":41,"src":86800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[19,86802,86803],{},"面向对象的特性：",[3191,86805,86806,86809,86812],{},[26,86807,86808],{},"封装性",[26,86810,86811],{},"继承性",[26,86813,86814],{},"多态性",[479,86816,86818],{"id":86817},"_4113-两者比较","4.11.3 两者比较",[19,86820,86821],{},[3514,86822],{"alt":41,"src":86823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,86825,86827],{"id":86826},"_412-构造函数回顾","4.12 构造函数回顾",[19,86829,86830],{},[3514,86831],{"alt":41,"src":86832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[19,86834,86835],{},[3514,86836],{"alt":41,"src":86837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[19,86839,86840],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[19,86842,86843],{},[3514,86844],{"alt":41,"src":86845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,86847,86849],{"id":86848},"_413-原型","4.13 原型",[479,86851,86853],{"id":86852},"_4131-原型对象的认识","4.13.1 原型对象的认识",[19,86855,86856],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[19,86858,86859],{},[3514,86860],{"alt":41,"src":86861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[19,86863,86864],{},[3514,86865],{"alt":41,"src":86866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[19,86868,86869],{},"原型是构造函数的属性，它也是一个对象",[19,86871,86872],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[19,86874,86875],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[36,86877,86879],{"className":1350,"code":86878,"language":1352,"meta":41,"style":41},"\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",[43,86880,86881,86889,86894,86902,86907,86912,86917,86922,86927,86931,86935,86939,86944,86949,86953,86958,86963,86968,86973,86978,86982,86990],{"__ignoreMap":41},[46,86882,86883,86885,86887],{"class":48,"line":49},[46,86884,821],{"class":56},[46,86886,53767],{"class":1361},[46,86888,53274],{"class":56},[46,86890,86891],{"class":48,"line":60},[46,86892,86893],{"class":2253},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[46,86895,86896,86898,86900],{"class":48,"line":200},[46,86897,54111],{"class":56},[46,86899,53780],{"class":1361},[46,86901,53274],{"class":56},[46,86903,86904],{"class":48,"line":211},[46,86905,86906],{"class":56},"    function Star(uname, age) {\n",[46,86908,86909],{"class":48,"line":222},[46,86910,86911],{"class":56},"      this.uname = uname,\n",[46,86913,86914],{"class":48,"line":636},[46,86915,86916],{"class":56},"        this.age = age\n",[46,86918,86919],{"class":48,"line":641},[46,86920,86921],{"class":56},"      \u002F\u002F this.sing = function () {\n",[46,86923,86924],{"class":48,"line":653},[46,86925,86926],{"class":56},"      \u002F\u002F   console.log('唱歌')\n",[46,86928,86929],{"class":48,"line":659},[46,86930,616],{"emptyLinePlaceholder":615},[46,86932,86933],{"class":48,"line":665},[46,86934,62002],{"class":56},[46,86936,86937],{"class":48,"line":670},[46,86938,4217],{"class":56},[46,86940,86941],{"class":48,"line":676},[46,86942,86943],{"class":56},"    Star.prototype.sing = function () {\n",[46,86945,86946],{"class":48,"line":682},[46,86947,86948],{"class":56},"      console.log('唱歌')\n",[46,86950,86951],{"class":48,"line":688},[46,86952,4217],{"class":56},[46,86954,86955],{"class":48,"line":693},[46,86956,86957],{"class":56},"    \u002F\u002F console.dir(Star.prototype)\n",[46,86959,86960],{"class":48,"line":699},[46,86961,86962],{"class":56},"    const pink = new Star('pink', 18)\n",[46,86964,86965],{"class":48,"line":705},[46,86966,86967],{"class":56},"    const red = new Star('red', 20)\n",[46,86969,86970],{"class":48,"line":711},[46,86971,86972],{"class":56},"    pink.sing()\n",[46,86974,86975],{"class":48,"line":717},[46,86976,86977],{"class":56},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[46,86979,86980],{"class":48,"line":723},[46,86981,616],{"emptyLinePlaceholder":615},[46,86983,86984,86986,86988],{"class":48,"line":729},[46,86985,54384],{"class":56},[46,86987,53780],{"class":1361},[46,86989,53274],{"class":56},[46,86991,86992,86994,86996],{"class":48,"line":735},[46,86993,53752],{"class":56},[46,86995,53767],{"class":1361},[46,86997,53274],{"class":56},[19,86999,87000],{},[3514,87001],{"alt":41,"src":87002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[36,87004,87006],{"className":1350,"code":87005,"language":1352,"meta":41,"style":41},"\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",[43,87007,87008,87016,87024,87029,87034,87039,87044,87048,87053,87058,87063,87067,87072,87076,87080,87085,87089,87097],{"__ignoreMap":41},[46,87009,87010,87012,87014],{"class":48,"line":49},[46,87011,821],{"class":56},[46,87013,53767],{"class":1361},[46,87015,53274],{"class":56},[46,87017,87018,87020,87022],{"class":48,"line":60},[46,87019,54111],{"class":56},[46,87021,53780],{"class":1361},[46,87023,53274],{"class":56},[46,87025,87026],{"class":48,"line":200},[46,87027,87028],{"class":56},"    let that\n",[46,87030,87031],{"class":48,"line":211},[46,87032,87033],{"class":56},"    function Star(uname) {\n",[46,87035,87036],{"class":48,"line":222},[46,87037,87038],{"class":56},"      this.uname = uname\n",[46,87040,87041],{"class":48,"line":636},[46,87042,87043],{"class":56},"      that = this\n",[46,87045,87046],{"class":48,"line":641},[46,87047,4217],{"class":56},[46,87049,87050],{"class":48,"line":653},[46,87051,87052],{"class":56},"    \u002F\u002F 实例对象是 ldh\n",[46,87054,87055],{"class":48,"line":659},[46,87056,87057],{"class":56},"    const ldh = new Star('刘德华')\n",[46,87059,87060],{"class":48,"line":665},[46,87061,87062],{"class":56},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[46,87064,87065],{"class":48,"line":670},[46,87066,616],{"emptyLinePlaceholder":615},[46,87068,87069],{"class":48,"line":676},[46,87070,87071],{"class":56},"    Star.sing = function () {\n",[46,87073,87074],{"class":48,"line":682},[46,87075,86948],{"class":56},[46,87077,87078],{"class":48,"line":688},[46,87079,4217],{"class":56},[46,87081,87082],{"class":48,"line":693},[46,87083,87084],{"class":56},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[46,87086,87087],{"class":48,"line":699},[46,87088,616],{"emptyLinePlaceholder":615},[46,87090,87091,87093,87095],{"class":48,"line":705},[46,87092,54384],{"class":56},[46,87094,53780],{"class":1361},[46,87096,53274],{"class":56},[46,87098,87099,87101,87103],{"class":48,"line":711},[46,87100,53752],{"class":56},[46,87102,53767],{"class":1361},[46,87104,53274],{"class":56},[19,87106,87107],{},"构造函数的this指向的是实例对象；",[19,87109,87110],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[479,87112,87114],{"id":87113},"_4132-数组扩展方法","4.13.2 数组扩展方法",[19,87116,87117],{},[3514,87118],{"alt":41,"src":87119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[36,87121,87123],{"className":1350,"code":87122,"language":1352,"meta":41,"style":41},"\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",[43,87124,87125,87133,87141,87146,87151,87156,87161,87166,87171,87176,87181,87186,87191,87195,87200,87205,87210,87215,87219,87224,87229,87234,87239,87243,87248,87253,87258,87263,87267,87272,87276,87284],{"__ignoreMap":41},[46,87126,87127,87129,87131],{"class":48,"line":49},[46,87128,821],{"class":56},[46,87130,53767],{"class":1361},[46,87132,53274],{"class":56},[46,87134,87135,87137,87139],{"class":48,"line":60},[46,87136,54111],{"class":56},[46,87138,53780],{"class":1361},[46,87140,53274],{"class":56},[46,87142,87143],{"class":48,"line":200},[46,87144,87145],{"class":56},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[46,87147,87148],{"class":48,"line":211},[46,87149,87150],{"class":56},"    const arr = [1, 2, 3]\n",[46,87152,87153],{"class":48,"line":222},[46,87154,87155],{"class":56},"    \u002F\u002F 自己定义数组的扩展方法\n",[46,87157,87158],{"class":48,"line":636},[46,87159,87160],{"class":56},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[46,87162,87163],{"class":48,"line":641},[46,87164,87165],{"class":56},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[46,87167,87168],{"class":48,"line":653},[46,87169,87170],{"class":56},"    \u002F\u002F ①.最大值\n",[46,87172,87173],{"class":48,"line":659},[46,87174,87175],{"class":56},"    Array.prototype.max = function () {\n",[46,87177,87178],{"class":48,"line":665},[46,87179,87180],{"class":56},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[46,87182,87183],{"class":48,"line":670},[46,87184,87185],{"class":56},"      return Math.max(...this)\n",[46,87187,87188],{"class":48,"line":676},[46,87189,87190],{"class":56},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[46,87192,87193],{"class":48,"line":682},[46,87194,4217],{"class":56},[46,87196,87197],{"class":48,"line":688},[46,87198,87199],{"class":56},"    console.log(arr.max())\n",[46,87201,87202],{"class":48,"line":693},[46,87203,87204],{"class":56},"    \u002F\u002F ②最小值\n",[46,87206,87207],{"class":48,"line":699},[46,87208,87209],{"class":56},"    Array.prototype.min = function () {\n",[46,87211,87212],{"class":48,"line":705},[46,87213,87214],{"class":56},"      return Math.min(...this)\n",[46,87216,87217],{"class":48,"line":711},[46,87218,4217],{"class":56},[46,87220,87221],{"class":48,"line":717},[46,87222,87223],{"class":56},"    console.log(arr.min())\n",[46,87225,87226],{"class":48,"line":723},[46,87227,87228],{"class":56},"    \u002F\u002F③求和\n",[46,87230,87231],{"class":48,"line":729},[46,87232,87233],{"class":56},"    Array.prototype.sum = function () {\n",[46,87235,87236],{"class":48,"line":735},[46,87237,87238],{"class":56},"      return this.reduce((prev, current) => prev + current, 0)\n",[46,87240,87241],{"class":48,"line":740},[46,87242,4217],{"class":56},[46,87244,87245],{"class":48,"line":745},[46,87246,87247],{"class":56},"    console.log(arr.sum())\n",[46,87249,87250],{"class":48,"line":763},[46,87251,87252],{"class":56},"    \u002F\u002F ③排序\n",[46,87254,87255],{"class":48,"line":778},[46,87256,87257],{"class":56},"    Array.prototype.rever = function () {\n",[46,87259,87260],{"class":48,"line":789},[46,87261,87262],{"class":56},"      return this.reverse()\n",[46,87264,87265],{"class":48,"line":794},[46,87266,4217],{"class":56},[46,87268,87269],{"class":48,"line":806},[46,87270,87271],{"class":56},"    console.log(arr.rever())\n",[46,87273,87274],{"class":48,"line":829},[46,87275,616],{"emptyLinePlaceholder":615},[46,87277,87278,87280,87282],{"class":48,"line":840},[46,87279,54384],{"class":56},[46,87281,53780],{"class":1361},[46,87283,53274],{"class":56},[46,87285,87286,87288,87290],{"class":48,"line":846},[46,87287,53752],{"class":56},[46,87289,53767],{"class":1361},[46,87291,53274],{"class":56},[19,87293,87294],{},[3514,87295],{"alt":41,"src":87296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[479,87298,87300],{"id":87299},"_4133-constructor-属性","4.13.3 constructor 属性",[19,87302,87303],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[19,87305,87306],{},[3514,87307],{"alt":41,"src":87308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[36,87310,87312],{"className":1350,"code":87311,"language":1352,"meta":41,"style":41},"\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",[43,87313,87314,87322,87330,87335,87340,87344,87349,87354,87359,87367],{"__ignoreMap":41},[46,87315,87316,87318,87320],{"class":48,"line":49},[46,87317,821],{"class":56},[46,87319,53767],{"class":1361},[46,87321,53274],{"class":56},[46,87323,87324,87326,87328],{"class":48,"line":60},[46,87325,54111],{"class":56},[46,87327,53780],{"class":1361},[46,87329,53274],{"class":56},[46,87331,87332],{"class":48,"line":200},[46,87333,87334],{"class":56},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[46,87336,87337],{"class":48,"line":211},[46,87338,87339],{"class":56},"    function Star() {\n",[46,87341,87342],{"class":48,"line":222},[46,87343,4217],{"class":56},[46,87345,87346],{"class":48,"line":636},[46,87347,87348],{"class":56},"    const ldh = new Star()\n",[46,87350,87351],{"class":48,"line":641},[46,87352,87353],{"class":56},"    console.log(Star.prototype)\n",[46,87355,87356],{"class":48,"line":653},[46,87357,87358],{"class":56},"    console.log(Star.prototype.constructor === Star)\n",[46,87360,87361,87363,87365],{"class":48,"line":659},[46,87362,54384],{"class":56},[46,87364,53780],{"class":1361},[46,87366,53274],{"class":56},[46,87368,87369,87371,87373],{"class":48,"line":665},[46,87370,53752],{"class":56},[46,87372,53767],{"class":1361},[46,87374,53274],{"class":56},[19,87376,87377],{},[3514,87378],{"alt":41,"src":87379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[19,87381,87382],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[36,87384,87386],{"className":1350,"code":87385,"language":1352,"meta":41,"style":41},"  \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",[43,87387,87388,87396,87400,87404,87408,87413,87418,87423,87427,87432,87437,87442,87447,87452,87457,87461,87465,87470,87475,87480,87484,87489,87494,87498,87502,87506],{"__ignoreMap":41},[46,87389,87390,87392,87394],{"class":48,"line":49},[46,87391,54111],{"class":56},[46,87393,53780],{"class":1361},[46,87395,53274],{"class":56},[46,87397,87398],{"class":48,"line":60},[46,87399,87334],{"class":56},[46,87401,87402],{"class":48,"line":200},[46,87403,87339],{"class":56},[46,87405,87406],{"class":48,"line":211},[46,87407,4217],{"class":56},[46,87409,87410],{"class":48,"line":222},[46,87411,87412],{"class":56},"    \u002F\u002F const ldh = new Star()\n",[46,87414,87415],{"class":48,"line":636},[46,87416,87417],{"class":56},"    \u002F\u002F console.log(Star.prototype)\n",[46,87419,87420],{"class":48,"line":641},[46,87421,87422],{"class":56},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[46,87424,87425],{"class":48,"line":653},[46,87426,616],{"emptyLinePlaceholder":615},[46,87428,87429],{"class":48,"line":659},[46,87430,87431],{"class":56},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[46,87433,87434],{"class":48,"line":665},[46,87435,87436],{"class":56},"    \u002F\u002F Star.prototype.sing = function () {\n",[46,87438,87439],{"class":48,"line":670},[46,87440,87441],{"class":56},"    \u002F\u002F   console.log('唱歌')\n",[46,87443,87444],{"class":48,"line":676},[46,87445,87446],{"class":56},"    \u002F\u002F }\n",[46,87448,87449],{"class":48,"line":682},[46,87450,87451],{"class":56},"    \u002F\u002F Star.prototype.dance = function () {\n",[46,87453,87454],{"class":48,"line":688},[46,87455,87456],{"class":56},"    \u002F\u002F   console.log('跳舞')\n",[46,87458,87459],{"class":48,"line":693},[46,87460,87446],{"class":56},[46,87462,87463],{"class":48,"line":699},[46,87464,87353],{"class":56},[46,87466,87467],{"class":48,"line":705},[46,87468,87469],{"class":56},"    Star.prototype = {\n",[46,87471,87472],{"class":48,"line":711},[46,87473,87474],{"class":56},"      sing: function () {\n",[46,87476,87477],{"class":48,"line":717},[46,87478,87479],{"class":56},"        console.log('唱歌')\n",[46,87481,87482],{"class":48,"line":723},[46,87483,79857],{"class":56},[46,87485,87486],{"class":48,"line":729},[46,87487,87488],{"class":56},"      dance: function () {\n",[46,87490,87491],{"class":48,"line":735},[46,87492,87493],{"class":56},"        console.log('跳舞')\n",[46,87495,87496],{"class":48,"line":740},[46,87497,54365],{"class":56},[46,87499,87500],{"class":48,"line":745},[46,87501,4217],{"class":56},[46,87503,87504],{"class":48,"line":763},[46,87505,87353],{"class":56},[46,87507,87508,87510,87512],{"class":48,"line":778},[46,87509,54384],{"class":56},[46,87511,53780],{"class":1361},[46,87513,53274],{"class":56},[19,87515,87516],{},"进行输出结果后会发现：",[19,87518,87519],{},[3514,87520],{"alt":41,"src":87521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[19,87523,87524],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[19,87526,87527],{},"所以，要重新指回创造这个原型对象的构造函数",[36,87529,87531],{"className":73178,"code":87530,"language":73180,"meta":41,"style":41},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[43,87532,87533,87547,87552,87557,87568,87581,87586,87597,87611,87615],{"__ignoreMap":41},[46,87534,87535,87538,87540,87543,87545],{"class":48,"line":49},[46,87536,87537],{"class":180},"Star",[46,87539,2744],{"class":56},[46,87541,87542],{"class":180},"prototype",[46,87544,647],{"class":52},[46,87546,17573],{"class":56},[46,87548,87549],{"class":48,"line":60},[46,87550,87551],{"class":2253},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[46,87553,87554],{"class":48,"line":200},[46,87555,87556],{"class":56},"  constructor: Star,\n",[46,87558,87559,87562,87564,87566],{"class":48,"line":211},[46,87560,87561],{"class":169},"  sing",[46,87563,53404],{"class":56},[46,87565,56414],{"class":52},[46,87567,56417],{"class":56},[46,87569,87570,87572,87574,87576,87579],{"class":48,"line":222},[46,87571,75718],{"class":56},[46,87573,60212],{"class":169},[46,87575,1152],{"class":56},[46,87577,87578],{"class":173},"'唱歌'",[46,87580,459],{"class":56},[46,87582,87583],{"class":48,"line":636},[46,87584,87585],{"class":56},"   },\n",[46,87587,87588,87591,87593,87595],{"class":48,"line":641},[46,87589,87590],{"class":169},"   dance",[46,87592,53404],{"class":56},[46,87594,56414],{"class":52},[46,87596,56417],{"class":56},[46,87598,87599,87602,87604,87606,87609],{"class":48,"line":653},[46,87600,87601],{"class":56},"     console.",[46,87603,60212],{"class":169},[46,87605,1152],{"class":56},[46,87607,87608],{"class":173},"'跳舞'",[46,87610,459],{"class":56},[46,87612,87613],{"class":48,"line":659},[46,87614,6326],{"class":56},[46,87616,87617],{"class":48,"line":665},[46,87618,3616],{"class":56},[19,87620,87621],{},[3514,87622],{"alt":41,"src":87623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[19,87625,87626],{},"总结1：",[19,87628,87629],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[19,87631,87632],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[19,87634,87635],{},"constructor指的是他的来源",[19,87637,87638],{},[3514,87639],{"alt":41,"src":87640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[19,87642,87643],{},[3514,87644],{"alt":41,"src":87645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[19,87647,87648],{},"总结2：",[19,87650,87651],{},[3514,87652],{"alt":41,"src":87653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[19,87655,87656],{},[3514,87657],{"alt":41,"src":87658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[19,87660,87661],{},[3514,87662],{"alt":41,"src":87663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[479,87665,87667],{"id":87666},"_4134-对象原型","4.13.4 对象原型",[19,87669,87670],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[19,87672,87673],{},"对象原型就是__proto__这个属性",[19,87675,87676],{},[3514,87677],{"alt":41,"src":87678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[19,87680,87681],{},[3514,87682],{"alt":41,"src":87683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[19,87685,87686],{},[3514,87687],{"alt":41,"src":87688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[19,87690,87691],{},[3514,87692],{"alt":41,"src":87693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[36,87695,87697],{"className":1350,"code":87696,"language":1352,"meta":41,"style":41},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[43,87698,87699,87707,87715,87719,87723,87727,87732,87740],{"__ignoreMap":41},[46,87700,87701,87703,87705],{"class":48,"line":49},[46,87702,821],{"class":56},[46,87704,53767],{"class":1361},[46,87706,53274],{"class":56},[46,87708,87709,87711,87713],{"class":48,"line":60},[46,87710,54111],{"class":56},[46,87712,53780],{"class":1361},[46,87714,53274],{"class":56},[46,87716,87717],{"class":48,"line":200},[46,87718,87339],{"class":56},[46,87720,87721],{"class":48,"line":211},[46,87722,4217],{"class":56},[46,87724,87725],{"class":48,"line":222},[46,87726,87348],{"class":56},[46,87728,87729],{"class":48,"line":636},[46,87730,87731],{"class":56},"    console.log(ldh)\n",[46,87733,87734,87736,87738],{"class":48,"line":641},[46,87735,54384],{"class":56},[46,87737,53780],{"class":1361},[46,87739,53274],{"class":56},[46,87741,87742,87744,87746],{"class":48,"line":653},[46,87743,53752],{"class":56},[46,87745,53767],{"class":1361},[46,87747,53274],{"class":56},[19,87749,87750],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[19,87752,87753],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[19,87755,87756],{},[3514,87757],{"alt":41,"src":87758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[19,87760,87761],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[19,87763,87764],{},"对象原型指向原型对象",[19,87766,87767],{},[3514,87768],{"alt":41,"src":87769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[19,87771,87772],{},[3514,87773],{"alt":41,"src":87774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[19,87776,87777],{},[3514,87778],{"alt":41,"src":87779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[479,87781,87783],{"id":87782},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[19,87785,87786],{},[3514,87787],{"alt":41,"src":87788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[23,87790,87791,87794,87797,87800],{},[26,87792,87793],{},"构造函数通过new的形式实例化得到实例对象",[26,87795,87796],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[26,87798,87799],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[26,87801,87802],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[19,87804,87805],{},[3514,87806],{"alt":41,"src":87807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[19,87809,87810],{},"题目梳理：",[19,87812,87813],{},[3514,87814],{"alt":41,"src":87815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[479,87817,87819],{"id":87818},"_4136-原型继承","4.13.6 原型继承",[19,87821,87822],{},[3514,87823],{"alt":41,"src":87824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[19,87826,87827],{},[3514,87828],{"alt":41,"src":87829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[19,87831,87832],{},[3514,87833],{"alt":41,"src":87834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[19,87836,87837],{},[3514,87838],{"alt":41,"src":87839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[19,87841,87842],{},[3514,87843],{"alt":41,"src":87844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[19,87846,87847],{},[3514,87848],{"alt":41,"src":87849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[19,87851,87852],{},[3514,87853],{"alt":41,"src":87854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[19,87856,87857],{},[3514,87858],{"alt":41,"src":87859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[19,87861,87862],{},"回顾：构造函数每次new得到对象都是不同的",[479,87864,87866],{"id":87865},"_4137-原型链","4.13.7 原型链",[19,87868,87869],{},[3514,87870],{"alt":41,"src":87871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[19,87873,87874],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[19,87876,87877],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[19,87879,87880],{},"大哥是Object",[19,87882,87883],{},[3514,87884],{"alt":41,"src":87885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[19,87887,87888],{},[3514,87889],{"alt":41,"src":87890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[19,87892,87893],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[19,87895,87896],{},"万物皆对象",[479,87898,87900],{"id":87899},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[19,87902,87903],{},"模态框",[19,87905,87906],{},"以后遇见这个效果直接使用这个就行",[19,87908,87909],{},[3514,87910],{"alt":41,"src":87911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[19,87913,87914],{},[3514,87915],{"alt":41,"src":87916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[19,87918,87919],{},[3514,87920],{"alt":41,"src":87921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[19,87923,87924],{},[3514,87925],{"alt":41,"src":87926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[19,87928,87929],{},"补充知识点：",[23,87931,87932],{},[26,87933,87934],{},"append()",[19,87936,87937],{},[3514,87938],{"alt":41,"src":87939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[36,87941,87943],{"className":52601,"code":87942,"language":52603,"meta":41,"style":41},"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",[43,87944,87945,87950,87955,87960,87964,87968,87972,87977,87982,87987,87991],{"__ignoreMap":41},[46,87946,87947],{"class":48,"line":49},[46,87948,87949],{"class":56},"append(param1)\n",[46,87951,87952],{"class":48,"line":60},[46,87953,87954],{"class":56},"append(param1, param2)\n",[46,87956,87957],{"class":48,"line":200},[46,87958,87959],{"class":56},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[46,87961,87962],{"class":48,"line":211},[46,87963,616],{"emptyLinePlaceholder":615},[46,87965,87966],{"class":48,"line":222},[46,87967,616],{"emptyLinePlaceholder":615},[46,87969,87970],{"class":48,"line":636},[46,87971,616],{"emptyLinePlaceholder":615},[46,87973,87974],{"class":48,"line":641},[46,87975,87976],{"class":56},"let div = document.createElement(\"div\");\n",[46,87978,87979],{"class":48,"line":653},[46,87980,87981],{"class":56},"let p = document.createElement(\"p\");\n",[46,87983,87984],{"class":48,"line":659},[46,87985,87986],{"class":56},"div.append(p);\n",[46,87988,87989],{"class":48,"line":665},[46,87990,616],{"emptyLinePlaceholder":615},[46,87992,87993,87996,87998],{"class":48,"line":670},[46,87994,87995],{"class":56},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[46,87997,19],{"class":1361},[46,87999,88000],{"class":56},"> ]\n",[23,88002,88003],{"start":60},[26,88004,88005],{},"remove()",[19,88007,88008],{},"自己删自己",[19,88010,88011],{},[3514,88012],{"alt":41,"src":88013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[36,88015,88017],{"className":52601,"code":88016,"language":52603,"meta":41,"style":41},"\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",[43,88018,88019,88029,88043,88047,88055,88069,88089,88101,88109,88116,88128,88141,88176,88188,88199,88211,88223,88235,88262,88272,88276,88280,88289,88301,88315,88325,88337,88341,88345,88355,88366,88376,88386,88399,88412,88422,88426,88430,88439,88449,88461,88465,88469,88478,88488,88498,88510,88514,88518,88528,88544,88555,88565,88575,88587,88599,88611,88615,88619,88632,88643,88647,88655,88663,88667,88675,88695,88715,88723,88728,88754,88759,88764,88783,88788,88800,88805,88816,88826,88836,88841,88846,88850,88855,88860,88865,88885,88890,88910,88915,88929,88934,88939,88944,88960,88964,88969,88998,89003,89008,89013,89024,89028,89032,89036,89041,89066,89071,89096,89101,89110,89114,89119,89144,89148,89173,89177,89186,89190,89195,89213,89223,89227,89235,89243,89247],{"__ignoreMap":41},[46,88020,88021,88023,88025,88027],{"class":48,"line":49},[46,88022,53265],{"class":56},[46,88024,53268],{"class":1361},[46,88026,53271],{"class":169},[46,88028,53274],{"class":56},[46,88030,88031,88033,88035,88037,88039,88041],{"class":48,"line":60},[46,88032,821],{"class":56},[46,88034,52603],{"class":1361},[46,88036,53283],{"class":169},[46,88038,79],{"class":56},[46,88040,53288],{"class":173},[46,88042,53274],{"class":56},[46,88044,88045],{"class":48,"line":200},[46,88046,616],{"emptyLinePlaceholder":615},[46,88048,88049,88051,88053],{"class":48,"line":211},[46,88050,821],{"class":56},[46,88052,53301],{"class":1361},[46,88054,53274],{"class":56},[46,88056,88057,88059,88061,88063,88065,88067],{"class":48,"line":222},[46,88058,54111],{"class":56},[46,88060,53311],{"class":1361},[46,88062,53314],{"class":169},[46,88064,79],{"class":56},[46,88066,53319],{"class":173},[46,88068,53274],{"class":56},[46,88070,88071,88073,88075,88077,88079,88081,88083,88085,88087],{"class":48,"line":636},[46,88072,54111],{"class":56},[46,88074,53311],{"class":1361},[46,88076,1364],{"class":169},[46,88078,79],{"class":56},[46,88080,53358],{"class":173},[46,88082,53338],{"class":169},[46,88084,79],{"class":56},[46,88086,53365],{"class":173},[46,88088,53274],{"class":56},[46,88090,88091,88093,88095,88097,88099],{"class":48,"line":641},[46,88092,54111],{"class":56},[46,88094,53374],{"class":1361},[46,88096,53377],{"class":56},[46,88098,53374],{"class":1361},[46,88100,53274],{"class":56},[46,88102,88103,88105,88107],{"class":48,"line":653},[46,88104,54111],{"class":56},[46,88106,2098],{"class":1361},[46,88108,53274],{"class":56},[46,88110,88111,88114],{"class":48,"line":659},[46,88112,88113],{"class":169},"    .modal",[46,88115,17573],{"class":56},[46,88117,88118,88120,88122,88124,88126],{"class":48,"line":665},[46,88119,56736],{"class":180},[46,88121,53404],{"class":56},[46,88123,5991],{"class":180},[46,88125,53459],{"class":52},[46,88127,3345],{"class":56},[46,88129,88130,88133,88135,88137,88139],{"class":48,"line":670},[46,88131,88132],{"class":180},"      min-height",[46,88134,53404],{"class":56},[46,88136,1155],{"class":180},[46,88138,53459],{"class":52},[46,88140,3345],{"class":56},[46,88142,88143,88145,88147,88149,88151,88153,88155,88157,88159,88161,88163,88165,88167,88169,88171,88174],{"class":48,"line":676},[46,88144,80715],{"class":180},[46,88146,53404],{"class":56},[46,88148,2379],{"class":180},[46,88150,887],{"class":180},[46,88152,4068],{"class":180},[46,88154,53459],{"class":52},[46,88156,80732],{"class":180},[46,88158,1152],{"class":56},[46,88160,2379],{"class":180},[46,88162,448],{"class":56},[46,88164,2379],{"class":180},[46,88166,448],{"class":56},[46,88168,2379],{"class":180},[46,88170,448],{"class":56},[46,88172,88173],{"class":180},"0.1",[46,88175,4740],{"class":56},[46,88177,88178,88180,88182,88184,88186],{"class":48,"line":682},[46,88179,57099],{"class":180},[46,88181,53404],{"class":56},[46,88183,2481],{"class":180},[46,88185,53459],{"class":52},[46,88187,3345],{"class":56},[46,88189,88190,88192,88194,88197],{"class":48,"line":688},[46,88191,56724],{"class":180},[46,88193,53404],{"class":56},[46,88195,88196],{"class":180},"fixed",[46,88198,3345],{"class":56},[46,88200,88201,88204,88206,88209],{"class":48,"line":693},[46,88202,88203],{"class":180},"      z-index",[46,88205,53404],{"class":56},[46,88207,88208],{"class":180},"999",[46,88210,3345],{"class":56},[46,88212,88213,88215,88217,88219,88221],{"class":48,"line":699},[46,88214,56803],{"class":180},[46,88216,53404],{"class":56},[46,88218,2842],{"class":180},[46,88220,2515],{"class":52},[46,88222,3345],{"class":56},[46,88224,88225,88227,88229,88231,88233],{"class":48,"line":705},[46,88226,56912],{"class":180},[46,88228,53404],{"class":56},[46,88230,2842],{"class":180},[46,88232,2515],{"class":52},[46,88234,3345],{"class":56},[46,88236,88237,88239,88241,88243,88245,88248,88250,88252,88254,88256,88258,88260],{"class":48,"line":711},[46,88238,80756],{"class":180},[46,88240,53404],{"class":56},[46,88242,80761],{"class":180},[46,88244,1152],{"class":56},[46,88246,88247],{"class":180},"-50",[46,88249,2515],{"class":52},[46,88251,448],{"class":56},[46,88253,88247],{"class":180},[46,88255,2515],{"class":52},[46,88257,448],{"class":56},[46,88259,2379],{"class":180},[46,88261,4740],{"class":56},[46,88263,88264,88266,88268,88270],{"class":48,"line":717},[46,88265,56849],{"class":180},[46,88267,53404],{"class":56},[46,88269,62807],{"class":180},[46,88271,3345],{"class":56},[46,88273,88274],{"class":48,"line":723},[46,88275,4217],{"class":56},[46,88277,88278],{"class":48,"line":729},[46,88279,616],{"emptyLinePlaceholder":615},[46,88281,88282,88284,88287],{"class":48,"line":735},[46,88283,88113],{"class":169},[46,88285,88286],{"class":169}," .header",[46,88288,17573],{"class":56},[46,88290,88291,88293,88295,88297,88299],{"class":48,"line":740},[46,88292,59324],{"class":180},[46,88294,53404],{"class":56},[46,88296,2588],{"class":180},[46,88298,53459],{"class":52},[46,88300,3345],{"class":56},[46,88302,88303,88305,88307,88309,88311,88313],{"class":48,"line":745},[46,88304,56660],{"class":180},[46,88306,53404],{"class":56},[46,88308,2379],{"class":180},[46,88310,4068],{"class":180},[46,88312,53459],{"class":52},[46,88314,3345],{"class":56},[46,88316,88317,88319,88321,88323],{"class":48,"line":763},[46,88318,56724],{"class":180},[46,88320,53404],{"class":56},[46,88322,56729],{"class":180},[46,88324,3345],{"class":56},[46,88326,88327,88329,88331,88333,88335],{"class":48,"line":778},[46,88328,56887],{"class":180},[46,88330,53404],{"class":56},[46,88332,2886],{"class":180},[46,88334,53459],{"class":52},[46,88336,3345],{"class":56},[46,88338,88339],{"class":48,"line":789},[46,88340,4217],{"class":56},[46,88342,88343],{"class":48,"line":794},[46,88344,616],{"emptyLinePlaceholder":615},[46,88346,88347,88349,88351,88353],{"class":48,"line":806},[46,88348,88113],{"class":169},[46,88350,88286],{"class":169},[46,88352,5052],{"class":1361},[46,88354,17573],{"class":56},[46,88356,88357,88360,88362,88364],{"class":48,"line":829},[46,88358,88359],{"class":180},"      font-style",[46,88361,53404],{"class":56},[46,88363,65806],{"class":180},[46,88365,3345],{"class":56},[46,88367,88368,88370,88372,88374],{"class":48,"line":840},[46,88369,59381],{"class":180},[46,88371,53404],{"class":56},[46,88373,64035],{"class":180},[46,88375,3345],{"class":56},[46,88377,88378,88380,88382,88384],{"class":48,"line":846},[46,88379,56724],{"class":180},[46,88381,53404],{"class":56},[46,88383,56796],{"class":180},[46,88385,3345],{"class":56},[46,88387,88388,88391,88393,88395,88397],{"class":48,"line":852},[46,88389,88390],{"class":180},"      right",[46,88392,53404],{"class":56},[46,88394,2761],{"class":180},[46,88396,53459],{"class":52},[46,88398,3345],{"class":56},[46,88400,88401,88403,88405,88408,88410],{"class":48,"line":857},[46,88402,56912],{"class":180},[46,88404,53404],{"class":56},[46,88406,88407],{"class":180},"-2",[46,88409,53459],{"class":52},[46,88411,3345],{"class":56},[46,88413,88414,88416,88418,88420],{"class":48,"line":875},[46,88415,63990],{"class":180},[46,88417,53404],{"class":56},[46,88419,63995],{"class":180},[46,88421,3345],{"class":56},[46,88423,88424],{"class":48,"line":892},[46,88425,4217],{"class":56},[46,88427,88428],{"class":48,"line":898},[46,88429,616],{"emptyLinePlaceholder":615},[46,88431,88432,88434,88437],{"class":48,"line":903},[46,88433,88113],{"class":169},[46,88435,88436],{"class":169}," .body",[46,88438,17573],{"class":56},[46,88440,88441,88443,88445,88447],{"class":48,"line":908},[46,88442,59251],{"class":180},[46,88444,53404],{"class":56},[46,88446,53559],{"class":180},[46,88448,3345],{"class":56},[46,88450,88451,88453,88455,88457,88459],{"class":48,"line":925},[46,88452,56660],{"class":180},[46,88454,53404],{"class":56},[46,88456,2633],{"class":180},[46,88458,53459],{"class":52},[46,88460,3345],{"class":56},[46,88462,88463],{"class":48,"line":1238},[46,88464,4217],{"class":56},[46,88466,88467],{"class":48,"line":1251},[46,88468,616],{"emptyLinePlaceholder":615},[46,88470,88471,88473,88476],{"class":48,"line":1256},[46,88472,88113],{"class":169},[46,88474,88475],{"class":169}," .footer",[46,88477,17573],{"class":56},[46,88479,88480,88482,88484,88486],{"class":48,"line":1261},[46,88481,56974],{"class":180},[46,88483,53404],{"class":56},[46,88485,53444],{"class":180},[46,88487,3345],{"class":56},[46,88489,88490,88492,88494,88496],{"class":48,"line":1274},[46,88491,56985],{"class":180},[46,88493,53404],{"class":56},[46,88495,53547],{"class":180},[46,88497,3345],{"class":56},[46,88499,88500,88502,88504,88506,88508],{"class":48,"line":10061},[46,88501,56660],{"class":180},[46,88503,53404],{"class":56},[46,88505,2633],{"class":180},[46,88507,53459],{"class":52},[46,88509,3345],{"class":56},[46,88511,88512],{"class":48,"line":11720},[46,88513,4217],{"class":56},[46,88515,88516],{"class":48,"line":11745},[46,88517,616],{"emptyLinePlaceholder":615},[46,88519,88520,88522,88524,88526],{"class":48,"line":11768},[46,88521,88113],{"class":169},[46,88523,88475],{"class":169},[46,88525,3450],{"class":1361},[46,88527,17573],{"class":56},[46,88529,88530,88532,88534,88536,88538,88540,88542],{"class":48,"line":11792},[46,88531,56660],{"class":180},[46,88533,53404],{"class":56},[46,88535,2266],{"class":180},[46,88537,53459],{"class":52},[46,88539,4113],{"class":180},[46,88541,53459],{"class":52},[46,88543,3345],{"class":56},[46,88545,88546,88548,88550,88553],{"class":48,"line":11797},[46,88547,63686],{"class":180},[46,88549,53404],{"class":56},[46,88551,88552],{"class":180},"#ccc",[46,88554,3345],{"class":56},[46,88556,88557,88559,88561,88563],{"class":48,"line":11802},[46,88558,65935],{"class":180},[46,88560,53404],{"class":56},[46,88562,56702],{"class":180},[46,88564,3345],{"class":56},[46,88566,88567,88569,88571,88573],{"class":48,"line":11807},[46,88568,59381],{"class":180},[46,88570,53404],{"class":56},[46,88572,62807],{"class":180},[46,88574,3345],{"class":56},[46,88576,88577,88579,88581,88583,88585],{"class":48,"line":11816},[46,88578,57099],{"class":180},[46,88580,53404],{"class":56},[46,88582,2272],{"class":180},[46,88584,53459],{"class":52},[46,88586,3345],{"class":56},[46,88588,88589,88591,88593,88595,88597],{"class":48,"line":11821},[46,88590,63715],{"class":180},[46,88592,53404],{"class":56},[46,88594,2633],{"class":180},[46,88596,53459],{"class":52},[46,88598,3345],{"class":56},[46,88600,88601,88603,88605,88607,88609],{"class":48,"line":11827},[46,88602,56887],{"class":180},[46,88604,53404],{"class":56},[46,88606,2735],{"class":180},[46,88608,53459],{"class":52},[46,88610,3345],{"class":56},[46,88612,88613],{"class":48,"line":11848},[46,88614,4217],{"class":56},[46,88616,88617],{"class":48,"line":11854},[46,88618,616],{"emptyLinePlaceholder":615},[46,88620,88621,88623,88625,88627,88630],{"class":48,"line":11868},[46,88622,88113],{"class":169},[46,88624,88475],{"class":169},[46,88626,3450],{"class":1361},[46,88628,88629],{"class":169},".submit",[46,88631,17573],{"class":56},[46,88633,88634,88636,88638,88641],{"class":48,"line":11874},[46,88635,56849],{"class":180},[46,88637,53404],{"class":56},[46,88639,88640],{"class":180},"#369",[46,88642,3345],{"class":56},[46,88644,88645],{"class":48,"line":11901},[46,88646,4217],{"class":56},[46,88648,88649,88651,88653],{"class":48,"line":11910},[46,88650,54384],{"class":56},[46,88652,2098],{"class":1361},[46,88654,53274],{"class":56},[46,88656,88657,88659,88661],{"class":48,"line":11916},[46,88658,53752],{"class":56},[46,88660,53301],{"class":1361},[46,88662,53274],{"class":56},[46,88664,88665],{"class":48,"line":11924},[46,88666,616],{"emptyLinePlaceholder":615},[46,88668,88669,88671,88673],{"class":48,"line":11929},[46,88670,821],{"class":56},[46,88672,53767],{"class":1361},[46,88674,53274],{"class":56},[46,88676,88677,88679,88681,88683,88685,88688,88691,88693],{"class":48,"line":18605},[46,88678,54111],{"class":56},[46,88680,55852],{"class":1361},[46,88682,16960],{"class":169},[46,88684,79],{"class":56},[46,88686,88687],{"class":173},"\"delete\"",[46,88689,88690],{"class":56},">删除\u003C\u002F",[46,88692,55852],{"class":1361},[46,88694,53274],{"class":56},[46,88696,88697,88699,88701,88703,88705,88708,88711,88713],{"class":48,"line":18611},[46,88698,54111],{"class":56},[46,88700,55852],{"class":1361},[46,88702,16960],{"class":169},[46,88704,79],{"class":56},[46,88706,88707],{"class":173},"\"login\"",[46,88709,88710],{"class":56},">登录\u003C\u002F",[46,88712,55852],{"class":1361},[46,88714,53274],{"class":56},[46,88716,88717,88719,88721],{"class":48,"line":18634},[46,88718,54111],{"class":56},[46,88720,53780],{"class":1361},[46,88722,53274],{"class":56},[46,88724,88725],{"class":48,"line":18640},[46,88726,88727],{"class":2253},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[46,88729,88730,88732,88735,88737,88739,88741,88743,88745,88748,88750,88752],{"class":48,"line":18663},[46,88731,72049],{"class":52},[46,88733,88734],{"class":169}," Modal",[46,88736,1152],{"class":56},[46,88738,53374],{"class":439},[46,88740,647],{"class":52},[46,88742,71895],{"class":173},[46,88744,448],{"class":56},[46,88746,88747],{"class":439},"message",[46,88749,647],{"class":52},[46,88751,71895],{"class":173},[46,88753,14445],{"class":56},[46,88755,88756],{"class":48,"line":18677},[46,88757,88758],{"class":2253},"      \u002F\u002F 创建Model 模态框盒子\n",[46,88760,88761],{"class":48,"line":18697},[46,88762,88763],{"class":2253},"      \u002F\u002F 1.1 创建div标签\n",[46,88765,88766,88768,88771,88773,88775,88777,88779,88781],{"class":48,"line":18703},[46,88767,72016],{"class":180},[46,88769,88770],{"class":56},".modalBox ",[46,88772,79],{"class":52},[46,88774,56361],{"class":56},[46,88776,72116],{"class":169},[46,88778,1152],{"class":56},[46,88780,83895],{"class":173},[46,88782,459],{"class":56},[46,88784,88785],{"class":48,"line":18714},[46,88786,88787],{"class":2253},"      \u002F\u002F 1.2 给div 添加类名为model\n",[46,88789,88790,88792,88795,88797],{"class":48,"line":18737},[46,88791,72016],{"class":180},[46,88793,88794],{"class":56},".modalBox.className ",[46,88796,79],{"class":52},[46,88798,88799],{"class":173}," 'modal'\n",[46,88801,88802],{"class":48,"line":18759},[46,88803,88804],{"class":2253},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[46,88806,88807,88809,88812,88814],{"class":48,"line":18764},[46,88808,72016],{"class":180},[46,88810,88811],{"class":56},".modalBox.innerHTML ",[46,88813,79],{"class":52},[46,88815,72133],{"class":173},[46,88817,88818,88821,88823],{"class":48,"line":18770},[46,88819,88820],{"class":173},"        \u003Cdiv class=\"header\">${",[46,88822,53374],{"class":56},[46,88824,88825],{"class":173},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[46,88827,88828,88831,88833],{"class":48,"line":18784},[46,88829,88830],{"class":173},"        \u003Cdiv class=\"body\">${",[46,88832,88747],{"class":56},[46,88834,88835],{"class":173},"}\u003C\u002Fdiv>\n",[46,88837,88838],{"class":48,"line":18797},[46,88839,88840],{"class":173},"      `\n",[46,88842,88843],{"class":48,"line":18802},[46,88844,88845],{"class":2253},"      \u002F\u002F console.log(this.modalBox)\n",[46,88847,88848],{"class":48,"line":18816},[46,88849,4217],{"class":56},[46,88851,88852],{"class":48,"line":18821},[46,88853,88854],{"class":2253},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[46,88856,88857],{"class":48,"line":18827},[46,88858,88859],{"class":2253},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[46,88861,88862],{"class":48,"line":18832},[46,88863,88864],{"class":2253},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[46,88866,88867,88870,88872,88874,88876,88879,88881,88883],{"class":48,"line":18846},[46,88868,88869],{"class":180},"    Modal",[46,88871,2744],{"class":56},[46,88873,87542],{"class":180},[46,88875,2744],{"class":56},[46,88877,88878],{"class":169},"open",[46,88880,647],{"class":52},[46,88882,60883],{"class":52},[46,88884,56417],{"class":56},[46,88886,88887],{"class":48,"line":18851},[46,88888,88889],{"class":2253},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[46,88891,88892,88894,88897,88899,88901,88903,88905,88908],{"class":48,"line":18856},[46,88893,60193],{"class":52},[46,88895,88896],{"class":180}," box",[46,88898,647],{"class":52},[46,88900,56361],{"class":56},[46,88902,56364],{"class":169},[46,88904,1152],{"class":56},[46,88906,88907],{"class":173},"'.modal'",[46,88909,459],{"class":56},[46,88911,88912],{"class":48,"line":18870},[46,88913,88914],{"class":2253},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[46,88916,88917,88920,88922,88925,88927],{"class":48,"line":18882},[46,88918,88919],{"class":56},"      box ",[46,88921,3755],{"class":52},[46,88923,88924],{"class":56}," box.",[46,88926,58971],{"class":169},[46,88928,4006],{"class":56},[46,88930,88931],{"class":48,"line":18887},[46,88932,88933],{"class":2253},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[46,88935,88936],{"class":48,"line":18900},[46,88937,88938],{"class":2253},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[46,88940,88941],{"class":48,"line":18905},[46,88942,88943],{"class":2253},"      \u002F\u002F append可以增加对象\n",[46,88945,88946,88949,88952,88954,88957],{"class":48,"line":18910},[46,88947,88948],{"class":56},"      document.body.",[46,88950,88951],{"class":169},"append",[46,88953,1152],{"class":56},[46,88955,88956],{"class":180},"this",[46,88958,88959],{"class":56},".modalBox)\n",[46,88961,88962],{"class":48,"line":18915},[46,88963,616],{"emptyLinePlaceholder":615},[46,88965,88966],{"class":48,"line":18928},[46,88967,88968],{"class":2253},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[46,88970,88971,88973,88976,88978,88980,88983,88985,88987,88989,88991,88994,88996],{"class":48,"line":18933},[46,88972,72016],{"class":180},[46,88974,88975],{"class":56},".modalBox.",[46,88977,56364],{"class":169},[46,88979,1152],{"class":56},[46,88981,88982],{"class":173},"'i'",[46,88984,32806],{"class":56},[46,88986,59778],{"class":169},[46,88988,1152],{"class":56},[46,88990,59783],{"class":173},[46,88992,88993],{"class":56},", () ",[46,88995,86685],{"class":52},[46,88997,17573],{"class":56},[46,88999,89000],{"class":48,"line":34607},[46,89001,89002],{"class":2253},"        \u002F\u002F 这个地方需要用到箭头函数\n",[46,89004,89005],{"class":48,"line":34613},[46,89006,89007],{"class":2253},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[46,89009,89010],{"class":48,"line":34619},[46,89011,89012],{"class":2253},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[46,89014,89015,89017,89019,89022],{"class":48,"line":34625},[46,89016,66691],{"class":180},[46,89018,2744],{"class":56},[46,89020,89021],{"class":169},"close",[46,89023,4006],{"class":56},[46,89025,89026],{"class":48,"line":34631},[46,89027,66780],{"class":56},[46,89029,89030],{"class":48,"line":34642},[46,89031,4217],{"class":56},[46,89033,89034],{"class":48,"line":34648},[46,89035,616],{"emptyLinePlaceholder":615},[46,89037,89038],{"class":48,"line":34668},[46,89039,89040],{"class":2253},"    \u002F\u002F 测试一下 点击 删除按钮\n",[46,89042,89043,89045,89047,89049,89052,89054,89056,89058,89060,89062,89064],{"class":48,"line":34674},[46,89044,54374],{"class":56},[46,89046,56364],{"class":169},[46,89048,1152],{"class":56},[46,89050,89051],{"class":173},"'#delete'",[46,89053,32806],{"class":56},[46,89055,59778],{"class":169},[46,89057,1152],{"class":56},[46,89059,59783],{"class":173},[46,89061,88993],{"class":56},[46,89063,86685],{"class":52},[46,89065,17573],{"class":56},[46,89067,89068],{"class":48,"line":34685},[46,89069,89070],{"class":2253},"      \u002F\u002F 先调用Model构造函数\n",[46,89072,89073,89075,89078,89080,89082,89084,89086,89089,89091,89094],{"class":48,"line":34691},[46,89074,60193],{"class":52},[46,89076,89077],{"class":180}," del",[46,89079,647],{"class":52},[46,89081,13582],{"class":52},[46,89083,88734],{"class":169},[46,89085,1152],{"class":56},[46,89087,89088],{"class":173},"'温馨的提示'",[46,89090,448],{"class":56},[46,89092,89093],{"class":173},"'您没有删除权限操作'",[46,89095,459],{"class":56},[46,89097,89098],{"class":48,"line":34697},[46,89099,89100],{"class":2253},"      \u002F\u002F 实例对象调用open方法\n",[46,89102,89103,89106,89108],{"class":48,"line":34703},[46,89104,89105],{"class":56},"      del.",[46,89107,88878],{"class":169},[46,89109,4006],{"class":56},[46,89111,89112],{"class":48,"line":34709},[46,89113,35434],{"class":56},[46,89115,89116],{"class":48,"line":34715},[46,89117,89118],{"class":2253},"    \u002F\u002F 测试一下 点击 登录按钮\n",[46,89120,89121,89123,89125,89127,89130,89132,89134,89136,89138,89140,89142],{"class":48,"line":34721},[46,89122,54374],{"class":56},[46,89124,56364],{"class":169},[46,89126,1152],{"class":56},[46,89128,89129],{"class":173},"'#login'",[46,89131,32806],{"class":56},[46,89133,59778],{"class":169},[46,89135,1152],{"class":56},[46,89137,59783],{"class":173},[46,89139,88993],{"class":56},[46,89141,86685],{"class":52},[46,89143,17573],{"class":56},[46,89145,89146],{"class":48,"line":34727},[46,89147,89070],{"class":2253},[46,89149,89150,89152,89155,89157,89159,89161,89163,89166,89168,89171],{"class":48,"line":34747},[46,89151,60193],{"class":52},[46,89153,89154],{"class":180}," log",[46,89156,647],{"class":52},[46,89158,13582],{"class":52},[46,89160,88734],{"class":169},[46,89162,1152],{"class":56},[46,89164,89165],{"class":173},"'友情提示'",[46,89167,448],{"class":56},[46,89169,89170],{"class":173},"'您还没有登录呢'",[46,89172,459],{"class":56},[46,89174,89175],{"class":48,"line":34753},[46,89176,89100],{"class":2253},[46,89178,89179,89182,89184],{"class":48,"line":34769},[46,89180,89181],{"class":56},"      log.",[46,89183,88878],{"class":169},[46,89185,4006],{"class":56},[46,89187,89188],{"class":48,"line":34775},[46,89189,35434],{"class":56},[46,89191,89192],{"class":48,"line":34789},[46,89193,89194],{"class":2253},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[46,89196,89197,89199,89201,89203,89205,89207,89209,89211],{"class":48,"line":34795},[46,89198,88869],{"class":180},[46,89200,2744],{"class":56},[46,89202,87542],{"class":180},[46,89204,2744],{"class":56},[46,89206,89021],{"class":169},[46,89208,647],{"class":52},[46,89210,60883],{"class":52},[46,89212,56417],{"class":56},[46,89214,89215,89217,89219,89221],{"class":48,"line":34810},[46,89216,72016],{"class":180},[46,89218,88975],{"class":56},[46,89220,58971],{"class":169},[46,89222,4006],{"class":56},[46,89224,89225],{"class":48,"line":34816},[46,89226,4217],{"class":56},[46,89228,89229,89231,89233],{"class":48,"line":34825},[46,89230,54384],{"class":56},[46,89232,53780],{"class":1361},[46,89234,53274],{"class":56},[46,89236,89237,89239,89241],{"class":48,"line":34831},[46,89238,53752],{"class":56},[46,89240,53767],{"class":1361},[46,89242,53274],{"class":56},[46,89244,89245],{"class":48,"line":34840},[46,89246,616],{"emptyLinePlaceholder":615},[46,89248,89249,89251,89253],{"class":48,"line":34846},[46,89250,53752],{"class":56},[46,89252,52603],{"class":1361},[46,89254,53274],{"class":56},[19,89256,89257],{},[3514,89258],{"alt":41,"src":89259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,89261,89263],{"id":89262},"_414-深浅拷贝","4.14 深浅拷贝",[479,89265,89267],{"id":89266},"_4141-浅拷贝","4.14.1 浅拷贝",[19,89269,89270],{},[3514,89271],{"alt":41,"src":89272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[19,89274,89275],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[19,89277,89278],{},[3514,89279],{"alt":41,"src":89280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[19,89282,89283],{},[3514,89284],{"alt":41,"src":89285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[19,89287,89288],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[19,89290,89291],{},[3514,89292],{"alt":41,"src":89293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[19,89295,13336],{},[19,89297,89298],{},[3514,89299],{"alt":41,"src":89300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[479,89302,89304],{"id":89303},"_4142-深拷贝","4.14.2 深拷贝",[19,89306,89307],{},"深拷贝：拷贝的是对象，不是地址",[19,89309,89310],{},"常用的三种方法：",[23,89312,89313,89316,89319],{},[26,89314,89315],{},"通过递归实现深拷贝",[26,89317,89318],{},"lodash\u002FcloneDeep",[26,89320,89321],{},"通过JSON.stringify()实现",[23999,89323,89325],{"id":89324},"_41421-递归函数","4.14.2.1 递归函数",[19,89327,89328],{},[3514,89329],{"alt":41,"src":89330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[23,89332,89333],{},[26,89334,89335],{},"死递归占溢出：",[36,89337,89339],{"className":1350,"code":89338,"language":1352,"meta":41,"style":41},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[43,89340,89341,89349,89357,89361,89366,89370,89375,89383],{"__ignoreMap":41},[46,89342,89343,89345,89347],{"class":48,"line":49},[46,89344,821],{"class":56},[46,89346,53767],{"class":1361},[46,89348,53274],{"class":56},[46,89350,89351,89353,89355],{"class":48,"line":60},[46,89352,54111],{"class":56},[46,89354,53780],{"class":1361},[46,89356,53274],{"class":56},[46,89358,89359],{"class":48,"line":200},[46,89360,79108],{"class":56},[46,89362,89363],{"class":48,"line":211},[46,89364,89365],{"class":56},"      fn()\n",[46,89367,89368],{"class":48,"line":222},[46,89369,4217],{"class":56},[46,89371,89372],{"class":48,"line":636},[46,89373,89374],{"class":56},"    fn()\n",[46,89376,89377,89379,89381],{"class":48,"line":641},[46,89378,54384],{"class":56},[46,89380,53780],{"class":1361},[46,89382,53274],{"class":56},[46,89384,89385,89387,89389],{"class":48,"line":653},[46,89386,53752],{"class":56},[46,89388,53767],{"class":1361},[46,89390,53274],{"class":56},[23,89392,89393],{"start":60},[26,89394,89395],{},"递归函数要加判断条件：",[19,89397,89398],{},[3514,89399],{"alt":41,"src":89400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[23,89402,89403],{"start":200},[26,89404,89405],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[36,89407,89409],{"className":52601,"code":89408,"language":52603,"meta":41,"style":41},"\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",[43,89410,89411,89421,89435,89439,89447,89461,89481,89493,89501,89505,89513,89525,89533,89541,89566,89578,89582,89589,89597,89605,89609],{"__ignoreMap":41},[46,89412,89413,89415,89417,89419],{"class":48,"line":49},[46,89414,53265],{"class":56},[46,89416,53268],{"class":1361},[46,89418,53271],{"class":169},[46,89420,53274],{"class":56},[46,89422,89423,89425,89427,89429,89431,89433],{"class":48,"line":60},[46,89424,821],{"class":56},[46,89426,52603],{"class":1361},[46,89428,53283],{"class":169},[46,89430,79],{"class":56},[46,89432,53288],{"class":173},[46,89434,53274],{"class":56},[46,89436,89437],{"class":48,"line":200},[46,89438,616],{"emptyLinePlaceholder":615},[46,89440,89441,89443,89445],{"class":48,"line":211},[46,89442,821],{"class":56},[46,89444,53301],{"class":1361},[46,89446,53274],{"class":56},[46,89448,89449,89451,89453,89455,89457,89459],{"class":48,"line":222},[46,89450,54111],{"class":56},[46,89452,53311],{"class":1361},[46,89454,53314],{"class":169},[46,89456,79],{"class":56},[46,89458,53319],{"class":173},[46,89460,53274],{"class":56},[46,89462,89463,89465,89467,89469,89471,89473,89475,89477,89479],{"class":48,"line":636},[46,89464,54111],{"class":56},[46,89466,53311],{"class":1361},[46,89468,1364],{"class":169},[46,89470,79],{"class":56},[46,89472,53358],{"class":173},[46,89474,53338],{"class":169},[46,89476,79],{"class":56},[46,89478,53365],{"class":173},[46,89480,53274],{"class":56},[46,89482,89483,89485,89487,89489,89491],{"class":48,"line":641},[46,89484,54111],{"class":56},[46,89486,53374],{"class":1361},[46,89488,53377],{"class":56},[46,89490,53374],{"class":1361},[46,89492,53274],{"class":56},[46,89494,89495,89497,89499],{"class":48,"line":653},[46,89496,53752],{"class":56},[46,89498,53301],{"class":1361},[46,89500,53274],{"class":56},[46,89502,89503],{"class":48,"line":659},[46,89504,616],{"emptyLinePlaceholder":615},[46,89506,89507,89509,89511],{"class":48,"line":665},[46,89508,821],{"class":56},[46,89510,53767],{"class":1361},[46,89512,53274],{"class":56},[46,89514,89515,89517,89519,89521,89523],{"class":48,"line":670},[46,89516,54111],{"class":56},[46,89518,53578],{"class":1361},[46,89520,57279],{"class":56},[46,89522,53578],{"class":1361},[46,89524,53274],{"class":56},[46,89526,89527,89529,89531],{"class":48,"line":676},[46,89528,54111],{"class":56},[46,89530,53780],{"class":1361},[46,89532,53274],{"class":56},[46,89534,89535,89537,89539],{"class":48,"line":682},[46,89536,72049],{"class":52},[46,89538,75738],{"class":169},[46,89540,12857],{"class":56},[46,89542,89543,89545,89547,89549,89551,89553,89555,89557,89559,89561,89564],{"class":48,"line":688},[46,89544,57736],{"class":56},[46,89546,56364],{"class":169},[46,89548,1152],{"class":56},[46,89550,83895],{"class":173},[46,89552,76214],{"class":56},[46,89554,79],{"class":52},[46,89556,13582],{"class":52},[46,89558,75754],{"class":169},[46,89560,19262],{"class":56},[46,89562,89563],{"class":169},"toLocaleString",[46,89565,4006],{"class":56},[46,89567,89568,89571,89574,89576],{"class":48,"line":693},[46,89569,89570],{"class":169},"      setTimeout",[46,89572,89573],{"class":56},"(getTime, ",[46,89575,8423],{"class":180},[46,89577,459],{"class":56},[46,89579,89580],{"class":48,"line":699},[46,89581,4217],{"class":56},[46,89583,89584,89587],{"class":48,"line":705},[46,89585,89586],{"class":169},"    getTime",[46,89588,4006],{"class":56},[46,89590,89591,89593,89595],{"class":48,"line":711},[46,89592,54384],{"class":56},[46,89594,53780],{"class":1361},[46,89596,53274],{"class":56},[46,89598,89599,89601,89603],{"class":48,"line":717},[46,89600,53752],{"class":56},[46,89602,53767],{"class":1361},[46,89604,53274],{"class":56},[46,89606,89607],{"class":48,"line":723},[46,89608,616],{"emptyLinePlaceholder":615},[46,89610,89611,89613,89615],{"class":48,"line":729},[46,89612,53752],{"class":56},[46,89614,52603],{"class":1361},[46,89616,53274],{"class":56},[19,89618,89619],{},[3514,89620],{"alt":41,"src":89621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[23,89623,89624],{"start":211},[26,89625,89315],{},[19,89627,89628],{},[3514,89629],{"alt":41,"src":89630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[19,89632,89633],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[19,89635,41161],{},[19,89637,89638],{},"这个是简易版的递归函数深拷贝",[19,89640,89641],{},"一定要注意先数组再对象，因为万物皆可对象",[36,89643,89645],{"className":52601,"code":89644,"language":52603,"meta":41,"style":41},"\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",[43,89646,89647,89657,89671,89675,89683,89697,89717,89729,89737,89741,89749,89757,89767,89776,89784,89800,89804,89812,89816,89820,89832,89837,89856,89872,89877,89882,89887,89902,89907,89912,89921,89929,89946,89954,89960,89968,89973,89978,89987,89991,89995,89999,90010,90019,90029,90043,90053,90061,90069,90077,90081],{"__ignoreMap":41},[46,89648,89649,89651,89653,89655],{"class":48,"line":49},[46,89650,53265],{"class":56},[46,89652,53268],{"class":1361},[46,89654,53271],{"class":169},[46,89656,53274],{"class":56},[46,89658,89659,89661,89663,89665,89667,89669],{"class":48,"line":60},[46,89660,821],{"class":56},[46,89662,52603],{"class":1361},[46,89664,53283],{"class":169},[46,89666,79],{"class":56},[46,89668,53288],{"class":173},[46,89670,53274],{"class":56},[46,89672,89673],{"class":48,"line":200},[46,89674,616],{"emptyLinePlaceholder":615},[46,89676,89677,89679,89681],{"class":48,"line":211},[46,89678,821],{"class":56},[46,89680,53301],{"class":1361},[46,89682,53274],{"class":56},[46,89684,89685,89687,89689,89691,89693,89695],{"class":48,"line":222},[46,89686,54111],{"class":56},[46,89688,53311],{"class":1361},[46,89690,53314],{"class":169},[46,89692,79],{"class":56},[46,89694,53319],{"class":173},[46,89696,53274],{"class":56},[46,89698,89699,89701,89703,89705,89707,89709,89711,89713,89715],{"class":48,"line":636},[46,89700,54111],{"class":56},[46,89702,53311],{"class":1361},[46,89704,1364],{"class":169},[46,89706,79],{"class":56},[46,89708,53358],{"class":173},[46,89710,53338],{"class":169},[46,89712,79],{"class":56},[46,89714,53365],{"class":173},[46,89716,53274],{"class":56},[46,89718,89719,89721,89723,89725,89727],{"class":48,"line":641},[46,89720,54111],{"class":56},[46,89722,53374],{"class":1361},[46,89724,53377],{"class":56},[46,89726,53374],{"class":1361},[46,89728,53274],{"class":56},[46,89730,89731,89733,89735],{"class":48,"line":653},[46,89732,53752],{"class":56},[46,89734,53301],{"class":1361},[46,89736,53274],{"class":56},[46,89738,89739],{"class":48,"line":659},[46,89740,616],{"emptyLinePlaceholder":615},[46,89742,89743,89745,89747],{"class":48,"line":665},[46,89744,821],{"class":56},[46,89746,53767],{"class":1361},[46,89748,53274],{"class":56},[46,89750,89751,89753,89755],{"class":48,"line":670},[46,89752,54111],{"class":56},[46,89754,53780],{"class":1361},[46,89756,53274],{"class":56},[46,89758,89759,89761,89763,89765],{"class":48,"line":676},[46,89760,13225],{"class":52},[46,89762,71936],{"class":180},[46,89764,647],{"class":52},[46,89766,17573],{"class":56},[46,89768,89769,89771,89774],{"class":48,"line":682},[46,89770,73581],{"class":56},[46,89772,89773],{"class":173},"'pink'",[46,89775,33443],{"class":56},[46,89777,89778,89780,89782],{"class":48,"line":688},[46,89779,73591],{"class":56},[46,89781,2836],{"class":180},[46,89783,33443],{"class":56},[46,89785,89786,89789,89792,89794,89797],{"class":48,"line":693},[46,89787,89788],{"class":56},"      hobby: [",[46,89790,89791],{"class":173},"'乒乓球'",[46,89793,448],{"class":56},[46,89795,89796],{"class":173},"'足球'",[46,89798,89799],{"class":56},"],\n",[46,89801,89802],{"class":48,"line":699},[46,89803,79837],{"class":56},[46,89805,89806,89809],{"class":48,"line":705},[46,89807,89808],{"class":56},"        baby: ",[46,89810,89811],{"class":173},"'小pink'\n",[46,89813,89814],{"class":48,"line":711},[46,89815,54365],{"class":56},[46,89817,89818],{"class":48,"line":717},[46,89819,4217],{"class":56},[46,89821,89822,89824,89827,89829],{"class":48,"line":723},[46,89823,13225],{"class":52},[46,89825,89826],{"class":180}," o",[46,89828,647],{"class":52},[46,89830,89831],{"class":56}," {}\n",[46,89833,89834],{"class":48,"line":729},[46,89835,89836],{"class":2253},"    \u002F\u002F 拷贝函数\n",[46,89838,89839,89841,89844,89846,89849,89851,89854],{"class":48,"line":735},[46,89840,72049],{"class":52},[46,89842,89843],{"class":169}," deepCopy",[46,89845,1152],{"class":56},[46,89847,89848],{"class":439},"newObj",[46,89850,448],{"class":56},[46,89852,89853],{"class":439},"oldObj",[46,89855,14445],{"class":56},[46,89857,89858,89860,89862,89864,89867,89869],{"class":48,"line":740},[46,89859,54251],{"class":52},[46,89861,3702],{"class":56},[46,89863,53814],{"class":52},[46,89865,89866],{"class":56}," k ",[46,89868,1146],{"class":52},[46,89870,89871],{"class":56}," oldObj) {\n",[46,89873,89874],{"class":48,"line":745},[46,89875,89876],{"class":2253},"        \u002F\u002F 处理数组的问题\n",[46,89878,89879],{"class":48,"line":763},[46,89880,89881],{"class":2253},"        \u002F\u002F 判断是否属于数组\n",[46,89883,89884],{"class":48,"line":778},[46,89885,89886],{"class":2253},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[46,89888,89889,89891,89894,89897,89900],{"class":48,"line":789},[46,89890,4525],{"class":52},[46,89892,89893],{"class":56}," (oldObj[k] ",[46,89895,89896],{"class":52},"instanceof",[46,89898,89899],{"class":169}," Array",[46,89901,14445],{"class":56},[46,89903,89904],{"class":48,"line":794},[46,89905,89906],{"class":2253},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[46,89908,89909],{"class":48,"line":806},[46,89910,89911],{"class":2253},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[46,89913,89914,89917,89919],{"class":48,"line":829},[46,89915,89916],{"class":56},"          newObj[k] ",[46,89918,79],{"class":52},[46,89920,53805],{"class":56},[46,89922,89923,89926],{"class":48,"line":840},[46,89924,89925],{"class":169},"          deepCopy",[46,89927,89928],{"class":56},"(newObj[k], oldObj[k])\n",[46,89930,89931,89933,89935,89937,89939,89941,89944],{"class":48,"line":846},[46,89932,82044],{"class":56},[46,89934,3741],{"class":52},[46,89936,3744],{"class":52},[46,89938,89893],{"class":56},[46,89940,89896],{"class":52},[46,89942,89943],{"class":169}," Object",[46,89945,14445],{"class":56},[46,89947,89948,89950,89952],{"class":48,"line":852},[46,89949,89916],{"class":56},[46,89951,79],{"class":52},[46,89953,89831],{"class":56},[46,89955,89956,89958],{"class":48,"line":857},[46,89957,89925],{"class":169},[46,89959,89928],{"class":56},[46,89961,89962,89964,89966],{"class":48,"line":875},[46,89963,82044],{"class":56},[46,89965,3741],{"class":52},[46,89967,17573],{"class":56},[46,89969,89970],{"class":48,"line":892},[46,89971,89972],{"class":2253},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[46,89974,89975],{"class":48,"line":898},[46,89976,89977],{"class":2253},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[46,89979,89980,89982,89984],{"class":48,"line":903},[46,89981,89916],{"class":56},[46,89983,79],{"class":52},[46,89985,89986],{"class":56}," oldObj[k]\n",[46,89988,89989],{"class":48,"line":908},[46,89990,4557],{"class":56},[46,89992,89993],{"class":48,"line":925},[46,89994,54365],{"class":56},[46,89996,89997],{"class":48,"line":1238},[46,89998,4217],{"class":56},[46,90000,90001,90004,90007],{"class":48,"line":1251},[46,90002,90003],{"class":169},"    deepCopy",[46,90005,90006],{"class":56},"(o, obj) ",[46,90008,90009],{"class":2253},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[46,90011,90012,90014,90016],{"class":48,"line":1256},[46,90013,75718],{"class":56},[46,90015,60212],{"class":169},[46,90017,90018],{"class":56},"(o)\n",[46,90020,90021,90024,90026],{"class":48,"line":1261},[46,90022,90023],{"class":56},"    o.age ",[46,90025,79],{"class":52},[46,90027,90028],{"class":180}," 20\n",[46,90030,90031,90034,90036,90038,90040],{"class":48,"line":1274},[46,90032,90033],{"class":56},"    o.hobby[",[46,90035,2379],{"class":180},[46,90037,6460],{"class":56},[46,90039,79],{"class":52},[46,90041,90042],{"class":173}," '篮球'\n",[46,90044,90045,90048,90050],{"class":48,"line":10061},[46,90046,90047],{"class":56},"    o.family ",[46,90049,79],{"class":52},[46,90051,90052],{"class":173}," '老pink'\n",[46,90054,90055,90057,90059],{"class":48,"line":11720},[46,90056,75718],{"class":56},[46,90058,60212],{"class":169},[46,90060,72001],{"class":56},[46,90062,90063,90065,90067],{"class":48,"line":11745},[46,90064,54384],{"class":56},[46,90066,53780],{"class":1361},[46,90068,53274],{"class":56},[46,90070,90071,90073,90075],{"class":48,"line":11768},[46,90072,53752],{"class":56},[46,90074,53767],{"class":1361},[46,90076,53274],{"class":56},[46,90078,90079],{"class":48,"line":11792},[46,90080,616],{"emptyLinePlaceholder":615},[46,90082,90083,90085,90087],{"class":48,"line":11797},[46,90084,53752],{"class":56},[46,90086,52603],{"class":1361},[46,90088,53274],{"class":56},[19,90090,90091],{},[3514,90092],{"alt":41,"src":90093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[23999,90095,90097,90098],{"id":90096},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[2339,90099,90100],{},"js库lodash里面cloneDeep内部实现了深拷贝",[19,90102,90103],{},[2426,90104,90105],{"href":90105,"rel":90106},"https:\u002F\u002Fwww.lodashjs.com\u002F",[25862],[19,90108,90109],{},"lodash里边的方法都要加上一个下划线_",[19,90111,90112],{},"_.cloneDeep()",[36,90114,90116],{"className":52601,"code":90115,"language":52603,"meta":41,"style":41},"\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",[43,90117,90118,90128,90142,90146,90154,90168,90188,90200,90208,90212,90220,90225,90244,90252,90262,90270,90278,90290,90294,90300,90304,90308,90324,90332,90341,90349,90357,90365,90369],{"__ignoreMap":41},[46,90119,90120,90122,90124,90126],{"class":48,"line":49},[46,90121,53265],{"class":56},[46,90123,53268],{"class":1361},[46,90125,53271],{"class":169},[46,90127,53274],{"class":56},[46,90129,90130,90132,90134,90136,90138,90140],{"class":48,"line":60},[46,90131,821],{"class":56},[46,90133,52603],{"class":1361},[46,90135,53283],{"class":169},[46,90137,79],{"class":56},[46,90139,53288],{"class":173},[46,90141,53274],{"class":56},[46,90143,90144],{"class":48,"line":200},[46,90145,616],{"emptyLinePlaceholder":615},[46,90147,90148,90150,90152],{"class":48,"line":211},[46,90149,821],{"class":56},[46,90151,53301],{"class":1361},[46,90153,53274],{"class":56},[46,90155,90156,90158,90160,90162,90164,90166],{"class":48,"line":222},[46,90157,54111],{"class":56},[46,90159,53311],{"class":1361},[46,90161,53314],{"class":169},[46,90163,79],{"class":56},[46,90165,53319],{"class":173},[46,90167,53274],{"class":56},[46,90169,90170,90172,90174,90176,90178,90180,90182,90184,90186],{"class":48,"line":636},[46,90171,54111],{"class":56},[46,90173,53311],{"class":1361},[46,90175,1364],{"class":169},[46,90177,79],{"class":56},[46,90179,53358],{"class":173},[46,90181,53338],{"class":169},[46,90183,79],{"class":56},[46,90185,53365],{"class":173},[46,90187,53274],{"class":56},[46,90189,90190,90192,90194,90196,90198],{"class":48,"line":641},[46,90191,54111],{"class":56},[46,90193,53374],{"class":1361},[46,90195,53377],{"class":56},[46,90197,53374],{"class":1361},[46,90199,53274],{"class":56},[46,90201,90202,90204,90206],{"class":48,"line":653},[46,90203,53752],{"class":56},[46,90205,53301],{"class":1361},[46,90207,53274],{"class":56},[46,90209,90210],{"class":48,"line":659},[46,90211,616],{"emptyLinePlaceholder":615},[46,90213,90214,90216,90218],{"class":48,"line":665},[46,90215,821],{"class":56},[46,90217,53767],{"class":1361},[46,90219,53274],{"class":56},[46,90221,90222],{"class":48,"line":670},[46,90223,90224],{"class":2253},"  \u003C!-- 先引用这个库 -->\n",[46,90226,90227,90229,90231,90233,90235,90238,90240,90242],{"class":48,"line":676},[46,90228,54111],{"class":56},[46,90230,53780],{"class":1361},[46,90232,57204],{"class":169},[46,90234,79],{"class":56},[46,90236,90237],{"class":173},"\"lodash.min.js\"",[46,90239,57279],{"class":56},[46,90241,53780],{"class":1361},[46,90243,53274],{"class":56},[46,90245,90246,90248,90250],{"class":48,"line":682},[46,90247,54111],{"class":56},[46,90249,53780],{"class":1361},[46,90251,53274],{"class":56},[46,90253,90254,90256,90258,90260],{"class":48,"line":688},[46,90255,13225],{"class":52},[46,90257,71936],{"class":180},[46,90259,647],{"class":52},[46,90261,17573],{"class":56},[46,90263,90264,90266,90268],{"class":48,"line":693},[46,90265,73581],{"class":56},[46,90267,89773],{"class":173},[46,90269,33443],{"class":56},[46,90271,90272,90274,90276],{"class":48,"line":699},[46,90273,73591],{"class":56},[46,90275,2836],{"class":180},[46,90277,33443],{"class":56},[46,90279,90280,90282,90284,90286,90288],{"class":48,"line":705},[46,90281,89788],{"class":56},[46,90283,89791],{"class":173},[46,90285,448],{"class":56},[46,90287,89796],{"class":173},[46,90289,89799],{"class":56},[46,90291,90292],{"class":48,"line":711},[46,90293,79837],{"class":56},[46,90295,90296,90298],{"class":48,"line":717},[46,90297,89808],{"class":56},[46,90299,89811],{"class":173},[46,90301,90302],{"class":48,"line":723},[46,90303,54365],{"class":56},[46,90305,90306],{"class":48,"line":729},[46,90307,4217],{"class":56},[46,90309,90310,90312,90314,90316,90319,90322],{"class":48,"line":735},[46,90311,13225],{"class":52},[46,90313,89826],{"class":180},[46,90315,647],{"class":52},[46,90317,90318],{"class":56}," _.",[46,90320,90321],{"class":169},"cloneDeep",[46,90323,72001],{"class":56},[46,90325,90326,90328,90330],{"class":48,"line":740},[46,90327,75718],{"class":56},[46,90329,60212],{"class":169},[46,90331,90018],{"class":56},[46,90333,90334,90337,90339],{"class":48,"line":745},[46,90335,90336],{"class":56},"    o.family.baby ",[46,90338,79],{"class":52},[46,90340,90052],{"class":173},[46,90342,90343,90345,90347],{"class":48,"line":763},[46,90344,75718],{"class":56},[46,90346,60212],{"class":169},[46,90348,72001],{"class":56},[46,90350,90351,90353,90355],{"class":48,"line":778},[46,90352,54384],{"class":56},[46,90354,53780],{"class":1361},[46,90356,53274],{"class":56},[46,90358,90359,90361,90363],{"class":48,"line":789},[46,90360,53752],{"class":56},[46,90362,53767],{"class":1361},[46,90364,53274],{"class":56},[46,90366,90367],{"class":48,"line":794},[46,90368,616],{"emptyLinePlaceholder":615},[46,90370,90371,90373,90375],{"class":48,"line":806},[46,90372,53752],{"class":56},[46,90374,52603],{"class":1361},[46,90376,53274],{"class":56},[19,90378,90379],{},[3514,90380],{"alt":41,"src":90381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[23999,90383,90385],{"id":90384},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[36,90387,90389],{"className":52601,"code":90388,"language":52603,"meta":41,"style":41},"\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",[43,90390,90391,90401,90415,90419,90427,90441,90461,90473,90481,90485,90493,90501,90511,90519,90527,90539,90543,90549,90553,90557,90562,90567,90572,90598,90606,90615,90623,90631,90639,90643],{"__ignoreMap":41},[46,90392,90393,90395,90397,90399],{"class":48,"line":49},[46,90394,53265],{"class":56},[46,90396,53268],{"class":1361},[46,90398,53271],{"class":169},[46,90400,53274],{"class":56},[46,90402,90403,90405,90407,90409,90411,90413],{"class":48,"line":60},[46,90404,821],{"class":56},[46,90406,52603],{"class":1361},[46,90408,53283],{"class":169},[46,90410,79],{"class":56},[46,90412,53288],{"class":173},[46,90414,53274],{"class":56},[46,90416,90417],{"class":48,"line":200},[46,90418,616],{"emptyLinePlaceholder":615},[46,90420,90421,90423,90425],{"class":48,"line":211},[46,90422,821],{"class":56},[46,90424,53301],{"class":1361},[46,90426,53274],{"class":56},[46,90428,90429,90431,90433,90435,90437,90439],{"class":48,"line":222},[46,90430,54111],{"class":56},[46,90432,53311],{"class":1361},[46,90434,53314],{"class":169},[46,90436,79],{"class":56},[46,90438,53319],{"class":173},[46,90440,53274],{"class":56},[46,90442,90443,90445,90447,90449,90451,90453,90455,90457,90459],{"class":48,"line":636},[46,90444,54111],{"class":56},[46,90446,53311],{"class":1361},[46,90448,1364],{"class":169},[46,90450,79],{"class":56},[46,90452,53358],{"class":173},[46,90454,53338],{"class":169},[46,90456,79],{"class":56},[46,90458,53365],{"class":173},[46,90460,53274],{"class":56},[46,90462,90463,90465,90467,90469,90471],{"class":48,"line":641},[46,90464,54111],{"class":56},[46,90466,53374],{"class":1361},[46,90468,53377],{"class":56},[46,90470,53374],{"class":1361},[46,90472,53274],{"class":56},[46,90474,90475,90477,90479],{"class":48,"line":653},[46,90476,53752],{"class":56},[46,90478,53301],{"class":1361},[46,90480,53274],{"class":56},[46,90482,90483],{"class":48,"line":659},[46,90484,616],{"emptyLinePlaceholder":615},[46,90486,90487,90489,90491],{"class":48,"line":665},[46,90488,821],{"class":56},[46,90490,53767],{"class":1361},[46,90492,53274],{"class":56},[46,90494,90495,90497,90499],{"class":48,"line":670},[46,90496,54111],{"class":56},[46,90498,53780],{"class":1361},[46,90500,53274],{"class":56},[46,90502,90503,90505,90507,90509],{"class":48,"line":676},[46,90504,13225],{"class":52},[46,90506,71936],{"class":180},[46,90508,647],{"class":52},[46,90510,17573],{"class":56},[46,90512,90513,90515,90517],{"class":48,"line":682},[46,90514,73581],{"class":56},[46,90516,89773],{"class":173},[46,90518,33443],{"class":56},[46,90520,90521,90523,90525],{"class":48,"line":688},[46,90522,73591],{"class":56},[46,90524,2836],{"class":180},[46,90526,33443],{"class":56},[46,90528,90529,90531,90533,90535,90537],{"class":48,"line":693},[46,90530,89788],{"class":56},[46,90532,89791],{"class":173},[46,90534,448],{"class":56},[46,90536,89796],{"class":173},[46,90538,89799],{"class":56},[46,90540,90541],{"class":48,"line":699},[46,90542,79837],{"class":56},[46,90544,90545,90547],{"class":48,"line":705},[46,90546,89808],{"class":56},[46,90548,89811],{"class":173},[46,90550,90551],{"class":48,"line":711},[46,90552,54365],{"class":56},[46,90554,90555],{"class":48,"line":717},[46,90556,4217],{"class":56},[46,90558,90559],{"class":48,"line":723},[46,90560,90561],{"class":2253},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[46,90563,90564],{"class":48,"line":729},[46,90565,90566],{"class":2253},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[46,90568,90569],{"class":48,"line":735},[46,90570,90571],{"class":2253},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[46,90573,90574,90576,90578,90580,90583,90585,90588,90590,90592,90594,90596],{"class":48,"line":740},[46,90575,13225],{"class":52},[46,90577,89826],{"class":180},[46,90579,647],{"class":52},[46,90581,90582],{"class":180}," JSON",[46,90584,2744],{"class":56},[46,90586,90587],{"class":169},"parse",[46,90589,1152],{"class":56},[46,90591,73629],{"class":180},[46,90593,2744],{"class":56},[46,90595,73634],{"class":169},[46,90597,73637],{"class":56},[46,90599,90600,90602,90604],{"class":48,"line":745},[46,90601,75718],{"class":56},[46,90603,60212],{"class":169},[46,90605,90018],{"class":56},[46,90607,90608,90610,90612],{"class":48,"line":763},[46,90609,90336],{"class":56},[46,90611,79],{"class":52},[46,90613,90614],{"class":173}," '123'\n",[46,90616,90617,90619,90621],{"class":48,"line":778},[46,90618,75718],{"class":56},[46,90620,60212],{"class":169},[46,90622,72001],{"class":56},[46,90624,90625,90627,90629],{"class":48,"line":789},[46,90626,54384],{"class":56},[46,90628,53780],{"class":1361},[46,90630,53274],{"class":56},[46,90632,90633,90635,90637],{"class":48,"line":794},[46,90634,53752],{"class":56},[46,90636,53767],{"class":1361},[46,90638,53274],{"class":56},[46,90640,90641],{"class":48,"line":806},[46,90642,616],{"emptyLinePlaceholder":615},[46,90644,90645,90647,90649],{"class":48,"line":829},[46,90646,53752],{"class":56},[46,90648,52603],{"class":1361},[46,90650,53274],{"class":56},[19,90652,90653],{},[3514,90654],{"alt":41,"src":90655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,90657,90659],{"id":90658},"_415-异常处理","4.15 异常处理",[23,90661,90662],{},[26,90663,90664],{},"throw抛异常",[19,90666,90667],{},[3514,90668],{"alt":41,"src":90669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[23,90671,90672],{"start":60},[26,90673,90674],{},"try\u002Fcatch 捕获错误信息",[19,90676,90677],{},[3514,90678],{"alt":41,"src":90679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[36,90681,90683],{"className":52601,"code":90682,"language":52603,"meta":41,"style":41},"\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",[43,90684,90685,90695,90709,90713,90721,90735,90755,90767,90775,90779,90787,90799,90807,90816,90823,90828,90847,90856,90867,90872,90882,90887,90892,90897,90914,90918,90923,90930,90942,90946,90958,90962,90966,90971,90976,90983,90991,90999,91003],{"__ignoreMap":41},[46,90686,90687,90689,90691,90693],{"class":48,"line":49},[46,90688,53265],{"class":56},[46,90690,53268],{"class":1361},[46,90692,53271],{"class":169},[46,90694,53274],{"class":56},[46,90696,90697,90699,90701,90703,90705,90707],{"class":48,"line":60},[46,90698,821],{"class":56},[46,90700,52603],{"class":1361},[46,90702,53283],{"class":169},[46,90704,79],{"class":56},[46,90706,53288],{"class":173},[46,90708,53274],{"class":56},[46,90710,90711],{"class":48,"line":200},[46,90712,616],{"emptyLinePlaceholder":615},[46,90714,90715,90717,90719],{"class":48,"line":211},[46,90716,821],{"class":56},[46,90718,53301],{"class":1361},[46,90720,53274],{"class":56},[46,90722,90723,90725,90727,90729,90731,90733],{"class":48,"line":222},[46,90724,54111],{"class":56},[46,90726,53311],{"class":1361},[46,90728,53314],{"class":169},[46,90730,79],{"class":56},[46,90732,53319],{"class":173},[46,90734,53274],{"class":56},[46,90736,90737,90739,90741,90743,90745,90747,90749,90751,90753],{"class":48,"line":636},[46,90738,54111],{"class":56},[46,90740,53311],{"class":1361},[46,90742,1364],{"class":169},[46,90744,79],{"class":56},[46,90746,53358],{"class":173},[46,90748,53338],{"class":169},[46,90750,79],{"class":56},[46,90752,53365],{"class":173},[46,90754,53274],{"class":56},[46,90756,90757,90759,90761,90763,90765],{"class":48,"line":641},[46,90758,54111],{"class":56},[46,90760,53374],{"class":1361},[46,90762,53377],{"class":56},[46,90764,53374],{"class":1361},[46,90766,53274],{"class":56},[46,90768,90769,90771,90773],{"class":48,"line":653},[46,90770,53752],{"class":56},[46,90772,53301],{"class":1361},[46,90774,53274],{"class":56},[46,90776,90777],{"class":48,"line":659},[46,90778,616],{"emptyLinePlaceholder":615},[46,90780,90781,90783,90785],{"class":48,"line":665},[46,90782,821],{"class":56},[46,90784,53767],{"class":1361},[46,90786,53274],{"class":56},[46,90788,90789,90791,90793,90795,90797],{"class":48,"line":670},[46,90790,54111],{"class":56},[46,90792,19],{"class":1361},[46,90794,55459],{"class":56},[46,90796,19],{"class":1361},[46,90798,53274],{"class":56},[46,90800,90801,90803,90805],{"class":48,"line":676},[46,90802,54111],{"class":56},[46,90804,53780],{"class":1361},[46,90806,53274],{"class":56},[46,90808,90809,90811,90814],{"class":48,"line":682},[46,90810,72049],{"class":52},[46,90812,90813],{"class":169}," fn",[46,90815,12857],{"class":56},[46,90817,90818,90821],{"class":48,"line":688},[46,90819,90820],{"class":52},"      try",[46,90822,17573],{"class":56},[46,90824,90825],{"class":48,"line":693},[46,90826,90827],{"class":2253},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[46,90829,90830,90832,90834,90836,90838,90840,90842,90845],{"class":48,"line":699},[46,90831,63235],{"class":52},[46,90833,8838],{"class":180},[46,90835,647],{"class":52},[46,90837,56361],{"class":56},[46,90839,56364],{"class":169},[46,90841,1152],{"class":56},[46,90843,90844],{"class":173},"'.p'",[46,90846,459],{"class":56},[46,90848,90849,90852,90854],{"class":48,"line":705},[46,90850,90851],{"class":56},"        p.style.color ",[46,90853,79],{"class":52},[46,90855,69016],{"class":173},[46,90857,90858,90861,90864],{"class":48,"line":711},[46,90859,90860],{"class":56},"      } ",[46,90862,90863],{"class":52},"catch",[46,90865,90866],{"class":56}," (err) {\n",[46,90868,90869],{"class":48,"line":717},[46,90870,90871],{"class":2253},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[46,90873,90874,90877,90879],{"class":48,"line":723},[46,90875,90876],{"class":56},"        console.",[46,90878,60212],{"class":169},[46,90880,90881],{"class":56},"(err.message)\n",[46,90883,90884],{"class":48,"line":729},[46,90885,90886],{"class":2253},"        \u002F\u002F 想要中断程序，需要加return\n",[46,90888,90889],{"class":48,"line":735},[46,90890,90891],{"class":2253},"        \u002F\u002F return\n",[46,90893,90894],{"class":48,"line":740},[46,90895,90896],{"class":2253},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[46,90898,90899,90902,90904,90907,90909,90912],{"class":48,"line":745},[46,90900,90901],{"class":52},"        throw",[46,90903,13582],{"class":52},[46,90905,90906],{"class":169}," Error",[46,90908,1152],{"class":56},[46,90910,90911],{"class":173},"'你看看，选择器错误了吧'",[46,90913,459],{"class":56},[46,90915,90916],{"class":48,"line":763},[46,90917,54365],{"class":56},[46,90919,90920],{"class":48,"line":778},[46,90921,90922],{"class":2253},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[46,90924,90925,90928],{"class":48,"line":789},[46,90926,90927],{"class":52},"      finally",[46,90929,17573],{"class":56},[46,90931,90932,90935,90937,90940],{"class":48,"line":794},[46,90933,90934],{"class":169},"        alert",[46,90936,1152],{"class":56},[46,90938,90939],{"class":173},"'弹出对话框'",[46,90941,459],{"class":56},[46,90943,90944],{"class":48,"line":806},[46,90945,54365],{"class":56},[46,90947,90948,90950,90952,90954,90956],{"class":48,"line":829},[46,90949,60209],{"class":56},[46,90951,60212],{"class":169},[46,90953,1152],{"class":56},[46,90955,2659],{"class":180},[46,90957,459],{"class":56},[46,90959,90960],{"class":48,"line":840},[46,90961,616],{"emptyLinePlaceholder":615},[46,90963,90964],{"class":48,"line":846},[46,90965,4217],{"class":56},[46,90967,90968],{"class":48,"line":852},[46,90969,90970],{"class":2253},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[46,90972,90973],{"class":48,"line":857},[46,90974,90975],{"class":2253},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[46,90977,90978,90981],{"class":48,"line":875},[46,90979,90980],{"class":169},"    fn",[46,90982,4006],{"class":56},[46,90984,90985,90987,90989],{"class":48,"line":892},[46,90986,54384],{"class":56},[46,90988,53780],{"class":1361},[46,90990,53274],{"class":56},[46,90992,90993,90995,90997],{"class":48,"line":898},[46,90994,53752],{"class":56},[46,90996,53767],{"class":1361},[46,90998,53274],{"class":56},[46,91000,91001],{"class":48,"line":903},[46,91002,616],{"emptyLinePlaceholder":615},[46,91004,91005,91007,91009],{"class":48,"line":908},[46,91006,53752],{"class":56},[46,91008,52603],{"class":1361},[46,91010,53274],{"class":56},[19,91012,91013],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[23,91015,91016],{"start":200},[26,91017,91018],{},"debugger",[19,91020,91021],{},[3514,91022],{"alt":41,"src":91023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[19,91025,91026],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,91028,91030],{"id":91029},"_416-处理this","4.16 处理this",[479,91032,91034],{"id":91033},"_4161-this的指向","4.16.1 this的指向",[23,91036,91037],{},[26,91038,91039],{},"普通函数的this",[19,91041,91042],{},[3514,91043],{"alt":41,"src":91044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[23,91046,91047],{"start":60},[26,91048,91049],{},"箭头函数的this",[19,91051,91052],{},[3514,91053],{"alt":41,"src":91054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[19,91056,91057],{},[3514,91058],{"alt":41,"src":91059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[19,91061,91062],{},[3514,91063],{"alt":41,"src":91064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[479,91066,91068],{"id":91067},"_4162-this的改变","4.16.2 this的改变",[19,91070,91071],{},"call() apply() bind()",[23,91073,91074],{},[26,91075,91076],{},"call()",[19,91078,91079],{},[3514,91080],{"alt":41,"src":91081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[19,91083,91084],{},"两个作用：①调用函数；②改变this指向",[36,91086,91088],{"className":1350,"code":91087,"language":1352,"meta":41,"style":41},"\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",[43,91089,91090,91098,91106,91110,91115,91119,91124,91129,91134,91138,91143,91151],{"__ignoreMap":41},[46,91091,91092,91094,91096],{"class":48,"line":49},[46,91093,821],{"class":56},[46,91095,53767],{"class":1361},[46,91097,53274],{"class":56},[46,91099,91100,91102,91104],{"class":48,"line":60},[46,91101,54111],{"class":56},[46,91103,53780],{"class":1361},[46,91105,53274],{"class":56},[46,91107,91108],{"class":48,"line":200},[46,91109,73488],{"class":56},[46,91111,91112],{"class":48,"line":211},[46,91113,91114],{"class":56},"      uname: 'pink'\n",[46,91116,91117],{"class":48,"line":222},[46,91118,4217],{"class":56},[46,91120,91121],{"class":48,"line":636},[46,91122,91123],{"class":56},"    function fn(x, y) {\n",[46,91125,91126],{"class":48,"line":641},[46,91127,91128],{"class":56},"      console.log(this)  \u002F\u002Fwindow\n",[46,91130,91131],{"class":48,"line":653},[46,91132,91133],{"class":56},"      console.log(x + y)\n",[46,91135,91136],{"class":48,"line":659},[46,91137,4217],{"class":56},[46,91139,91140],{"class":48,"line":665},[46,91141,91142],{"class":56},"    fn.call(obj, 1, 2)\n",[46,91144,91145,91147,91149],{"class":48,"line":670},[46,91146,54384],{"class":56},[46,91148,53780],{"class":1361},[46,91150,53274],{"class":56},[46,91152,91153,91155,91157],{"class":48,"line":676},[46,91154,53752],{"class":56},[46,91156,53767],{"class":1361},[46,91158,53274],{"class":56},[19,91160,91161],{},[3514,91162],{"alt":41,"src":91163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[23,91165,91166],{"start":60},[26,91167,91168],{},"apply()",[19,91170,91171],{},[3514,91172],{"alt":41,"src":91173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[19,91175,91084],{},[19,91177,91178],{},"call传递的是普通参数，而apply必须传递的是数组",[36,91180,91182],{"className":52601,"code":91181,"language":52603,"meta":41,"style":41},"\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",[43,91183,91184,91194,91208,91212,91220,91234,91254,91266,91274,91278,91286,91294,91304,91311,91315,91320,91336,91348,91362,91366,91371,91390,91395,91399,91404,91409,91417,91422,91444,91449,91465,91481,91493,91497,91502,91521,91529,91537,91541],{"__ignoreMap":41},[46,91185,91186,91188,91190,91192],{"class":48,"line":49},[46,91187,53265],{"class":56},[46,91189,53268],{"class":1361},[46,91191,53271],{"class":169},[46,91193,53274],{"class":56},[46,91195,91196,91198,91200,91202,91204,91206],{"class":48,"line":60},[46,91197,821],{"class":56},[46,91199,52603],{"class":1361},[46,91201,53283],{"class":169},[46,91203,79],{"class":56},[46,91205,53288],{"class":173},[46,91207,53274],{"class":56},[46,91209,91210],{"class":48,"line":200},[46,91211,616],{"emptyLinePlaceholder":615},[46,91213,91214,91216,91218],{"class":48,"line":211},[46,91215,821],{"class":56},[46,91217,53301],{"class":1361},[46,91219,53274],{"class":56},[46,91221,91222,91224,91226,91228,91230,91232],{"class":48,"line":222},[46,91223,54111],{"class":56},[46,91225,53311],{"class":1361},[46,91227,53314],{"class":169},[46,91229,79],{"class":56},[46,91231,53319],{"class":173},[46,91233,53274],{"class":56},[46,91235,91236,91238,91240,91242,91244,91246,91248,91250,91252],{"class":48,"line":636},[46,91237,54111],{"class":56},[46,91239,53311],{"class":1361},[46,91241,1364],{"class":169},[46,91243,79],{"class":56},[46,91245,53358],{"class":173},[46,91247,53338],{"class":169},[46,91249,79],{"class":56},[46,91251,53365],{"class":173},[46,91253,53274],{"class":56},[46,91255,91256,91258,91260,91262,91264],{"class":48,"line":641},[46,91257,54111],{"class":56},[46,91259,53374],{"class":1361},[46,91261,53377],{"class":56},[46,91263,53374],{"class":1361},[46,91265,53274],{"class":56},[46,91267,91268,91270,91272],{"class":48,"line":653},[46,91269,53752],{"class":56},[46,91271,53301],{"class":1361},[46,91273,53274],{"class":56},[46,91275,91276],{"class":48,"line":659},[46,91277,616],{"emptyLinePlaceholder":615},[46,91279,91280,91282,91284],{"class":48,"line":665},[46,91281,821],{"class":56},[46,91283,53767],{"class":1361},[46,91285,53274],{"class":56},[46,91287,91288,91290,91292],{"class":48,"line":670},[46,91289,54111],{"class":56},[46,91291,53780],{"class":1361},[46,91293,53274],{"class":56},[46,91295,91296,91298,91300,91302],{"class":48,"line":676},[46,91297,13225],{"class":52},[46,91299,71936],{"class":180},[46,91301,647],{"class":52},[46,91303,17573],{"class":56},[46,91305,91306,91308],{"class":48,"line":682},[46,91307,73591],{"class":56},[46,91309,91310],{"class":180},"18\n",[46,91312,91313],{"class":48,"line":688},[46,91314,4217],{"class":56},[46,91316,91317],{"class":48,"line":693},[46,91318,91319],{"class":2253},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[46,91321,91322,91324,91326,91328,91330,91332,91334],{"class":48,"line":699},[46,91323,72049],{"class":52},[46,91325,90813],{"class":169},[46,91327,1152],{"class":56},[46,91329,3006],{"class":439},[46,91331,448],{"class":56},[46,91333,3031],{"class":439},[46,91335,14445],{"class":56},[46,91337,91338,91340,91342,91344,91346],{"class":48,"line":705},[46,91339,60209],{"class":56},[46,91341,60212],{"class":169},[46,91343,1152],{"class":56},[46,91345,88956],{"class":180},[46,91347,459],{"class":56},[46,91349,91350,91352,91354,91357,91359],{"class":48,"line":711},[46,91351,60209],{"class":56},[46,91353,60212],{"class":169},[46,91355,91356],{"class":56},"(x ",[46,91358,2668],{"class":52},[46,91360,91361],{"class":56}," y)\n",[46,91363,91364],{"class":48,"line":717},[46,91365,4217],{"class":56},[46,91367,91368],{"class":48,"line":723},[46,91369,91370],{"class":2253},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[46,91372,91373,91376,91379,91382,91384,91386,91388],{"class":48,"line":729},[46,91374,91375],{"class":56},"    fn.",[46,91377,91378],{"class":169},"apply",[46,91380,91381],{"class":56},"(obj, [",[46,91383,2405],{"class":180},[46,91385,448],{"class":56},[46,91387,2272],{"class":180},[46,91389,6673],{"class":56},[46,91391,91392],{"class":48,"line":735},[46,91393,91394],{"class":2253},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[46,91396,91397],{"class":48,"line":740},[46,91398,616],{"emptyLinePlaceholder":615},[46,91400,91401],{"class":48,"line":745},[46,91402,91403],{"class":2253},"    \u002F\u002F 使用场景：求数组最大值\n",[46,91405,91406],{"class":48,"line":763},[46,91407,91408],{"class":2253},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[46,91410,91411,91414],{"class":48,"line":778},[46,91412,91413],{"class":2253},"    \u002F\u002F console.log(max)",[46,91415,91416],{"class":2253},"   \u002F\u002F3\n",[46,91418,91419],{"class":48,"line":789},[46,91420,91421],{"class":2253},"    \u002F\u002F 指向空或者Math都是可以的\n",[46,91423,91424,91426,91428,91430,91432,91434,91436,91438,91440,91442],{"class":48,"line":794},[46,91425,13225],{"class":52},[46,91427,59660],{"class":180},[46,91429,647],{"class":52},[46,91431,54193],{"class":56},[46,91433,1155],{"class":180},[46,91435,448],{"class":56},[46,91437,2691],{"class":180},[46,91439,448],{"class":56},[46,91441,2721],{"class":180},[46,91443,35220],{"class":56},[46,91445,91446],{"class":48,"line":806},[46,91447,91448],{"class":2253},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[46,91450,91451,91453,91455,91457,91460,91462],{"class":48,"line":829},[46,91452,13225],{"class":52},[46,91454,7964],{"class":180},[46,91456,647],{"class":52},[46,91458,91459],{"class":56}," Math.max.",[46,91461,91378],{"class":169},[46,91463,91464],{"class":56},"(Math, arr)\n",[46,91466,91467,91469,91472,91474,91477,91479],{"class":48,"line":840},[46,91468,13225],{"class":52},[46,91470,91471],{"class":180}," min",[46,91473,647],{"class":52},[46,91475,91476],{"class":56}," Math.min.",[46,91478,91378],{"class":169},[46,91480,91464],{"class":56},[46,91482,91483,91485,91487,91490],{"class":48,"line":846},[46,91484,75718],{"class":56},[46,91486,60212],{"class":169},[46,91488,91489],{"class":56},"(max, min)     ",[46,91491,91492],{"class":2253},"\u002F\u002F100,4\n",[46,91494,91495],{"class":48,"line":852},[46,91496,616],{"emptyLinePlaceholder":615},[46,91498,91499],{"class":48,"line":857},[46,91500,91501],{"class":2253},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[46,91503,91504,91506,91508,91511,91513,91515,91518],{"class":48,"line":875},[46,91505,75718],{"class":56},[46,91507,60212],{"class":169},[46,91509,91510],{"class":56},"(Max.",[46,91512,8028],{"class":169},[46,91514,1152],{"class":56},[46,91516,91517],{"class":52},"...",[46,91519,91520],{"class":56},"arr))\n",[46,91522,91523,91525,91527],{"class":48,"line":892},[46,91524,54384],{"class":56},[46,91526,53780],{"class":1361},[46,91528,53274],{"class":56},[46,91530,91531,91533,91535],{"class":48,"line":898},[46,91532,53752],{"class":56},[46,91534,53767],{"class":1361},[46,91536,53274],{"class":56},[46,91538,91539],{"class":48,"line":903},[46,91540,616],{"emptyLinePlaceholder":615},[46,91542,91543,91545,91547],{"class":48,"line":908},[46,91544,53752],{"class":56},[46,91546,52603],{"class":1361},[46,91548,53274],{"class":56},[19,91550,91551],{},[3514,91552],{"alt":41,"src":91553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[23,91555,91556],{"start":200},[26,91557,91558],{},"bind()",[19,91560,91561],{},[3514,91562],{"alt":41,"src":91563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[19,91565,91566],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[19,91568,91569],{},"bind的语法跟call很相似",[36,91571,91573],{"className":1350,"code":91572,"language":1352,"meta":41,"style":41},"\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",[43,91574,91575,91583,91591,91595,91600,91604,91608,91613,91617,91622,91627,91632,91637,91642,91647,91652,91656,91664],{"__ignoreMap":41},[46,91576,91577,91579,91581],{"class":48,"line":49},[46,91578,821],{"class":56},[46,91580,53767],{"class":1361},[46,91582,53274],{"class":56},[46,91584,91585,91587,91589],{"class":48,"line":60},[46,91586,54111],{"class":56},[46,91588,53780],{"class":1361},[46,91590,53274],{"class":56},[46,91592,91593],{"class":48,"line":200},[46,91594,73488],{"class":56},[46,91596,91597],{"class":48,"line":211},[46,91598,91599],{"class":56},"      age: 18\n",[46,91601,91602],{"class":48,"line":222},[46,91603,4217],{"class":56},[46,91605,91606],{"class":48,"line":636},[46,91607,79108],{"class":56},[46,91609,91610],{"class":48,"line":641},[46,91611,91612],{"class":56},"      console.log(this)\n",[46,91614,91615],{"class":48,"line":653},[46,91616,4217],{"class":56},[46,91618,91619],{"class":48,"line":659},[46,91620,91621],{"class":56},"    \u002F\u002F 1.bind 不会调用函数\n",[46,91623,91624],{"class":48,"line":665},[46,91625,91626],{"class":56},"    \u002F\u002F 2.bind能改变this的指向\n",[46,91628,91629],{"class":48,"line":670},[46,91630,91631],{"class":56},"    fn.bind()\n",[46,91633,91634],{"class":48,"line":676},[46,91635,91636],{"class":56},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[46,91638,91639],{"class":48,"line":682},[46,91640,91641],{"class":56},"    const fun = fn.bind(obj)\n",[46,91643,91644],{"class":48,"line":688},[46,91645,91646],{"class":56},"    \u002F\u002F console.log(fun)\n",[46,91648,91649],{"class":48,"line":693},[46,91650,91651],{"class":56},"    \u002F\u002F 调用,查看this的指向\n",[46,91653,91654],{"class":48,"line":699},[46,91655,54618],{"class":56},[46,91657,91658,91660,91662],{"class":48,"line":705},[46,91659,54384],{"class":56},[46,91661,53780],{"class":1361},[46,91663,53274],{"class":56},[46,91665,91666,91668,91670],{"class":48,"line":711},[46,91667,53752],{"class":56},[46,91669,53767],{"class":1361},[46,91671,53274],{"class":56},[19,91673,91674],{},[3514,91675],{"alt":41,"src":91676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[23,91678,91679],{"start":211},[26,91680,91681],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[36,91683,91685],{"className":1350,"code":91684,"language":1352,"meta":41,"style":41},"\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",[43,91686,91687,91695,91708,91716,91721,91725,91730,91735,91740,91745,91750,91755,91760,91765,91769,91777],{"__ignoreMap":41},[46,91688,91689,91691,91693],{"class":48,"line":49},[46,91690,821],{"class":56},[46,91692,53767],{"class":1361},[46,91694,53274],{"class":56},[46,91696,91697,91699,91701,91704,91706],{"class":48,"line":60},[46,91698,54111],{"class":56},[46,91700,55852],{"class":1361},[46,91702,91703],{"class":56},">禁用\u003C\u002F",[46,91705,55852],{"class":1361},[46,91707,53274],{"class":56},[46,91709,91710,91712,91714],{"class":48,"line":200},[46,91711,54111],{"class":56},[46,91713,53780],{"class":1361},[46,91715,53274],{"class":56},[46,91717,91718],{"class":48,"line":211},[46,91719,91720],{"class":56},"    const btn = document.querySelector('button')\n",[46,91722,91723],{"class":48,"line":222},[46,91724,60981],{"class":56},[46,91726,91727],{"class":48,"line":636},[46,91728,91729],{"class":56},"      this.disabled = true\n",[46,91731,91732],{"class":48,"line":641},[46,91733,91734],{"class":56},"      \u002F\u002F 定时器是window进行调用的\n",[46,91736,91737],{"class":48,"line":653},[46,91738,91739],{"class":56},"      setTimeout(function () {\n",[46,91741,91742],{"class":48,"line":659},[46,91743,91744],{"class":56},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[46,91746,91747],{"class":48,"line":665},[46,91748,91749],{"class":56},"        this.disabled = false\n",[46,91751,91752],{"class":48,"line":670},[46,91753,91754],{"class":56},"      }.bind(this), 2000)\n",[46,91756,91757],{"class":48,"line":676},[46,91758,91759],{"class":56},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[46,91761,91762],{"class":48,"line":682},[46,91763,91764],{"class":56},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[46,91766,91767],{"class":48,"line":688},[46,91768,35434],{"class":56},[46,91770,91771,91773,91775],{"class":48,"line":693},[46,91772,54384],{"class":56},[46,91774,53780],{"class":1361},[46,91776,53274],{"class":56},[46,91778,91779,91781,91783],{"class":48,"line":699},[46,91780,53752],{"class":56},[46,91782,53767],{"class":1361},[46,91784,53274],{"class":56},[23,91786,91787],{"start":222},[26,91788,23954],{},[19,91790,91791],{},[3514,91792],{"alt":41,"src":91793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,91795,91797],{"id":91796},"_417-性能优化","4.17 性能优化",[479,91799,91801],{"id":91800},"_4171-防抖","4.17.1 防抖",[19,91803,91804],{},[3514,91805],{"alt":41,"src":91806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[19,91808,91809],{},[2339,91810,91811],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[19,91813,91814],{},"防抖实现方式：",[3191,91816,91817],{},[26,91818,91819],{},"lodash 提供了防抖处理",[19,91821,91822],{},"_.debounce(func,[wait=0],[options={}])",[19,91824,91825],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[36,91827,91829],{"className":52601,"code":91828,"language":52603,"meta":41,"style":41},"\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",[43,91830,91831,91841,91855,91859,91867,91881,91901,91913,91921,91927,91937,91949,91961,91972,91984,91994,92004,92017,92021,92029,92037,92041,92049,92067,92085,92093,92112,92122,92131,92142,92147,92151,92156,92161,92166,92191,92199,92207,92211],{"__ignoreMap":41},[46,91832,91833,91835,91837,91839],{"class":48,"line":49},[46,91834,53265],{"class":56},[46,91836,53268],{"class":1361},[46,91838,53271],{"class":169},[46,91840,53274],{"class":56},[46,91842,91843,91845,91847,91849,91851,91853],{"class":48,"line":60},[46,91844,821],{"class":56},[46,91846,52603],{"class":1361},[46,91848,53283],{"class":169},[46,91850,79],{"class":56},[46,91852,53288],{"class":173},[46,91854,53274],{"class":56},[46,91856,91857],{"class":48,"line":200},[46,91858,616],{"emptyLinePlaceholder":615},[46,91860,91861,91863,91865],{"class":48,"line":211},[46,91862,821],{"class":56},[46,91864,53301],{"class":1361},[46,91866,53274],{"class":56},[46,91868,91869,91871,91873,91875,91877,91879],{"class":48,"line":222},[46,91870,54111],{"class":56},[46,91872,53311],{"class":1361},[46,91874,53314],{"class":169},[46,91876,79],{"class":56},[46,91878,53319],{"class":173},[46,91880,53274],{"class":56},[46,91882,91883,91885,91887,91889,91891,91893,91895,91897,91899],{"class":48,"line":636},[46,91884,54111],{"class":56},[46,91886,53311],{"class":1361},[46,91888,1364],{"class":169},[46,91890,79],{"class":56},[46,91892,53358],{"class":173},[46,91894,53338],{"class":169},[46,91896,79],{"class":56},[46,91898,53365],{"class":173},[46,91900,53274],{"class":56},[46,91902,91903,91905,91907,91909,91911],{"class":48,"line":641},[46,91904,54111],{"class":56},[46,91906,53374],{"class":1361},[46,91908,53377],{"class":56},[46,91910,53374],{"class":1361},[46,91912,53274],{"class":56},[46,91914,91915,91917,91919],{"class":48,"line":653},[46,91916,54111],{"class":56},[46,91918,2098],{"class":1361},[46,91920,53274],{"class":56},[46,91922,91923,91925],{"class":48,"line":659},[46,91924,56717],{"class":169},[46,91926,17573],{"class":56},[46,91928,91929,91931,91933,91935],{"class":48,"line":665},[46,91930,74561],{"class":180},[46,91932,53404],{"class":56},[46,91934,62470],{"class":180},[46,91936,3345],{"class":56},[46,91938,91939,91941,91943,91945,91947],{"class":48,"line":670},[46,91940,56736],{"class":180},[46,91942,53404],{"class":56},[46,91944,3762],{"class":180},[46,91946,53459],{"class":52},[46,91948,3345],{"class":56},[46,91950,91951,91953,91955,91957,91959],{"class":48,"line":676},[46,91952,56750],{"class":180},[46,91954,53404],{"class":56},[46,91956,3762],{"class":180},[46,91958,53459],{"class":52},[46,91960,3345],{"class":56},[46,91962,91963,91965,91967,91970],{"class":48,"line":682},[46,91964,56849],{"class":180},[46,91966,53404],{"class":56},[46,91968,91969],{"class":180},"gray",[46,91971,3345],{"class":56},[46,91973,91974,91976,91978,91980,91982],{"class":48,"line":688},[46,91975,56887],{"class":180},[46,91977,53404],{"class":56},[46,91979,3011],{"class":180},[46,91981,53459],{"class":52},[46,91983,3345],{"class":56},[46,91985,91986,91988,91990,91992],{"class":48,"line":693},[46,91987,59381],{"class":180},[46,91989,53404],{"class":56},[46,91991,62807],{"class":180},[46,91993,3345],{"class":56},[46,91995,91996,91998,92000,92002],{"class":48,"line":699},[46,91997,59251],{"class":180},[46,91999,53404],{"class":56},[46,92001,53559],{"class":180},[46,92003,3345],{"class":56},[46,92005,92006,92009,92011,92013,92015],{"class":48,"line":705},[46,92007,92008],{"class":180},"      padding-top",[46,92010,53404],{"class":56},[46,92012,2506],{"class":180},[46,92014,53459],{"class":52},[46,92016,3345],{"class":56},[46,92018,92019],{"class":48,"line":711},[46,92020,4217],{"class":56},[46,92022,92023,92025,92027],{"class":48,"line":717},[46,92024,54384],{"class":56},[46,92026,2098],{"class":1361},[46,92028,53274],{"class":56},[46,92030,92031,92033,92035],{"class":48,"line":723},[46,92032,53752],{"class":56},[46,92034,53301],{"class":1361},[46,92036,53274],{"class":56},[46,92038,92039],{"class":48,"line":729},[46,92040,616],{"emptyLinePlaceholder":615},[46,92042,92043,92045,92047],{"class":48,"line":735},[46,92044,821],{"class":56},[46,92046,53767],{"class":1361},[46,92048,53274],{"class":56},[46,92050,92051,92053,92055,92057,92059,92061,92063,92065],{"class":48,"line":740},[46,92052,54111],{"class":56},[46,92054,53578],{"class":1361},[46,92056,55451],{"class":169},[46,92058,79],{"class":56},[46,92060,55456],{"class":173},[46,92062,57279],{"class":56},[46,92064,53578],{"class":1361},[46,92066,53274],{"class":56},[46,92068,92069,92071,92073,92075,92077,92079,92081,92083],{"class":48,"line":745},[46,92070,54111],{"class":56},[46,92072,53780],{"class":1361},[46,92074,57204],{"class":169},[46,92076,79],{"class":56},[46,92078,90237],{"class":173},[46,92080,57279],{"class":56},[46,92082,53780],{"class":1361},[46,92084,53274],{"class":56},[46,92086,92087,92089,92091],{"class":48,"line":763},[46,92088,54111],{"class":56},[46,92090,53780],{"class":1361},[46,92092,53274],{"class":56},[46,92094,92095,92097,92099,92101,92103,92105,92107,92110],{"class":48,"line":778},[46,92096,13225],{"class":52},[46,92098,88896],{"class":180},[46,92100,647],{"class":52},[46,92102,56361],{"class":56},[46,92104,56364],{"class":169},[46,92106,1152],{"class":56},[46,92108,92109],{"class":173},"'.box'",[46,92111,459],{"class":56},[46,92113,92114,92116,92118,92120],{"class":48,"line":789},[46,92115,54186],{"class":52},[46,92117,11442],{"class":56},[46,92119,79],{"class":52},[46,92121,49301],{"class":180},[46,92123,92124,92126,92129],{"class":48,"line":794},[46,92125,72049],{"class":52},[46,92127,92128],{"class":169}," mouseMove",[46,92130,12857],{"class":56},[46,92132,92133,92136,92138,92140],{"class":48,"line":806},[46,92134,92135],{"class":56},"      box.innerHTML ",[46,92137,79],{"class":52},[46,92139,5052],{"class":56},[46,92141,4723],{"class":52},[46,92143,92144],{"class":48,"line":829},[46,92145,92146],{"class":2253},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[46,92148,92149],{"class":48,"line":840},[46,92150,4217],{"class":56},[46,92152,92153],{"class":48,"line":846},[46,92154,92155],{"class":2253},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[46,92157,92158],{"class":48,"line":852},[46,92159,92160],{"class":2253},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[46,92162,92163],{"class":48,"line":857},[46,92164,92165],{"class":2253},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[46,92167,92168,92171,92173,92175,92178,92181,92184,92187,92189],{"class":48,"line":875},[46,92169,92170],{"class":56},"    box.",[46,92172,59778],{"class":169},[46,92174,1152],{"class":56},[46,92176,92177],{"class":173},"'mousemove'",[46,92179,92180],{"class":56},", _.",[46,92182,92183],{"class":169},"debounce",[46,92185,92186],{"class":56},"(mouseMove, ",[46,92188,67039],{"class":180},[46,92190,32479],{"class":56},[46,92192,92193,92195,92197],{"class":48,"line":892},[46,92194,54384],{"class":56},[46,92196,53780],{"class":1361},[46,92198,53274],{"class":56},[46,92200,92201,92203,92205],{"class":48,"line":898},[46,92202,53752],{"class":56},[46,92204,53767],{"class":1361},[46,92206,53274],{"class":56},[46,92208,92209],{"class":48,"line":903},[46,92210,616],{"emptyLinePlaceholder":615},[46,92212,92213,92215,92217],{"class":48,"line":908},[46,92214,53752],{"class":56},[46,92216,52603],{"class":1361},[46,92218,53274],{"class":56},[3191,92220,92221],{},[26,92222,92223],{},"手写一个防抖函数来处理",[19,92225,92226],{},"防抖的核心就是利用定时器来实现的：",[19,92228,92229],{},"①声明一个定时器变量",[19,92231,92232],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[19,92234,92235],{},"③如果没有定时器则开启定时器，记得存到变量里面",[36,92237,92239],{"className":52601,"code":92238,"language":52603,"meta":41,"style":41},"\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",[43,92240,92241,92251,92265,92269,92277,92291,92311,92323,92331,92337,92347,92359,92371,92381,92393,92403,92413,92425,92429,92437,92445,92449,92457,92475,92493,92501,92519,92529,92537,92547,92551,92555,92559,92564,92569,92574,92579,92584,92589,92607,92614,92619,92627,92632,92645,92661,92671,92676,92680,92684,92704,92708,92713,92718,92723,92728,92736,92744,92748],{"__ignoreMap":41},[46,92242,92243,92245,92247,92249],{"class":48,"line":49},[46,92244,53265],{"class":56},[46,92246,53268],{"class":1361},[46,92248,53271],{"class":169},[46,92250,53274],{"class":56},[46,92252,92253,92255,92257,92259,92261,92263],{"class":48,"line":60},[46,92254,821],{"class":56},[46,92256,52603],{"class":1361},[46,92258,53283],{"class":169},[46,92260,79],{"class":56},[46,92262,53288],{"class":173},[46,92264,53274],{"class":56},[46,92266,92267],{"class":48,"line":200},[46,92268,616],{"emptyLinePlaceholder":615},[46,92270,92271,92273,92275],{"class":48,"line":211},[46,92272,821],{"class":56},[46,92274,53301],{"class":1361},[46,92276,53274],{"class":56},[46,92278,92279,92281,92283,92285,92287,92289],{"class":48,"line":222},[46,92280,54111],{"class":56},[46,92282,53311],{"class":1361},[46,92284,53314],{"class":169},[46,92286,79],{"class":56},[46,92288,53319],{"class":173},[46,92290,53274],{"class":56},[46,92292,92293,92295,92297,92299,92301,92303,92305,92307,92309],{"class":48,"line":636},[46,92294,54111],{"class":56},[46,92296,53311],{"class":1361},[46,92298,1364],{"class":169},[46,92300,79],{"class":56},[46,92302,53358],{"class":173},[46,92304,53338],{"class":169},[46,92306,79],{"class":56},[46,92308,53365],{"class":173},[46,92310,53274],{"class":56},[46,92312,92313,92315,92317,92319,92321],{"class":48,"line":641},[46,92314,54111],{"class":56},[46,92316,53374],{"class":1361},[46,92318,53377],{"class":56},[46,92320,53374],{"class":1361},[46,92322,53274],{"class":56},[46,92324,92325,92327,92329],{"class":48,"line":653},[46,92326,54111],{"class":56},[46,92328,2098],{"class":1361},[46,92330,53274],{"class":56},[46,92332,92333,92335],{"class":48,"line":659},[46,92334,56717],{"class":169},[46,92336,17573],{"class":56},[46,92338,92339,92341,92343,92345],{"class":48,"line":665},[46,92340,74561],{"class":180},[46,92342,53404],{"class":56},[46,92344,62470],{"class":180},[46,92346,3345],{"class":56},[46,92348,92349,92351,92353,92355,92357],{"class":48,"line":670},[46,92350,56736],{"class":180},[46,92352,53404],{"class":56},[46,92354,3762],{"class":180},[46,92356,53459],{"class":52},[46,92358,3345],{"class":56},[46,92360,92361,92363,92365,92367,92369],{"class":48,"line":676},[46,92362,56750],{"class":180},[46,92364,53404],{"class":56},[46,92366,3762],{"class":180},[46,92368,53459],{"class":52},[46,92370,3345],{"class":56},[46,92372,92373,92375,92377,92379],{"class":48,"line":682},[46,92374,56849],{"class":180},[46,92376,53404],{"class":56},[46,92378,91969],{"class":180},[46,92380,3345],{"class":56},[46,92382,92383,92385,92387,92389,92391],{"class":48,"line":688},[46,92384,56887],{"class":180},[46,92386,53404],{"class":56},[46,92388,3011],{"class":180},[46,92390,53459],{"class":52},[46,92392,3345],{"class":56},[46,92394,92395,92397,92399,92401],{"class":48,"line":693},[46,92396,59381],{"class":180},[46,92398,53404],{"class":56},[46,92400,62807],{"class":180},[46,92402,3345],{"class":56},[46,92404,92405,92407,92409,92411],{"class":48,"line":699},[46,92406,59251],{"class":180},[46,92408,53404],{"class":56},[46,92410,53559],{"class":180},[46,92412,3345],{"class":56},[46,92414,92415,92417,92419,92421,92423],{"class":48,"line":705},[46,92416,92008],{"class":180},[46,92418,53404],{"class":56},[46,92420,2506],{"class":180},[46,92422,53459],{"class":52},[46,92424,3345],{"class":56},[46,92426,92427],{"class":48,"line":711},[46,92428,4217],{"class":56},[46,92430,92431,92433,92435],{"class":48,"line":717},[46,92432,54384],{"class":56},[46,92434,2098],{"class":1361},[46,92436,53274],{"class":56},[46,92438,92439,92441,92443],{"class":48,"line":723},[46,92440,53752],{"class":56},[46,92442,53301],{"class":1361},[46,92444,53274],{"class":56},[46,92446,92447],{"class":48,"line":729},[46,92448,616],{"emptyLinePlaceholder":615},[46,92450,92451,92453,92455],{"class":48,"line":735},[46,92452,821],{"class":56},[46,92454,53767],{"class":1361},[46,92456,53274],{"class":56},[46,92458,92459,92461,92463,92465,92467,92469,92471,92473],{"class":48,"line":740},[46,92460,54111],{"class":56},[46,92462,53578],{"class":1361},[46,92464,55451],{"class":169},[46,92466,79],{"class":56},[46,92468,55456],{"class":173},[46,92470,57279],{"class":56},[46,92472,53578],{"class":1361},[46,92474,53274],{"class":56},[46,92476,92477,92479,92481,92483,92485,92487,92489,92491],{"class":48,"line":745},[46,92478,54111],{"class":56},[46,92480,53780],{"class":1361},[46,92482,57204],{"class":169},[46,92484,79],{"class":56},[46,92486,90237],{"class":173},[46,92488,57279],{"class":56},[46,92490,53780],{"class":1361},[46,92492,53274],{"class":56},[46,92494,92495,92497,92499],{"class":48,"line":763},[46,92496,54111],{"class":56},[46,92498,53780],{"class":1361},[46,92500,53274],{"class":56},[46,92502,92503,92505,92507,92509,92511,92513,92515,92517],{"class":48,"line":778},[46,92504,13225],{"class":52},[46,92506,88896],{"class":180},[46,92508,647],{"class":52},[46,92510,56361],{"class":56},[46,92512,56364],{"class":169},[46,92514,1152],{"class":56},[46,92516,92109],{"class":173},[46,92518,459],{"class":56},[46,92520,92521,92523,92525,92527],{"class":48,"line":789},[46,92522,54186],{"class":52},[46,92524,11442],{"class":56},[46,92526,79],{"class":52},[46,92528,49301],{"class":180},[46,92530,92531,92533,92535],{"class":48,"line":794},[46,92532,72049],{"class":52},[46,92534,92128],{"class":169},[46,92536,12857],{"class":56},[46,92538,92539,92541,92543,92545],{"class":48,"line":806},[46,92540,92135],{"class":56},[46,92542,79],{"class":52},[46,92544,5052],{"class":56},[46,92546,4723],{"class":52},[46,92548,92549],{"class":48,"line":829},[46,92550,92146],{"class":2253},[46,92552,92553],{"class":48,"line":840},[46,92554,4217],{"class":56},[46,92556,92557],{"class":48,"line":846},[46,92558,92155],{"class":2253},[46,92560,92561],{"class":48,"line":852},[46,92562,92563],{"class":2253},"    \u002F\u002F 手写防抖函数\n",[46,92565,92566],{"class":48,"line":857},[46,92567,92568],{"class":2253},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[46,92570,92571],{"class":48,"line":875},[46,92572,92573],{"class":2253},"    \u002F\u002F 1.声明定时器变量\n",[46,92575,92576],{"class":48,"line":892},[46,92577,92578],{"class":2253},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[46,92580,92581],{"class":48,"line":898},[46,92582,92583],{"class":2253},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[46,92585,92586],{"class":48,"line":903},[46,92587,92588],{"class":2253},"    \u002F\u002F 4.定时器里面写函数调用\n",[46,92590,92591,92593,92596,92598,92601,92603,92605],{"class":48,"line":908},[46,92592,72049],{"class":52},[46,92594,92595],{"class":169}," debounce",[46,92597,1152],{"class":56},[46,92599,92600],{"class":439},"fn",[46,92602,448],{"class":56},[46,92604,2906],{"class":439},[46,92606,14445],{"class":56},[46,92608,92609,92611],{"class":48,"line":925},[46,92610,81737],{"class":52},[46,92612,92613],{"class":56}," timer\n",[46,92615,92616],{"class":48,"line":1238},[46,92617,92618],{"class":2253},"      \u002F\u002F return 返回一个匿名函数\n",[46,92620,92621,92623,92625],{"class":48,"line":1251},[46,92622,75947],{"class":52},[46,92624,60883],{"class":52},[46,92626,56417],{"class":56},[46,92628,92629],{"class":48,"line":1256},[46,92630,92631],{"class":2253},"        \u002F\u002F 这里边写第二三四步\n",[46,92633,92634,92636,92639,92642],{"class":48,"line":1261},[46,92635,4525],{"class":52},[46,92637,92638],{"class":56}," (timer) ",[46,92640,92641],{"class":169},"clearTimeout",[46,92643,92644],{"class":56},"(timer)\n",[46,92646,92647,92650,92652,92655,92657,92659],{"class":48,"line":1274},[46,92648,92649],{"class":56},"        timer ",[46,92651,79],{"class":52},[46,92653,92654],{"class":169}," setTimeout",[46,92656,1152],{"class":56},[46,92658,56414],{"class":52},[46,92660,56417],{"class":56},[46,92662,92663,92666,92668],{"class":48,"line":10061},[46,92664,92665],{"class":169},"          fn",[46,92667,15053],{"class":56},[46,92669,92670],{"class":2253},"\u002F\u002F加小括号调用fn }, t)\n",[46,92672,92673],{"class":48,"line":11720},[46,92674,92675],{"class":56},"        }, t)\n",[46,92677,92678],{"class":48,"line":11745},[46,92679,54365],{"class":56},[46,92681,92682],{"class":48,"line":11768},[46,92683,4217],{"class":56},[46,92685,92686,92688,92690,92692,92694,92696,92698,92700,92702],{"class":48,"line":11792},[46,92687,92170],{"class":56},[46,92689,59778],{"class":169},[46,92691,1152],{"class":56},[46,92693,92177],{"class":173},[46,92695,448],{"class":56},[46,92697,92183],{"class":169},[46,92699,92186],{"class":56},[46,92701,67039],{"class":180},[46,92703,32479],{"class":56},[46,92705,92706],{"class":48,"line":11797},[46,92707,616],{"emptyLinePlaceholder":615},[46,92709,92710],{"class":48,"line":11802},[46,92711,92712],{"class":2253},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[46,92714,92715],{"class":48,"line":11807},[46,92716,92717],{"class":2253},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[46,92719,92720],{"class":48,"line":11816},[46,92721,92722],{"class":2253},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[46,92724,92725],{"class":48,"line":11821},[46,92726,92727],{"class":2253},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[46,92729,92730,92732,92734],{"class":48,"line":11827},[46,92731,54384],{"class":56},[46,92733,53780],{"class":1361},[46,92735,53274],{"class":56},[46,92737,92738,92740,92742],{"class":48,"line":11848},[46,92739,53752],{"class":56},[46,92741,53767],{"class":1361},[46,92743,53274],{"class":56},[46,92745,92746],{"class":48,"line":11854},[46,92747,616],{"emptyLinePlaceholder":615},[46,92749,92750,92752,92754],{"class":48,"line":11868},[46,92751,53752],{"class":56},[46,92753,52603],{"class":1361},[46,92755,53274],{"class":56},[479,92757,92759],{"id":92758},"_4172-节流","4.17.2 节流",[19,92761,92762],{},[3514,92763],{"alt":41,"src":92764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[19,92766,92767],{},[3514,92768],{"alt":41,"src":92769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[19,92771,92772],{},[2339,92773,92774],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[19,92776,92777],{},"实现方式：",[3191,92779,92780],{},[26,92781,92782],{},"lodash 提供的节流函数来处理",[19,92784,92785],{},"_.throttle(func,[wait=0],[options=])",[19,92787,92788],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[36,92790,92792],{"className":52601,"code":92791,"language":52603,"meta":41,"style":41},"\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",[43,92793,92794,92804,92818,92822,92830,92844,92864,92876,92884,92890,92900,92912,92924,92934,92946,92956,92966,92978,92982,92990,92998,93002,93010,93028,93046,93054,93072,93082,93090,93100,93104,93108,93112,93117,93122,93143,93151,93159,93163],{"__ignoreMap":41},[46,92795,92796,92798,92800,92802],{"class":48,"line":49},[46,92797,53265],{"class":56},[46,92799,53268],{"class":1361},[46,92801,53271],{"class":169},[46,92803,53274],{"class":56},[46,92805,92806,92808,92810,92812,92814,92816],{"class":48,"line":60},[46,92807,821],{"class":56},[46,92809,52603],{"class":1361},[46,92811,53283],{"class":169},[46,92813,79],{"class":56},[46,92815,53288],{"class":173},[46,92817,53274],{"class":56},[46,92819,92820],{"class":48,"line":200},[46,92821,616],{"emptyLinePlaceholder":615},[46,92823,92824,92826,92828],{"class":48,"line":211},[46,92825,821],{"class":56},[46,92827,53301],{"class":1361},[46,92829,53274],{"class":56},[46,92831,92832,92834,92836,92838,92840,92842],{"class":48,"line":222},[46,92833,54111],{"class":56},[46,92835,53311],{"class":1361},[46,92837,53314],{"class":169},[46,92839,79],{"class":56},[46,92841,53319],{"class":173},[46,92843,53274],{"class":56},[46,92845,92846,92848,92850,92852,92854,92856,92858,92860,92862],{"class":48,"line":636},[46,92847,54111],{"class":56},[46,92849,53311],{"class":1361},[46,92851,1364],{"class":169},[46,92853,79],{"class":56},[46,92855,53358],{"class":173},[46,92857,53338],{"class":169},[46,92859,79],{"class":56},[46,92861,53365],{"class":173},[46,92863,53274],{"class":56},[46,92865,92866,92868,92870,92872,92874],{"class":48,"line":641},[46,92867,54111],{"class":56},[46,92869,53374],{"class":1361},[46,92871,53377],{"class":56},[46,92873,53374],{"class":1361},[46,92875,53274],{"class":56},[46,92877,92878,92880,92882],{"class":48,"line":653},[46,92879,54111],{"class":56},[46,92881,2098],{"class":1361},[46,92883,53274],{"class":56},[46,92885,92886,92888],{"class":48,"line":659},[46,92887,56717],{"class":169},[46,92889,17573],{"class":56},[46,92891,92892,92894,92896,92898],{"class":48,"line":665},[46,92893,74561],{"class":180},[46,92895,53404],{"class":56},[46,92897,62470],{"class":180},[46,92899,3345],{"class":56},[46,92901,92902,92904,92906,92908,92910],{"class":48,"line":670},[46,92903,56736],{"class":180},[46,92905,53404],{"class":56},[46,92907,3762],{"class":180},[46,92909,53459],{"class":52},[46,92911,3345],{"class":56},[46,92913,92914,92916,92918,92920,92922],{"class":48,"line":676},[46,92915,56750],{"class":180},[46,92917,53404],{"class":56},[46,92919,3762],{"class":180},[46,92921,53459],{"class":52},[46,92923,3345],{"class":56},[46,92925,92926,92928,92930,92932],{"class":48,"line":682},[46,92927,56849],{"class":180},[46,92929,53404],{"class":56},[46,92931,91969],{"class":180},[46,92933,3345],{"class":56},[46,92935,92936,92938,92940,92942,92944],{"class":48,"line":688},[46,92937,56887],{"class":180},[46,92939,53404],{"class":56},[46,92941,3011],{"class":180},[46,92943,53459],{"class":52},[46,92945,3345],{"class":56},[46,92947,92948,92950,92952,92954],{"class":48,"line":693},[46,92949,59381],{"class":180},[46,92951,53404],{"class":56},[46,92953,62807],{"class":180},[46,92955,3345],{"class":56},[46,92957,92958,92960,92962,92964],{"class":48,"line":699},[46,92959,59251],{"class":180},[46,92961,53404],{"class":56},[46,92963,53559],{"class":180},[46,92965,3345],{"class":56},[46,92967,92968,92970,92972,92974,92976],{"class":48,"line":705},[46,92969,92008],{"class":180},[46,92971,53404],{"class":56},[46,92973,2506],{"class":180},[46,92975,53459],{"class":52},[46,92977,3345],{"class":56},[46,92979,92980],{"class":48,"line":711},[46,92981,4217],{"class":56},[46,92983,92984,92986,92988],{"class":48,"line":717},[46,92985,54384],{"class":56},[46,92987,2098],{"class":1361},[46,92989,53274],{"class":56},[46,92991,92992,92994,92996],{"class":48,"line":723},[46,92993,53752],{"class":56},[46,92995,53301],{"class":1361},[46,92997,53274],{"class":56},[46,92999,93000],{"class":48,"line":729},[46,93001,616],{"emptyLinePlaceholder":615},[46,93003,93004,93006,93008],{"class":48,"line":735},[46,93005,821],{"class":56},[46,93007,53767],{"class":1361},[46,93009,53274],{"class":56},[46,93011,93012,93014,93016,93018,93020,93022,93024,93026],{"class":48,"line":740},[46,93013,54111],{"class":56},[46,93015,53578],{"class":1361},[46,93017,55451],{"class":169},[46,93019,79],{"class":56},[46,93021,55456],{"class":173},[46,93023,57279],{"class":56},[46,93025,53578],{"class":1361},[46,93027,53274],{"class":56},[46,93029,93030,93032,93034,93036,93038,93040,93042,93044],{"class":48,"line":745},[46,93031,54111],{"class":56},[46,93033,53780],{"class":1361},[46,93035,57204],{"class":169},[46,93037,79],{"class":56},[46,93039,90237],{"class":173},[46,93041,57279],{"class":56},[46,93043,53780],{"class":1361},[46,93045,53274],{"class":56},[46,93047,93048,93050,93052],{"class":48,"line":763},[46,93049,54111],{"class":56},[46,93051,53780],{"class":1361},[46,93053,53274],{"class":56},[46,93055,93056,93058,93060,93062,93064,93066,93068,93070],{"class":48,"line":778},[46,93057,13225],{"class":52},[46,93059,88896],{"class":180},[46,93061,647],{"class":52},[46,93063,56361],{"class":56},[46,93065,56364],{"class":169},[46,93067,1152],{"class":56},[46,93069,92109],{"class":173},[46,93071,459],{"class":56},[46,93073,93074,93076,93078,93080],{"class":48,"line":789},[46,93075,54186],{"class":52},[46,93077,11442],{"class":56},[46,93079,79],{"class":52},[46,93081,49301],{"class":180},[46,93083,93084,93086,93088],{"class":48,"line":794},[46,93085,72049],{"class":52},[46,93087,92128],{"class":169},[46,93089,12857],{"class":56},[46,93091,93092,93094,93096,93098],{"class":48,"line":806},[46,93093,92135],{"class":56},[46,93095,79],{"class":52},[46,93097,5052],{"class":56},[46,93099,4723],{"class":52},[46,93101,93102],{"class":48,"line":829},[46,93103,92146],{"class":2253},[46,93105,93106],{"class":48,"line":840},[46,93107,4217],{"class":56},[46,93109,93110],{"class":48,"line":846},[46,93111,92155],{"class":2253},[46,93113,93114],{"class":48,"line":852},[46,93115,93116],{"class":2253},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[46,93118,93119],{"class":48,"line":857},[46,93120,93121],{"class":2253},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[46,93123,93124,93126,93128,93130,93132,93134,93137,93139,93141],{"class":48,"line":875},[46,93125,92170],{"class":56},[46,93127,59778],{"class":169},[46,93129,1152],{"class":56},[46,93131,92177],{"class":173},[46,93133,92180],{"class":56},[46,93135,93136],{"class":169},"throttle",[46,93138,92186],{"class":56},[46,93140,67039],{"class":180},[46,93142,32479],{"class":56},[46,93144,93145,93147,93149],{"class":48,"line":892},[46,93146,54384],{"class":56},[46,93148,53780],{"class":1361},[46,93150,53274],{"class":56},[46,93152,93153,93155,93157],{"class":48,"line":898},[46,93154,53752],{"class":56},[46,93156,53767],{"class":1361},[46,93158,53274],{"class":56},[46,93160,93161],{"class":48,"line":903},[46,93162,616],{"emptyLinePlaceholder":615},[46,93164,93165,93167,93169],{"class":48,"line":908},[46,93166,53752],{"class":56},[46,93168,52603],{"class":1361},[46,93170,53274],{"class":56},[3191,93172,93173],{},[26,93174,93175],{},"手写一个节流函数来处理",[19,93177,72917],{},[19,93179,92229],{},[19,93181,93182],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[19,93184,93185],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[36,93187,93189],{"className":52601,"code":93188,"language":52603,"meta":41,"style":41},"\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",[43,93190,93191,93201,93215,93219,93227,93241,93261,93273,93281,93287,93297,93309,93321,93331,93343,93353,93363,93375,93379,93387,93395,93399,93407,93425,93443,93451,93469,93479,93487,93497,93501,93505,93509,93514,93519,93524,93529,93534,93539,93556,93562,93570,93581,93596,93603,93608,93613,93623,93628,93633,93638,93642,93646,93650,93670,93678,93686,93690],{"__ignoreMap":41},[46,93192,93193,93195,93197,93199],{"class":48,"line":49},[46,93194,53265],{"class":56},[46,93196,53268],{"class":1361},[46,93198,53271],{"class":169},[46,93200,53274],{"class":56},[46,93202,93203,93205,93207,93209,93211,93213],{"class":48,"line":60},[46,93204,821],{"class":56},[46,93206,52603],{"class":1361},[46,93208,53283],{"class":169},[46,93210,79],{"class":56},[46,93212,53288],{"class":173},[46,93214,53274],{"class":56},[46,93216,93217],{"class":48,"line":200},[46,93218,616],{"emptyLinePlaceholder":615},[46,93220,93221,93223,93225],{"class":48,"line":211},[46,93222,821],{"class":56},[46,93224,53301],{"class":1361},[46,93226,53274],{"class":56},[46,93228,93229,93231,93233,93235,93237,93239],{"class":48,"line":222},[46,93230,54111],{"class":56},[46,93232,53311],{"class":1361},[46,93234,53314],{"class":169},[46,93236,79],{"class":56},[46,93238,53319],{"class":173},[46,93240,53274],{"class":56},[46,93242,93243,93245,93247,93249,93251,93253,93255,93257,93259],{"class":48,"line":636},[46,93244,54111],{"class":56},[46,93246,53311],{"class":1361},[46,93248,1364],{"class":169},[46,93250,79],{"class":56},[46,93252,53358],{"class":173},[46,93254,53338],{"class":169},[46,93256,79],{"class":56},[46,93258,53365],{"class":173},[46,93260,53274],{"class":56},[46,93262,93263,93265,93267,93269,93271],{"class":48,"line":641},[46,93264,54111],{"class":56},[46,93266,53374],{"class":1361},[46,93268,53377],{"class":56},[46,93270,53374],{"class":1361},[46,93272,53274],{"class":56},[46,93274,93275,93277,93279],{"class":48,"line":653},[46,93276,54111],{"class":56},[46,93278,2098],{"class":1361},[46,93280,53274],{"class":56},[46,93282,93283,93285],{"class":48,"line":659},[46,93284,56717],{"class":169},[46,93286,17573],{"class":56},[46,93288,93289,93291,93293,93295],{"class":48,"line":665},[46,93290,74561],{"class":180},[46,93292,53404],{"class":56},[46,93294,62470],{"class":180},[46,93296,3345],{"class":56},[46,93298,93299,93301,93303,93305,93307],{"class":48,"line":670},[46,93300,56736],{"class":180},[46,93302,53404],{"class":56},[46,93304,3762],{"class":180},[46,93306,53459],{"class":52},[46,93308,3345],{"class":56},[46,93310,93311,93313,93315,93317,93319],{"class":48,"line":676},[46,93312,56750],{"class":180},[46,93314,53404],{"class":56},[46,93316,3762],{"class":180},[46,93318,53459],{"class":52},[46,93320,3345],{"class":56},[46,93322,93323,93325,93327,93329],{"class":48,"line":682},[46,93324,56849],{"class":180},[46,93326,53404],{"class":56},[46,93328,91969],{"class":180},[46,93330,3345],{"class":56},[46,93332,93333,93335,93337,93339,93341],{"class":48,"line":688},[46,93334,56887],{"class":180},[46,93336,53404],{"class":56},[46,93338,3011],{"class":180},[46,93340,53459],{"class":52},[46,93342,3345],{"class":56},[46,93344,93345,93347,93349,93351],{"class":48,"line":693},[46,93346,59381],{"class":180},[46,93348,53404],{"class":56},[46,93350,62807],{"class":180},[46,93352,3345],{"class":56},[46,93354,93355,93357,93359,93361],{"class":48,"line":699},[46,93356,59251],{"class":180},[46,93358,53404],{"class":56},[46,93360,53559],{"class":180},[46,93362,3345],{"class":56},[46,93364,93365,93367,93369,93371,93373],{"class":48,"line":705},[46,93366,92008],{"class":180},[46,93368,53404],{"class":56},[46,93370,2506],{"class":180},[46,93372,53459],{"class":52},[46,93374,3345],{"class":56},[46,93376,93377],{"class":48,"line":711},[46,93378,4217],{"class":56},[46,93380,93381,93383,93385],{"class":48,"line":717},[46,93382,54384],{"class":56},[46,93384,2098],{"class":1361},[46,93386,53274],{"class":56},[46,93388,93389,93391,93393],{"class":48,"line":723},[46,93390,53752],{"class":56},[46,93392,53301],{"class":1361},[46,93394,53274],{"class":56},[46,93396,93397],{"class":48,"line":729},[46,93398,616],{"emptyLinePlaceholder":615},[46,93400,93401,93403,93405],{"class":48,"line":735},[46,93402,821],{"class":56},[46,93404,53767],{"class":1361},[46,93406,53274],{"class":56},[46,93408,93409,93411,93413,93415,93417,93419,93421,93423],{"class":48,"line":740},[46,93410,54111],{"class":56},[46,93412,53578],{"class":1361},[46,93414,55451],{"class":169},[46,93416,79],{"class":56},[46,93418,55456],{"class":173},[46,93420,57279],{"class":56},[46,93422,53578],{"class":1361},[46,93424,53274],{"class":56},[46,93426,93427,93429,93431,93433,93435,93437,93439,93441],{"class":48,"line":745},[46,93428,54111],{"class":56},[46,93430,53780],{"class":1361},[46,93432,57204],{"class":169},[46,93434,79],{"class":56},[46,93436,90237],{"class":173},[46,93438,57279],{"class":56},[46,93440,53780],{"class":1361},[46,93442,53274],{"class":56},[46,93444,93445,93447,93449],{"class":48,"line":763},[46,93446,54111],{"class":56},[46,93448,53780],{"class":1361},[46,93450,53274],{"class":56},[46,93452,93453,93455,93457,93459,93461,93463,93465,93467],{"class":48,"line":778},[46,93454,13225],{"class":52},[46,93456,88896],{"class":180},[46,93458,647],{"class":52},[46,93460,56361],{"class":56},[46,93462,56364],{"class":169},[46,93464,1152],{"class":56},[46,93466,92109],{"class":173},[46,93468,459],{"class":56},[46,93470,93471,93473,93475,93477],{"class":48,"line":789},[46,93472,54186],{"class":52},[46,93474,11442],{"class":56},[46,93476,79],{"class":52},[46,93478,49301],{"class":180},[46,93480,93481,93483,93485],{"class":48,"line":794},[46,93482,72049],{"class":52},[46,93484,92128],{"class":169},[46,93486,12857],{"class":56},[46,93488,93489,93491,93493,93495],{"class":48,"line":806},[46,93490,92135],{"class":56},[46,93492,79],{"class":52},[46,93494,5052],{"class":56},[46,93496,4723],{"class":52},[46,93498,93499],{"class":48,"line":829},[46,93500,92146],{"class":2253},[46,93502,93503],{"class":48,"line":840},[46,93504,4217],{"class":56},[46,93506,93507],{"class":48,"line":846},[46,93508,92155],{"class":2253},[46,93510,93511],{"class":48,"line":852},[46,93512,93513],{"class":2253},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[46,93515,93516],{"class":48,"line":857},[46,93517,93518],{"class":2253},"    \u002F\u002F 1.声明一个定时器变量\n",[46,93520,93521],{"class":48,"line":875},[46,93522,93523],{"class":2253},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[46,93525,93526],{"class":48,"line":892},[46,93527,93528],{"class":2253},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[46,93530,93531],{"class":48,"line":898},[46,93532,93533],{"class":2253},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[46,93535,93536],{"class":48,"line":903},[46,93537,93538],{"class":2253},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[46,93540,93541,93543,93546,93548,93550,93552,93554],{"class":48,"line":908},[46,93542,72049],{"class":52},[46,93544,93545],{"class":169}," throttle",[46,93547,1152],{"class":56},[46,93549,92600],{"class":439},[46,93551,448],{"class":56},[46,93553,2906],{"class":439},[46,93555,14445],{"class":56},[46,93557,93558,93560],{"class":48,"line":925},[46,93559,81737],{"class":52},[46,93561,92613],{"class":56},[46,93563,93564,93566,93568],{"class":48,"line":1238},[46,93565,75947],{"class":52},[46,93567,60883],{"class":52},[46,93569,56417],{"class":56},[46,93571,93572,93574,93576,93578],{"class":48,"line":1251},[46,93573,4525],{"class":52},[46,93575,3702],{"class":56},[46,93577,2414],{"class":52},[46,93579,93580],{"class":56},"timer) {\n",[46,93582,93583,93586,93588,93590,93592,93594],{"class":48,"line":1256},[46,93584,93585],{"class":56},"          timer ",[46,93587,79],{"class":52},[46,93589,92654],{"class":169},[46,93591,1152],{"class":56},[46,93593,56414],{"class":52},[46,93595,56417],{"class":56},[46,93597,93598,93601],{"class":48,"line":1261},[46,93599,93600],{"class":169},"            fn",[46,93602,4006],{"class":56},[46,93604,93605],{"class":48,"line":1274},[46,93606,93607],{"class":2253},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[46,93609,93610],{"class":48,"line":10061},[46,93611,93612],{"class":2253},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[46,93614,93615,93618,93620],{"class":48,"line":11720},[46,93616,93617],{"class":56},"            timer ",[46,93619,79],{"class":52},[46,93621,93622],{"class":180}," null\n",[46,93624,93625],{"class":48,"line":11745},[46,93626,93627],{"class":2253},"            \u002F\u002F 不能用clearTimeout(timer)\n",[46,93629,93630],{"class":48,"line":11768},[46,93631,93632],{"class":2253},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[46,93634,93635],{"class":48,"line":11792},[46,93636,93637],{"class":56},"          }, t)\n",[46,93639,93640],{"class":48,"line":11797},[46,93641,4557],{"class":56},[46,93643,93644],{"class":48,"line":11802},[46,93645,54365],{"class":56},[46,93647,93648],{"class":48,"line":11807},[46,93649,4217],{"class":56},[46,93651,93652,93654,93656,93658,93660,93662,93664,93666,93668],{"class":48,"line":11816},[46,93653,92170],{"class":56},[46,93655,59778],{"class":169},[46,93657,1152],{"class":56},[46,93659,92177],{"class":173},[46,93661,448],{"class":56},[46,93663,93136],{"class":169},[46,93665,92186],{"class":56},[46,93667,67039],{"class":180},[46,93669,32479],{"class":56},[46,93671,93672,93674,93676],{"class":48,"line":11821},[46,93673,54384],{"class":56},[46,93675,53780],{"class":1361},[46,93677,53274],{"class":56},[46,93679,93680,93682,93684],{"class":48,"line":11827},[46,93681,53752],{"class":56},[46,93683,53767],{"class":1361},[46,93685,53274],{"class":56},[46,93687,93688],{"class":48,"line":11848},[46,93689,616],{"emptyLinePlaceholder":615},[46,93691,93692,93694,93696],{"class":48,"line":11854},[46,93693,53752],{"class":56},[46,93695,52603],{"class":1361},[46,93697,53274],{"class":56},[479,93699,93701],{"id":93700},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[36,93703,93705],{"className":1350,"code":93704,"language":1352,"meta":41,"style":41},"\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",[43,93706,93707,93715,93723,93728,93733,93738,93743,93747,93755],{"__ignoreMap":41},[46,93708,93709,93711,93713],{"class":48,"line":49},[46,93710,821],{"class":56},[46,93712,53767],{"class":1361},[46,93714,53274],{"class":56},[46,93716,93717,93719,93721],{"class":48,"line":60},[46,93718,54111],{"class":56},[46,93720,53780],{"class":1361},[46,93722,53274],{"class":56},[46,93724,93725],{"class":48,"line":200},[46,93726,93727],{"class":56},"    let timer = null\n",[46,93729,93730],{"class":48,"line":211},[46,93731,93732],{"class":56},"    timer = setTimeout(() => {\n",[46,93734,93735],{"class":48,"line":222},[46,93736,93737],{"class":56},"      clearTimeout(timer)\n",[46,93739,93740],{"class":48,"line":636},[46,93741,93742],{"class":56},"      console.log(timer)\n",[46,93744,93745],{"class":48,"line":641},[46,93746,62190],{"class":56},[46,93748,93749,93751,93753],{"class":48,"line":653},[46,93750,54384],{"class":56},[46,93752,53780],{"class":1361},[46,93754,53274],{"class":56},[46,93756,93757,93759,93761],{"class":48,"line":659},[46,93758,53752],{"class":56},[46,93760,53767],{"class":1361},[46,93762,53274],{"class":56},[19,93764,93765],{},"输出为1",[19,93767,93768],{},"在开启的定时器里边写清除定时器",[19,93770,93771],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[479,93773,93775],{"id":93774},"_4174-节流综合案例","4.17.4 节流综合案例",[19,93777,93778],{},"页面打开，可以记录上一次的视频播放位置",[19,93780,93781],{},[3514,93782],{"alt":41,"src":93783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[19,93785,93786],{},[3514,93787],{"alt":41,"src":93788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[36,93790,93792],{"className":52601,"code":93791,"language":52603,"meta":41,"style":41},"\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",[43,93793,93794,93804,93818,93822,93830,93844,93864,93884,93906,93919,93927,93933,93943,93953,93963,93967,93971,93978,93991,94003,94007,94011,94021,94033,94047,94051,94055,94062,94072,94085,94097,94107,94117,94133,94145,94149,94153,94161,94171,94183,94193,94203,94213,94217,94221,94231,94242,94246,94254,94262,94266,94274,94289,94304,94319,94340,94348,94356,94371,94393,94401,94416,94442,94468,94494,94502,94510,94529,94537,94542,94561,94566,94584,94589,94594,94602,94607,94621,94629,94634,94651,94655,94660,94682,94686,94694,94702,94706],{"__ignoreMap":41},[46,93795,93796,93798,93800,93802],{"class":48,"line":49},[46,93797,53265],{"class":56},[46,93799,53268],{"class":1361},[46,93801,53271],{"class":169},[46,93803,53274],{"class":56},[46,93805,93806,93808,93810,93812,93814,93816],{"class":48,"line":60},[46,93807,821],{"class":56},[46,93809,52603],{"class":1361},[46,93811,53283],{"class":169},[46,93813,79],{"class":56},[46,93815,53288],{"class":173},[46,93817,53274],{"class":56},[46,93819,93820],{"class":48,"line":200},[46,93821,616],{"emptyLinePlaceholder":615},[46,93823,93824,93826,93828],{"class":48,"line":211},[46,93825,821],{"class":56},[46,93827,53301],{"class":1361},[46,93829,53274],{"class":56},[46,93831,93832,93834,93836,93838,93840,93842],{"class":48,"line":222},[46,93833,54111],{"class":56},[46,93835,53311],{"class":1361},[46,93837,53314],{"class":169},[46,93839,79],{"class":56},[46,93841,53319],{"class":173},[46,93843,61092],{"class":56},[46,93845,93846,93848,93850,93852,93854,93856,93858,93860,93862],{"class":48,"line":636},[46,93847,54111],{"class":56},[46,93849,53311],{"class":1361},[46,93851,53330],{"class":169},[46,93853,79],{"class":56},[46,93855,53335],{"class":173},[46,93857,53338],{"class":169},[46,93859,79],{"class":56},[46,93861,53343],{"class":173},[46,93863,61092],{"class":56},[46,93865,93866,93868,93870,93872,93874,93876,93878,93880,93882],{"class":48,"line":641},[46,93867,54111],{"class":56},[46,93869,53311],{"class":1361},[46,93871,1364],{"class":169},[46,93873,79],{"class":56},[46,93875,53358],{"class":173},[46,93877,53338],{"class":169},[46,93879,79],{"class":56},[46,93881,53365],{"class":173},[46,93883,61092],{"class":56},[46,93885,93886,93888,93890,93892,93894,93897,93899,93901,93904],{"class":48,"line":653},[46,93887,54111],{"class":56},[46,93889,53311],{"class":1361},[46,93891,1364],{"class":169},[46,93893,79],{"class":56},[46,93895,93896],{"class":173},"\"referrer\"",[46,93898,53338],{"class":169},[46,93900,79],{"class":56},[46,93902,93903],{"class":173},"\"never\"",[46,93905,61092],{"class":56},[46,93907,93908,93910,93912,93915,93917],{"class":48,"line":659},[46,93909,54111],{"class":56},[46,93911,53374],{"class":1361},[46,93913,93914],{"class":56},">综合案例\u003C\u002F",[46,93916,53374],{"class":1361},[46,93918,53274],{"class":56},[46,93920,93921,93923,93925],{"class":48,"line":665},[46,93922,54111],{"class":56},[46,93924,2098],{"class":1361},[46,93926,53274],{"class":56},[46,93928,93929,93931],{"class":48,"line":670},[46,93930,8416],{"class":1361},[46,93932,17573],{"class":56},[46,93934,93935,93937,93939,93941],{"class":48,"line":676},[46,93936,56660],{"class":180},[46,93938,53404],{"class":56},[46,93940,2379],{"class":180},[46,93942,3345],{"class":56},[46,93944,93945,93947,93949,93951],{"class":48,"line":682},[46,93946,56671],{"class":180},[46,93948,53404],{"class":56},[46,93950,2379],{"class":180},[46,93952,3345],{"class":56},[46,93954,93955,93957,93959,93961],{"class":48,"line":688},[46,93956,74561],{"class":180},[46,93958,53404],{"class":56},[46,93960,62470],{"class":180},[46,93962,3345],{"class":56},[46,93964,93965],{"class":48,"line":693},[46,93966,4217],{"class":56},[46,93968,93969],{"class":48,"line":699},[46,93970,616],{"emptyLinePlaceholder":615},[46,93972,93973,93976],{"class":48,"line":705},[46,93974,93975],{"class":169},"    .container",[46,93977,17573],{"class":56},[46,93979,93980,93982,93984,93987,93989],{"class":48,"line":711},[46,93981,56736],{"class":180},[46,93983,53404],{"class":56},[46,93985,93986],{"class":180},"1200",[46,93988,53459],{"class":52},[46,93990,3345],{"class":56},[46,93992,93993,93995,93997,93999,94001],{"class":48,"line":717},[46,93994,56671],{"class":180},[46,93996,53404],{"class":56},[46,93998,2379],{"class":180},[46,94000,53523],{"class":180},[46,94002,3345],{"class":56},[46,94004,94005],{"class":48,"line":723},[46,94006,4217],{"class":56},[46,94008,94009],{"class":48,"line":729},[46,94010,616],{"emptyLinePlaceholder":615},[46,94012,94013,94016,94019],{"class":48,"line":735},[46,94014,94015],{"class":169},"    .video",[46,94017,94018],{"class":1361}," video",[46,94020,17573],{"class":56},[46,94022,94023,94025,94027,94029,94031],{"class":48,"line":740},[46,94024,56736],{"class":180},[46,94026,53404],{"class":56},[46,94028,1155],{"class":180},[46,94030,2515],{"class":52},[46,94032,3345],{"class":56},[46,94034,94035,94037,94039,94041,94043,94045],{"class":48,"line":745},[46,94036,56660],{"class":180},[46,94038,53404],{"class":56},[46,94040,2886],{"class":180},[46,94042,53459],{"class":52},[46,94044,887],{"class":180},[46,94046,3345],{"class":56},[46,94048,94049],{"class":48,"line":763},[46,94050,4217],{"class":56},[46,94052,94053],{"class":48,"line":778},[46,94054,616],{"emptyLinePlaceholder":615},[46,94056,94057,94060],{"class":48,"line":789},[46,94058,94059],{"class":169},"    .elevator",[46,94061,17573],{"class":56},[46,94063,94064,94066,94068,94070],{"class":48,"line":794},[46,94065,56724],{"class":180},[46,94067,53404],{"class":56},[46,94069,88196],{"class":180},[46,94071,3345],{"class":56},[46,94073,94074,94076,94078,94081,94083],{"class":48,"line":806},[46,94075,56912],{"class":180},[46,94077,53404],{"class":56},[46,94079,94080],{"class":180},"280",[46,94082,53459],{"class":52},[46,94084,3345],{"class":56},[46,94086,94087,94089,94091,94093,94095],{"class":48,"line":829},[46,94088,88390],{"class":180},[46,94090,53404],{"class":56},[46,94092,2886],{"class":180},[46,94094,53459],{"class":52},[46,94096,3345],{"class":56},[46,94098,94099,94101,94103,94105],{"class":48,"line":840},[46,94100,88203],{"class":180},[46,94102,53404],{"class":56},[46,94104,88208],{"class":180},[46,94106,3345],{"class":56},[46,94108,94109,94111,94113,94115],{"class":48,"line":846},[46,94110,63686],{"class":180},[46,94112,53404],{"class":56},[46,94114,62807],{"class":180},[46,94116,3345],{"class":56},[46,94118,94119,94121,94123,94125,94127,94129,94131],{"class":48,"line":852},[46,94120,63942],{"class":180},[46,94122,53404],{"class":56},[46,94124,2405],{"class":180},[46,94126,53459],{"class":52},[46,94128,53488],{"class":180},[46,94130,64209],{"class":180},[46,94132,3345],{"class":56},[46,94134,94135,94137,94139,94141,94143],{"class":48,"line":857},[46,94136,56736],{"class":180},[46,94138,53404],{"class":56},[46,94140,3093],{"class":180},[46,94142,53459],{"class":52},[46,94144,3345],{"class":56},[46,94146,94147],{"class":48,"line":875},[46,94148,4217],{"class":56},[46,94150,94151],{"class":48,"line":892},[46,94152,616],{"emptyLinePlaceholder":615},[46,94154,94155,94157,94159],{"class":48,"line":898},[46,94156,94059],{"class":169},[46,94158,3450],{"class":1361},[46,94160,17573],{"class":56},[46,94162,94163,94165,94167,94169],{"class":48,"line":903},[46,94164,56974],{"class":180},[46,94166,53404],{"class":56},[46,94168,62834],{"class":180},[46,94170,3345],{"class":56},[46,94172,94173,94175,94177,94179,94181],{"class":48,"line":908},[46,94174,56660],{"class":180},[46,94176,53404],{"class":56},[46,94178,2633],{"class":180},[46,94180,53459],{"class":52},[46,94182,3345],{"class":56},[46,94184,94185,94187,94189,94191],{"class":48,"line":925},[46,94186,65935],{"class":180},[46,94188,53404],{"class":56},[46,94190,56702],{"class":180},[46,94192,3345],{"class":56},[46,94194,94195,94197,94199,94201],{"class":48,"line":1238},[46,94196,59251],{"class":180},[46,94198,53404],{"class":56},[46,94200,53559],{"class":180},[46,94202,3345],{"class":56},[46,94204,94205,94207,94209,94211],{"class":48,"line":1251},[46,94206,59381],{"class":180},[46,94208,53404],{"class":56},[46,94210,64035],{"class":180},[46,94212,3345],{"class":56},[46,94214,94215],{"class":48,"line":1256},[46,94216,4217],{"class":56},[46,94218,94219],{"class":48,"line":1261},[46,94220,616],{"emptyLinePlaceholder":615},[46,94222,94223,94225,94227,94229],{"class":48,"line":1274},[46,94224,94059],{"class":169},[46,94226,3450],{"class":1361},[46,94228,65989],{"class":169},[46,94230,17573],{"class":56},[46,94232,94233,94235,94237,94240],{"class":48,"line":10061},[46,94234,59381],{"class":180},[46,94236,53404],{"class":56},[46,94238,94239],{"class":180},"#1286ff",[46,94241,3345],{"class":56},[46,94243,94244],{"class":48,"line":11720},[46,94245,4217],{"class":56},[46,94247,94248,94250,94252],{"class":48,"line":11745},[46,94249,54384],{"class":56},[46,94251,2098],{"class":1361},[46,94253,53274],{"class":56},[46,94255,94256,94258,94260],{"class":48,"line":11768},[46,94257,53752],{"class":56},[46,94259,53301],{"class":1361},[46,94261,53274],{"class":56},[46,94263,94264],{"class":48,"line":11792},[46,94265,616],{"emptyLinePlaceholder":615},[46,94267,94268,94270,94272],{"class":48,"line":11797},[46,94269,821],{"class":56},[46,94271,53767],{"class":1361},[46,94273,53274],{"class":56},[46,94275,94276,94278,94280,94282,94284,94287],{"class":48,"line":11802},[46,94277,54111],{"class":56},[46,94279,53578],{"class":1361},[46,94281,55451],{"class":169},[46,94283,79],{"class":56},[46,94285,94286],{"class":173},"\"container\"",[46,94288,53274],{"class":56},[46,94290,94291,94293,94295,94297,94299,94302],{"class":48,"line":11807},[46,94292,53308],{"class":56},[46,94294,53578],{"class":1361},[46,94296,55451],{"class":169},[46,94298,79],{"class":56},[46,94300,94301],{"class":173},"\"header\"",[46,94303,53274],{"class":56},[46,94305,94306,94308,94310,94312,94314,94317],{"class":48,"line":11816},[46,94307,57199],{"class":56},[46,94309,2426],{"class":1361},[46,94311,63022],{"class":169},[46,94313,79],{"class":56},[46,94315,94316],{"class":173},"\"http:\u002F\u002Fpip.itcast.cn\"",[46,94318,53274],{"class":56},[46,94320,94321,94323,94325,94327,94329,94332,94334,94336,94338],{"class":48,"line":11821},[46,94322,57267],{"class":56},[46,94324,3514],{"class":1361},[46,94326,57204],{"class":169},[46,94328,79],{"class":56},[46,94330,94331],{"class":173},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[46,94333,57212],{"class":169},[46,94335,79],{"class":56},[46,94337,9665],{"class":173},[46,94339,61092],{"class":56},[46,94341,94342,94344,94346],{"class":48,"line":11827},[46,94343,57372],{"class":56},[46,94345,2426],{"class":1361},[46,94347,53274],{"class":56},[46,94349,94350,94352,94354],{"class":48,"line":11848},[46,94351,53743],{"class":56},[46,94353,53578],{"class":1361},[46,94355,53274],{"class":56},[46,94357,94358,94360,94362,94364,94366,94369],{"class":48,"line":11854},[46,94359,53308],{"class":56},[46,94361,53578],{"class":1361},[46,94363,55451],{"class":169},[46,94365,79],{"class":56},[46,94367,94368],{"class":173},"\"video\"",[46,94370,53274],{"class":56},[46,94372,94373,94375,94377,94379,94381,94384,94387,94389,94391],{"class":48,"line":11868},[46,94374,57199],{"class":56},[46,94376,30172],{"class":1361},[46,94378,57204],{"class":169},[46,94380,79],{"class":56},[46,94382,94383],{"class":173},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[46,94385,94386],{"class":169}," controls",[46,94388,57279],{"class":56},[46,94390,30172],{"class":1361},[46,94392,53274],{"class":56},[46,94394,94395,94397,94399],{"class":48,"line":11874},[46,94396,53743],{"class":56},[46,94398,53578],{"class":1361},[46,94400,53274],{"class":56},[46,94402,94403,94405,94407,94409,94411,94414],{"class":48,"line":11901},[46,94404,53308],{"class":56},[46,94406,53578],{"class":1361},[46,94408,55451],{"class":169},[46,94410,79],{"class":56},[46,94412,94413],{"class":173},"\"elevator\"",[46,94415,53274],{"class":56},[46,94417,94418,94420,94422,94424,94426,94428,94431,94433,94435,94438,94440],{"class":48,"line":11910},[46,94419,57199],{"class":56},[46,94421,2426],{"class":1361},[46,94423,63022],{"class":169},[46,94425,79],{"class":56},[46,94427,66201],{"class":173},[46,94429,94430],{"class":169}," data-ref",[46,94432,79],{"class":56},[46,94434,94368],{"class":173},[46,94436,94437],{"class":56},">视频介绍\u003C\u002F",[46,94439,2426],{"class":1361},[46,94441,53274],{"class":56},[46,94443,94444,94446,94448,94450,94452,94454,94456,94458,94461,94464,94466],{"class":48,"line":11916},[46,94445,57199],{"class":56},[46,94447,2426],{"class":1361},[46,94449,63022],{"class":169},[46,94451,79],{"class":56},[46,94453,66201],{"class":173},[46,94455,94430],{"class":169},[46,94457,79],{"class":56},[46,94459,94460],{"class":173},"\"intro\"",[46,94462,94463],{"class":56},">课程简介\u003C\u002F",[46,94465,2426],{"class":1361},[46,94467,53274],{"class":56},[46,94469,94470,94472,94474,94476,94478,94480,94482,94484,94487,94490,94492],{"class":48,"line":11924},[46,94471,57199],{"class":56},[46,94473,2426],{"class":1361},[46,94475,63022],{"class":169},[46,94477,79],{"class":56},[46,94479,66201],{"class":173},[46,94481,94430],{"class":169},[46,94483,79],{"class":56},[46,94485,94486],{"class":173},"\"outline\"",[46,94488,94489],{"class":56},">评论列表\u003C\u002F",[46,94491,2426],{"class":1361},[46,94493,53274],{"class":56},[46,94495,94496,94498,94500],{"class":48,"line":11929},[46,94497,53743],{"class":56},[46,94499,53578],{"class":1361},[46,94501,53274],{"class":56},[46,94503,94504,94506,94508],{"class":48,"line":18605},[46,94505,54384],{"class":56},[46,94507,53578],{"class":1361},[46,94509,53274],{"class":56},[46,94511,94512,94514,94516,94518,94520,94523,94525,94527],{"class":48,"line":18611},[46,94513,54111],{"class":56},[46,94515,53780],{"class":1361},[46,94517,57204],{"class":169},[46,94519,79],{"class":56},[46,94521,94522],{"class":173},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[46,94524,57279],{"class":56},[46,94526,53780],{"class":1361},[46,94528,53274],{"class":56},[46,94530,94531,94533,94535],{"class":48,"line":18634},[46,94532,54111],{"class":56},[46,94534,53780],{"class":1361},[46,94536,53274],{"class":56},[46,94538,94539],{"class":48,"line":18640},[46,94540,94541],{"class":2253},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[46,94543,94544,94546,94548,94550,94552,94554,94556,94559],{"class":48,"line":18663},[46,94545,13225],{"class":52},[46,94547,94018],{"class":180},[46,94549,647],{"class":52},[46,94551,56361],{"class":56},[46,94553,56364],{"class":169},[46,94555,1152],{"class":56},[46,94557,94558],{"class":173},"'video'",[46,94560,459],{"class":56},[46,94562,94563],{"class":48,"line":18677},[46,94564,94565],{"class":2253},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[46,94567,94568,94571,94573,94575,94577,94580,94582],{"class":48,"line":18697},[46,94569,94570],{"class":56},"    video.ontimeupdate ",[46,94572,79],{"class":52},[46,94574,90318],{"class":56},[46,94576,93136],{"class":169},[46,94578,94579],{"class":56},"(() ",[46,94581,86685],{"class":52},[46,94583,17573],{"class":56},[46,94585,94586],{"class":48,"line":18703},[46,94587,94588],{"class":2253},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[46,94590,94591],{"class":48,"line":18714},[46,94592,94593],{"class":2253},"      \u002F\u002F 控制台输出当前的时间\n",[46,94595,94596,94599],{"class":48,"line":18737},[46,94597,94598],{"class":2253},"      \u002F\u002F console.log(video.currentTime)",[46,94600,94601],{"class":2253},"  \u002F\u002F获得当前的视频时间\n",[46,94603,94604],{"class":48,"line":18759},[46,94605,94606],{"class":2253},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[46,94608,94609,94611,94613,94615,94618],{"class":48,"line":18764},[46,94610,76648],{"class":56},[46,94612,73619],{"class":169},[46,94614,1152],{"class":56},[46,94616,94617],{"class":173},"'currentTime'",[46,94619,94620],{"class":56},", video.currentTime)\n",[46,94622,94623,94625,94627],{"class":48,"line":18770},[46,94624,56500],{"class":56},[46,94626,8423],{"class":180},[46,94628,459],{"class":56},[46,94630,94631],{"class":48,"line":18784},[46,94632,94633],{"class":2253},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[46,94635,94636,94639,94642,94644,94647,94649],{"class":48,"line":18797},[46,94637,94638],{"class":56},"    video.",[46,94640,94641],{"class":169},"onloadeddata",[46,94643,647],{"class":52},[46,94645,94646],{"class":56}," () ",[46,94648,86685],{"class":52},[46,94650,17573],{"class":56},[46,94652,94653],{"class":48,"line":18802},[46,94654,61977],{"class":2253},[46,94656,94657],{"class":48,"line":18816},[46,94658,94659],{"class":2253},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[46,94661,94662,94665,94667,94670,94672,94674,94676,94678,94680],{"class":48,"line":18821},[46,94663,94664],{"class":56},"      video.currentTime ",[46,94666,79],{"class":52},[46,94668,94669],{"class":56}," localStorage.",[46,94671,73650],{"class":169},[46,94673,1152],{"class":56},[46,94675,94617],{"class":173},[46,94677,15716],{"class":56},[46,94679,73322],{"class":52},[46,94681,49301],{"class":180},[46,94683,94684],{"class":48,"line":18827},[46,94685,4217],{"class":56},[46,94687,94688,94690,94692],{"class":48,"line":18832},[46,94689,54384],{"class":56},[46,94691,53780],{"class":1361},[46,94693,53274],{"class":56},[46,94695,94696,94698,94700],{"class":48,"line":18846},[46,94697,53752],{"class":56},[46,94699,53767],{"class":1361},[46,94701,53274],{"class":56},[46,94703,94704],{"class":48,"line":18851},[46,94705,616],{"emptyLinePlaceholder":615},[46,94707,94708,94710,94712],{"class":48,"line":18856},[46,94709,53752],{"class":56},[46,94711,52603],{"class":1361},[46,94713,53274],{"class":56},[2098,94715,94716],{},"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":41,"searchDepth":60,"depth":60,"links":94718},[94719,94724,94728,94729,94730,94735,94740,94741,94742,94743,94750,94755,94756,94766,94770,94771,94775],{"id":78656,"depth":60,"text":78657,"children":94720},[94721,94722,94723],{"id":78660,"depth":200,"text":78661},{"id":78685,"depth":200,"text":78686},{"id":78697,"depth":200,"text":78698},{"id":78709,"depth":60,"text":78710,"children":94725},[94726,94727],{"id":78713,"depth":200,"text":78714},{"id":78728,"depth":200,"text":78729},{"id":78780,"depth":60,"text":78781},{"id":78824,"depth":60,"text":78825},{"id":78841,"depth":60,"text":78842,"children":94731},[94732,94733,94734],{"id":78845,"depth":200,"text":78846},{"id":78858,"depth":200,"text":78859},{"id":78963,"depth":200,"text":78964},{"id":79252,"depth":60,"text":79253,"children":94736},[94737,94738,94739],{"id":79256,"depth":200,"text":79257},{"id":79699,"depth":200,"text":79700},{"id":80110,"depth":200,"text":80111},{"id":80173,"depth":60,"text":80174},{"id":80252,"depth":60,"text":80253},{"id":80345,"depth":60,"text":80346},{"id":82189,"depth":60,"text":82190,"children":94744},[94745,94746,94747,94748,94749],{"id":82193,"depth":200,"text":82194},{"id":82205,"depth":200,"text":82206},{"id":82424,"depth":200,"text":82425},{"id":82442,"depth":200,"text":82443},{"id":82502,"depth":200,"text":82503},{"id":86769,"depth":60,"text":86770,"children":94751},[94752,94753,94754],{"id":86773,"depth":200,"text":86774},{"id":86791,"depth":200,"text":86792},{"id":86817,"depth":200,"text":86818},{"id":86826,"depth":60,"text":86827},{"id":86848,"depth":60,"text":86849,"children":94757},[94758,94759,94760,94761,94762,94763,94764,94765],{"id":86852,"depth":200,"text":86853},{"id":87113,"depth":200,"text":87114},{"id":87299,"depth":200,"text":87300},{"id":87666,"depth":200,"text":87667},{"id":87782,"depth":200,"text":87783},{"id":87818,"depth":200,"text":87819},{"id":87865,"depth":200,"text":87866},{"id":87899,"depth":200,"text":87900},{"id":89262,"depth":60,"text":89263,"children":94767},[94768,94769],{"id":89266,"depth":200,"text":89267},{"id":89303,"depth":200,"text":89304},{"id":90658,"depth":60,"text":90659},{"id":91029,"depth":60,"text":91030,"children":94772},[94773,94774],{"id":91033,"depth":200,"text":91034},{"id":91067,"depth":200,"text":91068},{"id":91796,"depth":60,"text":91797,"children":94776},[94777,94778,94779,94780],{"id":91800,"depth":200,"text":91801},{"id":92758,"depth":200,"text":92759},{"id":93700,"depth":200,"text":93701},{"id":93774,"depth":200,"text":93775},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":78645,"description":25378},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":94787,"title":94788,"body":94789,"description":94800,"extension":2125,"meta":94801,"navigation":615,"path":94803,"seo":94804,"stem":94805,"__hash__":94806},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":94790,"toc":94798},[94791],[19,94792,94793,94794],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[2426,94795,94796],{"href":94796,"rel":94797},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[25862],{"title":41,"searchDepth":60,"depth":60,"links":94799},[],"三件套第三套学习",{"category":94802},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":94788,"description":94800},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":94808,"title":94809,"body":94810,"description":25378,"extension":2125,"meta":94915,"navigation":615,"path":94916,"seo":94917,"stem":94918,"__hash__":94919},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":94811,"toc":94910},[94812,94819,94822,94825,94828,94832,94841,94844,94847,94851,94860,94863,94867,94870,94890,94893,94907],[19,94813,94814],{},[2426,94815,94818],{"href":94816,"rel":94817},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[25862],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,94820,94809],{"id":94821},"_1安装",[19,94823,94824],{},"numpy是科学计算基础库,底层是C语言",[19,94826,94827],{},"三种方式：",[14,94829,94831],{"id":94830},"_11-通过pip安装","1.1 通过pip安装",[36,94833,94835],{"className":38,"code":94834,"language":40,"meta":41,"style":41},"pip install numpy\n",[43,94836,94837],{"__ignoreMap":41},[46,94838,94839],{"class":48,"line":49},[46,94840,94834],{"class":56},[19,94842,94843],{},"首选方式，自动处理依赖项",[19,94845,94846],{},"在提示系统命令符中使用cmd",[14,94848,94850],{"id":94849},"_12-通过anaconda安装","1.2 通过Anaconda安装",[36,94852,94854],{"className":38,"code":94853,"language":40,"meta":41,"style":41},"conda install numpy\n",[43,94855,94856],{"__ignoreMap":41},[46,94857,94858],{"class":48,"line":49},[46,94859,94853],{"class":56},[19,94861,94862],{},"自动解决环境依赖",[14,94864,94866],{"id":94865},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[19,94868,94869],{},"对于Debian\u002FUbuntu",[36,94871,94873],{"className":38,"code":94872,"language":40,"meta":41,"style":41},"sudo apt-get install python3-numpy\n",[43,94874,94875],{"__ignoreMap":41},[46,94876,94877,94880,94882,94885,94887],{"class":48,"line":49},[46,94878,94879],{"class":56},"sudo apt",[46,94881,534],{"class":52},[46,94883,94884],{"class":56},"get install python3",[46,94886,534],{"class":52},[46,94888,94889],{"class":56},"numpy\n",[19,94891,94892],{},"对于Fedora:",[36,94894,94896],{"className":38,"code":94895,"language":40,"meta":41,"style":41},"sudo dnf install python3-numpy\n",[43,94897,94898],{"__ignoreMap":41},[46,94899,94900,94903,94905],{"class":48,"line":49},[46,94901,94902],{"class":56},"sudo dnf install python3",[46,94904,534],{"class":52},[46,94906,94889],{"class":56},[2098,94908,94909],{},"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":41,"searchDepth":60,"depth":60,"links":94911},[94912,94913,94914],{"id":94830,"depth":60,"text":94831},{"id":94849,"depth":60,"text":94850},{"id":94865,"depth":60,"text":94866},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":94809,"description":25378},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":94921,"title":94922,"body":94923,"description":25378,"extension":2125,"meta":95036,"navigation":615,"path":95037,"seo":95038,"stem":95039,"__hash__":95040},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":94924,"toc":95034},[94925,94928,94931,94934,94937,94940,94943,94946,94949,94952,95028,95031],[10,94926,94922],{"id":94927},"_10算数函数",[19,94929,94930],{},"加减乘除运算跟python基础语法没区别",[19,94932,94933],{},"除了python那种方法外还可以使用函数",[19,94935,94936],{},"加：np.add(a,b)",[19,94938,94939],{},"减：np.subtract(a,b)",[19,94941,94942],{},"乘：np.multiply(a,b)",[19,94944,94945],{},"除：np.divide(a,b) == a\u002Fb",[19,94947,94948],{},"取余：np.mod(a,b) == a%b",[19,94950,94951],{},"必须会的用法：",[36,94953,94955],{"className":38,"code":94954,"language":40,"meta":41,"style":41},"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",[43,94956,94957,94979,95000,95010,95023],{"__ignoreMap":41},[46,94958,94959,94961,94963,94966,94968,94971,94973,94975,94977],{"class":48,"line":49},[46,94960,2426],{"class":56},[46,94962,79],{"class":52},[46,94964,94965],{"class":56},"np.arange(",[46,94967,2607],{"class":180},[46,94969,94970],{"class":56},").reshape(",[46,94972,2266],{"class":180},[46,94974,2565],{"class":56},[46,94976,2266],{"class":180},[46,94978,459],{"class":56},[46,94980,94981,94983,94985,94988,94990,94992,94994,94996,94998],{"class":48,"line":60},[46,94982,2451],{"class":56},[46,94984,79],{"class":52},[46,94986,94987],{"class":56},"np.array([",[46,94989,2633],{"class":180},[46,94991,2565],{"class":56},[46,94993,2633],{"class":180},[46,94995,2565],{"class":56},[46,94997,2633],{"class":180},[46,94999,6673],{"class":56},[46,95001,95002,95005,95007],{"class":48,"line":200},[46,95003,95004],{"class":56},"result",[46,95006,79],{"class":52},[46,95008,95009],{"class":56},"np.empty_like(a)\n",[46,95011,95012,95015,95018,95020],{"class":48,"line":211},[46,95013,95014],{"class":56},"np.add(a,b,",[46,95016,95017],{"class":439},"out",[46,95019,79],{"class":52},[46,95021,95022],{"class":56},"result)\n",[46,95024,95025],{"class":48,"line":222},[46,95026,95027],{"class":56},"result\n",[19,95029,95030],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[2098,95032,95033],{},"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":41,"searchDepth":60,"depth":60,"links":95035},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":94922,"description":25378},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":95042,"title":95043,"body":95044,"description":25378,"extension":2125,"meta":95806,"navigation":615,"path":95807,"seo":95808,"stem":95809,"__hash__":95810},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":95045,"toc":95793},[95046,95049,95052,95055,95059,95098,95102,95146,95206,95210,95213,95252,95255,95300,95304,95340,95344,95413,95417,95481,95485,95488,95491,95494,95497,95533,95537,95577,95581,95653,95656,95660,95723,95727,95790],[10,95047,95043],{"id":95048},"_11统计函数",[19,95050,95051],{},"sum max min mean",[19,95053,95054],{},"这些有axis参数，可以指定方向",[14,95056,95058],{"id":95057},"_111-sum求和函数","11.1 sum()求和函数",[36,95060,95062],{"className":38,"code":95061,"language":40,"meta":41,"style":41},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[43,95063,95064,95069,95090],{"__ignoreMap":41},[46,95065,95066],{"class":48,"line":49},[46,95067,95068],{"class":2253},"#创建一维数组\n",[46,95070,95071,95073,95075,95078,95080,95082,95084,95086,95088],{"class":48,"line":60},[46,95072,2426],{"class":56},[46,95074,79],{"class":52},[46,95076,95077],{"class":56},"np.random.randint(",[46,95079,2405],{"class":180},[46,95081,2565],{"class":56},[46,95083,1155],{"class":180},[46,95085,2565],{"class":56},[46,95087,2886],{"class":180},[46,95089,459],{"class":56},[46,95091,95092,95095],{"class":48,"line":200},[46,95093,95094],{"class":56},"np.sum(a)",[46,95096,95097],{"class":2253},"#求和\n",[14,95099,95101],{"id":95100},"_112-max求最大值函数","11.2 max()求最大值函数",[36,95103,95105],{"className":38,"code":95104,"language":40,"meta":41,"style":41},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[43,95106,95107,95111,95131,95136,95141],{"__ignoreMap":41},[46,95108,95109],{"class":48,"line":49},[46,95110,95068],{"class":2253},[46,95112,95113,95115,95117,95119,95121,95123,95125,95127,95129],{"class":48,"line":60},[46,95114,2426],{"class":56},[46,95116,79],{"class":52},[46,95118,95077],{"class":56},[46,95120,2405],{"class":180},[46,95122,2565],{"class":56},[46,95124,1155],{"class":180},[46,95126,2565],{"class":56},[46,95128,2886],{"class":180},[46,95130,459],{"class":56},[46,95132,95133],{"class":48,"line":200},[46,95134,95135],{"class":56},"np.max(a)\n",[46,95137,95138],{"class":48,"line":211},[46,95139,95140],{"class":2253},"#最大索引(求最大元素的索引)arg\n",[46,95142,95143],{"class":48,"line":222},[46,95144,95145],{"class":56},"np.argmax(a)\n",[36,95147,95149],{"className":38,"code":95148,"language":40,"meta":41,"style":41},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[43,95150,95151,95172,95192,95196],{"__ignoreMap":41},[46,95152,95153,95155,95157,95160,95162,95164,95166,95168,95170],{"class":48,"line":49},[46,95154,12923],{"class":56},[46,95156,79],{"class":52},[46,95158,95159],{"class":56}," np.array([",[46,95161,2405],{"class":180},[46,95163,448],{"class":56},[46,95165,2506],{"class":180},[46,95167,448],{"class":56},[46,95169,2266],{"class":180},[46,95171,6673],{"class":56},[46,95173,95174,95176,95178,95180,95182,95184,95186,95188,95190],{"class":48,"line":60},[46,95175,12949],{"class":56},[46,95177,79],{"class":52},[46,95179,95159],{"class":56},[46,95181,2266],{"class":180},[46,95183,448],{"class":56},[46,95185,2272],{"class":180},[46,95187,448],{"class":56},[46,95189,2481],{"class":180},[46,95191,6673],{"class":56},[46,95193,95194],{"class":48,"line":200},[46,95195,616],{"emptyLinePlaceholder":615},[46,95197,95198,95200,95203],{"class":48,"line":211},[46,95199,32398],{"class":180},[46,95201,95202],{"class":56},"(np.maximum(a, b))   ",[46,95204,95205],{"class":2253},"# [3 5 4]，每个位置上取较大值\n",[14,95207,95209],{"id":95208},"_113-mean求平均值函数","11.3 mean()求平均值函数",[19,95211,95212],{},"①一维数组：",[36,95214,95216],{"className":38,"code":95215,"language":40,"meta":41,"style":41},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[43,95217,95218,95222,95242,95247],{"__ignoreMap":41},[46,95219,95220],{"class":48,"line":49},[46,95221,95068],{"class":2253},[46,95223,95224,95226,95228,95230,95232,95234,95236,95238,95240],{"class":48,"line":60},[46,95225,2426],{"class":56},[46,95227,79],{"class":52},[46,95229,95077],{"class":56},[46,95231,2405],{"class":180},[46,95233,2565],{"class":56},[46,95235,1155],{"class":180},[46,95237,2565],{"class":56},[46,95239,2886],{"class":180},[46,95241,459],{"class":56},[46,95243,95244],{"class":48,"line":200},[46,95245,95246],{"class":2253},"#求平均值\n",[46,95248,95249],{"class":48,"line":211},[46,95250,95251],{"class":56},"np.mean(a)\n",[19,95253,95254],{},"②二维数组",[36,95256,95258],{"className":38,"code":95257,"language":40,"meta":41,"style":41},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[43,95259,95260,95265,95290,95295],{"__ignoreMap":41},[46,95261,95262],{"class":48,"line":49},[46,95263,95264],{"class":2253},"#二维数组\n",[46,95266,95267,95270,95272,95274,95276,95278,95280,95282,95284,95286,95288],{"class":48,"line":60},[46,95268,95269],{"class":56},"aa",[46,95271,79],{"class":52},[46,95273,94965],{"class":56},[46,95275,2405],{"class":180},[46,95277,2565],{"class":56},[46,95279,2710],{"class":180},[46,95281,94970],{"class":56},[46,95283,2266],{"class":180},[46,95285,2565],{"class":56},[46,95287,2481],{"class":180},[46,95289,459],{"class":56},[46,95291,95292],{"class":48,"line":200},[46,95293,95294],{"class":2253},"#对数组中的所有数求平均\n",[46,95296,95297],{"class":48,"line":211},[46,95298,95299],{"class":56},"np.mean(aa)\n",[14,95301,95303],{"id":95302},"_114-median求中位数函数","11.4 median()求中位数函数",[36,95305,95307],{"className":38,"code":95306,"language":40,"meta":41,"style":41},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[43,95308,95309,95314,95330,95335],{"__ignoreMap":41},[46,95310,95311],{"class":48,"line":49},[46,95312,95313],{"class":2253},"#求中位数\n",[46,95315,95316,95318,95320,95322,95324,95326,95328],{"class":48,"line":60},[46,95317,2451],{"class":56},[46,95319,79],{"class":52},[46,95321,94965],{"class":56},[46,95323,2405],{"class":180},[46,95325,2565],{"class":56},[46,95327,2633],{"class":180},[46,95329,459],{"class":56},[46,95331,95332],{"class":48,"line":200},[46,95333,95334],{"class":56},"np.median(b)\n",[46,95336,95337],{"class":48,"line":211},[46,95338,95339],{"class":2253},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,95341,95343],{"id":95342},"_115-power求幂运算函数","11.5 power()求幂运算函数",[36,95345,95347],{"className":38,"code":95346,"language":40,"meta":41,"style":41},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[43,95348,95349,95365,95370,95375,95384,95389,95398],{"__ignoreMap":41},[46,95350,95351,95353,95355,95357,95359,95361,95363],{"class":48,"line":49},[46,95352,2451],{"class":56},[46,95354,79],{"class":52},[46,95356,94965],{"class":56},[46,95358,2405],{"class":180},[46,95360,2565],{"class":56},[46,95362,2633],{"class":180},[46,95364,459],{"class":56},[46,95366,95367],{"class":48,"line":60},[46,95368,95369],{"class":2253},"#幂运算\n",[46,95371,95372],{"class":48,"line":200},[46,95373,95374],{"class":2253},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[46,95376,95377,95380,95382],{"class":48,"line":211},[46,95378,95379],{"class":56},"np.power(b,",[46,95381,2272],{"class":180},[46,95383,459],{"class":56},[46,95385,95386],{"class":48,"line":222},[46,95387,95388],{"class":2253},"#或者以下代码，将数据存储起来\n",[46,95390,95391,95393,95395],{"class":48,"line":636},[46,95392,3031],{"class":56},[46,95394,79],{"class":52},[46,95396,95397],{"class":56},"np.empty_like(b)\n",[46,95399,95400,95402,95404,95406,95408,95410],{"class":48,"line":641},[46,95401,95379],{"class":56},[46,95403,2272],{"class":180},[46,95405,2565],{"class":56},[46,95407,95017],{"class":439},[46,95409,79],{"class":52},[46,95411,95412],{"class":56},"y)\n",[14,95414,95416],{"id":95415},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[36,95418,95420],{"className":38,"code":95419,"language":40,"meta":41,"style":41},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[43,95421,95422,95438,95443,95448,95452,95470],{"__ignoreMap":41},[46,95423,95424,95426,95428,95430,95432,95434,95436],{"class":48,"line":49},[46,95425,2451],{"class":56},[46,95427,79],{"class":52},[46,95429,94965],{"class":56},[46,95431,2405],{"class":180},[46,95433,2565],{"class":56},[46,95435,2633],{"class":180},[46,95437,459],{"class":56},[46,95439,95440],{"class":48,"line":60},[46,95441,95442],{"class":2253},"#开方\n",[46,95444,95445],{"class":48,"line":200},[46,95446,95447],{"class":56},"np.sqrt(b)\n",[46,95449,95450],{"class":48,"line":211},[46,95451,95388],{"class":2253},[46,95453,95454,95456,95458,95461,95464,95466,95468],{"class":48,"line":222},[46,95455,3031],{"class":56},[46,95457,79],{"class":52},[46,95459,95460],{"class":56},"np.empty_like(b,",[46,95462,95463],{"class":439},"dtype",[46,95465,79],{"class":52},[46,95467,2236],{"class":180},[46,95469,459],{"class":56},[46,95471,95472,95475,95477,95479],{"class":48,"line":636},[46,95473,95474],{"class":56},"np.sqrt(b,",[46,95476,95017],{"class":439},[46,95478,79],{"class":52},[46,95480,95412],{"class":56},[14,95482,95484],{"id":95483},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[19,95486,95487],{},"对数组中的元素累计求和，可指定轴",[19,95489,95490],{},"#累计求和的意思是：",[19,95492,95493],{},"a = np.array([1, 2, 3, 4])",[19,95495,95496],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[36,95498,95500],{"className":38,"code":95499,"language":40,"meta":41,"style":41},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[43,95501,95502,95518,95523,95528],{"__ignoreMap":41},[46,95503,95504,95506,95508,95510,95512,95514,95516],{"class":48,"line":49},[46,95505,2451],{"class":56},[46,95507,79],{"class":52},[46,95509,94965],{"class":56},[46,95511,2405],{"class":180},[46,95513,2565],{"class":56},[46,95515,2633],{"class":180},[46,95517,459],{"class":56},[46,95519,95520],{"class":48,"line":60},[46,95521,95522],{"class":56},"np.cumsum(b)\n",[46,95524,95525],{"class":48,"line":200},[46,95526,95527],{"class":2253},"#结果：\n",[46,95529,95530],{"class":48,"line":211},[46,95531,95532],{"class":2253},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,95534,95536],{"id":95535},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[36,95538,95540],{"className":38,"code":95539,"language":40,"meta":41,"style":41},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[43,95541,95542,95558,95563,95568,95572],{"__ignoreMap":41},[46,95543,95544,95546,95548,95550,95552,95554,95556],{"class":48,"line":49},[46,95545,2451],{"class":56},[46,95547,79],{"class":52},[46,95549,94965],{"class":56},[46,95551,2405],{"class":180},[46,95553,2565],{"class":56},[46,95555,2633],{"class":180},[46,95557,459],{"class":56},[46,95559,95560],{"class":48,"line":60},[46,95561,95562],{"class":2253},"#对数组中的元素累计求积，可指定轴\n",[46,95564,95565],{"class":48,"line":200},[46,95566,95567],{"class":56},"np.cumprod(b)\n",[46,95569,95570],{"class":48,"line":211},[46,95571,95527],{"class":2253},[46,95573,95574],{"class":48,"line":222},[46,95575,95576],{"class":2253},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,95578,95580],{"id":95579},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[36,95582,95584],{"className":38,"code":95583,"language":40,"meta":41,"style":41},"#删除数组中的重复数据，并对数据进行排序\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",[43,95585,95586,95591,95639,95644,95648],{"__ignoreMap":41},[46,95587,95588],{"class":48,"line":49},[46,95589,95590],{"class":2253},"#删除数组中的重复数据，并对数据进行排序\n",[46,95592,95593,95595,95597,95599,95601,95603,95605,95607,95609,95611,95613,95615,95617,95619,95621,95623,95625,95627,95629,95631,95633,95635,95637],{"class":48,"line":60},[46,95594,2426],{"class":56},[46,95596,79],{"class":52},[46,95598,94987],{"class":56},[46,95600,2405],{"class":180},[46,95602,2565],{"class":56},[46,95604,2272],{"class":180},[46,95606,2565],{"class":56},[46,95608,2266],{"class":180},[46,95610,2565],{"class":56},[46,95612,2685],{"class":180},[46,95614,2565],{"class":56},[46,95616,2266],{"class":180},[46,95618,2565],{"class":56},[46,95620,2633],{"class":180},[46,95622,2565],{"class":56},[46,95624,2385],{"class":180},[46,95626,2565],{"class":56},[46,95628,2379],{"class":180},[46,95630,2565],{"class":56},[46,95632,2961],{"class":180},[46,95634,2565],{"class":56},[46,95636,2481],{"class":180},[46,95638,6673],{"class":56},[46,95640,95641],{"class":48,"line":200},[46,95642,95643],{"class":56},"np.unique(a)\n",[46,95645,95646],{"class":48,"line":211},[46,95647,95527],{"class":2253},[46,95649,95650],{"class":48,"line":222},[46,95651,95652],{"class":2253},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[19,95654,95655],{},"升序形式排序",[14,95657,95659],{"id":95658},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[36,95661,95663],{"className":38,"code":95662,"language":40,"meta":41,"style":41},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[43,95664,95665,95713,95718],{"__ignoreMap":41},[46,95666,95667,95669,95671,95673,95675,95677,95679,95681,95683,95685,95687,95689,95691,95693,95695,95697,95699,95701,95703,95705,95707,95709,95711],{"class":48,"line":49},[46,95668,2426],{"class":56},[46,95670,79],{"class":52},[46,95672,94987],{"class":56},[46,95674,2405],{"class":180},[46,95676,2565],{"class":56},[46,95678,2272],{"class":180},[46,95680,2565],{"class":56},[46,95682,2266],{"class":180},[46,95684,2565],{"class":56},[46,95686,2685],{"class":180},[46,95688,2565],{"class":56},[46,95690,2266],{"class":180},[46,95692,2565],{"class":56},[46,95694,2633],{"class":180},[46,95696,2565],{"class":56},[46,95698,2385],{"class":180},[46,95700,2565],{"class":56},[46,95702,2379],{"class":180},[46,95704,2565],{"class":56},[46,95706,2961],{"class":180},[46,95708,2565],{"class":56},[46,95710,2481],{"class":180},[46,95712,6673],{"class":56},[46,95714,95715],{"class":48,"line":60},[46,95716,95717],{"class":2253},"#返回数组中非零元素的索引\n",[46,95719,95720],{"class":48,"line":200},[46,95721,95722],{"class":56},"np.nonzero(a)\n",[14,95724,95726],{"id":95725},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[36,95728,95730],{"className":38,"code":95729,"language":40,"meta":41,"style":41},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[43,95731,95732,95780,95785],{"__ignoreMap":41},[46,95733,95734,95736,95738,95740,95742,95744,95746,95748,95750,95752,95754,95756,95758,95760,95762,95764,95766,95768,95770,95772,95774,95776,95778],{"class":48,"line":49},[46,95735,2426],{"class":56},[46,95737,79],{"class":52},[46,95739,94987],{"class":56},[46,95741,2405],{"class":180},[46,95743,2565],{"class":56},[46,95745,2272],{"class":180},[46,95747,2565],{"class":56},[46,95749,2266],{"class":180},[46,95751,2565],{"class":56},[46,95753,2685],{"class":180},[46,95755,2565],{"class":56},[46,95757,2266],{"class":180},[46,95759,2565],{"class":56},[46,95761,2633],{"class":180},[46,95763,2565],{"class":56},[46,95765,2385],{"class":180},[46,95767,2565],{"class":56},[46,95769,2379],{"class":180},[46,95771,2565],{"class":56},[46,95773,2961],{"class":180},[46,95775,2565],{"class":56},[46,95777,2481],{"class":180},[46,95779,6673],{"class":56},[46,95781,95782],{"class":48,"line":60},[46,95783,95784],{"class":2253},"#计算一组数中最大值与最小值的差，可指定轴\n",[46,95786,95787],{"class":48,"line":200},[46,95788,95789],{"class":56},"np.ptp(a)\n",[2098,95791,95792],{},"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":41,"searchDepth":60,"depth":60,"links":95794},[95795,95796,95797,95798,95799,95800,95801,95802,95803,95804,95805],{"id":95057,"depth":60,"text":95058},{"id":95100,"depth":60,"text":95101},{"id":95208,"depth":60,"text":95209},{"id":95302,"depth":60,"text":95303},{"id":95342,"depth":60,"text":95343},{"id":95415,"depth":60,"text":95416},{"id":95483,"depth":60,"text":95484},{"id":95535,"depth":60,"text":95536},{"id":95579,"depth":60,"text":95580},{"id":95658,"depth":60,"text":95659},{"id":95725,"depth":60,"text":95726},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":95043,"description":25378},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":95812,"title":95813,"body":95814,"description":25378,"extension":2125,"meta":96469,"navigation":615,"path":96470,"seo":96471,"stem":96472,"__hash__":96473},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":95815,"toc":96457},[95816,95819,95823,95826,96042,96046,96049,96258,96262,96328,96333,96337,96340,96343,96381,96385,96388,96393,96397,96400,96403,96408,96412,96415,96419,96422,96425,96430,96434,96437,96440,96445,96449,96454],[10,95817,95813],{"id":95818},"_12其他常用函数",[14,95820,95822],{"id":95821},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[19,95824,95825],{},"将数组的数据按照行列复制扩展",[36,95827,95829],{"className":38,"code":95828,"language":40,"meta":41,"style":41},"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",[43,95830,95831,95847,95856,95860,95865,95870,95883,95887,95892,95897,95902,95906,95911,95935,95947,95951,95955,95960,95965,95970,95975,95979,95992,95996,96000,96005,96010,96015,96020,96025,96029,96033,96038],{"__ignoreMap":41},[46,95832,95833,95835,95837,95839,95841,95843,95845],{"class":48,"line":49},[46,95834,2426],{"class":56},[46,95836,79],{"class":52},[46,95838,94965],{"class":56},[46,95840,2405],{"class":180},[46,95842,2565],{"class":56},[46,95844,2506],{"class":180},[46,95846,459],{"class":56},[46,95848,95849,95852,95854],{"class":48,"line":60},[46,95850,95851],{"class":56},"np.tile(a,",[46,95853,2272],{"class":180},[46,95855,459],{"class":56},[46,95857,95858],{"class":48,"line":200},[46,95859,95527],{"class":2253},[46,95861,95862],{"class":48,"line":211},[46,95863,95864],{"class":2253},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[46,95866,95867],{"class":48,"line":222},[46,95868,95869],{"class":2253},"#行复制两次，列复制三次\n",[46,95871,95872,95875,95877,95879,95881],{"class":48,"line":636},[46,95873,95874],{"class":56},"np.tile(a,(",[46,95876,2272],{"class":180},[46,95878,2565],{"class":56},[46,95880,2266],{"class":180},[46,95882,32479],{"class":56},[46,95884,95885],{"class":48,"line":641},[46,95886,95527],{"class":2253},[46,95888,95889],{"class":48,"line":653},[46,95890,95891],{"class":173},"'''\n",[46,95893,95894],{"class":48,"line":659},[46,95895,95896],{"class":173},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[46,95898,95899],{"class":48,"line":665},[46,95900,95901],{"class":173},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[46,95903,95904],{"class":48,"line":670},[46,95905,95891],{"class":173},[46,95907,95908],{"class":48,"line":676},[46,95909,95910],{"class":2253},"#创建二维数组\n",[46,95912,95913,95915,95917,95919,95921,95923,95925,95927,95929,95931,95933],{"class":48,"line":682},[46,95914,95269],{"class":56},[46,95916,79],{"class":52},[46,95918,94965],{"class":56},[46,95920,2405],{"class":180},[46,95922,2565],{"class":56},[46,95924,2710],{"class":180},[46,95926,94970],{"class":56},[46,95928,2481],{"class":180},[46,95930,2565],{"class":56},[46,95932,2266],{"class":180},[46,95934,459],{"class":56},[46,95936,95937,95940,95942,95944],{"class":48,"line":688},[46,95938,95939],{"class":56},"np.tile(aa,",[46,95941,2272],{"class":180},[46,95943,2616],{"class":56},[46,95945,95946],{"class":2253},"#一个数的时候就是行\n",[46,95948,95949],{"class":48,"line":693},[46,95950,95527],{"class":2253},[46,95952,95953],{"class":48,"line":699},[46,95954,95891],{"class":173},[46,95956,95957],{"class":48,"line":705},[46,95958,95959],{"class":173},"array([[ 1,  2,  3,  1,  2,  3],\n",[46,95961,95962],{"class":48,"line":711},[46,95963,95964],{"class":173},"       [ 4,  5,  6,  4,  5,  6],\n",[46,95966,95967],{"class":48,"line":717},[46,95968,95969],{"class":173},"       [ 7,  8,  9,  7,  8,  9],\n",[46,95971,95972],{"class":48,"line":723},[46,95973,95974],{"class":173},"       [10, 11, 12, 10, 11, 12]])\n",[46,95976,95977],{"class":48,"line":729},[46,95978,95891],{"class":173},[46,95980,95981,95984,95986,95988,95990],{"class":48,"line":735},[46,95982,95983],{"class":56},"np.tile(aa,(",[46,95985,2272],{"class":180},[46,95987,2565],{"class":56},[46,95989,2266],{"class":180},[46,95991,32479],{"class":56},[46,95993,95994],{"class":48,"line":740},[46,95995,95527],{"class":2253},[46,95997,95998],{"class":48,"line":745},[46,95999,95891],{"class":173},[46,96001,96002],{"class":48,"line":763},[46,96003,96004],{"class":173},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[46,96006,96007],{"class":48,"line":778},[46,96008,96009],{"class":173},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[46,96011,96012],{"class":48,"line":789},[46,96013,96014],{"class":173},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[46,96016,96017],{"class":48,"line":794},[46,96018,96019],{"class":173},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[46,96021,96022],{"class":48,"line":806},[46,96023,96024],{"class":173},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[46,96026,96027],{"class":48,"line":829},[46,96028,96009],{"class":173},[46,96030,96031],{"class":48,"line":840},[46,96032,96014],{"class":173},[46,96034,96035],{"class":48,"line":846},[46,96036,96037],{"class":173},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[46,96039,96040],{"class":48,"line":852},[46,96041,95891],{"class":173},[14,96043,96045],{"id":96044},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[19,96047,96048],{},"repeat()将数组中的每个元素重复若干次",[36,96050,96052],{"className":38,"code":96051,"language":40,"meta":41,"style":41},"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",[43,96053,96054,96070,96079,96083,96088,96112,96117,96126,96130,96135,96139,96144,96160,96164,96168,96173,96178,96183,96187,96192,96196,96201,96206,96210,96226,96230,96234,96239,96244,96249,96254],{"__ignoreMap":41},[46,96055,96056,96058,96060,96062,96064,96066,96068],{"class":48,"line":49},[46,96057,2426],{"class":56},[46,96059,79],{"class":52},[46,96061,94965],{"class":56},[46,96063,2405],{"class":180},[46,96065,2565],{"class":56},[46,96067,2506],{"class":180},[46,96069,459],{"class":56},[46,96071,96072,96075,96077],{"class":48,"line":60},[46,96073,96074],{"class":56},"np.repeat(a,",[46,96076,2266],{"class":180},[46,96078,459],{"class":56},[46,96080,96081],{"class":48,"line":200},[46,96082,95527],{"class":2253},[46,96084,96085],{"class":48,"line":211},[46,96086,96087],{"class":2253},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[46,96089,96090,96092,96094,96096,96098,96100,96102,96104,96106,96108,96110],{"class":48,"line":222},[46,96091,95269],{"class":56},[46,96093,79],{"class":52},[46,96095,94965],{"class":56},[46,96097,2405],{"class":180},[46,96099,2565],{"class":56},[46,96101,2710],{"class":180},[46,96103,94970],{"class":56},[46,96105,2481],{"class":180},[46,96107,2565],{"class":56},[46,96109,2266],{"class":180},[46,96111,459],{"class":56},[46,96113,96114],{"class":48,"line":636},[46,96115,96116],{"class":2253},"#这个重复之后二维变成一维\n",[46,96118,96119,96122,96124],{"class":48,"line":641},[46,96120,96121],{"class":56},"np.repeat(aa,",[46,96123,2272],{"class":180},[46,96125,459],{"class":56},[46,96127,96128],{"class":48,"line":653},[46,96129,95891],{"class":173},[46,96131,96132],{"class":48,"line":659},[46,96133,96134],{"class":173},"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",[46,96136,96137],{"class":48,"line":665},[46,96138,95891],{"class":173},[46,96140,96141],{"class":48,"line":670},[46,96142,96143],{"class":2253},"#指定axis\n",[46,96145,96146,96148,96150,96152,96154,96156,96158],{"class":48,"line":676},[46,96147,96121],{"class":56},[46,96149,2272],{"class":180},[46,96151,2565],{"class":56},[46,96153,49482],{"class":439},[46,96155,79],{"class":52},[46,96157,2379],{"class":180},[46,96159,459],{"class":56},[46,96161,96162],{"class":48,"line":682},[46,96163,95527],{"class":2253},[46,96165,96166],{"class":48,"line":688},[46,96167,95891],{"class":173},[46,96169,96170],{"class":48,"line":693},[46,96171,96172],{"class":173},"array([[ 1,  2,  3],\n",[46,96174,96175],{"class":48,"line":699},[46,96176,96177],{"class":173},"       [ 1,  2,  3],\n",[46,96179,96180],{"class":48,"line":705},[46,96181,96182],{"class":173},"       [ 4,  5,  6],\n",[46,96184,96185],{"class":48,"line":711},[46,96186,96182],{"class":173},[46,96188,96189],{"class":48,"line":717},[46,96190,96191],{"class":173},"       [ 7,  8,  9],\n",[46,96193,96194],{"class":48,"line":723},[46,96195,96191],{"class":173},[46,96197,96198],{"class":48,"line":729},[46,96199,96200],{"class":173},"       [10, 11, 12],\n",[46,96202,96203],{"class":48,"line":735},[46,96204,96205],{"class":173},"       [10, 11, 12]])\n",[46,96207,96208],{"class":48,"line":740},[46,96209,95891],{"class":173},[46,96211,96212,96214,96216,96218,96220,96222,96224],{"class":48,"line":745},[46,96213,96121],{"class":56},[46,96215,2272],{"class":180},[46,96217,2565],{"class":56},[46,96219,49482],{"class":439},[46,96221,79],{"class":52},[46,96223,2405],{"class":180},[46,96225,459],{"class":56},[46,96227,96228],{"class":48,"line":763},[46,96229,95527],{"class":2253},[46,96231,96232],{"class":48,"line":778},[46,96233,95891],{"class":173},[46,96235,96236],{"class":48,"line":789},[46,96237,96238],{"class":173},"array([[ 1,  1,  2,  2,  3,  3],\n",[46,96240,96241],{"class":48,"line":794},[46,96242,96243],{"class":173},"       [ 4,  4,  5,  5,  6,  6],\n",[46,96245,96246],{"class":48,"line":806},[46,96247,96248],{"class":173},"       [ 7,  7,  8,  8,  9,  9],\n",[46,96250,96251],{"class":48,"line":829},[46,96252,96253],{"class":173},"       [10, 10, 11, 11, 12, 12]])\n",[46,96255,96256],{"class":48,"line":840},[46,96257,95891],{"class":173},[14,96259,96261],{"id":96260},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[36,96263,96265],{"className":38,"code":96264,"language":40,"meta":41,"style":41},"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",[43,96266,96267,96283,96288,96300,96304,96309,96319,96323],{"__ignoreMap":41},[46,96268,96269,96271,96273,96275,96277,96279,96281],{"class":48,"line":49},[46,96270,2426],{"class":56},[46,96272,79],{"class":52},[46,96274,94965],{"class":56},[46,96276,2405],{"class":180},[46,96278,2565],{"class":56},[46,96280,2506],{"class":180},[46,96282,459],{"class":56},[46,96284,96285],{"class":48,"line":60},[46,96286,96287],{"class":2253},"#array([，2，3，4])\n",[46,96289,96290,96293,96295,96297],{"class":48,"line":200},[46,96291,96292],{"class":56},"np.roll(a,",[46,96294,2272],{"class":180},[46,96296,2616],{"class":56},[46,96298,96299],{"class":2253},"#传正数向后调多少位，传负数向前调多少位\n",[46,96301,96302],{"class":48,"line":211},[46,96303,95527],{"class":2253},[46,96305,96306],{"class":48,"line":222},[46,96307,96308],{"class":2253},"#array([3, 4, 1, 2])\n",[46,96310,96311,96313,96315,96317],{"class":48,"line":636},[46,96312,96292],{"class":56},[46,96314,534],{"class":52},[46,96316,2405],{"class":180},[46,96318,459],{"class":56},[46,96320,96321],{"class":48,"line":641},[46,96322,95527],{"class":2253},[46,96324,96325],{"class":48,"line":653},[46,96326,96327],{"class":2253},"#array([2, 3, 4, 1])\n",[19,96329,96330],{},[3514,96331],{"alt":41,"src":96332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,96334,96336],{"id":96335},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[19,96338,96339],{},"resize()重新调整数组的大小",[19,96341,96342],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[36,96344,96346],{"className":38,"code":96345,"language":40,"meta":41,"style":41},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[43,96347,96348,96353,96366],{"__ignoreMap":41},[46,96349,96350],{"class":48,"line":49},[46,96351,96352],{"class":2253},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[46,96354,96355,96358,96360,96362,96364],{"class":48,"line":60},[46,96356,96357],{"class":56},"np.resize(aa,(",[46,96359,2272],{"class":180},[46,96361,2565],{"class":56},[46,96363,2531],{"class":180},[46,96365,32479],{"class":56},[46,96367,96368,96370,96372,96374,96376,96378],{"class":48,"line":200},[46,96369,96357],{"class":56},[46,96371,2272],{"class":180},[46,96373,2565],{"class":56},[46,96375,2607],{"class":180},[46,96377,84734],{"class":56},[46,96379,96380],{"class":2253},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,96382,96384],{"id":96383},"_125-placeput函数","12.5 place()\u002Fput()函数",[19,96386,96387],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[19,96389,96390],{},[3514,96391],{"alt":41,"src":96392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,96394,96396],{"id":96395},"_126-保存加载文件","12.6 保存加载文件",[19,96398,96399],{},"savetxt():将数据保存到txt文件中",[19,96401,96402],{},"loadtxt():从文件加载数据",[19,96404,96405],{},[3514,96406],{"alt":41,"src":96407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,96409,96411],{"id":96410},"_127-genfromtxt函数","12.7 genfromtxt()函数",[19,96413,96414],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,96416,96418],{"id":96417},"_128-anyall函数","12.8 any()\u002Fall()函数",[19,96420,96421],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[19,96423,96424],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[19,96426,96427],{},[3514,96428],{"alt":41,"src":96429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,96431,96433],{"id":96432},"_129-where语句","12.9 where语句",[19,96435,96436],{},"np.where(条件,x,y)",[19,96438,96439],{},"如果条件为True,对应值为x,否则对应值为y",[19,96441,96442],{},[3514,96443],{"alt":41,"src":96444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,96446,96448],{"id":96447},"_1210-dot矩阵","12.10 dot()矩阵",[19,96450,96451],{},[3514,96452],{"alt":41,"src":96453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[2098,96455,96456],{},"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":41,"searchDepth":60,"depth":60,"links":96458},[96459,96460,96461,96462,96463,96464,96465,96466,96467,96468],{"id":95821,"depth":60,"text":95822},{"id":96044,"depth":60,"text":96045},{"id":96260,"depth":60,"text":96261},{"id":96335,"depth":60,"text":96336},{"id":96383,"depth":60,"text":96384},{"id":96395,"depth":60,"text":96396},{"id":96410,"depth":60,"text":96411},{"id":96417,"depth":60,"text":96418},{"id":96432,"depth":60,"text":96433},{"id":96447,"depth":60,"text":96448},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":95813,"description":25378},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":96475,"title":96476,"body":96477,"description":25378,"extension":2125,"meta":96830,"navigation":615,"path":96831,"seo":96832,"stem":96833,"__hash__":96834},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":96478,"toc":96828},[96479,96482,96485,96488,96491,96494,96559,96561,96825],[10,96480,96476],{"id":96481},"_13数组排序",[19,96483,96484],{},"排序主要用到的方法是np.sort和np.argsort",[19,96486,96487],{},"其中np.sort()对数组直接排序",[19,96489,96490],{},"而np.argsort()是返回排序后的原始索引",[19,96492,96493],{},"①一维数组",[36,96495,96497],{"className":38,"code":96496,"language":40,"meta":41,"style":41},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[43,96498,96499,96503,96543,96551],{"__ignoreMap":41},[46,96500,96501],{"class":48,"line":49},[46,96502,95068],{"class":2253},[46,96504,96505,96507,96509,96511,96513,96515,96517,96519,96521,96523,96525,96527,96529,96531,96533,96535,96537,96539,96541],{"class":48,"line":60},[46,96506,2426],{"class":56},[46,96508,79],{"class":52},[46,96510,94987],{"class":56},[46,96512,2266],{"class":180},[46,96514,2565],{"class":56},[46,96516,2685],{"class":180},[46,96518,2565],{"class":56},[46,96520,2582],{"class":180},[46,96522,2565],{"class":56},[46,96524,2961],{"class":180},[46,96526,2565],{"class":56},[46,96528,2467],{"class":180},[46,96530,2565],{"class":56},[46,96532,3079],{"class":180},[46,96534,2565],{"class":56},[46,96536,2531],{"class":180},[46,96538,2565],{"class":56},[46,96540,2633],{"class":180},[46,96542,6673],{"class":56},[46,96544,96545,96548],{"class":48,"line":200},[46,96546,96547],{"class":56},"np.sort(a)",[46,96549,96550],{"class":2253},"#升序排序\n",[46,96552,96553,96556],{"class":48,"line":211},[46,96554,96555],{"class":56},"np.argsort(a)",[46,96557,96558],{"class":2253},"#按照元素大小来索引排序\n",[19,96560,95254],{},[36,96562,96564],{"className":38,"code":96563,"language":40,"meta":41,"style":41},"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",[43,96565,96566,96578,96604,96609,96613,96618,96623,96628,96633,96637,96645,96649,96654,96659,96664,96669,96673,96678,96691,96695,96700,96705,96710,96715,96719,96724,96736,96740,96744,96748,96752,96756,96760,96765,96780,96785,96794,96799,96803,96807,96812,96816,96821],{"__ignoreMap":41},[46,96567,96568,96571,96573,96575],{"class":48,"line":49},[46,96569,96570],{"class":56},"np.random.seed(",[46,96572,2379],{"class":180},[46,96574,2616],{"class":56},[46,96576,96577],{"class":2253},"#保证每次值一样\n",[46,96579,96580,96582,96584,96586,96588,96590,96592,96594,96596,96598,96600,96602],{"class":48,"line":60},[46,96581,95269],{"class":56},[46,96583,79],{"class":52},[46,96585,95077],{"class":56},[46,96587,1155],{"class":180},[46,96589,2565],{"class":56},[46,96591,33473],{"class":439},[46,96593,79],{"class":52},[46,96595,1152],{"class":56},[46,96597,2481],{"class":180},[46,96599,2565],{"class":56},[46,96601,2531],{"class":180},[46,96603,32479],{"class":56},[46,96605,96606],{"class":48,"line":200},[46,96607,96608],{"class":2253},"#原数组：\n",[46,96610,96611],{"class":48,"line":211},[46,96612,95891],{"class":173},[46,96614,96615],{"class":48,"line":222},[46,96616,96617],{"class":173},"array([[44, 47, 64, 67, 67,  9],\n",[46,96619,96620],{"class":48,"line":636},[46,96621,96622],{"class":173},"       [83, 21, 36, 87, 70, 88],\n",[46,96624,96625],{"class":48,"line":641},[46,96626,96627],{"class":173},"       [88, 12, 58, 65, 39, 87],\n",[46,96629,96630],{"class":48,"line":653},[46,96631,96632],{"class":173},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[46,96634,96635],{"class":48,"line":659},[46,96636,95891],{"class":173},[46,96638,96639,96642],{"class":48,"line":665},[46,96640,96641],{"class":56},"np.sort(aa)",[46,96643,96644],{"class":2253},"#每行进行了排序\n",[46,96646,96647],{"class":48,"line":670},[46,96648,95891],{"class":173},[46,96650,96651],{"class":48,"line":676},[46,96652,96653],{"class":173},"array([[ 9, 44, 47, 64, 67, 67],\n",[46,96655,96656],{"class":48,"line":682},[46,96657,96658],{"class":173},"       [21, 36, 70, 83, 87, 88],\n",[46,96660,96661],{"class":48,"line":688},[46,96662,96663],{"class":173},"       [12, 39, 58, 65, 87, 88],\n",[46,96665,96666],{"class":48,"line":693},[46,96667,96668],{"class":173},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[46,96670,96671],{"class":48,"line":699},[46,96672,95891],{"class":173},[46,96674,96675],{"class":48,"line":705},[46,96676,96677],{"class":2253},"#axis=0时\n",[46,96679,96680,96683,96685,96687,96689],{"class":48,"line":711},[46,96681,96682],{"class":56},"np.sort(aa,",[46,96684,49482],{"class":439},[46,96686,79],{"class":52},[46,96688,2379],{"class":180},[46,96690,459],{"class":56},[46,96692,96693],{"class":48,"line":717},[46,96694,95891],{"class":173},[46,96696,96697],{"class":48,"line":723},[46,96698,96699],{"class":173},"array([[44, 12, 36, 37, 25,  9],\n",[46,96701,96702],{"class":48,"line":729},[46,96703,96704],{"class":173},"       [46, 21, 58, 65, 39, 77],\n",[46,96706,96707],{"class":48,"line":735},[46,96708,96709],{"class":173},"       [83, 47, 64, 67, 67, 87],\n",[46,96711,96712],{"class":48,"line":740},[46,96713,96714],{"class":173},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[46,96716,96717],{"class":48,"line":745},[46,96718,95891],{"class":173},[46,96720,96721],{"class":48,"line":763},[46,96722,96723],{"class":2253},"#axis=1时,为默认值\n",[46,96725,96726,96728,96730,96732,96734],{"class":48,"line":778},[46,96727,96682],{"class":56},[46,96729,49482],{"class":439},[46,96731,79],{"class":52},[46,96733,2405],{"class":180},[46,96735,459],{"class":56},[46,96737,96738],{"class":48,"line":789},[46,96739,95891],{"class":173},[46,96741,96742],{"class":48,"line":794},[46,96743,96653],{"class":173},[46,96745,96746],{"class":48,"line":806},[46,96747,96658],{"class":173},[46,96749,96750],{"class":48,"line":829},[46,96751,96663],{"class":173},[46,96753,96754],{"class":48,"line":840},[46,96755,96668],{"class":173},[46,96757,96758],{"class":48,"line":846},[46,96759,95891],{"class":173},[46,96761,96762],{"class":48,"line":852},[46,96763,96764],{"class":2253},"#按最后一列排序\n",[46,96766,96767,96769,96771,96774,96776,96778],{"class":48,"line":857},[46,96768,2451],{"class":56},[46,96770,79],{"class":52},[46,96772,96773],{"class":56},"aa[:,",[46,96775,534],{"class":52},[46,96777,2405],{"class":180},[46,96779,35220],{"class":56},[46,96781,96782],{"class":48,"line":875},[46,96783,96784],{"class":2253},"#获取最后一列排好序的索引\n",[46,96786,96787,96789,96791],{"class":48,"line":892},[46,96788,76023],{"class":56},[46,96790,79],{"class":52},[46,96792,96793],{"class":56},"np.argsort(b)\n",[46,96795,96796],{"class":48,"line":898},[46,96797,96798],{"class":56},"aa[index]\n",[46,96800,96801],{"class":48,"line":903},[46,96802,95891],{"class":173},[46,96804,96805],{"class":48,"line":908},[46,96806,96617],{"class":173},[46,96808,96809],{"class":48,"line":925},[46,96810,96811],{"class":173},"       [46, 88, 81, 37, 25, 77],\n",[46,96813,96814],{"class":48,"line":1238},[46,96815,96627],{"class":173},[46,96817,96818],{"class":48,"line":1251},[46,96819,96820],{"class":173},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[46,96822,96823],{"class":48,"line":1256},[46,96824,95891],{"class":173},[2098,96826,96827],{},"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":41,"searchDepth":60,"depth":60,"links":96829},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":96476,"description":25378},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":96836,"title":96837,"body":96838,"description":25378,"extension":2125,"meta":96868,"navigation":615,"path":96869,"seo":96870,"stem":96871,"__hash__":96872},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":96839,"toc":96866},[96840,96843,96846,96849,96852,96855,96858,96861],[10,96841,96837],{"id":96842},"_14广播机制",[19,96844,96845],{},"广播的规则：",[19,96847,96848],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[19,96850,96851],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[19,96853,96854],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[19,96856,96857],{},"3.如果没有维度形状为1，则会引发异常",[19,96859,96860],{},"也就是只有维度或者个数为1才可以进行广播操作",[19,96862,96863],{},[3514,96864],{"alt":41,"src":96865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":41,"searchDepth":60,"depth":60,"links":96867},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":96837,"description":25378},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":96874,"title":96875,"body":96876,"description":25378,"extension":2125,"meta":96974,"navigation":615,"path":96975,"seo":96976,"stem":96977,"__hash__":96978},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":96877,"toc":96972},[96878,96881,96884,96969],[10,96879,96875],{"id":96880},"_15比较掩码",[19,96882,96883],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[36,96885,96887],{"className":38,"code":96886,"language":40,"meta":41,"style":41},"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",[43,96888,96889,96935,96946,96960,96964],{"__ignoreMap":41},[46,96890,96891,96893,96895,96898,96900,96902,96904,96906,96908,96910,96912,96914,96916,96918,96920,96922,96924,96926,96928,96930,96932],{"class":48,"line":49},[46,96892,2426],{"class":56},[46,96894,79],{"class":52},[46,96896,96897],{"class":56},"np.array([[",[46,96899,2405],{"class":180},[46,96901,2565],{"class":56},[46,96903,2272],{"class":180},[46,96905,2565],{"class":56},[46,96907,2266],{"class":180},[46,96909,49998],{"class":56},[46,96911,2659],{"class":180},[46,96913,2565],{"class":56},[46,96915,2685],{"class":180},[46,96917,2565],{"class":56},[46,96919,2710],{"class":180},[46,96921,49998],{"class":56},[46,96923,2911],{"class":180},[46,96925,2565],{"class":56},[46,96927,2936],{"class":180},[46,96929,2565],{"class":56},[46,96931,2961],{"class":180},[46,96933,96934],{"class":56},"]])\n",[46,96936,96937,96939,96941,96943],{"class":48,"line":60},[46,96938,2426],{"class":56},[46,96940,821],{"class":52},[46,96942,2886],{"class":180},[46,96944,96945],{"class":2253},"#结果是一个由True,False组成的数组\n",[46,96947,96948,96951,96953,96955,96957],{"class":48,"line":200},[46,96949,96950],{"class":56},"a[a",[46,96952,821],{"class":52},[46,96954,2886],{"class":180},[46,96956,3125],{"class":56},[46,96958,96959],{"class":2253},"#小于20的元素会存到这个数组中\n",[46,96961,96962],{"class":48,"line":211},[46,96963,95527],{"class":2253},[46,96965,96966],{"class":48,"line":222},[46,96967,96968],{"class":2253},"#array([ 1,  2,  3, 11, 12, 13])\n",[2098,96970,96971],{},"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":41,"searchDepth":60,"depth":60,"links":96973},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":96875,"description":25378},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":96980,"title":96981,"body":96982,"description":25378,"extension":2125,"meta":97074,"navigation":615,"path":97075,"seo":97076,"stem":97077,"__hash__":97078},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":96983,"toc":97072},[96984,96987,96990,96993,96996,96999,97064,97069],[10,96985,96981],{"id":96986},"_16魔法命令time",[19,96988,96989],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[19,96991,96992],{},"%:行模式",[19,96994,96995],{},"%%:单元格模式",[19,96997,96998],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[36,97000,97002],{"className":38,"code":97001,"language":40,"meta":41,"style":41},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[43,97003,97004,97009,97016,97021,97030,97043,97047,97055],{"__ignoreMap":41},[46,97005,97006],{"class":48,"line":49},[46,97007,97008],{"class":2253},"#程序执行时间\n",[46,97010,97011,97013],{"class":48,"line":60},[46,97012,53],{"class":52},[46,97014,97015],{"class":56}," time \n",[46,97017,97018],{"class":48,"line":200},[46,97019,97020],{"class":2253},"#获取时间\n",[46,97022,97023,97026,97028],{"class":48,"line":211},[46,97024,97025],{"class":56},"start",[46,97027,79],{"class":52},[46,97029,34393],{"class":56},[46,97031,97032,97035,97038,97040],{"class":48,"line":222},[46,97033,97034],{"class":56},"time.sleep(",[46,97036,97037],{"class":180},"0.4",[46,97039,2616],{"class":56},[46,97041,97042],{"class":2253},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[46,97044,97045],{"class":48,"line":636},[46,97046,97020],{"class":2253},[46,97048,97049,97051,97053],{"class":48,"line":641},[46,97050,47772],{"class":56},[46,97052,79],{"class":52},[46,97054,34393],{"class":56},[46,97056,97057,97059,97061],{"class":48,"line":653},[46,97058,47772],{"class":56},[46,97060,534],{"class":52},[46,97062,97063],{"class":56},"start\n",[19,97065,97066],{},[3514,97067],{"alt":41,"src":97068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[2098,97070,97071],{},"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":41,"searchDepth":60,"depth":60,"links":97073},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":96981,"description":25378},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":97080,"title":97081,"body":97082,"description":25378,"extension":2125,"meta":97117,"navigation":615,"path":97118,"seo":97119,"stem":97120,"__hash__":97121},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":97083,"toc":97115},[97084,97087,97090,97093,97096,97099,97102,97105,97110],[10,97085,97081],{"id":97086},"_17魔法命令timeit",[19,97088,97089],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[19,97091,97092],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[19,97094,97095],{},"单元格模式：",[19,97097,97098],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[19,97100,97101],{},"初始化语句执行次数由轮数来决定",[19,97103,97104],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[19,97106,97107],{},[3514,97108],{"alt":41,"src":97109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[19,97111,97112],{},[3514,97113],{"alt":41,"src":97114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":41,"searchDepth":60,"depth":60,"links":97116},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":97081,"description":25378},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":97123,"title":97124,"body":97125,"description":25378,"extension":2125,"meta":97143,"navigation":615,"path":97144,"seo":97145,"stem":97146,"__hash__":97147},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":97126,"toc":97141},[97127,97130,97133,97136],[10,97128,97124],{"id":97129},"_18魔法命令writefile和run",[19,97131,97132],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[19,97134,97135],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[19,97137,97138],{},[3514,97139],{"alt":41,"src":97140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":41,"searchDepth":60,"depth":60,"links":97142},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":97124,"description":25378},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":97149,"title":97150,"body":97151,"description":25378,"extension":2125,"meta":97204,"navigation":615,"path":97205,"seo":97206,"stem":97207,"__hash__":97208},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":97152,"toc":97202},[97153,97156,97159,97161,97164,97167,97172,97175,97178,97181,97184,97187,97190,97193,97196,97199],[10,97154,97150],{"id":97155},"_19魔法命令memit",[19,97157,97158],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[19,97160,26596],{},[19,97162,97163],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[19,97165,97166],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[19,97168,97169],{},[3514,97170],{"alt":41,"src":97171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[19,97173,97174],{},"补充：",[19,97176,97177],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[19,97179,97180],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[19,97182,97183],{},"解决方法：",[19,97185,97186],{},"1.cmd",[19,97188,97189],{},"2.依次输入以下代码：",[19,97191,97192],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[19,97194,97195],{},"pip install --upgrade ipython",[19,97197,97198],{},"#升级 memory_profiler 和 setuptools",[19,97200,97201],{},"pip install --upgrade memory_profiler setuptools",{"title":41,"searchDepth":60,"depth":60,"links":97203},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":97150,"description":25378},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":97210,"title":97211,"body":97212,"description":25378,"extension":2125,"meta":98856,"navigation":615,"path":98857,"seo":98858,"stem":98859,"__hash__":98860},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":97213,"toc":98826},[97214,97217,97221,97225,97286,97289,97294,97298,97303,97308,97313,97318,97321,97326,97330,97334,97367,97370,97373,97376,97428,97431,97467,97470,97512,97516,97537,97539,97576,97578,97583,97585,97590,97594,97597,97625,97629,97633,97684,97688,97780,97784,97788,97791,97796,97800,97825,97830,97834,97837,97840,97843,97846,97849,97852,97855,97867,97871,97875,97878,97910,97913,97936,97939,97965,97968,97994,97997,98031,98034,98096,98100,98103,98107,98110,98136,98139,98142,98147,98150,98219,98221,98226,98287,98290,98301,98307,98312,98316,98319,98332,98336,98351,98353,98376,98378,98404,98407,98410,98413,98461,98463,98468,98472,98476,98503,98507,98534,98537,98542,98547,98637,98641,98699,98704,98707,98710,98752,98756,98812,98817,98820,98823],[10,97215,97211],{"id":97216},"_2创建数组",[14,97218,97220],{"id":97219},"_21-array函数创建数组","2.1 array()函数创建数组",[479,97222,97224],{"id":97223},"_221-函数语句","2.2.1 函数语句",[36,97226,97228],{"className":38,"code":97227,"language":40,"meta":41,"style":41},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[43,97229,97230],{"__ignoreMap":41},[46,97231,97232,97235,97238,97240,97242,97244,97246,97248,97251,97253,97256,97258,97261,97263,97265,97267,97270,97272,97275,97277,97280,97282,97284],{"class":48,"line":49},[46,97233,97234],{"class":56},"numpy.array(",[46,97236,97237],{"class":180},"object",[46,97239,448],{"class":56},[46,97241,95463],{"class":439},[46,97243,647],{"class":52},[46,97245,40905],{"class":180},[46,97247,448],{"class":56},[46,97249,97250],{"class":439},"copy",[46,97252,647],{"class":52},[46,97254,97255],{"class":180}," True",[46,97257,448],{"class":56},[46,97259,97260],{"class":439},"order",[46,97262,647],{"class":52},[46,97264,40905],{"class":180},[46,97266,448],{"class":56},[46,97268,97269],{"class":439},"subok",[46,97271,647],{"class":52},[46,97273,97274],{"class":180}," False",[46,97276,448],{"class":56},[46,97278,97279],{"class":439},"ndmin",[46,97281,647],{"class":52},[46,97283,887],{"class":180},[46,97285,459],{"class":56},[19,97287,97288],{},"参数：",[19,97290,97291],{},[3514,97292],{"alt":41,"src":97293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[479,97295,97297],{"id":97296},"_222-实例","2.2.2 实例",[19,97299,97300],{},[3514,97301],{"alt":41,"src":97302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[19,97304,97305],{},[3514,97306],{"alt":41,"src":97307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[19,97309,97310],{},[3514,97311],{"alt":41,"src":97312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[19,97314,97315],{},[3514,97316],{"alt":41,"src":97317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[19,97319,97320],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[19,97322,97323],{},[3514,97324],{"alt":41,"src":97325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,97327,97329],{"id":97328},"_22-随机数创建数组","2.2 随机数创建数组",[479,97331,97333],{"id":97332},"_221-random语句","2.2.1 random语句",[36,97335,97337],{"className":38,"code":97336,"language":40,"meta":41,"style":41},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[43,97338,97339,97344,97349,97357,97362],{"__ignoreMap":41},[46,97340,97341],{"class":48,"line":49},[46,97342,97343],{"class":2253},"#random.random()\n",[46,97345,97346],{"class":48,"line":60},[46,97347,97348],{"class":2253},"#确定随机种子,就是每次运行结果是相同的\n",[46,97350,97351,97353,97355],{"class":48,"line":200},[46,97352,96570],{"class":56},[46,97354,2379],{"class":180},[46,97356,459],{"class":56},[46,97358,97359],{"class":48,"line":211},[46,97360,97361],{"class":56},"np.random.random()\n",[46,97363,97364],{"class":48,"line":222},[46,97365,97366],{"class":2253},"#生成一个随机的数目\n",[19,97368,97369],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[19,97371,97372],{},"可以指定数组形状 size",[19,97374,97375],{},"①生成一维数组",[36,97377,97379],{"className":38,"code":97378,"language":40,"meta":41,"style":41},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[43,97380,97381,97386,97399,97404,97420],{"__ignoreMap":41},[46,97382,97383],{"class":48,"line":49},[46,97384,97385],{"class":2253},"#random.random(size())\n",[46,97387,97388,97391,97393,97395,97397],{"class":48,"line":60},[46,97389,97390],{"class":56},"np.random.random(",[46,97392,33473],{"class":439},[46,97394,79],{"class":52},[46,97396,2506],{"class":180},[46,97398,459],{"class":56},[46,97400,97401],{"class":48,"line":200},[46,97402,97403],{"class":2253},"#生成一位的五个元素\n",[46,97405,97406,97408,97410,97412,97414,97416,97418],{"class":48,"line":211},[46,97407,2426],{"class":56},[46,97409,79],{"class":52},[46,97411,97390],{"class":56},[46,97413,33473],{"class":439},[46,97415,79],{"class":52},[46,97417,2481],{"class":180},[46,97419,459],{"class":56},[46,97421,97422,97425],{"class":48,"line":222},[46,97423,97424],{"class":56},"a.shape ",[46,97426,97427],{"class":2253},"#输出数组形状\n",[19,97429,97430],{},"②生成二维数组",[36,97432,97434],{"className":38,"code":97433,"language":40,"meta":41,"style":41},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[43,97435,97436,97440,97462],{"__ignoreMap":41},[46,97437,97438],{"class":48,"line":49},[46,97439,95264],{"class":2253},[46,97441,97442,97444,97446,97448,97450,97452,97454,97456,97458,97460],{"class":48,"line":60},[46,97443,95269],{"class":56},[46,97445,79],{"class":52},[46,97447,97390],{"class":56},[46,97449,33473],{"class":439},[46,97451,79],{"class":52},[46,97453,1152],{"class":56},[46,97455,2481],{"class":180},[46,97457,2565],{"class":56},[46,97459,2506],{"class":180},[46,97461,32479],{"class":56},[46,97463,97464],{"class":48,"line":200},[46,97465,97466],{"class":2253},"#生成四行五列的数组\n",[19,97468,97469],{},"③生成三维数组",[36,97471,97473],{"className":38,"code":97472,"language":40,"meta":41,"style":41},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[43,97474,97475,97480,97507],{"__ignoreMap":41},[46,97476,97477],{"class":48,"line":49},[46,97478,97479],{"class":2253},"#三维数组\n",[46,97481,97482,97485,97487,97489,97491,97493,97495,97497,97499,97501,97503,97505],{"class":48,"line":60},[46,97483,97484],{"class":56},"aaa",[46,97486,79],{"class":52},[46,97488,97390],{"class":56},[46,97490,33473],{"class":439},[46,97492,79],{"class":52},[46,97494,1152],{"class":56},[46,97496,2272],{"class":180},[46,97498,2565],{"class":56},[46,97500,2266],{"class":180},[46,97502,2565],{"class":56},[46,97504,2481],{"class":180},[46,97506,32479],{"class":56},[46,97508,97509],{"class":48,"line":200},[46,97510,97511],{"class":56},"aaa.shape\n",[479,97513,97515],{"id":97514},"_222-randint语句","2.2.2 randint语句",[36,97517,97519],{"className":38,"code":97518,"language":40,"meta":41,"style":41},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[43,97520,97521,97526],{"__ignoreMap":41},[46,97522,97523],{"class":48,"line":49},[46,97524,97525],{"class":2253},"#生成随机的整数 random.randint(low,high,size)\n",[46,97527,97528,97530,97532,97534],{"class":48,"line":60},[46,97529,95077],{"class":56},[46,97531,2506],{"class":180},[46,97533,15716],{"class":56},[46,97535,97536],{"class":2253},"#0~5中的随机一个数\n",[19,97538,97375],{},[36,97540,97542],{"className":38,"code":97541,"language":40,"meta":41,"style":41},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[43,97543,97544,97549,97571],{"__ignoreMap":41},[46,97545,97546],{"class":48,"line":49},[46,97547,97548],{"class":2253},"#一维\n",[46,97550,97551,97553,97555,97557,97559,97561,97563,97565,97567,97569],{"class":48,"line":60},[46,97552,95077],{"class":56},[46,97554,2405],{"class":180},[46,97556,2565],{"class":56},[46,97558,2659],{"class":180},[46,97560,2565],{"class":56},[46,97562,33473],{"class":439},[46,97564,79],{"class":52},[46,97566,1152],{"class":56},[46,97568,2633],{"class":180},[46,97570,32479],{"class":56},[46,97572,97573],{"class":48,"line":200},[46,97574,97575],{"class":2253},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[19,97577,97430],{},[19,97579,97580],{},[3514,97581],{"alt":41,"src":97582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[19,97584,97469],{},[19,97586,97587],{},[3514,97588],{"alt":41,"src":97589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[479,97591,97593],{"id":97592},"_222-rand语句","2.2.2 rand语句",[19,97595,97596],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[36,97598,97600],{"className":38,"code":97599,"language":40,"meta":41,"style":41},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[43,97601,97602,97615,97620],{"__ignoreMap":41},[46,97603,97604,97607,97609,97611,97613],{"class":48,"line":49},[46,97605,97606],{"class":56},"np.random.rand(",[46,97608,1155],{"class":180},[46,97610,2565],{"class":56},[46,97612,2633],{"class":180},[46,97614,459],{"class":56},[46,97616,97617],{"class":48,"line":60},[46,97618,97619],{"class":2253},"#第一个参数100：行数，表示有100个样本\n",[46,97621,97622],{"class":48,"line":200},[46,97623,97624],{"class":2253},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,97626,97628],{"id":97627},"_23-arange创建数组","2.3 arange()创建数组",[479,97630,97632],{"id":97631},"_231-函数语句","2.3.1 函数语句",[36,97634,97636],{"className":38,"code":97635,"language":40,"meta":41,"style":41},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[43,97637,97638,97651,97656,97660,97665,97670,97675,97680],{"__ignoreMap":41},[46,97639,97640,97643,97645,97647,97649],{"class":48,"line":49},[46,97641,97642],{"class":56},"numpy.arange([start,] stop[, step], ",[46,97644,95463],{"class":439},[46,97646,79],{"class":52},[46,97648,757],{"class":180},[46,97650,459],{"class":56},[46,97652,97653],{"class":48,"line":60},[46,97654,97655],{"class":2253},"#参数\n",[46,97657,97658],{"class":48,"line":200},[46,97659,732],{"class":173},[46,97661,97662],{"class":48,"line":211},[46,97663,97664],{"class":173},"start:起始值，可选，默认从 0 开始。\n",[46,97666,97667],{"class":48,"line":222},[46,97668,97669],{"class":173},"stop:结束值（不包含该值）。\n",[46,97671,97672],{"class":48,"line":636},[46,97673,97674],{"class":173},"step:步长，可选，默认是 1。可以为浮点数。\n",[46,97676,97677],{"class":48,"line":641},[46,97678,97679],{"class":173},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[46,97681,97682],{"class":48,"line":653},[46,97683,732],{"class":173},[479,97685,97687],{"id":97686},"_232-实例","2.3.2 实例",[36,97689,97691],{"className":38,"code":97690,"language":40,"meta":41,"style":41},"#创建一维数组\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",[43,97692,97693,97697,97721,97726,97731,97735,97758,97762,97766,97771,97776],{"__ignoreMap":41},[46,97694,97695],{"class":48,"line":49},[46,97696,95068],{"class":2253},[46,97698,97699,97701,97703,97705,97707,97709,97711,97713,97715,97717,97719],{"class":48,"line":60},[46,97700,94965],{"class":56},[46,97702,2405],{"class":180},[46,97704,2565],{"class":56},[46,97706,2911],{"class":180},[46,97708,2565],{"class":56},[46,97710,2405],{"class":180},[46,97712,2565],{"class":56},[46,97714,95463],{"class":439},[46,97716,79],{"class":52},[46,97718,2201],{"class":180},[46,97720,459],{"class":56},[46,97722,97723],{"class":48,"line":200},[46,97724,97725],{"class":2253},"#输出结果：\n",[46,97727,97728],{"class":48,"line":211},[46,97729,97730],{"class":2253},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[46,97732,97733],{"class":48,"line":222},[46,97734,95910],{"class":2253},[46,97736,97737,97740,97742,97744,97746,97749,97751,97753,97755],{"class":48,"line":636},[46,97738,97739],{"class":56},"np.array([np.arange(",[46,97741,2405],{"class":180},[46,97743,2565],{"class":56},[46,97745,2481],{"class":180},[46,97747,97748],{"class":56},"),np.arange(",[46,97750,2481],{"class":180},[46,97752,2565],{"class":56},[46,97754,2556],{"class":180},[46,97756,97757],{"class":56},")])\n",[46,97759,97760],{"class":48,"line":641},[46,97761,95527],{"class":2253},[46,97763,97764],{"class":48,"line":653},[46,97765,732],{"class":173},[46,97767,97768],{"class":48,"line":659},[46,97769,97770],{"class":173},"array([[1, 2, 3],\n",[46,97772,97773],{"class":48,"line":665},[46,97774,97775],{"class":173},"       [4, 5, 6]])\n",[46,97777,97778],{"class":48,"line":670},[46,97779,732],{"class":173},[14,97781,97783],{"id":97782},"_24-生态分布","2.4 生态分布",[479,97785,97787],{"id":97786},"_241-标准正态分布","2.4.1 标准正态分布",[19,97789,97790],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[19,97792,97793],{},[3514,97794],{"alt":41,"src":97795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[479,97797,97799],{"id":97798},"_242-常规正态分布","2.4.2 常规正态分布",[36,97801,97803],{"className":38,"code":97802,"language":40,"meta":41,"style":41},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[43,97804,97805,97810,97815,97820],{"__ignoreMap":41},[46,97806,97807],{"class":48,"line":49},[46,97808,97809],{"class":56},"random.normal(loc,scale,size)也可以生成正态分布\n",[46,97811,97812],{"class":48,"line":60},[46,97813,97814],{"class":2253},"#loc:期望\n",[46,97816,97817],{"class":48,"line":200},[46,97818,97819],{"class":2253},"#scale:方差\n",[46,97821,97822],{"class":48,"line":211},[46,97823,97824],{"class":2253},"#size:用于确定是几维的数列\n",[19,97826,97827],{},[3514,97828],{"alt":41,"src":97829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,97831,97833],{"id":97832},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[19,97835,97836],{},"ndim:秩，维度个数",[19,97838,97839],{},"size:数组元素的个数",[19,97841,97842],{},"shape:数组的形状",[19,97844,97845],{},"dtype:数组元素的类型",[19,97847,97848],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[19,97850,97851],{},"他们都是属性，通过数组.属性的形式来确定",[19,97853,97854],{},"如果需要输出多个可以通过以下方式：",[36,97856,97858],{"className":38,"code":97857,"language":40,"meta":41,"style":41},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[43,97859,97860],{"__ignoreMap":41},[46,97861,97862,97864],{"class":48,"line":49},[46,97863,32398],{"class":180},[46,97865,97866],{"class":56},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,97868,97870],{"id":97869},"_26-其他方式创建数组","2.6 其他方式创建数组",[479,97872,97874],{"id":97873},"_261-zeros创建数组","2.6.1 zeros()创建数组",[19,97876,97877],{},"①创建一维数组",[36,97879,97881],{"className":38,"code":97880,"language":40,"meta":41,"style":41},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[43,97882,97883,97892,97896,97901,97906],{"__ignoreMap":41},[46,97884,97885,97888,97890],{"class":48,"line":49},[46,97886,97887],{"class":56},"np.zeros(",[46,97889,2633],{"class":180},[46,97891,459],{"class":56},[46,97893,97894],{"class":48,"line":60},[46,97895,732],{"class":173},[46,97897,97898],{"class":48,"line":200},[46,97899,97900],{"class":173},"输出结果：\n",[46,97902,97903],{"class":48,"line":211},[46,97904,97905],{"class":173},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[46,97907,97908],{"class":48,"line":222},[46,97909,732],{"class":173},[19,97911,97912],{},"上方代码等价于：",[36,97914,97916],{"className":38,"code":97915,"language":40,"meta":41,"style":41},"np.zeros(shape=(10))#创建10个元素的0数组\n",[43,97917,97918],{"__ignoreMap":41},[46,97919,97920,97922,97925,97927,97929,97931,97933],{"class":48,"line":49},[46,97921,97887],{"class":56},[46,97923,97924],{"class":439},"shape",[46,97926,79],{"class":52},[46,97928,1152],{"class":56},[46,97930,2633],{"class":180},[46,97932,84734],{"class":56},[46,97934,97935],{"class":2253},"#创建10个元素的0数组\n",[19,97937,97938],{},"也可以指定类型",[36,97940,97942],{"className":38,"code":97941,"language":40,"meta":41,"style":41},"#指定类型\nnp.zeros(5,dtype=int)\n",[43,97943,97944,97949],{"__ignoreMap":41},[46,97945,97946],{"class":48,"line":49},[46,97947,97948],{"class":2253},"#指定类型\n",[46,97950,97951,97953,97955,97957,97959,97961,97963],{"class":48,"line":60},[46,97952,97887],{"class":56},[46,97954,2506],{"class":180},[46,97956,2565],{"class":56},[46,97958,95463],{"class":439},[46,97960,79],{"class":52},[46,97962,2201],{"class":180},[46,97964,459],{"class":56},[19,97966,97967],{},"②创建二维数组",[36,97969,97971],{"className":38,"code":97970,"language":40,"meta":41,"style":41},"np.zeros((3,4),dtype=int)\n",[43,97972,97973],{"__ignoreMap":41},[46,97974,97975,97978,97980,97982,97984,97986,97988,97990,97992],{"class":48,"line":49},[46,97976,97977],{"class":56},"np.zeros((",[46,97979,2266],{"class":180},[46,97981,2565],{"class":56},[46,97983,2481],{"class":180},[46,97985,44228],{"class":56},[46,97987,95463],{"class":439},[46,97989,79],{"class":52},[46,97991,2201],{"class":180},[46,97993,459],{"class":56},[19,97995,97996],{},"③创建三维数组",[36,97998,98000],{"className":38,"code":97999,"language":40,"meta":41,"style":41},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[43,98001,98002,98007],{"__ignoreMap":41},[46,98003,98004],{"class":48,"line":49},[46,98005,98006],{"class":2253},"#创建三维数组\n",[46,98008,98009,98011,98013,98015,98017,98019,98021,98023,98025,98027,98029],{"class":48,"line":60},[46,98010,97977],{"class":56},[46,98012,2266],{"class":180},[46,98014,2565],{"class":56},[46,98016,2481],{"class":180},[46,98018,2565],{"class":56},[46,98020,2506],{"class":180},[46,98022,44228],{"class":56},[46,98024,95463],{"class":439},[46,98026,79],{"class":52},[46,98028,2201],{"class":180},[46,98030,459],{"class":56},[19,98032,98033],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[36,98035,98037],{"className":38,"code":98036,"language":40,"meta":41,"style":41},"#使用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",[43,98038,98039,98044,98059,98064,98069,98091],{"__ignoreMap":41},[46,98040,98041],{"class":48,"line":49},[46,98042,98043],{"class":2253},"#使用zeros_like将创建的一维数组变成全0的数组\n",[46,98045,98046,98048,98050,98052,98054,98056],{"class":48,"line":60},[46,98047,2426],{"class":56},[46,98049,79],{"class":52},[46,98051,94965],{"class":56},[46,98053,2481],{"class":180},[46,98055,2616],{"class":56},[46,98057,98058],{"class":2253},"#这个得到的结果：一维数组0，1，2，3\n",[46,98060,98061],{"class":48,"line":200},[46,98062,98063],{"class":56},"np.zeros_like(a)\n",[46,98065,98066],{"class":48,"line":211},[46,98067,98068],{"class":2253},"#使用zeros_like将创建的二维数组变成全0的数组\n",[46,98070,98071,98073,98075,98077,98079,98081,98083,98085,98087,98089],{"class":48,"line":222},[46,98072,95269],{"class":56},[46,98074,79],{"class":52},[46,98076,97390],{"class":56},[46,98078,33473],{"class":439},[46,98080,79],{"class":52},[46,98082,1152],{"class":56},[46,98084,2481],{"class":180},[46,98086,2565],{"class":56},[46,98088,2506],{"class":180},[46,98090,32479],{"class":56},[46,98092,98093],{"class":48,"line":636},[46,98094,98095],{"class":56},"np.zeros_like(aa)\n",[479,98097,98099],{"id":98098},"_262-ones创建数组","2.6.2 ones()创建数组",[19,98101,98102],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[479,98104,98106],{"id":98105},"_263-empty创建数组","2.6.3 empty()创建数组",[19,98108,98109],{},"①empty()用法",[36,98111,98113],{"className":38,"code":98112,"language":40,"meta":41,"style":41},"numpy.empty(shape,dtype=float,order='c')\n",[43,98114,98115],{"__ignoreMap":41},[46,98116,98117,98120,98122,98124,98126,98128,98130,98132,98134],{"class":48,"line":49},[46,98118,98119],{"class":56},"numpy.empty(shape,",[46,98121,95463],{"class":439},[46,98123,79],{"class":52},[46,98125,2236],{"class":180},[46,98127,2565],{"class":56},[46,98129,97260],{"class":439},[46,98131,79],{"class":52},[46,98133,77993],{"class":173},[46,98135,459],{"class":56},[19,98137,98138],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[19,98140,98141],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[19,98143,98144],{},[3514,98145],{"alt":41,"src":98146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[19,98148,98149],{},"②empty()用法",[36,98151,98153],{"className":38,"code":98152,"language":40,"meta":41,"style":41},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[43,98154,98155,98176,98188,98209,98214],{"__ignoreMap":41},[46,98156,98157,98159,98161,98164,98166,98168,98170,98172,98174],{"class":48,"line":49},[46,98158,3031],{"class":56},[46,98160,79],{"class":52},[46,98162,98163],{"class":56},"np.empty(",[46,98165,2633],{"class":180},[46,98167,2565],{"class":56},[46,98169,95463],{"class":439},[46,98171,79],{"class":52},[46,98173,2201],{"class":180},[46,98175,459],{"class":56},[46,98177,98178,98180,98182,98184,98186],{"class":48,"line":60},[46,98179,3006],{"class":56},[46,98181,79],{"class":52},[46,98183,94965],{"class":56},[46,98185,2506],{"class":180},[46,98187,459],{"class":56},[46,98189,98190,98193,98195,98198,98200,98202,98205,98207],{"class":48,"line":200},[46,98191,98192],{"class":56},"np.add(",[46,98194,2272],{"class":180},[46,98196,98197],{"class":56},",x,",[46,98199,95017],{"class":439},[46,98201,79],{"class":52},[46,98203,98204],{"class":56},"y[:",[46,98206,2506],{"class":180},[46,98208,6673],{"class":56},[46,98210,98211],{"class":48,"line":211},[46,98212,98213],{"class":2253},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[46,98215,98216],{"class":48,"line":222},[46,98217,98218],{"class":56},"y\n",[19,98220,13518],{},[19,98222,98223],{},[3514,98224],{"alt":41,"src":98225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[36,98227,98229],{"className":38,"code":98228,"language":40,"meta":41,"style":41},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[43,98230,98231,98247,98267,98282],{"__ignoreMap":41},[46,98232,98233,98235,98237,98239,98241,98243,98245],{"class":48,"line":49},[46,98234,3006],{"class":56},[46,98236,79],{"class":52},[46,98238,94965],{"class":56},[46,98240,2405],{"class":180},[46,98242,2565],{"class":56},[46,98244,2531],{"class":180},[46,98246,459],{"class":56},[46,98248,98249,98251,98253,98255,98257,98259,98261,98263,98265],{"class":48,"line":60},[46,98250,3031],{"class":56},[46,98252,79],{"class":52},[46,98254,98163],{"class":56},[46,98256,2506],{"class":180},[46,98258,2565],{"class":56},[46,98260,95463],{"class":439},[46,98262,79],{"class":52},[46,98264,2201],{"class":180},[46,98266,459],{"class":56},[46,98268,98269,98272,98274,98276,98278,98280],{"class":48,"line":200},[46,98270,98271],{"class":56},"np.add(x,",[46,98273,2272],{"class":180},[46,98275,2565],{"class":56},[46,98277,95017],{"class":439},[46,98279,79],{"class":52},[46,98281,95412],{"class":56},[46,98283,98284],{"class":48,"line":211},[46,98285,98286],{"class":2253},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[19,98288,98289],{},"③empty_like()",[19,98291,98292],{},[2339,98293,98294,98295,98300],{},"创建一个",[2339,98296,98297],{},[2339,98298,98299],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[19,98302,98303,98306],{},[43,98304,98305],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[19,98308,98309],{},[3514,98310],{"alt":41,"src":98311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[479,98313,98315],{"id":98314},"_264-用法","2.6.4 ？？用法",[19,98317,98318],{},"当想查看一个函数的参数时，可以通过？？来实现",[36,98320,98322],{"className":38,"code":98321,"language":40,"meta":41,"style":41},"np.full??\n",[43,98323,98324],{"__ignoreMap":41},[46,98325,98326,98329],{"class":48,"line":49},[46,98327,98328],{"class":56},"np.full",[46,98330,98331],{"class":79368},"??\n",[479,98333,98335],{"id":98334},"_265-full创建数组","2.6.5 full()创建数组",[36,98337,98339],{"className":38,"code":98338,"language":40,"meta":41,"style":41},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[43,98340,98341,98346],{"__ignoreMap":41},[46,98342,98343],{"class":48,"line":49},[46,98344,98345],{"class":56},"full(shape,fill_value)\n",[46,98347,98348],{"class":48,"line":60},[46,98349,98350],{"class":56},"创建全为某个指定值的数组\n",[19,98352,96493],{},[36,98354,98356],{"className":38,"code":98355,"language":40,"meta":41,"style":41},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[43,98357,98358,98363],{"__ignoreMap":41},[46,98359,98360],{"class":48,"line":49},[46,98361,98362],{"class":2253},"#创建一个一维数组,以20进行填充\n",[46,98364,98365,98368,98370,98372,98374],{"class":48,"line":60},[46,98366,98367],{"class":56},"np.full(",[46,98369,2633],{"class":180},[46,98371,2565],{"class":56},[46,98373,2886],{"class":180},[46,98375,459],{"class":56},[19,98377,95254],{},[36,98379,98381],{"className":38,"code":98380,"language":40,"meta":41,"style":41},"#创建二维数组\nnp.full((3,5),11)\n",[43,98382,98383,98387],{"__ignoreMap":41},[46,98384,98385],{"class":48,"line":49},[46,98386,95910],{"class":2253},[46,98388,98389,98392,98394,98396,98398,98400,98402],{"class":48,"line":60},[46,98390,98391],{"class":56},"np.full((",[46,98393,2266],{"class":180},[46,98395,2565],{"class":56},[46,98397,2506],{"class":180},[46,98399,44228],{"class":56},[46,98401,2659],{"class":180},[46,98403,459],{"class":56},[19,98405,98406],{},"③full_like用法",[19,98408,98409],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[19,98411,98412],{},"这里是指定填充而已",[36,98414,98416],{"className":38,"code":98415,"language":40,"meta":41,"style":41},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[43,98417,98418,98423,98447,98452],{"__ignoreMap":41},[46,98419,98420],{"class":48,"line":49},[46,98421,98422],{"class":2253},"#创建一个指定形状数组\n",[46,98424,98425,98427,98429,98431,98433,98435,98437,98439,98441,98443,98445],{"class":48,"line":60},[46,98426,2426],{"class":56},[46,98428,79],{"class":52},[46,98430,94965],{"class":56},[46,98432,2405],{"class":180},[46,98434,2565],{"class":56},[46,98436,2512],{"class":180},[46,98438,94970],{"class":56},[46,98440,2481],{"class":180},[46,98442,2565],{"class":56},[46,98444,2607],{"class":180},[46,98446,459],{"class":56},[46,98448,98449],{"class":48,"line":200},[46,98450,98451],{"class":2253},"#进行指定填充\n",[46,98453,98454,98457,98459],{"class":48,"line":211},[46,98455,98456],{"class":56},"np.full_like(a,",[46,98458,2633],{"class":180},[46,98460,459],{"class":56},[19,98462,13518],{},[19,98464,98465],{},[3514,98466],{"alt":41,"src":98467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[479,98469,98471],{"id":98470},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[23999,98473,98475],{"id":98474},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[36,98477,98479],{"className":38,"code":98478,"language":40,"meta":41,"style":41},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[43,98480,98481,98498],{"__ignoreMap":41},[46,98482,98483,98486,98488,98490,98492,98494,98496],{"class":48,"line":49},[46,98484,98485],{"class":56},"np.eye(",[46,98487,2481],{"class":180},[46,98489,2565],{"class":56},[46,98491,95463],{"class":439},[46,98493,79],{"class":52},[46,98495,2201],{"class":180},[46,98497,459],{"class":56},[46,98499,98500],{"class":48,"line":60},[46,98501,98502],{"class":2253},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[23999,98504,98506],{"id":98505},"_2662-法2identity","2.6.6.2 法2：identity()",[36,98508,98510],{"className":38,"code":98509,"language":40,"meta":41,"style":41},"#identity()\nnp.identity(5,dtype=int)\n",[43,98511,98512,98517],{"__ignoreMap":41},[46,98513,98514],{"class":48,"line":49},[46,98515,98516],{"class":2253},"#identity()\n",[46,98518,98519,98522,98524,98526,98528,98530,98532],{"class":48,"line":60},[46,98520,98521],{"class":56},"np.identity(",[46,98523,2506],{"class":180},[46,98525,2565],{"class":56},[46,98527,95463],{"class":439},[46,98529,79],{"class":52},[46,98531,2201],{"class":180},[46,98533,459],{"class":56},[19,98535,98536],{},"两个函数是有区别的",[19,98538,98539],{},[3514,98540],{"alt":41,"src":98541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[19,98543,98544],{},[3514,98545],{"alt":41,"src":98546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[36,98548,98550],{"className":38,"code":98549,"language":40,"meta":41,"style":41},"# 创建一个 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",[43,98551,98552,98557,98569,98574,98579,98584,98589,98593,98598,98618,98622,98627,98632],{"__ignoreMap":41},[46,98553,98554],{"class":48,"line":49},[46,98555,98556],{"class":2253},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[46,98558,98559,98561,98563,98565,98567],{"class":48,"line":60},[46,98560,98485],{"class":56},[46,98562,2266],{"class":180},[46,98564,448],{"class":56},[46,98566,2481],{"class":180},[46,98568,459],{"class":56},[46,98570,98571],{"class":48,"line":200},[46,98572,98573],{"class":2253},"# 输出:\n",[46,98575,98576],{"class":48,"line":211},[46,98577,98578],{"class":2253},"# [[1. 0. 0. 0.]\n",[46,98580,98581],{"class":48,"line":222},[46,98582,98583],{"class":2253},"#  [0. 1. 0. 0.]\n",[46,98585,98586],{"class":48,"line":636},[46,98587,98588],{"class":2253},"#  [0. 0. 1. 0.]]\n",[46,98590,98591],{"class":48,"line":641},[46,98592,616],{"emptyLinePlaceholder":615},[46,98594,98595],{"class":48,"line":653},[46,98596,98597],{"class":2253},"# 对角线向上偏移1\n",[46,98599,98600,98602,98604,98606,98608,98610,98612,98614,98616],{"class":48,"line":659},[46,98601,98485],{"class":56},[46,98603,2266],{"class":180},[46,98605,448],{"class":56},[46,98607,2481],{"class":180},[46,98609,448],{"class":56},[46,98611,2680],{"class":439},[46,98613,79],{"class":52},[46,98615,2405],{"class":180},[46,98617,459],{"class":56},[46,98619,98620],{"class":48,"line":665},[46,98621,98573],{"class":2253},[46,98623,98624],{"class":48,"line":670},[46,98625,98626],{"class":2253},"# [[0. 1. 0. 0.]\n",[46,98628,98629],{"class":48,"line":676},[46,98630,98631],{"class":2253},"#  [0. 0. 1. 0.]\n",[46,98633,98634],{"class":48,"line":682},[46,98635,98636],{"class":2253},"#  [0. 0. 0. 1.]]\n",[479,98638,98640],{"id":98639},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[36,98642,98644],{"className":38,"code":98643,"language":40,"meta":41,"style":41},"#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",[43,98645,98646,98651,98655,98660,98665,98670,98675,98680,98685,98690,98695],{"__ignoreMap":41},[46,98647,98648],{"class":48,"line":49},[46,98649,98650],{"class":2253},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[46,98652,98653],{"class":48,"line":60},[46,98654,732],{"class":173},[46,98656,98657],{"class":48,"line":200},[46,98658,98659],{"class":173},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[46,98661,98662],{"class":48,"line":211},[46,98663,98664],{"class":173},"参数介绍：\n",[46,98666,98667],{"class":48,"line":222},[46,98668,98669],{"class":173},"start：序列的起始值\n",[46,98671,98672],{"class":48,"line":636},[46,98673,98674],{"class":173},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[46,98676,98677],{"class":48,"line":641},[46,98678,98679],{"class":173},"num：要生长的等步长的样本数量，默认为50\n",[46,98681,98682],{"class":48,"line":653},[46,98683,98684],{"class":173},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[46,98686,98687],{"class":48,"line":659},[46,98688,98689],{"class":173},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[46,98691,98692],{"class":48,"line":665},[46,98693,98694],{"class":173},"dtype：ndarry的数据类型\n",[46,98696,98697],{"class":48,"line":670},[46,98698,732],{"class":173},[19,98700,98701],{},[3514,98702],{"alt":41,"src":98703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[19,98705,98706],{},"这里num=是可以省略的",[19,98708,98709],{},"也就是下方两行代码结果是一模一样的",[36,98711,98713],{"className":38,"code":98712,"language":40,"meta":41,"style":41},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[43,98714,98715,98732],{"__ignoreMap":41},[46,98716,98717,98720,98722,98724,98726,98728,98730],{"class":48,"line":49},[46,98718,98719],{"class":56},"np.linspace(",[46,98721,2405],{"class":180},[46,98723,2565],{"class":56},[46,98725,2506],{"class":180},[46,98727,2565],{"class":56},[46,98729,2506],{"class":180},[46,98731,459],{"class":56},[46,98733,98734,98736,98738,98740,98742,98744,98746,98748,98750],{"class":48,"line":60},[46,98735,98719],{"class":56},[46,98737,2405],{"class":180},[46,98739,2565],{"class":56},[46,98741,2506],{"class":180},[46,98743,2565],{"class":56},[46,98745,3709],{"class":439},[46,98747,79],{"class":52},[46,98749,2506],{"class":180},[46,98751,459],{"class":56},[479,98753,98755],{"id":98754},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[36,98757,98759],{"className":38,"code":98758,"language":40,"meta":41,"style":41},"#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",[43,98760,98761,98766,98770,98775,98780,98785,98790,98794,98799,98804,98808],{"__ignoreMap":41},[46,98762,98763],{"class":48,"line":49},[46,98764,98765],{"class":2253},"#logspace函数用于创建一个等比数列，格式如下：\n",[46,98767,98768],{"class":48,"line":60},[46,98769,732],{"class":173},[46,98771,98772],{"class":48,"line":200},[46,98773,98774],{"class":173},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[46,98776,98777],{"class":48,"line":211},[46,98778,98779],{"class":173},"参数为：\n",[46,98781,98782],{"class":48,"line":222},[46,98783,98784],{"class":173},"start:序列的起始位置为：base**start\n",[46,98786,98787],{"class":48,"line":636},[46,98788,98789],{"class":173},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[46,98791,98792],{"class":48,"line":641},[46,98793,98679],{"class":173},[46,98795,98796],{"class":48,"line":653},[46,98797,98798],{"class":173},"endpoint：是否包含 stop 这个值，默认是 True\n",[46,98800,98801],{"class":48,"line":659},[46,98802,98803],{"class":173},"base：对数的底数，默认是 10（常见对数）\n",[46,98805,98806],{"class":48,"line":665},[46,98807,98694],{"class":173},[46,98809,98810],{"class":48,"line":670},[46,98811,732],{"class":173},[19,98813,98814],{},[3514,98815],{"alt":41,"src":98816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[19,98818,98819],{},"logspace()函数中的num参数也是可以不写num=的",[19,98821,98822],{},"endpoint是不可以省略的",[2098,98824,98825],{},"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":41,"searchDepth":60,"depth":60,"links":98827},[98828,98832,98837,98841,98845,98846],{"id":97219,"depth":60,"text":97220,"children":98829},[98830,98831],{"id":97223,"depth":200,"text":97224},{"id":97296,"depth":200,"text":97297},{"id":97328,"depth":60,"text":97329,"children":98833},[98834,98835,98836],{"id":97332,"depth":200,"text":97333},{"id":97514,"depth":200,"text":97515},{"id":97592,"depth":200,"text":97593},{"id":97627,"depth":60,"text":97628,"children":98838},[98839,98840],{"id":97631,"depth":200,"text":97632},{"id":97686,"depth":200,"text":97687},{"id":97782,"depth":60,"text":97783,"children":98842},[98843,98844],{"id":97786,"depth":200,"text":97787},{"id":97798,"depth":200,"text":97799},{"id":97832,"depth":60,"text":97833},{"id":97869,"depth":60,"text":97870,"children":98847},[98848,98849,98850,98851,98852,98853,98854,98855],{"id":97873,"depth":200,"text":97874},{"id":98098,"depth":200,"text":98099},{"id":98105,"depth":200,"text":98106},{"id":98314,"depth":200,"text":98315},{"id":98334,"depth":200,"text":98335},{"id":98470,"depth":200,"text":98471},{"id":98639,"depth":200,"text":98640},{"id":98754,"depth":200,"text":98755},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":97211,"description":25378},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":98862,"title":98863,"body":98864,"description":25378,"extension":2125,"meta":98957,"navigation":615,"path":98958,"seo":98959,"stem":98960,"__hash__":98961},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":98865,"toc":98955},[98866,98869,98872,98875,98878,98881,98884,98887,98890,98893,98896,98899,98901,98904,98907,98912,98915,98918,98952],[10,98867,98863],{"id":98868},"_20魔法命令mprun",[19,98870,98871],{},"逐行分析数据内存的使用情况",[19,98873,98874],{},"语法格式：",[19,98876,98877],{},"%mprun -f 模块名.函数名 模块名.函数名()",[19,98879,98880],{},"分析结果列如下：",[19,98882,98883],{},"Line行号",[19,98885,98886],{},"Mem usage内存使用大小",[19,98888,98889],{},"increment内存增量",[19,98891,98892],{},"Line content代码内容",[19,98894,98895],{},"补充说明：",[19,98897,98898],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[19,98900,97166],{},[19,98902,98903],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[19,98905,98906],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[19,98908,98909],{},[3514,98910],{"alt":41,"src":98911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[19,98913,98914],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[19,98916,98917],{},"这时候需要重新加载模块",[36,98919,98921],{"className":38,"code":98920,"language":40,"meta":41,"style":41},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[43,98922,98923,98928,98935,98940],{"__ignoreMap":41},[46,98924,98925],{"class":48,"line":49},[46,98926,98927],{"class":2253},"#重新加载模块\n",[46,98929,98930,98932],{"class":48,"line":60},[46,98931,53],{"class":52},[46,98933,98934],{"class":56}," importlib\n",[46,98936,98937],{"class":48,"line":200},[46,98938,98939],{"class":56},"importlib.reload(mprun_test)\n",[46,98941,98942,98944,98947,98949],{"class":48,"line":211},[46,98943,2515],{"class":52},[46,98945,98946],{"class":56},"mprun ",[46,98948,534],{"class":52},[46,98950,98951],{"class":56},"f mprun_test.fun_test mprun_test.fun_test()\n",[2098,98953,98954],{},"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":41,"searchDepth":60,"depth":60,"links":98956},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":98863,"description":25378},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":98963,"title":98964,"body":98965,"description":25378,"extension":2125,"meta":98982,"navigation":615,"path":98983,"seo":98984,"stem":98985,"__hash__":98986},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":98966,"toc":98980},[98967,98970,98975],[10,98968,98964],{"id":98969},"_3一维数组的索引和切片",[19,98971,98972],{},[3514,98973],{"alt":41,"src":98974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[19,98976,98977],{},[3514,98978],{"alt":41,"src":98979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":41,"searchDepth":60,"depth":60,"links":98981},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":98964,"description":25378},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":98988,"title":98989,"body":98990,"description":25378,"extension":2125,"meta":99473,"navigation":615,"path":99474,"seo":99475,"stem":99476,"__hash__":99477},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":98991,"toc":99471},[98992,98995,98998,99003,99036,99039,99077,99080,99114,99117,99222,99225,99262,99265,99366,99369,99420,99423,99465,99468],[10,98993,98989],{"id":98994},"_4二维数组的索引与切片",[19,98996,98997],{},"①获取指定单个元素",[19,98999,99000],{},[3514,99001],{"alt":41,"src":99002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[36,99004,99006],{"className":38,"code":99005,"language":40,"meta":41,"style":41},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[43,99007,99008,99013,99018,99023],{"__ignoreMap":41},[46,99009,99010],{"class":48,"line":49},[46,99011,99012],{"class":2253},"#获取元素9\n",[46,99014,99015],{"class":48,"line":60},[46,99016,99017],{"class":2253},"#先获取所在行，再获取所在列\n",[46,99019,99020],{"class":48,"line":200},[46,99021,99022],{"class":2253},"#数组[行索引号，列索引号]\n",[46,99024,99025,99028,99030,99032,99034],{"class":48,"line":211},[46,99026,99027],{"class":56},"a[",[46,99029,2405],{"class":180},[46,99031,2565],{"class":56},[46,99033,2272],{"class":180},[46,99035,35220],{"class":56},[19,99037,99038],{},"②获取整行元素",[36,99040,99042],{"className":38,"code":99041,"language":40,"meta":41,"style":41},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[43,99043,99044,99049,99054,99062,99067],{"__ignoreMap":41},[46,99045,99046],{"class":48,"line":49},[46,99047,99048],{"class":2253},"#获取整行 数组[行索引号]\n",[46,99050,99051],{"class":48,"line":60},[46,99052,99053],{"class":2253},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[46,99055,99056,99058,99060],{"class":48,"line":200},[46,99057,99027],{"class":56},[46,99059,2272],{"class":180},[46,99061,35220],{"class":56},[46,99063,99064],{"class":48,"line":211},[46,99065,99066],{"class":2253},"#也可以负索引获取一行\n",[46,99068,99069,99071,99073,99075],{"class":48,"line":222},[46,99070,99027],{"class":56},[46,99072,534],{"class":52},[46,99074,2405],{"class":180},[46,99076,35220],{"class":56},[19,99078,99079],{},"③获取整列元素",[36,99081,99083],{"className":38,"code":99082,"language":40,"meta":41,"style":41},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[43,99084,99085,99090,99099,99104],{"__ignoreMap":41},[46,99086,99087],{"class":48,"line":49},[46,99088,99089],{"class":2253},"#获取整列 数组名[:,列索引]\n",[46,99091,99092,99095,99097],{"class":48,"line":60},[46,99093,99094],{"class":56},"a[:,",[46,99096,2272],{"class":180},[46,99098,35220],{"class":56},[46,99100,99101],{"class":48,"line":200},[46,99102,99103],{"class":2253},"#也可以负索引获取一列\n",[46,99105,99106,99108,99110,99112],{"class":48,"line":211},[46,99107,99094],{"class":56},[46,99109,534],{"class":52},[46,99111,2405],{"class":180},[46,99113,35220],{"class":56},[19,99115,99116],{},"④部分行部分列的元素",[36,99118,99120],{"className":38,"code":99119,"language":40,"meta":41,"style":41},"#部分行部分列 数组名[行切片，列切片]\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",[43,99121,99122,99127,99137,99141,99145,99150,99155,99159,99171,99175,99179,99184,99189,99194,99199,99203,99208],{"__ignoreMap":41},[46,99123,99124],{"class":48,"line":49},[46,99125,99126],{"class":2253},"#部分行部分列 数组名[行切片，列切片]\n",[46,99128,99129,99132,99134],{"class":48,"line":60},[46,99130,99131],{"class":56},"a[:",[46,99133,2272],{"class":180},[46,99135,99136],{"class":56},",:]\n",[46,99138,99139],{"class":48,"line":200},[46,99140,95527],{"class":2253},[46,99142,99143],{"class":48,"line":211},[46,99144,95891],{"class":173},[46,99146,99147],{"class":48,"line":222},[46,99148,99149],{"class":173},"array([[ 1,  2,  3,  4,  5,  6],\n",[46,99151,99152],{"class":48,"line":636},[46,99153,99154],{"class":173},"       [ 7,  8,  9, 10, 11, 12]])\n",[46,99156,99157],{"class":48,"line":641},[46,99158,95891],{"class":173},[46,99160,99161,99163,99165,99167,99169],{"class":48,"line":653},[46,99162,99094],{"class":56},[46,99164,2405],{"class":180},[46,99166,3045],{"class":56},[46,99168,2481],{"class":180},[46,99170,35220],{"class":56},[46,99172,99173],{"class":48,"line":659},[46,99174,95527],{"class":2253},[46,99176,99177],{"class":48,"line":665},[46,99178,95891],{"class":173},[46,99180,99181],{"class":48,"line":670},[46,99182,99183],{"class":173},"array([[ 2,  3,  4],\n",[46,99185,99186],{"class":48,"line":676},[46,99187,99188],{"class":173},"       [ 8,  9, 10],\n",[46,99190,99191],{"class":48,"line":682},[46,99192,99193],{"class":173},"       [14, 15, 16],\n",[46,99195,99196],{"class":48,"line":688},[46,99197,99198],{"class":173},"       [20, 21, 22]])\n",[46,99200,99201],{"class":48,"line":693},[46,99202,95891],{"class":173},[46,99204,99205],{"class":48,"line":699},[46,99206,99207],{"class":2253},"#对列行同时进行切片，使用了step参数\n",[46,99209,99210,99213,99215,99218,99220],{"class":48,"line":705},[46,99211,99212],{"class":56},"a[::",[46,99214,2272],{"class":180},[46,99216,99217],{"class":56},",::",[46,99219,2272],{"class":180},[46,99221,35220],{"class":56},[19,99223,99224],{},"⑤同时获取两个元素",[36,99226,99228],{"className":38,"code":99227,"language":40,"meta":41,"style":41},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[43,99229,99230,99235,99240],{"__ignoreMap":41},[46,99231,99232],{"class":48,"line":49},[46,99233,99234],{"class":2253},"#同时获取第三行第二列，第四行第一列\n",[46,99236,99237],{"class":48,"line":60},[46,99238,99239],{"class":2253},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[46,99241,99242,99245,99247,99249,99251,99253,99255,99257,99259],{"class":48,"line":200},[46,99243,99244],{"class":56},"a[(",[46,99246,2272],{"class":180},[46,99248,2565],{"class":56},[46,99250,2266],{"class":180},[46,99252,44219],{"class":56},[46,99254,2405],{"class":180},[46,99256,2565],{"class":56},[46,99258,2379],{"class":180},[46,99260,99261],{"class":56},")]\n",[19,99263,99264],{},"⑥切片，对行进行反向获取",[36,99266,99268],{"className":38,"code":99267,"language":40,"meta":41,"style":41},"#切片 对所有行进行反向获取\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",[43,99269,99270,99275,99285,99289,99293,99298,99303,99308,99313,99317,99322,99338,99342,99347,99352,99357,99362],{"__ignoreMap":41},[46,99271,99272],{"class":48,"line":49},[46,99273,99274],{"class":2253},"#切片 对所有行进行反向获取\n",[46,99276,99277,99279,99281,99283],{"class":48,"line":60},[46,99278,99212],{"class":56},[46,99280,534],{"class":52},[46,99282,2405],{"class":180},[46,99284,35220],{"class":56},[46,99286,99287],{"class":48,"line":200},[46,99288,95527],{"class":2253},[46,99290,99291],{"class":48,"line":211},[46,99292,95891],{"class":173},[46,99294,99295],{"class":48,"line":222},[46,99296,99297],{"class":173},"array([[19, 20, 21, 22, 23, 24],\n",[46,99299,99300],{"class":48,"line":636},[46,99301,99302],{"class":173},"       [13, 14, 15, 16, 17, 18],\n",[46,99304,99305],{"class":48,"line":641},[46,99306,99307],{"class":173},"       [ 7,  8,  9, 10, 11, 12],\n",[46,99309,99310],{"class":48,"line":653},[46,99311,99312],{"class":173},"       [ 1,  2,  3,  4,  5,  6]])\n",[46,99314,99315],{"class":48,"line":659},[46,99316,95891],{"class":173},[46,99318,99319],{"class":48,"line":665},[46,99320,99321],{"class":2253},"#对行列都进行反向切片获取\n",[46,99323,99324,99326,99328,99330,99332,99334,99336],{"class":48,"line":670},[46,99325,99212],{"class":56},[46,99327,534],{"class":52},[46,99329,2405],{"class":180},[46,99331,99217],{"class":56},[46,99333,534],{"class":52},[46,99335,2405],{"class":180},[46,99337,35220],{"class":56},[46,99339,99340],{"class":48,"line":676},[46,99341,95891],{"class":173},[46,99343,99344],{"class":48,"line":682},[46,99345,99346],{"class":173},"array([[24, 23, 22, 21, 20, 19],\n",[46,99348,99349],{"class":48,"line":688},[46,99350,99351],{"class":173},"       [18, 17, 16, 15, 14, 13],\n",[46,99353,99354],{"class":48,"line":693},[46,99355,99356],{"class":173},"       [12, 11, 10,  9,  8,  7],\n",[46,99358,99359],{"class":48,"line":699},[46,99360,99361],{"class":173},"       [ 6,  5,  4,  3,  2,  1]])\n",[46,99363,99364],{"class":48,"line":705},[46,99365,95891],{"class":173},[19,99367,99368],{},"⑦修改元素",[36,99370,99372],{"className":38,"code":99371,"language":40,"meta":41,"style":41},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[43,99373,99374,99379,99397,99402],{"__ignoreMap":41},[46,99375,99376],{"class":48,"line":49},[46,99377,99378],{"class":2253},"#获取前两行和前两列\n",[46,99380,99381,99384,99386,99388,99390,99393,99395],{"class":48,"line":60},[46,99382,99383],{"class":56},"sub_a",[46,99385,79],{"class":52},[46,99387,99131],{"class":56},[46,99389,2272],{"class":180},[46,99391,99392],{"class":56},",:",[46,99394,2272],{"class":180},[46,99396,35220],{"class":56},[46,99398,99399],{"class":48,"line":200},[46,99400,99401],{"class":2253},"#修改sub_a第一个元素的值\n",[46,99403,99404,99407,99409,99411,99413,99415,99417],{"class":48,"line":211},[46,99405,99406],{"class":56},"sub_a[",[46,99408,2379],{"class":180},[46,99410,2565],{"class":56},[46,99412,2379],{"class":180},[46,99414,3125],{"class":56},[46,99416,79],{"class":52},[46,99418,99419],{"class":180},"100\n",[19,99421,99422],{},"⑧数组复制copy()",[36,99424,99426],{"className":38,"code":99425,"language":40,"meta":41,"style":41},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[43,99427,99428,99433,99443,99448],{"__ignoreMap":41},[46,99429,99430],{"class":48,"line":49},[46,99431,99432],{"class":2253},"#数组复制\n",[46,99434,99435,99438,99440],{"class":48,"line":60},[46,99436,99437],{"class":56},"copy_a",[46,99439,79],{"class":52},[46,99441,99442],{"class":56},"np.copy(sub_a)\n",[46,99444,99445],{"class":48,"line":200},[46,99446,99447],{"class":2253},"#修改copy_a后不影响原数组\n",[46,99449,99450,99453,99455,99457,99459,99461,99463],{"class":48,"line":211},[46,99451,99452],{"class":56},"copy_a[",[46,99454,2379],{"class":180},[46,99456,2565],{"class":56},[46,99458,2379],{"class":180},[46,99460,3125],{"class":56},[46,99462,79],{"class":52},[46,99464,99419],{"class":180},[19,99466,99467],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[2098,99469,99470],{},"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":41,"searchDepth":60,"depth":60,"links":99472},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":98989,"description":25378},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":99479,"title":99480,"body":99481,"description":25378,"extension":2125,"meta":99973,"navigation":615,"path":99974,"seo":99975,"stem":99976,"__hash__":99977},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":99482,"toc":99965},[99483,99486,99490,99493,99496,99549,99552,99577,99580,99599,99619,99622,99638,99642,99688,99692,99734,99738,99741,99744,99747,99750,99753,99815,99875,99879,99882,99939,99943,99948,99957,99962],[10,99484,99480],{"id":99485},"_5改变数组的维度",[14,99487,99489],{"id":99488},"_51-使用reshape","5.1 使用reshape()",[19,99491,99492],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[19,99494,99495],{},"①一维数组转换为二维数组",[36,99497,99499],{"className":38,"code":99498,"language":40,"meta":41,"style":41},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[43,99500,99501,99517,99522,99527,99532],{"__ignoreMap":41},[46,99502,99503,99505,99507,99509,99511,99513,99515],{"class":48,"line":49},[46,99504,2426],{"class":56},[46,99506,79],{"class":52},[46,99508,94965],{"class":56},[46,99510,2405],{"class":180},[46,99512,2565],{"class":56},[46,99514,2710],{"class":180},[46,99516,459],{"class":56},[46,99518,99519],{"class":48,"line":60},[46,99520,99521],{"class":2253},"#将一维数组进行转换\n",[46,99523,99524],{"class":48,"line":200},[46,99525,99526],{"class":2253},"#注意点：元素个数不可以变\n",[46,99528,99529],{"class":48,"line":211},[46,99530,99531],{"class":2253},"#转换维度要保持一致，不一致就异常！！！\n",[46,99533,99534,99536,99538,99541,99543,99545,99547],{"class":48,"line":222},[46,99535,95269],{"class":56},[46,99537,79],{"class":52},[46,99539,99540],{"class":56},"a.reshape(",[46,99542,2272],{"class":180},[46,99544,2565],{"class":56},[46,99546,2531],{"class":180},[46,99548,459],{"class":56},[19,99550,99551],{},"②一维数组转换为三维数组",[36,99553,99555],{"className":38,"code":99554,"language":40,"meta":41,"style":41},"aaa=a.reshape(2,3,2)\n",[43,99556,99557],{"__ignoreMap":41},[46,99558,99559,99561,99563,99565,99567,99569,99571,99573,99575],{"class":48,"line":49},[46,99560,97484],{"class":56},[46,99562,79],{"class":52},[46,99564,99540],{"class":56},[46,99566,2272],{"class":180},[46,99568,2565],{"class":56},[46,99570,2266],{"class":180},[46,99572,2565],{"class":56},[46,99574,2272],{"class":180},[46,99576,459],{"class":56},[19,99578,99579],{},"③二维数组转化为一维数组",[36,99581,99583],{"className":38,"code":99582,"language":40,"meta":41,"style":41},"#知道元素个数：\naa.reshape(12)\n",[43,99584,99585,99590],{"__ignoreMap":41},[46,99586,99587],{"class":48,"line":49},[46,99588,99589],{"class":2253},"#知道元素个数：\n",[46,99591,99592,99595,99597],{"class":48,"line":60},[46,99593,99594],{"class":56},"aa.reshape(",[46,99596,2685],{"class":180},[46,99598,459],{"class":56},[36,99600,99602],{"className":38,"code":99601,"language":40,"meta":41,"style":41},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[43,99603,99604,99609],{"__ignoreMap":41},[46,99605,99606],{"class":48,"line":49},[46,99607,99608],{"class":2253},"#不知道元素个数，参数传递-1\n",[46,99610,99611,99613,99615,99617],{"class":48,"line":60},[46,99612,99594],{"class":56},[46,99614,534],{"class":52},[46,99616,2405],{"class":180},[46,99618,459],{"class":56},[19,99620,99621],{},"④三维数组转换为一维数组",[36,99623,99625],{"className":38,"code":99624,"language":40,"meta":41,"style":41},"aaa.reshape(-1)\n",[43,99626,99627],{"__ignoreMap":41},[46,99628,99629,99632,99634,99636],{"class":48,"line":49},[46,99630,99631],{"class":56},"aaa.reshape(",[46,99633,534],{"class":52},[46,99635,2405],{"class":180},[46,99637,459],{"class":56},[14,99639,99641],{"id":99640},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[36,99643,99645],{"className":38,"code":99644,"language":40,"meta":41,"style":41},"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",[43,99646,99647,99674,99679,99683],{"__ignoreMap":41},[46,99648,99649,99651,99653,99655,99657,99659,99661,99663,99665,99667,99669,99671],{"class":48,"line":49},[46,99650,95269],{"class":56},[46,99652,79],{"class":52},[46,99654,94965],{"class":56},[46,99656,2405],{"class":180},[46,99658,2565],{"class":56},[46,99660,2710],{"class":180},[46,99662,94970],{"class":56},[46,99664,2272],{"class":180},[46,99666,2565],{"class":56},[46,99668,2531],{"class":180},[46,99670,2616],{"class":56},[46,99672,99673],{"class":2253},"#转换为2行6列的数组\n",[46,99675,99676],{"class":48,"line":60},[46,99677,99678],{"class":56},"aa.revel()\n",[46,99680,99681],{"class":48,"line":200},[46,99682,95527],{"class":2253},[46,99684,99685],{"class":48,"line":211},[46,99686,99687],{"class":2253},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,99689,99691],{"id":99690},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[36,99693,99695],{"className":38,"code":99694,"language":40,"meta":41,"style":41},"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",[43,99696,99697,99721,99726,99730],{"__ignoreMap":41},[46,99698,99699,99701,99703,99705,99707,99709,99711,99713,99715,99717,99719],{"class":48,"line":49},[46,99700,95269],{"class":56},[46,99702,79],{"class":52},[46,99704,94965],{"class":56},[46,99706,2405],{"class":180},[46,99708,2565],{"class":56},[46,99710,2710],{"class":180},[46,99712,94970],{"class":56},[46,99714,2272],{"class":180},[46,99716,2565],{"class":56},[46,99718,2531],{"class":180},[46,99720,459],{"class":56},[46,99722,99723],{"class":48,"line":60},[46,99724,99725],{"class":56},"aa.flatten()\n",[46,99727,99728],{"class":48,"line":200},[46,99729,95527],{"class":2253},[46,99731,99732],{"class":48,"line":211},[46,99733,99687],{"class":2253},[14,99735,99737],{"id":99736},"_54-使用resize","5.4 使用resize()",[19,99739,99740],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[19,99742,99743],{},"通过resize方法可以改变数组的维度",[19,99745,99746],{},"#resize修改数组维度",[19,99748,99749],{},"#以元组的形式指定形状",[19,99751,99752],{},"#改变的是原数组",[36,99754,99756],{"className":38,"code":99755,"language":40,"meta":41,"style":41},"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",[43,99757,99758,99774,99794,99807,99811],{"__ignoreMap":41},[46,99759,99760,99762,99764,99766,99768,99770,99772],{"class":48,"line":49},[46,99761,2426],{"class":56},[46,99763,79],{"class":52},[46,99765,94965],{"class":56},[46,99767,2405],{"class":180},[46,99769,2565],{"class":56},[46,99771,2710],{"class":180},[46,99773,459],{"class":56},[46,99775,99776,99779,99781,99783,99785,99787,99789,99791],{"class":48,"line":60},[46,99777,99778],{"class":56},"a.shape",[46,99780,79],{"class":52},[46,99782,1152],{"class":56},[46,99784,2272],{"class":180},[46,99786,2565],{"class":56},[46,99788,2531],{"class":180},[46,99790,2616],{"class":56},[46,99792,99793],{"class":2253},"#改变了原数组\n",[46,99795,99796,99798,99800,99803,99805],{"class":48,"line":200},[46,99797,2426],{"class":56},[46,99799,79],{"class":52},[46,99801,99802],{"class":56},"resize((",[46,99804,2685],{"class":180},[46,99806,32479],{"class":56},[46,99808,99809],{"class":48,"line":211},[46,99810,95527],{"class":2253},[46,99812,99813],{"class":48,"line":222},[46,99814,99687],{"class":2253},[36,99816,99818],{"className":38,"code":99817,"language":40,"meta":41,"style":41},"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",[43,99819,99820,99833,99837,99841,99846,99851,99856,99861,99866,99871],{"__ignoreMap":41},[46,99821,99822,99825,99827,99829,99831],{"class":48,"line":49},[46,99823,99824],{"class":56},"a.resize((",[46,99826,2531],{"class":180},[46,99828,2565],{"class":56},[46,99830,2272],{"class":180},[46,99832,32479],{"class":56},[46,99834,99835],{"class":48,"line":60},[46,99836,95527],{"class":2253},[46,99838,99839],{"class":48,"line":200},[46,99840,95891],{"class":173},[46,99842,99843],{"class":48,"line":211},[46,99844,99845],{"class":173},"array([[ 1,  2],\n",[46,99847,99848],{"class":48,"line":222},[46,99849,99850],{"class":173},"       [ 3,  4],\n",[46,99852,99853],{"class":48,"line":636},[46,99854,99855],{"class":173},"       [ 5,  6],\n",[46,99857,99858],{"class":48,"line":641},[46,99859,99860],{"class":173},"       [ 7,  8],\n",[46,99862,99863],{"class":48,"line":653},[46,99864,99865],{"class":173},"       [ 9, 10],\n",[46,99867,99868],{"class":48,"line":659},[46,99869,99870],{"class":173},"       [11, 12]])\n",[46,99872,99873],{"class":48,"line":665},[46,99874,95891],{"class":173},[14,99876,99878],{"id":99877},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[19,99880,99881],{},"改变了原数组",[36,99883,99885],{"className":38,"code":99884,"language":40,"meta":41,"style":41},"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",[43,99886,99887,99903,99919,99923,99927,99931,99935],{"__ignoreMap":41},[46,99888,99889,99891,99893,99895,99897,99899,99901],{"class":48,"line":49},[46,99890,2426],{"class":56},[46,99892,79],{"class":52},[46,99894,94965],{"class":56},[46,99896,2405],{"class":180},[46,99898,2565],{"class":56},[46,99900,2710],{"class":180},[46,99902,459],{"class":56},[46,99904,99905,99907,99909,99911,99913,99915,99917],{"class":48,"line":60},[46,99906,99778],{"class":56},[46,99908,79],{"class":52},[46,99910,1152],{"class":56},[46,99912,2272],{"class":180},[46,99914,2565],{"class":56},[46,99916,2531],{"class":180},[46,99918,459],{"class":56},[46,99920,99921],{"class":48,"line":200},[46,99922,95527],{"class":2253},[46,99924,99925],{"class":48,"line":211},[46,99926,95891],{"class":173},[46,99928,99929],{"class":48,"line":222},[46,99930,99149],{"class":173},[46,99932,99933],{"class":48,"line":636},[46,99934,99154],{"class":173},[46,99936,99937],{"class":48,"line":641},[46,99938,95891],{"class":173},[14,99940,99942],{"id":99941},"_56-重要比较","5.6 重要比较：",[19,99944,99945],{},[3514,99946],{"alt":41,"src":99947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[19,99949,99950,99951,99953,99954,99956],{},"口诀：NumPy 函数要么用 ",[43,99952,97924],{},"，要么用 ",[43,99955,33473],{},"，创建结构用 shape，造数据用 size",[19,99958,99959],{},[3514,99960],{"alt":41,"src":99961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[2098,99963,99964],{},"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":41,"searchDepth":60,"depth":60,"links":99966},[99967,99968,99969,99970,99971,99972],{"id":99488,"depth":60,"text":99489},{"id":99640,"depth":60,"text":99641},{"id":99690,"depth":60,"text":99691},{"id":99736,"depth":60,"text":99737},{"id":99877,"depth":60,"text":99878},{"id":99941,"depth":60,"text":99942},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":99480,"description":25378},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":99979,"title":99980,"body":99981,"description":25378,"extension":2125,"meta":101053,"navigation":615,"path":101054,"seo":101055,"stem":101056,"__hash__":101057},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":99982,"toc":101047},[99983,99986,99990,99993,99996,99999,100064,100067,100107,100110,100192,100195,100200,100222,100224,100229,100234,100237,100240,100395,100398,100600,100604,100607,100610,100678,100680,100685,100688,100691,100771,100775,100778,100780,100853,100855,100860,100862,100942,100946,100949,100952,100955,100958,100961,100964,101044],[10,99984,99980],{"id":99985},"_6数组的拼接",[14,99987,99989],{"id":99988},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[19,99991,99992],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[19,99994,99995],{},"函数内部传两个数列构成的数列或者元组",[19,99997,99998],{},"①一维数组的拼接",[36,100000,100002],{"className":38,"code":100001,"language":40,"meta":41,"style":41},"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",[43,100003,100004,100024,100044,100049,100054,100059],{"__ignoreMap":41},[46,100005,100006,100008,100010,100012,100014,100016,100018,100020,100022],{"class":48,"line":49},[46,100007,2426],{"class":56},[46,100009,79],{"class":52},[46,100011,94987],{"class":56},[46,100013,2405],{"class":180},[46,100015,2565],{"class":56},[46,100017,2272],{"class":180},[46,100019,2565],{"class":56},[46,100021,2266],{"class":180},[46,100023,6673],{"class":56},[46,100025,100026,100028,100030,100032,100034,100036,100038,100040,100042],{"class":48,"line":60},[46,100027,2451],{"class":56},[46,100029,79],{"class":52},[46,100031,94987],{"class":56},[46,100033,2481],{"class":180},[46,100035,2565],{"class":56},[46,100037,2506],{"class":180},[46,100039,2565],{"class":56},[46,100041,2531],{"class":180},[46,100043,6673],{"class":56},[46,100045,100046],{"class":48,"line":200},[46,100047,100048],{"class":2253},"#调用concatenate进行数组拼接\n",[46,100050,100051],{"class":48,"line":211},[46,100052,100053],{"class":56},"np.concatenate((a,b))\n",[46,100055,100056],{"class":48,"line":222},[46,100057,100058],{"class":2253},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[46,100060,100061],{"class":48,"line":636},[46,100062,100063],{"class":2253},"#np.concatenate([a,b])\n",[19,100065,100066],{},"②一维多个数组拼接",[36,100068,100070],{"className":38,"code":100069,"language":40,"meta":41,"style":41},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[43,100071,100072,100077,100097,100102],{"__ignoreMap":41},[46,100073,100074],{"class":48,"line":49},[46,100075,100076],{"class":2253},"#也可以多个数组进行拼接\n",[46,100078,100079,100081,100083,100085,100087,100089,100091,100093,100095],{"class":48,"line":60},[46,100080,2476],{"class":56},[46,100082,79],{"class":52},[46,100084,94987],{"class":56},[46,100086,2633],{"class":180},[46,100088,2565],{"class":56},[46,100090,2659],{"class":180},[46,100092,2565],{"class":56},[46,100094,2710],{"class":180},[46,100096,6673],{"class":56},[46,100098,100099],{"class":48,"line":200},[46,100100,100101],{"class":56},"c\n",[46,100103,100104],{"class":48,"line":211},[46,100105,100106],{"class":56},"np.concatenate((a,b,c))\n",[19,100108,100109],{},"③二维数组拼接",[36,100111,100113],{"className":38,"code":100112,"language":40,"meta":41,"style":41},"#二维数组使用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",[43,100114,100115,100120,100144,100169,100174,100179],{"__ignoreMap":41},[46,100116,100117],{"class":48,"line":49},[46,100118,100119],{"class":2253},"#二维数组使用concatenate进行拼接\n",[46,100121,100122,100124,100126,100128,100130,100132,100134,100136,100138,100140,100142],{"class":48,"line":60},[46,100123,95269],{"class":56},[46,100125,79],{"class":52},[46,100127,94965],{"class":56},[46,100129,2405],{"class":180},[46,100131,2565],{"class":56},[46,100133,2710],{"class":180},[46,100135,94970],{"class":56},[46,100137,2266],{"class":180},[46,100139,2565],{"class":56},[46,100141,2481],{"class":180},[46,100143,459],{"class":56},[46,100145,100146,100149,100151,100153,100155,100157,100159,100161,100163,100165,100167],{"class":48,"line":200},[46,100147,100148],{"class":56},"bb",[46,100150,79],{"class":52},[46,100152,94965],{"class":56},[46,100154,2524],{"class":180},[46,100156,2565],{"class":56},[46,100158,2828],{"class":180},[46,100160,94970],{"class":56},[46,100162,2266],{"class":180},[46,100164,2565],{"class":56},[46,100166,2481],{"class":180},[46,100168,459],{"class":56},[46,100170,100171],{"class":48,"line":211},[46,100172,100173],{"class":2253},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[46,100175,100176],{"class":48,"line":222},[46,100177,100178],{"class":2253},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[46,100180,100181,100184,100186,100188,100190],{"class":48,"line":636},[46,100182,100183],{"class":56},"np.concatenate((aa,bb),",[46,100185,49482],{"class":439},[46,100187,79],{"class":52},[46,100189,2379],{"class":180},[46,100191,459],{"class":56},[19,100193,100194],{},"结果：",[19,100196,100197],{},[3514,100198],{"alt":41,"src":100199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[36,100201,100203],{"className":38,"code":100202,"language":40,"meta":41,"style":41},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[43,100204,100205,100210],{"__ignoreMap":41},[46,100206,100207],{"class":48,"line":49},[46,100208,100209],{"class":2253},"#指定axis为1进行拼接\n",[46,100211,100212,100214,100216,100218,100220],{"class":48,"line":60},[46,100213,100183],{"class":56},[46,100215,49482],{"class":439},[46,100217,79],{"class":52},[46,100219,2405],{"class":180},[46,100221,459],{"class":56},[19,100223,100194],{},[19,100225,100226],{},[3514,100227],{"alt":41,"src":100228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[19,100230,100231],{},[2339,100232,100233],{},"二维数组总结：0竖着方向，1横着方向",[19,100235,100236],{},"④三维数组拼接",[19,100238,100239],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[36,100241,100243],{"className":38,"code":100242,"language":40,"meta":41,"style":41},"#两个三行六列\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",[43,100244,100245,100250,100278,100308,100313,100330,100335,100340,100345,100362,100367,100372,100377,100390],{"__ignoreMap":41},[46,100246,100247],{"class":48,"line":49},[46,100248,100249],{"class":2253},"#两个三行六列\n",[46,100251,100252,100254,100256,100258,100260,100262,100264,100266,100268,100270,100272,100274,100276],{"class":48,"line":60},[46,100253,97484],{"class":56},[46,100255,79],{"class":52},[46,100257,94965],{"class":56},[46,100259,2405],{"class":180},[46,100261,2565],{"class":56},[46,100263,2512],{"class":180},[46,100265,94970],{"class":56},[46,100267,2272],{"class":180},[46,100269,2565],{"class":56},[46,100271,2266],{"class":180},[46,100273,2565],{"class":56},[46,100275,2531],{"class":180},[46,100277,459],{"class":56},[46,100279,100280,100283,100285,100287,100289,100291,100294,100296,100298,100300,100302,100304,100306],{"class":48,"line":200},[46,100281,100282],{"class":56},"bbb",[46,100284,79],{"class":52},[46,100286,94965],{"class":56},[46,100288,2524],{"class":180},[46,100290,2565],{"class":56},[46,100292,100293],{"class":180},"137",[46,100295,94970],{"class":56},[46,100297,2272],{"class":180},[46,100299,2565],{"class":56},[46,100301,2266],{"class":180},[46,100303,2565],{"class":56},[46,100305,2531],{"class":180},[46,100307,459],{"class":56},[46,100309,100310],{"class":48,"line":211},[46,100311,100312],{"class":2253},"#axis=0\n",[46,100314,100315,100317,100319,100322,100324,100326,100328],{"class":48,"line":222},[46,100316,2881],{"class":56},[46,100318,79],{"class":52},[46,100320,100321],{"class":56},"np.concatenate((aaa,bbb),",[46,100323,49482],{"class":439},[46,100325,79],{"class":52},[46,100327,2379],{"class":180},[46,100329,459],{"class":56},[46,100331,100332],{"class":48,"line":636},[46,100333,100334],{"class":56},"s.shape\n",[46,100336,100337],{"class":48,"line":641},[46,100338,100339],{"class":2253},"#输出：(4,3,6)\n",[46,100341,100342],{"class":48,"line":653},[46,100343,100344],{"class":2253},"#axis=1\n",[46,100346,100347,100350,100352,100354,100356,100358,100360],{"class":48,"line":659},[46,100348,100349],{"class":56},"ss",[46,100351,79],{"class":52},[46,100353,100321],{"class":56},[46,100355,49482],{"class":439},[46,100357,79],{"class":52},[46,100359,2405],{"class":180},[46,100361,459],{"class":56},[46,100363,100364],{"class":48,"line":665},[46,100365,100366],{"class":56},"ss.shape\n",[46,100368,100369],{"class":48,"line":670},[46,100370,100371],{"class":2253},"#输出：(2,6,6)\n",[46,100373,100374],{"class":48,"line":676},[46,100375,100376],{"class":2253},"#axis=2\n",[46,100378,100379,100381,100383,100385,100387],{"class":48,"line":682},[46,100380,100321],{"class":56},[46,100382,49482],{"class":439},[46,100384,79],{"class":52},[46,100386,2272],{"class":180},[46,100388,100389],{"class":56},").shape\n",[46,100391,100392],{"class":48,"line":688},[46,100393,100394],{"class":2253},"#输出：（2，3，12）\n",[19,100396,100397],{},"⑤四维数组拼接",[36,100399,100401],{"className":38,"code":100400,"language":40,"meta":41,"style":41},"#两个三行六列\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",[43,100402,100403,100407,100435,100463,100488,100514,100518,100531,100536,100540,100552,100557,100561,100573,100578,100583,100595],{"__ignoreMap":41},[46,100404,100405],{"class":48,"line":49},[46,100406,100249],{"class":2253},[46,100408,100409,100411,100413,100415,100417,100419,100421,100423,100425,100427,100429,100431,100433],{"class":48,"line":60},[46,100410,97484],{"class":56},[46,100412,79],{"class":52},[46,100414,94965],{"class":56},[46,100416,2405],{"class":180},[46,100418,2565],{"class":56},[46,100420,2512],{"class":180},[46,100422,94970],{"class":56},[46,100424,2272],{"class":180},[46,100426,2565],{"class":56},[46,100428,2266],{"class":180},[46,100430,2565],{"class":56},[46,100432,2531],{"class":180},[46,100434,459],{"class":56},[46,100436,100437,100439,100441,100443,100445,100447,100449,100451,100453,100455,100457,100459,100461],{"class":48,"line":200},[46,100438,100282],{"class":56},[46,100440,79],{"class":52},[46,100442,94965],{"class":56},[46,100444,2524],{"class":180},[46,100446,2565],{"class":56},[46,100448,100293],{"class":180},[46,100450,94970],{"class":56},[46,100452,2272],{"class":180},[46,100454,2565],{"class":56},[46,100456,2266],{"class":180},[46,100458,2565],{"class":56},[46,100460,2531],{"class":180},[46,100462,459],{"class":56},[46,100464,100465,100468,100470,100472,100474,100476,100478,100480,100482,100484,100486],{"class":48,"line":211},[46,100466,100467],{"class":56},"aaaa",[46,100469,79],{"class":52},[46,100471,99631],{"class":56},[46,100473,2272],{"class":180},[46,100475,2565],{"class":56},[46,100477,2266],{"class":180},[46,100479,2565],{"class":56},[46,100481,2266],{"class":180},[46,100483,2565],{"class":56},[46,100485,2272],{"class":180},[46,100487,459],{"class":56},[46,100489,100490,100493,100495,100498,100500,100502,100504,100506,100508,100510,100512],{"class":48,"line":222},[46,100491,100492],{"class":56},"bbbb",[46,100494,79],{"class":52},[46,100496,100497],{"class":56},"bbb.reshape(",[46,100499,2272],{"class":180},[46,100501,2565],{"class":56},[46,100503,2266],{"class":180},[46,100505,2565],{"class":56},[46,100507,2266],{"class":180},[46,100509,2565],{"class":56},[46,100511,2272],{"class":180},[46,100513,459],{"class":56},[46,100515,100516],{"class":48,"line":636},[46,100517,100312],{"class":2253},[46,100519,100520,100523,100525,100527,100529],{"class":48,"line":641},[46,100521,100522],{"class":56},"np.concatenate((aaaa,bbbb),",[46,100524,49482],{"class":439},[46,100526,79],{"class":52},[46,100528,2379],{"class":180},[46,100530,100389],{"class":56},[46,100532,100533],{"class":48,"line":653},[46,100534,100535],{"class":2253},"#结果：（4，3，3，2）\n",[46,100537,100538],{"class":48,"line":659},[46,100539,100344],{"class":2253},[46,100541,100542,100544,100546,100548,100550],{"class":48,"line":665},[46,100543,100522],{"class":56},[46,100545,49482],{"class":439},[46,100547,79],{"class":52},[46,100549,2405],{"class":180},[46,100551,100389],{"class":56},[46,100553,100554],{"class":48,"line":670},[46,100555,100556],{"class":2253},"#结果：（2，6，3，2）\n",[46,100558,100559],{"class":48,"line":676},[46,100560,100376],{"class":2253},[46,100562,100563,100565,100567,100569,100571],{"class":48,"line":682},[46,100564,100522],{"class":56},[46,100566,49482],{"class":439},[46,100568,79],{"class":52},[46,100570,2272],{"class":180},[46,100572,100389],{"class":56},[46,100574,100575],{"class":48,"line":688},[46,100576,100577],{"class":2253},"#结果：（2，3，6，2）\n",[46,100579,100580],{"class":48,"line":693},[46,100581,100582],{"class":2253},"#axis=3\n",[46,100584,100585,100587,100589,100591,100593],{"class":48,"line":699},[46,100586,100522],{"class":56},[46,100588,49482],{"class":439},[46,100590,79],{"class":52},[46,100592,2266],{"class":180},[46,100594,100389],{"class":56},[46,100596,100597],{"class":48,"line":705},[46,100598,100599],{"class":2253},"#结果：（2，3，3，4）\n",[14,100601,100603],{"id":100602},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[19,100605,100606],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[19,100608,100609],{},"①二维数组",[36,100611,100613],{"className":38,"code":100612,"language":40,"meta":41,"style":41},"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",[43,100614,100615,100639,100663,100668,100673],{"__ignoreMap":41},[46,100616,100617,100619,100621,100623,100625,100627,100629,100631,100633,100635,100637],{"class":48,"line":49},[46,100618,95269],{"class":56},[46,100620,79],{"class":52},[46,100622,94965],{"class":56},[46,100624,2405],{"class":180},[46,100626,2565],{"class":56},[46,100628,2710],{"class":180},[46,100630,94970],{"class":56},[46,100632,2266],{"class":180},[46,100634,2565],{"class":56},[46,100636,2481],{"class":180},[46,100638,459],{"class":56},[46,100640,100641,100643,100645,100647,100649,100651,100653,100655,100657,100659,100661],{"class":48,"line":60},[46,100642,100148],{"class":56},[46,100644,79],{"class":52},[46,100646,94965],{"class":56},[46,100648,2524],{"class":180},[46,100650,2565],{"class":56},[46,100652,2828],{"class":180},[46,100654,94970],{"class":56},[46,100656,2266],{"class":180},[46,100658,2565],{"class":56},[46,100660,2481],{"class":180},[46,100662,459],{"class":56},[46,100664,100665],{"class":48,"line":200},[46,100666,100667],{"class":56},"np.hstack((aa,bb))\n",[46,100669,100670],{"class":48,"line":211},[46,100671,100672],{"class":2253},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[46,100674,100675],{"class":48,"line":222},[46,100676,100677],{"class":2253},"#np.hstack([aa,bb])\n",[19,100679,100194],{},[19,100681,100682],{},[3514,100683],{"alt":41,"src":100684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[19,100686,100687],{},"等效于concatenate()函数中axis=1时的情况",[19,100689,100690],{},"②三维数组",[36,100692,100694],{"className":38,"code":100693,"language":40,"meta":41,"style":41},"#两个三行六列\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",[43,100695,100696,100700,100728,100756,100761,100766],{"__ignoreMap":41},[46,100697,100698],{"class":48,"line":49},[46,100699,100249],{"class":2253},[46,100701,100702,100704,100706,100708,100710,100712,100714,100716,100718,100720,100722,100724,100726],{"class":48,"line":60},[46,100703,97484],{"class":56},[46,100705,79],{"class":52},[46,100707,94965],{"class":56},[46,100709,2405],{"class":180},[46,100711,2565],{"class":56},[46,100713,2512],{"class":180},[46,100715,94970],{"class":56},[46,100717,2272],{"class":180},[46,100719,2565],{"class":56},[46,100721,2266],{"class":180},[46,100723,2565],{"class":56},[46,100725,2531],{"class":180},[46,100727,459],{"class":56},[46,100729,100730,100732,100734,100736,100738,100740,100742,100744,100746,100748,100750,100752,100754],{"class":48,"line":200},[46,100731,100282],{"class":56},[46,100733,79],{"class":52},[46,100735,94965],{"class":56},[46,100737,2524],{"class":180},[46,100739,2565],{"class":56},[46,100741,100293],{"class":180},[46,100743,94970],{"class":56},[46,100745,2272],{"class":180},[46,100747,2565],{"class":56},[46,100749,2266],{"class":180},[46,100751,2565],{"class":56},[46,100753,2531],{"class":180},[46,100755,459],{"class":56},[46,100757,100758],{"class":48,"line":211},[46,100759,100760],{"class":2253},"#使用hstack\n",[46,100762,100763],{"class":48,"line":222},[46,100764,100765],{"class":56},"np.hstack((aaa,bbb)).shape\n",[46,100767,100768],{"class":48,"line":636},[46,100769,100770],{"class":2253},"#输出：（2，6，6）\n",[14,100772,100774],{"id":100773},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[19,100776,100777],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[19,100779,100609],{},[36,100781,100783],{"className":38,"code":100782,"language":40,"meta":41,"style":41},"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",[43,100784,100785,100809,100833,100838,100843,100848],{"__ignoreMap":41},[46,100786,100787,100789,100791,100793,100795,100797,100799,100801,100803,100805,100807],{"class":48,"line":49},[46,100788,95269],{"class":56},[46,100790,79],{"class":52},[46,100792,94965],{"class":56},[46,100794,2405],{"class":180},[46,100796,2565],{"class":56},[46,100798,2710],{"class":180},[46,100800,94970],{"class":56},[46,100802,2266],{"class":180},[46,100804,2565],{"class":56},[46,100806,2481],{"class":180},[46,100808,459],{"class":56},[46,100810,100811,100813,100815,100817,100819,100821,100823,100825,100827,100829,100831],{"class":48,"line":60},[46,100812,100148],{"class":56},[46,100814,79],{"class":52},[46,100816,94965],{"class":56},[46,100818,2524],{"class":180},[46,100820,2565],{"class":56},[46,100822,2828],{"class":180},[46,100824,94970],{"class":56},[46,100826,2266],{"class":180},[46,100828,2565],{"class":56},[46,100830,2481],{"class":180},[46,100832,459],{"class":56},[46,100834,100835],{"class":48,"line":200},[46,100836,100837],{"class":2253},"#vstack 垂直方向进行堆叠\n",[46,100839,100840],{"class":48,"line":211},[46,100841,100842],{"class":56},"np.vstack((aa,bb))\n",[46,100844,100845],{"class":48,"line":222},[46,100846,100847],{"class":2253},"#与hstack传的参数类似，等价于：\n",[46,100849,100850],{"class":48,"line":636},[46,100851,100852],{"class":56},"np.vstack([aa,bb])\n",[19,100854,100194],{},[19,100856,100857],{},[3514,100858],{"alt":41,"src":100859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[19,100861,100690],{},[36,100863,100865],{"className":38,"code":100864,"language":40,"meta":41,"style":41},"#两个三行六列\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",[43,100866,100867,100871,100899,100927,100932,100937],{"__ignoreMap":41},[46,100868,100869],{"class":48,"line":49},[46,100870,100249],{"class":2253},[46,100872,100873,100875,100877,100879,100881,100883,100885,100887,100889,100891,100893,100895,100897],{"class":48,"line":60},[46,100874,97484],{"class":56},[46,100876,79],{"class":52},[46,100878,94965],{"class":56},[46,100880,2405],{"class":180},[46,100882,2565],{"class":56},[46,100884,2512],{"class":180},[46,100886,94970],{"class":56},[46,100888,2272],{"class":180},[46,100890,2565],{"class":56},[46,100892,2266],{"class":180},[46,100894,2565],{"class":56},[46,100896,2531],{"class":180},[46,100898,459],{"class":56},[46,100900,100901,100903,100905,100907,100909,100911,100913,100915,100917,100919,100921,100923,100925],{"class":48,"line":200},[46,100902,100282],{"class":56},[46,100904,79],{"class":52},[46,100906,94965],{"class":56},[46,100908,2524],{"class":180},[46,100910,2565],{"class":56},[46,100912,100293],{"class":180},[46,100914,94970],{"class":56},[46,100916,2272],{"class":180},[46,100918,2565],{"class":56},[46,100920,2266],{"class":180},[46,100922,2565],{"class":56},[46,100924,2531],{"class":180},[46,100926,459],{"class":56},[46,100928,100929],{"class":48,"line":211},[46,100930,100931],{"class":2253},"#使用vstack\n",[46,100933,100934],{"class":48,"line":222},[46,100935,100936],{"class":56},"np.vstack((aaa,bbb)).shape\n",[46,100938,100939],{"class":48,"line":636},[46,100940,100941],{"class":2253},"#输出：（4，3，6）\n",[14,100943,100945],{"id":100944},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[19,100947,100948],{},"该方法是三维数组特有的方法",[19,100950,100951],{},"也就是说",[19,100953,100954],{},"一维数组拼接方法用：concatenate()",[19,100956,100957],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[19,100959,100960],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[19,100962,100963],{},"四维数组及多维数组只能用concatenate进行拼接",[36,100965,100967],{"className":38,"code":100966,"language":40,"meta":41,"style":41},"#两个三行六列\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",[43,100968,100969,100973,101001,101029,101034,101039],{"__ignoreMap":41},[46,100970,100971],{"class":48,"line":49},[46,100972,100249],{"class":2253},[46,100974,100975,100977,100979,100981,100983,100985,100987,100989,100991,100993,100995,100997,100999],{"class":48,"line":60},[46,100976,97484],{"class":56},[46,100978,79],{"class":52},[46,100980,94965],{"class":56},[46,100982,2405],{"class":180},[46,100984,2565],{"class":56},[46,100986,2512],{"class":180},[46,100988,94970],{"class":56},[46,100990,2272],{"class":180},[46,100992,2565],{"class":56},[46,100994,2266],{"class":180},[46,100996,2565],{"class":56},[46,100998,2531],{"class":180},[46,101000,459],{"class":56},[46,101002,101003,101005,101007,101009,101011,101013,101015,101017,101019,101021,101023,101025,101027],{"class":48,"line":200},[46,101004,100282],{"class":56},[46,101006,79],{"class":52},[46,101008,94965],{"class":56},[46,101010,2524],{"class":180},[46,101012,2565],{"class":56},[46,101014,100293],{"class":180},[46,101016,94970],{"class":56},[46,101018,2272],{"class":180},[46,101020,2565],{"class":56},[46,101022,2266],{"class":180},[46,101024,2565],{"class":56},[46,101026,2531],{"class":180},[46,101028,459],{"class":56},[46,101030,101031],{"class":48,"line":211},[46,101032,101033],{"class":2253},"#使用dstack\n",[46,101035,101036],{"class":48,"line":222},[46,101037,101038],{"class":56},"np.dstack((aaa,bbb)).shape\n",[46,101040,101041],{"class":48,"line":636},[46,101042,101043],{"class":2253},"#结果：（2，3，12）\n",[2098,101045,101046],{},"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":41,"searchDepth":60,"depth":60,"links":101048},[101049,101050,101051,101052],{"id":99988,"depth":60,"text":99989},{"id":100602,"depth":60,"text":100603},{"id":100773,"depth":60,"text":100774},{"id":100944,"depth":60,"text":100945},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":99980,"description":25378},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":101059,"title":101060,"body":101061,"description":25378,"extension":2125,"meta":101336,"navigation":615,"path":101337,"seo":101338,"stem":101339,"__hash__":101340},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":101062,"toc":101334},[101063,101066,101069,101163,101166,101169,101172,101175,101178,101181,101184,101187,101331],[10,101064,101060],{"id":101065},"_7数组转置",[19,101067,101068],{},"使用transpose()函数",[36,101070,101072],{"className":38,"code":101071,"language":40,"meta":41,"style":41},"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",[43,101073,101074,101084,101108,101113,101118,101123,101128,101136,101140,101144,101149,101154,101159],{"__ignoreMap":41},[46,101075,101076,101078,101080,101082],{"class":48,"line":49},[46,101077,53],{"class":52},[46,101079,33358],{"class":56},[46,101081,398],{"class":52},[46,101083,33363],{"class":56},[46,101085,101086,101088,101090,101092,101094,101096,101098,101100,101102,101104,101106],{"class":48,"line":60},[46,101087,2426],{"class":56},[46,101089,79],{"class":52},[46,101091,33694],{"class":56},[46,101093,2405],{"class":180},[46,101095,2565],{"class":56},[46,101097,2710],{"class":180},[46,101099,94970],{"class":56},[46,101101,2481],{"class":180},[46,101103,2565],{"class":56},[46,101105,2266],{"class":180},[46,101107,459],{"class":56},[46,101109,101110],{"class":48,"line":200},[46,101111,101112],{"class":2253},"#二维数组转置\n",[46,101114,101115],{"class":48,"line":211},[46,101116,101117],{"class":2253},"#调用transpose()函数\n",[46,101119,101120],{"class":48,"line":222},[46,101121,101122],{"class":56},"a.transpose()\n",[46,101124,101125],{"class":48,"line":636},[46,101126,101127],{"class":2253},"#对于二维数组也可以采用.T来实现\n",[46,101129,101130,101133],{"class":48,"line":641},[46,101131,101132],{"class":56},"a.T",[46,101134,101135],{"class":2253},"#与上述代码一样\n",[46,101137,101138],{"class":48,"line":653},[46,101139,95527],{"class":2253},[46,101141,101142],{"class":48,"line":659},[46,101143,95891],{"class":173},[46,101145,101146],{"class":48,"line":665},[46,101147,101148],{"class":173},"array([[ 1,  4,  7, 10],\n",[46,101150,101151],{"class":48,"line":670},[46,101152,101153],{"class":173},"       [ 2,  5,  8, 11],\n",[46,101155,101156],{"class":48,"line":676},[46,101157,101158],{"class":173},"       [ 3,  6,  9, 12]])\n",[46,101160,101161],{"class":48,"line":682},[46,101162,95891],{"class":173},[19,101164,101165],{},"也可以使用np.transpose()的形式",[19,101167,101168],{},"#多维数组进行转置 np.transpose()",[19,101170,101171],{},"#对二维数组也可以使用np.transpose()进行转置",[19,101173,101174],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[19,101176,101177],{},"第二个参数，维度可以理解为用axis中的数来理解",[19,101179,101180],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[19,101182,101183],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[19,101185,101186],{},"四维及以上的数组也是一样的道理",[36,101188,101190],{"className":38,"code":101189,"language":40,"meta":41,"style":41},"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",[43,101191,101192,101220,101225,101230,101235,101253,101258,101290,101295,101300,101305,101326],{"__ignoreMap":41},[46,101193,101194,101196,101198,101200,101202,101204,101206,101208,101210,101212,101214,101216,101218],{"class":48,"line":49},[46,101195,3006],{"class":56},[46,101197,79],{"class":52},[46,101199,94965],{"class":56},[46,101201,2405],{"class":180},[46,101203,2565],{"class":56},[46,101205,2512],{"class":180},[46,101207,94970],{"class":56},[46,101209,2266],{"class":180},[46,101211,2565],{"class":56},[46,101213,2531],{"class":180},[46,101215,2565],{"class":56},[46,101217,2272],{"class":180},[46,101219,459],{"class":56},[46,101221,101222],{"class":48,"line":60},[46,101223,101224],{"class":56},"x.shape\n",[46,101226,101227],{"class":48,"line":200},[46,101228,101229],{"class":2253},"#结果：（3,6,2）\n",[46,101231,101232],{"class":48,"line":211},[46,101233,101234],{"class":2253},"#使用np.transpose()进行转置 变为(2,6,3)\n",[46,101236,101237,101240,101242,101244,101246,101248,101250],{"class":48,"line":222},[46,101238,101239],{"class":56},"np.transpose(x,(",[46,101241,2272],{"class":180},[46,101243,2565],{"class":56},[46,101245,2405],{"class":180},[46,101247,2565],{"class":56},[46,101249,2379],{"class":180},[46,101251,101252],{"class":56},")).shape\n",[46,101254,101255],{"class":48,"line":636},[46,101256,101257],{"class":2253},"#结果：(2,6,3)\n",[46,101259,101260,101262,101264,101266,101268,101270,101272,101274,101276,101278,101280,101282,101284,101286,101288],{"class":48,"line":641},[46,101261,100467],{"class":56},[46,101263,79],{"class":52},[46,101265,94965],{"class":56},[46,101267,2405],{"class":180},[46,101269,2565],{"class":56},[46,101271,2512],{"class":180},[46,101273,94970],{"class":56},[46,101275,2266],{"class":180},[46,101277,2565],{"class":56},[46,101279,2272],{"class":180},[46,101281,2565],{"class":56},[46,101283,2405],{"class":180},[46,101285,2565],{"class":56},[46,101287,2531],{"class":180},[46,101289,459],{"class":56},[46,101291,101292],{"class":48,"line":653},[46,101293,101294],{"class":56},"aaaa.shape\n",[46,101296,101297],{"class":48,"line":659},[46,101298,101299],{"class":2253},"#结果：（3，2，1，6）\n",[46,101301,101302],{"class":48,"line":665},[46,101303,101304],{"class":2253},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[46,101306,101307,101310,101312,101314,101316,101318,101320,101322,101324],{"class":48,"line":670},[46,101308,101309],{"class":56},"np.transpose(aaaa,(",[46,101311,2405],{"class":180},[46,101313,2565],{"class":56},[46,101315,2272],{"class":180},[46,101317,2565],{"class":56},[46,101319,2379],{"class":180},[46,101321,2565],{"class":56},[46,101323,2266],{"class":180},[46,101325,101252],{"class":56},[46,101327,101328],{"class":48,"line":676},[46,101329,101330],{"class":2253},"#结果：(2,1,3,6)\n",[2098,101332,101333],{},"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":41,"searchDepth":60,"depth":60,"links":101335},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":101060,"description":25378},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":101342,"title":101343,"body":101344,"description":25378,"extension":2125,"meta":102078,"navigation":615,"path":102079,"seo":102080,"stem":102081,"__hash__":102082},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":101345,"toc":102076},[101346,101349,101352,101355,101358,101361,101364,101367,101370,101479,101482,101485,102073],[10,101347,101343],{"id":101348},"_8数组分割",[19,101350,101351],{},"split分割",[19,101353,101354],{},"numpy.split(ary,indics_or_sections,axis)",[19,101356,101357],{},"解释：",[19,101359,101360],{},"ary:被分割的数组",[19,101362,101363],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[19,101365,101366],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[19,101368,101369],{},"①一维数组的分割",[36,101371,101373],{"className":38,"code":101372,"language":40,"meta":41,"style":41},"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",[43,101374,101375,101391,101396,101405,101409,101414,101422,101426,101431,101436,101449,101453,101458,101470,101474],{"__ignoreMap":41},[46,101376,101377,101379,101381,101383,101385,101387,101389],{"class":48,"line":49},[46,101378,2426],{"class":56},[46,101380,79],{"class":52},[46,101382,94965],{"class":56},[46,101384,2405],{"class":180},[46,101386,2565],{"class":56},[46,101388,2607],{"class":180},[46,101390,459],{"class":56},[46,101392,101393],{"class":48,"line":60},[46,101394,101395],{"class":2253},"#如果传入整数，必须能够平分，否则会报错\n",[46,101397,101398,101401,101403],{"class":48,"line":200},[46,101399,101400],{"class":56},"np.split(a,",[46,101402,2272],{"class":180},[46,101404,459],{"class":56},[46,101406,101407],{"class":48,"line":211},[46,101408,95527],{"class":2253},[46,101410,101411],{"class":48,"line":222},[46,101412,101413],{"class":2253},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[46,101415,101416,101418,101420],{"class":48,"line":636},[46,101417,101400],{"class":56},[46,101419,2481],{"class":180},[46,101421,459],{"class":56},[46,101423,101424],{"class":48,"line":641},[46,101425,95527],{"class":2253},[46,101427,101428],{"class":48,"line":653},[46,101429,101430],{"class":2253},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[46,101432,101433],{"class":48,"line":659},[46,101434,101435],{"class":2253},"#传入数组\n",[46,101437,101438,101441,101443,101445,101447],{"class":48,"line":665},[46,101439,101440],{"class":56},"np.split(a,[",[46,101442,2266],{"class":180},[46,101444,2565],{"class":56},[46,101446,2506],{"class":180},[46,101448,6673],{"class":56},[46,101450,101451],{"class":48,"line":670},[46,101452,95527],{"class":2253},[46,101454,101455],{"class":48,"line":676},[46,101456,101457],{"class":2253},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[46,101459,101460,101462,101464,101466,101468],{"class":48,"line":682},[46,101461,101440],{"class":56},[46,101463,2506],{"class":180},[46,101465,2565],{"class":56},[46,101467,2556],{"class":180},[46,101469,6673],{"class":56},[46,101471,101472],{"class":48,"line":688},[46,101473,95527],{"class":2253},[46,101475,101476],{"class":48,"line":693},[46,101477,101478],{"class":2253},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[19,101480,101481],{},"②二维数组的分割",[19,101483,101484],{},"使用split()",[36,101486,101488],{"className":38,"code":101487,"language":40,"meta":41,"style":41},"#二维数组分割\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",[43,101489,101490,101495,101519,101524,101533,101537,101541,101546,101551,101556,101561,101566,101571,101576,101580,101593,101597,101601,101605,101609,101613,101618,101623,101628,101632,101637,101653,101657,101661,101666,101671,101676,101681,101686,101691,101696,101701,101706,101711,101716,101721,101726,101731,101736,101741,101746,101751,101755,101759,101779,101783,101787,101792,101797,101802,101807,101812,101817,101822,101827,101832,101837,101842,101847,101852,101857,101862,101867,101872,101877,101881,101886,101895,101899,101903,101907,101911,101915,101919,101923,101927,101931,101940,101944,101948,101952,101956,101960,101964,101968,101972,101976,101980,101984,101988,101992,101996,102000,102004,102008,102012,102016,102020,102024,102037,102041,102045,102049,102053,102057,102061,102065,102069],{"__ignoreMap":41},[46,101491,101492],{"class":48,"line":49},[46,101493,101494],{"class":2253},"#二维数组分割\n",[46,101496,101497,101499,101501,101503,101505,101507,101509,101511,101513,101515,101517],{"class":48,"line":60},[46,101498,95269],{"class":56},[46,101500,79],{"class":52},[46,101502,94965],{"class":56},[46,101504,2405],{"class":180},[46,101506,2565],{"class":56},[46,101508,2512],{"class":180},[46,101510,94970],{"class":56},[46,101512,2531],{"class":180},[46,101514,2565],{"class":56},[46,101516,2531],{"class":180},[46,101518,459],{"class":56},[46,101520,101521],{"class":48,"line":200},[46,101522,101523],{"class":2253},"#默认axis=0  传入整数平均分,按行来的\n",[46,101525,101526,101529,101531],{"class":48,"line":211},[46,101527,101528],{"class":56},"np.split(aa,",[46,101530,2266],{"class":180},[46,101532,459],{"class":56},[46,101534,101535],{"class":48,"line":222},[46,101536,97725],{"class":2253},[46,101538,101539],{"class":48,"line":636},[46,101540,95891],{"class":173},[46,101542,101543],{"class":48,"line":641},[46,101544,101545],{"class":173},"[array([[ 1,  2,  3,  4,  5,  6],\n",[46,101547,101548],{"class":48,"line":653},[46,101549,101550],{"class":173},"        [ 7,  8,  9, 10, 11, 12]]),\n",[46,101552,101553],{"class":48,"line":659},[46,101554,101555],{"class":173}," array([[13, 14, 15, 16, 17, 18],\n",[46,101557,101558],{"class":48,"line":665},[46,101559,101560],{"class":173},"        [19, 20, 21, 22, 23, 24]]),\n",[46,101562,101563],{"class":48,"line":670},[46,101564,101565],{"class":173}," array([[25, 26, 27, 28, 29, 30],\n",[46,101567,101568],{"class":48,"line":676},[46,101569,101570],{"class":173},"        [31, 32, 33, 34, 35, 36]])]\n",[46,101572,101573],{"class":48,"line":682},[46,101574,101575],{"class":173}," '''\n",[46,101577,101578],{"class":48,"line":688},[46,101579,101435],{"class":2253},[46,101581,101582,101585,101587,101589,101591],{"class":48,"line":693},[46,101583,101584],{"class":56},"np.split(aa,[",[46,101586,2272],{"class":180},[46,101588,2565],{"class":56},[46,101590,2506],{"class":180},[46,101592,6673],{"class":56},[46,101594,101595],{"class":48,"line":699},[46,101596,97725],{"class":2253},[46,101598,101599],{"class":48,"line":705},[46,101600,95891],{"class":173},[46,101602,101603],{"class":48,"line":711},[46,101604,101545],{"class":173},[46,101606,101607],{"class":48,"line":717},[46,101608,101550],{"class":173},[46,101610,101611],{"class":48,"line":723},[46,101612,101555],{"class":173},[46,101614,101615],{"class":48,"line":729},[46,101616,101617],{"class":173},"        [19, 20, 21, 22, 23, 24],\n",[46,101619,101620],{"class":48,"line":735},[46,101621,101622],{"class":173},"        [25, 26, 27, 28, 29, 30]]),\n",[46,101624,101625],{"class":48,"line":740},[46,101626,101627],{"class":173}," array([[31, 32, 33, 34, 35, 36]])]\n",[46,101629,101630],{"class":48,"line":745},[46,101631,95891],{"class":173},[46,101633,101634],{"class":48,"line":763},[46,101635,101636],{"class":2253},"#axis=1 按照列来分\n",[46,101638,101639,101641,101643,101645,101647,101649,101651],{"class":48,"line":778},[46,101640,101528],{"class":56},[46,101642,2266],{"class":180},[46,101644,2565],{"class":56},[46,101646,49482],{"class":439},[46,101648,79],{"class":52},[46,101650,2405],{"class":180},[46,101652,459],{"class":56},[46,101654,101655],{"class":48,"line":789},[46,101656,97725],{"class":2253},[46,101658,101659],{"class":48,"line":794},[46,101660,95891],{"class":173},[46,101662,101663],{"class":48,"line":806},[46,101664,101665],{"class":173},"[array([[ 1,  2],\n",[46,101667,101668],{"class":48,"line":829},[46,101669,101670],{"class":173},"        [ 7,  8],\n",[46,101672,101673],{"class":48,"line":840},[46,101674,101675],{"class":173},"        [13, 14],\n",[46,101677,101678],{"class":48,"line":846},[46,101679,101680],{"class":173},"        [19, 20],\n",[46,101682,101683],{"class":48,"line":852},[46,101684,101685],{"class":173},"        [25, 26],\n",[46,101687,101688],{"class":48,"line":857},[46,101689,101690],{"class":173},"        [31, 32]]),\n",[46,101692,101693],{"class":48,"line":875},[46,101694,101695],{"class":173}," array([[ 3,  4],\n",[46,101697,101698],{"class":48,"line":892},[46,101699,101700],{"class":173},"        [ 9, 10],\n",[46,101702,101703],{"class":48,"line":898},[46,101704,101705],{"class":173},"        [15, 16],\n",[46,101707,101708],{"class":48,"line":903},[46,101709,101710],{"class":173},"        [21, 22],\n",[46,101712,101713],{"class":48,"line":908},[46,101714,101715],{"class":173},"        [27, 28],\n",[46,101717,101718],{"class":48,"line":925},[46,101719,101720],{"class":173},"        [33, 34]]),\n",[46,101722,101723],{"class":48,"line":1238},[46,101724,101725],{"class":173}," array([[ 5,  6],\n",[46,101727,101728],{"class":48,"line":1251},[46,101729,101730],{"class":173},"        [11, 12],\n",[46,101732,101733],{"class":48,"line":1256},[46,101734,101735],{"class":173},"        [17, 18],\n",[46,101737,101738],{"class":48,"line":1261},[46,101739,101740],{"class":173},"        [23, 24],\n",[46,101742,101743],{"class":48,"line":1274},[46,101744,101745],{"class":173},"        [29, 30],\n",[46,101747,101748],{"class":48,"line":10061},[46,101749,101750],{"class":173},"        [35, 36]])]\n",[46,101752,101753],{"class":48,"line":11720},[46,101754,101575],{"class":173},[46,101756,101757],{"class":48,"line":11745},[46,101758,101435],{"class":2253},[46,101760,101761,101763,101765,101767,101769,101771,101773,101775,101777],{"class":48,"line":11768},[46,101762,101584],{"class":56},[46,101764,2405],{"class":180},[46,101766,2565],{"class":56},[46,101768,2272],{"class":180},[46,101770,43581],{"class":56},[46,101772,49482],{"class":439},[46,101774,79],{"class":52},[46,101776,2405],{"class":180},[46,101778,459],{"class":56},[46,101780,101781],{"class":48,"line":11792},[46,101782,95527],{"class":2253},[46,101784,101785],{"class":48,"line":11797},[46,101786,95891],{"class":173},[46,101788,101789],{"class":48,"line":11802},[46,101790,101791],{"class":173},"[array([[ 1],\n",[46,101793,101794],{"class":48,"line":11807},[46,101795,101796],{"class":173},"        [ 7],\n",[46,101798,101799],{"class":48,"line":11816},[46,101800,101801],{"class":173},"        [13],\n",[46,101803,101804],{"class":48,"line":11821},[46,101805,101806],{"class":173},"        [19],\n",[46,101808,101809],{"class":48,"line":11827},[46,101810,101811],{"class":173},"        [25],\n",[46,101813,101814],{"class":48,"line":11848},[46,101815,101816],{"class":173},"        [31]]),\n",[46,101818,101819],{"class":48,"line":11854},[46,101820,101821],{"class":173}," array([[ 2],\n",[46,101823,101824],{"class":48,"line":11868},[46,101825,101826],{"class":173},"        [ 8],\n",[46,101828,101829],{"class":48,"line":11874},[46,101830,101831],{"class":173},"        [14],\n",[46,101833,101834],{"class":48,"line":11901},[46,101835,101836],{"class":173},"        [20],\n",[46,101838,101839],{"class":48,"line":11910},[46,101840,101841],{"class":173},"        [26],\n",[46,101843,101844],{"class":48,"line":11916},[46,101845,101846],{"class":173},"        [32]]),\n",[46,101848,101849],{"class":48,"line":11924},[46,101850,101851],{"class":173}," array([[ 3,  4,  5,  6],\n",[46,101853,101854],{"class":48,"line":11929},[46,101855,101856],{"class":173},"        [ 9, 10, 11, 12],\n",[46,101858,101859],{"class":48,"line":18605},[46,101860,101861],{"class":173},"        [15, 16, 17, 18],\n",[46,101863,101864],{"class":48,"line":18611},[46,101865,101866],{"class":173},"        [21, 22, 23, 24],\n",[46,101868,101869],{"class":48,"line":18634},[46,101870,101871],{"class":173},"        [27, 28, 29, 30],\n",[46,101873,101874],{"class":48,"line":18640},[46,101875,101876],{"class":173},"        [33, 34, 35, 36]])]\n",[46,101878,101879],{"class":48,"line":18663},[46,101880,95891],{"class":173},[46,101882,101883],{"class":48,"line":18677},[46,101884,101885],{"class":2253},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[46,101887,101888,101891,101893],{"class":48,"line":18697},[46,101889,101890],{"class":56},"np.vsplit(aa,",[46,101892,2266],{"class":180},[46,101894,459],{"class":56},[46,101896,101897],{"class":48,"line":18703},[46,101898,95527],{"class":2253},[46,101900,101901],{"class":48,"line":18714},[46,101902,95891],{"class":173},[46,101904,101905],{"class":48,"line":18737},[46,101906,101545],{"class":173},[46,101908,101909],{"class":48,"line":18759},[46,101910,101550],{"class":173},[46,101912,101913],{"class":48,"line":18764},[46,101914,101555],{"class":173},[46,101916,101917],{"class":48,"line":18770},[46,101918,101560],{"class":173},[46,101920,101921],{"class":48,"line":18784},[46,101922,101565],{"class":173},[46,101924,101925],{"class":48,"line":18797},[46,101926,101570],{"class":173},[46,101928,101929],{"class":48,"line":18802},[46,101930,95891],{"class":173},[46,101932,101933,101936,101938],{"class":48,"line":18816},[46,101934,101935],{"class":56},"np.hsplit(aa,",[46,101937,2266],{"class":180},[46,101939,459],{"class":56},[46,101941,101942],{"class":48,"line":18821},[46,101943,95527],{"class":2253},[46,101945,101946],{"class":48,"line":18827},[46,101947,95891],{"class":173},[46,101949,101950],{"class":48,"line":18832},[46,101951,101665],{"class":173},[46,101953,101954],{"class":48,"line":18846},[46,101955,101670],{"class":173},[46,101957,101958],{"class":48,"line":18851},[46,101959,101675],{"class":173},[46,101961,101962],{"class":48,"line":18856},[46,101963,101680],{"class":173},[46,101965,101966],{"class":48,"line":18870},[46,101967,101685],{"class":173},[46,101969,101970],{"class":48,"line":18882},[46,101971,101690],{"class":173},[46,101973,101974],{"class":48,"line":18887},[46,101975,101695],{"class":173},[46,101977,101978],{"class":48,"line":18900},[46,101979,101700],{"class":173},[46,101981,101982],{"class":48,"line":18905},[46,101983,101705],{"class":173},[46,101985,101986],{"class":48,"line":18910},[46,101987,101710],{"class":173},[46,101989,101990],{"class":48,"line":18915},[46,101991,101715],{"class":173},[46,101993,101994],{"class":48,"line":18928},[46,101995,101720],{"class":173},[46,101997,101998],{"class":48,"line":18933},[46,101999,101725],{"class":173},[46,102001,102002],{"class":48,"line":34607},[46,102003,101730],{"class":173},[46,102005,102006],{"class":48,"line":34613},[46,102007,101735],{"class":173},[46,102009,102010],{"class":48,"line":34619},[46,102011,101740],{"class":173},[46,102013,102014],{"class":48,"line":34625},[46,102015,101745],{"class":173},[46,102017,102018],{"class":48,"line":34631},[46,102019,101750],{"class":173},[46,102021,102022],{"class":48,"line":34642},[46,102023,95891],{"class":173},[46,102025,102026,102029,102031,102033,102035],{"class":48,"line":34648},[46,102027,102028],{"class":56},"np.vsplit(aa,[",[46,102030,2272],{"class":180},[46,102032,2565],{"class":56},[46,102034,2506],{"class":180},[46,102036,6673],{"class":56},[46,102038,102039],{"class":48,"line":34668},[46,102040,95527],{"class":2253},[46,102042,102043],{"class":48,"line":34674},[46,102044,95891],{"class":173},[46,102046,102047],{"class":48,"line":34685},[46,102048,101545],{"class":173},[46,102050,102051],{"class":48,"line":34691},[46,102052,101550],{"class":173},[46,102054,102055],{"class":48,"line":34697},[46,102056,101555],{"class":173},[46,102058,102059],{"class":48,"line":34703},[46,102060,101617],{"class":173},[46,102062,102063],{"class":48,"line":34709},[46,102064,101622],{"class":173},[46,102066,102067],{"class":48,"line":34715},[46,102068,101627],{"class":173},[46,102070,102071],{"class":48,"line":34721},[46,102072,101575],{"class":173},[2098,102074,102075],{},"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":41,"searchDepth":60,"depth":60,"links":102077},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":101343,"description":25378},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":102084,"title":102085,"body":102086,"description":25378,"extension":2125,"meta":102580,"navigation":615,"path":102581,"seo":102582,"stem":102583,"__hash__":102584},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":102087,"toc":102571},[102088,102091,102094,102119,102123,102182,102234,102238,102240,102276,102330,102332,102370,102441,102445,102450,102454,102457,102490,102493,102497,102500,102503,102506,102509,102514,102518,102521,102524,102527,102530,102535,102539,102544,102547,102568],[10,102089,102085],{"id":102090},"_9数学函数",[19,102092,102093],{},"补充回顾：python的列表推导式",[36,102095,102097],{"className":38,"code":102096,"language":40,"meta":41,"style":41},"[1\u002Fi for i in a]\n",[43,102098,102099],{"__ignoreMap":41},[46,102100,102101,102103,102105,102107,102110,102112,102114,102116],{"class":48,"line":49},[46,102102,3076],{"class":56},[46,102104,2405],{"class":180},[46,102106,2770],{"class":52},[46,102108,102109],{"class":56},"i ",[46,102111,1713],{"class":52},[46,102113,11442],{"class":56},[46,102115,1146],{"class":52},[46,102117,102118],{"class":56}," a]\n",[14,102120,102122],{"id":102121},"_91-求倒数","9.1 求倒数",[36,102124,102126],{"className":38,"code":102125,"language":40,"meta":41,"style":41},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[43,102127,102128,102133,102161,102173],{"__ignoreMap":41},[46,102129,102130],{"class":48,"line":49},[46,102131,102132],{"class":2253},"#数组求倒数\n",[46,102134,102135,102137,102139,102141,102143,102145,102147,102149,102151,102153,102155,102157,102159],{"class":48,"line":60},[46,102136,2426],{"class":56},[46,102138,79],{"class":52},[46,102140,3076],{"class":56},[46,102142,2405],{"class":180},[46,102144,2565],{"class":56},[46,102146,2272],{"class":180},[46,102148,2565],{"class":56},[46,102150,2266],{"class":180},[46,102152,2565],{"class":56},[46,102154,2481],{"class":180},[46,102156,2565],{"class":56},[46,102158,2506],{"class":180},[46,102160,35220],{"class":56},[46,102162,102163,102165,102167,102170],{"class":48,"line":200},[46,102164,2451],{"class":56},[46,102166,79],{"class":52},[46,102168,102169],{"class":56},"np.array(a)",[46,102171,102172],{"class":2253},"#将列表转换为数组\n",[46,102174,102175,102177,102179],{"class":48,"line":211},[46,102176,2405],{"class":180},[46,102178,2770],{"class":52},[46,102180,102181],{"class":56},"b\n",[36,102183,102185],{"className":38,"code":102184,"language":40,"meta":41,"style":41},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[43,102186,102187,102215,102224,102229],{"__ignoreMap":41},[46,102188,102189,102191,102193,102195,102197,102199,102201,102203,102205,102207,102209,102211,102213],{"class":48,"line":49},[46,102190,2426],{"class":56},[46,102192,79],{"class":52},[46,102194,3076],{"class":56},[46,102196,2405],{"class":180},[46,102198,2565],{"class":56},[46,102200,2272],{"class":180},[46,102202,2565],{"class":56},[46,102204,2266],{"class":180},[46,102206,2565],{"class":56},[46,102208,2481],{"class":180},[46,102210,2565],{"class":56},[46,102212,2506],{"class":180},[46,102214,35220],{"class":56},[46,102216,102217,102219,102221],{"class":48,"line":60},[46,102218,2451],{"class":56},[46,102220,79],{"class":52},[46,102222,102223],{"class":56},"np.array(a)\n",[46,102225,102226],{"class":48,"line":200},[46,102227,102228],{"class":2253},"#调用numpy中的函数reciprocal()\n",[46,102230,102231],{"class":48,"line":211},[46,102232,102233],{"class":56},"np.reciprocal(b)\n",[14,102235,102237],{"id":102236},"_92-求平方","9.2 求平方",[19,102239,96493],{},[36,102241,102243],{"className":38,"code":102242,"language":40,"meta":41,"style":41},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[43,102244,102245,102250,102255,102271],{"__ignoreMap":41},[46,102246,102247],{"class":48,"line":49},[46,102248,102249],{"class":2253},"#square()，求平方\n",[46,102251,102252],{"class":48,"line":60},[46,102253,102254],{"class":2253},"#一维数组\n",[46,102256,102257,102259,102261,102263,102265,102267,102269],{"class":48,"line":200},[46,102258,2426],{"class":56},[46,102260,79],{"class":52},[46,102262,94965],{"class":56},[46,102264,2405],{"class":180},[46,102266,2565],{"class":56},[46,102268,2633],{"class":180},[46,102270,459],{"class":56},[46,102272,102273],{"class":48,"line":211},[46,102274,102275],{"class":56},"np.square(a)\n",[36,102277,102279],{"className":38,"code":102278,"language":40,"meta":41,"style":41},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[43,102280,102281,102286,102291,102312],{"__ignoreMap":41},[46,102282,102283],{"class":48,"line":49},[46,102284,102285],{"class":2253},"#或者通过循环遍历的形式来计算\n",[46,102287,102288],{"class":48,"line":60},[46,102289,102290],{"class":2253},"#这是一个列表\n",[46,102292,102293,102296,102298,102300,102302,102304,102306,102309],{"class":48,"line":200},[46,102294,102295],{"class":56},"[i",[46,102297,2642],{"class":52},[46,102299,102109],{"class":56},[46,102301,1713],{"class":52},[46,102303,11442],{"class":56},[46,102305,1146],{"class":52},[46,102307,102308],{"class":56}," a]",[46,102310,102311],{"class":2253},"#这个求完之后在数列当中\n",[46,102313,102314,102317,102319,102321,102323,102325,102327],{"class":48,"line":211},[46,102315,102316],{"class":56},"np.array([i",[46,102318,2642],{"class":52},[46,102320,102109],{"class":56},[46,102322,1713],{"class":52},[46,102324,11442],{"class":56},[46,102326,1146],{"class":52},[46,102328,102329],{"class":56}," a])\n",[19,102331,95254],{},[36,102333,102335],{"className":38,"code":102334,"language":40,"meta":41,"style":41},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[43,102336,102337,102341,102365],{"__ignoreMap":41},[46,102338,102339],{"class":48,"line":49},[46,102340,95264],{"class":2253},[46,102342,102343,102345,102347,102349,102351,102353,102355,102357,102359,102361,102363],{"class":48,"line":60},[46,102344,95269],{"class":56},[46,102346,79],{"class":52},[46,102348,94965],{"class":56},[46,102350,2405],{"class":180},[46,102352,2565],{"class":56},[46,102354,2710],{"class":180},[46,102356,94970],{"class":56},[46,102358,2481],{"class":180},[46,102360,2565],{"class":56},[46,102362,2266],{"class":180},[46,102364,459],{"class":56},[46,102366,102367],{"class":48,"line":200},[46,102368,102369],{"class":56},"np.square(aa)\n",[36,102371,102373],{"className":38,"code":102372,"language":40,"meta":41,"style":41},"#传统的方式\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",[43,102374,102375,102380,102389,102405,102421,102436],{"__ignoreMap":41},[46,102376,102377],{"class":48,"line":49},[46,102378,102379],{"class":2253},"#传统的方式\n",[46,102381,102382,102384,102386],{"class":48,"line":60},[46,102383,100148],{"class":56},[46,102385,79],{"class":52},[46,102387,102388],{"class":56},"np.empty_like(aa)\n",[46,102390,102391,102393,102395,102397,102399,102401,102403],{"class":48,"line":200},[46,102392,1713],{"class":52},[46,102394,11442],{"class":56},[46,102396,1146],{"class":52},[46,102398,1149],{"class":180},[46,102400,1152],{"class":56},[46,102402,2481],{"class":180},[46,102404,1158],{"class":56},[46,102406,102407,102409,102411,102413,102415,102417,102419],{"class":48,"line":211},[46,102408,1140],{"class":52},[46,102410,11504],{"class":56},[46,102412,1146],{"class":52},[46,102414,1149],{"class":180},[46,102416,1152],{"class":56},[46,102418,2266],{"class":180},[46,102420,1158],{"class":56},[46,102422,102423,102426,102428,102431,102433],{"class":48,"line":222},[46,102424,102425],{"class":56},"        bb[i,j]",[46,102427,79],{"class":52},[46,102429,102430],{"class":56},"aa[i,j]",[46,102432,2642],{"class":52},[46,102434,102435],{"class":56},"aa[i,j]\n",[46,102437,102438],{"class":48,"line":636},[46,102439,102440],{"class":56},"bb\n",[14,102442,102444],{"id":102443},"_93-求各元素的符号","9.3 求各元素的符号",[19,102446,102447],{},[3514,102448],{"alt":41,"src":102449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,102451,102453],{"id":102452},"_94-modf函数","9.4 modf函数",[19,102455,102456],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[36,102458,102460],{"className":38,"code":102459,"language":40,"meta":41,"style":41},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[43,102461,102462,102485],{"__ignoreMap":41},[46,102463,102464,102466,102468,102470,102472,102474,102476,102478,102480,102483],{"class":48,"line":49},[46,102465,2426],{"class":56},[46,102467,79],{"class":52},[46,102469,94965],{"class":56},[46,102471,534],{"class":52},[46,102473,2633],{"class":180},[46,102475,2565],{"class":56},[46,102477,2633],{"class":180},[46,102479,2565],{"class":56},[46,102481,102482],{"class":180},"0.3",[46,102484,459],{"class":56},[46,102486,102487],{"class":48,"line":60},[46,102488,102489],{"class":56},"np.modf(a)\n",[19,102491,102492],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,102494,102496],{"id":102495},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[19,102498,102499],{},"np.cell()",[19,102501,102502],{},"np.floor()",[19,102504,102505],{},"np.rint()",[19,102507,102508],{},"对各元素分别向上取整、向下取整、四舍五入",[19,102510,102511],{},[3514,102512],{"alt":41,"src":102513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,102515,102517],{"id":102516},"_96-around函数","9.6 around()函数",[19,102519,102520],{},"around()函数也可以实现对数的小数位数进行操作",[19,102522,102523],{},"其中的参数：",[19,102525,102526],{},"1.要传的数组",[19,102528,102529],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[19,102531,102532],{},[3514,102533],{"alt":41,"src":102534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,102536,102538],{"id":102537},"_97-三角函数","9.7 三角函数",[19,102540,102541],{},[3514,102542],{"alt":41,"src":102543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[19,102545,102546],{},"引入图像模块非常重要",[36,102548,102550],{"className":38,"code":102549,"language":40,"meta":41,"style":41},"from matplotlib import pyplot as plt\n",[43,102551,102552],{"__ignoreMap":41},[46,102553,102554,102556,102559,102561,102564,102566],{"class":48,"line":49},[46,102555,957],{"class":52},[46,102557,102558],{"class":56}," matplotlib ",[46,102560,53],{"class":52},[46,102562,102563],{"class":56}," pyplot ",[46,102565,398],{"class":52},[46,102567,33414],{"class":56},[2098,102569,102570],{},"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":41,"searchDepth":60,"depth":60,"links":102572},[102573,102574,102575,102576,102577,102578,102579],{"id":102121,"depth":60,"text":102122},{"id":102236,"depth":60,"text":102237},{"id":102443,"depth":60,"text":102444},{"id":102452,"depth":60,"text":102453},{"id":102495,"depth":60,"text":102496},{"id":102516,"depth":60,"text":102517},{"id":102537,"depth":60,"text":102538},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":102085,"description":25378},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":102586,"title":102587,"body":102588,"description":25378,"extension":2125,"meta":102592,"navigation":615,"path":102593,"seo":102594,"stem":102595,"__hash__":102596},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":102589,"toc":102590},[],{"title":41,"searchDepth":60,"depth":60,"links":102591},[],{"category":52388},"\u002Fwiki\u002F2025-08-14-numpy",{"title":102587,"description":25378},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":102598,"title":102599,"body":102600,"description":41,"extension":2125,"meta":104539,"navigation":615,"path":104540,"seo":104541,"stem":104542,"__hash__":104543},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":102601,"toc":104515},[102602,102605,102607,102610,102613,102619,102622,102645,102648,102682,102685,102726,102728,102730,102811,102814,102858,102861,102877,102880,102894,102897,102900,102941,102944,102978,102980,102983,102989,102994,103014,103018,103021,103085,103088,103106,103110,103113,103142,103151,103157,103161,103164,103170,103181,103183,103186,103215,103218,103478,103480,103483,103494,103497,103500,103522,103529,103532,103550,103553,103556,103570,103578,103581,103605,103611,103614,103617,103627,103639,103659,103668,103688,103698,103722,103735,103749,103754,103795,103812,103837,103849,103869,103875,103920,103939,103956,103969,103985,103992,104004,104013,104048,104069,104094,104107,104131,104146,104171,104174,104195,104204,104207,104218,104220,104223,104229,104241,104248,104250,104253,104265,104268,104282,104285,104295,104305,104308,104347,104350,104352,104358,104361,104375,104379,104382,104412,104416,104419,104442,104450,104453,104459,104465,104468,104470,104498,104500,104503,104509,104512],[10,102603,102599],{"id":102604},"_1环境安装与第一个-mujoco-程序",[14,102606,17],{"id":16},[19,102608,102609],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[19,102611,102612],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[36,102614,102617],{"className":102615,"code":102616,"language":571,"meta":41},[569],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[43,102618,102616],{"__ignoreMap":41},[19,102620,102621],{},"需要掌握:",[23,102623,102624,102627,102630,102635,102640],{},[26,102625,102626],{},"Fedora 44 下 MuJoCo 的系统依赖",[26,102628,102629],{},"Python 虚拟环境创建",[26,102631,102632],{},[43,102633,102634],{},"mujoco.MjModel",[26,102636,102637],{},[43,102638,102639],{},"mujoco.MjData",[26,102641,102642],{},[43,102643,102644],{},"mujoco.mj_step(model, data)",[19,102646,102647],{},"MuJoCo 中最重要的两个对象:",[97,102649,102650,102660],{},[100,102651,102652],{},[103,102653,102654,102657],{},[106,102655,102656],{"align":108},"对象",[106,102658,102659],{"align":108},"含义",[120,102661,102662,102672],{},[103,102663,102664,102669],{},[125,102665,102666],{"align":108},[43,102667,102668],{},"MjModel",[125,102670,102671],{"align":108},"模型结构，来自 XML，基本不随时间变化",[103,102673,102674,102679],{},[125,102675,102676],{"align":108},[43,102677,102678],{},"MjData",[125,102680,102681],{"align":108},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[19,102683,102684],{},"可以先用一个类比理解：",[97,102686,102687,102697],{},[100,102688,102689],{},[103,102690,102691,102694],{},[106,102692,102693],{"align":108},"类比",[106,102695,102696],{"align":108},"MuJoCo 对象",[120,102698,102699,102708,102717],{},[103,102700,102701,102704],{},[125,102702,102703],{"align":108},"游戏地图和角色配置",[125,102705,102706],{"align":108},[43,102707,102668],{},[103,102709,102710,102713],{},[125,102711,102712],{"align":108},"游戏运行到当前帧的状态",[125,102714,102715],{"align":108},[43,102716,102678],{},[103,102718,102719,102722],{},[125,102720,102721],{"align":108},"前进一帧",[125,102723,102724],{"align":108},[43,102725,102644],{},[14,102727,154],{"id":153},[19,102729,157],{},[36,102731,102733],{"className":160,"code":102732,"language":162,"meta":41,"style":41},"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",[43,102734,102735,102747,102760,102770,102778,102786,102800],{"__ignoreMap":41},[46,102736,102737,102739,102741,102743,102745],{"class":48,"line":49},[46,102738,170],{"class":169},[46,102740,174],{"class":173},[46,102742,177],{"class":173},[46,102744,181],{"class":180},[46,102746,184],{"class":180},[46,102748,102749,102752,102755,102758],{"class":48,"line":60},[46,102750,102751],{"class":173},"  python3",[46,102753,102754],{"class":173}," python3-pip",[46,102756,102757],{"class":173}," python3-virtualenv",[46,102759,184],{"class":180},[46,102761,102762,102764,102766,102768],{"class":48,"line":200},[46,102763,189],{"class":173},[46,102765,192],{"class":173},[46,102767,195],{"class":173},[46,102769,184],{"class":180},[46,102771,102772,102774,102776],{"class":48,"line":211},[46,102773,203],{"class":173},[46,102775,206],{"class":173},[46,102777,184],{"class":180},[46,102779,102780,102782,102784],{"class":48,"line":222},[46,102781,214],{"class":173},[46,102783,217],{"class":173},[46,102785,184],{"class":180},[46,102787,102788,102790,102792,102794,102796,102798],{"class":48,"line":636},[46,102789,225],{"class":173},[46,102791,228],{"class":173},[46,102793,231],{"class":173},[46,102795,234],{"class":173},[46,102797,1981],{"class":173},[46,102799,184],{"class":180},[46,102801,102802,102805,102808],{"class":48,"line":641},[46,102803,102804],{"class":173},"  gcc",[46,102806,102807],{"class":173}," gcc-c++",[46,102809,102810],{"class":173}," make\n",[19,102812,102813],{},"创建 Python 环境:",[36,102815,102817],{"className":160,"code":102816,"language":162,"meta":41,"style":41},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[43,102818,102819,102833,102841],{"__ignoreMap":41},[46,102820,102821,102824,102827,102830],{"class":48,"line":49},[46,102822,102823],{"class":169},"python3",[46,102825,102826],{"class":180}," -m",[46,102828,102829],{"class":173}," venv",[46,102831,102832],{"class":173}," .venv\n",[46,102834,102835,102838],{"class":48,"line":60},[46,102836,102837],{"class":180},"source",[46,102839,102840],{"class":173}," .venv\u002Fbin\u002Factivate\n",[46,102842,102843,102845,102847,102850,102852,102855],{"class":48,"line":200},[46,102844,40],{"class":169},[46,102846,102826],{"class":180},[46,102848,102849],{"class":173}," pip",[46,102851,177],{"class":173},[46,102853,102854],{"class":180}," --upgrade",[46,102856,102857],{"class":173}," pip\n",[19,102859,102860],{},"pip 安装:",[36,102862,102864],{"className":160,"code":102863,"language":162,"meta":41,"style":41},"pip install \"mujoco>=2.3\" numpy\n",[43,102865,102866],{"__ignoreMap":41},[46,102867,102868,102870,102872,102874],{"class":48,"line":49},[46,102869,250],{"class":169},[46,102871,177],{"class":173},[46,102873,255],{"class":173},[46,102875,102876],{"class":173}," numpy\n",[19,102878,102879],{},"安装完成后，先做最小检查：",[36,102881,102883],{"className":160,"code":102882,"language":162,"meta":41,"style":41},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[43,102884,102885],{"__ignoreMap":41},[46,102886,102887,102889,102891],{"class":48,"line":49},[46,102888,40],{"class":169},[46,102890,32344],{"class":180},[46,102892,102893],{"class":173}," \"import mujoco; print(mujoco.__version__)\"\n",[19,102895,102896],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[19,102898,102899],{},"conda 安装:",[36,102901,102903],{"className":160,"code":102902,"language":162,"meta":41,"style":41},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[43,102904,102905,102922,102931],{"__ignoreMap":41},[46,102906,102907,102909,102911,102913,102916,102918,102920],{"class":48,"line":49},[46,102908,274],{"class":169},[46,102910,277],{"class":173},[46,102912,280],{"class":180},[46,102914,102915],{"class":173}," mujoco-study",[46,102917,286],{"class":173},[46,102919,289],{"class":180},[46,102921,292],{"class":180},[46,102923,102924,102926,102928],{"class":48,"line":60},[46,102925,274],{"class":169},[46,102927,299],{"class":173},[46,102929,102930],{"class":173}," mujoco-study\n",[46,102932,102933,102935,102937,102939],{"class":48,"line":200},[46,102934,250],{"class":169},[46,102936,177],{"class":173},[46,102938,255],{"class":173},[46,102940,102876],{"class":173},[19,102942,102943],{},"版本冲突说明:",[23,102945,102946,102952,102961,102970],{},[26,102947,102948,102949,365],{},"不要安装 ",[43,102950,102951],{},"mujoco-py",[26,102953,102954,102955,1700,102957,102960],{},"如果旧项目里同时安装了 ",[43,102956,102951],{},[43,102958,102959],{},"mujoco","，建议新建干净虚拟环境。",[26,102962,102963,102966,102967,365],{},[43,102964,102965],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[43,102968,102969],{},"~\u002F.mujoco\u002Fmujoco210",[26,102971,102972,102973,2006,102975,102977],{},"离屏渲染可能涉及 OpenGL 后端，",[43,102974,2005],{},[43,102976,2009],{}," 在不同机器上可能存在版本差异。",[14,102979,376],{"id":375},[19,102981,102982],{},"MuJoCo 的基本执行流程:",[36,102984,102987],{"className":102985,"code":102986,"language":571,"meta":41},[569],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[43,102988,102986],{"__ignoreMap":41},[19,102990,102991,102993],{},[43,102992,102668],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[19,102995,102996,102998,102999,2400,103002,2400,103005,2400,103008,2400,103011,365],{},[43,102997,102678],{}," 存放仿真运行时状态，例如 ",[43,103000,103001],{},"data.time",[43,103003,103004],{},"data.qpos",[43,103006,103007],{},"data.qvel",[43,103009,103010],{},"data.ctrl",[43,103012,103013],{},"data.xpos",[479,103015,103017],{"id":103016},"xml-是什么","XML 是什么",[19,103019,103020],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[36,103022,103024],{"className":1350,"code":103023,"language":1352,"meta":41,"style":41},"\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",[43,103025,103026,103047,103077],{"__ignoreMap":41},[46,103027,103028,103030,103032,103034,103036,103038,103040,103042,103045],{"class":48,"line":49},[46,103029,821],{"class":56},[46,103031,53767],{"class":1361},[46,103033,1364],{"class":169},[46,103035,79],{"class":56},[46,103037,55456],{"class":173},[46,103039,1371],{"class":169},[46,103041,79],{"class":56},[46,103043,103044],{"class":173},"\"0 0 1\"",[46,103046,53274],{"class":56},[46,103048,103049,103051,103054,103056,103058,103061,103063,103065,103067,103070,103072,103075],{"class":48,"line":60},[46,103050,54111],{"class":56},[46,103052,103053],{"class":1361},"geom",[46,103055,1364],{"class":169},[46,103057,79],{"class":56},[46,103059,103060],{"class":173},"\"box_geom\"",[46,103062,55789],{"class":169},[46,103064,79],{"class":56},[46,103066,55456],{"class":173},[46,103068,103069],{"class":169}," size",[46,103071,79],{"class":56},[46,103073,103074],{"class":173},"\"0.1 0.1 0.1\"",[46,103076,1387],{"class":56},[46,103078,103079,103081,103083],{"class":48,"line":200},[46,103080,53752],{"class":56},[46,103082,53767],{"class":1361},[46,103084,53274],{"class":56},[19,103086,103087],{},"这段意思是：",[23,103089,103090,103096,103103],{},[26,103091,103092,103093,103095],{},"创建一个叫 ",[43,103094,55679],{}," 的刚体。",[26,103097,103098,103099,103102],{},"它初始放在 ",[43,103100,103101],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[26,103104,103105],{},"它里面有一个盒子形状的几何体。",[479,103107,103109],{"id":103108},"timestep-是什么","timestep 是什么",[19,103111,103112],{},"XML 里的：",[36,103114,103116],{"className":1350,"code":103115,"language":1352,"meta":41,"style":41},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[43,103117,103118],{"__ignoreMap":41},[46,103119,103120,103122,103124,103127,103129,103132,103135,103137,103140],{"class":48,"line":49},[46,103121,821],{"class":56},[46,103123,71131],{"class":1361},[46,103125,103126],{"class":169}," timestep",[46,103128,79],{"class":56},[46,103130,103131],{"class":173},"\"0.01\"",[46,103133,103134],{"class":169}," gravity",[46,103136,79],{"class":56},[46,103138,103139],{"class":173},"\"0 0 -9.81\"",[46,103141,1387],{"class":56},[19,103143,103144,103145,103147,103148,103150],{},"表示每调用一次 ",[43,103146,504],{},"，仿真时间前进 ",[43,103149,40958],{}," 秒。循环 100 次，大约就是 1 秒：",[36,103152,103155],{"className":103153,"code":103154,"language":571,"meta":41},[569],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[43,103156,103154],{"__ignoreMap":41},[479,103158,103160],{"id":103159},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[19,103162,103163],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[36,103165,103168],{"className":103166,"code":103167,"language":571,"meta":41},[569],"x y z qw qx qy qz\n",[43,103169,103167],{"__ignoreMap":41},[19,103171,103172,103173,103176,103177,103180],{},"表示一个自由刚体的位置和姿态。其中 ",[43,103174,103175],{},"x y z"," 是位置，",[43,103178,103179],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,103182,595],{"id":594},[19,103184,103185],{},"新建文件:",[36,103187,103189],{"className":160,"code":103188,"language":162,"meta":41,"style":41},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[43,103190,103191,103201,103208],{"__ignoreMap":41},[46,103192,103193,103196,103198],{"class":48,"line":49},[46,103194,103195],{"class":169},"mkdir",[46,103197,31203],{"class":180},[46,103199,103200],{"class":173}," mujoco_tutorial\n",[46,103202,103203,103206],{"class":48,"line":60},[46,103204,103205],{"class":180},"cd",[46,103207,103200],{"class":173},[46,103209,103210,103212],{"class":48,"line":200},[46,103211,941],{"class":169},[46,103213,103214],{"class":173}," ch1_first_sim.py\n",[19,103216,103217],{},"写入:",[36,103219,103221],{"className":38,"code":103220,"language":40,"meta":41,"style":41},"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",[43,103222,103223,103229,103233,103237,103245,103250,103254,103258,103262,103267,103271,103275,103279,103284,103288,103292,103296,103300,103304,103308,103320,103332,103340,103344,103356,103368,103380,103392,103404,103408,103424,103428,103432,103443,103454,103458,103462,103474],{"__ignoreMap":41},[46,103224,103225,103227],{"class":48,"line":49},[46,103226,53],{"class":52},[46,103228,623],{"class":56},[46,103230,103231],{"class":48,"line":60},[46,103232,616],{"emptyLinePlaceholder":615},[46,103234,103235],{"class":48,"line":200},[46,103236,616],{"emptyLinePlaceholder":615},[46,103238,103239,103241,103243],{"class":48,"line":211},[46,103240,644],{"class":180},[46,103242,647],{"class":52},[46,103244,650],{"class":173},[46,103246,103247],{"class":48,"line":222},[46,103248,103249],{"class":173},"\u003Cmujoco model=\"first_sim\">\n",[46,103251,103252],{"class":48,"line":636},[46,103253,662],{"class":173},[46,103255,103256],{"class":48,"line":641},[46,103257,616],{"emptyLinePlaceholder":615},[46,103259,103260],{"class":48,"line":653},[46,103261,673],{"class":173},[46,103263,103264],{"class":48,"line":659},[46,103265,103266],{"class":173},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[46,103268,103269],{"class":48,"line":665},[46,103270,616],{"emptyLinePlaceholder":615},[46,103272,103273],{"class":48,"line":670},[46,103274,696],{"class":173},[46,103276,103277],{"class":48,"line":676},[46,103278,702],{"class":173},[46,103280,103281],{"class":48,"line":682},[46,103282,103283],{"class":173},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[46,103285,103286],{"class":48,"line":688},[46,103287,714],{"class":173},[46,103289,103290],{"class":48,"line":693},[46,103291,720],{"class":173},[46,103293,103294],{"class":48,"line":699},[46,103295,726],{"class":173},[46,103297,103298],{"class":48,"line":705},[46,103299,732],{"class":173},[46,103301,103302],{"class":48,"line":711},[46,103303,616],{"emptyLinePlaceholder":615},[46,103305,103306],{"class":48,"line":717},[46,103307,616],{"emptyLinePlaceholder":615},[46,103309,103310,103312,103314,103316,103318],{"class":48,"line":723},[46,103311,748],{"class":52},[46,103313,751],{"class":169},[46,103315,754],{"class":56},[46,103317,757],{"class":180},[46,103319,760],{"class":56},[46,103321,103322,103324,103326,103328,103330],{"class":48,"line":729},[46,103323,766],{"class":56},[46,103325,79],{"class":52},[46,103327,771],{"class":56},[46,103329,644],{"class":180},[46,103331,459],{"class":56},[46,103333,103334,103336,103338],{"class":48,"line":735},[46,103335,781],{"class":56},[46,103337,79],{"class":52},[46,103339,786],{"class":56},[46,103341,103342],{"class":48,"line":740},[46,103343,616],{"emptyLinePlaceholder":615},[46,103345,103346,103348,103350,103353],{"class":48,"line":745},[46,103347,1227],{"class":180},[46,103349,1152],{"class":56},[46,103351,103352],{"class":173},"\"nq:\"",[46,103354,103355],{"class":56},", model.nq)\n",[46,103357,103358,103360,103362,103365],{"class":48,"line":763},[46,103359,1227],{"class":180},[46,103361,1152],{"class":56},[46,103363,103364],{"class":173},"\"nv:\"",[46,103366,103367],{"class":56},", model.nv)\n",[46,103369,103370,103372,103374,103377],{"class":48,"line":778},[46,103371,1227],{"class":180},[46,103373,1152],{"class":56},[46,103375,103376],{"class":173},"\"nu:\"",[46,103378,103379],{"class":56},", model.nu)\n",[46,103381,103382,103384,103386,103389],{"class":48,"line":789},[46,103383,1227],{"class":180},[46,103385,1152],{"class":56},[46,103387,103388],{"class":173},"\"initial time:\"",[46,103390,103391],{"class":56},", data.time)\n",[46,103393,103394,103396,103398,103401],{"class":48,"line":794},[46,103395,1227],{"class":180},[46,103397,1152],{"class":56},[46,103399,103400],{"class":173},"\"initial qpos:\"",[46,103402,103403],{"class":56},", data.qpos.copy())\n",[46,103405,103406],{"class":48,"line":806},[46,103407,616],{"emptyLinePlaceholder":615},[46,103409,103410,103412,103414,103416,103418,103420,103422],{"class":48,"line":829},[46,103411,1140],{"class":52},[46,103413,1143],{"class":56},[46,103415,1146],{"class":52},[46,103417,1149],{"class":180},[46,103419,1152],{"class":56},[46,103421,1155],{"class":180},[46,103423,1158],{"class":56},[46,103425,103426],{"class":48,"line":840},[46,103427,414],{"class":56},[46,103429,103430],{"class":48,"line":846},[46,103431,616],{"emptyLinePlaceholder":615},[46,103433,103434,103436,103438,103441],{"class":48,"line":852},[46,103435,1227],{"class":180},[46,103437,1152],{"class":56},[46,103439,103440],{"class":173},"\"final time:\"",[46,103442,103391],{"class":56},[46,103444,103445,103447,103449,103452],{"class":48,"line":857},[46,103446,1227],{"class":180},[46,103448,1152],{"class":56},[46,103450,103451],{"class":173},"\"final qpos:\"",[46,103453,103403],{"class":56},[46,103455,103456],{"class":48,"line":875},[46,103457,616],{"emptyLinePlaceholder":615},[46,103459,103460],{"class":48,"line":892},[46,103461,616],{"emptyLinePlaceholder":615},[46,103463,103464,103466,103468,103470,103472],{"class":48,"line":898},[46,103465,911],{"class":52},[46,103467,914],{"class":180},[46,103469,917],{"class":52},[46,103471,920],{"class":173},[46,103473,760],{"class":56},[46,103475,103476],{"class":48,"line":903},[46,103477,928],{"class":56},[479,103479,1293],{"id":1293},[19,103481,103482],{},"导入库：",[36,103484,103486],{"className":38,"code":103485,"language":40,"meta":41,"style":41},"import mujoco\n",[43,103487,103488],{"__ignoreMap":41},[46,103489,103490,103492],{"class":48,"line":49},[46,103491,53],{"class":52},[46,103493,623],{"class":56},[19,103495,103496],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[19,103498,103499],{},"定义 XML：",[36,103501,103503],{"className":38,"code":103502,"language":40,"meta":41,"style":41},"XML = \"\"\"\n...\n\"\"\"\n",[43,103504,103505,103513,103518],{"__ignoreMap":41},[46,103506,103507,103509,103511],{"class":48,"line":49},[46,103508,644],{"class":180},[46,103510,647],{"class":52},[46,103512,650],{"class":173},[46,103514,103515],{"class":48,"line":60},[46,103516,103517],{"class":173},"...\n",[46,103519,103520],{"class":48,"line":200},[46,103521,732],{"class":173},[19,103523,103524,103525,103528],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[43,103526,103527],{},"freejoint"," 的方块。",[19,103530,103531],{},"编译模型：",[36,103533,103535],{"className":38,"code":103534,"language":40,"meta":41,"style":41},"model = mujoco.MjModel.from_xml_string(XML)\n",[43,103536,103537],{"__ignoreMap":41},[46,103538,103539,103542,103544,103546,103548],{"class":48,"line":49},[46,103540,103541],{"class":56},"model ",[46,103543,79],{"class":52},[46,103545,771],{"class":56},[46,103547,644],{"class":180},[46,103549,459],{"class":56},[19,103551,103552],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[19,103554,103555],{},"创建数据：",[36,103557,103559],{"className":38,"code":103558,"language":40,"meta":41,"style":41},"data = mujoco.MjData(model)\n",[43,103560,103561],{"__ignoreMap":41},[46,103562,103563,103566,103568],{"class":48,"line":49},[46,103564,103565],{"class":56},"data ",[46,103567,79],{"class":52},[46,103569,786],{"class":56},[19,103571,103572,103574,103575,103577],{},[43,103573,1516],{}," 会保存仿真当前状态。刚创建时，时间是 ",[43,103576,2379],{},"，方块还在初始位置。",[19,103579,103580],{},"推进仿真：",[36,103582,103583],{"className":38,"code":1706,"language":40,"meta":41,"style":41},[43,103584,103585,103601],{"__ignoreMap":41},[46,103586,103587,103589,103591,103593,103595,103597,103599],{"class":48,"line":49},[46,103588,1713],{"class":52},[46,103590,1143],{"class":56},[46,103592,1146],{"class":52},[46,103594,1149],{"class":180},[46,103596,1152],{"class":56},[46,103598,1155],{"class":180},[46,103600,1158],{"class":56},[46,103602,103603],{"class":48,"line":60},[46,103604,1730],{"class":56},[19,103606,103607,103608,103610],{},"每次 ",[43,103609,504],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[479,103612,103613],{"id":103613},"代码逐行细讲",[19,103615,103616],{},"下面把完整代码按新手视角拆开讲。",[36,103618,103619],{"className":38,"code":103485,"language":40,"meta":41,"style":41},[43,103620,103621],{"__ignoreMap":41},[46,103622,103623,103625],{"class":48,"line":49},[46,103624,53],{"class":52},[46,103626,623],{"class":56},[19,103628,103629,103631,103632,2400,103634,2400,103636,365],{},[43,103630,53],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[43,103633,102634],{},[43,103635,102639],{},[43,103637,103638],{},"mujoco.mj_step",[36,103640,103641],{"className":38,"code":103502,"language":40,"meta":41,"style":41},[43,103642,103643,103651,103655],{"__ignoreMap":41},[46,103644,103645,103647,103649],{"class":48,"line":49},[46,103646,644],{"class":180},[46,103648,647],{"class":52},[46,103650,650],{"class":173},[46,103652,103653],{"class":48,"line":60},[46,103654,103517],{"class":173},[46,103656,103657],{"class":48,"line":200},[46,103658,732],{"class":173},[19,103660,103661,103663,103664,103667],{},[43,103662,644],{}," 是一个变量名。右边的三引号 ",[43,103665,103666],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[36,103669,103670],{"className":1350,"code":103249,"language":1352,"meta":41,"style":41},[43,103671,103672],{"__ignoreMap":41},[46,103673,103674,103676,103678,103681,103683,103686],{"class":48,"line":49},[46,103675,821],{"class":56},[46,103677,102959],{"class":1361},[46,103679,103680],{"class":169}," model",[46,103682,79],{"class":56},[46,103684,103685],{"class":173},"\"first_sim\"",[46,103687,53274],{"class":56},[19,103689,103690,103691,103694,103695,365],{},"这是 XML 的根标签。",[43,103692,103693],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[43,103696,103697],{},"first_sim",[36,103699,103700],{"className":1350,"code":103115,"language":1352,"meta":41,"style":41},[43,103701,103702],{"__ignoreMap":41},[46,103703,103704,103706,103708,103710,103712,103714,103716,103718,103720],{"class":48,"line":49},[46,103705,821],{"class":56},[46,103707,71131],{"class":1361},[46,103709,103126],{"class":169},[46,103711,79],{"class":56},[46,103713,103131],{"class":173},[46,103715,103134],{"class":169},[46,103717,79],{"class":56},[46,103719,103139],{"class":173},[46,103721,1387],{"class":56},[19,103723,103724,103726,103727,103730,103731,103734],{},[43,103725,71131],{}," 用来设置仿真参数。",[43,103728,103729],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[43,103732,103733],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[36,103736,103738],{"className":1350,"code":103737,"language":1352,"meta":41,"style":41},"\u003Cworldbody>\n",[43,103739,103740],{"__ignoreMap":41},[46,103741,103742,103744,103747],{"class":48,"line":49},[46,103743,821],{"class":56},[46,103745,103746],{"class":1361},"worldbody",[46,103748,53274],{"class":56},[19,103750,103751,103753],{},[43,103752,103746],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[36,103755,103757],{"className":1350,"code":103756,"language":1352,"meta":41,"style":41},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[43,103758,103759],{"__ignoreMap":41},[46,103760,103761,103763,103765,103767,103769,103772,103774,103776,103779,103781,103783,103786,103788,103790,103793],{"class":48,"line":49},[46,103762,821],{"class":56},[46,103764,103053],{"class":1361},[46,103766,1364],{"class":169},[46,103768,79],{"class":56},[46,103770,103771],{"class":173},"\"floor\"",[46,103773,55789],{"class":169},[46,103775,79],{"class":56},[46,103777,103778],{"class":173},"\"plane\"",[46,103780,103069],{"class":169},[46,103782,79],{"class":56},[46,103784,103785],{"class":173},"\"2 2 0.1\"",[46,103787,80732],{"class":169},[46,103789,79],{"class":56},[46,103791,103792],{"class":173},"\"0.8 0.8 0.8 1\"",[46,103794,1387],{"class":56},[19,103796,103797,103798,103800,103801,103804,103805,103808,103809,103811],{},"这行创建地面。",[43,103799,103053],{}," 是几何体。",[43,103802,103803],{},"name=\"floor\""," 是名字。",[43,103806,103807],{},"type=\"plane\""," 表示平面。",[43,103810,57075],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[36,103813,103815],{"className":1350,"code":103814,"language":1352,"meta":41,"style":41},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[43,103816,103817],{"__ignoreMap":41},[46,103818,103819,103821,103823,103825,103827,103829,103831,103833,103835],{"class":48,"line":49},[46,103820,821],{"class":56},[46,103822,53767],{"class":1361},[46,103824,1364],{"class":169},[46,103826,79],{"class":56},[46,103828,55456],{"class":173},[46,103830,1371],{"class":169},[46,103832,79],{"class":56},[46,103834,103044],{"class":173},[46,103836,53274],{"class":56},[19,103838,103839,103840,365,103842,103845,103846,103848],{},"这行创建一个刚体，名字叫 ",[43,103841,55679],{},[43,103843,103844],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[43,103847,103101],{},"，也就是离地面 1 米高。",[36,103850,103852],{"className":1350,"code":103851,"language":1352,"meta":41,"style":41},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[43,103853,103854],{"__ignoreMap":41},[46,103855,103856,103858,103860,103862,103864,103867],{"class":48,"line":49},[46,103857,821],{"class":56},[46,103859,103527],{"class":1361},[46,103861,1364],{"class":169},[46,103863,79],{"class":56},[46,103865,103866],{"class":173},"\"box_free\"",[46,103868,1387],{"class":56},[19,103870,103871,103872,103874],{},"这行很重要。",[43,103873,103527],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[36,103876,103878],{"className":1350,"code":103877,"language":1352,"meta":41,"style":41},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[43,103879,103880],{"__ignoreMap":41},[46,103881,103882,103884,103886,103888,103890,103892,103894,103896,103898,103900,103902,103904,103907,103909,103911,103913,103915,103918],{"class":48,"line":49},[46,103883,821],{"class":56},[46,103885,103053],{"class":1361},[46,103887,1364],{"class":169},[46,103889,79],{"class":56},[46,103891,103060],{"class":173},[46,103893,55789],{"class":169},[46,103895,79],{"class":56},[46,103897,55456],{"class":173},[46,103899,103069],{"class":169},[46,103901,79],{"class":56},[46,103903,103074],{"class":173},[46,103905,103906],{"class":169}," mass",[46,103908,79],{"class":56},[46,103910,5697],{"class":173},[46,103912,80732],{"class":169},[46,103914,79],{"class":56},[46,103916,103917],{"class":173},"\"1 0 0 1\"",[46,103919,1387],{"class":56},[19,103921,103922,103923,103926,103927,103930,103931,103934,103935,103938],{},"这行给 box body 添加一个盒子形状。",[43,103924,103925],{},"type=\"box\""," 表示形状是盒子。",[43,103928,103929],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[43,103932,103933],{},"mass=\"1\""," 表示质量是 1。",[43,103936,103937],{},"rgba=\"1 0 0 1\""," 表示红色。",[36,103940,103942],{"className":38,"code":103941,"language":40,"meta":41,"style":41},"def main() -> None:\n",[43,103943,103944],{"__ignoreMap":41},[46,103945,103946,103948,103950,103952,103954],{"class":48,"line":49},[46,103947,748],{"class":52},[46,103949,751],{"class":169},[46,103951,754],{"class":56},[46,103953,757],{"class":180},[46,103955,760],{"class":56},[19,103957,103958,103960,103961,103964,103965,103968],{},[43,103959,748],{}," 用来定义函数。这里定义了一个叫 ",[43,103962,103963],{},"main"," 的函数。",[43,103966,103967],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[36,103970,103971],{"className":38,"code":103534,"language":40,"meta":41,"style":41},[43,103972,103973],{"__ignoreMap":41},[46,103974,103975,103977,103979,103981,103983],{"class":48,"line":49},[46,103976,103541],{"class":56},[46,103978,79],{"class":52},[46,103980,771],{"class":56},[46,103982,644],{"class":180},[46,103984,459],{"class":56},[19,103986,103987,103988,103991],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[43,103989,103990],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[36,103993,103994],{"className":38,"code":103558,"language":40,"meta":41,"style":41},[43,103995,103996],{"__ignoreMap":41},[46,103997,103998,104000,104002],{"class":48,"line":49},[46,103999,103565],{"class":56},[46,104001,79],{"class":52},[46,104003,786],{"class":56},[19,104005,104006,104007,104009,104010,104012],{},"这行创建仿真数据。",[43,104008,1516],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[43,104011,1516],{}," 都会变化。",[36,104014,104016],{"className":38,"code":104015,"language":40,"meta":41,"style":41},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[43,104017,104018,104028,104038],{"__ignoreMap":41},[46,104019,104020,104022,104024,104026],{"class":48,"line":49},[46,104021,32398],{"class":180},[46,104023,1152],{"class":56},[46,104025,103352],{"class":173},[46,104027,103355],{"class":56},[46,104029,104030,104032,104034,104036],{"class":48,"line":60},[46,104031,32398],{"class":180},[46,104033,1152],{"class":56},[46,104035,103364],{"class":173},[46,104037,103367],{"class":56},[46,104039,104040,104042,104044,104046],{"class":48,"line":200},[46,104041,32398],{"class":180},[46,104043,1152],{"class":56},[46,104045,103376],{"class":173},[46,104047,103379],{"class":56},[19,104049,104050,104052,104053,104056,104057,104060,104061,104064,104065,104068],{},[43,104051,32398],{}," 用来输出信息。",[43,104054,104055],{},"model.nq"," 是位置变量数量，",[43,104058,104059],{},"model.nv"," 是速度变量数量，",[43,104062,104063],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[43,104066,104067],{},"nu"," 是 0。",[36,104070,104072],{"className":38,"code":104071,"language":40,"meta":41,"style":41},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[43,104073,104074,104084],{"__ignoreMap":41},[46,104075,104076,104078,104080,104082],{"class":48,"line":49},[46,104077,32398],{"class":180},[46,104079,1152],{"class":56},[46,104081,103388],{"class":173},[46,104083,103391],{"class":56},[46,104085,104086,104088,104090,104092],{"class":48,"line":60},[46,104087,32398],{"class":180},[46,104089,1152],{"class":56},[46,104091,103400],{"class":173},[46,104093,103403],{"class":56},[19,104095,104096,104097,104099,104100,104102,104103,104106],{},"这里打印初始时间和初始位置。",[43,104098,103001],{}," 一开始是 0。",[43,104101,103004],{}," 是位置数组。",[43,104104,104105],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[36,104108,104109],{"className":38,"code":1706,"language":40,"meta":41,"style":41},[43,104110,104111,104127],{"__ignoreMap":41},[46,104112,104113,104115,104117,104119,104121,104123,104125],{"class":48,"line":49},[46,104114,1713],{"class":52},[46,104116,1143],{"class":56},[46,104118,1146],{"class":52},[46,104120,1149],{"class":180},[46,104122,1152],{"class":56},[46,104124,1155],{"class":180},[46,104126,1158],{"class":56},[46,104128,104129],{"class":48,"line":60},[46,104130,1730],{"class":56},[19,104132,104133,104135,104136,104139,104140,104142,104143,104145],{},[43,104134,1713],{}," 是循环。",[43,104137,104138],{},"range(100)"," 表示循环 100 次。",[43,104141,3176],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[43,104144,504],{},"，仿真就前进一步。",[36,104147,104149],{"className":38,"code":104148,"language":40,"meta":41,"style":41},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[43,104150,104151,104161],{"__ignoreMap":41},[46,104152,104153,104155,104157,104159],{"class":48,"line":49},[46,104154,32398],{"class":180},[46,104156,1152],{"class":56},[46,104158,103440],{"class":173},[46,104160,103391],{"class":56},[46,104162,104163,104165,104167,104169],{"class":48,"line":60},[46,104164,32398],{"class":180},[46,104166,1152],{"class":56},[46,104168,103451],{"class":173},[46,104170,103403],{"class":56},[19,104172,104173],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[36,104175,104177],{"className":38,"code":104176,"language":40,"meta":41,"style":41},"if __name__ == \"__main__\":\n    main()\n",[43,104178,104179,104191],{"__ignoreMap":41},[46,104180,104181,104183,104185,104187,104189],{"class":48,"line":49},[46,104182,911],{"class":52},[46,104184,914],{"class":180},[46,104186,917],{"class":52},[46,104188,920],{"class":173},[46,104190,760],{"class":56},[46,104192,104193],{"class":48,"line":60},[46,104194,928],{"class":56},[19,104196,104197,104198,104201,104202,365],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[43,104199,104200],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[43,104203,104200],{},[19,104205,104206],{},"运行:",[36,104208,104210],{"className":160,"code":104209,"language":162,"meta":41,"style":41},"python ch1_first_sim.py\n",[43,104211,104212],{"__ignoreMap":41},[46,104213,104214,104216],{"class":48,"line":49},[46,104215,40],{"class":169},[46,104217,103214],{"class":173},[14,104219,1811],{"id":1810},[19,104221,104222],{},"你应该看到类似输出:",[36,104224,104227],{"className":104225,"code":104226,"language":571,"meta":41},[569],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[43,104228,104226],{"__ignoreMap":41},[19,104230,104231,104233,104234,104237,104238,365],{},[43,104232,103527],{}," 有 7 个位置变量: ",[43,104235,104236],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[43,104239,104240],{},"vx vy vz wx wy wz",[19,104242,104243,104244,104247],{},"你还会看到 ",[43,104245,104246],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,104249,1842],{"id":1841},[19,104251,104252],{},"确认版本:",[36,104254,104255],{"className":160,"code":102882,"language":162,"meta":41,"style":41},[43,104256,104257],{"__ignoreMap":41},[46,104258,104259,104261,104263],{"class":48,"line":49},[46,104260,40],{"class":169},[46,104262,32344],{"class":180},[46,104264,102893],{"class":173},[19,104266,104267],{},"确认导入的是官方 bindings:",[36,104269,104271],{"className":160,"code":104270,"language":162,"meta":41,"style":41},"python -c \"import mujoco; print(mujoco)\"\n",[43,104272,104273],{"__ignoreMap":41},[46,104274,104275,104277,104279],{"class":48,"line":49},[46,104276,40],{"class":169},[46,104278,32344],{"class":180},[46,104280,104281],{"class":173}," \"import mujoco; print(mujoco)\"\n",[19,104283,104284],{},"运行程序:",[36,104286,104287],{"className":160,"code":104209,"language":162,"meta":41,"style":41},[43,104288,104289],{"__ignoreMap":41},[46,104290,104291,104293],{"class":48,"line":49},[46,104292,40],{"class":169},[46,104294,103214],{"class":173},[19,104296,104297,104298,104301,104302,365],{},"检查 ",[43,104299,104300],{},"final time"," 是否约等于 ",[43,104303,104304],{},"1.0",[19,104306,104307],{},"再做几个小实验：",[23,104309,104310,104319,104327,104340],{},[26,104311,104312,104313,1938,104315,104318],{},"把 ",[43,104314,103844],{},[43,104316,104317],{},"pos=\"0 0 2\"","，观察初始高度变化。",[26,104320,104312,104321,1938,104323,104326],{},[43,104322,103733],{},[43,104324,104325],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[26,104328,104312,104329,1938,104331,104334,104335,104337,104338,365],{},[43,104330,103729],{},[43,104332,104333],{},"timestep=\"0.005\"","，观察 100 步后的 ",[43,104336,104300],{}," 是否变成约 ",[43,104339,37301],{},[26,104341,104342,104343,104346],{},"删除 ",[43,104344,104345],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[19,104348,104349],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,104351,1946],{"id":1945},[479,104353,104355],{"id":104354},"modulenotfounderror-no-module-named-mujoco",[43,104356,104357],{},"ModuleNotFoundError: No module named 'mujoco'",[19,104359,104360],{},"解决:",[36,104362,104364],{"className":160,"code":104363,"language":162,"meta":41,"style":41},"pip install \"mujoco>=2.3\"\n",[43,104365,104366],{"__ignoreMap":41},[46,104367,104368,104370,104372],{"class":48,"line":49},[46,104369,250],{"class":169},[46,104371,177],{"class":173},[46,104373,104374],{"class":173}," \"mujoco>=2.3\"\n",[479,104376,104378],{"id":104377},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[19,104380,104381],{},"先安装系统依赖:",[36,104383,104385],{"className":160,"code":104384,"language":162,"meta":41,"style":41},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[43,104386,104387],{"__ignoreMap":41},[46,104388,104389,104391,104393,104395,104397,104400,104402,104404,104406,104408,104410],{"class":48,"line":49},[46,104390,170],{"class":169},[46,104392,174],{"class":173},[46,104394,177],{"class":173},[46,104396,181],{"class":180},[46,104398,104399],{"class":173}," mesa-libGL",[46,104401,195],{"class":173},[46,104403,1971],{"class":173},[46,104405,217],{"class":173},[46,104407,1976],{"class":173},[46,104409,231],{"class":173},[46,104411,237],{"class":173},[479,104413,104415],{"id":104414},"xml-解析失败","XML 解析失败",[19,104417,104418],{},"检查:",[23,104420,104421,104424,104427,104433],{},[26,104422,104423],{},"标签是否闭合",[26,104425,104426],{},"属性是否带引号",[26,104428,104429,104430],{},"根节点是否是 ",[43,104431,104432],{},"\u003Cmujoco>",[26,104434,104435,104437,104438,104441],{},[43,104436,53767],{}," 是否放在 ",[43,104439,104440],{},"\u003Cworldbody>"," 内部",[479,104443,104445,104447,104448],{"id":104444},"final-time-不是严格等于-10",[43,104446,104300],{}," 不是严格等于 ",[43,104449,104304],{},[19,104451,104452],{},"这通常不是错误。浮点数计算可能得到：",[36,104454,104457],{"className":104455,"code":104456,"language":571,"meta":41},[569],"1.0000000000000007\n",[43,104458,104456],{"__ignoreMap":41},[19,104460,104461,104462,104464],{},"只要接近 ",[43,104463,104304],{}," 就正常。",[479,104466,104467],{"id":104467},"方块没有掉下来",[19,104469,2016],{},[23,104471,104472,104478,104484,104489],{},[26,104473,104474,104475],{},"方块 body 里是否有 ",[43,104476,104477],{},"\u003Cfreejoint\u002F>",[26,104479,104480,104481],{},"重力是否是 ",[43,104482,104483],{},"0 0 -9.81",[26,104485,104486,104487],{},"是否真的调用了 ",[43,104488,102644],{},[26,104490,104491,104492,104494,104495],{},"你看的是否是 ",[43,104493,104246],{},"，不是 ",[43,104496,104497],{},"initial qpos",[14,104499,2082],{"id":2081},[19,104501,104502],{},"本章你已经完成了 MuJoCo 的最小闭环：",[36,104504,104507],{"className":104505,"code":104506,"language":571,"meta":41},[569],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[43,104508,104506],{"__ignoreMap":41},[19,104510,104511],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[2098,104513,104514],{},"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":41,"searchDepth":60,"depth":60,"links":104516},[104517,104518,104519,104524,104528,104529,104530,104538],{"id":16,"depth":60,"text":17},{"id":153,"depth":60,"text":154},{"id":375,"depth":60,"text":376,"children":104520},[104521,104522,104523],{"id":103016,"depth":200,"text":103017},{"id":103108,"depth":200,"text":103109},{"id":103159,"depth":200,"text":103160},{"id":594,"depth":60,"text":595,"children":104525},[104526,104527],{"id":1293,"depth":200,"text":1293},{"id":103613,"depth":200,"text":103613},{"id":1810,"depth":60,"text":1811},{"id":1841,"depth":60,"text":1842},{"id":1945,"depth":60,"text":1946,"children":104531},[104532,104533,104534,104535,104537],{"id":104354,"depth":200,"text":104357},{"id":104377,"depth":200,"text":104378},{"id":104414,"depth":200,"text":104415},{"id":104444,"depth":200,"text":104536},"final time 不是严格等于 1.0",{"id":104467,"depth":200,"text":104467},{"id":2081,"depth":60,"text":2082},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":102599,"description":41},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":104545,"title":104546,"body":104547,"description":41,"extension":2125,"meta":106199,"navigation":615,"path":106200,"seo":106201,"stem":106202,"__hash__":106203},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":104548,"toc":106175},[104549,104552,104554,104557,104560,104577,104672,104675,104681,104683,104685,104709,104711,104725,104727,104768,104770,104783,104785,104788,104836,104848,104851,104854,104860,104873,104940,104943,104962,104965,104968,104974,104976,104985,104988,104992,105001,105083,105092,105096,105102,105116,105126,105128,105458,105460,105472,105474,105485,105487,105490,105508,105511,105514,105532,105543,105546,105561,105571,105573,105594,105611,105631,105637,105677,105693,105709,105715,105718,105742,105758,105763,105793,105810,105835,105838,105853,105862,105877,105886,105901,105908,105910,105920,105933,105940,105943,105982,105989,105991,106042,106044,106050,106053,106060,106067,106070,106072,106090,106093,106096,106130,106142,106144,106147,106169,106172],[10,104550,104546],{"id":104551},"_2xml-与-mjcf-物理建模基础",[14,104553,17],{"id":16},[19,104555,104556],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[19,104558,104559],{},"本章结束后，你应该能看懂一个简单模型里：",[23,104561,104562,104565,104568,104571,104574],{},[26,104563,104564],{},"地面在哪里。",[26,104566,104567],{},"物体初始位置在哪里。",[26,104569,104570],{},"几何体是什么形状。",[26,104572,104573],{},"哪些 body 可以自由运动。",[26,104575,104576],{},"如何用名字在 Python 里找到 XML 中的对象。",[97,104578,104579,104589],{},[100,104580,104581],{},[103,104582,104583,104586],{},[106,104584,104585],{"align":108},"标签",[106,104587,104588],{"align":108},"作用",[120,104590,104591,104600,104610,104619,104629,104639,104652,104662],{},[103,104592,104593,104597],{},[125,104594,104595],{"align":108},[43,104596,104432],{},[125,104598,104599],{"align":108},"根节点",[103,104601,104602,104607],{},[125,104603,104604],{"align":108},[43,104605,104606],{},"\u003Coption>",[125,104608,104609],{"align":108},"仿真参数",[103,104611,104612,104616],{},[125,104613,104614],{"align":108},[43,104615,104440],{},[125,104617,104618],{"align":108},"世界中的物体",[103,104620,104621,104626],{},[125,104622,104623],{"align":108},[43,104624,104625],{},"\u003Cbody>",[125,104627,104628],{"align":108},"刚体",[103,104630,104631,104636],{},[125,104632,104633],{"align":108},[43,104634,104635],{},"\u003Cgeom>",[125,104637,104638],{"align":108},"几何体、碰撞体、可视体",[103,104640,104641,104649],{},[125,104642,104643,26973,104646],{"align":108},[43,104644,104645],{},"\u003Cjoint>",[43,104647,104648],{},"\u003Cfreejoint>",[125,104650,104651],{"align":108},"关节",[103,104653,104654,104659],{},[125,104655,104656],{"align":108},[43,104657,104658],{},"\u003Csite>",[125,104660,104661],{"align":108},"标记点",[103,104663,104664,104669],{},[125,104665,104666],{"align":108},[43,104667,104668],{},"\u003Cactuator>",[125,104670,104671],{"align":108},"控制器",[19,104673,104674],{},"初学时可以先记住：",[36,104676,104679],{"className":104677,"code":104678,"language":571,"meta":41},[569],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[43,104680,104678],{"__ignoreMap":41},[14,104682,154],{"id":153},[19,104684,157],{},[36,104686,104688],{"className":160,"code":104687,"language":162,"meta":41,"style":41},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[43,104689,104690],{"__ignoreMap":41},[46,104691,104692,104694,104696,104698,104700,104702,104704,104706],{"class":48,"line":49},[46,104693,170],{"class":169},[46,104695,174],{"class":173},[46,104697,177],{"class":173},[46,104699,181],{"class":180},[46,104701,104399],{"class":173},[46,104703,195],{"class":173},[46,104705,1971],{"class":173},[46,104707,104708],{"class":173}," glfw-devel\n",[19,104710,240],{},[36,104712,104713],{"className":160,"code":102863,"language":162,"meta":41,"style":41},[43,104714,104715],{"__ignoreMap":41},[46,104716,104717,104719,104721,104723],{"class":48,"line":49},[46,104718,250],{"class":169},[46,104720,177],{"class":173},[46,104722,255],{"class":173},[46,104724,102876],{"class":173},[19,104726,264],{},[36,104728,104730],{"className":160,"code":104729,"language":162,"meta":41,"style":41},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[43,104731,104732,104749,104758],{"__ignoreMap":41},[46,104733,104734,104736,104738,104740,104743,104745,104747],{"class":48,"line":49},[46,104735,274],{"class":169},[46,104737,277],{"class":173},[46,104739,280],{"class":180},[46,104741,104742],{"class":173}," mujoco-xml",[46,104744,286],{"class":173},[46,104746,289],{"class":180},[46,104748,292],{"class":180},[46,104750,104751,104753,104755],{"class":48,"line":60},[46,104752,274],{"class":169},[46,104754,299],{"class":173},[46,104756,104757],{"class":173}," mujoco-xml\n",[46,104759,104760,104762,104764,104766],{"class":48,"line":200},[46,104761,250],{"class":169},[46,104763,177],{"class":173},[46,104765,255],{"class":173},[46,104767,102876],{"class":173},[19,104769,102943],{},[23,104771,104772,104775,104780],{},[26,104773,104774],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[26,104776,104777,104778,365],{},"本章使用基础标签，适用于 ",[43,104779,102965],{},[26,104781,104782],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,104784,376],{"id":375},[19,104786,104787],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[36,104789,104791],{"className":1350,"code":104790,"language":1352,"meta":41,"style":41},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[43,104792,104793,104807,104815,104820,104828],{"__ignoreMap":41},[46,104794,104795,104797,104799,104801,104803,104805],{"class":48,"line":49},[46,104796,821],{"class":56},[46,104798,102959],{"class":1361},[46,104800,103680],{"class":169},[46,104802,79],{"class":56},[46,104804,64644],{"class":173},[46,104806,53274],{"class":56},[46,104808,104809,104811,104813],{"class":48,"line":60},[46,104810,54111],{"class":56},[46,104812,103746],{"class":1361},[46,104814,53274],{"class":56},[46,104816,104817],{"class":48,"line":200},[46,104818,104819],{"class":56},"    ...\n",[46,104821,104822,104824,104826],{"class":48,"line":211},[46,104823,54384],{"class":56},[46,104825,103746],{"class":1361},[46,104827,53274],{"class":56},[46,104829,104830,104832,104834],{"class":48,"line":222},[46,104831,53752],{"class":56},[46,104833,102959],{"class":1361},[46,104835,53274],{"class":56},[19,104837,104838,104840,104841,104843,104844,104847],{},[43,104839,53767],{}," 表示刚体。",[43,104842,103053],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[43,104845,104846],{},"joint"," 表示刚体相对父刚体如何运动。",[479,104849,104850],{"id":104850},"层级结构非常重要",[19,104852,104853],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[36,104855,104858],{"className":104856,"code":104857,"language":571,"meta":41},[569],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[43,104859,104857],{"__ignoreMap":41},[19,104861,104862,1700,104865,104868,104869,104872],{},[43,104863,104864],{},"red_box_geom",[43,104866,104867],{},"box_center"," 都属于 ",[43,104870,104871],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[36,104874,104876],{"className":1350,"code":104875,"language":1352,"meta":41,"style":41},"\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",[43,104877,104878,104898,104912,104932],{"__ignoreMap":41},[46,104879,104880,104882,104884,104886,104888,104890,104892,104894,104896],{"class":48,"line":49},[46,104881,821],{"class":56},[46,104883,53767],{"class":1361},[46,104885,1364],{"class":169},[46,104887,79],{"class":56},[46,104889,55456],{"class":173},[46,104891,1371],{"class":169},[46,104893,79],{"class":56},[46,104895,103044],{"class":173},[46,104897,53274],{"class":56},[46,104899,104900,104902,104904,104906,104908,104910],{"class":48,"line":60},[46,104901,54111],{"class":56},[46,104903,103527],{"class":1361},[46,104905,1364],{"class":169},[46,104907,79],{"class":56},[46,104909,103866],{"class":173},[46,104911,1387],{"class":56},[46,104913,104914,104916,104918,104920,104922,104924,104926,104928,104930],{"class":48,"line":200},[46,104915,54111],{"class":56},[46,104917,103053],{"class":1361},[46,104919,55789],{"class":169},[46,104921,79],{"class":56},[46,104923,55456],{"class":173},[46,104925,103069],{"class":169},[46,104927,79],{"class":56},[46,104929,103074],{"class":173},[46,104931,1387],{"class":56},[46,104933,104934,104936,104938],{"class":48,"line":211},[46,104935,53752],{"class":56},[46,104937,53767],{"class":1361},[46,104939,53274],{"class":56},[19,104941,104942],{},"含义:",[23,104944,104945,104951,104956,104959],{},[26,104946,104947,104948,104950],{},"创建名为 ",[43,104949,55679],{}," 的刚体",[26,104952,104953,104954],{},"初始位置在世界坐标 ",[43,104955,103101],{},[26,104957,104958],{},"它有一个自由关节",[26,104960,104961],{},"它有一个盒子几何体",[479,104963,104964],{"id":104964},"坐标怎么理解",[19,104966,104967],{},"MuJoCo 默认使用三维坐标：",[36,104969,104972],{"className":104970,"code":104971,"language":571,"meta":41},[569],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[43,104973,104971],{"__ignoreMap":41},[19,104975,16635],{},[36,104977,104979],{"className":1350,"code":104978,"language":1352,"meta":41,"style":41},"pos=\"0 0 1\"\n",[43,104980,104981],{"__ignoreMap":41},[46,104982,104983],{"class":48,"line":49},[46,104984,104978],{"class":56},[19,104986,104987],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[479,104989,104991],{"id":104990},"geom-的-size-怎么理解","geom 的 size 怎么理解",[19,104993,104994,104995,84494,104998,105000],{},"不同 ",[43,104996,104997],{},"type",[43,104999,33473],{}," 含义不同：",[97,105002,105003,105018],{},[100,105004,105005],{},[103,105006,105007,105011,105016],{},[106,105008,105009],{"align":108},[43,105010,104997],{},[106,105012,105013,105015],{"align":108},[43,105014,33473],{}," 示例",[106,105017,102659],{"align":108},[120,105019,105020,105034,105049,105068],{},[103,105021,105022,105026,105031],{},[125,105023,105024],{"align":108},[43,105025,55679],{},[125,105027,105028],{"align":108},[43,105029,105030],{},"size=\"0.1 0.2 0.3\"",[125,105032,105033],{"align":108},"x\u002Fy\u002Fz 半边长，不是完整长度",[103,105035,105036,105041,105046],{},[125,105037,105038],{"align":108},[43,105039,105040],{},"sphere",[125,105042,105043],{"align":108},[43,105044,105045],{},"size=\"0.1\"",[125,105047,105048],{"align":108},"球半径",[103,105050,105051,105056,105061],{},[125,105052,105053],{"align":108},[43,105054,105055],{},"capsule",[125,105057,105058],{"align":108},[43,105059,105060],{},"size=\"0.03\"",[125,105062,105063,105064,105067],{"align":108},"胶囊半径，长度常用 ",[43,105065,105066],{},"fromto"," 指定",[103,105069,105070,105075,105080],{},[125,105071,105072],{"align":108},[43,105073,105074],{},"plane",[125,105076,105077],{"align":108},[43,105078,105079],{},"size=\"3 3 0.1\"",[125,105081,105082],{"align":108},"可视平面大小，通常当地面",[19,105084,105085,105086,105088,105089,105091],{},"最容易踩坑的是 box：",[43,105087,103929],{}," 表示边长大约是 ",[43,105090,34012],{},"，因为 MuJoCo 用的是半边长。",[479,105093,105095],{"id":105094},"site-是什么","site 是什么",[19,105097,105098,105101],{},[43,105099,105100],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[23,105103,105104,105107,105110,105113],{},[26,105105,105106],{},"标记机械臂末端。",[26,105108,105109],{},"标记目标位置。",[26,105111,105112],{},"放传感器或相机参考点。",[26,105114,105115],{},"在 Python 中读取某个关键点的世界坐标。",[19,105117,105118,105119,1700,105122,105125],{},"在后面的 Reacher 任务中，",[43,105120,105121],{},"tip",[43,105123,105124],{},"target"," 就会用 site 表示。",[14,105127,595],{"id":594},[36,105129,105131],{"className":38,"code":105130,"language":40,"meta":41,"style":41},"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",[43,105132,105133,105139,105149,105153,105157,105165,105170,105174,105178,105182,105187,105191,105196,105201,105206,105211,105215,105219,105223,105227,105231,105235,105247,105259,105267,105271,105286,105301,105305,105318,105333,105346,105359,105363,105379,105383,105387,105398,105410,105422,105434,105438,105442,105454],{"__ignoreMap":41},[46,105134,105135,105137],{"class":48,"line":49},[46,105136,53],{"class":52},[46,105138,623],{"class":56},[46,105140,105141,105143,105145,105147],{"class":48,"line":60},[46,105142,53],{"class":52},[46,105144,33358],{"class":56},[46,105146,398],{"class":52},[46,105148,33363],{"class":56},[46,105150,105151],{"class":48,"line":200},[46,105152,616],{"emptyLinePlaceholder":615},[46,105154,105155],{"class":48,"line":211},[46,105156,616],{"emptyLinePlaceholder":615},[46,105158,105159,105161,105163],{"class":48,"line":222},[46,105160,644],{"class":180},[46,105162,647],{"class":52},[46,105164,650],{"class":173},[46,105166,105167],{"class":48,"line":636},[46,105168,105169],{"class":173},"\u003Cmujoco model=\"xml_basic\">\n",[46,105171,105172],{"class":48,"line":641},[46,105173,662],{"class":173},[46,105175,105176],{"class":48,"line":653},[46,105177,616],{"emptyLinePlaceholder":615},[46,105179,105180],{"class":48,"line":659},[46,105181,673],{"class":173},[46,105183,105184],{"class":48,"line":665},[46,105185,105186],{"class":173},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[46,105188,105189],{"class":48,"line":670},[46,105190,616],{"emptyLinePlaceholder":615},[46,105192,105193],{"class":48,"line":676},[46,105194,105195],{"class":173},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[46,105197,105198],{"class":48,"line":682},[46,105199,105200],{"class":173},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[46,105202,105203],{"class":48,"line":688},[46,105204,105205],{"class":173},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[46,105207,105208],{"class":48,"line":693},[46,105209,105210],{"class":173},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[46,105212,105213],{"class":48,"line":699},[46,105214,714],{"class":173},[46,105216,105217],{"class":48,"line":705},[46,105218,720],{"class":173},[46,105220,105221],{"class":48,"line":711},[46,105222,726],{"class":173},[46,105224,105225],{"class":48,"line":717},[46,105226,732],{"class":173},[46,105228,105229],{"class":48,"line":723},[46,105230,616],{"emptyLinePlaceholder":615},[46,105232,105233],{"class":48,"line":729},[46,105234,616],{"emptyLinePlaceholder":615},[46,105236,105237,105239,105241,105243,105245],{"class":48,"line":735},[46,105238,748],{"class":52},[46,105240,751],{"class":169},[46,105242,754],{"class":56},[46,105244,757],{"class":180},[46,105246,760],{"class":56},[46,105248,105249,105251,105253,105255,105257],{"class":48,"line":740},[46,105250,766],{"class":56},[46,105252,79],{"class":52},[46,105254,771],{"class":56},[46,105256,644],{"class":180},[46,105258,459],{"class":56},[46,105260,105261,105263,105265],{"class":48,"line":745},[46,105262,781],{"class":56},[46,105264,79],{"class":52},[46,105266,786],{"class":56},[46,105268,105269],{"class":48,"line":763},[46,105270,616],{"emptyLinePlaceholder":615},[46,105272,105273,105276,105278,105281,105284],{"class":48,"line":778},[46,105274,105275],{"class":56},"    box_body_id ",[46,105277,79],{"class":52},[46,105279,105280],{"class":56}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[46,105282,105283],{"class":173},"\"red_box\"",[46,105285,459],{"class":56},[46,105287,105288,105291,105293,105296,105299],{"class":48,"line":789},[46,105289,105290],{"class":56},"    site_id ",[46,105292,79],{"class":52},[46,105294,105295],{"class":56}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[46,105297,105298],{"class":173},"\"box_center\"",[46,105300,459],{"class":56},[46,105302,105303],{"class":48,"line":794},[46,105304,616],{"emptyLinePlaceholder":615},[46,105306,105307,105309,105312,105314,105316],{"class":48,"line":806},[46,105308,5121],{"class":52},[46,105310,105311],{"class":56}," box_body_id ",[46,105313,821],{"class":52},[46,105315,887],{"class":180},[46,105317,760],{"class":56},[46,105319,105320,105323,105326,105328,105331],{"class":48,"line":829},[46,105321,105322],{"class":52},"        raise",[46,105324,105325],{"class":180}," RuntimeError",[46,105327,1152],{"class":56},[46,105329,105330],{"class":173},"\"body red_box not found\"",[46,105332,459],{"class":56},[46,105334,105335,105337,105340,105342,105344],{"class":48,"line":840},[46,105336,5121],{"class":52},[46,105338,105339],{"class":56}," site_id ",[46,105341,821],{"class":52},[46,105343,887],{"class":180},[46,105345,760],{"class":56},[46,105347,105348,105350,105352,105354,105357],{"class":48,"line":846},[46,105349,105322],{"class":52},[46,105351,105325],{"class":180},[46,105353,1152],{"class":56},[46,105355,105356],{"class":173},"\"site box_center not found\"",[46,105358,459],{"class":56},[46,105360,105361],{"class":48,"line":852},[46,105362,616],{"emptyLinePlaceholder":615},[46,105364,105365,105367,105369,105371,105373,105375,105377],{"class":48,"line":857},[46,105366,1140],{"class":52},[46,105368,1143],{"class":56},[46,105370,1146],{"class":52},[46,105372,1149],{"class":180},[46,105374,1152],{"class":56},[46,105376,3762],{"class":180},[46,105378,1158],{"class":56},[46,105380,105381],{"class":48,"line":875},[46,105382,414],{"class":56},[46,105384,105385],{"class":48,"line":892},[46,105386,616],{"emptyLinePlaceholder":615},[46,105388,105389,105391,105393,105396],{"class":48,"line":898},[46,105390,1227],{"class":180},[46,105392,1152],{"class":56},[46,105394,105395],{"class":173},"\"simulation time:\"",[46,105397,103391],{"class":56},[46,105399,105400,105402,105404,105407],{"class":48,"line":903},[46,105401,1227],{"class":180},[46,105403,1152],{"class":56},[46,105405,105406],{"class":173},"\"box body position:\"",[46,105408,105409],{"class":56},", data.xpos[box_body_id].copy())\n",[46,105411,105412,105414,105416,105419],{"class":48,"line":908},[46,105413,1227],{"class":180},[46,105415,1152],{"class":56},[46,105417,105418],{"class":173},"\"site position:\"",[46,105420,105421],{"class":56},", data.site_xpos[site_id].copy())\n",[46,105423,105424,105426,105428,105431],{"class":48,"line":925},[46,105425,1227],{"class":180},[46,105427,1152],{"class":56},[46,105429,105430],{"class":173},"\"box qpos:\"",[46,105432,105433],{"class":56},", np.array(data.qpos))\n",[46,105435,105436],{"class":48,"line":1238},[46,105437,616],{"emptyLinePlaceholder":615},[46,105439,105440],{"class":48,"line":1251},[46,105441,616],{"emptyLinePlaceholder":615},[46,105443,105444,105446,105448,105450,105452],{"class":48,"line":1256},[46,105445,911],{"class":52},[46,105447,914],{"class":180},[46,105449,917],{"class":52},[46,105451,920],{"class":173},[46,105453,760],{"class":56},[46,105455,105456],{"class":48,"line":1261},[46,105457,928],{"class":56},[19,105459,931],{},[36,105461,105463],{"className":160,"code":105462,"language":162,"meta":41,"style":41},"touch ch2_xml_basic.py\n",[43,105464,105465],{"__ignoreMap":41},[46,105466,105467,105469],{"class":48,"line":49},[46,105468,941],{"class":169},[46,105470,105471],{"class":173}," ch2_xml_basic.py\n",[19,105473,104206],{},[36,105475,105477],{"className":160,"code":105476,"language":162,"meta":41,"style":41},"python ch2_xml_basic.py\n",[43,105478,105479],{"__ignoreMap":41},[46,105480,105481,105483],{"class":48,"line":49},[46,105482,40],{"class":169},[46,105484,105471],{"class":173},[479,105486,1293],{"id":1293},[19,105488,105489],{},"用名字查找 body：",[36,105491,105493],{"className":38,"code":105492,"language":40,"meta":41,"style":41},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[43,105494,105495],{"__ignoreMap":41},[46,105496,105497,105500,105502,105504,105506],{"class":48,"line":49},[46,105498,105499],{"class":56},"box_body_id ",[46,105501,79],{"class":52},[46,105503,105280],{"class":56},[46,105505,105283],{"class":173},[46,105507,459],{"class":56},[19,105509,105510],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[19,105512,105513],{},"用名字查找 site：",[36,105515,105517],{"className":38,"code":105516,"language":40,"meta":41,"style":41},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[43,105518,105519],{"__ignoreMap":41},[46,105520,105521,105524,105526,105528,105530],{"class":48,"line":49},[46,105522,105523],{"class":56},"site_id ",[46,105525,79],{"class":52},[46,105527,105295],{"class":56},[46,105529,105298],{"class":173},[46,105531,459],{"class":56},[19,105533,105534,105535,105538,105539,105542],{},"注意第二个参数是对象类型。查 body 就用 ",[43,105536,105537],{},"mjOBJ_BODY","，查 site 就用 ",[43,105540,105541],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[19,105544,105545],{},"读取世界坐标：",[36,105547,105549],{"className":38,"code":105548,"language":40,"meta":41,"style":41},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[43,105550,105551,105556],{"__ignoreMap":41},[46,105552,105553],{"class":48,"line":49},[46,105554,105555],{"class":56},"data.xpos[box_body_id]\n",[46,105557,105558],{"class":48,"line":60},[46,105559,105560],{"class":56},"data.site_xpos[site_id]\n",[19,105562,105563,105566,105567,105570],{},[43,105564,105565],{},"xpos"," 是 body 的世界坐标，",[43,105568,105569],{},"site_xpos"," 是 site 的世界坐标。",[479,105572,103613],{"id":103613},[36,105574,105576],{"className":38,"code":105575,"language":40,"meta":41,"style":41},"import mujoco\nimport numpy as np\n",[43,105577,105578,105584],{"__ignoreMap":41},[46,105579,105580,105582],{"class":48,"line":49},[46,105581,53],{"class":52},[46,105583,623],{"class":56},[46,105585,105586,105588,105590,105592],{"class":48,"line":60},[46,105587,53],{"class":52},[46,105589,33358],{"class":56},[46,105591,398],{"class":52},[46,105593,33363],{"class":56},[19,105595,105596,105597,105600,105601,105604,105605,2400,105608,365],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[43,105598,105599],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[43,105602,105603],{},"as np"," 是习惯写法，后面就可以写 ",[43,105606,105607],{},"np.array(...)",[43,105609,105610],{},"np.round(...)",[36,105612,105613],{"className":38,"code":103502,"language":40,"meta":41,"style":41},[43,105614,105615,105623,105627],{"__ignoreMap":41},[46,105616,105617,105619,105621],{"class":48,"line":49},[46,105618,644],{"class":180},[46,105620,647],{"class":52},[46,105622,650],{"class":173},[46,105624,105625],{"class":48,"line":60},[46,105626,103517],{"class":173},[46,105628,105629],{"class":48,"line":200},[46,105630,732],{"class":173},[19,105632,105633,105634,365],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[43,105635,105636],{},"mujoco.MjModel.from_xml_string(XML)",[36,105638,105640],{"className":1350,"code":105639,"language":1352,"meta":41,"style":41},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[43,105641,105642],{"__ignoreMap":41},[46,105643,105644,105646,105648,105650,105652,105654,105656,105658,105661,105663,105665,105668,105670,105672,105675],{"class":48,"line":49},[46,105645,821],{"class":56},[46,105647,105100],{"class":1361},[46,105649,1364],{"class":169},[46,105651,79],{"class":56},[46,105653,105298],{"class":173},[46,105655,1371],{"class":169},[46,105657,79],{"class":56},[46,105659,105660],{"class":173},"\"0 0 0\"",[46,105662,103069],{"class":169},[46,105664,79],{"class":56},[46,105666,105667],{"class":173},"\"0.03\"",[46,105669,80732],{"class":169},[46,105671,79],{"class":56},[46,105673,105674],{"class":173},"\"0 1 0 1\"",[46,105676,1387],{"class":56},[19,105678,105679,105681,105682,105685,105686,105688,105689,105692],{},[43,105680,105100],{}," 是标记点。",[43,105683,105684],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[43,105687,105060],{}," 表示显示出来的小球大小。",[43,105690,105691],{},"rgba=\"0 1 0 1\""," 表示绿色。",[36,105694,105695],{"className":38,"code":105492,"language":40,"meta":41,"style":41},[43,105696,105697],{"__ignoreMap":41},[46,105698,105699,105701,105703,105705,105707],{"class":48,"line":49},[46,105700,105499],{"class":56},[46,105702,79],{"class":52},[46,105704,105280],{"class":56},[46,105706,105283],{"class":173},[46,105708,459],{"class":56},[19,105710,105711,105712,105714],{},"这行的作用是：根据名字 ",[43,105713,105283],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[19,105716,105717],{},"拆开看：",[23,105719,105720,105726,105731,105737],{},[26,105721,105722,105725],{},[43,105723,105724],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[26,105727,105728,105730],{},[43,105729,103990],{}," 是被查询的模型。",[26,105732,105733,105736],{},[43,105734,105735],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[26,105738,105739,105741],{},[43,105740,105283],{}," 是 XML 里写的名字。",[36,105743,105744],{"className":38,"code":105516,"language":40,"meta":41,"style":41},[43,105745,105746],{"__ignoreMap":41},[46,105747,105748,105750,105752,105754,105756],{"class":48,"line":49},[46,105749,105523],{"class":56},[46,105751,79],{"class":52},[46,105753,105295],{"class":56},[46,105755,105298],{"class":173},[46,105757,459],{"class":56},[19,105759,105760,105761,365],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[43,105762,105298],{},[36,105764,105766],{"className":38,"code":105765,"language":40,"meta":41,"style":41},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[43,105767,105768,105780],{"__ignoreMap":41},[46,105769,105770,105772,105774,105776,105778],{"class":48,"line":49},[46,105771,911],{"class":52},[46,105773,105311],{"class":56},[46,105775,821],{"class":52},[46,105777,887],{"class":180},[46,105779,760],{"class":56},[46,105781,105782,105785,105787,105789,105791],{"class":48,"line":60},[46,105783,105784],{"class":52},"    raise",[46,105786,105325],{"class":180},[46,105788,1152],{"class":56},[46,105790,105330],{"class":173},[46,105792,459],{"class":56},[19,105794,105795,105797,105798,105801,105802,105805,105806,105809],{},[43,105796,911],{}," 是条件判断。",[43,105799,105800],{},"mj_name2id"," 找不到对象时会返回 ",[43,105803,105804],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[43,105807,105808],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[36,105811,105813],{"className":38,"code":105812,"language":40,"meta":41,"style":41},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[43,105814,105815,105831],{"__ignoreMap":41},[46,105816,105817,105819,105821,105823,105825,105827,105829],{"class":48,"line":49},[46,105818,1713],{"class":52},[46,105820,1143],{"class":56},[46,105822,1146],{"class":52},[46,105824,1149],{"class":180},[46,105826,1152],{"class":56},[46,105828,3762],{"class":180},[46,105830,1158],{"class":56},[46,105832,105833],{"class":48,"line":60},[46,105834,1730],{"class":56},[19,105836,105837],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[36,105839,105841],{"className":38,"code":105840,"language":40,"meta":41,"style":41},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[43,105842,105843],{"__ignoreMap":41},[46,105844,105845,105847,105849,105851],{"class":48,"line":49},[46,105846,32398],{"class":180},[46,105848,1152],{"class":56},[46,105850,105406],{"class":173},[46,105852,105409],{"class":56},[19,105854,105855,105857,105858,105861],{},[43,105856,103013],{}," 保存所有 body 的世界坐标。",[43,105859,105860],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[36,105863,105865],{"className":38,"code":105864,"language":40,"meta":41,"style":41},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[43,105866,105867],{"__ignoreMap":41},[46,105868,105869,105871,105873,105875],{"class":48,"line":49},[46,105870,32398],{"class":180},[46,105872,1152],{"class":56},[46,105874,105418],{"class":173},[46,105876,105421],{"class":56},[19,105878,105879,105882,105883,105885],{},[43,105880,105881],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[43,105884,104867],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[36,105887,105889],{"className":38,"code":105888,"language":40,"meta":41,"style":41},"print(\"box qpos:\", np.array(data.qpos))\n",[43,105890,105891],{"__ignoreMap":41},[46,105892,105893,105895,105897,105899],{"class":48,"line":49},[46,105894,32398],{"class":180},[46,105896,1152],{"class":56},[46,105898,105430],{"class":173},[46,105900,105433],{"class":56},[19,105902,105903,105904,105907],{},"这里打印广义位置数组。",[43,105905,105906],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,105909,1811],{"id":1810},[19,105911,105912,105913,105916,105917,365],{},"程序会输出 ",[43,105914,105915],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[43,105918,105919],{},"qpos",[19,105921,105922,105924,105925,105928,105929,105932],{},[43,105923,105860],{}," 是 body 的世界坐标位置。",[43,105926,105927],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[43,105930,105931],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[19,105934,84186,105935,84494,105937,105939],{},[43,105936,104867],{},[43,105938,105684],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[19,105941,105942],{},"如果你把 site 改成：",[36,105944,105946],{"className":1350,"code":105945,"language":1352,"meta":41,"style":41},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[43,105947,105948],{"__ignoreMap":41},[46,105949,105950,105952,105954,105956,105958,105961,105963,105965,105968,105970,105972,105974,105976,105978,105980],{"class":48,"line":49},[46,105951,821],{"class":56},[46,105953,105100],{"class":1361},[46,105955,1364],{"class":169},[46,105957,79],{"class":56},[46,105959,105960],{"class":173},"\"box_top\"",[46,105962,1371],{"class":169},[46,105964,79],{"class":56},[46,105966,105967],{"class":173},"\"0 0 0.15\"",[46,105969,103069],{"class":169},[46,105971,79],{"class":56},[46,105973,105667],{"class":173},[46,105975,80732],{"class":169},[46,105977,79],{"class":56},[46,105979,105674],{"class":173},[46,105981,1387],{"class":56},[19,105983,105984,105985,105988],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[43,105986,105987],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,105990,1842],{"id":1841},[23,105992,105993,106002,106005,106012,106018,106029],{},[26,105994,104312,105995,105997,105998,1938,106000,365],{},[43,105996,104871],{}," 的初始高度从 ",[43,105999,2405],{},[43,106001,2272],{},[26,106003,106004],{},"重新运行程序。",[26,106006,106007,106008,106011],{},"观察 ",[43,106009,106010],{},"box qpos"," 和最终位置是否变化。",[26,106013,106014,106015,106017],{},"故意把 ",[43,106016,105100],{}," 名称改错，确认程序能报错。",[26,106019,104312,106020,106022,106023,1938,106025,106028],{},[43,106021,103053],{}," 的颜色 ",[43,106024,103937],{},[43,106026,106027],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[26,106030,104312,106031,84494,106033,1938,106035,106038,106039,106041],{},[43,106032,104867],{},[43,106034,1657],{},[43,106036,106037],{},"0 0 0.2","，观察 ",[43,106040,105987],{}," 如何变化。",[14,106043,1946],{"id":1945},[479,106045,106047],{"id":106046},"xml-error-schema-violation",[43,106048,106049],{},"XML Error: Schema violation",[19,106051,106052],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[479,106054,106056,83254,106058],{"id":106055},"mj_name2id-返回-1",[43,106057,105800],{},[43,106059,105804],{},[19,106061,106062,106063,106066],{},"说明名字没有找到。检查 XML 中 ",[43,106064,106065],{},"name=\"...\"","，并确认对象类型正确。",[479,106068,106069],{"id":106069},"物体不下落",[19,106071,104418],{},[23,106073,106074,106079,106084],{},[26,106075,106076,106077],{},"body 是否有 ",[43,106078,103527],{},[26,106080,106081,106082],{},"gravity 是否为 ",[43,106083,104483],{},[26,106085,106086,106087,106089],{},"body 是否被固定在 ",[43,106088,103746],{}," 中",[479,106091,106092],{"id":106092},"坐标看起来不符合预期",[19,106094,106095],{},"先区分两种坐标：",[97,106097,106098,106107],{},[100,106099,106100],{},[103,106101,106102,106105],{},[106,106103,106104],{"align":108},"坐标",[106,106106,102659],{"align":108},[120,106108,106109,106119],{},[103,106110,106111,106116],{},[125,106112,106113,106114],{"align":108},"XML 里的 ",[43,106115,1657],{},[125,106117,106118],{"align":108},"相对父 body 的局部坐标",[103,106120,106121,106127],{},[125,106122,106123,26973,106125],{"align":108},[43,106124,103013],{},[43,106126,105881],{},[125,106128,106129],{"align":108},"仿真更新后的世界坐标",[19,106131,106132,106133,106135,106136,2006,106139,106141],{},"如果你修改了 ",[43,106134,103004],{},"，但还没调用 ",[43,106137,106138],{},"mj_forward",[43,106140,504],{},"，世界坐标可能还没有更新。",[14,106143,2082],{"id":2081},[19,106145,106146],{},"MJCF 建模先掌握四件事：",[23,106148,106149,106154,106159,106164],{},[26,106150,106151,106153],{},[43,106152,53767],{}," 表示刚体层级。",[26,106155,106156,106158],{},[43,106157,103053],{}," 表示形状、碰撞和质量。",[26,106160,106161,106163],{},[43,106162,104846],{}," 决定 body 能不能动、怎么动。",[26,106165,106166,106168],{},[43,106167,105100],{}," 用来标记关键点，方便 Python 读取位置。",[19,106170,106171],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[2098,106173,106174],{},"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":41,"searchDepth":60,"depth":60,"links":106176},[106177,106178,106179,106185,106189,106190,106191,106198],{"id":16,"depth":60,"text":17},{"id":153,"depth":60,"text":154},{"id":375,"depth":60,"text":376,"children":106180},[106181,106182,106183,106184],{"id":104850,"depth":200,"text":104850},{"id":104964,"depth":200,"text":104964},{"id":104990,"depth":200,"text":104991},{"id":105094,"depth":200,"text":105095},{"id":594,"depth":60,"text":595,"children":106186},[106187,106188],{"id":1293,"depth":200,"text":1293},{"id":103613,"depth":200,"text":103613},{"id":1810,"depth":60,"text":1811},{"id":1841,"depth":60,"text":1842},{"id":1945,"depth":60,"text":1946,"children":106192},[106193,106194,106196,106197],{"id":106046,"depth":200,"text":106049},{"id":106055,"depth":200,"text":106195},"mj_name2id 返回 -1",{"id":106069,"depth":200,"text":106069},{"id":106092,"depth":200,"text":106092},{"id":2081,"depth":60,"text":2082},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":104546,"description":41},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":106205,"title":106206,"body":106207,"description":41,"extension":2125,"meta":107699,"navigation":615,"path":107700,"seo":107701,"stem":107702,"__hash__":107703},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":106208,"toc":107671},[106209,106212,106214,106217,106220,106258,106261,106267,106270,106272,106274,106301,106303,106317,106319,106360,106362,106386,106388,106391,106399,106408,106411,106420,106428,106437,106440,106450,106453,106505,106512,106518,106526,106572,106575,106594,106597,106605,106609,106618,106651,106653,107001,107003,107015,107017,107028,107030,107033,107054,107060,107063,107088,107098,107101,107109,107112,107115,107136,107147,107149,107169,107172,107193,107202,107221,107227,107252,107255,107269,107276,107300,107303,107311,107320,107336,107348,107356,107365,107367,107370,107394,107399,107402,107424,107426,107465,107467,107474,107476,107484,107487,107490,107502,107543,107550,107561,107568,107571,107620,107623,107626,107632,107634,107639,107665,107668],[10,106210,106206],{"id":106211},"_3python-控制接口读取状态与推进仿真",[14,106213,17],{"id":16},[19,106215,106216],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[19,106218,106219],{},"你将学习:",[23,106221,106222,106227,106232,106236,106241,106252],{},[26,106223,106224],{},[43,106225,106226],{},"MjModel.from_xml_string",[26,106228,106229],{},[43,106230,106231],{},"MjData(model)",[26,106233,106234],{},[43,106235,504],{},[26,106237,106238],{},[43,106239,106240],{},"mj_resetData",[26,106242,106243,106244,2400,106246,2400,106249],{},"读取 ",[43,106245,105919],{},[43,106247,106248],{},"qvel",[43,106250,106251],{},"ctrl",[26,106253,106254,106255],{},"使用 ",[43,106256,106257],{},"model.opt.timestep",[19,106259,106260],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[36,106262,106265],{"className":106263,"code":106264,"language":571,"meta":41},[569],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[43,106266,106264],{"__ignoreMap":41},[19,106268,106269],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,106271,154],{"id":153},[19,106273,157],{},[36,106275,106277],{"className":160,"code":106276,"language":162,"meta":41,"style":41},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[43,106278,106279],{"__ignoreMap":41},[46,106280,106281,106283,106285,106287,106289,106292,106294,106296,106298],{"class":48,"line":49},[46,106282,170],{"class":169},[46,106284,174],{"class":173},[46,106286,177],{"class":173},[46,106288,181],{"class":180},[46,106290,106291],{"class":173}," python3",[46,106293,102754],{"class":173},[46,106295,104399],{"class":173},[46,106297,195],{"class":173},[46,106299,106300],{"class":173}," glfw\n",[19,106302,240],{},[36,106304,106305],{"className":160,"code":102863,"language":162,"meta":41,"style":41},[43,106306,106307],{"__ignoreMap":41},[46,106308,106309,106311,106313,106315],{"class":48,"line":49},[46,106310,250],{"class":169},[46,106312,177],{"class":173},[46,106314,255],{"class":173},[46,106316,102876],{"class":173},[19,106318,264],{},[36,106320,106322],{"className":160,"code":106321,"language":162,"meta":41,"style":41},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[43,106323,106324,106341,106350],{"__ignoreMap":41},[46,106325,106326,106328,106330,106332,106335,106337,106339],{"class":48,"line":49},[46,106327,274],{"class":169},[46,106329,277],{"class":173},[46,106331,280],{"class":180},[46,106333,106334],{"class":173}," mujoco-python-api",[46,106336,286],{"class":173},[46,106338,289],{"class":180},[46,106340,292],{"class":180},[46,106342,106343,106345,106347],{"class":48,"line":60},[46,106344,274],{"class":169},[46,106346,299],{"class":173},[46,106348,106349],{"class":173}," mujoco-python-api\n",[46,106351,106352,106354,106356,106358],{"class":48,"line":200},[46,106353,250],{"class":169},[46,106355,177],{"class":173},[46,106357,255],{"class":173},[46,106359,102876],{"class":173},[19,106361,102943],{},[23,106363,106364,106371,106380],{},[26,106365,106366,1700,106368,106370],{},[43,106367,102634],{},[43,106369,102639],{}," 是官方 Python bindings 的类名。",[26,106372,106373,106374,106377,106378,365],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[43,106375,106376],{},"mjModel"," 在 Python 中是 ",[43,106379,102668],{},[26,106381,106382,106383,365],{},"不要使用 ",[43,106384,106385],{},"sim = mujoco_py.MjSim(...)",[14,106387,376],{"id":375},[19,106389,106390],{},"仿真推进核心代码:",[36,106392,106393],{"className":38,"code":464,"language":40,"meta":41,"style":41},[43,106394,106395],{"__ignoreMap":41},[46,106396,106397],{"class":48,"line":49},[46,106398,464],{"class":56},[19,106400,106401,106402,2400,106404,2400,106406,365],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[43,106403,103004],{},[43,106405,103007],{},[43,106407,103001],{},[19,106409,106410],{},"重置仿真:",[36,106412,106414],{"className":38,"code":106413,"language":40,"meta":41,"style":41},"mujoco.mj_resetData(model, data)\n",[43,106415,106416],{"__ignoreMap":41},[46,106417,106418],{"class":48,"line":49},[46,106419,106413],{"class":56},[19,106421,106422,106423,2006,106425,106427],{},"如果手动修改了 ",[43,106424,103004],{},[43,106426,103007],{},"，通常应调用:",[36,106429,106431],{"className":38,"code":106430,"language":40,"meta":41,"style":41},"mujoco.mj_forward(model, data)\n",[43,106432,106433],{"__ignoreMap":41},[46,106434,106435],{"class":48,"line":49},[46,106436,106430],{"class":56},[19,106438,106439],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[479,106441,106443,2400,106445,2400,106447,106449],{"id":106442},"qposqvelctrl-是什么",[43,106444,105919],{},[43,106446,106248],{},[43,106448,106251],{}," 是什么",[19,106451,106452],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[97,106454,106455,106467],{},[100,106456,106457],{},[103,106458,106459,106462,106464],{},[106,106460,106461],{"align":108},"字段",[106,106463,102659],{"align":108},[106,106465,106466],{"align":108},"谁来修改",[120,106468,106469,106481,106493],{},[103,106470,106471,106475,106478],{},[125,106472,106473],{"align":108},[43,106474,103004],{},[125,106476,106477],{"align":108},"广义位置，例如小车位置、关节角、自由物体位置姿态",[125,106479,106480],{"align":108},"MuJoCo 更新，也可以手动设置初始状态",[103,106482,106483,106487,106490],{},[125,106484,106485],{"align":108},[43,106486,103007],{},[125,106488,106489],{"align":108},"广义速度，例如小车速度、关节角速度",[125,106491,106492],{"align":108},"MuJoCo 更新，也可以手动清零",[103,106494,106495,106499,106502],{},[125,106496,106497],{"align":108},[43,106498,103010],{},[125,106500,106501],{"align":108},"actuator 的控制输入",[125,106503,106504],{"align":108},"主要由你的控制代码写入",[19,106506,11029,106507,1700,106509,106511],{},[43,106508,105919],{},[43,106510,106248],{}," 不一定同维。自由刚体就是典型例子：",[36,106513,106516],{"className":106514,"code":106515,"language":571,"meta":41},[569],"freejoint: qpos 7 维，qvel 6 维\n",[43,106517,106515],{"__ignoreMap":41},[479,106519,106521,1700,106523,106525],{"id":106520},"mj_step-和-mj_forward-的区别",[43,106522,504],{},[43,106524,106138],{}," 的区别",[97,106527,106528,106541],{},[100,106529,106530],{},[103,106531,106532,106535,106538],{},[106,106533,106534],{"align":108},"函数",[106,106536,106537],{"align":108},"是否推进时间",[106,106539,106540],{"align":108},"什么时候用",[120,106542,106543,106555],{},[103,106544,106545,106550,106552],{},[125,106546,106547],{"align":108},[43,106548,106549],{},"mj_step(model, data)",[125,106551,133],{"align":108},[125,106553,106554],{"align":108},"正常仿真循环，每调用一次前进一步",[103,106556,106557,106562,106564],{},[125,106558,106559],{"align":108},[43,106560,106561],{},"mj_forward(model, data)",[125,106563,147],{"align":108},[125,106565,106566,106567,2400,106569,106571],{"align":108},"手动改了 ",[43,106568,105919],{},[43,106570,106248],{}," 后，刷新派生量",[19,106573,106574],{},"例如你写：",[36,106576,106578],{"className":38,"code":106577,"language":40,"meta":41,"style":41},"data.qpos[2] = 2.0\n",[43,106579,106580],{"__ignoreMap":41},[46,106581,106582,106585,106587,106589,106591],{"class":48,"line":49},[46,106583,106584],{"class":56},"data.qpos[",[46,106586,2272],{"class":180},[46,106588,6460],{"class":56},[46,106590,79],{"class":52},[46,106592,106593],{"class":180}," 2.0\n",[19,106595,106596],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[36,106598,106599],{"className":38,"code":106430,"language":40,"meta":41,"style":41},[43,106600,106601],{"__ignoreMap":41},[46,106602,106603],{"class":48,"line":49},[46,106604,106430],{"class":56},[479,106606,106608],{"id":106607},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[19,106610,106611,106614,106615,106617],{},[43,106612,106613],{},"mujoco.mj_resetData(model, data)"," 会把 ",[43,106616,1516],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[36,106619,106621],{"className":38,"code":106620,"language":40,"meta":41,"style":41},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[43,106622,106623,106627,106637,106647],{"__ignoreMap":41},[46,106624,106625],{"class":48,"line":49},[46,106626,106413],{"class":56},[46,106628,106629,106632,106634],{"class":48,"line":60},[46,106630,106631],{"class":56},"data.qpos[:] ",[46,106633,79],{"class":52},[46,106635,106636],{"class":56}," random_qpos\n",[46,106638,106639,106642,106644],{"class":48,"line":200},[46,106640,106641],{"class":56},"data.qvel[:] ",[46,106643,79],{"class":52},[46,106645,106646],{"class":180}," 0.0\n",[46,106648,106649],{"class":48,"line":211},[46,106650,106430],{"class":56},[14,106652,595],{"id":594},[36,106654,106656],{"className":38,"code":106655,"language":40,"meta":41,"style":41},"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",[43,106657,106658,106664,106674,106678,106682,106690,106695,106699,106703,106707,106712,106716,106721,106726,106731,106735,106739,106743,106747,106751,106755,106774,106781,106793,106804,106820,106836,106840,106844,106856,106868,106876,106880,106891,106895,106911,106915,106919,106928,106932,106937,106946,106950,106963,106968,106977,106981,106985,106997],{"__ignoreMap":41},[46,106659,106660,106662],{"class":48,"line":49},[46,106661,53],{"class":52},[46,106663,623],{"class":56},[46,106665,106666,106668,106670,106672],{"class":48,"line":60},[46,106667,53],{"class":52},[46,106669,33358],{"class":56},[46,106671,398],{"class":52},[46,106673,33363],{"class":56},[46,106675,106676],{"class":48,"line":200},[46,106677,616],{"emptyLinePlaceholder":615},[46,106679,106680],{"class":48,"line":211},[46,106681,616],{"emptyLinePlaceholder":615},[46,106683,106684,106686,106688],{"class":48,"line":222},[46,106685,644],{"class":180},[46,106687,647],{"class":52},[46,106689,650],{"class":173},[46,106691,106692],{"class":48,"line":636},[46,106693,106694],{"class":173},"\u003Cmujoco model=\"state_api\">\n",[46,106696,106697],{"class":48,"line":641},[46,106698,662],{"class":173},[46,106700,106701],{"class":48,"line":653},[46,106702,616],{"emptyLinePlaceholder":615},[46,106704,106705],{"class":48,"line":659},[46,106706,673],{"class":173},[46,106708,106709],{"class":48,"line":665},[46,106710,106711],{"class":173},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[46,106713,106714],{"class":48,"line":670},[46,106715,616],{"emptyLinePlaceholder":615},[46,106717,106718],{"class":48,"line":676},[46,106719,106720],{"class":173},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[46,106722,106723],{"class":48,"line":682},[46,106724,106725],{"class":173},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[46,106727,106728],{"class":48,"line":688},[46,106729,106730],{"class":173},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[46,106732,106733],{"class":48,"line":693},[46,106734,714],{"class":173},[46,106736,106737],{"class":48,"line":699},[46,106738,720],{"class":173},[46,106740,106741],{"class":48,"line":705},[46,106742,726],{"class":173},[46,106744,106745],{"class":48,"line":711},[46,106746,732],{"class":173},[46,106748,106749],{"class":48,"line":717},[46,106750,616],{"emptyLinePlaceholder":615},[46,106752,106753],{"class":48,"line":723},[46,106754,616],{"emptyLinePlaceholder":615},[46,106756,106757,106759,106762,106765,106767,106770,106772],{"class":48,"line":729},[46,106758,748],{"class":52},[46,106760,106761],{"class":169}," print_state",[46,106763,106764],{"class":56},"(prefix: ",[46,106766,3354],{"class":180},[46,106768,106769],{"class":56},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[46,106771,757],{"class":180},[46,106773,760],{"class":56},[46,106775,106776,106778],{"class":48,"line":735},[46,106777,1227],{"class":180},[46,106779,106780],{"class":56},"(prefix)\n",[46,106782,106783,106785,106787,106790],{"class":48,"line":740},[46,106784,1227],{"class":180},[46,106786,1152],{"class":56},[46,106788,106789],{"class":173},"\"  timestep:\"",[46,106791,106792],{"class":56},", model.opt.timestep)\n",[46,106794,106795,106797,106799,106802],{"class":48,"line":745},[46,106796,1227],{"class":180},[46,106798,1152],{"class":56},[46,106800,106801],{"class":173},"\"  time:\"",[46,106803,103391],{"class":56},[46,106805,106806,106808,106810,106813,106816,106818],{"class":48,"line":763},[46,106807,1227],{"class":180},[46,106809,1152],{"class":56},[46,106811,106812],{"class":173},"\"  qpos:\"",[46,106814,106815],{"class":56},", np.round(data.qpos.copy(), ",[46,106817,2481],{"class":180},[46,106819,32479],{"class":56},[46,106821,106822,106824,106826,106829,106832,106834],{"class":48,"line":778},[46,106823,1227],{"class":180},[46,106825,1152],{"class":56},[46,106827,106828],{"class":173},"\"  qvel:\"",[46,106830,106831],{"class":56},", np.round(data.qvel.copy(), ",[46,106833,2481],{"class":180},[46,106835,32479],{"class":56},[46,106837,106838],{"class":48,"line":789},[46,106839,616],{"emptyLinePlaceholder":615},[46,106841,106842],{"class":48,"line":794},[46,106843,616],{"emptyLinePlaceholder":615},[46,106845,106846,106848,106850,106852,106854],{"class":48,"line":806},[46,106847,748],{"class":52},[46,106849,751],{"class":169},[46,106851,754],{"class":56},[46,106853,757],{"class":180},[46,106855,760],{"class":56},[46,106857,106858,106860,106862,106864,106866],{"class":48,"line":829},[46,106859,766],{"class":56},[46,106861,79],{"class":52},[46,106863,771],{"class":56},[46,106865,644],{"class":180},[46,106867,459],{"class":56},[46,106869,106870,106872,106874],{"class":48,"line":840},[46,106871,781],{"class":56},[46,106873,79],{"class":52},[46,106875,786],{"class":56},[46,106877,106878],{"class":48,"line":846},[46,106879,616],{"emptyLinePlaceholder":615},[46,106881,106882,106885,106888],{"class":48,"line":852},[46,106883,106884],{"class":56},"    print_state(",[46,106886,106887],{"class":173},"\"initial\"",[46,106889,106890],{"class":56},", model, data)\n",[46,106892,106893],{"class":48,"line":857},[46,106894,616],{"emptyLinePlaceholder":615},[46,106896,106897,106899,106901,106903,106905,106907,106909],{"class":48,"line":875},[46,106898,1140],{"class":52},[46,106900,1143],{"class":56},[46,106902,1146],{"class":52},[46,106904,1149],{"class":180},[46,106906,1152],{"class":56},[46,106908,2842],{"class":180},[46,106910,1158],{"class":56},[46,106912,106913],{"class":48,"line":892},[46,106914,414],{"class":56},[46,106916,106917],{"class":48,"line":898},[46,106918,616],{"emptyLinePlaceholder":615},[46,106920,106921,106923,106926],{"class":48,"line":903},[46,106922,106884],{"class":56},[46,106924,106925],{"class":173},"\"after 50 steps\"",[46,106927,106890],{"class":56},[46,106929,106930],{"class":48,"line":908},[46,106931,616],{"emptyLinePlaceholder":615},[46,106933,106934],{"class":48,"line":925},[46,106935,106936],{"class":56},"    mujoco.mj_resetData(model, data)\n",[46,106938,106939,106941,106944],{"class":48,"line":1238},[46,106940,106884],{"class":56},[46,106942,106943],{"class":173},"\"after reset\"",[46,106945,106890],{"class":56},[46,106947,106948],{"class":48,"line":1251},[46,106949,616],{"emptyLinePlaceholder":615},[46,106951,106952,106955,106957,106959,106961],{"class":48,"line":1256},[46,106953,106954],{"class":56},"    data.qpos[",[46,106956,2272],{"class":180},[46,106958,6460],{"class":56},[46,106960,79],{"class":52},[46,106962,106593],{"class":180},[46,106964,106965],{"class":48,"line":1261},[46,106966,106967],{"class":56},"    mujoco.mj_forward(model, data)\n",[46,106969,106970,106972,106975],{"class":48,"line":1274},[46,106971,106884],{"class":56},[46,106973,106974],{"class":173},"\"after manual qpos edit\"",[46,106976,106890],{"class":56},[46,106978,106979],{"class":48,"line":10061},[46,106980,616],{"emptyLinePlaceholder":615},[46,106982,106983],{"class":48,"line":11720},[46,106984,616],{"emptyLinePlaceholder":615},[46,106986,106987,106989,106991,106993,106995],{"class":48,"line":11745},[46,106988,911],{"class":52},[46,106990,914],{"class":180},[46,106992,917],{"class":52},[46,106994,920],{"class":173},[46,106996,760],{"class":56},[46,106998,106999],{"class":48,"line":11768},[46,107000,928],{"class":56},[19,107002,931],{},[36,107004,107006],{"className":160,"code":107005,"language":162,"meta":41,"style":41},"touch ch3_python_state.py\n",[43,107007,107008],{"__ignoreMap":41},[46,107009,107010,107012],{"class":48,"line":49},[46,107011,941],{"class":169},[46,107013,107014],{"class":173}," ch3_python_state.py\n",[19,107016,104206],{},[36,107018,107020],{"className":160,"code":107019,"language":162,"meta":41,"style":41},"python ch3_python_state.py\n",[43,107021,107022],{"__ignoreMap":41},[46,107023,107024,107026],{"class":48,"line":49},[46,107025,40],{"class":169},[46,107027,107014],{"class":173},[479,107029,1293],{"id":1293},[19,107031,107032],{},"打印状态的函数：",[36,107034,107036],{"className":38,"code":107035,"language":40,"meta":41,"style":41},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[43,107037,107038],{"__ignoreMap":41},[46,107039,107040,107042,107044,107046,107048,107050,107052],{"class":48,"line":49},[46,107041,748],{"class":52},[46,107043,106761],{"class":169},[46,107045,106764],{"class":56},[46,107047,3354],{"class":180},[46,107049,106769],{"class":56},[46,107051,757],{"class":180},[46,107053,760],{"class":56},[19,107055,107056,107057,107059],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[43,107058,1516],{}," 里发生了什么。",[19,107061,107062],{},"推进 50 步：",[36,107064,107066],{"className":38,"code":107065,"language":40,"meta":41,"style":41},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[43,107067,107068,107084],{"__ignoreMap":41},[46,107069,107070,107072,107074,107076,107078,107080,107082],{"class":48,"line":49},[46,107071,1713],{"class":52},[46,107073,1143],{"class":56},[46,107075,1146],{"class":52},[46,107077,1149],{"class":180},[46,107079,1152],{"class":56},[46,107081,2842],{"class":180},[46,107083,1158],{"class":56},[46,107085,107086],{"class":48,"line":60},[46,107087,1730],{"class":56},[19,107089,107090,107091,107094,107095,107097],{},"由于 ",[43,107092,107093],{},"timestep=0.01","，所以 50 步后时间约为 ",[43,107096,37301],{}," 秒。",[19,107099,107100],{},"重置：",[36,107102,107103],{"className":38,"code":106413,"language":40,"meta":41,"style":41},[43,107104,107105],{"__ignoreMap":41},[46,107106,107107],{"class":48,"line":49},[46,107108,106413],{"class":56},[19,107110,107111],{},"这会把时间、位置、速度恢复到初始状态。",[19,107113,107114],{},"手动改高度：",[36,107116,107118],{"className":38,"code":107117,"language":40,"meta":41,"style":41},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[43,107119,107120,107132],{"__ignoreMap":41},[46,107121,107122,107124,107126,107128,107130],{"class":48,"line":49},[46,107123,106584],{"class":56},[46,107125,2272],{"class":180},[46,107127,6460],{"class":56},[46,107129,79],{"class":52},[46,107131,106593],{"class":180},[46,107133,107134],{"class":48,"line":60},[46,107135,106430],{"class":56},[19,107137,107138,107139,107142,107143,107146],{},"这个例子里 ",[43,107140,107141],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[43,107144,107145],{},"2.0"," 表示把小球放到更高的位置。",[479,107148,103613],{"id":103613},[36,107150,107151],{"className":38,"code":107035,"language":40,"meta":41,"style":41},[43,107152,107153],{"__ignoreMap":41},[46,107154,107155,107157,107159,107161,107163,107165,107167],{"class":48,"line":49},[46,107156,748],{"class":52},[46,107158,106761],{"class":169},[46,107160,106764],{"class":56},[46,107162,3354],{"class":180},[46,107164,106769],{"class":56},[46,107166,757],{"class":180},[46,107168,760],{"class":56},[19,107170,107171],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[23,107173,107174,107183,107188],{},[26,107175,107176,107179,107180,107182],{},[43,107177,107178],{},"prefix","：一段文字，比如 ",[43,107181,106887],{},"，用来说明现在打印的是哪个阶段。",[26,107184,107185,107187],{},[43,107186,103990],{},"：MuJoCo 模型。",[26,107189,107190,107192],{},[43,107191,1516],{},"：MuJoCo 当前状态。",[19,107194,107195,2400,107198,107201],{},[43,107196,107197],{},"prefix: str",[43,107199,107200],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[36,107203,107205],{"className":38,"code":107204,"language":40,"meta":41,"style":41},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[43,107206,107207],{"__ignoreMap":41},[46,107208,107209,107211,107213,107215,107217,107219],{"class":48,"line":49},[46,107210,32398],{"class":180},[46,107212,1152],{"class":56},[46,107214,106812],{"class":173},[46,107216,106815],{"class":56},[46,107218,2481],{"class":180},[46,107220,32479],{"class":56},[19,107222,107223,107226],{},[43,107224,107225],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[36,107228,107230],{"className":38,"code":107229,"language":40,"meta":41,"style":41},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[43,107231,107232,107244],{"__ignoreMap":41},[46,107233,107234,107236,107238,107240,107242],{"class":48,"line":49},[46,107235,103541],{"class":56},[46,107237,79],{"class":52},[46,107239,771],{"class":56},[46,107241,644],{"class":180},[46,107243,459],{"class":56},[46,107245,107246,107248,107250],{"class":48,"line":60},[46,107247,103565],{"class":56},[46,107249,79],{"class":52},[46,107251,786],{"class":56},[19,107253,107254],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[36,107256,107258],{"className":38,"code":107257,"language":40,"meta":41,"style":41},"print_state(\"initial\", model, data)\n",[43,107259,107260],{"__ignoreMap":41},[46,107261,107262,107265,107267],{"class":48,"line":49},[46,107263,107264],{"class":56},"print_state(",[46,107266,106887],{"class":173},[46,107268,106890],{"class":56},[19,107270,107271,107272,107275],{},"调用刚才定义的 ",[43,107273,107274],{},"print_state"," 函数，打印初始状态。",[36,107277,107278],{"className":38,"code":107065,"language":40,"meta":41,"style":41},[43,107279,107280,107296],{"__ignoreMap":41},[46,107281,107282,107284,107286,107288,107290,107292,107294],{"class":48,"line":49},[46,107283,1713],{"class":52},[46,107285,1143],{"class":56},[46,107287,1146],{"class":52},[46,107289,1149],{"class":180},[46,107291,1152],{"class":56},[46,107293,2842],{"class":180},[46,107295,1158],{"class":56},[46,107297,107298],{"class":48,"line":60},[46,107299,1730],{"class":56},[19,107301,107302],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[36,107304,107305],{"className":38,"code":106413,"language":40,"meta":41,"style":41},[43,107306,107307],{"__ignoreMap":41},[46,107308,107309],{"class":48,"line":49},[46,107310,106413],{"class":56},[19,107312,107313,107314,107316,107317,107319],{},"重置 ",[43,107315,1516],{},"。注意它不会重新创建 ",[43,107318,103990],{},"，因为模型结构没有变，只是状态回到初始值。",[36,107321,107322],{"className":38,"code":106577,"language":40,"meta":41,"style":41},[43,107323,107324],{"__ignoreMap":41},[46,107325,107326,107328,107330,107332,107334],{"class":48,"line":49},[46,107327,106584],{"class":56},[46,107329,2272],{"class":180},[46,107331,6460],{"class":56},[46,107333,79],{"class":52},[46,107335,106593],{"class":180},[19,107337,107338,107339,2400,107342,2400,107345,107347],{},"这行是“手动改状态”。在 freejoint 中，",[43,107340,107341],{},"qpos[0]",[43,107343,107344],{},"qpos[1]",[43,107346,107141],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[36,107349,107350],{"className":38,"code":106430,"language":40,"meta":41,"style":41},[43,107351,107352],{"__ignoreMap":41},[46,107353,107354],{"class":48,"line":49},[46,107355,106430],{"class":56},[19,107357,107358,107359,107361,107362,107364],{},"手动改完 ",[43,107360,105919],{}," 后，调用 ",[43,107363,106138],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,107366,1811],{"id":1810},[19,107368,107369],{},"你会看到:",[23,107371,107372,107377,107382,107385],{},[26,107373,107374,107375],{},"初始时间为 ",[43,107376,2379],{},[26,107378,107379,107380],{},"50 步后时间约为 ",[43,107381,37301],{},[26,107383,107384],{},"reset 后状态恢复",[26,107386,107387,107388,107391,107392],{},"手动修改 ",[43,107389,107390],{},"data.qpos[2]"," 后，小球高度变为 ",[43,107393,107145],{},[19,107395,107396,107398],{},[43,107397,107141],{}," 在这个例子中表示自由刚体的 z 坐标。",[19,107400,107401],{},"输出里可以重点看三件事：",[23,107403,107404,107412,107417],{},[26,107405,107406,107408,107409,107411],{},[43,107407,4416],{}," 是否随着 ",[43,107410,504],{}," 增加。",[26,107413,107414,107416],{},[43,107415,105919],{}," 的 z 坐标是否因为下落而变化。",[26,107418,107419,107421,107422,365],{},[43,107420,106240],{}," 后时间是否回到 ",[43,107423,2379],{},[14,107425,1842],{"id":1841},[23,107427,107428,107434,107440,107446,107449,107458],{},[26,107429,107430,107431,365],{},"修改 timestep 为 ",[43,107432,107433],{},"0.005",[26,107435,107436,107437,365],{},"重新运行，检查 50 步后时间是否约为 ",[43,107438,107439],{},"0.25",[26,107441,107442,107443,365],{},"修改重力为 ",[43,107444,107445],{},"0 0 -1.0",[26,107447,107448],{},"观察小球下降速度是否变慢。",[26,107450,104312,107451,1938,107454,107457],{},[43,107452,107453],{},"data.qpos[2] = 2.0",[43,107455,107456],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[26,107459,107460,107461,107464],{},"注释掉 ",[43,107462,107463],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,107466,1946],{"id":1945},[479,107468,107470,107471,107473],{"id":107469},"修改-dataqpos-后位置没有更新","修改 ",[43,107472,103004],{}," 后位置没有更新",[19,107475,104360],{},[36,107477,107478],{"className":38,"code":106430,"language":40,"meta":41,"style":41},[43,107479,107480],{"__ignoreMap":41},[46,107481,107482],{"class":48,"line":49},[46,107483,106430],{"class":56},[479,107485,107486],{"id":107486},"数组维度看不懂",[19,107488,107489],{},"打印模型维度:",[36,107491,107493],{"className":38,"code":107492,"language":40,"meta":41,"style":41},"print(model.nq, model.nv, model.nu)\n",[43,107494,107495],{"__ignoreMap":41},[46,107496,107497,107499],{"class":48,"line":49},[46,107498,32398],{"class":180},[46,107500,107501],{"class":56},"(model.nq, model.nv, model.nu)\n",[97,107503,107504,107512],{},[100,107505,107506],{},[103,107507,107508,107510],{},[106,107509,106461],{"align":108},[106,107511,102659],{"align":108},[120,107513,107514,107524,107534],{},[103,107515,107516,107521],{},[125,107517,107518],{"align":108},[43,107519,107520],{},"nq",[125,107522,107523],{"align":108},"位置变量数量",[103,107525,107526,107531],{},[125,107527,107528],{"align":108},[43,107529,107530],{},"nv",[125,107532,107533],{"align":108},"速度变量数量",[103,107535,107536,107540],{},[125,107537,107538],{"align":108},[43,107539,104067],{},[125,107541,107542],{"align":108},"控制输入数量",[479,107544,107546,107547,107549],{"id":107545},"误以为-qpos-一定等于关节数","误以为 ",[43,107548,105919],{}," 一定等于关节数",[19,107551,107552,107553,84494,107555,107557,107558,107560],{},"不是。例如 ",[43,107554,103527],{},[43,107556,105919],{}," 是 7 维，但 ",[43,107559,106248],{}," 是 6 维。",[479,107562,107564,107565,107567],{"id":107563},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[43,107566,105919],{}," 的第几位",[19,107569,107570],{},"初学时可以先打印：",[36,107572,107574],{"className":38,"code":107573,"language":40,"meta":41,"style":41},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[43,107575,107576,107586,107596,107608],{"__ignoreMap":41},[46,107577,107578,107580,107582,107584],{"class":48,"line":49},[46,107579,32398],{"class":180},[46,107581,1152],{"class":56},[46,107583,103352],{"class":173},[46,107585,103355],{"class":56},[46,107587,107588,107590,107592,107594],{"class":48,"line":60},[46,107589,32398],{"class":180},[46,107591,1152],{"class":56},[46,107593,103364],{"class":173},[46,107595,103367],{"class":56},[46,107597,107598,107600,107602,107605],{"class":48,"line":200},[46,107599,32398],{"class":180},[46,107601,1152],{"class":56},[46,107603,107604],{"class":173},"\"qpos:\"",[46,107606,107607],{"class":56},", data.qpos)\n",[46,107609,107610,107612,107614,107617],{"class":48,"line":211},[46,107611,32398],{"class":180},[46,107613,1152],{"class":56},[46,107615,107616],{"class":173},"\"qvel:\"",[46,107618,107619],{"class":56},", data.qvel)\n",[19,107621,107622],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[479,107624,107625],{"id":107625},"仿真结果每次都一样",[19,107627,107628,107629,107631],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[43,107630,105919],{},"、目标点或控制输入。",[14,107633,2082],{"id":2081},[19,107635,107636,107637,26615],{},"Python 控制 MuJoCo 的核心就是读写 ",[43,107638,1516],{},[23,107640,107641,107649,107654,107659],{},[26,107642,107643,107644,1700,107646,107648],{},"用 ",[43,107645,103004],{},[43,107647,103007],{}," 读取状态。",[26,107650,107643,107651,107653],{},[43,107652,103010],{}," 写入控制。",[26,107655,107643,107656,107658],{},[43,107657,504],{}," 推进时间。",[26,107660,107661,107662,107664],{},"手动改状态后用 ",[43,107663,106138],{}," 刷新派生量。",[19,107666,107667],{},"理解这一章后，就可以进入关节和 actuator 控制。",[2098,107669,107670],{},"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":41,"searchDepth":60,"depth":60,"links":107672},[107673,107674,107675,107682,107686,107687,107688,107698],{"id":16,"depth":60,"text":17},{"id":153,"depth":60,"text":154},{"id":375,"depth":60,"text":376,"children":107676},[107677,107679,107681],{"id":106442,"depth":200,"text":107678},"qpos、qvel、ctrl 是什么",{"id":106520,"depth":200,"text":107680},"mj_step 和 mj_forward 的区别",{"id":106607,"depth":200,"text":106608},{"id":594,"depth":60,"text":595,"children":107683},[107684,107685],{"id":1293,"depth":200,"text":1293},{"id":103613,"depth":200,"text":103613},{"id":1810,"depth":60,"text":1811},{"id":1841,"depth":60,"text":1842},{"id":1945,"depth":60,"text":1946,"children":107689},[107690,107692,107693,107695,107697],{"id":107469,"depth":200,"text":107691},"修改 data.qpos 后位置没有更新",{"id":107486,"depth":200,"text":107486},{"id":107545,"depth":200,"text":107694},"误以为 qpos 一定等于关节数",{"id":107563,"depth":200,"text":107696},"不知道某个元素在 qpos 的第几位",{"id":107625,"depth":200,"text":107625},{"id":2081,"depth":60,"text":2082},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":106206,"description":41},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":107705,"title":107706,"body":107707,"description":41,"extension":2125,"meta":109397,"navigation":615,"path":109398,"seo":109399,"stem":109400,"__hash__":109401},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":107708,"toc":109373},[107709,107712,107714,107717,107719,107744,107747,107766,107769,107771,107773,107797,107799,107813,107815,107856,107858,107882,107884,107887,107921,107923,107936,107939,108007,108016,108020,108023,108057,108063,108066,108070,108109,108112,108132,108136,108179,108181,108210,108213,108219,108222,108224,108618,108620,108632,108634,108645,108647,108650,108679,108687,108690,108725,108728,108730,108738,108741,108743,108754,108764,108784,108787,108823,108835,108883,108902,108944,108957,108985,108990,109011,109021,109039,109042,109076,109079,109099,109102,109121,109127,109129,109132,109138,109144,109154,109157,109163,109172,109174,109220,109222,109228,109234,109237,109240,109260,109263,109269,109275,109277,109300,109303,109306,109315,109318,109356,109358,109361,109367,109370],[10,107710,107706],{"id":107711},"_4关节actuator-与力控制",[14,107713,17],{"id":16},[19,107715,107716],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[19,107718,106219],{},[23,107720,107721,107727,107732,107736,107741],{},[26,107722,107723,107726],{},[43,107724,107725],{},"hinge"," 关节",[26,107728,107729],{},[43,107730,107731],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[26,107733,107734],{},[43,107735,103010],{},[26,107737,107738],{},[43,107739,107740],{},"ctrlrange",[26,107742,107743],{},"读取关节角和角速度",[19,107745,107746],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[36,107748,107750],{"className":38,"code":107749,"language":40,"meta":41,"style":41},"data.ctrl[0] = ...\n",[43,107751,107752],{"__ignoreMap":41},[46,107753,107754,107757,107759,107761,107763],{"class":48,"line":49},[46,107755,107756],{"class":56},"data.ctrl[",[46,107758,2379],{"class":180},[46,107760,6460],{"class":56},[46,107762,79],{"class":52},[46,107764,107765],{"class":180}," ...\n",[19,107767,107768],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,107770,154],{"id":153},[19,107772,157],{},[36,107774,107775],{"className":160,"code":106276,"language":162,"meta":41,"style":41},[43,107776,107777],{"__ignoreMap":41},[46,107778,107779,107781,107783,107785,107787,107789,107791,107793,107795],{"class":48,"line":49},[46,107780,170],{"class":169},[46,107782,174],{"class":173},[46,107784,177],{"class":173},[46,107786,181],{"class":180},[46,107788,106291],{"class":173},[46,107790,102754],{"class":173},[46,107792,104399],{"class":173},[46,107794,195],{"class":173},[46,107796,106300],{"class":173},[19,107798,240],{},[36,107800,107801],{"className":160,"code":102863,"language":162,"meta":41,"style":41},[43,107802,107803],{"__ignoreMap":41},[46,107804,107805,107807,107809,107811],{"class":48,"line":49},[46,107806,250],{"class":169},[46,107808,177],{"class":173},[46,107810,255],{"class":173},[46,107812,102876],{"class":173},[19,107814,264],{},[36,107816,107818],{"className":160,"code":107817,"language":162,"meta":41,"style":41},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[43,107819,107820,107837,107846],{"__ignoreMap":41},[46,107821,107822,107824,107826,107828,107831,107833,107835],{"class":48,"line":49},[46,107823,274],{"class":169},[46,107825,277],{"class":173},[46,107827,280],{"class":180},[46,107829,107830],{"class":173}," mujoco-control",[46,107832,286],{"class":173},[46,107834,289],{"class":180},[46,107836,292],{"class":180},[46,107838,107839,107841,107843],{"class":48,"line":60},[46,107840,274],{"class":169},[46,107842,299],{"class":173},[46,107844,107845],{"class":173}," mujoco-control\n",[46,107847,107848,107850,107852,107854],{"class":48,"line":200},[46,107849,250],{"class":169},[46,107851,177],{"class":173},[46,107853,255],{"class":173},[46,107855,102876],{"class":173},[19,107857,102943],{},[23,107859,107860,107866,107873,107879],{},[26,107861,107862,107865],{},[43,107863,107864],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[26,107867,107868,107870,107871,365],{},[43,107869,103010],{}," 长度等于 ",[43,107872,104063],{},[26,107874,84186,107875,107878],{},[43,107876,107877],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[26,107880,107881],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,107883,376],{"id":375},[19,107885,107886],{},"关节决定 body 如何运动:",[36,107888,107890],{"className":1350,"code":107889,"language":1352,"meta":41,"style":41},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[43,107891,107892],{"__ignoreMap":41},[46,107893,107894,107896,107898,107900,107902,107905,107907,107909,107911,107914,107916,107919],{"class":48,"line":49},[46,107895,821],{"class":56},[46,107897,104846],{"class":1361},[46,107899,1364],{"class":169},[46,107901,79],{"class":56},[46,107903,107904],{"class":173},"\"hinge\"",[46,107906,55789],{"class":169},[46,107908,79],{"class":56},[46,107910,107904],{"class":173},[46,107912,107913],{"class":169}," axis",[46,107915,79],{"class":56},[46,107917,107918],{"class":173},"\"0 1 0\"",[46,107920,1387],{"class":56},[19,107922,104942],{},[23,107924,107925,107930,107933],{},[26,107926,107927,107928],{},"名字是 ",[43,107929,107725],{},[26,107931,107932],{},"类型是旋转关节",[26,107934,107935],{},"绕 y 轴旋转",[19,107937,107938],{},"actuator 决定如何施加控制:",[36,107940,107942],{"className":1350,"code":107941,"language":1352,"meta":41,"style":41},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[43,107943,107944,107953,107999],{"__ignoreMap":41},[46,107945,107946,107948,107951],{"class":48,"line":49},[46,107947,821],{"class":56},[46,107949,107950],{"class":1361},"actuator",[46,107952,53274],{"class":56},[46,107954,107955,107957,107960,107962,107964,107967,107970,107972,107974,107977,107979,107981,107984,107986,107989,107992,107994,107997],{"class":48,"line":60},[46,107956,54111],{"class":56},[46,107958,107959],{"class":1361},"motor",[46,107961,1364],{"class":169},[46,107963,79],{"class":56},[46,107965,107966],{"class":173},"\"hinge_motor\"",[46,107968,107969],{"class":169}," joint",[46,107971,79],{"class":56},[46,107973,107904],{"class":173},[46,107975,107976],{"class":169}," gear",[46,107978,79],{"class":56},[46,107980,5697],{"class":173},[46,107982,107983],{"class":169}," ctrlrange",[46,107985,79],{"class":56},[46,107987,107988],{"class":173},"\"-2 2\"",[46,107990,107991],{"class":169}," ctrllimited",[46,107993,79],{"class":56},[46,107995,107996],{"class":173},"\"true\"",[46,107998,1387],{"class":56},[46,108000,108001,108003,108005],{"class":48,"line":200},[46,108002,53752],{"class":56},[46,108004,107950],{"class":1361},[46,108006,53274],{"class":56},[19,108008,108009,108012,108013,365],{},[43,108010,108011],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[43,108014,108015],{},"[-2, 2]",[479,108017,108019],{"id":108018},"joint-和-actuator-的关系","joint 和 actuator 的关系",[19,108021,108022],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[97,108024,108025,108035],{},[100,108026,108027],{},[103,108028,108029,108031,108033],{},[106,108030,27745],{"align":108},[106,108032,104588],{"align":108},[106,108034,102693],{"align":108},[120,108036,108037,108047],{},[103,108038,108039,108041,108044],{},[125,108040,104846],{"align":108},[125,108042,108043],{"align":108},"定义能怎么动",[125,108045,108046],{"align":108},"门轴允许门旋转",[103,108048,108049,108051,108054],{},[125,108050,107950],{"align":108},[125,108052,108053],{"align":108},"定义怎么施力或控制",[125,108055,108056],{"align":108},"人推门、马达带动门",[19,108058,108059,108060,108062],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[43,108061,103010],{}," 主动控制它。",[19,108064,108065],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[479,108067,108069],{"id":108068},"hinge-joint","hinge joint",[36,108071,108073],{"className":1350,"code":108072,"language":1352,"meta":41,"style":41},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[43,108074,108075],{"__ignoreMap":41},[46,108076,108077,108079,108081,108083,108085,108087,108089,108091,108093,108095,108097,108099,108102,108104,108107],{"class":48,"line":49},[46,108078,821],{"class":56},[46,108080,104846],{"class":1361},[46,108082,1364],{"class":169},[46,108084,79],{"class":56},[46,108086,107904],{"class":173},[46,108088,55789],{"class":169},[46,108090,79],{"class":56},[46,108092,107904],{"class":173},[46,108094,107913],{"class":169},[46,108096,79],{"class":56},[46,108098,107918],{"class":173},[46,108100,108101],{"class":169}," damping",[46,108103,79],{"class":56},[46,108105,108106],{"class":173},"\"0.1\"",[46,108108,1387],{"class":56},[19,108110,108111],{},"含义：",[23,108113,108114,108120,108126],{},[26,108115,108116,108119],{},[43,108117,108118],{},"type=\"hinge\"","：只能绕一个轴旋转。",[26,108121,108122,108125],{},[43,108123,108124],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[26,108127,108128,108131],{},[43,108129,108130],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[479,108133,108135],{"id":108134},"motor-actuator","motor actuator",[36,108137,108139],{"className":1350,"code":108138,"language":1352,"meta":41,"style":41},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[43,108140,108141],{"__ignoreMap":41},[46,108142,108143,108145,108147,108149,108151,108153,108155,108157,108159,108161,108163,108165,108167,108169,108171,108173,108175,108177],{"class":48,"line":49},[46,108144,821],{"class":56},[46,108146,107959],{"class":1361},[46,108148,1364],{"class":169},[46,108150,79],{"class":56},[46,108152,107966],{"class":173},[46,108154,107969],{"class":169},[46,108156,79],{"class":56},[46,108158,107904],{"class":173},[46,108160,107976],{"class":169},[46,108162,79],{"class":56},[46,108164,5697],{"class":173},[46,108166,107983],{"class":169},[46,108168,79],{"class":56},[46,108170,107988],{"class":173},[46,108172,107991],{"class":169},[46,108174,79],{"class":56},[46,108176,107996],{"class":173},[46,108178,1387],{"class":56},[19,108180,108111],{},[23,108182,108183,108192,108198,108204],{},[26,108184,108185,108188,108189,108191],{},[43,108186,108187],{},"joint=\"hinge\"","：这个电机作用在名为 ",[43,108190,107725],{}," 的关节上。",[26,108193,108194,108197],{},[43,108195,108196],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[26,108199,108200,108203],{},[43,108201,108202],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[26,108205,108206,108209],{},[43,108207,108208],{},"ctrllimited=\"true\"","：启用控制范围限制。",[19,108211,108212],{},"简单理解：",[36,108214,108217],{"className":108215,"code":108216,"language":571,"meta":41},[569],"实际施加效果 ≈ data.ctrl[0] * gear\n",[43,108218,108216],{"__ignoreMap":41},[19,108220,108221],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,108223,595],{"id":594},[36,108225,108227],{"className":38,"code":108226,"language":40,"meta":41,"style":41},"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",[43,108228,108229,108236,108240,108246,108256,108260,108264,108272,108277,108282,108286,108290,108295,108300,108304,108309,108314,108319,108324,108328,108332,108336,108341,108346,108351,108355,108359,108363,108367,108379,108391,108399,108403,108413,108423,108433,108437,108450,108463,108467,108484,108498,108533,108537,108541,108552,108567,108582,108594,108598,108602,108614],{"__ignoreMap":41},[46,108230,108231,108233],{"class":48,"line":49},[46,108232,53],{"class":52},[46,108234,108235],{"class":56}," math\n",[46,108237,108238],{"class":48,"line":60},[46,108239,616],{"emptyLinePlaceholder":615},[46,108241,108242,108244],{"class":48,"line":200},[46,108243,53],{"class":52},[46,108245,623],{"class":56},[46,108247,108248,108250,108252,108254],{"class":48,"line":211},[46,108249,53],{"class":52},[46,108251,33358],{"class":56},[46,108253,398],{"class":52},[46,108255,33363],{"class":56},[46,108257,108258],{"class":48,"line":222},[46,108259,616],{"emptyLinePlaceholder":615},[46,108261,108262],{"class":48,"line":636},[46,108263,616],{"emptyLinePlaceholder":615},[46,108265,108266,108268,108270],{"class":48,"line":641},[46,108267,644],{"class":180},[46,108269,647],{"class":52},[46,108271,650],{"class":173},[46,108273,108274],{"class":48,"line":653},[46,108275,108276],{"class":173},"\u003Cmujoco model=\"one_link_motor\">\n",[46,108278,108279],{"class":48,"line":659},[46,108280,108281],{"class":173},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[46,108283,108284],{"class":48,"line":665},[46,108285,616],{"emptyLinePlaceholder":615},[46,108287,108288],{"class":48,"line":670},[46,108289,673],{"class":173},[46,108291,108292],{"class":48,"line":676},[46,108293,108294],{"class":173},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[46,108296,108297],{"class":48,"line":682},[46,108298,108299],{"class":173},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[46,108301,108302],{"class":48,"line":688},[46,108303,616],{"emptyLinePlaceholder":615},[46,108305,108306],{"class":48,"line":693},[46,108307,108308],{"class":173},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[46,108310,108311],{"class":48,"line":699},[46,108312,108313],{"class":173},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[46,108315,108316],{"class":48,"line":705},[46,108317,108318],{"class":173},"        \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",[46,108320,108321],{"class":48,"line":711},[46,108322,108323],{"class":173},"      \u003C\u002Fbody>\n",[46,108325,108326],{"class":48,"line":717},[46,108327,714],{"class":173},[46,108329,108330],{"class":48,"line":723},[46,108331,720],{"class":173},[46,108333,108334],{"class":48,"line":729},[46,108335,616],{"emptyLinePlaceholder":615},[46,108337,108338],{"class":48,"line":735},[46,108339,108340],{"class":173},"  \u003Cactuator>\n",[46,108342,108343],{"class":48,"line":740},[46,108344,108345],{"class":173},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[46,108347,108348],{"class":48,"line":745},[46,108349,108350],{"class":173},"  \u003C\u002Factuator>\n",[46,108352,108353],{"class":48,"line":763},[46,108354,726],{"class":173},[46,108356,108357],{"class":48,"line":778},[46,108358,732],{"class":173},[46,108360,108361],{"class":48,"line":789},[46,108362,616],{"emptyLinePlaceholder":615},[46,108364,108365],{"class":48,"line":794},[46,108366,616],{"emptyLinePlaceholder":615},[46,108368,108369,108371,108373,108375,108377],{"class":48,"line":806},[46,108370,748],{"class":52},[46,108372,751],{"class":169},[46,108374,754],{"class":56},[46,108376,757],{"class":180},[46,108378,760],{"class":56},[46,108380,108381,108383,108385,108387,108389],{"class":48,"line":829},[46,108382,766],{"class":56},[46,108384,79],{"class":52},[46,108386,771],{"class":56},[46,108388,644],{"class":180},[46,108390,459],{"class":56},[46,108392,108393,108395,108397],{"class":48,"line":840},[46,108394,781],{"class":56},[46,108396,79],{"class":52},[46,108398,786],{"class":56},[46,108400,108401],{"class":48,"line":846},[46,108402,616],{"emptyLinePlaceholder":615},[46,108404,108405,108407,108409,108411],{"class":48,"line":852},[46,108406,1227],{"class":180},[46,108408,1152],{"class":56},[46,108410,103352],{"class":173},[46,108412,103355],{"class":56},[46,108414,108415,108417,108419,108421],{"class":48,"line":857},[46,108416,1227],{"class":180},[46,108418,1152],{"class":56},[46,108420,103364],{"class":173},[46,108422,103367],{"class":56},[46,108424,108425,108427,108429,108431],{"class":48,"line":875},[46,108426,1227],{"class":180},[46,108428,1152],{"class":56},[46,108430,103376],{"class":173},[46,108432,103379],{"class":56},[46,108434,108435],{"class":48,"line":892},[46,108436,616],{"emptyLinePlaceholder":615},[46,108438,108439,108441,108444,108446,108448],{"class":48,"line":898},[46,108440,5121],{"class":52},[46,108442,108443],{"class":56}," model.nu ",[46,108445,22949],{"class":52},[46,108447,27110],{"class":180},[46,108449,760],{"class":56},[46,108451,108452,108454,108456,108458,108461],{"class":48,"line":903},[46,108453,105322],{"class":52},[46,108455,105325],{"class":180},[46,108457,1152],{"class":56},[46,108459,108460],{"class":173},"\"expected exactly one actuator\"",[46,108462,459],{"class":56},[46,108464,108465],{"class":48,"line":908},[46,108466,616],{"emptyLinePlaceholder":615},[46,108468,108469,108471,108473,108475,108477,108479,108482],{"class":48,"line":925},[46,108470,1140],{"class":52},[46,108472,33593],{"class":56},[46,108474,1146],{"class":52},[46,108476,1149],{"class":180},[46,108478,1152],{"class":56},[46,108480,108481],{"class":180},"2000",[46,108483,1158],{"class":56},[46,108485,108486,108489,108491,108493,108495],{"class":48,"line":1238},[46,108487,108488],{"class":56},"        t ",[46,108490,79],{"class":52},[46,108492,33593],{"class":56},[46,108494,2642],{"class":52},[46,108496,108497],{"class":56}," model.opt.timestep\n",[46,108499,108500,108503,108505,108507,108509,108512,108514,108517,108519,108521,108524,108526,108528,108530],{"class":48,"line":1251},[46,108501,108502],{"class":56},"        data.ctrl[",[46,108504,2379],{"class":180},[46,108506,6460],{"class":56},[46,108508,79],{"class":52},[46,108510,108511],{"class":180}," 1.5",[46,108513,8531],{"class":52},[46,108515,108516],{"class":56}," math.sin(",[46,108518,107145],{"class":180},[46,108520,8531],{"class":52},[46,108522,108523],{"class":56}," math.pi ",[46,108525,2642],{"class":52},[46,108527,63832],{"class":180},[46,108529,8531],{"class":52},[46,108531,108532],{"class":56}," t)\n",[46,108534,108535],{"class":48,"line":1256},[46,108536,414],{"class":56},[46,108538,108539],{"class":48,"line":1261},[46,108540,616],{"emptyLinePlaceholder":615},[46,108542,108543,108545,108547,108550],{"class":48,"line":1274},[46,108544,1227],{"class":180},[46,108546,1152],{"class":56},[46,108548,108549],{"class":173},"\"time:\"",[46,108551,103391],{"class":56},[46,108553,108554,108556,108558,108561,108563,108565],{"class":48,"line":10061},[46,108555,1227],{"class":180},[46,108557,1152],{"class":56},[46,108559,108560],{"class":173},"\"joint qpos:\"",[46,108562,106815],{"class":56},[46,108564,2481],{"class":180},[46,108566,32479],{"class":56},[46,108568,108569,108571,108573,108576,108578,108580],{"class":48,"line":11720},[46,108570,1227],{"class":180},[46,108572,1152],{"class":56},[46,108574,108575],{"class":173},"\"joint qvel:\"",[46,108577,106831],{"class":56},[46,108579,2481],{"class":180},[46,108581,32479],{"class":56},[46,108583,108584,108586,108588,108591],{"class":48,"line":11745},[46,108585,1227],{"class":180},[46,108587,1152],{"class":56},[46,108589,108590],{"class":173},"\"last ctrl:\"",[46,108592,108593],{"class":56},", data.ctrl.copy())\n",[46,108595,108596],{"class":48,"line":11768},[46,108597,616],{"emptyLinePlaceholder":615},[46,108599,108600],{"class":48,"line":11792},[46,108601,616],{"emptyLinePlaceholder":615},[46,108603,108604,108606,108608,108610,108612],{"class":48,"line":11797},[46,108605,911],{"class":52},[46,108607,914],{"class":180},[46,108609,917],{"class":52},[46,108611,920],{"class":173},[46,108613,760],{"class":56},[46,108615,108616],{"class":48,"line":11802},[46,108617,928],{"class":56},[19,108619,931],{},[36,108621,108623],{"className":160,"code":108622,"language":162,"meta":41,"style":41},"touch ch4_joint_motor.py\n",[43,108624,108625],{"__ignoreMap":41},[46,108626,108627,108629],{"class":48,"line":49},[46,108628,941],{"class":169},[46,108630,108631],{"class":173}," ch4_joint_motor.py\n",[19,108633,104206],{},[36,108635,108637],{"className":160,"code":108636,"language":162,"meta":41,"style":41},"python ch4_joint_motor.py\n",[43,108638,108639],{"__ignoreMap":41},[46,108640,108641,108643],{"class":48,"line":49},[46,108642,40],{"class":169},[46,108644,108631],{"class":173},[479,108646,1293],{"id":1293},[19,108648,108649],{},"检查 actuator 数量：",[36,108651,108653],{"className":38,"code":108652,"language":40,"meta":41,"style":41},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[43,108654,108655,108667],{"__ignoreMap":41},[46,108656,108657,108659,108661,108663,108665],{"class":48,"line":49},[46,108658,911],{"class":52},[46,108660,108443],{"class":56},[46,108662,22949],{"class":52},[46,108664,27110],{"class":180},[46,108666,760],{"class":56},[46,108668,108669,108671,108673,108675,108677],{"class":48,"line":60},[46,108670,105784],{"class":52},[46,108672,105325],{"class":180},[46,108674,1152],{"class":56},[46,108676,108460],{"class":173},[46,108678,459],{"class":56},[19,108680,108681,108683,108684,108686],{},[43,108682,104063],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[43,108685,103010],{}," 长度应该是 1。",[19,108688,108689],{},"产生正弦控制信号：",[36,108691,108693],{"className":38,"code":108692,"language":40,"meta":41,"style":41},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[43,108694,108695],{"__ignoreMap":41},[46,108696,108697,108699,108701,108703,108705,108707,108709,108711,108713,108715,108717,108719,108721,108723],{"class":48,"line":49},[46,108698,107756],{"class":56},[46,108700,2379],{"class":180},[46,108702,6460],{"class":56},[46,108704,79],{"class":52},[46,108706,108511],{"class":180},[46,108708,8531],{"class":52},[46,108710,108516],{"class":56},[46,108712,107145],{"class":180},[46,108714,8531],{"class":52},[46,108716,108523],{"class":56},[46,108718,2642],{"class":52},[46,108720,63832],{"class":180},[46,108722,8531],{"class":52},[46,108724,108532],{"class":56},[19,108726,108727],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[19,108729,103580],{},[36,108731,108732],{"className":38,"code":464,"language":40,"meta":41,"style":41},[43,108733,108734],{"__ignoreMap":41},[46,108735,108736],{"class":48,"line":49},[46,108737,464],{"class":56},[19,108739,108740],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[479,108742,103613],{"id":103613},[36,108744,108746],{"className":38,"code":108745,"language":40,"meta":41,"style":41},"import math\n",[43,108747,108748],{"__ignoreMap":41},[46,108749,108750,108752],{"class":48,"line":49},[46,108751,53],{"class":52},[46,108753,108235],{"class":56},[19,108755,108756,108757,1700,108760,108763],{},"导入 Python 标准库里的数学模块。后面要用 ",[43,108758,108759],{},"math.sin",[43,108761,108762],{},"math.pi"," 生成周期变化的控制信号。",[36,108765,108766],{"className":38,"code":105575,"language":40,"meta":41,"style":41},[43,108767,108768,108774],{"__ignoreMap":41},[46,108769,108770,108772],{"class":48,"line":49},[46,108771,53],{"class":52},[46,108773,623],{"class":56},[46,108775,108776,108778,108780,108782],{"class":48,"line":60},[46,108777,53],{"class":52},[46,108779,33358],{"class":56},[46,108781,398],{"class":52},[46,108783,33363],{"class":56},[19,108785,108786],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[36,108788,108789],{"className":1350,"code":108072,"language":1352,"meta":41,"style":41},[43,108790,108791],{"__ignoreMap":41},[46,108792,108793,108795,108797,108799,108801,108803,108805,108807,108809,108811,108813,108815,108817,108819,108821],{"class":48,"line":49},[46,108794,821],{"class":56},[46,108796,104846],{"class":1361},[46,108798,1364],{"class":169},[46,108800,79],{"class":56},[46,108802,107904],{"class":173},[46,108804,55789],{"class":169},[46,108806,79],{"class":56},[46,108808,107904],{"class":173},[46,108810,107913],{"class":169},[46,108812,79],{"class":56},[46,108814,107918],{"class":173},[46,108816,108101],{"class":169},[46,108818,79],{"class":56},[46,108820,108106],{"class":173},[46,108822,1387],{"class":56},[19,108824,108825,108826,108828,108829,108831,108832,108834],{},"这行定义关节。",[43,108827,107725],{}," 表示旋转关节。",[43,108830,108124],{}," 表示绕 y 轴旋转。",[43,108833,108130],{}," 表示有一点阻尼，运动不会完全无损耗。",[36,108836,108838],{"className":1350,"code":108837,"language":1352,"meta":41,"style":41},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[43,108839,108840],{"__ignoreMap":41},[46,108841,108842,108844,108846,108848,108850,108853,108855,108857,108860,108863,108865,108868,108870,108872,108874,108876,108878,108881],{"class":48,"line":49},[46,108843,821],{"class":56},[46,108845,103053],{"class":1361},[46,108847,1364],{"class":169},[46,108849,79],{"class":56},[46,108851,108852],{"class":173},"\"link_geom\"",[46,108854,55789],{"class":169},[46,108856,79],{"class":56},[46,108858,108859],{"class":173},"\"capsule\"",[46,108861,108862],{"class":169}," fromto",[46,108864,79],{"class":56},[46,108866,108867],{"class":173},"\"0 0 0 0 0 0.5\"",[46,108869,103069],{"class":169},[46,108871,79],{"class":56},[46,108873,105667],{"class":173},[46,108875,103906],{"class":169},[46,108877,79],{"class":56},[46,108879,108880],{"class":173},"\"0.5\"",[46,108882,1387],{"class":56},[19,108884,108885,108886,108888,108889,108891,108892,108895,108896,365,108899,108901],{},"这行定义摆杆的形状。",[43,108887,105055],{}," 是胶囊体，适合表示杆子。",[43,108890,105066],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[43,108893,108894],{},"(0,0,0)"," 延伸到 ",[43,108897,108898],{},"(0,0,0.5)",[43,108900,105060],{}," 是半径。",[36,108903,108904],{"className":1350,"code":108138,"language":1352,"meta":41,"style":41},[43,108905,108906],{"__ignoreMap":41},[46,108907,108908,108910,108912,108914,108916,108918,108920,108922,108924,108926,108928,108930,108932,108934,108936,108938,108940,108942],{"class":48,"line":49},[46,108909,821],{"class":56},[46,108911,107959],{"class":1361},[46,108913,1364],{"class":169},[46,108915,79],{"class":56},[46,108917,107966],{"class":173},[46,108919,107969],{"class":169},[46,108921,79],{"class":56},[46,108923,107904],{"class":173},[46,108925,107976],{"class":169},[46,108927,79],{"class":56},[46,108929,5697],{"class":173},[46,108931,107983],{"class":169},[46,108933,79],{"class":56},[46,108935,107988],{"class":173},[46,108937,107991],{"class":169},[46,108939,79],{"class":56},[46,108941,107996],{"class":173},[46,108943,1387],{"class":56},[19,108945,108946,108947,108949,108950,108953,108954,108956],{},"这行定义电机。它作用在 ",[43,108948,107725],{}," 关节上。",[43,108951,108952],{},"gear"," 可以理解成放大倍数。",[43,108955,107740],{}," 限制控制输入范围。",[36,108958,108959],{"className":38,"code":108652,"language":40,"meta":41,"style":41},[43,108960,108961,108973],{"__ignoreMap":41},[46,108962,108963,108965,108967,108969,108971],{"class":48,"line":49},[46,108964,911],{"class":52},[46,108966,108443],{"class":56},[46,108968,22949],{"class":52},[46,108970,27110],{"class":180},[46,108972,760],{"class":56},[46,108974,108975,108977,108979,108981,108983],{"class":48,"line":60},[46,108976,105784],{"class":52},[46,108978,105325],{"class":180},[46,108980,1152],{"class":56},[46,108982,108460],{"class":173},[46,108984,459],{"class":56},[19,108986,108987,108989],{},[43,108988,104063],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[36,108991,108993],{"className":38,"code":108992,"language":40,"meta":41,"style":41},"for step in range(2000):\n",[43,108994,108995],{"__ignoreMap":41},[46,108996,108997,108999,109001,109003,109005,109007,109009],{"class":48,"line":49},[46,108998,1713],{"class":52},[46,109000,33593],{"class":56},[46,109002,1146],{"class":52},[46,109004,1149],{"class":180},[46,109006,1152],{"class":56},[46,109008,108481],{"class":180},[46,109010,1158],{"class":56},[19,109012,109013,109014,109016,109017,109020],{},"循环 2000 步。这里没有用 ",[43,109015,3176],{},"，而是用 ",[43,109018,109019],{},"step","，因为后面要用当前步数计算时间。",[36,109022,109024],{"className":38,"code":109023,"language":40,"meta":41,"style":41},"t = step * model.opt.timestep\n",[43,109025,109026],{"__ignoreMap":41},[46,109027,109028,109031,109033,109035,109037],{"class":48,"line":49},[46,109029,109030],{"class":56},"t ",[46,109032,79],{"class":52},[46,109034,33593],{"class":56},[46,109036,2642],{"class":52},[46,109038,108497],{"class":56},[19,109040,109041],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[36,109043,109044],{"className":38,"code":108692,"language":40,"meta":41,"style":41},[43,109045,109046],{"__ignoreMap":41},[46,109047,109048,109050,109052,109054,109056,109058,109060,109062,109064,109066,109068,109070,109072,109074],{"class":48,"line":49},[46,109049,107756],{"class":56},[46,109051,2379],{"class":180},[46,109053,6460],{"class":56},[46,109055,79],{"class":52},[46,109057,108511],{"class":180},[46,109059,8531],{"class":52},[46,109061,108516],{"class":56},[46,109063,107145],{"class":180},[46,109065,8531],{"class":52},[46,109067,108523],{"class":56},[46,109069,2642],{"class":52},[46,109071,63832],{"class":180},[46,109073,8531],{"class":52},[46,109075,108532],{"class":56},[19,109077,109078],{},"这行给电机输入一个正弦波。拆开看：",[23,109080,109081,109087,109093],{},[26,109082,109083,109086],{},[43,109084,109085],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[26,109088,109089,109092],{},[43,109090,109091],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[26,109094,109095,109098],{},[43,109096,109097],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[19,109100,109101],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[36,109103,109105],{"className":38,"code":109104,"language":40,"meta":41,"style":41},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[43,109106,109107],{"__ignoreMap":41},[46,109108,109109,109111,109113,109115,109117,109119],{"class":48,"line":49},[46,109110,32398],{"class":180},[46,109112,1152],{"class":56},[46,109114,108560],{"class":173},[46,109116,106815],{"class":56},[46,109118,2481],{"class":180},[46,109120,32479],{"class":56},[19,109122,109123,109124,109126],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[43,109125,103004],{}," 只有一个数。",[14,109128,1811],{"id":1810},[19,109130,109131],{},"输出类似:",[36,109133,109136],{"className":109134,"code":109135,"language":571,"meta":41},[569],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[43,109137,109135],{"__ignoreMap":41},[19,109139,109140,109141,109143],{},"这里 ",[43,109142,108011],{}," 是电机输入。",[19,109145,109146,109149,109150,109153],{},[43,109147,109148],{},"joint qpos"," 是关节角度，单位通常是弧度。",[43,109151,109152],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[19,109155,109156],{},"角度单位提示：",[36,109158,109161],{"className":109159,"code":109160,"language":571,"meta":41},[569],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[43,109162,109160],{"__ignoreMap":41},[19,109164,109165,109166,109168,109169,109171],{},"如果你看到 ",[43,109167,105919],{}," 是 ",[43,109170,37301],{},"，大约就是 28.6 度。",[14,109173,1842],{"id":1841},[23,109175,109176,109183,109186,109193,109196,109204,109212],{},[26,109177,104312,109178,1938,109180,365],{},[43,109179,108196],{},[43,109181,109182],{},"gear=\"5\"",[26,109184,109185],{},"重新运行，观察关节运动是否更剧烈。",[26,109187,104312,109188,1938,109190,365],{},[43,109189,107740],{},[43,109191,109192],{},"-0.2 0.2",[26,109194,109195],{},"重新运行，观察控制能力是否变弱。",[26,109197,109198,109199,109201,109202,365],{},"去掉 actuator，确认 ",[43,109200,104063],{}," 变成 ",[43,109203,2379],{},[26,109205,104312,109206,1938,109208,109211],{},[43,109207,108130],{},[43,109209,109210],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[26,109213,104312,109214,1938,109216,109219],{},[43,109215,108124],{},[43,109217,109218],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,109221,1946],{"id":1945},[479,109223,109225],{"id":109224},"indexerror-index-0-is-out-of-bounds",[43,109226,109227],{},"IndexError: index 0 is out of bounds",[19,109229,109230,109231,109233],{},"原因是 ",[43,109232,107877],{},"，没有 actuator。",[479,109235,109236],{"id":109236},"关节几乎不动",[19,109238,109239],{},"可能原因:",[23,109241,109242,109247,109251,109257],{},[26,109243,109244,109246],{},[43,109245,108952],{}," 太小",[26,109248,109249,109246],{},[43,109250,107740],{},[26,109252,109253,109256],{},[43,109254,109255],{},"damping"," 太大",[26,109258,109259],{},"重力方向导致运动不明显",[479,109261,109262],{"id":109262},"模型编译失败",[19,109264,109265,109266,109268],{},"检查 actuator 引用的 ",[43,109267,108187],{}," 是否存在，joint 名称是否拼写一致。",[479,109270,109272,109274],{"id":109271},"datactrl0-写了但没有效果",[43,109273,108011],{}," 写了但没有效果",[19,109276,2016],{},[23,109278,109279,109284,109287,109292,109297],{},[26,109280,109281,109283],{},[43,109282,104063],{}," 是否大于 0。",[26,109285,109286],{},"motor 是否引用了正确 joint。",[26,109288,109289,109291],{},[43,109290,108952],{}," 是否太小。",[26,109293,109294,109296],{},[43,109295,107740],{}," 是否把输入限制得太小。",[26,109298,109299],{},"body 是否真的有可动 joint。",[479,109301,109302],{"id":109302},"控制输入超过范围会怎样",[19,109304,109305],{},"如果设置了：",[36,109307,109309],{"className":1350,"code":109308,"language":1352,"meta":41,"style":41},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[43,109310,109311],{"__ignoreMap":41},[46,109312,109313],{"class":48,"line":49},[46,109314,109308],{"class":56},[19,109316,109317],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[36,109319,109321],{"className":38,"code":109320,"language":40,"meta":41,"style":41},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[43,109322,109323,109343],{"__ignoreMap":41},[46,109324,109325,109328,109330,109333,109335,109337,109339,109341],{"class":48,"line":49},[46,109326,109327],{"class":56},"action ",[46,109329,79],{"class":52},[46,109331,109332],{"class":56}," np.clip(action, ",[46,109334,534],{"class":52},[46,109336,107145],{"class":180},[46,109338,448],{"class":56},[46,109340,107145],{"class":180},[46,109342,459],{"class":56},[46,109344,109345,109347,109349,109351,109353],{"class":48,"line":60},[46,109346,107756],{"class":56},[46,109348,2379],{"class":180},[46,109350,6460],{"class":56},[46,109352,79],{"class":52},[46,109354,109355],{"class":56}," action\n",[14,109357,2082],{"id":2081},[19,109359,109360],{},"这一章建立了控制任务的基本形式：",[36,109362,109365],{"className":109363,"code":109364,"language":571,"meta":41},[569],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[43,109366,109364],{"__ignoreMap":41},[19,109368,109369],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[2098,109371,109372],{},"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":41,"searchDepth":60,"depth":60,"links":109374},[109375,109376,109377,109382,109386,109387,109388,109396],{"id":16,"depth":60,"text":17},{"id":153,"depth":60,"text":154},{"id":375,"depth":60,"text":376,"children":109378},[109379,109380,109381],{"id":108018,"depth":200,"text":108019},{"id":108068,"depth":200,"text":108069},{"id":108134,"depth":200,"text":108135},{"id":594,"depth":60,"text":595,"children":109383},[109384,109385],{"id":1293,"depth":200,"text":1293},{"id":103613,"depth":200,"text":103613},{"id":1810,"depth":60,"text":1811},{"id":1841,"depth":60,"text":1842},{"id":1945,"depth":60,"text":1946,"children":109389},[109390,109391,109392,109393,109395],{"id":109224,"depth":200,"text":109227},{"id":109236,"depth":200,"text":109236},{"id":109262,"depth":200,"text":109262},{"id":109271,"depth":200,"text":109394},"data.ctrl[0] 写了但没有效果",{"id":109302,"depth":200,"text":109302},{"id":2081,"depth":60,"text":2082},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":107706,"description":41},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":4,"title":5,"body":109403,"description":41,"extension":2125,"meta":111060,"navigation":615,"path":2127,"seo":111061,"stem":2129,"__hash__":2130},{"type":7,"value":109404,"toc":111036},[109405,109407,109409,109411,109417,109419,109433,109435,109455,109457,109493,109495,109497,109551,109553,109569,109571,109611,109613,109627,109629,109643,109649,109653,109655,109657,109659,109687,109689,109733,109735,109737,109749,109755,109757,109759,109779,109781,109783,109795,109797,109802,109804,109816,109818,109820,110064,110066,110076,110078,110372,110374,110384,110386,110388,110402,110406,110408,110428,110430,110432,110462,110464,110466,110476,110478,110494,110496,110510,110514,110534,110538,110550,110552,110564,110574,110594,110596,110616,110618,110620,110634,110640,110654,110656,110686,110696,110724,110730,110754,110756,110772,110778,110790,110794,110802,110806,110814,110816,110818,110824,110826,110836,110838,110840,110850,110852,110862,110864,110880,110882,110898,110900,110918,110920,110922,110924,110952,110956,110958,110960,110966,110968,110970,110984,110986,110988,111004,111006,111022,111024,111026,111034],[10,109406,5],{"id":12},[14,109408,17],{"id":16},[19,109410,21],{},[23,109412,109413,109415],{},[26,109414,28],{},[26,109416,31],{},[19,109418,34],{},[36,109420,109421],{"className":38,"code":39,"language":40,"meta":41,"style":41},[43,109422,109423,109429],{"__ignoreMap":41},[46,109424,109425,109427],{"class":48,"line":49},[46,109426,53],{"class":52},[46,109428,57],{"class":56},[46,109430,109431],{"class":48,"line":60},[46,109432,63],{"class":56},[19,109434,66],{},[36,109436,109437],{"className":38,"code":69,"language":40,"meta":41,"style":41},[43,109438,109439,109447],{"__ignoreMap":41},[46,109440,109441,109443,109445],{"class":48,"line":49},[46,109442,76],{"class":56},[46,109444,79],{"class":52},[46,109446,82],{"class":56},[46,109448,109449,109451,109453],{"class":48,"line":60},[46,109450,87],{"class":56},[46,109452,79],{"class":52},[46,109454,92],{"class":56},[19,109456,95],{},[97,109458,109459,109471],{},[100,109460,109461],{},[103,109462,109463,109465,109467,109469],{},[106,109464,109],{"align":108},[106,109466,112],{"align":108},[106,109468,115],{"align":108},[106,109470,118],{"align":108},[120,109472,109473,109483],{},[103,109474,109475,109477,109479,109481],{},[125,109476,127],{"align":108},[125,109478,130],{"align":108},[125,109480,133],{"align":108},[125,109482,136],{"align":108},[103,109484,109485,109487,109489,109491],{},[125,109486,141],{"align":108},[125,109488,144],{"align":108},[125,109490,147],{"align":108},[125,109492,150],{"align":108},[14,109494,154],{"id":153},[19,109496,157],{},[36,109498,109499],{"className":160,"code":161,"language":162,"meta":41,"style":41},[43,109500,109501,109513,109523,109531,109539],{"__ignoreMap":41},[46,109502,109503,109505,109507,109509,109511],{"class":48,"line":49},[46,109504,170],{"class":169},[46,109506,174],{"class":173},[46,109508,177],{"class":173},[46,109510,181],{"class":180},[46,109512,184],{"class":180},[46,109514,109515,109517,109519,109521],{"class":48,"line":60},[46,109516,189],{"class":173},[46,109518,192],{"class":173},[46,109520,195],{"class":173},[46,109522,184],{"class":180},[46,109524,109525,109527,109529],{"class":48,"line":200},[46,109526,203],{"class":173},[46,109528,206],{"class":173},[46,109530,184],{"class":180},[46,109532,109533,109535,109537],{"class":48,"line":211},[46,109534,214],{"class":173},[46,109536,217],{"class":173},[46,109538,184],{"class":180},[46,109540,109541,109543,109545,109547,109549],{"class":48,"line":222},[46,109542,225],{"class":173},[46,109544,228],{"class":173},[46,109546,231],{"class":173},[46,109548,234],{"class":173},[46,109550,237],{"class":173},[19,109552,240],{},[36,109554,109555],{"className":160,"code":243,"language":162,"meta":41,"style":41},[43,109556,109557],{"__ignoreMap":41},[46,109558,109559,109561,109563,109565,109567],{"class":48,"line":49},[46,109560,250],{"class":169},[46,109562,177],{"class":173},[46,109564,255],{"class":173},[46,109566,258],{"class":173},[46,109568,261],{"class":173},[19,109570,264],{},[36,109572,109573],{"className":160,"code":267,"language":162,"meta":41,"style":41},[43,109574,109575,109591,109599],{"__ignoreMap":41},[46,109576,109577,109579,109581,109583,109585,109587,109589],{"class":48,"line":49},[46,109578,274],{"class":169},[46,109580,277],{"class":173},[46,109582,280],{"class":180},[46,109584,283],{"class":173},[46,109586,286],{"class":173},[46,109588,289],{"class":180},[46,109590,292],{"class":180},[46,109592,109593,109595,109597],{"class":48,"line":60},[46,109594,274],{"class":169},[46,109596,299],{"class":173},[46,109598,302],{"class":173},[46,109600,109601,109603,109605,109607,109609],{"class":48,"line":200},[46,109602,250],{"class":169},[46,109604,177],{"class":173},[46,109606,255],{"class":173},[46,109608,258],{"class":173},[46,109610,261],{"class":173},[19,109612,317],{},[36,109614,109615],{"className":160,"code":320,"language":162,"meta":41,"style":41},[43,109616,109617],{"__ignoreMap":41},[46,109618,109619,109621,109623,109625],{"class":48,"line":49},[46,109620,327],{"class":52},[46,109622,330],{"class":56},[46,109624,79],{"class":52},[46,109626,335],{"class":56},[19,109628,338],{},[36,109630,109631],{"className":160,"code":341,"language":162,"meta":41,"style":41},[43,109632,109633],{"__ignoreMap":41},[46,109634,109635,109637,109639,109641],{"class":48,"line":49},[46,109636,327],{"class":52},[46,109638,330],{"class":56},[46,109640,79],{"class":52},[46,109642,354],{"class":56},[19,109644,357,109645,361,109647,365],{},[43,109646,360],{},[43,109648,364],{},[19,109650,368,109651,372],{},[43,109652,371],{},[14,109654,376],{"id":375},[19,109656,379],{},[19,109658,382],{},[36,109660,109661],{"className":38,"code":385,"language":40,"meta":41,"style":41},[43,109662,109663,109673,109679,109683],{"__ignoreMap":41},[46,109664,109665,109667,109669,109671],{"class":48,"line":49},[46,109666,392],{"class":52},[46,109668,395],{"class":56},[46,109670,398],{"class":52},[46,109672,401],{"class":56},[46,109674,109675,109677],{"class":48,"line":60},[46,109676,406],{"class":52},[46,109678,409],{"class":56},[46,109680,109681],{"class":48,"line":200},[46,109682,414],{"class":56},[46,109684,109685],{"class":48,"line":211},[46,109686,419],{"class":56},[19,109688,422],{},[36,109690,109691],{"className":38,"code":425,"language":40,"meta":41,"style":41},[43,109692,109693,109717,109721,109725],{"__ignoreMap":41},[46,109694,109695,109697,109699,109701,109703,109705,109707,109709,109711,109713,109715],{"class":48,"line":49},[46,109696,76],{"class":56},[46,109698,79],{"class":52},[46,109700,436],{"class":56},[46,109702,440],{"class":439},[46,109704,79],{"class":52},[46,109706,445],{"class":180},[46,109708,448],{"class":56},[46,109710,451],{"class":439},[46,109712,79],{"class":52},[46,109714,456],{"class":180},[46,109716,459],{"class":56},[46,109718,109719],{"class":48,"line":60},[46,109720,464],{"class":56},[46,109722,109723],{"class":48,"line":200},[46,109724,469],{"class":56},[46,109726,109727,109729,109731],{"class":48,"line":211},[46,109728,87],{"class":56},[46,109730,79],{"class":52},[46,109732,92],{"class":56},[479,109734,482],{"id":481},[19,109736,485],{},[36,109738,109739],{"className":38,"code":488,"language":40,"meta":41,"style":41},[43,109740,109741,109745],{"__ignoreMap":41},[46,109742,109743],{"class":48,"line":49},[46,109744,464],{"class":56},[46,109746,109747],{"class":48,"line":60},[46,109748,499],{"class":56},[19,109750,109751,505,109753,509],{},[43,109752,504],{},[43,109754,508],{},[479,109756,513],{"id":512},[19,109758,516],{},[36,109760,109761],{"className":38,"code":519,"language":40,"meta":41,"style":41},[43,109762,109763],{"__ignoreMap":41},[46,109764,109765,109767,109769,109771,109773,109775,109777],{"class":48,"line":49},[46,109766,526],{"class":56},[46,109768,79],{"class":52},[46,109770,531],{"class":56},[46,109772,534],{"class":52},[46,109774,537],{"class":56},[46,109776,534],{"class":52},[46,109778,542],{"class":56},[19,109780,545],{},[479,109782,549],{"id":548},[36,109784,109785],{"className":38,"code":552,"language":40,"meta":41,"style":41},[43,109786,109787],{"__ignoreMap":41},[46,109788,109789,109791,109793],{"class":48,"line":49},[46,109790,87],{"class":56},[46,109792,79],{"class":52},[46,109794,92],{"class":56},[19,109796,565],{},[36,109798,109800],{"className":109799,"code":570,"language":571,"meta":41},[569],[43,109801,570],{"__ignoreMap":41},[19,109803,576],{},[36,109805,109806],{"className":38,"code":579,"language":40,"meta":41,"style":41},[43,109807,109808],{"__ignoreMap":41},[46,109809,109810,109812,109814],{"class":48,"line":49},[46,109811,586],{"class":56},[46,109813,589],{"class":173},[46,109815,459],{"class":56},[14,109817,595],{"id":594},[19,109819,598],{},[36,109821,109822],{"className":38,"code":601,"language":40,"meta":41,"style":41},[43,109823,109824,109830,109834,109840,109846,109850,109854,109862,109866,109870,109874,109878,109882,109886,109890,109894,109898,109902,109906,109910,109914,109918,109922,109926,109938,109950,109958,109962,109972,109988,109996,110000,110004,110008,110024,110036,110040,110044,110048,110060],{"__ignoreMap":41},[46,109825,109826,109828],{"class":48,"line":49},[46,109827,53],{"class":52},[46,109829,610],{"class":56},[46,109831,109832],{"class":48,"line":60},[46,109833,616],{"emptyLinePlaceholder":615},[46,109835,109836,109838],{"class":48,"line":200},[46,109837,53],{"class":52},[46,109839,623],{"class":56},[46,109841,109842,109844],{"class":48,"line":211},[46,109843,53],{"class":52},[46,109845,57],{"class":56},[46,109847,109848],{"class":48,"line":222},[46,109849,616],{"emptyLinePlaceholder":615},[46,109851,109852],{"class":48,"line":636},[46,109853,616],{"emptyLinePlaceholder":615},[46,109855,109856,109858,109860],{"class":48,"line":641},[46,109857,644],{"class":180},[46,109859,647],{"class":52},[46,109861,650],{"class":173},[46,109863,109864],{"class":48,"line":653},[46,109865,656],{"class":173},[46,109867,109868],{"class":48,"line":659},[46,109869,662],{"class":173},[46,109871,109872],{"class":48,"line":665},[46,109873,616],{"emptyLinePlaceholder":615},[46,109875,109876],{"class":48,"line":670},[46,109877,673],{"class":173},[46,109879,109880],{"class":48,"line":676},[46,109881,679],{"class":173},[46,109883,109884],{"class":48,"line":682},[46,109885,685],{"class":173},[46,109887,109888],{"class":48,"line":688},[46,109889,616],{"emptyLinePlaceholder":615},[46,109891,109892],{"class":48,"line":693},[46,109893,696],{"class":173},[46,109895,109896],{"class":48,"line":699},[46,109897,702],{"class":173},[46,109899,109900],{"class":48,"line":705},[46,109901,708],{"class":173},[46,109903,109904],{"class":48,"line":711},[46,109905,714],{"class":173},[46,109907,109908],{"class":48,"line":717},[46,109909,720],{"class":173},[46,109911,109912],{"class":48,"line":723},[46,109913,726],{"class":173},[46,109915,109916],{"class":48,"line":729},[46,109917,732],{"class":173},[46,109919,109920],{"class":48,"line":735},[46,109921,616],{"emptyLinePlaceholder":615},[46,109923,109924],{"class":48,"line":740},[46,109925,616],{"emptyLinePlaceholder":615},[46,109927,109928,109930,109932,109934,109936],{"class":48,"line":745},[46,109929,748],{"class":52},[46,109931,751],{"class":169},[46,109933,754],{"class":56},[46,109935,757],{"class":180},[46,109937,760],{"class":56},[46,109939,109940,109942,109944,109946,109948],{"class":48,"line":763},[46,109941,766],{"class":56},[46,109943,79],{"class":52},[46,109945,771],{"class":56},[46,109947,644],{"class":180},[46,109949,459],{"class":56},[46,109951,109952,109954,109956],{"class":48,"line":778},[46,109953,781],{"class":56},[46,109955,79],{"class":52},[46,109957,786],{"class":56},[46,109959,109960],{"class":48,"line":789},[46,109961,616],{"emptyLinePlaceholder":615},[46,109963,109964,109966,109968,109970],{"class":48,"line":794},[46,109965,797],{"class":52},[46,109967,395],{"class":56},[46,109969,398],{"class":52},[46,109971,401],{"class":56},[46,109973,109974,109976,109978,109980,109982,109984,109986],{"class":48,"line":806},[46,109975,809],{"class":52},[46,109977,812],{"class":56},[46,109979,815],{"class":52},[46,109981,818],{"class":56},[46,109983,821],{"class":52},[46,109985,824],{"class":180},[46,109987,760],{"class":56},[46,109989,109990,109992,109994],{"class":48,"line":829},[46,109991,832],{"class":56},[46,109993,79],{"class":52},[46,109995,837],{"class":56},[46,109997,109998],{"class":48,"line":840},[46,109999,843],{"class":56},[46,110001,110002],{"class":48,"line":846},[46,110003,849],{"class":56},[46,110005,110006],{"class":48,"line":852},[46,110007,616],{"emptyLinePlaceholder":615},[46,110009,110010,110012,110014,110016,110018,110020,110022],{"class":48,"line":857},[46,110011,860],{"class":56},[46,110013,79],{"class":52},[46,110015,531],{"class":56},[46,110017,534],{"class":52},[46,110019,537],{"class":56},[46,110021,534],{"class":52},[46,110023,542],{"class":56},[46,110025,110026,110028,110030,110032,110034],{"class":48,"line":875},[46,110027,878],{"class":52},[46,110029,881],{"class":56},[46,110031,884],{"class":52},[46,110033,887],{"class":180},[46,110035,760],{"class":56},[46,110037,110038],{"class":48,"line":892},[46,110039,895],{"class":56},[46,110041,110042],{"class":48,"line":898},[46,110043,616],{"emptyLinePlaceholder":615},[46,110045,110046],{"class":48,"line":903},[46,110047,616],{"emptyLinePlaceholder":615},[46,110049,110050,110052,110054,110056,110058],{"class":48,"line":908},[46,110051,911],{"class":52},[46,110053,914],{"class":180},[46,110055,917],{"class":52},[46,110057,920],{"class":173},[46,110059,760],{"class":56},[46,110061,110062],{"class":48,"line":925},[46,110063,928],{"class":56},[19,110065,931],{},[36,110067,110068],{"className":160,"code":934,"language":162,"meta":41,"style":41},[43,110069,110070],{"__ignoreMap":41},[46,110071,110072,110074],{"class":48,"line":49},[46,110073,941],{"class":169},[46,110075,944],{"class":173},[19,110077,947],{},[36,110079,110080],{"className":38,"code":950,"language":40,"meta":41,"style":41},[43,110081,110082,110092,110096,110102,110112,110116,110120,110128,110132,110136,110140,110144,110148,110152,110156,110160,110164,110168,110172,110176,110180,110184,110188,110192,110196,110208,110220,110228,110252,110256,110272,110276,110280,110292,110300,110304,110316,110320,110324,110328,110338,110348,110352,110356,110368],{"__ignoreMap":41},[46,110083,110084,110086,110088,110090],{"class":48,"line":49},[46,110085,957],{"class":52},[46,110087,960],{"class":56},[46,110089,53],{"class":52},[46,110091,965],{"class":56},[46,110093,110094],{"class":48,"line":60},[46,110095,616],{"emptyLinePlaceholder":615},[46,110097,110098,110100],{"class":48,"line":200},[46,110099,53],{"class":52},[46,110101,623],{"class":56},[46,110103,110104,110106,110108,110110],{"class":48,"line":211},[46,110105,957],{"class":52},[46,110107,982],{"class":180},[46,110109,985],{"class":52},[46,110111,988],{"class":56},[46,110113,110114],{"class":48,"line":222},[46,110115,616],{"emptyLinePlaceholder":615},[46,110117,110118],{"class":48,"line":636},[46,110119,616],{"emptyLinePlaceholder":615},[46,110121,110122,110124,110126],{"class":48,"line":641},[46,110123,644],{"class":180},[46,110125,647],{"class":52},[46,110127,650],{"class":173},[46,110129,110130],{"class":48,"line":653},[46,110131,1009],{"class":173},[46,110133,110134],{"class":48,"line":659},[46,110135,662],{"class":173},[46,110137,110138],{"class":48,"line":665},[46,110139,616],{"emptyLinePlaceholder":615},[46,110141,110142],{"class":48,"line":670},[46,110143,673],{"class":173},[46,110145,110146],{"class":48,"line":676},[46,110147,679],{"class":173},[46,110149,110150],{"class":48,"line":682},[46,110151,1030],{"class":173},[46,110153,110154],{"class":48,"line":688},[46,110155,685],{"class":173},[46,110157,110158],{"class":48,"line":693},[46,110159,616],{"emptyLinePlaceholder":615},[46,110161,110162],{"class":48,"line":699},[46,110163,696],{"class":173},[46,110165,110166],{"class":48,"line":705},[46,110167,702],{"class":173},[46,110169,110170],{"class":48,"line":711},[46,110171,708],{"class":173},[46,110173,110174],{"class":48,"line":717},[46,110175,714],{"class":173},[46,110177,110178],{"class":48,"line":723},[46,110179,720],{"class":173},[46,110181,110182],{"class":48,"line":729},[46,110183,726],{"class":173},[46,110185,110186],{"class":48,"line":735},[46,110187,732],{"class":173},[46,110189,110190],{"class":48,"line":740},[46,110191,616],{"emptyLinePlaceholder":615},[46,110193,110194],{"class":48,"line":745},[46,110195,616],{"emptyLinePlaceholder":615},[46,110197,110198,110200,110202,110204,110206],{"class":48,"line":763},[46,110199,748],{"class":52},[46,110201,751],{"class":169},[46,110203,754],{"class":56},[46,110205,757],{"class":180},[46,110207,760],{"class":56},[46,110209,110210,110212,110214,110216,110218],{"class":48,"line":778},[46,110211,766],{"class":56},[46,110213,79],{"class":52},[46,110215,771],{"class":56},[46,110217,644],{"class":180},[46,110219,459],{"class":56},[46,110221,110222,110224,110226],{"class":48,"line":789},[46,110223,781],{"class":56},[46,110225,79],{"class":52},[46,110227,786],{"class":56},[46,110229,110230,110232,110234,110236,110238,110240,110242,110244,110246,110248,110250],{"class":48,"line":794},[46,110231,1111],{"class":56},[46,110233,79],{"class":52},[46,110235,436],{"class":56},[46,110237,440],{"class":439},[46,110239,79],{"class":52},[46,110241,445],{"class":180},[46,110243,448],{"class":56},[46,110245,451],{"class":439},[46,110247,79],{"class":52},[46,110249,456],{"class":180},[46,110251,459],{"class":56},[46,110253,110254],{"class":48,"line":806},[46,110255,616],{"emptyLinePlaceholder":615},[46,110257,110258,110260,110262,110264,110266,110268,110270],{"class":48,"line":829},[46,110259,1140],{"class":52},[46,110261,1143],{"class":56},[46,110263,1146],{"class":52},[46,110265,1149],{"class":180},[46,110267,1152],{"class":56},[46,110269,1155],{"class":180},[46,110271,1158],{"class":56},[46,110273,110274],{"class":48,"line":840},[46,110275,414],{"class":56},[46,110277,110278],{"class":48,"line":846},[46,110279,616],{"emptyLinePlaceholder":615},[46,110281,110282,110284,110286,110288,110290],{"class":48,"line":852},[46,110283,1171],{"class":56},[46,110285,1174],{"class":439},[46,110287,79],{"class":52},[46,110289,1179],{"class":173},[46,110291,459],{"class":56},[46,110293,110294,110296,110298],{"class":48,"line":857},[46,110295,1186],{"class":56},[46,110297,79],{"class":52},[46,110299,92],{"class":56},[46,110301,110302],{"class":48,"line":875},[46,110303,616],{"emptyLinePlaceholder":615},[46,110305,110306,110308,110310,110312,110314],{"class":48,"line":892},[46,110307,1199],{"class":56},[46,110309,79],{"class":52},[46,110311,1204],{"class":56},[46,110313,589],{"class":173},[46,110315,459],{"class":56},[46,110317,110318],{"class":48,"line":898},[46,110319,1213],{"class":56},[46,110321,110322],{"class":48,"line":903},[46,110323,1218],{"class":56},[46,110325,110326],{"class":48,"line":908},[46,110327,616],{"emptyLinePlaceholder":615},[46,110329,110330,110332,110334,110336],{"class":48,"line":925},[46,110331,1227],{"class":180},[46,110333,1152],{"class":56},[46,110335,1232],{"class":173},[46,110337,1235],{"class":56},[46,110339,110340,110342,110344,110346],{"class":48,"line":1238},[46,110341,1227],{"class":180},[46,110343,1152],{"class":56},[46,110345,1245],{"class":173},[46,110347,1248],{"class":56},[46,110349,110350],{"class":48,"line":1251},[46,110351,616],{"emptyLinePlaceholder":615},[46,110353,110354],{"class":48,"line":1256},[46,110355,616],{"emptyLinePlaceholder":615},[46,110357,110358,110360,110362,110364,110366],{"class":48,"line":1261},[46,110359,911],{"class":52},[46,110361,914],{"class":180},[46,110363,917],{"class":52},[46,110365,920],{"class":173},[46,110367,760],{"class":56},[46,110369,110370],{"class":48,"line":1274},[46,110371,928],{"class":56},[19,110373,931],{},[36,110375,110376],{"className":160,"code":1281,"language":162,"meta":41,"style":41},[43,110377,110378],{"__ignoreMap":41},[46,110379,110380,110382],{"class":48,"line":49},[46,110381,941],{"class":169},[46,110383,1290],{"class":173},[479,110385,1293],{"id":1293},[19,110387,1296],{},[36,110389,110390],{"className":38,"code":1299,"language":40,"meta":41,"style":41},[43,110391,110392],{"__ignoreMap":41},[46,110393,110394,110396,110398,110400],{"class":48,"line":49},[46,110395,392],{"class":52},[46,110397,395],{"class":56},[46,110399,398],{"class":52},[46,110401,401],{"class":56},[19,110403,110404,1316],{},[43,110405,392],{},[19,110407,1319],{},[36,110409,110410],{"className":38,"code":1322,"language":40,"meta":41,"style":41},[43,110411,110412],{"__ignoreMap":41},[46,110413,110414,110416,110418,110420,110422,110424,110426],{"class":48,"line":49},[46,110415,1329],{"class":52},[46,110417,812],{"class":56},[46,110419,815],{"class":52},[46,110421,818],{"class":56},[46,110423,821],{"class":52},[46,110425,824],{"class":180},[46,110427,760],{"class":56},[19,110429,1344],{},[19,110431,1347],{},[36,110433,110434],{"className":1350,"code":1351,"language":1352,"meta":41,"style":41},[43,110435,110436],{"__ignoreMap":41},[46,110437,110438,110440,110442,110444,110446,110448,110450,110452,110454,110456,110458,110460],{"class":48,"line":49},[46,110439,821],{"class":56},[46,110441,1174],{"class":1361},[46,110443,1364],{"class":169},[46,110445,79],{"class":56},[46,110447,1179],{"class":173},[46,110449,1371],{"class":169},[46,110451,79],{"class":56},[46,110453,1376],{"class":173},[46,110455,1379],{"class":169},[46,110457,79],{"class":56},[46,110459,1384],{"class":173},[46,110461,1387],{"class":56},[19,110463,1390],{},[479,110465,1394],{"id":1393},[36,110467,110468],{"className":38,"code":1397,"language":40,"meta":41,"style":41},[43,110469,110470],{"__ignoreMap":41},[46,110471,110472,110474],{"class":48,"line":49},[46,110473,53],{"class":52},[46,110475,610],{"class":56},[19,110477,1408],{},[36,110479,110480],{"className":38,"code":1411,"language":40,"meta":41,"style":41},[43,110481,110482,110488],{"__ignoreMap":41},[46,110483,110484,110486],{"class":48,"line":49},[46,110485,53],{"class":52},[46,110487,623],{"class":56},[46,110489,110490,110492],{"class":48,"line":60},[46,110491,53],{"class":52},[46,110493,57],{"class":56},[19,110495,1428],{},[36,110497,110498],{"className":38,"code":1299,"language":40,"meta":41,"style":41},[43,110499,110500],{"__ignoreMap":41},[46,110501,110502,110504,110506,110508],{"class":48,"line":49},[46,110503,392],{"class":52},[46,110505,395],{"class":56},[46,110507,398],{"class":52},[46,110509,401],{"class":56},[19,110511,1445,110512,1449],{},[43,110513,1448],{},[36,110515,110516],{"className":38,"code":1322,"language":40,"meta":41,"style":41},[43,110517,110518],{"__ignoreMap":41},[46,110519,110520,110522,110524,110526,110528,110530,110532],{"class":48,"line":49},[46,110521,1329],{"class":52},[46,110523,812],{"class":56},[46,110525,815],{"class":52},[46,110527,818],{"class":56},[46,110529,821],{"class":52},[46,110531,824],{"class":180},[46,110533,760],{"class":56},[19,110535,1472,110536,1476],{},[43,110537,1475],{},[36,110539,110540],{"className":38,"code":1479,"language":40,"meta":41,"style":41},[43,110541,110542],{"__ignoreMap":41},[46,110543,110544,110546,110548],{"class":48,"line":49},[46,110545,1486],{"class":56},[46,110547,79],{"class":52},[46,110549,837],{"class":56},[19,110551,1493],{},[36,110553,110554],{"className":38,"code":488,"language":40,"meta":41,"style":41},[43,110555,110556,110560],{"__ignoreMap":41},[46,110557,110558],{"class":48,"line":49},[46,110559,464],{"class":56},[46,110561,110562],{"class":48,"line":60},[46,110563,499],{"class":56},[19,110565,110566,1510,110568,1513,110570,1517,110572,1521],{},[43,110567,504],{},[43,110569,508],{},[43,110571,1516],{},[43,110573,1520],{},[36,110575,110576],{"className":38,"code":519,"language":40,"meta":41,"style":41},[43,110577,110578],{"__ignoreMap":41},[46,110579,110580,110582,110584,110586,110588,110590,110592],{"class":48,"line":49},[46,110581,526],{"class":56},[46,110583,79],{"class":52},[46,110585,531],{"class":56},[46,110587,534],{"class":52},[46,110589,537],{"class":56},[46,110591,534],{"class":52},[46,110593,542],{"class":56},[19,110595,1544],{},[36,110597,110598],{"className":38,"code":1547,"language":40,"meta":41,"style":41},[43,110599,110600,110612],{"__ignoreMap":41},[46,110601,110602,110604,110606,110608,110610],{"class":48,"line":49},[46,110603,911],{"class":52},[46,110605,881],{"class":56},[46,110607,884],{"class":52},[46,110609,887],{"class":180},[46,110611,760],{"class":56},[46,110613,110614],{"class":48,"line":60},[46,110615,1566],{"class":56},[19,110617,1569],{},[479,110619,1573],{"id":1572},[36,110621,110622],{"className":38,"code":1576,"language":40,"meta":41,"style":41},[43,110623,110624],{"__ignoreMap":41},[46,110625,110626,110628,110630,110632],{"class":48,"line":49},[46,110627,957],{"class":52},[46,110629,960],{"class":56},[46,110631,53],{"class":52},[46,110633,965],{"class":56},[19,110635,1591,110636,1595,110638,1599],{},[43,110637,1594],{},[43,110639,1598],{},[36,110641,110642],{"className":38,"code":1602,"language":40,"meta":41,"style":41},[43,110643,110644],{"__ignoreMap":41},[46,110645,110646,110648,110650,110652],{"class":48,"line":49},[46,110647,957],{"class":52},[46,110649,982],{"class":180},[46,110651,985],{"class":52},[46,110653,988],{"class":56},[19,110655,1617],{},[36,110657,110658],{"className":1350,"code":1351,"language":1352,"meta":41,"style":41},[43,110659,110660],{"__ignoreMap":41},[46,110661,110662,110664,110666,110668,110670,110672,110674,110676,110678,110680,110682,110684],{"class":48,"line":49},[46,110663,821],{"class":56},[46,110665,1174],{"class":1361},[46,110667,1364],{"class":169},[46,110669,79],{"class":56},[46,110671,1179],{"class":173},[46,110673,1371],{"class":169},[46,110675,79],{"class":56},[46,110677,1376],{"class":173},[46,110679,1379],{"class":169},[46,110681,79],{"class":56},[46,110683,1384],{"class":173},[46,110685,1387],{"class":56},[19,110687,1650,110688,1654,110690,1658,110692,1662,110694,1665],{},[43,110689,1653],{},[43,110691,1657],{},[43,110693,1661],{},[43,110695,1657],{},[36,110697,110698],{"className":38,"code":1668,"language":40,"meta":41,"style":41},[43,110699,110700],{"__ignoreMap":41},[46,110701,110702,110704,110706,110708,110710,110712,110714,110716,110718,110720,110722],{"class":48,"line":49},[46,110703,76],{"class":56},[46,110705,79],{"class":52},[46,110707,436],{"class":56},[46,110709,440],{"class":439},[46,110711,79],{"class":52},[46,110713,445],{"class":180},[46,110715,448],{"class":56},[46,110717,451],{"class":439},[46,110719,79],{"class":52},[46,110721,456],{"class":180},[46,110723,459],{"class":56},[19,110725,1697,110726,1700,110728,1703],{},[43,110727,440],{},[43,110729,451],{},[36,110731,110732],{"className":38,"code":1706,"language":40,"meta":41,"style":41},[43,110733,110734,110750],{"__ignoreMap":41},[46,110735,110736,110738,110740,110742,110744,110746,110748],{"class":48,"line":49},[46,110737,1713],{"class":52},[46,110739,1143],{"class":56},[46,110741,1146],{"class":52},[46,110743,1149],{"class":180},[46,110745,1152],{"class":56},[46,110747,1155],{"class":180},[46,110749,1158],{"class":56},[46,110751,110752],{"class":48,"line":60},[46,110753,1730],{"class":56},[19,110755,1733],{},[36,110757,110758],{"className":38,"code":1736,"language":40,"meta":41,"style":41},[43,110759,110760],{"__ignoreMap":41},[46,110761,110762,110764,110766,110768,110770],{"class":48,"line":49},[46,110763,1743],{"class":56},[46,110765,1174],{"class":439},[46,110767,79],{"class":52},[46,110769,1179],{"class":173},[46,110771,459],{"class":56},[19,110773,1754,110774,1757,110776,1761],{},[43,110775,1516],{},[43,110777,1760],{},[36,110779,110780],{"className":38,"code":552,"language":40,"meta":41,"style":41},[43,110781,110782],{"__ignoreMap":41},[46,110783,110784,110786,110788],{"class":48,"line":49},[46,110785,87],{"class":56},[46,110787,79],{"class":52},[46,110789,92],{"class":56},[19,110791,1776,110792,1780],{},[43,110793,1779],{},[36,110795,110796],{"className":38,"code":1783,"language":40,"meta":41,"style":41},[43,110797,110798],{"__ignoreMap":41},[46,110799,110800],{"class":48,"line":49},[46,110801,1783],{"class":56},[19,110803,1792,110804,365],{},[43,110805,1795],{},[36,110807,110808],{"className":38,"code":1798,"language":40,"meta":41,"style":41},[43,110809,110810],{"__ignoreMap":41},[46,110811,110812],{"class":48,"line":49},[46,110813,1798],{"class":56},[19,110815,1807],{},[14,110817,1811],{"id":1810},[19,110819,1814,110820,1817,110822,365],{},[43,110821,1795],{},[43,110823,1820],{},[19,110825,1823],{},[23,110827,110828,110830,110832],{},[26,110829,1828],{},[26,110831,1831],{},[26,110833,1834,110834,1838],{},[43,110835,1837],{},[14,110837,1842],{"id":1841},[19,110839,1845],{},[36,110841,110842],{"className":160,"code":1848,"language":162,"meta":41,"style":41},[43,110843,110844],{"__ignoreMap":41},[46,110845,110846,110848],{"class":48,"line":49},[46,110847,40],{"class":169},[46,110849,944],{"class":173},[19,110851,1859],{},[36,110853,110854],{"className":160,"code":1862,"language":162,"meta":41,"style":41},[43,110855,110856],{"__ignoreMap":41},[46,110857,110858,110860],{"class":48,"line":49},[46,110859,40],{"class":169},[46,110861,1290],{"class":173},[19,110863,1873],{},[36,110865,110866],{"className":160,"code":1876,"language":162,"meta":41,"style":41},[43,110867,110868],{"__ignoreMap":41},[46,110869,110870,110872,110874,110876,110878],{"class":48,"line":49},[46,110871,371],{"class":56},[46,110873,79],{"class":52},[46,110875,360],{"class":173},[46,110877,1889],{"class":169},[46,110879,1290],{"class":173},[19,110881,338],{},[36,110883,110884],{"className":160,"code":1896,"language":162,"meta":41,"style":41},[43,110885,110886],{"__ignoreMap":41},[46,110887,110888,110890,110892,110894,110896],{"class":48,"line":49},[46,110889,371],{"class":56},[46,110891,79],{"class":52},[46,110893,364],{"class":173},[46,110895,1889],{"class":169},[46,110897,1290],{"class":173},[19,110899,1913],{},[23,110901,110902,110906,110908,110912],{},[26,110903,1918,110904,1922],{},[43,110905,1921],{},[26,110907,1925],{},[26,110909,1928,110910,1931],{},[43,110911,1657],{},[26,110913,1934,110914,1938,110916,1942],{},[43,110915,1937],{},[43,110917,1941],{},[14,110919,1946],{"id":1945},[479,110921,1950],{"id":1949},[19,110923,1953],{},[36,110925,110926],{"className":160,"code":1956,"language":162,"meta":41,"style":41},[43,110927,110928],{"__ignoreMap":41},[46,110929,110930,110932,110934,110936,110938,110940,110942,110944,110946,110948,110950],{"class":48,"line":49},[46,110931,170],{"class":169},[46,110933,174],{"class":173},[46,110935,177],{"class":173},[46,110937,181],{"class":180},[46,110939,1971],{"class":173},[46,110941,217],{"class":173},[46,110943,1976],{"class":173},[46,110945,231],{"class":173},[46,110947,1981],{"class":173},[46,110949,228],{"class":173},[46,110951,1986],{"class":173},[479,110953,110954],{"id":1989},[43,110955,1992],{},[19,110957,1995],{},[479,110959,1999],{"id":1998},[19,110961,2002,110962,2006,110964,2010],{},[43,110963,2005],{},[43,110965,2009],{},[479,110967,2013],{"id":2013},[19,110969,2016],{},[23,110971,110972,110974,110976,110982],{},[26,110973,2021],{},[26,110975,2024],{},[26,110977,2027,110978,2031,110980,365],{},[43,110979,2030],{},[43,110981,2034],{},[26,110983,2037],{},[479,110985,2040],{"id":2040},[19,110987,2043],{},[36,110989,110990],{"className":160,"code":1876,"language":162,"meta":41,"style":41},[43,110991,110992],{"__ignoreMap":41},[46,110993,110994,110996,110998,111000,111002],{"class":48,"line":49},[46,110995,371],{"class":56},[46,110997,79],{"class":52},[46,110999,360],{"class":173},[46,111001,1889],{"class":169},[46,111003,1290],{"class":173},[19,111005,2062],{},[36,111007,111008],{"className":160,"code":1896,"language":162,"meta":41,"style":41},[43,111009,111010],{"__ignoreMap":41},[46,111011,111012,111014,111016,111018,111020],{"class":48,"line":49},[46,111013,371],{"class":56},[46,111015,79],{"class":52},[46,111017,364],{"class":173},[46,111019,1889],{"class":169},[46,111021,1290],{"class":173},[14,111023,2082],{"id":2081},[19,111025,2085],{},[23,111027,111028,111030,111032],{},[26,111029,2090],{},[26,111031,2093],{},[26,111033,2096],{},[2098,111035,2100],{},{"title":41,"searchDepth":60,"depth":60,"links":111037},[111038,111039,111040,111045,111050,111051,111052,111059],{"id":16,"depth":60,"text":17},{"id":153,"depth":60,"text":154},{"id":375,"depth":60,"text":376,"children":111041},[111042,111043,111044],{"id":481,"depth":200,"text":482},{"id":512,"depth":200,"text":513},{"id":548,"depth":200,"text":549},{"id":594,"depth":60,"text":595,"children":111046},[111047,111048,111049],{"id":1293,"depth":200,"text":1293},{"id":1393,"depth":200,"text":1394},{"id":1572,"depth":200,"text":1573},{"id":1810,"depth":60,"text":1811},{"id":1841,"depth":60,"text":1842},{"id":1945,"depth":60,"text":1946,"children":111053},[111054,111055,111056,111057,111058],{"id":1949,"depth":200,"text":1950},{"id":1989,"depth":200,"text":1992},{"id":1998,"depth":200,"text":1999},{"id":2013,"depth":200,"text":2013},{"id":2040,"depth":200,"text":2040},{"id":2081,"depth":60,"text":2082},{},{"title":5,"description":41},{"id":111063,"title":111064,"body":111065,"description":41,"extension":2125,"meta":112976,"navigation":615,"path":112977,"seo":112978,"stem":112979,"__hash__":112980},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":111066,"toc":112952},[111067,111070,111072,111075,111077,111096,111099,111105,111108,111110,111112,111136,111138,111152,111154,111195,111197,111208,111210,111213,111219,111222,111256,111259,111291,111294,111326,111330,111333,111373,111376,111382,111385,111391,111395,111398,111404,111407,111411,111414,111454,111456,111469,111472,111474,112056,112058,112070,112073,112084,112086,112089,112108,112120,112123,112144,112147,112150,112193,112196,112199,112219,112226,112228,112246,112261,112264,112270,112273,112279,112296,112303,112334,112345,112379,112390,112407,112416,112424,112429,112443,112446,112467,112473,112487,112492,112522,112532,112557,112565,112588,112591,112607,112610,112618,112624,112646,112659,112680,112689,112728,112739,112741,112744,112750,112753,112756,112762,112765,112785,112788,112790,112829,112831,112834,112842,112845,112848,112875,112878,112888,112894,112897,112903,112905,112911,112915,112918,112920,112923,112947,112950],[10,111068,111064],{"id":111069},"_6控制任务cartpole",[14,111071,17],{"id":16},[19,111073,111074],{},"本章搭建一个最小 Cartpole 控制任务。",[19,111076,106219],{},[23,111078,111079,111082,111084,111087,111090,111093],{},[26,111080,111081],{},"slide joint",[26,111083,108069],{},[26,111085,111086],{},"cart force actuator",[26,111088,111089],{},"状态观测",[26,111091,111092],{},"简单控制循环",[26,111094,111095],{},"reward 设计雏形",[19,111097,111098],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[36,111100,111103],{"className":111101,"code":111102,"language":571,"meta":41},[569],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[43,111104,111102],{"__ignoreMap":41},[19,111106,111107],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,111109,154],{"id":153},[19,111111,157],{},[36,111113,111114],{"className":160,"code":106276,"language":162,"meta":41,"style":41},[43,111115,111116],{"__ignoreMap":41},[46,111117,111118,111120,111122,111124,111126,111128,111130,111132,111134],{"class":48,"line":49},[46,111119,170],{"class":169},[46,111121,174],{"class":173},[46,111123,177],{"class":173},[46,111125,181],{"class":180},[46,111127,106291],{"class":173},[46,111129,102754],{"class":173},[46,111131,104399],{"class":173},[46,111133,195],{"class":173},[46,111135,106300],{"class":173},[19,111137,240],{},[36,111139,111140],{"className":160,"code":102863,"language":162,"meta":41,"style":41},[43,111141,111142],{"__ignoreMap":41},[46,111143,111144,111146,111148,111150],{"class":48,"line":49},[46,111145,250],{"class":169},[46,111147,177],{"class":173},[46,111149,255],{"class":173},[46,111151,102876],{"class":173},[19,111153,264],{},[36,111155,111157],{"className":160,"code":111156,"language":162,"meta":41,"style":41},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[43,111158,111159,111176,111185],{"__ignoreMap":41},[46,111160,111161,111163,111165,111167,111170,111172,111174],{"class":48,"line":49},[46,111162,274],{"class":169},[46,111164,277],{"class":173},[46,111166,280],{"class":180},[46,111168,111169],{"class":173}," mujoco-cartpole",[46,111171,286],{"class":173},[46,111173,289],{"class":180},[46,111175,292],{"class":180},[46,111177,111178,111180,111182],{"class":48,"line":60},[46,111179,274],{"class":169},[46,111181,299],{"class":173},[46,111183,111184],{"class":173}," mujoco-cartpole\n",[46,111186,111187,111189,111191,111193],{"class":48,"line":200},[46,111188,250],{"class":169},[46,111190,177],{"class":173},[46,111192,255],{"class":173},[46,111194,102876],{"class":173},[19,111196,102943],{},[23,111198,111199,111202,111205],{},[26,111200,111201],{},"本章不依赖 Gymnasium。",[26,111203,111204],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[26,111206,111207],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,111209,376],{"id":375},[19,111211,111212],{},"Cartpole 的模型结构:",[36,111214,111217],{"className":111215,"code":111216,"language":571,"meta":41},[569],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[43,111218,111216],{"__ignoreMap":41},[19,111220,111221],{},"小车通过 slide joint 左右移动:",[36,111223,111225],{"className":1350,"code":111224,"language":1352,"meta":41,"style":41},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[43,111226,111227],{"__ignoreMap":41},[46,111228,111229,111231,111233,111235,111237,111240,111242,111244,111247,111249,111251,111254],{"class":48,"line":49},[46,111230,821],{"class":56},[46,111232,104846],{"class":1361},[46,111234,1364],{"class":169},[46,111236,79],{"class":56},[46,111238,111239],{"class":173},"\"cart_x\"",[46,111241,55789],{"class":169},[46,111243,79],{"class":56},[46,111245,111246],{"class":173},"\"slide\"",[46,111248,107913],{"class":169},[46,111250,79],{"class":56},[46,111252,111253],{"class":173},"\"1 0 0\"",[46,111255,1387],{"class":56},[19,111257,111258],{},"杆子通过 hinge joint 旋转:",[36,111260,111262],{"className":1350,"code":111261,"language":1352,"meta":41,"style":41},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[43,111263,111264],{"__ignoreMap":41},[46,111265,111266,111268,111270,111272,111274,111277,111279,111281,111283,111285,111287,111289],{"class":48,"line":49},[46,111267,821],{"class":56},[46,111269,104846],{"class":1361},[46,111271,1364],{"class":169},[46,111273,79],{"class":56},[46,111275,111276],{"class":173},"\"pole_hinge\"",[46,111278,55789],{"class":169},[46,111280,79],{"class":56},[46,111282,107904],{"class":173},[46,111284,107913],{"class":169},[46,111286,79],{"class":56},[46,111288,107918],{"class":173},[46,111290,1387],{"class":56},[19,111292,111293],{},"控制力作用在小车 slide joint 上:",[36,111295,111297],{"className":1350,"code":111296,"language":1352,"meta":41,"style":41},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[43,111298,111299],{"__ignoreMap":41},[46,111300,111301,111303,111305,111307,111309,111312,111314,111316,111318,111320,111322,111324],{"class":48,"line":49},[46,111302,821],{"class":56},[46,111304,107959],{"class":1361},[46,111306,1364],{"class":169},[46,111308,79],{"class":56},[46,111310,111311],{"class":173},"\"cart_motor\"",[46,111313,107969],{"class":169},[46,111315,79],{"class":56},[46,111317,111239],{"class":173},[46,111319,107976],{"class":169},[46,111321,79],{"class":56},[46,111323,56281],{"class":173},[46,111325,1387],{"class":56},[479,111327,111329],{"id":111328},"cartpole-的状态是什么","Cartpole 的状态是什么",[19,111331,111332],{},"这个简化模型有两个关节：",[97,111334,111335,111346],{},[100,111336,111337],{},[103,111338,111339,111341,111343],{},[106,111340,104651],{"align":108},[106,111342,25738],{"align":108},[106,111344,111345],{"align":108},"对应状态",[120,111347,111348,111361],{},[103,111349,111350,111355,111358],{},[125,111351,111352],{"align":108},[43,111353,111354],{},"cart_x",[125,111356,111357],{"align":108},"slide",[125,111359,111360],{"align":108},"小车 x 位置",[103,111362,111363,111368,111370],{},[125,111364,111365],{"align":108},[43,111366,111367],{},"pole_hinge",[125,111369,107725],{"align":108},[125,111371,111372],{"align":108},"杆子角度",[19,111374,111375],{},"所以：",[36,111377,111380],{"className":111378,"code":111379,"language":571,"meta":41},[569],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[43,111381,111379],{"__ignoreMap":41},[19,111383,111384],{},"把它们拼起来就是观测：",[36,111386,111389],{"className":111387,"code":111388,"language":571,"meta":41},[569],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[43,111390,111388],{"__ignoreMap":41},[479,111392,111394],{"id":111393},"action-是什么","action 是什么",[19,111396,111397],{},"本章只有一个 actuator：",[36,111399,111402],{"className":111400,"code":111401,"language":571,"meta":41},[569],"data.ctrl[0] = action\n",[43,111403,111401],{"__ignoreMap":41},[19,111405,111406],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[479,111408,111410],{"id":111409},"reward-是什么","reward 是什么",[19,111412,111413],{},"奖励函数：",[36,111415,111417],{"className":38,"code":111416,"language":40,"meta":41,"style":41},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[43,111418,111419],{"__ignoreMap":41},[46,111420,111421,111423,111426,111428,111430,111432,111435,111437,111440,111442,111444,111446,111449,111451],{"class":48,"line":49},[46,111422,19047],{"class":52},[46,111424,111425],{"class":180}," float",[46,111427,1152],{"class":56},[46,111429,104304],{"class":180},[46,111431,54238],{"class":52},[46,111433,111434],{"class":180}," 0.1",[46,111436,8531],{"class":52},[46,111438,111439],{"class":56}," cart_x ",[46,111441,2642],{"class":52},[46,111443,111439],{"class":56},[46,111445,534],{"class":52},[46,111447,111448],{"class":56}," pole_angle ",[46,111450,2642],{"class":52},[46,111452,111453],{"class":56}," pole_angle)\n",[19,111455,108111],{},[23,111457,111458,111463,111466],{},[26,111459,111460,111461,365],{},"基础奖励是 ",[43,111462,104304],{},[26,111464,111465],{},"小车离中心越远，扣分越多。",[26,111467,111468],{},"杆子角度越大，扣分越多。",[19,111470,111471],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,111473,595],{"id":594},[36,111475,111477],{"className":38,"code":111476,"language":40,"meta":41,"style":41},"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",[43,111478,111479,111485,111495,111499,111503,111511,111516,111520,111524,111528,111533,111537,111542,111547,111552,111556,111561,111566,111571,111575,111579,111583,111587,111591,111596,111600,111604,111608,111612,111616,111626,111633,111637,111641,111655,111669,111682,111712,111716,111720,111732,111744,111752,111756,111769,111773,111777,111786,111790,111806,111816,111829,111842,111846,111869,111887,111891,111903,111907,111911,111921,111931,111935,111951,111992,111996,112016,112032,112036,112040,112052],{"__ignoreMap":41},[46,111480,111481,111483],{"class":48,"line":49},[46,111482,53],{"class":52},[46,111484,623],{"class":56},[46,111486,111487,111489,111491,111493],{"class":48,"line":60},[46,111488,53],{"class":52},[46,111490,33358],{"class":56},[46,111492,398],{"class":52},[46,111494,33363],{"class":56},[46,111496,111497],{"class":48,"line":200},[46,111498,616],{"emptyLinePlaceholder":615},[46,111500,111501],{"class":48,"line":211},[46,111502,616],{"emptyLinePlaceholder":615},[46,111504,111505,111507,111509],{"class":48,"line":222},[46,111506,644],{"class":180},[46,111508,647],{"class":52},[46,111510,650],{"class":173},[46,111512,111513],{"class":48,"line":636},[46,111514,111515],{"class":173},"\u003Cmujoco model=\"cartpole\">\n",[46,111517,111518],{"class":48,"line":641},[46,111519,662],{"class":173},[46,111521,111522],{"class":48,"line":653},[46,111523,616],{"emptyLinePlaceholder":615},[46,111525,111526],{"class":48,"line":659},[46,111527,673],{"class":173},[46,111529,111530],{"class":48,"line":665},[46,111531,111532],{"class":173},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[46,111534,111535],{"class":48,"line":670},[46,111536,616],{"emptyLinePlaceholder":615},[46,111538,111539],{"class":48,"line":676},[46,111540,111541],{"class":173},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[46,111543,111544],{"class":48,"line":682},[46,111545,111546],{"class":173},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[46,111548,111549],{"class":48,"line":688},[46,111550,111551],{"class":173},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[46,111553,111554],{"class":48,"line":693},[46,111555,616],{"emptyLinePlaceholder":615},[46,111557,111558],{"class":48,"line":699},[46,111559,111560],{"class":173},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[46,111562,111563],{"class":48,"line":705},[46,111564,111565],{"class":173},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[46,111567,111568],{"class":48,"line":711},[46,111569,111570],{"class":173},"        \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",[46,111572,111573],{"class":48,"line":717},[46,111574,108323],{"class":173},[46,111576,111577],{"class":48,"line":723},[46,111578,714],{"class":173},[46,111580,111581],{"class":48,"line":729},[46,111582,720],{"class":173},[46,111584,111585],{"class":48,"line":735},[46,111586,616],{"emptyLinePlaceholder":615},[46,111588,111589],{"class":48,"line":740},[46,111590,108340],{"class":173},[46,111592,111593],{"class":48,"line":745},[46,111594,111595],{"class":173},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[46,111597,111598],{"class":48,"line":763},[46,111599,108350],{"class":173},[46,111601,111602],{"class":48,"line":778},[46,111603,726],{"class":173},[46,111605,111606],{"class":48,"line":789},[46,111607,732],{"class":173},[46,111609,111610],{"class":48,"line":794},[46,111611,616],{"emptyLinePlaceholder":615},[46,111613,111614],{"class":48,"line":806},[46,111615,616],{"emptyLinePlaceholder":615},[46,111617,111618,111620,111623],{"class":48,"line":829},[46,111619,748],{"class":52},[46,111621,111622],{"class":169}," get_observation",[46,111624,111625],{"class":56},"(data: mujoco.MjData) -> np.ndarray:\n",[46,111627,111628,111630],{"class":48,"line":840},[46,111629,6108],{"class":52},[46,111631,111632],{"class":56}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[46,111634,111635],{"class":48,"line":846},[46,111636,616],{"emptyLinePlaceholder":615},[46,111638,111639],{"class":48,"line":852},[46,111640,616],{"emptyLinePlaceholder":615},[46,111642,111643,111645,111648,111651,111653],{"class":48,"line":857},[46,111644,748],{"class":52},[46,111646,111647],{"class":169}," compute_reward",[46,111649,111650],{"class":56},"(obs: np.ndarray) -> ",[46,111652,2236],{"class":180},[46,111654,760],{"class":56},[46,111656,111657,111660,111662,111665,111667],{"class":48,"line":875},[46,111658,111659],{"class":56},"    cart_x ",[46,111661,79],{"class":52},[46,111663,111664],{"class":56}," obs[",[46,111666,2379],{"class":180},[46,111668,35220],{"class":56},[46,111670,111671,111674,111676,111678,111680],{"class":48,"line":892},[46,111672,111673],{"class":56},"    pole_angle ",[46,111675,79],{"class":52},[46,111677,111664],{"class":56},[46,111679,2405],{"class":180},[46,111681,35220],{"class":56},[46,111683,111684,111686,111688,111690,111692,111694,111696,111698,111700,111702,111704,111706,111708,111710],{"class":48,"line":898},[46,111685,6108],{"class":52},[46,111687,111425],{"class":180},[46,111689,1152],{"class":56},[46,111691,104304],{"class":180},[46,111693,54238],{"class":52},[46,111695,111434],{"class":180},[46,111697,8531],{"class":52},[46,111699,111439],{"class":56},[46,111701,2642],{"class":52},[46,111703,111439],{"class":56},[46,111705,534],{"class":52},[46,111707,111448],{"class":56},[46,111709,2642],{"class":52},[46,111711,111453],{"class":56},[46,111713,111714],{"class":48,"line":903},[46,111715,616],{"emptyLinePlaceholder":615},[46,111717,111718],{"class":48,"line":908},[46,111719,616],{"emptyLinePlaceholder":615},[46,111721,111722,111724,111726,111728,111730],{"class":48,"line":925},[46,111723,748],{"class":52},[46,111725,751],{"class":169},[46,111727,754],{"class":56},[46,111729,757],{"class":180},[46,111731,760],{"class":56},[46,111733,111734,111736,111738,111740,111742],{"class":48,"line":1238},[46,111735,766],{"class":56},[46,111737,79],{"class":52},[46,111739,771],{"class":56},[46,111741,644],{"class":180},[46,111743,459],{"class":56},[46,111745,111746,111748,111750],{"class":48,"line":1251},[46,111747,781],{"class":56},[46,111749,79],{"class":52},[46,111751,786],{"class":56},[46,111753,111754],{"class":48,"line":1256},[46,111755,616],{"emptyLinePlaceholder":615},[46,111757,111758,111760,111762,111764,111766],{"class":48,"line":1261},[46,111759,106954],{"class":56},[46,111761,2405],{"class":180},[46,111763,6460],{"class":56},[46,111765,79],{"class":52},[46,111767,111768],{"class":180}," 0.1\n",[46,111770,111771],{"class":48,"line":1274},[46,111772,106967],{"class":56},[46,111774,111775],{"class":48,"line":10061},[46,111776,616],{"emptyLinePlaceholder":615},[46,111778,111779,111782,111784],{"class":48,"line":11720},[46,111780,111781],{"class":56},"    total_reward ",[46,111783,79],{"class":52},[46,111785,106646],{"class":180},[46,111787,111788],{"class":48,"line":11745},[46,111789,616],{"emptyLinePlaceholder":615},[46,111791,111792,111794,111796,111798,111800,111802,111804],{"class":48,"line":11768},[46,111793,1140],{"class":52},[46,111795,33593],{"class":56},[46,111797,1146],{"class":52},[46,111799,1149],{"class":180},[46,111801,1152],{"class":56},[46,111803,8423],{"class":180},[46,111805,1158],{"class":56},[46,111807,111808,111811,111813],{"class":48,"line":11792},[46,111809,111810],{"class":56},"        obs ",[46,111812,79],{"class":52},[46,111814,111815],{"class":56}," get_observation(data)\n",[46,111817,111818,111821,111823,111825,111827],{"class":48,"line":11797},[46,111819,111820],{"class":56},"        pole_angle ",[46,111822,79],{"class":52},[46,111824,111664],{"class":56},[46,111826,2405],{"class":180},[46,111828,35220],{"class":56},[46,111830,111831,111834,111836,111838,111840],{"class":48,"line":11802},[46,111832,111833],{"class":56},"        pole_angular_velocity ",[46,111835,79],{"class":52},[46,111837,111664],{"class":56},[46,111839,2266],{"class":180},[46,111841,35220],{"class":56},[46,111843,111844],{"class":48,"line":11807},[46,111845,616],{"emptyLinePlaceholder":615},[46,111847,111848,111851,111853,111856,111858,111860,111862,111864,111866],{"class":48,"line":11816},[46,111849,111850],{"class":56},"        action ",[46,111852,79],{"class":52},[46,111854,111855],{"class":180}," 2.0",[46,111857,8531],{"class":52},[46,111859,111448],{"class":56},[46,111861,2668],{"class":52},[46,111863,63832],{"class":180},[46,111865,8531],{"class":52},[46,111867,111868],{"class":56}," pole_angular_velocity\n",[46,111870,111871,111873,111875,111877,111879,111881,111883,111885],{"class":48,"line":11821},[46,111872,111850],{"class":56},[46,111874,79],{"class":52},[46,111876,109332],{"class":56},[46,111878,534],{"class":52},[46,111880,104304],{"class":180},[46,111882,448],{"class":56},[46,111884,104304],{"class":180},[46,111886,459],{"class":56},[46,111888,111889],{"class":48,"line":11827},[46,111890,616],{"emptyLinePlaceholder":615},[46,111892,111893,111895,111897,111899,111901],{"class":48,"line":11848},[46,111894,108502],{"class":56},[46,111896,2379],{"class":180},[46,111898,6460],{"class":56},[46,111900,79],{"class":52},[46,111902,109355],{"class":56},[46,111904,111905],{"class":48,"line":11854},[46,111906,414],{"class":56},[46,111908,111909],{"class":48,"line":11868},[46,111910,616],{"emptyLinePlaceholder":615},[46,111912,111913,111916,111918],{"class":48,"line":11874},[46,111914,111915],{"class":56},"        reward ",[46,111917,79],{"class":52},[46,111919,111920],{"class":56}," compute_reward(get_observation(data))\n",[46,111922,111923,111926,111928],{"class":48,"line":11901},[46,111924,111925],{"class":56},"        total_reward ",[46,111927,11481],{"class":52},[46,111929,111930],{"class":56}," reward\n",[46,111932,111933],{"class":48,"line":11910},[46,111934,616],{"emptyLinePlaceholder":615},[46,111936,111937,111939,111941,111943,111945,111947,111949],{"class":48,"line":11916},[46,111938,4525],{"class":52},[46,111940,33593],{"class":56},[46,111942,2515],{"class":52},[46,111944,7767],{"class":180},[46,111946,917],{"class":52},[46,111948,887],{"class":180},[46,111950,760],{"class":56},[46,111952,111953,111955,111957,111960,111963,111966,111969,111971,111974,111977,111979,111981,111983,111985,111988,111990],{"class":48,"line":11924},[46,111954,36622],{"class":180},[46,111956,1152],{"class":56},[46,111958,111959],{"class":173},"\"step:\"",[46,111961,111962],{"class":56},", step, ",[46,111964,111965],{"class":173},"\"obs:\"",[46,111967,111968],{"class":56},", np.round(obs, ",[46,111970,2266],{"class":180},[46,111972,111973],{"class":56},"), ",[46,111975,111976],{"class":173},"\"action:\"",[46,111978,448],{"class":56},[46,111980,33993],{"class":180},[46,111982,1152],{"class":56},[46,111984,2236],{"class":180},[46,111986,111987],{"class":56},"(action), ",[46,111989,2266],{"class":180},[46,111991,32479],{"class":56},[46,111993,111994],{"class":48,"line":11929},[46,111995,616],{"emptyLinePlaceholder":615},[46,111997,111998,112000,112002,112005,112007,112009,112012,112014],{"class":48,"line":18605},[46,111999,1227],{"class":180},[46,112001,1152],{"class":56},[46,112003,112004],{"class":173},"\"total_reward:\"",[46,112006,448],{"class":56},[46,112008,33993],{"class":180},[46,112010,112011],{"class":56},"(total_reward, ",[46,112013,2266],{"class":180},[46,112015,32479],{"class":56},[46,112017,112018,112020,112022,112025,112028,112030],{"class":48,"line":18611},[46,112019,1227],{"class":180},[46,112021,1152],{"class":56},[46,112023,112024],{"class":173},"\"final obs:\"",[46,112026,112027],{"class":56},", np.round(get_observation(data), ",[46,112029,2266],{"class":180},[46,112031,32479],{"class":56},[46,112033,112034],{"class":48,"line":18634},[46,112035,616],{"emptyLinePlaceholder":615},[46,112037,112038],{"class":48,"line":18640},[46,112039,616],{"emptyLinePlaceholder":615},[46,112041,112042,112044,112046,112048,112050],{"class":48,"line":18663},[46,112043,911],{"class":52},[46,112045,914],{"class":180},[46,112047,917],{"class":52},[46,112049,920],{"class":173},[46,112051,760],{"class":56},[46,112053,112054],{"class":48,"line":18677},[46,112055,928],{"class":56},[19,112057,931],{},[36,112059,112061],{"className":160,"code":112060,"language":162,"meta":41,"style":41},"touch ch6_cartpole.py\n",[43,112062,112063],{"__ignoreMap":41},[46,112064,112065,112067],{"class":48,"line":49},[46,112066,941],{"class":169},[46,112068,112069],{"class":173}," ch6_cartpole.py\n",[19,112071,112072],{},"运行：",[36,112074,112076],{"className":160,"code":112075,"language":162,"meta":41,"style":41},"python ch6_cartpole.py\n",[43,112077,112078],{"__ignoreMap":41},[46,112079,112080,112082],{"class":48,"line":49},[46,112081,40],{"class":169},[46,112083,112069],{"class":173},[479,112085,1293],{"id":1293},[19,112087,112088],{},"构造观测：",[36,112090,112092],{"className":38,"code":112091,"language":40,"meta":41,"style":41},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[43,112093,112094,112102],{"__ignoreMap":41},[46,112095,112096,112098,112100],{"class":48,"line":49},[46,112097,748],{"class":52},[46,112099,111622],{"class":169},[46,112101,111625],{"class":56},[46,112103,112104,112106],{"class":48,"line":60},[46,112105,6108],{"class":52},[46,112107,111632],{"class":56},[19,112109,112110,112113,112114,112116,112117,112119],{},[43,112111,112112],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[43,112115,105919],{}," 2 维，",[43,112118,106248],{}," 2 维，所以 obs 是 4 维。",[19,112121,112122],{},"设置初始角度：",[36,112124,112126],{"className":38,"code":112125,"language":40,"meta":41,"style":41},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[43,112127,112128,112140],{"__ignoreMap":41},[46,112129,112130,112132,112134,112136,112138],{"class":48,"line":49},[46,112131,106584],{"class":56},[46,112133,2405],{"class":180},[46,112135,6460],{"class":56},[46,112137,79],{"class":52},[46,112139,111768],{"class":180},[46,112141,112142],{"class":48,"line":60},[46,112143,106430],{"class":56},[19,112145,112146],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[19,112148,112149],{},"简单反馈控制：",[36,112151,112153],{"className":38,"code":112152,"language":40,"meta":41,"style":41},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[43,112154,112155,112175],{"__ignoreMap":41},[46,112156,112157,112159,112161,112163,112165,112167,112169,112171,112173],{"class":48,"line":49},[46,112158,109327],{"class":56},[46,112160,79],{"class":52},[46,112162,111855],{"class":180},[46,112164,8531],{"class":52},[46,112166,111448],{"class":56},[46,112168,2668],{"class":52},[46,112170,63832],{"class":180},[46,112172,8531],{"class":52},[46,112174,111868],{"class":56},[46,112176,112177,112179,112181,112183,112185,112187,112189,112191],{"class":48,"line":60},[46,112178,109327],{"class":56},[46,112180,79],{"class":52},[46,112182,109332],{"class":56},[46,112184,534],{"class":52},[46,112186,104304],{"class":180},[46,112188,448],{"class":56},[46,112190,104304],{"class":180},[46,112192,459],{"class":56},[19,112194,112195],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[19,112197,112198],{},"限制动作：",[36,112200,112202],{"className":38,"code":112201,"language":40,"meta":41,"style":41},"np.clip(action, -1.0, 1.0)\n",[43,112203,112204],{"__ignoreMap":41},[46,112205,112206,112209,112211,112213,112215,112217],{"class":48,"line":49},[46,112207,112208],{"class":56},"np.clip(action, ",[46,112210,534],{"class":52},[46,112212,104304],{"class":180},[46,112214,448],{"class":56},[46,112216,104304],{"class":180},[46,112218,459],{"class":56},[19,112220,112221,112222,112225],{},"因为 XML 里 ",[43,112223,112224],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[479,112227,103613],{"id":103613},[36,112229,112230],{"className":38,"code":112091,"language":40,"meta":41,"style":41},[43,112231,112232,112240],{"__ignoreMap":41},[46,112233,112234,112236,112238],{"class":48,"line":49},[46,112235,748],{"class":52},[46,112237,111622],{"class":169},[46,112239,111625],{"class":56},[46,112241,112242,112244],{"class":48,"line":60},[46,112243,6108],{"class":52},[46,112245,111632],{"class":56},[19,112247,112248,112249,112252,112253,112256,112257,112260],{},"这段定义了一个函数，用来获取当前观测。",[43,112250,112251],{},"data.qpos.copy()"," 是位置数组副本，",[43,112254,112255],{},"data.qvel.copy()"," 是速度数组副本。",[43,112258,112259],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[19,112262,112263],{},"在本章模型里：",[36,112265,112268],{"className":112266,"code":112267,"language":571,"meta":41},[569],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[43,112269,112267],{"__ignoreMap":41},[19,112271,112272],{},"所以返回的 obs 是：",[36,112274,112277],{"className":112275,"code":112276,"language":571,"meta":41},[569],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[43,112278,112276],{"__ignoreMap":41},[36,112280,112282],{"className":38,"code":112281,"language":40,"meta":41,"style":41},"def compute_reward(obs: np.ndarray) -> float:\n",[43,112283,112284],{"__ignoreMap":41},[46,112285,112286,112288,112290,112292,112294],{"class":48,"line":49},[46,112287,748],{"class":52},[46,112289,111647],{"class":169},[46,112291,111650],{"class":56},[46,112293,2236],{"class":180},[46,112295,760],{"class":56},[19,112297,112298,112299,112302],{},"这行定义奖励函数。输入是观测 ",[43,112300,112301],{},"obs","，输出是一个浮点数奖励。",[36,112304,112306],{"className":38,"code":112305,"language":40,"meta":41,"style":41},"cart_x = obs[0]\npole_angle = obs[1]\n",[43,112307,112308,112321],{"__ignoreMap":41},[46,112309,112310,112313,112315,112317,112319],{"class":48,"line":49},[46,112311,112312],{"class":56},"cart_x ",[46,112314,79],{"class":52},[46,112316,111664],{"class":56},[46,112318,2379],{"class":180},[46,112320,35220],{"class":56},[46,112322,112323,112326,112328,112330,112332],{"class":48,"line":60},[46,112324,112325],{"class":56},"pole_angle ",[46,112327,79],{"class":52},[46,112329,111664],{"class":56},[46,112331,2405],{"class":180},[46,112333,35220],{"class":56},[19,112335,112336,112337,112340,112341,112344],{},"数组索引从 0 开始。",[43,112338,112339],{},"obs[0]"," 是第一个元素，也就是小车位置。",[43,112342,112343],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[36,112346,112347],{"className":38,"code":111416,"language":40,"meta":41,"style":41},[43,112348,112349],{"__ignoreMap":41},[46,112350,112351,112353,112355,112357,112359,112361,112363,112365,112367,112369,112371,112373,112375,112377],{"class":48,"line":49},[46,112352,19047],{"class":52},[46,112354,111425],{"class":180},[46,112356,1152],{"class":56},[46,112358,104304],{"class":180},[46,112360,54238],{"class":52},[46,112362,111434],{"class":180},[46,112364,8531],{"class":52},[46,112366,111439],{"class":56},[46,112368,2642],{"class":52},[46,112370,111439],{"class":56},[46,112372,534],{"class":52},[46,112374,111448],{"class":56},[46,112376,2642],{"class":52},[46,112378,111453],{"class":56},[19,112380,112381,112382,112385,112386,112389],{},"这行计算奖励。",[43,112383,112384],{},"cart_x * cart_x"," 是小车位置的平方，",[43,112387,112388],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[36,112391,112393],{"className":38,"code":112392,"language":40,"meta":41,"style":41},"data.qpos[1] = 0.1\n",[43,112394,112395],{"__ignoreMap":41},[46,112396,112397,112399,112401,112403,112405],{"class":48,"line":49},[46,112398,106584],{"class":56},[46,112400,2405],{"class":180},[46,112402,6460],{"class":56},[46,112404,79],{"class":52},[46,112406,111768],{"class":180},[19,112408,112409,112410,112412,112413,112415],{},"手动设置杆子的初始角度。因为 ",[43,112411,107341],{}," 是小车位置，",[43,112414,107344],{}," 是杆子角度，所以这里改的是杆子。",[36,112417,112418],{"className":38,"code":106430,"language":40,"meta":41,"style":41},[43,112419,112420],{"__ignoreMap":41},[46,112421,112422],{"class":48,"line":49},[46,112423,106430],{"class":56},[19,112425,107387,112426,112428],{},[43,112427,105919],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[36,112430,112432],{"className":38,"code":112431,"language":40,"meta":41,"style":41},"total_reward = 0.0\n",[43,112433,112434],{"__ignoreMap":41},[46,112435,112436,112439,112441],{"class":48,"line":49},[46,112437,112438],{"class":56},"total_reward ",[46,112440,79],{"class":52},[46,112442,106646],{"class":180},[19,112444,112445],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[36,112447,112449],{"className":38,"code":112448,"language":40,"meta":41,"style":41},"for step in range(1000):\n",[43,112450,112451],{"__ignoreMap":41},[46,112452,112453,112455,112457,112459,112461,112463,112465],{"class":48,"line":49},[46,112454,1713],{"class":52},[46,112456,33593],{"class":56},[46,112458,1146],{"class":52},[46,112460,1149],{"class":180},[46,112462,1152],{"class":56},[46,112464,8423],{"class":180},[46,112466,1158],{"class":56},[19,112468,112469,112470,112472],{},"循环 1000 步。",[43,112471,109019],{}," 是当前步数，从 0 到 999。",[36,112474,112476],{"className":38,"code":112475,"language":40,"meta":41,"style":41},"obs = get_observation(data)\n",[43,112477,112478],{"__ignoreMap":41},[46,112479,112480,112483,112485],{"class":48,"line":49},[46,112481,112482],{"class":56},"obs ",[46,112484,79],{"class":52},[46,112486,111815],{"class":56},[19,112488,112489,112490,365],{},"读取当前状态，保存到 ",[43,112491,112301],{},[36,112493,112495],{"className":38,"code":112494,"language":40,"meta":41,"style":41},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[43,112496,112497,112509],{"__ignoreMap":41},[46,112498,112499,112501,112503,112505,112507],{"class":48,"line":49},[46,112500,112325],{"class":56},[46,112502,79],{"class":52},[46,112504,111664],{"class":56},[46,112506,2405],{"class":180},[46,112508,35220],{"class":56},[46,112510,112511,112514,112516,112518,112520],{"class":48,"line":60},[46,112512,112513],{"class":56},"pole_angular_velocity ",[46,112515,79],{"class":52},[46,112517,111664],{"class":56},[46,112519,2266],{"class":180},[46,112521,35220],{"class":56},[19,112523,112524,112525,112528,112529,365],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[43,112526,112527],{},"obs[3]","？因为 obs 的顺序是 ",[43,112530,112531],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[36,112533,112535],{"className":38,"code":112534,"language":40,"meta":41,"style":41},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[43,112536,112537],{"__ignoreMap":41},[46,112538,112539,112541,112543,112545,112547,112549,112551,112553,112555],{"class":48,"line":49},[46,112540,109327],{"class":56},[46,112542,79],{"class":52},[46,112544,111855],{"class":180},[46,112546,8531],{"class":52},[46,112548,111448],{"class":56},[46,112550,2668],{"class":52},[46,112552,63832],{"class":180},[46,112554,8531],{"class":52},[46,112556,111868],{"class":56},[19,112558,112559,112560,1700,112562,112564],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[43,112561,107145],{},[43,112563,37301],{}," 是人为设置的系数，不是固定公式。",[36,112566,112568],{"className":38,"code":112567,"language":40,"meta":41,"style":41},"action = np.clip(action, -1.0, 1.0)\n",[43,112569,112570],{"__ignoreMap":41},[46,112571,112572,112574,112576,112578,112580,112582,112584,112586],{"class":48,"line":49},[46,112573,109327],{"class":56},[46,112575,79],{"class":52},[46,112577,109332],{"class":56},[46,112579,534],{"class":52},[46,112581,104304],{"class":180},[46,112583,448],{"class":56},[46,112585,104304],{"class":180},[46,112587,459],{"class":56},[19,112589,112590],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[36,112592,112593],{"className":38,"code":111401,"language":40,"meta":41,"style":41},[43,112594,112595],{"__ignoreMap":41},[46,112596,112597,112599,112601,112603,112605],{"class":48,"line":49},[46,112598,107756],{"class":56},[46,112600,2379],{"class":180},[46,112602,6460],{"class":56},[46,112604,79],{"class":52},[46,112606,109355],{"class":56},[19,112608,112609],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[36,112611,112612],{"className":38,"code":464,"language":40,"meta":41,"style":41},[43,112613,112614],{"__ignoreMap":41},[46,112615,112616],{"class":48,"line":49},[46,112617,464],{"class":56},[19,112619,112620,112621,112623],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[43,112622,108011],{}," 计算小车和杆子的下一刻状态。",[36,112625,112627],{"className":38,"code":112626,"language":40,"meta":41,"style":41},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[43,112628,112629,112638],{"__ignoreMap":41},[46,112630,112631,112634,112636],{"class":48,"line":49},[46,112632,112633],{"class":56},"reward ",[46,112635,79],{"class":52},[46,112637,111920],{"class":56},[46,112639,112640,112642,112644],{"class":48,"line":60},[46,112641,112438],{"class":56},[46,112643,11481],{"class":52},[46,112645,111930],{"class":56},[19,112647,112648,112649,112651,112652,112655,112656,365],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[43,112650,11481],{}," 是简写，",[43,112653,112654],{},"total_reward += reward"," 等价于 ",[43,112657,112658],{},"total_reward = total_reward + reward",[36,112660,112662],{"className":38,"code":112661,"language":40,"meta":41,"style":41},"if step % 100 == 0:\n",[43,112663,112664],{"__ignoreMap":41},[46,112665,112666,112668,112670,112672,112674,112676,112678],{"class":48,"line":49},[46,112667,911],{"class":52},[46,112669,33593],{"class":56},[46,112671,2515],{"class":52},[46,112673,7767],{"class":180},[46,112675,917],{"class":52},[46,112677,887],{"class":180},[46,112679,760],{"class":56},[19,112681,112682,112684,112685,112688],{},[43,112683,2515],{}," 是取余数。",[43,112686,112687],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[36,112690,112692],{"className":38,"code":112691,"language":40,"meta":41,"style":41},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[43,112693,112694],{"__ignoreMap":41},[46,112695,112696,112698,112700,112702,112704,112706,112708,112710,112712,112714,112716,112718,112720,112722,112724,112726],{"class":48,"line":49},[46,112697,32398],{"class":180},[46,112699,1152],{"class":56},[46,112701,111959],{"class":173},[46,112703,111962],{"class":56},[46,112705,111965],{"class":173},[46,112707,111968],{"class":56},[46,112709,2266],{"class":180},[46,112711,111973],{"class":56},[46,112713,111976],{"class":173},[46,112715,448],{"class":56},[46,112717,33993],{"class":180},[46,112719,1152],{"class":56},[46,112721,2236],{"class":180},[46,112723,111987],{"class":56},[46,112725,2266],{"class":180},[46,112727,32479],{"class":56},[19,112729,112730,112731,112734,112735,112738],{},"打印当前步数、观测和动作。",[43,112732,112733],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[43,112736,112737],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,112740,1811],{"id":1810},[19,112742,112743],{},"观测向量:",[36,112745,112748],{"className":112746,"code":112747,"language":571,"meta":41},[569],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[43,112749,112747],{"__ignoreMap":41},[19,112751,112752],{},"控制器是教学用的简单线性反馈，不保证最优。",[19,112754,112755],{},"每隔 100 步会打印一次：",[36,112757,112760],{"className":112758,"code":112759,"language":571,"meta":41},[569],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[43,112761,112759],{"__ignoreMap":41},[19,112763,112764],{},"重点观察：",[23,112766,112767,112773,112778],{},[26,112768,112769,112772],{},[43,112770,112771],{},"pole_angle"," 是否越来越大。",[26,112774,112775,112777],{},[43,112776,111354],{}," 是否跑得太远。",[26,112779,112780,112781,2006,112783,365],{},"action 是否经常被 clip 到 ",[43,112782,105804],{},[43,112784,2405],{},[19,112786,112787],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,112789,1842],{"id":1841},[23,112791,112792,112798,112801,112807,112817,112823,112826],{},[26,112793,112794,112795,365],{},"把初始角度改为 ",[43,112796,112797],{},"data.qpos[1] = 0.3",[26,112799,112800],{},"重新运行，观察控制是否变差。",[26,112802,112803,112804,112806],{},"把 actuator ",[43,112805,108952],{}," 改小。",[26,112808,112809,112810,112813,112814,365],{},"打印 ",[43,112811,112812],{},"model.nq, model.nv, model.nu","，应为 ",[43,112815,112816],{},"2 2 1",[26,112818,112819,112820,112822],{},"把 reward 里的 ",[43,112821,112388],{}," 系数改大，观察总奖励变化。",[26,112824,112825],{},"把控制器改成反号，观察杆子是否更容易倒。",[26,112827,112828],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,112830,1946],{"id":1945},[479,112832,112833],{"id":112833},"杆子方向和预期不一致",[19,112835,104297,112836,112838,112839,112841],{},[43,112837,108124],{}," 和 capsule 的 ",[43,112840,105066],{},"，必要时用 viewer 可视化确认。",[479,112843,112844],{"id":112844},"控制器越控越倒",[19,112846,112847],{},"说明反馈符号可能反了，尝试:",[36,112849,112851],{"className":38,"code":112850,"language":40,"meta":41,"style":41},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[43,112852,112853],{"__ignoreMap":41},[46,112854,112855,112857,112859,112861,112863,112865,112867,112869,112871,112873],{"class":48,"line":49},[46,112856,109327],{"class":56},[46,112858,79],{"class":52},[46,112860,54238],{"class":52},[46,112862,107145],{"class":180},[46,112864,8531],{"class":52},[46,112866,111448],{"class":56},[46,112868,534],{"class":52},[46,112870,63832],{"class":180},[46,112872,8531],{"class":52},[46,112874,111868],{"class":56},[479,112876,112877],{"id":112877},"小车飞走",[19,112879,112880,112881,112883,112884,112887],{},"降低 ",[43,112882,108952],{}," 或缩小 ",[43,112885,112886],{},"action"," 的 clip 范围。",[479,112889,112891,112893],{"id":112890},"obs3-为什么是杆子角速度",[43,112892,112527],{}," 为什么是杆子角速度",[19,112895,112896],{},"因为这个模型里：",[36,112898,112901],{"className":112899,"code":112900,"language":571,"meta":41},[569],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[43,112902,112900],{"__ignoreMap":41},[19,112904,111375],{},[36,112906,112909],{"className":112907,"code":112908,"language":571,"meta":41},[569],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[43,112910,112908],{"__ignoreMap":41},[479,112912,112914],{"id":112913},"reward-变成负数是否错误","reward 变成负数是否错误",[19,112916,112917],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,112919,2082],{"id":2081},[19,112921,112922],{},"一个控制任务通常包含：",[23,112924,112925,112928,112936,112941,112944],{},[26,112926,112927],{},"模型：Cartpole 的 body、joint、actuator。",[26,112929,112930,112931,2400,112933,112935],{},"观测：从 ",[43,112932,105919],{},[43,112934,106248],{}," 里取状态。",[26,112937,112938,112939,365],{},"动作：写入 ",[43,112940,103010],{},[26,112942,112943],{},"奖励：根据任务目标打分。",[26,112945,112946],{},"循环：obs -> action -> step -> reward。",[19,112948,112949],{},"这就是后面 Gymnasium 环境的基本骨架。",[2098,112951,106174],{},{"title":41,"searchDepth":60,"depth":60,"links":112953},[112954,112955,112956,112961,112965,112966,112967,112975],{"id":16,"depth":60,"text":17},{"id":153,"depth":60,"text":154},{"id":375,"depth":60,"text":376,"children":112957},[112958,112959,112960],{"id":111328,"depth":200,"text":111329},{"id":111393,"depth":200,"text":111394},{"id":111409,"depth":200,"text":111410},{"id":594,"depth":60,"text":595,"children":112962},[112963,112964],{"id":1293,"depth":200,"text":1293},{"id":103613,"depth":200,"text":103613},{"id":1810,"depth":60,"text":1811},{"id":1841,"depth":60,"text":1842},{"id":1945,"depth":60,"text":1946,"children":112968},[112969,112970,112971,112972,112974],{"id":112833,"depth":200,"text":112833},{"id":112844,"depth":200,"text":112844},{"id":112877,"depth":200,"text":112877},{"id":112890,"depth":200,"text":112973},"obs[3] 为什么是杆子角速度",{"id":112913,"depth":200,"text":112914},{"id":2081,"depth":60,"text":2082},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":111064,"description":41},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":112982,"title":112983,"body":112984,"description":41,"extension":2125,"meta":114998,"navigation":615,"path":114999,"seo":115000,"stem":115001,"__hash__":115002},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":112985,"toc":114974},[112986,112989,112991,112994,112996,113013,113016,113019,113025,113028,113030,113032,113056,113058,113072,113074,113115,113117,113135,113137,113140,113146,113149,113177,113181,113187,113212,113215,113246,113253,113256,113259,113265,113268,113274,113277,113283,113287,113290,113315,113318,113320,114080,114082,114094,114096,114107,114109,114112,114129,114132,114134,114145,114148,114150,114196,114199,114212,114215,114297,114300,114302,114318,114328,114341,114344,114383,114393,114404,114414,114427,114430,114459,114462,114472,114475,114481,114498,114509,114511,114517,114534,114545,114566,114569,114581,114584,114605,114608,114616,114624,114641,114644,114713,114720,114728,114731,114744,114751,114753,114756,114762,114765,114768,114774,114780,114782,114822,114824,114830,114839,114842,114844,114864,114867,114870,114876,114880,114882,114909,114912,114915,114942,114948,114951,114954,114956,114959,114962,114968,114971],[10,112987,112983],{"id":112988},"_7控制任务reacher-机械臂到达目标",[14,112990,17],{"id":16},[19,112992,112993],{},"本章搭建一个二维两关节 reacher 任务。",[19,112995,106219],{},[23,112997,112998,113001,113004,113007,113010],{},[26,112999,113000],{},"两个 hinge joint",[26,113002,113003],{},"两个 motor actuator",[26,113005,113006],{},"site 作为末端点和目标点",[26,113008,113009],{},"根据末端和目标距离设计 reward",[26,113011,113012],{},"构造机械臂任务的基本形式",[19,113014,113015],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[19,113017,113018],{},"Reacher 任务可以理解为：",[36,113020,113023],{"className":113021,"code":113022,"language":571,"meta":41},[569],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[43,113024,113022],{"__ignoreMap":41},[19,113026,113027],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,113029,154],{"id":153},[19,113031,157],{},[36,113033,113034],{"className":160,"code":106276,"language":162,"meta":41,"style":41},[43,113035,113036],{"__ignoreMap":41},[46,113037,113038,113040,113042,113044,113046,113048,113050,113052,113054],{"class":48,"line":49},[46,113039,170],{"class":169},[46,113041,174],{"class":173},[46,113043,177],{"class":173},[46,113045,181],{"class":180},[46,113047,106291],{"class":173},[46,113049,102754],{"class":173},[46,113051,104399],{"class":173},[46,113053,195],{"class":173},[46,113055,106300],{"class":173},[19,113057,240],{},[36,113059,113060],{"className":160,"code":102863,"language":162,"meta":41,"style":41},[43,113061,113062],{"__ignoreMap":41},[46,113063,113064,113066,113068,113070],{"class":48,"line":49},[46,113065,250],{"class":169},[46,113067,177],{"class":173},[46,113069,255],{"class":173},[46,113071,102876],{"class":173},[19,113073,264],{},[36,113075,113077],{"className":160,"code":113076,"language":162,"meta":41,"style":41},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[43,113078,113079,113096,113105],{"__ignoreMap":41},[46,113080,113081,113083,113085,113087,113090,113092,113094],{"class":48,"line":49},[46,113082,274],{"class":169},[46,113084,277],{"class":173},[46,113086,280],{"class":180},[46,113088,113089],{"class":173}," mujoco-reacher",[46,113091,286],{"class":173},[46,113093,289],{"class":180},[46,113095,292],{"class":180},[46,113097,113098,113100,113102],{"class":48,"line":60},[46,113099,274],{"class":169},[46,113101,299],{"class":173},[46,113103,113104],{"class":173}," mujoco-reacher\n",[46,113106,113107,113109,113111,113113],{"class":48,"line":200},[46,113108,250],{"class":169},[46,113110,177],{"class":173},[46,113112,255],{"class":173},[46,113114,102876],{"class":173},[19,113116,102943],{},[23,113118,113119,113122,113125],{},[26,113120,113121],{},"本章使用低维状态，不使用图像输入。",[26,113123,113124],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[26,113126,113127,113128,2400,113130,2400,113132,113134],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[43,113129,105919],{},[43,113131,106248],{},[43,113133,105569],{}," 的方法一致。",[14,113136,376],{"id":375},[19,113138,113139],{},"Reacher 任务核心:",[36,113141,113144],{"className":113142,"code":113143,"language":571,"meta":41},[569],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[43,113145,113143],{"__ignoreMap":41},[19,113147,113148],{},"读取 site 世界坐标:",[36,113150,113152],{"className":38,"code":113151,"language":40,"meta":41,"style":41},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[43,113153,113154,113167],{"__ignoreMap":41},[46,113155,113156,113158,113160,113162,113165],{"class":48,"line":49},[46,113157,105523],{"class":56},[46,113159,79],{"class":52},[46,113161,105295],{"class":56},[46,113163,113164],{"class":173},"\"tip\"",[46,113166,459],{"class":56},[46,113168,113169,113172,113174],{"class":48,"line":60},[46,113170,113171],{"class":56},"tip_pos ",[46,113173,79],{"class":52},[46,113175,113176],{"class":56}," data.site_xpos[site_id]\n",[479,113178,113180],{"id":113179},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[19,113182,113183,113184,113186],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[43,113185,105919],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[36,113188,113190],{"className":38,"code":113189,"language":40,"meta":41,"style":41},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[43,113191,113192,113202],{"__ignoreMap":41},[46,113193,113194,113197,113199],{"class":48,"line":49},[46,113195,113196],{"class":56},"tip ",[46,113198,79],{"class":52},[46,113200,113201],{"class":56}," data.site_xpos[tip_site_id]\n",[46,113203,113204,113207,113209],{"class":48,"line":60},[46,113205,113206],{"class":56},"target ",[46,113208,79],{"class":52},[46,113210,113211],{"class":56}," data.site_xpos[target_site_id]\n",[19,113213,113214],{},"这样 reward 就很容易写：",[36,113216,113218],{"className":38,"code":113217,"language":40,"meta":41,"style":41},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[43,113219,113220,113235],{"__ignoreMap":41},[46,113221,113222,113225,113227,113230,113232],{"class":48,"line":49},[46,113223,113224],{"class":56},"dist ",[46,113226,79],{"class":52},[46,113228,113229],{"class":56}," np.linalg.norm(tip ",[46,113231,534],{"class":52},[46,113233,113234],{"class":56}," target)\n",[46,113236,113237,113239,113241,113243],{"class":48,"line":60},[46,113238,112633],{"class":56},[46,113240,79],{"class":52},[46,113242,54238],{"class":52},[46,113244,113245],{"class":56},"dist\n",[19,113247,113248,113249,113252],{},"距离越小，",[43,113250,113251],{},"-dist"," 越接近 0，奖励越高。",[479,113254,113255],{"id":113255},"两关节机械臂的状态",[19,113257,113258],{},"这个模型有两个 hinge joint：",[36,113260,113263],{"className":113261,"code":113262,"language":571,"meta":41},[569],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[43,113264,113262],{"__ignoreMap":41},[19,113266,113267],{},"再加上末端和目标位置：",[36,113269,113272],{"className":113270,"code":113271,"language":571,"meta":41},[569],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[43,113273,113271],{"__ignoreMap":41},[19,113275,113276],{},"总维度：",[36,113278,113281],{"className":113279,"code":113280,"language":571,"meta":41},[569],"2 + 2 + 3 + 3 = 10\n",[43,113282,113280],{"__ignoreMap":41},[479,113284,113286],{"id":113285},"为什么-gravity-是-0","为什么 gravity 是 0",[19,113288,113289],{},"本章把重力设为：",[36,113291,113293],{"className":1350,"code":113292,"language":1352,"meta":41,"style":41},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[43,113294,113295],{"__ignoreMap":41},[46,113296,113297,113299,113301,113303,113305,113307,113309,113311,113313],{"class":48,"line":49},[46,113298,821],{"class":56},[46,113300,71131],{"class":1361},[46,113302,103126],{"class":169},[46,113304,79],{"class":56},[46,113306,103131],{"class":173},[46,113308,103134],{"class":169},[46,113310,79],{"class":56},[46,113312,105660],{"class":173},[46,113314,1387],{"class":56},[19,113316,113317],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,113319,595],{"id":594},[36,113321,113323],{"className":38,"code":113322,"language":40,"meta":41,"style":41},"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",[43,113324,113325,113331,113341,113345,113349,113357,113362,113367,113371,113375,113380,113385,113389,113394,113399,113404,113408,113413,113418,113423,113428,113432,113436,113440,113444,113448,113453,113458,113462,113466,113470,113474,113478,113493,113502,113514,113537,113544,113548,113552,113562,113576,113590,113597,113601,113605,113619,113631,113643,113656,113671,113688,113692,113696,113708,113720,113728,113736,113740,113756,113761,113774,113787,113802,113806,113841,113873,113877,113881,113890,113894,113910,113920,113931,113947,113963,113979,113995,113999,114017,114037,114056,114060,114064,114076],{"__ignoreMap":41},[46,113326,113327,113329],{"class":48,"line":49},[46,113328,53],{"class":52},[46,113330,623],{"class":56},[46,113332,113333,113335,113337,113339],{"class":48,"line":60},[46,113334,53],{"class":52},[46,113336,33358],{"class":56},[46,113338,398],{"class":52},[46,113340,33363],{"class":56},[46,113342,113343],{"class":48,"line":200},[46,113344,616],{"emptyLinePlaceholder":615},[46,113346,113347],{"class":48,"line":211},[46,113348,616],{"emptyLinePlaceholder":615},[46,113350,113351,113353,113355],{"class":48,"line":222},[46,113352,644],{"class":180},[46,113354,647],{"class":52},[46,113356,650],{"class":173},[46,113358,113359],{"class":48,"line":636},[46,113360,113361],{"class":173},"\u003Cmujoco model=\"two_link_reacher\">\n",[46,113363,113364],{"class":48,"line":641},[46,113365,113366],{"class":173},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[46,113368,113369],{"class":48,"line":653},[46,113370,616],{"emptyLinePlaceholder":615},[46,113372,113373],{"class":48,"line":659},[46,113374,673],{"class":173},[46,113376,113377],{"class":48,"line":665},[46,113378,113379],{"class":173},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[46,113381,113382],{"class":48,"line":670},[46,113383,113384],{"class":173},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[46,113386,113387],{"class":48,"line":676},[46,113388,616],{"emptyLinePlaceholder":615},[46,113390,113391],{"class":48,"line":682},[46,113392,113393],{"class":173},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[46,113395,113396],{"class":48,"line":688},[46,113397,113398],{"class":173},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[46,113400,113401],{"class":48,"line":693},[46,113402,113403],{"class":173},"      \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",[46,113405,113406],{"class":48,"line":699},[46,113407,616],{"emptyLinePlaceholder":615},[46,113409,113410],{"class":48,"line":705},[46,113411,113412],{"class":173},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[46,113414,113415],{"class":48,"line":711},[46,113416,113417],{"class":173},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[46,113419,113420],{"class":48,"line":717},[46,113421,113422],{"class":173},"        \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",[46,113424,113425],{"class":48,"line":723},[46,113426,113427],{"class":173},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[46,113429,113430],{"class":48,"line":729},[46,113431,108323],{"class":173},[46,113433,113434],{"class":48,"line":735},[46,113435,714],{"class":173},[46,113437,113438],{"class":48,"line":740},[46,113439,720],{"class":173},[46,113441,113442],{"class":48,"line":745},[46,113443,616],{"emptyLinePlaceholder":615},[46,113445,113446],{"class":48,"line":763},[46,113447,108340],{"class":173},[46,113449,113450],{"class":48,"line":778},[46,113451,113452],{"class":173},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[46,113454,113455],{"class":48,"line":789},[46,113456,113457],{"class":173},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[46,113459,113460],{"class":48,"line":794},[46,113461,108350],{"class":173},[46,113463,113464],{"class":48,"line":806},[46,113465,726],{"class":173},[46,113467,113468],{"class":48,"line":829},[46,113469,732],{"class":173},[46,113471,113472],{"class":48,"line":840},[46,113473,616],{"emptyLinePlaceholder":615},[46,113475,113476],{"class":48,"line":846},[46,113477,616],{"emptyLinePlaceholder":615},[46,113479,113480,113482,113485,113488,113490],{"class":48,"line":852},[46,113481,748],{"class":52},[46,113483,113484],{"class":169}," site_position",[46,113486,113487],{"class":56},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[46,113489,3354],{"class":180},[46,113491,113492],{"class":56},") -> np.ndarray:\n",[46,113494,113495,113497,113499],{"class":48,"line":857},[46,113496,105290],{"class":56},[46,113498,79],{"class":52},[46,113500,113501],{"class":56}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[46,113503,113504,113506,113508,113510,113512],{"class":48,"line":875},[46,113505,5121],{"class":52},[46,113507,105339],{"class":56},[46,113509,821],{"class":52},[46,113511,887],{"class":180},[46,113513,760],{"class":56},[46,113515,113516,113518,113520,113522,113524,113527,113529,113531,113533,113535],{"class":48,"line":892},[46,113517,105322],{"class":52},[46,113519,105325],{"class":180},[46,113521,1152],{"class":56},[46,113523,2247],{"class":52},[46,113525,113526],{"class":173},"\"site not found: ",[46,113528,3082],{"class":180},[46,113530,1653],{"class":56},[46,113532,3131],{"class":180},[46,113534,2439],{"class":173},[46,113536,459],{"class":56},[46,113538,113539,113541],{"class":48,"line":898},[46,113540,6108],{"class":52},[46,113542,113543],{"class":56}," data.site_xpos[site_id].copy()\n",[46,113545,113546],{"class":48,"line":903},[46,113547,616],{"emptyLinePlaceholder":615},[46,113549,113550],{"class":48,"line":908},[46,113551,616],{"emptyLinePlaceholder":615},[46,113553,113554,113556,113559],{"class":48,"line":925},[46,113555,748],{"class":52},[46,113557,113558],{"class":169}," get_obs",[46,113560,113561],{"class":56},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[46,113563,113564,113567,113569,113572,113574],{"class":48,"line":1238},[46,113565,113566],{"class":56},"    tip ",[46,113568,79],{"class":52},[46,113570,113571],{"class":56}," site_position(model, data, ",[46,113573,113164],{"class":173},[46,113575,459],{"class":56},[46,113577,113578,113581,113583,113585,113588],{"class":48,"line":1251},[46,113579,113580],{"class":56},"    target ",[46,113582,79],{"class":52},[46,113584,113571],{"class":56},[46,113586,113587],{"class":173},"\"target\"",[46,113589,459],{"class":56},[46,113591,113592,113594],{"class":48,"line":1256},[46,113593,6108],{"class":52},[46,113595,113596],{"class":56}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[46,113598,113599],{"class":48,"line":1261},[46,113600,616],{"emptyLinePlaceholder":615},[46,113602,113603],{"class":48,"line":1274},[46,113604,616],{"emptyLinePlaceholder":615},[46,113606,113607,113609,113612,113615,113617],{"class":48,"line":10061},[46,113608,748],{"class":52},[46,113610,113611],{"class":169}," reward",[46,113613,113614],{"class":56},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[46,113616,2236],{"class":180},[46,113618,760],{"class":56},[46,113620,113621,113623,113625,113627,113629],{"class":48,"line":11720},[46,113622,113566],{"class":56},[46,113624,79],{"class":52},[46,113626,113571],{"class":56},[46,113628,113164],{"class":173},[46,113630,459],{"class":56},[46,113632,113633,113635,113637,113639,113641],{"class":48,"line":11745},[46,113634,113580],{"class":56},[46,113636,79],{"class":52},[46,113638,113571],{"class":56},[46,113640,113587],{"class":173},[46,113642,459],{"class":56},[46,113644,113645,113648,113650,113652,113654],{"class":48,"line":11768},[46,113646,113647],{"class":56},"    dist ",[46,113649,79],{"class":52},[46,113651,113229],{"class":56},[46,113653,534],{"class":52},[46,113655,113234],{"class":56},[46,113657,113658,113661,113663,113666,113668],{"class":48,"line":11792},[46,113659,113660],{"class":56},"    control_cost ",[46,113662,79],{"class":52},[46,113664,113665],{"class":180}," 0.01",[46,113667,8531],{"class":52},[46,113669,113670],{"class":56}," np.sum(np.square(data.ctrl))\n",[46,113672,113673,113675,113677,113679,113681,113683,113685],{"class":48,"line":11797},[46,113674,6108],{"class":52},[46,113676,111425],{"class":180},[46,113678,1152],{"class":56},[46,113680,534],{"class":52},[46,113682,113224],{"class":56},[46,113684,534],{"class":52},[46,113686,113687],{"class":56}," control_cost)\n",[46,113689,113690],{"class":48,"line":11802},[46,113691,616],{"emptyLinePlaceholder":615},[46,113693,113694],{"class":48,"line":11807},[46,113695,616],{"emptyLinePlaceholder":615},[46,113697,113698,113700,113702,113704,113706],{"class":48,"line":11816},[46,113699,748],{"class":52},[46,113701,751],{"class":169},[46,113703,754],{"class":56},[46,113705,757],{"class":180},[46,113707,760],{"class":56},[46,113709,113710,113712,113714,113716,113718],{"class":48,"line":11821},[46,113711,766],{"class":56},[46,113713,79],{"class":52},[46,113715,771],{"class":56},[46,113717,644],{"class":180},[46,113719,459],{"class":56},[46,113721,113722,113724,113726],{"class":48,"line":11827},[46,113723,781],{"class":56},[46,113725,79],{"class":52},[46,113727,786],{"class":56},[46,113729,113730,113732,113734],{"class":48,"line":11848},[46,113731,111781],{"class":56},[46,113733,79],{"class":52},[46,113735,106646],{"class":180},[46,113737,113738],{"class":48,"line":11854},[46,113739,616],{"emptyLinePlaceholder":615},[46,113741,113742,113744,113746,113748,113750,113752,113754],{"class":48,"line":11868},[46,113743,1140],{"class":52},[46,113745,33593],{"class":56},[46,113747,1146],{"class":52},[46,113749,1149],{"class":180},[46,113751,1152],{"class":56},[46,113753,67039],{"class":180},[46,113755,1158],{"class":56},[46,113757,113758],{"class":48,"line":11874},[46,113759,113760],{"class":56},"        mujoco.mj_forward(model, data)\n",[46,113762,113763,113766,113768,113770,113772],{"class":48,"line":11901},[46,113764,113765],{"class":56},"        tip ",[46,113767,79],{"class":52},[46,113769,113571],{"class":56},[46,113771,113164],{"class":173},[46,113773,459],{"class":56},[46,113775,113776,113779,113781,113783,113785],{"class":48,"line":11910},[46,113777,113778],{"class":56},"        target ",[46,113780,79],{"class":52},[46,113782,113571],{"class":56},[46,113784,113587],{"class":173},[46,113786,459],{"class":56},[46,113788,113789,113792,113794,113797,113799],{"class":48,"line":11916},[46,113790,113791],{"class":56},"        error ",[46,113793,79],{"class":52},[46,113795,113796],{"class":56}," target ",[46,113798,534],{"class":52},[46,113800,113801],{"class":56}," tip\n",[46,113803,113804],{"class":48,"line":11924},[46,113805,616],{"emptyLinePlaceholder":615},[46,113807,113808,113810,113812,113814,113816,113819,113821,113823,113826,113828,113831,113833,113835,113837,113839],{"class":48,"line":11929},[46,113809,108502],{"class":56},[46,113811,2379],{"class":180},[46,113813,6460],{"class":56},[46,113815,79],{"class":52},[46,113817,113818],{"class":56}," np.clip(",[46,113820,107145],{"class":180},[46,113822,8531],{"class":52},[46,113824,113825],{"class":56}," error[",[46,113827,2272],{"class":180},[46,113829,113830],{"class":56},"], ",[46,113832,534],{"class":52},[46,113834,104304],{"class":180},[46,113836,448],{"class":56},[46,113838,104304],{"class":180},[46,113840,459],{"class":56},[46,113842,113843,113845,113847,113849,113851,113853,113855,113857,113859,113861,113863,113865,113867,113869,113871],{"class":48,"line":18605},[46,113844,108502],{"class":56},[46,113846,2405],{"class":180},[46,113848,6460],{"class":56},[46,113850,79],{"class":52},[46,113852,113818],{"class":56},[46,113854,107145],{"class":180},[46,113856,8531],{"class":52},[46,113858,113825],{"class":56},[46,113860,2379],{"class":180},[46,113862,113830],{"class":56},[46,113864,534],{"class":52},[46,113866,104304],{"class":180},[46,113868,448],{"class":56},[46,113870,104304],{"class":180},[46,113872,459],{"class":56},[46,113874,113875],{"class":48,"line":18611},[46,113876,616],{"emptyLinePlaceholder":615},[46,113878,113879],{"class":48,"line":18634},[46,113880,414],{"class":56},[46,113882,113883,113885,113887],{"class":48,"line":18640},[46,113884,111925],{"class":56},[46,113886,11481],{"class":52},[46,113888,113889],{"class":56}," reward(model, data)\n",[46,113891,113892],{"class":48,"line":18663},[46,113893,616],{"emptyLinePlaceholder":615},[46,113895,113896,113898,113900,113902,113904,113906,113908],{"class":48,"line":18677},[46,113897,4525],{"class":52},[46,113899,33593],{"class":56},[46,113901,2515],{"class":52},[46,113903,7767],{"class":180},[46,113905,917],{"class":52},[46,113907,887],{"class":180},[46,113909,760],{"class":56},[46,113911,113912,113915,113917],{"class":48,"line":18697},[46,113913,113914],{"class":56},"            obs ",[46,113916,79],{"class":52},[46,113918,113919],{"class":56}," get_obs(model, data)\n",[46,113921,113922,113924,113926,113928],{"class":48,"line":18703},[46,113923,36622],{"class":180},[46,113925,1152],{"class":56},[46,113927,111959],{"class":173},[46,113929,113930],{"class":56},", step)\n",[46,113932,113933,113935,113937,113940,113943,113945],{"class":48,"line":18714},[46,113934,36622],{"class":180},[46,113936,1152],{"class":56},[46,113938,113939],{"class":173},"\"  tip:\"",[46,113941,113942],{"class":56},", np.round(tip, ",[46,113944,2266],{"class":180},[46,113946,32479],{"class":56},[46,113948,113949,113951,113953,113956,113959,113961],{"class":48,"line":18737},[46,113950,36622],{"class":180},[46,113952,1152],{"class":56},[46,113954,113955],{"class":173},"\"  target:\"",[46,113957,113958],{"class":56},", np.round(target, ",[46,113960,2266],{"class":180},[46,113962,32479],{"class":56},[46,113964,113965,113967,113969,113972,113975,113977],{"class":48,"line":18759},[46,113966,36622],{"class":180},[46,113968,1152],{"class":56},[46,113970,113971],{"class":173},"\"  ctrl:\"",[46,113973,113974],{"class":56},", np.round(data.ctrl.copy(), ",[46,113976,2266],{"class":180},[46,113978,32479],{"class":56},[46,113980,113981,113983,113985,113988,113991,113993],{"class":48,"line":18764},[46,113982,36622],{"class":180},[46,113984,1152],{"class":56},[46,113986,113987],{"class":173},"\"  obs_dim:\"",[46,113989,113990],{"class":56},", obs.shape[",[46,113992,2379],{"class":180},[46,113994,6673],{"class":56},[46,113996,113997],{"class":48,"line":18770},[46,113998,616],{"emptyLinePlaceholder":615},[46,114000,114001,114003,114005,114007,114009,114011,114013,114015],{"class":48,"line":18784},[46,114002,1227],{"class":180},[46,114004,1152],{"class":56},[46,114006,112004],{"class":173},[46,114008,448],{"class":56},[46,114010,33993],{"class":180},[46,114012,112011],{"class":56},[46,114014,2266],{"class":180},[46,114016,32479],{"class":56},[46,114018,114019,114021,114023,114026,114029,114031,114033,114035],{"class":48,"line":18797},[46,114020,1227],{"class":180},[46,114022,1152],{"class":56},[46,114024,114025],{"class":173},"\"final tip:\"",[46,114027,114028],{"class":56},", np.round(site_position(model, data, ",[46,114030,113164],{"class":173},[46,114032,111973],{"class":56},[46,114034,2266],{"class":180},[46,114036,32479],{"class":56},[46,114038,114039,114041,114043,114046,114048,114050,114052,114054],{"class":48,"line":18802},[46,114040,1227],{"class":180},[46,114042,1152],{"class":56},[46,114044,114045],{"class":173},"\"target:\"",[46,114047,114028],{"class":56},[46,114049,113587],{"class":173},[46,114051,111973],{"class":56},[46,114053,2266],{"class":180},[46,114055,32479],{"class":56},[46,114057,114058],{"class":48,"line":18816},[46,114059,616],{"emptyLinePlaceholder":615},[46,114061,114062],{"class":48,"line":18821},[46,114063,616],{"emptyLinePlaceholder":615},[46,114065,114066,114068,114070,114072,114074],{"class":48,"line":18827},[46,114067,911],{"class":52},[46,114069,914],{"class":180},[46,114071,917],{"class":52},[46,114073,920],{"class":173},[46,114075,760],{"class":56},[46,114077,114078],{"class":48,"line":18832},[46,114079,928],{"class":56},[19,114081,931],{},[36,114083,114085],{"className":160,"code":114084,"language":162,"meta":41,"style":41},"touch ch7_reacher.py\n",[43,114086,114087],{"__ignoreMap":41},[46,114088,114089,114091],{"class":48,"line":49},[46,114090,941],{"class":169},[46,114092,114093],{"class":173}," ch7_reacher.py\n",[19,114095,112072],{},[36,114097,114099],{"className":160,"code":114098,"language":162,"meta":41,"style":41},"python ch7_reacher.py\n",[43,114100,114101],{"__ignoreMap":41},[46,114102,114103,114105],{"class":48,"line":49},[46,114104,40],{"class":169},[46,114106,114093],{"class":173},[479,114108,1293],{"id":1293},[19,114110,114111],{},"读取 site 坐标：",[36,114113,114115],{"className":38,"code":114114,"language":40,"meta":41,"style":41},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[43,114116,114117],{"__ignoreMap":41},[46,114118,114119,114121,114123,114125,114127],{"class":48,"line":49},[46,114120,748],{"class":52},[46,114122,113484],{"class":169},[46,114124,113487],{"class":56},[46,114126,3354],{"class":180},[46,114128,113492],{"class":56},[19,114130,114131],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[19,114133,112088],{},[36,114135,114137],{"className":38,"code":114136,"language":40,"meta":41,"style":41},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[43,114138,114139],{"__ignoreMap":41},[46,114140,114141,114143],{"class":48,"line":49},[46,114142,19047],{"class":52},[46,114144,113596],{"class":56},[19,114146,114147],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[19,114149,111413],{},[36,114151,114153],{"className":38,"code":114152,"language":40,"meta":41,"style":41},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[43,114154,114155,114167,114180],{"__ignoreMap":41},[46,114156,114157,114159,114161,114163,114165],{"class":48,"line":49},[46,114158,113224],{"class":56},[46,114160,79],{"class":52},[46,114162,113229],{"class":56},[46,114164,534],{"class":52},[46,114166,113234],{"class":56},[46,114168,114169,114172,114174,114176,114178],{"class":48,"line":60},[46,114170,114171],{"class":56},"control_cost ",[46,114173,79],{"class":52},[46,114175,113665],{"class":180},[46,114177,8531],{"class":52},[46,114179,113670],{"class":56},[46,114181,114182,114184,114186,114188,114190,114192,114194],{"class":48,"line":200},[46,114183,19047],{"class":52},[46,114185,111425],{"class":180},[46,114187,1152],{"class":56},[46,114189,534],{"class":52},[46,114191,113224],{"class":56},[46,114193,534],{"class":52},[46,114195,113687],{"class":56},[19,114197,114198],{},"奖励由两部分组成：",[23,114200,114201,114206],{},[26,114202,114203,114205],{},[43,114204,113251],{},"：末端离目标越远，奖励越低。",[26,114207,114208,114211],{},[43,114209,114210],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[19,114213,114214],{},"简单控制器：",[36,114216,114218],{"className":38,"code":114217,"language":40,"meta":41,"style":41},"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",[43,114219,114220,114233,114265],{"__ignoreMap":41},[46,114221,114222,114225,114227,114229,114231],{"class":48,"line":49},[46,114223,114224],{"class":56},"error ",[46,114226,79],{"class":52},[46,114228,113796],{"class":56},[46,114230,534],{"class":52},[46,114232,113801],{"class":56},[46,114234,114235,114237,114239,114241,114243,114245,114247,114249,114251,114253,114255,114257,114259,114261,114263],{"class":48,"line":60},[46,114236,107756],{"class":56},[46,114238,2379],{"class":180},[46,114240,6460],{"class":56},[46,114242,79],{"class":52},[46,114244,113818],{"class":56},[46,114246,107145],{"class":180},[46,114248,8531],{"class":52},[46,114250,113825],{"class":56},[46,114252,2272],{"class":180},[46,114254,113830],{"class":56},[46,114256,534],{"class":52},[46,114258,104304],{"class":180},[46,114260,448],{"class":56},[46,114262,104304],{"class":180},[46,114264,459],{"class":56},[46,114266,114267,114269,114271,114273,114275,114277,114279,114281,114283,114285,114287,114289,114291,114293,114295],{"class":48,"line":200},[46,114268,107756],{"class":56},[46,114270,2405],{"class":180},[46,114272,6460],{"class":56},[46,114274,79],{"class":52},[46,114276,113818],{"class":56},[46,114278,107145],{"class":180},[46,114280,8531],{"class":52},[46,114282,113825],{"class":56},[46,114284,2379],{"class":180},[46,114286,113830],{"class":56},[46,114288,534],{"class":52},[46,114290,104304],{"class":180},[46,114292,448],{"class":56},[46,114294,104304],{"class":180},[46,114296,459],{"class":56},[19,114298,114299],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[479,114301,103613],{"id":103613},[36,114303,114304],{"className":38,"code":114114,"language":40,"meta":41,"style":41},[43,114305,114306],{"__ignoreMap":41},[46,114307,114308,114310,114312,114314,114316],{"class":48,"line":49},[46,114309,748],{"class":52},[46,114311,113484],{"class":169},[46,114313,113487],{"class":56},[46,114315,3354],{"class":180},[46,114317,113492],{"class":56},[19,114319,114320,114321,114323,114324,2006,114326,365],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[43,114322,1653],{}," 是 site 的名字，比如 ",[43,114325,113164],{},[43,114327,113587],{},[36,114329,114331],{"className":38,"code":114330,"language":40,"meta":41,"style":41},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[43,114332,114333],{"__ignoreMap":41},[46,114334,114335,114337,114339],{"class":48,"line":49},[46,114336,105523],{"class":56},[46,114338,79],{"class":52},[46,114340,113501],{"class":56},[19,114342,114343],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[36,114345,114347],{"className":38,"code":114346,"language":40,"meta":41,"style":41},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[43,114348,114349,114361],{"__ignoreMap":41},[46,114350,114351,114353,114355,114357,114359],{"class":48,"line":49},[46,114352,911],{"class":52},[46,114354,105339],{"class":56},[46,114356,821],{"class":52},[46,114358,887],{"class":180},[46,114360,760],{"class":56},[46,114362,114363,114365,114367,114369,114371,114373,114375,114377,114379,114381],{"class":48,"line":60},[46,114364,105784],{"class":52},[46,114366,105325],{"class":180},[46,114368,1152],{"class":56},[46,114370,2247],{"class":52},[46,114372,113526],{"class":173},[46,114374,3082],{"class":180},[46,114376,1653],{"class":56},[46,114378,3131],{"class":180},[46,114380,2439],{"class":173},[46,114382,459],{"class":56},[19,114384,114385,114386,114389,114390,114392],{},"如果 site 没找到，就主动报错。",[43,114387,114388],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[43,114391,1653],{}," 的值放进字符串里。",[36,114394,114396],{"className":38,"code":114395,"language":40,"meta":41,"style":41},"return data.site_xpos[site_id].copy()\n",[43,114397,114398],{"__ignoreMap":41},[46,114399,114400,114402],{"class":48,"line":49},[46,114401,19047],{"class":52},[46,114403,113543],{"class":56},[19,114405,114406,114407,114409,114410,114413],{},"返回这个 site 的世界坐标。",[43,114408,105569],{}," 里的每一行都是一个 site 的 ",[43,114411,114412],{},"(x, y, z)"," 坐标。",[36,114415,114417],{"className":38,"code":114416,"language":40,"meta":41,"style":41},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[43,114418,114419],{"__ignoreMap":41},[46,114420,114421,114423,114425],{"class":48,"line":49},[46,114422,748],{"class":52},[46,114424,113558],{"class":169},[46,114426,113561],{"class":56},[19,114428,114429],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[36,114431,114433],{"className":38,"code":114432,"language":40,"meta":41,"style":41},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[43,114434,114435,114447],{"__ignoreMap":41},[46,114436,114437,114439,114441,114443,114445],{"class":48,"line":49},[46,114438,113196],{"class":56},[46,114440,79],{"class":52},[46,114442,113571],{"class":56},[46,114444,113164],{"class":173},[46,114446,459],{"class":56},[46,114448,114449,114451,114453,114455,114457],{"class":48,"line":60},[46,114450,113206],{"class":56},[46,114452,79],{"class":52},[46,114454,113571],{"class":56},[46,114456,113587],{"class":173},[46,114458,459],{"class":56},[19,114460,114461],{},"分别读取末端点和目标点的世界坐标。",[36,114463,114464],{"className":38,"code":114136,"language":40,"meta":41,"style":41},[43,114465,114466],{"__ignoreMap":41},[46,114467,114468,114470],{"class":48,"line":49},[46,114469,19047],{"class":52},[46,114471,113596],{"class":56},[19,114473,114474],{},"把四部分拼成一个观测数组：",[36,114476,114479],{"className":114477,"code":114478,"language":571,"meta":41},[569],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[43,114480,114478],{"__ignoreMap":41},[36,114482,114484],{"className":38,"code":114483,"language":40,"meta":41,"style":41},"dist = np.linalg.norm(tip - target)\n",[43,114485,114486],{"__ignoreMap":41},[46,114487,114488,114490,114492,114494,114496],{"class":48,"line":49},[46,114489,113224],{"class":56},[46,114491,79],{"class":52},[46,114493,113229],{"class":56},[46,114495,534],{"class":52},[46,114497,113234],{"class":56},[19,114499,114500,114501,114504,114505,114508],{},"计算 tip 到 target 的距离。",[43,114502,114503],{},"tip - target"," 得到一个三维向量，",[43,114506,114507],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[19,114510,16635],{},[36,114512,114515],{"className":114513,"code":114514,"language":571,"meta":41},[569],"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",[43,114516,114514],{"__ignoreMap":41},[36,114518,114520],{"className":38,"code":114519,"language":40,"meta":41,"style":41},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[43,114521,114522],{"__ignoreMap":41},[46,114523,114524,114526,114528,114530,114532],{"class":48,"line":49},[46,114525,114171],{"class":56},[46,114527,79],{"class":52},[46,114529,113665],{"class":180},[46,114531,8531],{"class":52},[46,114533,113670],{"class":56},[19,114535,114536,114537,114540,114541,114544],{},"计算动作惩罚。",[43,114538,114539],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[43,114542,114543],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[36,114546,114548],{"className":38,"code":114547,"language":40,"meta":41,"style":41},"return float(-dist - control_cost)\n",[43,114549,114550],{"__ignoreMap":41},[46,114551,114552,114554,114556,114558,114560,114562,114564],{"class":48,"line":49},[46,114553,19047],{"class":52},[46,114555,111425],{"class":180},[46,114557,1152],{"class":56},[46,114559,534],{"class":52},[46,114561,113224],{"class":56},[46,114563,534],{"class":52},[46,114565,113687],{"class":56},[19,114567,114568],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[36,114570,114571],{"className":38,"code":112431,"language":40,"meta":41,"style":41},[43,114572,114573],{"__ignoreMap":41},[46,114574,114575,114577,114579],{"class":48,"line":49},[46,114576,112438],{"class":56},[46,114578,79],{"class":52},[46,114580,106646],{"class":180},[19,114582,114583],{},"累计奖励变量，记录整个运行过程的总分。",[36,114585,114587],{"className":38,"code":114586,"language":40,"meta":41,"style":41},"for step in range(500):\n",[43,114588,114589],{"__ignoreMap":41},[46,114590,114591,114593,114595,114597,114599,114601,114603],{"class":48,"line":49},[46,114592,1713],{"class":52},[46,114594,33593],{"class":56},[46,114596,1146],{"class":52},[46,114598,1149],{"class":180},[46,114600,1152],{"class":56},[46,114602,67039],{"class":180},[46,114604,1158],{"class":56},[19,114606,114607],{},"运行 500 个控制步。",[36,114609,114610],{"className":38,"code":106430,"language":40,"meta":41,"style":41},[43,114611,114612],{"__ignoreMap":41},[46,114613,114614],{"class":48,"line":49},[46,114615,106430],{"class":56},[19,114617,114618,114619,1700,114621,114623],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[43,114620,105121],{},[43,114622,105124],{}," 是当前状态下的坐标。",[36,114625,114627],{"className":38,"code":114626,"language":40,"meta":41,"style":41},"error = target - tip\n",[43,114628,114629],{"__ignoreMap":41},[46,114630,114631,114633,114635,114637,114639],{"class":48,"line":49},[46,114632,114224],{"class":56},[46,114634,79],{"class":52},[46,114636,113796],{"class":56},[46,114638,534],{"class":52},[46,114640,113801],{"class":56},[19,114642,114643],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[36,114645,114647],{"className":38,"code":114646,"language":40,"meta":41,"style":41},"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",[43,114648,114649,114681],{"__ignoreMap":41},[46,114650,114651,114653,114655,114657,114659,114661,114663,114665,114667,114669,114671,114673,114675,114677,114679],{"class":48,"line":49},[46,114652,107756],{"class":56},[46,114654,2379],{"class":180},[46,114656,6460],{"class":56},[46,114658,79],{"class":52},[46,114660,113818],{"class":56},[46,114662,107145],{"class":180},[46,114664,8531],{"class":52},[46,114666,113825],{"class":56},[46,114668,2272],{"class":180},[46,114670,113830],{"class":56},[46,114672,534],{"class":52},[46,114674,104304],{"class":180},[46,114676,448],{"class":56},[46,114678,104304],{"class":180},[46,114680,459],{"class":56},[46,114682,114683,114685,114687,114689,114691,114693,114695,114697,114699,114701,114703,114705,114707,114709,114711],{"class":48,"line":60},[46,114684,107756],{"class":56},[46,114686,2405],{"class":180},[46,114688,6460],{"class":56},[46,114690,79],{"class":52},[46,114692,113818],{"class":56},[46,114694,107145],{"class":180},[46,114696,8531],{"class":52},[46,114698,113825],{"class":56},[46,114700,2379],{"class":180},[46,114702,113830],{"class":56},[46,114704,534],{"class":52},[46,114706,104304],{"class":180},[46,114708,448],{"class":56},[46,114710,104304],{"class":180},[46,114712,459],{"class":56},[19,114714,114715,114716,114719],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[43,114717,114718],{},"error -> ctrl -> step"," 的流程。",[36,114721,114722],{"className":38,"code":464,"language":40,"meta":41,"style":41},[43,114723,114724],{"__ignoreMap":41},[46,114725,114726],{"class":48,"line":49},[46,114727,464],{"class":56},[19,114729,114730],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[36,114732,114734],{"className":38,"code":114733,"language":40,"meta":41,"style":41},"obs = get_obs(model, data)\n",[43,114735,114736],{"__ignoreMap":41},[46,114737,114738,114740,114742],{"class":48,"line":49},[46,114739,112482],{"class":56},[46,114741,79],{"class":52},[46,114743,113919],{"class":56},[19,114745,114746,114747,114750],{},"读取最新观测。后面打印 ",[43,114748,114749],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,114752,1811],{"id":1810},[19,114754,114755],{},"观测维度为:",[36,114757,114760],{"className":114758,"code":114759,"language":571,"meta":41},[569],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[43,114761,114759],{"__ignoreMap":41},[19,114763,114764],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[19,114766,114767],{},"程序每 100 步打印：",[36,114769,114772],{"className":114770,"code":114771,"language":571,"meta":41},[569],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[43,114773,114771],{"__ignoreMap":41},[19,114775,114776,114777,114779],{},"如果控制有效，你应该看到最终 ",[43,114778,105121],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,114781,1842],{"id":1841},[23,114783,114784,114787,114790,114796,114802,114809,114819],{},[26,114785,114786],{},"修改目标点位置。",[26,114788,114789],{},"重新运行，观察最终 tip 是否变化。",[26,114791,114792,114793,114795],{},"把 gravity 改成 ",[43,114794,104483],{},"，观察控制是否变差。",[26,114797,112809,114798,112813,114800,365],{},[43,114799,104063],{},[43,114801,2272],{},[26,114803,104312,114804,1938,114806,114808],{},[43,114805,112224],{},[43,114807,109192],{},"，观察机械臂是否更难移动。",[26,114810,104312,114811,84494,114813,1938,114815,114818],{},[43,114812,105124],{},[43,114814,1657],{},[43,114816,114817],{},"0.2 0 0.6","，观察 reward 和 final tip。",[26,114820,114821],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,114823,1946],{"id":1945},[479,114825,114827],{"id":114826},"site-not-found",[43,114828,114829],{},"site not found",[19,114831,114832,114833,1700,114836,365],{},"检查 XML 中是否有 ",[43,114834,114835],{},"site name=\"tip\"",[43,114837,114838],{},"site name=\"target\"",[479,114840,114841],{"id":114841},"机械臂完全不动",[19,114843,104418],{},[23,114845,114846,114851,114854,114859],{},[26,114847,114848,114850],{},[43,114849,104063],{}," 是否为 2",[26,114852,114853],{},"actuator 是否引用正确 joint",[26,114855,114856,114858],{},[43,114857,103010],{}," 是否被赋值",[26,114860,114861,114862],{},"是否执行了 ",[43,114863,102644],{},[479,114865,114866],{"id":114866},"控制效果不好",[19,114868,114869],{},"正常。本章重点不是控制器最优，而是任务结构:",[36,114871,114874],{"className":114872,"code":114873,"language":571,"meta":41},[569],"obs → action → mj_step → reward → next_obs\n",[43,114875,114873],{"__ignoreMap":41},[479,114877,114879],{"id":114878},"tip-坐标不变化","tip 坐标不变化",[19,114881,2016],{},[23,114883,114884,114889,114897,114906],{},[26,114885,114886,114887,365],{},"是否每步调用了 ",[43,114888,102644],{},[26,114890,114891,114892,1700,114894,365],{},"是否写入了 ",[43,114893,108011],{},[43,114895,114896],{},"data.ctrl[1]",[26,114898,114899,114900,2400,114903,365],{},"actuator 是否正确引用 ",[43,114901,114902],{},"joint1",[43,114904,114905],{},"joint2",[26,114907,114908],{},"控制输入是否太小。",[479,114910,114911],{"id":114911},"目标点不会动",[19,114913,114914],{},"本章的 target 是固定 site：",[36,114916,114918],{"className":1350,"code":114917,"language":1352,"meta":41,"style":41},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[43,114919,114920],{"__ignoreMap":41},[46,114921,114922,114924,114926,114928,114930,114932,114934,114936,114939],{"class":48,"line":49},[46,114923,821],{"class":56},[46,114925,105100],{"class":1361},[46,114927,1364],{"class":169},[46,114929,79],{"class":56},[46,114931,113587],{"class":173},[46,114933,1371],{"class":169},[46,114935,79],{"class":56},[46,114937,114938],{"class":173},"\"0.5 0 0.4\"",[46,114940,114941],{"class":56}," ...\u002F>\n",[19,114943,114944,114945,114947],{},"它直接挂在 ",[43,114946,103746],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[479,114949,114950],{"id":114950},"机械臂不像真实机械臂",[19,114952,114953],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,114955,2082],{"id":2081},[19,114957,114958],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[19,114960,114961],{},"核心公式：",[36,114963,114966],{"className":114964,"code":114965,"language":571,"meta":41},[569],"distance = ||tip - target||\nreward = -distance - action_cost\n",[43,114967,114965],{"__ignoreMap":41},[19,114969,114970],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[2098,114972,114973],{},"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":41,"searchDepth":60,"depth":60,"links":114975},[114976,114977,114978,114983,114987,114988,114989,114997],{"id":16,"depth":60,"text":17},{"id":153,"depth":60,"text":154},{"id":375,"depth":60,"text":376,"children":114979},[114980,114981,114982],{"id":113179,"depth":200,"text":113180},{"id":113255,"depth":200,"text":113255},{"id":113285,"depth":200,"text":113286},{"id":594,"depth":60,"text":595,"children":114984},[114985,114986],{"id":1293,"depth":200,"text":1293},{"id":103613,"depth":200,"text":103613},{"id":1810,"depth":60,"text":1811},{"id":1841,"depth":60,"text":1842},{"id":1945,"depth":60,"text":1946,"children":114990},[114991,114992,114993,114994,114995,114996],{"id":114826,"depth":200,"text":114829},{"id":114841,"depth":200,"text":114841},{"id":114866,"depth":200,"text":114866},{"id":114878,"depth":200,"text":114879},{"id":114911,"depth":200,"text":114911},{"id":114950,"depth":200,"text":114950},{"id":2081,"depth":60,"text":2082},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":112983,"description":41},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":115004,"title":115005,"body":115006,"description":41,"extension":2125,"meta":118468,"navigation":615,"path":118469,"seo":118470,"stem":118471,"__hash__":118472},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":115007,"toc":118439},[115008,115011,115013,115016,115019,115044,115047,115053,115056,115062,115064,115066,115090,115092,115110,115112,115155,115157,115184,115186,115189,115241,115244,115250,115259,115262,115300,115303,115342,115345,115353,115360,115363,115369,115371,115425,115432,115477,115480,115484,115500,115510,115512,116773,116775,116787,116789,116800,116802,116805,116826,116829,116832,116865,116871,116874,116907,116910,116913,116954,116959,116973,116976,116989,116994,117017,117019,117034,117044,117059,117066,117086,117101,117119,117122,117139,117147,117163,117169,117201,117214,117246,117256,117291,117305,117351,117365,117407,117418,117431,117437,117470,117473,117500,117510,117550,117560,117577,117584,117602,117605,117646,117659,117674,117677,117700,117703,117715,117718,117737,117742,117763,117766,117781,117784,117818,117830,117845,117848,117873,117876,117895,117898,117930,117933,117957,117963,117993,118000,118013,118016,118018,118020,118026,118029,118032,118044,118047,118049,118103,118105,118109,118115,118124,118127,118134,118136,118159,118162,118166,118168,118186,118192,118194,118227,118230,118236,118240,118243,118263,118268,118272,118279,118299,118304,118308,118311,118331,118334,118420,118424,118427,118433,118436],[10,115009,115005],{"id":115010},"_8gymnasium-风格强化学习接口基础",[14,115012,17],{"id":16},[19,115014,115015],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[19,115017,115018],{},"你将实现:",[36,115020,115022],{"className":38,"code":115021,"language":40,"meta":41,"style":41},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[43,115023,115024,115034],{"__ignoreMap":41},[46,115025,115026,115029,115031],{"class":48,"line":49},[46,115027,115028],{"class":56},"obs, info ",[46,115030,79],{"class":52},[46,115032,115033],{"class":56}," env.reset()\n",[46,115035,115036,115039,115041],{"class":48,"line":60},[46,115037,115038],{"class":56},"obs, reward, terminated, truncated, info ",[46,115040,79],{"class":52},[46,115042,115043],{"class":56}," env.step(action)\n",[19,115045,115046],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[19,115048,115049,115050,115052],{},"前面章节的代码都是“脚本式”的：在 ",[43,115051,104200],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[19,115054,115055],{},"可以先记住 Gymnasium 环境的核心交互：",[36,115057,115060],{"className":115058,"code":115059,"language":571,"meta":41},[569],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[43,115061,115059],{"__ignoreMap":41},[14,115063,154],{"id":153},[19,115065,157],{},[36,115067,115068],{"className":160,"code":106276,"language":162,"meta":41,"style":41},[43,115069,115070],{"__ignoreMap":41},[46,115071,115072,115074,115076,115078,115080,115082,115084,115086,115088],{"class":48,"line":49},[46,115073,170],{"class":169},[46,115075,174],{"class":173},[46,115077,177],{"class":173},[46,115079,181],{"class":180},[46,115081,106291],{"class":173},[46,115083,102754],{"class":173},[46,115085,104399],{"class":173},[46,115087,195],{"class":173},[46,115089,106300],{"class":173},[19,115091,240],{},[36,115093,115095],{"className":160,"code":115094,"language":162,"meta":41,"style":41},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[43,115096,115097],{"__ignoreMap":41},[46,115098,115099,115101,115103,115105,115107],{"class":48,"line":49},[46,115100,250],{"class":169},[46,115102,177],{"class":173},[46,115104,255],{"class":173},[46,115106,258],{"class":173},[46,115108,115109],{"class":173}," gymnasium\n",[19,115111,264],{},[36,115113,115115],{"className":160,"code":115114,"language":162,"meta":41,"style":41},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[43,115116,115117,115134,115143],{"__ignoreMap":41},[46,115118,115119,115121,115123,115125,115128,115130,115132],{"class":48,"line":49},[46,115120,274],{"class":169},[46,115122,277],{"class":173},[46,115124,280],{"class":180},[46,115126,115127],{"class":173}," mujoco-gym-api",[46,115129,286],{"class":173},[46,115131,289],{"class":180},[46,115133,292],{"class":180},[46,115135,115136,115138,115140],{"class":48,"line":60},[46,115137,274],{"class":169},[46,115139,299],{"class":173},[46,115141,115142],{"class":173}," mujoco-gym-api\n",[46,115144,115145,115147,115149,115151,115153],{"class":48,"line":200},[46,115146,250],{"class":169},[46,115148,177],{"class":173},[46,115150,255],{"class":173},[46,115152,258],{"class":173},[46,115154,115109],{"class":173},[19,115156,102943],{},[23,115158,115159,115169,115172,115178],{},[26,115160,115161,115162,115165,115166,365],{},"本章使用 ",[43,115163,115164],{},"gymnasium","，不是旧版 ",[43,115167,115168],{},"gym",[26,115170,115171],{},"Gymnasium API 与旧 Gym API 有差异。",[26,115173,115174,115175,365],{},"旧 Gym 常见返回值是 4 个: ",[43,115176,115177],{},"obs, reward, done, info",[26,115179,115180,115181,365],{},"Gymnasium 返回值是 5 个: ",[43,115182,115183],{},"obs, reward, terminated, truncated, info",[14,115185,376],{"id":375},[19,115187,115188],{},"强化学习环境接口包含:",[97,115190,115191,115200],{},[100,115192,115193],{},[103,115194,115195,115198],{},[106,115196,115197],{"align":108},"方法",[106,115199,104588],{"align":108},[120,115201,115202,115212,115222,115232],{},[103,115203,115204,115209],{},[125,115205,115206],{"align":108},[43,115207,115208],{},"reset()",[125,115210,115211],{"align":108},"重置环境",[103,115213,115214,115219],{},[125,115215,115216],{"align":108},[43,115217,115218],{},"step(action)",[125,115220,115221],{"align":108},"执行动作",[103,115223,115224,115229],{},[125,115225,115226],{"align":108},[43,115227,115228],{},"observation_space",[125,115230,115231],{"align":108},"观测空间",[103,115233,115234,115239],{},[125,115235,115236],{"align":108},[43,115237,115238],{},"action_space",[125,115240,25656],{"align":108},[19,115242,115243],{},"一个最小环境需要完成:",[36,115245,115248],{"className":115246,"code":115247,"language":571,"meta":41},[569],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[43,115249,115247],{"__ignoreMap":41},[479,115251,115253,1700,115256,106525],{"id":115252},"terminated-和-truncated-的区别",[43,115254,115255],{},"terminated",[43,115257,115258],{},"truncated",[19,115260,115261],{},"Gymnasium 把“结束”拆成两个概念：",[97,115263,115264,115274],{},[100,115265,115266],{},[103,115267,115268,115270,115272],{},[106,115269,106461],{"align":108},[106,115271,102659],{"align":108},[106,115273,23188],{"align":108},[120,115275,115276,115288],{},[103,115277,115278,115282,115285],{},[125,115279,115280],{"align":108},[43,115281,115255],{},[125,115283,115284],{"align":108},"任务自然结束",[125,115286,115287],{"align":108},"机械臂到达目标、机器人摔倒",[103,115289,115290,115294,115297],{},[125,115291,115292],{"align":108},[43,115293,115258],{},[125,115295,115296],{"align":108},"因外部限制截断",[125,115298,115299],{"align":108},"达到最大步数、时间限制",[19,115301,115302],{},"本章中：",[36,115304,115306],{"className":38,"code":115305,"language":40,"meta":41,"style":41},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[43,115307,115308,115323],{"__ignoreMap":41},[46,115309,115310,115313,115315,115318,115320],{"class":48,"line":49},[46,115311,115312],{"class":56},"terminated ",[46,115314,79],{"class":52},[46,115316,115317],{"class":56}," dist ",[46,115319,821],{"class":52},[46,115321,115322],{"class":180}," 0.05\n",[46,115324,115325,115328,115330,115332,115335,115337,115339],{"class":48,"line":60},[46,115326,115327],{"class":56},"truncated ",[46,115329,79],{"class":52},[46,115331,40845],{"class":180},[46,115333,115334],{"class":56},".steps ",[46,115336,3750],{"class":52},[46,115338,40845],{"class":180},[46,115340,115341],{"class":56},".max_steps\n",[19,115343,115344],{},"也就是：",[23,115346,115347,115350],{},[26,115348,115349],{},"末端距离目标小于 0.05，任务成功结束。",[26,115351,115352],{},"步数超过上限，episode 被截断。",[479,115354,115356,1700,115358],{"id":115355},"observation_space-和-action_space",[43,115357,115228],{},[43,115359,115238],{},[19,115361,115362],{},"这两个对象告诉算法：",[36,115364,115367],{"className":115365,"code":115366,"language":571,"meta":41},[569],"观测长什么样\n动作允许多大\n",[43,115368,115366],{"__ignoreMap":41},[19,115370,16635],{},[36,115372,115374],{"className":38,"code":115373,"language":40,"meta":41,"style":41},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[43,115375,115376],{"__ignoreMap":41},[46,115377,115378,115380,115383,115385,115388,115391,115394,115396,115398,115401,115403,115405,115407,115409,115411,115413,115415,115418,115420,115422],{"class":48,"line":49},[46,115379,32803],{"class":180},[46,115381,115382],{"class":56},".action_space ",[46,115384,79],{"class":52},[46,115386,115387],{"class":56}," spaces.Box(",[46,115389,115390],{"class":439},"low",[46,115392,115393],{"class":52},"=-",[46,115395,104304],{"class":180},[46,115397,448],{"class":56},[46,115399,115400],{"class":439},"high",[46,115402,79],{"class":52},[46,115404,104304],{"class":180},[46,115406,448],{"class":56},[46,115408,97924],{"class":439},[46,115410,79],{"class":52},[46,115412,1152],{"class":56},[46,115414,2272],{"class":180},[46,115416,115417],{"class":56},",), ",[46,115419,95463],{"class":439},[46,115421,79],{"class":52},[46,115423,115424],{"class":56},"np.float32)\n",[19,115426,115427,115428,115431],{},"表示动作是 2 维数组，每个值都在 ",[43,115429,115430],{},"[-1, 1]"," 范围内。",[36,115433,115435],{"className":38,"code":115434,"language":40,"meta":41,"style":41},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[43,115436,115437],{"__ignoreMap":41},[46,115438,115439,115441,115444,115446,115448,115450,115452,115455,115457,115459,115461,115463,115465,115467,115469,115471,115473,115475],{"class":48,"line":49},[46,115440,32803],{"class":180},[46,115442,115443],{"class":56},".observation_space ",[46,115445,79],{"class":52},[46,115447,115387],{"class":56},[46,115449,115390],{"class":439},[46,115451,115393],{"class":52},[46,115453,115454],{"class":56},"np.inf, ",[46,115456,115400],{"class":439},[46,115458,79],{"class":52},[46,115460,115454],{"class":56},[46,115462,97924],{"class":439},[46,115464,79],{"class":52},[46,115466,1152],{"class":56},[46,115468,2633],{"class":180},[46,115470,115417],{"class":56},[46,115472,95463],{"class":439},[46,115474,79],{"class":52},[46,115476,115424],{"class":56},[19,115478,115479],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[479,115481,115483],{"id":115482},"frame_skip-是什么","frame_skip 是什么",[36,115485,115487],{"className":38,"code":115486,"language":40,"meta":41,"style":41},"self.frame_skip = 5\n",[43,115488,115489],{"__ignoreMap":41},[46,115490,115491,115493,115496,115498],{"class":48,"line":49},[46,115492,32803],{"class":180},[46,115494,115495],{"class":56},".frame_skip ",[46,115497,79],{"class":52},[46,115499,56392],{"class":180},[19,115501,115502,115503,115506,115507,115509],{},"表示外部调用一次 ",[43,115504,115505],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[43,115508,504],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,115511,595],{"id":594},[36,115513,115515],{"className":38,"code":115514,"language":40,"meta":41,"style":41},"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",[43,115516,115517,115529,115535,115545,115556,115560,115564,115572,115577,115581,115585,115589,115593,115597,115601,115605,115610,115614,115618,115622,115627,115631,115635,115639,115643,115647,115651,115655,115659,115663,115667,115671,115675,115679,115697,115712,115716,115729,115739,115754,115771,115775,115796,115815,115840,115854,115858,115868,115880,115890,115894,115936,115974,115978,115988,116004,116019,116038,116045,116049,116062,116077,116092,116105,116124,116140,116144,116185,116200,116215,116219,116258,116269,116282,116286,116296,116305,116309,116319,116334,116352,116356,116367,116384,116397,116401,116411,116415,116426,116437,116441,116455,116469,116485,116489,116502,116519,116534,116541,116545,116549,116561,116571,116589,116601,116613,116617,116625,116641,116650,116659,116667,116709,116722,116727,116731,116749,116753,116757,116769],{"__ignoreMap":41},[46,115518,115519,115521,115524,115526],{"class":48,"line":49},[46,115520,53],{"class":52},[46,115522,115523],{"class":56}," gymnasium ",[46,115525,398],{"class":52},[46,115527,115528],{"class":56}," gym\n",[46,115530,115531,115533],{"class":48,"line":60},[46,115532,53],{"class":52},[46,115534,623],{"class":56},[46,115536,115537,115539,115541,115543],{"class":48,"line":200},[46,115538,53],{"class":52},[46,115540,33358],{"class":56},[46,115542,398],{"class":52},[46,115544,33363],{"class":56},[46,115546,115547,115549,115551,115553],{"class":48,"line":211},[46,115548,957],{"class":52},[46,115550,115523],{"class":56},[46,115552,53],{"class":52},[46,115554,115555],{"class":56}," spaces\n",[46,115557,115558],{"class":48,"line":222},[46,115559,616],{"emptyLinePlaceholder":615},[46,115561,115562],{"class":48,"line":636},[46,115563,616],{"emptyLinePlaceholder":615},[46,115565,115566,115568,115570],{"class":48,"line":641},[46,115567,644],{"class":180},[46,115569,647],{"class":52},[46,115571,650],{"class":173},[46,115573,115574],{"class":48,"line":653},[46,115575,115576],{"class":173},"\u003Cmujoco model=\"gym_reacher\">\n",[46,115578,115579],{"class":48,"line":659},[46,115580,113366],{"class":173},[46,115582,115583],{"class":48,"line":665},[46,115584,616],{"emptyLinePlaceholder":615},[46,115586,115587],{"class":48,"line":670},[46,115588,673],{"class":173},[46,115590,115591],{"class":48,"line":676},[46,115592,113384],{"class":173},[46,115594,115595],{"class":48,"line":682},[46,115596,616],{"emptyLinePlaceholder":615},[46,115598,115599],{"class":48,"line":688},[46,115600,113393],{"class":173},[46,115602,115603],{"class":48,"line":693},[46,115604,113398],{"class":173},[46,115606,115607],{"class":48,"line":699},[46,115608,115609],{"class":173},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[46,115611,115612],{"class":48,"line":705},[46,115613,616],{"emptyLinePlaceholder":615},[46,115615,115616],{"class":48,"line":711},[46,115617,113412],{"class":173},[46,115619,115620],{"class":48,"line":717},[46,115621,113417],{"class":173},[46,115623,115624],{"class":48,"line":723},[46,115625,115626],{"class":173},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[46,115628,115629],{"class":48,"line":729},[46,115630,113427],{"class":173},[46,115632,115633],{"class":48,"line":735},[46,115634,108323],{"class":173},[46,115636,115637],{"class":48,"line":740},[46,115638,714],{"class":173},[46,115640,115641],{"class":48,"line":745},[46,115642,720],{"class":173},[46,115644,115645],{"class":48,"line":763},[46,115646,616],{"emptyLinePlaceholder":615},[46,115648,115649],{"class":48,"line":778},[46,115650,108340],{"class":173},[46,115652,115653],{"class":48,"line":789},[46,115654,113452],{"class":173},[46,115656,115657],{"class":48,"line":794},[46,115658,113457],{"class":173},[46,115660,115661],{"class":48,"line":806},[46,115662,108350],{"class":173},[46,115664,115665],{"class":48,"line":829},[46,115666,726],{"class":173},[46,115668,115669],{"class":48,"line":840},[46,115670,732],{"class":173},[46,115672,115673],{"class":48,"line":846},[46,115674,616],{"emptyLinePlaceholder":615},[46,115676,115677],{"class":48,"line":852},[46,115678,616],{"emptyLinePlaceholder":615},[46,115680,115681,115683,115686,115688,115690,115692,115695],{"class":48,"line":857},[46,115682,16696],{"class":52},[46,115684,115685],{"class":169}," ReacherEnv",[46,115687,1152],{"class":56},[46,115689,115168],{"class":169},[46,115691,2744],{"class":56},[46,115693,115694],{"class":169},"Env",[46,115696,1158],{"class":56},[46,115698,115699,115702,115704,115706,115709],{"class":48,"line":875},[46,115700,115701],{"class":56},"    metadata ",[46,115703,79],{"class":52},[46,115705,6465],{"class":56},[46,115707,115708],{"class":173},"\"render_modes\"",[46,115710,115711],{"class":56},": []}\n",[46,115713,115714],{"class":48,"line":892},[46,115715,616],{"emptyLinePlaceholder":615},[46,115717,115718,115720,115722,115725,115727],{"class":48,"line":898},[46,115719,32781],{"class":52},[46,115721,32784],{"class":180},[46,115723,115724],{"class":56},"(self) -> ",[46,115726,757],{"class":180},[46,115728,760],{"class":56},[46,115730,115731,115733,115735,115737],{"class":48,"line":903},[46,115732,32797],{"class":180},[46,115734,19262],{"class":56},[46,115736,32809],{"class":180},[46,115738,4006],{"class":56},[46,115740,115741,115743,115746,115748,115750,115752],{"class":48,"line":908},[46,115742,32825],{"class":180},[46,115744,115745],{"class":56},".model ",[46,115747,79],{"class":52},[46,115749,771],{"class":56},[46,115751,644],{"class":180},[46,115753,459],{"class":56},[46,115755,115756,115758,115761,115763,115766,115768],{"class":48,"line":925},[46,115757,32825],{"class":180},[46,115759,115760],{"class":56},".data ",[46,115762,79],{"class":52},[46,115764,115765],{"class":56}," mujoco.MjData(",[46,115767,32803],{"class":180},[46,115769,115770],{"class":56},".model)\n",[46,115772,115773],{"class":48,"line":1238},[46,115774,616],{"emptyLinePlaceholder":615},[46,115776,115777,115779,115782,115784,115787,115789,115792,115794],{"class":48,"line":1251},[46,115778,32825],{"class":180},[46,115780,115781],{"class":56},".tip_site_id ",[46,115783,79],{"class":52},[46,115785,115786],{"class":56}," mujoco.mj_name2id(",[46,115788,32803],{"class":180},[46,115790,115791],{"class":56},".model, mujoco.mjtObj.mjOBJ_SITE, ",[46,115793,113164],{"class":173},[46,115795,459],{"class":56},[46,115797,115798,115800,115803,115805,115807,115809,115811,115813],{"class":48,"line":1256},[46,115799,32825],{"class":180},[46,115801,115802],{"class":56},".target_site_id ",[46,115804,79],{"class":52},[46,115806,115786],{"class":56},[46,115808,32803],{"class":180},[46,115810,115791],{"class":56},[46,115812,113587],{"class":173},[46,115814,459],{"class":56},[46,115816,115817,115819,115821,115823,115825,115827,115830,115832,115834,115836,115838],{"class":48,"line":1261},[46,115818,4525],{"class":52},[46,115820,40845],{"class":180},[46,115822,115781],{"class":56},[46,115824,821],{"class":52},[46,115826,887],{"class":180},[46,115828,115829],{"class":52}," or",[46,115831,40845],{"class":180},[46,115833,115802],{"class":56},[46,115835,821],{"class":52},[46,115837,887],{"class":180},[46,115839,760],{"class":56},[46,115841,115842,115845,115847,115849,115852],{"class":48,"line":1274},[46,115843,115844],{"class":52},"            raise",[46,115846,105325],{"class":180},[46,115848,1152],{"class":56},[46,115850,115851],{"class":173},"\"required sites not found\"",[46,115853,459],{"class":56},[46,115855,115856],{"class":48,"line":10061},[46,115857,616],{"emptyLinePlaceholder":615},[46,115859,115860,115862,115864,115866],{"class":48,"line":11720},[46,115861,32825],{"class":180},[46,115863,115495],{"class":56},[46,115865,79],{"class":52},[46,115867,56392],{"class":180},[46,115869,115870,115872,115875,115877],{"class":48,"line":11745},[46,115871,32825],{"class":180},[46,115873,115874],{"class":56},".max_steps ",[46,115876,79],{"class":52},[46,115878,115879],{"class":180}," 200\n",[46,115881,115882,115884,115886,115888],{"class":48,"line":11768},[46,115883,32825],{"class":180},[46,115885,115334],{"class":56},[46,115887,79],{"class":52},[46,115889,49301],{"class":180},[46,115891,115892],{"class":48,"line":11792},[46,115893,616],{"emptyLinePlaceholder":615},[46,115895,115896,115898,115900,115902,115904,115906,115908,115910,115912,115914,115916,115918,115920,115922,115924,115926,115928,115930,115932,115934],{"class":48,"line":11797},[46,115897,32825],{"class":180},[46,115899,115382],{"class":56},[46,115901,79],{"class":52},[46,115903,115387],{"class":56},[46,115905,115390],{"class":439},[46,115907,115393],{"class":52},[46,115909,104304],{"class":180},[46,115911,448],{"class":56},[46,115913,115400],{"class":439},[46,115915,79],{"class":52},[46,115917,104304],{"class":180},[46,115919,448],{"class":56},[46,115921,97924],{"class":439},[46,115923,79],{"class":52},[46,115925,1152],{"class":56},[46,115927,2272],{"class":180},[46,115929,115417],{"class":56},[46,115931,95463],{"class":439},[46,115933,79],{"class":52},[46,115935,115424],{"class":56},[46,115937,115938,115940,115942,115944,115946,115948,115950,115952,115954,115956,115958,115960,115962,115964,115966,115968,115970,115972],{"class":48,"line":11802},[46,115939,32825],{"class":180},[46,115941,115443],{"class":56},[46,115943,79],{"class":52},[46,115945,115387],{"class":56},[46,115947,115390],{"class":439},[46,115949,115393],{"class":52},[46,115951,115454],{"class":56},[46,115953,115400],{"class":439},[46,115955,79],{"class":52},[46,115957,115454],{"class":56},[46,115959,97924],{"class":439},[46,115961,79],{"class":52},[46,115963,1152],{"class":56},[46,115965,2633],{"class":180},[46,115967,115417],{"class":56},[46,115969,95463],{"class":439},[46,115971,79],{"class":52},[46,115973,115424],{"class":56},[46,115975,115976],{"class":48,"line":11807},[46,115977,616],{"emptyLinePlaceholder":615},[46,115979,115980,115982,115985],{"class":48,"line":11816},[46,115981,32781],{"class":52},[46,115983,115984],{"class":169}," _get_obs",[46,115986,115987],{"class":56},"(self) -> np.ndarray:\n",[46,115989,115990,115992,115994,115996,115999,116001],{"class":48,"line":11821},[46,115991,113765],{"class":56},[46,115993,79],{"class":52},[46,115995,40845],{"class":180},[46,115997,115998],{"class":56},".data.site_xpos[",[46,116000,32803],{"class":180},[46,116002,116003],{"class":56},".tip_site_id].copy()\n",[46,116005,116006,116008,116010,116012,116014,116016],{"class":48,"line":11827},[46,116007,113778],{"class":56},[46,116009,79],{"class":52},[46,116011,40845],{"class":180},[46,116013,115998],{"class":56},[46,116015,32803],{"class":180},[46,116017,116018],{"class":56},".target_site_id].copy()\n",[46,116020,116021,116023,116025,116028,116030,116033,116035],{"class":48,"line":11848},[46,116022,111810],{"class":56},[46,116024,79],{"class":52},[46,116026,116027],{"class":56}," np.concatenate([",[46,116029,32803],{"class":180},[46,116031,116032],{"class":56},".data.qpos.copy(), ",[46,116034,32803],{"class":180},[46,116036,116037],{"class":56},".data.qvel.copy(), tip, target])\n",[46,116039,116040,116042],{"class":48,"line":11854},[46,116041,16754],{"class":52},[46,116043,116044],{"class":56}," obs.astype(np.float32)\n",[46,116046,116047],{"class":48,"line":11868},[46,116048,616],{"emptyLinePlaceholder":615},[46,116050,116051,116053,116056,116058,116060],{"class":48,"line":11874},[46,116052,32781],{"class":52},[46,116054,116055],{"class":169}," _get_reward",[46,116057,115724],{"class":56},[46,116059,2236],{"class":180},[46,116061,760],{"class":56},[46,116063,116064,116066,116068,116070,116072,116074],{"class":48,"line":11901},[46,116065,113765],{"class":56},[46,116067,79],{"class":52},[46,116069,40845],{"class":180},[46,116071,115998],{"class":56},[46,116073,32803],{"class":180},[46,116075,116076],{"class":56},".tip_site_id]\n",[46,116078,116079,116081,116083,116085,116087,116089],{"class":48,"line":11910},[46,116080,113778],{"class":56},[46,116082,79],{"class":52},[46,116084,40845],{"class":180},[46,116086,115998],{"class":56},[46,116088,32803],{"class":180},[46,116090,116091],{"class":56},".target_site_id]\n",[46,116093,116094,116097,116099,116101,116103],{"class":48,"line":11916},[46,116095,116096],{"class":56},"        dist ",[46,116098,79],{"class":52},[46,116100,113229],{"class":56},[46,116102,534],{"class":52},[46,116104,113234],{"class":56},[46,116106,116107,116110,116112,116114,116116,116119,116121],{"class":48,"line":11924},[46,116108,116109],{"class":56},"        control_cost ",[46,116111,79],{"class":52},[46,116113,113665],{"class":180},[46,116115,8531],{"class":52},[46,116117,116118],{"class":56}," np.sum(np.square(",[46,116120,32803],{"class":180},[46,116122,116123],{"class":56},".data.ctrl))\n",[46,116125,116126,116128,116130,116132,116134,116136,116138],{"class":48,"line":11929},[46,116127,16754],{"class":52},[46,116129,111425],{"class":180},[46,116131,1152],{"class":56},[46,116133,534],{"class":52},[46,116135,113224],{"class":56},[46,116137,534],{"class":52},[46,116139,113687],{"class":56},[46,116141,116142],{"class":48,"line":18605},[46,116143,616],{"emptyLinePlaceholder":615},[46,116145,116146,116148,116151,116154,116156,116159,116161,116163,116165,116167,116169,116172,116175,116177,116179,116181,116183],{"class":48,"line":18611},[46,116147,32781],{"class":52},[46,116149,116150],{"class":169}," reset",[46,116152,116153],{"class":56},"(self, ",[46,116155,2642],{"class":52},[46,116157,116158],{"class":56},", seed: ",[46,116160,2201],{"class":180},[46,116162,27102],{"class":52},[46,116164,40905],{"class":180},[46,116166,647],{"class":52},[46,116168,40905],{"class":180},[46,116170,116171],{"class":56},", options: ",[46,116173,116174],{"class":180},"dict",[46,116176,27102],{"class":52},[46,116178,40905],{"class":180},[46,116180,647],{"class":52},[46,116182,40905],{"class":180},[46,116184,1158],{"class":56},[46,116186,116187,116189,116192,116195,116197],{"class":48,"line":18634},[46,116188,32797],{"class":180},[46,116190,116191],{"class":56},"().reset(",[46,116193,116194],{"class":439},"seed",[46,116196,79],{"class":52},[46,116198,116199],{"class":56},"seed)\n",[46,116201,116202,116205,116207,116210,116212],{"class":48,"line":18640},[46,116203,116204],{"class":56},"        mujoco.mj_resetData(",[46,116206,32803],{"class":180},[46,116208,116209],{"class":56},".model, ",[46,116211,32803],{"class":180},[46,116213,116214],{"class":56},".data)\n",[46,116216,116217],{"class":48,"line":18663},[46,116218,616],{"emptyLinePlaceholder":615},[46,116220,116221,116223,116226,116228,116230,116233,116235,116237,116239,116241,116243,116245,116247,116249,116251,116253,116255],{"class":48,"line":18677},[46,116222,32825],{"class":180},[46,116224,116225],{"class":56},".data.qpos[:] ",[46,116227,79],{"class":52},[46,116229,40845],{"class":180},[46,116231,116232],{"class":56},".np_random.uniform(",[46,116234,115390],{"class":439},[46,116236,115393],{"class":52},[46,116238,88173],{"class":180},[46,116240,448],{"class":56},[46,116242,115400],{"class":439},[46,116244,79],{"class":52},[46,116246,88173],{"class":180},[46,116248,448],{"class":56},[46,116250,33473],{"class":439},[46,116252,79],{"class":52},[46,116254,32803],{"class":180},[46,116256,116257],{"class":56},".model.nq)\n",[46,116259,116260,116262,116265,116267],{"class":48,"line":18697},[46,116261,32825],{"class":180},[46,116263,116264],{"class":56},".data.qvel[:] ",[46,116266,79],{"class":52},[46,116268,106646],{"class":180},[46,116270,116271,116274,116276,116278,116280],{"class":48,"line":18703},[46,116272,116273],{"class":56},"        mujoco.mj_forward(",[46,116275,32803],{"class":180},[46,116277,116209],{"class":56},[46,116279,32803],{"class":180},[46,116281,116214],{"class":56},[46,116283,116284],{"class":48,"line":18714},[46,116285,616],{"emptyLinePlaceholder":615},[46,116287,116288,116290,116292,116294],{"class":48,"line":18737},[46,116289,32825],{"class":180},[46,116291,115334],{"class":56},[46,116293,79],{"class":52},[46,116295,49301],{"class":180},[46,116297,116298,116300,116302],{"class":48,"line":18759},[46,116299,16754],{"class":52},[46,116301,40845],{"class":180},[46,116303,116304],{"class":56},"._get_obs(), {}\n",[46,116306,116307],{"class":48,"line":18764},[46,116308,616],{"emptyLinePlaceholder":615},[46,116310,116311,116313,116316],{"class":48,"line":18770},[46,116312,32781],{"class":52},[46,116314,116315],{"class":169}," step",[46,116317,116318],{"class":56},"(self, action):\n",[46,116320,116321,116323,116325,116328,116330,116332],{"class":48,"line":18784},[46,116322,111850],{"class":56},[46,116324,79],{"class":52},[46,116326,116327],{"class":56}," np.asarray(action, ",[46,116329,95463],{"class":439},[46,116331,79],{"class":52},[46,116333,115424],{"class":56},[46,116335,116336,116338,116340,116342,116344,116347,116349],{"class":48,"line":18797},[46,116337,111850],{"class":56},[46,116339,79],{"class":52},[46,116341,109332],{"class":56},[46,116343,32803],{"class":180},[46,116345,116346],{"class":56},".action_space.low, ",[46,116348,32803],{"class":180},[46,116350,116351],{"class":56},".action_space.high)\n",[46,116353,116354],{"class":48,"line":18802},[46,116355,616],{"emptyLinePlaceholder":615},[46,116357,116358,116360,116363,116365],{"class":48,"line":18816},[46,116359,32825],{"class":180},[46,116361,116362],{"class":56},".data.ctrl[:] ",[46,116364,79],{"class":52},[46,116366,109355],{"class":56},[46,116368,116369,116371,116373,116375,116377,116379,116381],{"class":48,"line":18821},[46,116370,5422],{"class":52},[46,116372,1143],{"class":56},[46,116374,1146],{"class":52},[46,116376,1149],{"class":180},[46,116378,1152],{"class":56},[46,116380,32803],{"class":180},[46,116382,116383],{"class":56},".frame_skip):\n",[46,116385,116386,116389,116391,116393,116395],{"class":48,"line":18827},[46,116387,116388],{"class":56},"            mujoco.mj_step(",[46,116390,32803],{"class":180},[46,116392,116209],{"class":56},[46,116394,32803],{"class":180},[46,116396,116214],{"class":56},[46,116398,116399],{"class":48,"line":18832},[46,116400,616],{"emptyLinePlaceholder":615},[46,116402,116403,116405,116407,116409],{"class":48,"line":18846},[46,116404,32825],{"class":180},[46,116406,115334],{"class":56},[46,116408,11481],{"class":52},[46,116410,57664],{"class":180},[46,116412,116413],{"class":48,"line":18851},[46,116414,616],{"emptyLinePlaceholder":615},[46,116416,116417,116419,116421,116423],{"class":48,"line":18856},[46,116418,111810],{"class":56},[46,116420,79],{"class":52},[46,116422,40845],{"class":180},[46,116424,116425],{"class":56},"._get_obs()\n",[46,116427,116428,116430,116432,116434],{"class":48,"line":18870},[46,116429,111915],{"class":56},[46,116431,79],{"class":52},[46,116433,40845],{"class":180},[46,116435,116436],{"class":56},"._get_reward()\n",[46,116438,116439],{"class":48,"line":18882},[46,116440,616],{"emptyLinePlaceholder":615},[46,116442,116443,116445,116447,116449,116451,116453],{"class":48,"line":18887},[46,116444,113765],{"class":56},[46,116446,79],{"class":52},[46,116448,40845],{"class":180},[46,116450,115998],{"class":56},[46,116452,32803],{"class":180},[46,116454,116076],{"class":56},[46,116456,116457,116459,116461,116463,116465,116467],{"class":48,"line":18900},[46,116458,113778],{"class":56},[46,116460,79],{"class":52},[46,116462,40845],{"class":180},[46,116464,115998],{"class":56},[46,116466,32803],{"class":180},[46,116468,116091],{"class":56},[46,116470,116471,116473,116475,116477,116480,116482],{"class":48,"line":18905},[46,116472,116096],{"class":56},[46,116474,79],{"class":52},[46,116476,111425],{"class":180},[46,116478,116479],{"class":56},"(np.linalg.norm(tip ",[46,116481,534],{"class":52},[46,116483,116484],{"class":56}," target))\n",[46,116486,116487],{"class":48,"line":18910},[46,116488,616],{"emptyLinePlaceholder":615},[46,116490,116491,116494,116496,116498,116500],{"class":48,"line":18915},[46,116492,116493],{"class":56},"        terminated ",[46,116495,79],{"class":52},[46,116497,115317],{"class":56},[46,116499,821],{"class":52},[46,116501,115322],{"class":180},[46,116503,116504,116507,116509,116511,116513,116515,116517],{"class":48,"line":18928},[46,116505,116506],{"class":56},"        truncated ",[46,116508,79],{"class":52},[46,116510,40845],{"class":180},[46,116512,115334],{"class":56},[46,116514,3750],{"class":52},[46,116516,40845],{"class":180},[46,116518,115341],{"class":56},[46,116520,116521,116524,116526,116528,116531],{"class":48,"line":18933},[46,116522,116523],{"class":56},"        info ",[46,116525,79],{"class":52},[46,116527,6465],{"class":56},[46,116529,116530],{"class":173},"\"distance\"",[46,116532,116533],{"class":56},": dist}\n",[46,116535,116536,116538],{"class":48,"line":34607},[46,116537,16754],{"class":52},[46,116539,116540],{"class":56}," obs, reward, terminated, truncated, info\n",[46,116542,116543],{"class":48,"line":34613},[46,116544,616],{"emptyLinePlaceholder":615},[46,116546,116547],{"class":48,"line":34619},[46,116548,616],{"emptyLinePlaceholder":615},[46,116550,116551,116553,116555,116557,116559],{"class":48,"line":34625},[46,116552,748],{"class":52},[46,116554,751],{"class":169},[46,116556,754],{"class":56},[46,116558,757],{"class":180},[46,116560,760],{"class":56},[46,116562,116563,116566,116568],{"class":48,"line":34631},[46,116564,116565],{"class":56},"    env ",[46,116567,79],{"class":52},[46,116569,116570],{"class":56}," ReacherEnv()\n",[46,116572,116573,116576,116578,116581,116583,116585,116587],{"class":48,"line":34642},[46,116574,116575],{"class":56},"    obs, info ",[46,116577,79],{"class":52},[46,116579,116580],{"class":56}," env.reset(",[46,116582,116194],{"class":439},[46,116584,79],{"class":52},[46,116586,2379],{"class":180},[46,116588,459],{"class":56},[46,116590,116591,116593,116595,116598],{"class":48,"line":34648},[46,116592,1227],{"class":180},[46,116594,1152],{"class":56},[46,116596,116597],{"class":173},"\"initial obs shape:\"",[46,116599,116600],{"class":56},", obs.shape)\n",[46,116602,116603,116605,116607,116610],{"class":48,"line":34668},[46,116604,1227],{"class":180},[46,116606,1152],{"class":56},[46,116608,116609],{"class":173},"\"initial info:\"",[46,116611,116612],{"class":56},", info)\n",[46,116614,116615],{"class":48,"line":34674},[46,116616,616],{"emptyLinePlaceholder":615},[46,116618,116619,116621,116623],{"class":48,"line":34685},[46,116620,111781],{"class":56},[46,116622,79],{"class":52},[46,116624,106646],{"class":180},[46,116626,116627,116629,116631,116633,116635,116637,116639],{"class":48,"line":34691},[46,116628,1140],{"class":52},[46,116630,33593],{"class":56},[46,116632,1146],{"class":52},[46,116634,1149],{"class":180},[46,116636,1152],{"class":56},[46,116638,2886],{"class":180},[46,116640,1158],{"class":56},[46,116642,116643,116645,116647],{"class":48,"line":34697},[46,116644,111850],{"class":56},[46,116646,79],{"class":52},[46,116648,116649],{"class":56}," env.action_space.sample()\n",[46,116651,116652,116655,116657],{"class":48,"line":34703},[46,116653,116654],{"class":56},"        obs, reward, terminated, truncated, info ",[46,116656,79],{"class":52},[46,116658,115043],{"class":56},[46,116660,116661,116663,116665],{"class":48,"line":34709},[46,116662,111925],{"class":56},[46,116664,11481],{"class":52},[46,116666,111930],{"class":56},[46,116668,116669,116671,116673,116675,116677,116680,116682,116684,116687,116689,116691,116694,116696,116698,116701,116703,116705,116707],{"class":48,"line":34715},[46,116670,34425],{"class":180},[46,116672,1152],{"class":56},[46,116674,111959],{"class":173},[46,116676,111962],{"class":56},[46,116678,116679],{"class":173},"\"reward:\"",[46,116681,448],{"class":56},[46,116683,33993],{"class":180},[46,116685,116686],{"class":56},"(reward, ",[46,116688,2266],{"class":180},[46,116690,111973],{"class":56},[46,116692,116693],{"class":173},"\"distance:\"",[46,116695,448],{"class":56},[46,116697,33993],{"class":180},[46,116699,116700],{"class":56},"(info[",[46,116702,116530],{"class":173},[46,116704,113830],{"class":56},[46,116706,2266],{"class":180},[46,116708,32479],{"class":56},[46,116710,116711,116713,116716,116719],{"class":48,"line":34721},[46,116712,4525],{"class":52},[46,116714,116715],{"class":56}," terminated ",[46,116717,116718],{"class":52},"or",[46,116720,116721],{"class":56}," truncated:\n",[46,116723,116724],{"class":48,"line":34727},[46,116725,116726],{"class":52},"            break\n",[46,116728,116729],{"class":48,"line":34747},[46,116730,616],{"emptyLinePlaceholder":615},[46,116732,116733,116735,116737,116739,116741,116743,116745,116747],{"class":48,"line":34753},[46,116734,1227],{"class":180},[46,116736,1152],{"class":56},[46,116738,112004],{"class":173},[46,116740,448],{"class":56},[46,116742,33993],{"class":180},[46,116744,112011],{"class":56},[46,116746,2266],{"class":180},[46,116748,32479],{"class":56},[46,116750,116751],{"class":48,"line":34769},[46,116752,616],{"emptyLinePlaceholder":615},[46,116754,116755],{"class":48,"line":34775},[46,116756,616],{"emptyLinePlaceholder":615},[46,116758,116759,116761,116763,116765,116767],{"class":48,"line":34789},[46,116760,911],{"class":52},[46,116762,914],{"class":180},[46,116764,917],{"class":52},[46,116766,920],{"class":173},[46,116768,760],{"class":56},[46,116770,116771],{"class":48,"line":34795},[46,116772,928],{"class":56},[19,116774,931],{},[36,116776,116778],{"className":160,"code":116777,"language":162,"meta":41,"style":41},"touch ch8_gym_env.py\n",[43,116779,116780],{"__ignoreMap":41},[46,116781,116782,116784],{"class":48,"line":49},[46,116783,941],{"class":169},[46,116785,116786],{"class":173}," ch8_gym_env.py\n",[19,116788,112072],{},[36,116790,116792],{"className":160,"code":116791,"language":162,"meta":41,"style":41},"python ch8_gym_env.py\n",[43,116793,116794],{"__ignoreMap":41},[46,116795,116796,116798],{"class":48,"line":49},[46,116797,40],{"class":169},[46,116799,116786],{"class":173},[479,116801,1293],{"id":1293},[19,116803,116804],{},"继承 Gymnasium 环境：",[36,116806,116808],{"className":38,"code":116807,"language":40,"meta":41,"style":41},"class ReacherEnv(gym.Env):\n",[43,116809,116810],{"__ignoreMap":41},[46,116811,116812,116814,116816,116818,116820,116822,116824],{"class":48,"line":49},[46,116813,16696],{"class":52},[46,116815,115685],{"class":169},[46,116817,1152],{"class":56},[46,116819,115168],{"class":169},[46,116821,2744],{"class":56},[46,116823,115694],{"class":169},[46,116825,1158],{"class":56},[19,116827,116828],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[19,116830,116831],{},"初始化模型：",[36,116833,116835],{"className":38,"code":116834,"language":40,"meta":41,"style":41},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[43,116836,116837,116851],{"__ignoreMap":41},[46,116838,116839,116841,116843,116845,116847,116849],{"class":48,"line":49},[46,116840,32803],{"class":180},[46,116842,115745],{"class":56},[46,116844,79],{"class":52},[46,116846,771],{"class":56},[46,116848,644],{"class":180},[46,116850,459],{"class":56},[46,116852,116853,116855,116857,116859,116861,116863],{"class":48,"line":60},[46,116854,32803],{"class":180},[46,116856,115760],{"class":56},[46,116858,79],{"class":52},[46,116860,115765],{"class":56},[46,116862,32803],{"class":180},[46,116864,115770],{"class":56},[19,116866,116867,116868,116870],{},"这和前面章节一样，只是现在放到了类的 ",[43,116869,32809],{}," 里。",[19,116872,116873],{},"缓存 site ID：",[36,116875,116877],{"className":38,"code":116876,"language":40,"meta":41,"style":41},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[43,116878,116879,116893],{"__ignoreMap":41},[46,116880,116881,116883,116885,116887,116889,116891],{"class":48,"line":49},[46,116882,32803],{"class":180},[46,116884,115781],{"class":56},[46,116886,79],{"class":52},[46,116888,115786],{"class":56},[46,116890,91517],{"class":180},[46,116892,459],{"class":56},[46,116894,116895,116897,116899,116901,116903,116905],{"class":48,"line":60},[46,116896,32803],{"class":180},[46,116898,115802],{"class":56},[46,116900,79],{"class":52},[46,116902,115786],{"class":56},[46,116904,91517],{"class":180},[46,116906,459],{"class":56},[19,116908,116909],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[19,116911,116912],{},"reset：",[36,116914,116916],{"className":38,"code":116915,"language":40,"meta":41,"style":41},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[43,116917,116918],{"__ignoreMap":41},[46,116919,116920,116922,116924,116926,116928,116930,116932,116934,116936,116938,116940,116942,116944,116946,116948,116950,116952],{"class":48,"line":49},[46,116921,748],{"class":52},[46,116923,116150],{"class":169},[46,116925,116153],{"class":56},[46,116927,2642],{"class":52},[46,116929,116158],{"class":56},[46,116931,2201],{"class":180},[46,116933,27102],{"class":52},[46,116935,40905],{"class":180},[46,116937,647],{"class":52},[46,116939,40905],{"class":180},[46,116941,116171],{"class":56},[46,116943,116174],{"class":180},[46,116945,27102],{"class":52},[46,116947,40905],{"class":180},[46,116949,647],{"class":52},[46,116951,40905],{"class":180},[46,116953,1158],{"class":56},[19,116955,116956,116958],{},[43,116957,72021],{}," 做四件事：",[23,116960,116961,116964,116967,116970],{},[26,116962,116963],{},"设置随机种子。",[26,116965,116966],{},"重置 MuJoCo data。",[26,116968,116969],{},"随机初始化关节角。",[26,116971,116972],{},"返回初始观测和 info。",[19,116974,116975],{},"step：",[36,116977,116979],{"className":38,"code":116978,"language":40,"meta":41,"style":41},"def step(self, action):\n",[43,116980,116981],{"__ignoreMap":41},[46,116982,116983,116985,116987],{"class":48,"line":49},[46,116984,748],{"class":52},[46,116986,116315],{"class":169},[46,116988,116318],{"class":56},[19,116990,116991,116993],{},[43,116992,109019],{}," 做六件事：",[23,116995,116996,116999,117005,117008,117011,117014],{},[26,116997,116998],{},"检查并裁剪 action。",[26,117000,117001,117002,365],{},"写入 ",[43,117003,117004],{},"self.data.ctrl",[26,117006,117007],{},"连续推进若干个 MuJoCo 物理步。",[26,117009,117010],{},"计算新观测。",[26,117012,117013],{},"计算奖励和结束条件。",[26,117015,117016],{},"返回 Gymnasium 标准五元组。",[479,117018,103613],{"id":103613},[36,117020,117022],{"className":38,"code":117021,"language":40,"meta":41,"style":41},"import gymnasium as gym\n",[43,117023,117024],{"__ignoreMap":41},[46,117025,117026,117028,117030,117032],{"class":48,"line":49},[46,117027,53],{"class":52},[46,117029,115523],{"class":56},[46,117031,398],{"class":52},[46,117033,115528],{"class":56},[19,117035,117036,117037,117039,117040,117043],{},"导入 Gymnasium，并起别名 ",[43,117038,115168],{},"。后面写 ",[43,117041,117042],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[36,117045,117047],{"className":38,"code":117046,"language":40,"meta":41,"style":41},"from gymnasium import spaces\n",[43,117048,117049],{"__ignoreMap":41},[46,117050,117051,117053,117055,117057],{"class":48,"line":49},[46,117052,957],{"class":52},[46,117054,115523],{"class":56},[46,117056,53],{"class":52},[46,117058,115555],{"class":56},[19,117060,117061,117062,117065],{},"导入空间定义工具。",[43,117063,117064],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[36,117067,117068],{"className":38,"code":116807,"language":40,"meta":41,"style":41},[43,117069,117070],{"__ignoreMap":41},[46,117071,117072,117074,117076,117078,117080,117082,117084],{"class":48,"line":49},[46,117073,16696],{"class":52},[46,117075,115685],{"class":169},[46,117077,1152],{"class":56},[46,117079,115168],{"class":169},[46,117081,2744],{"class":56},[46,117083,115694],{"class":169},[46,117085,1158],{"class":56},[19,117087,117088,117089,117092,117093,117095,117096,1700,117098,117100],{},"定义一个类，名字叫 ",[43,117090,117091],{},"ReacherEnv","。括号里的 ",[43,117094,117042],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[43,117097,72021],{},[43,117099,109019],{}," 这两个核心方法。",[36,117102,117104],{"className":38,"code":117103,"language":40,"meta":41,"style":41},"metadata = {\"render_modes\": []}\n",[43,117105,117106],{"__ignoreMap":41},[46,117107,117108,117111,117113,117115,117117],{"class":48,"line":49},[46,117109,117110],{"class":56},"metadata ",[46,117112,79],{"class":52},[46,117114,6465],{"class":56},[46,117116,115708],{"class":173},[46,117118,115711],{"class":56},[19,117120,117121],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[36,117123,117125],{"className":38,"code":117124,"language":40,"meta":41,"style":41},"def __init__(self) -> None:\n",[43,117126,117127],{"__ignoreMap":41},[46,117128,117129,117131,117133,117135,117137],{"class":48,"line":49},[46,117130,748],{"class":52},[46,117132,32784],{"class":180},[46,117134,115724],{"class":56},[46,117136,757],{"class":180},[46,117138,760],{"class":56},[19,117140,117141,117143,117144,365],{},[43,117142,32809],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[43,117145,117146],{},"env = ReacherEnv()",[36,117148,117150],{"className":38,"code":117149,"language":40,"meta":41,"style":41},"super().__init__()\n",[43,117151,117152],{"__ignoreMap":41},[46,117153,117154,117157,117159,117161],{"class":48,"line":49},[46,117155,117156],{"class":180},"super",[46,117158,19262],{"class":56},[46,117160,32809],{"class":180},[46,117162,4006],{"class":56},[19,117164,117165,117166,117168],{},"调用父类 ",[43,117167,117042],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[36,117170,117171],{"className":38,"code":116834,"language":40,"meta":41,"style":41},[43,117172,117173,117187],{"__ignoreMap":41},[46,117174,117175,117177,117179,117181,117183,117185],{"class":48,"line":49},[46,117176,32803],{"class":180},[46,117178,115745],{"class":56},[46,117180,79],{"class":52},[46,117182,771],{"class":56},[46,117184,644],{"class":180},[46,117186,459],{"class":56},[46,117188,117189,117191,117193,117195,117197,117199],{"class":48,"line":60},[46,117190,32803],{"class":180},[46,117192,115760],{"class":56},[46,117194,79],{"class":52},[46,117196,115765],{"class":56},[46,117198,32803],{"class":180},[46,117200,115770],{"class":56},[19,117202,117203,117204,117206,117207,1700,117210,117213],{},"把 MuJoCo 模型和状态保存到 ",[43,117205,32803],{}," 上。",[43,117208,117209],{},"self.model",[43,117211,117212],{},"self.data"," 表示这个环境对象自己的模型和状态。",[36,117215,117216],{"className":38,"code":116876,"language":40,"meta":41,"style":41},[43,117217,117218,117232],{"__ignoreMap":41},[46,117219,117220,117222,117224,117226,117228,117230],{"class":48,"line":49},[46,117221,32803],{"class":180},[46,117223,115781],{"class":56},[46,117225,79],{"class":52},[46,117227,115786],{"class":56},[46,117229,91517],{"class":180},[46,117231,459],{"class":56},[46,117233,117234,117236,117238,117240,117242,117244],{"class":48,"line":60},[46,117235,32803],{"class":180},[46,117237,115802],{"class":56},[46,117239,79],{"class":52},[46,117241,115786],{"class":56},[46,117243,91517],{"class":180},[46,117245,459],{"class":56},[19,117247,117248,117249,1700,117252,117255],{},"提前查好 tip 和 target 的 site ID。这样 ",[43,117250,117251],{},"_get_obs",[43,117253,117254],{},"_get_reward"," 里就不用每次按名字查找。",[36,117257,117259],{"className":38,"code":117258,"language":40,"meta":41,"style":41},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[43,117260,117261,117271,117281],{"__ignoreMap":41},[46,117262,117263,117265,117267,117269],{"class":48,"line":49},[46,117264,32803],{"class":180},[46,117266,115495],{"class":56},[46,117268,79],{"class":52},[46,117270,56392],{"class":180},[46,117272,117273,117275,117277,117279],{"class":48,"line":60},[46,117274,32803],{"class":180},[46,117276,115874],{"class":56},[46,117278,79],{"class":52},[46,117280,115879],{"class":180},[46,117282,117283,117285,117287,117289],{"class":48,"line":200},[46,117284,32803],{"class":180},[46,117286,115334],{"class":56},[46,117288,79],{"class":52},[46,117290,49301],{"class":180},[19,117292,117293,117296,117297,117300,117301,117304],{},[43,117294,117295],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[43,117298,117299],{},"max_steps"," 是一个 episode 最多运行多少步。",[43,117302,117303],{},"steps"," 记录当前 episode 已经走了多少步。",[36,117306,117307],{"className":38,"code":115373,"language":40,"meta":41,"style":41},[43,117308,117309],{"__ignoreMap":41},[46,117310,117311,117313,117315,117317,117319,117321,117323,117325,117327,117329,117331,117333,117335,117337,117339,117341,117343,117345,117347,117349],{"class":48,"line":49},[46,117312,32803],{"class":180},[46,117314,115382],{"class":56},[46,117316,79],{"class":52},[46,117318,115387],{"class":56},[46,117320,115390],{"class":439},[46,117322,115393],{"class":52},[46,117324,104304],{"class":180},[46,117326,448],{"class":56},[46,117328,115400],{"class":439},[46,117330,79],{"class":52},[46,117332,104304],{"class":180},[46,117334,448],{"class":56},[46,117336,97924],{"class":439},[46,117338,79],{"class":52},[46,117340,1152],{"class":56},[46,117342,2272],{"class":180},[46,117344,115417],{"class":56},[46,117346,95463],{"class":439},[46,117348,79],{"class":52},[46,117350,115424],{"class":56},[19,117352,117353,117354,117357,117358,1700,117361,117364],{},"定义动作空间。",[43,117355,117356],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[43,117359,117360],{},"low=-1.0",[43,117362,117363],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[36,117366,117367],{"className":38,"code":115434,"language":40,"meta":41,"style":41},[43,117368,117369],{"__ignoreMap":41},[46,117370,117371,117373,117375,117377,117379,117381,117383,117385,117387,117389,117391,117393,117395,117397,117399,117401,117403,117405],{"class":48,"line":49},[46,117372,32803],{"class":180},[46,117374,115443],{"class":56},[46,117376,79],{"class":52},[46,117378,115387],{"class":56},[46,117380,115390],{"class":439},[46,117382,115393],{"class":52},[46,117384,115454],{"class":56},[46,117386,115400],{"class":439},[46,117388,79],{"class":52},[46,117390,115454],{"class":56},[46,117392,97924],{"class":439},[46,117394,79],{"class":52},[46,117396,1152],{"class":56},[46,117398,2633],{"class":180},[46,117400,115417],{"class":56},[46,117402,95463],{"class":439},[46,117404,79],{"class":52},[46,117406,115424],{"class":56},[19,117408,117409,117410,117413,117414,117417],{},"定义观测空间。",[43,117411,117412],{},"shape=(10,)"," 表示观测是 10 个数。",[43,117415,117416],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[36,117419,117421],{"className":38,"code":117420,"language":40,"meta":41,"style":41},"def _get_obs(self) -> np.ndarray:\n",[43,117422,117423],{"__ignoreMap":41},[46,117424,117425,117427,117429],{"class":48,"line":49},[46,117426,748],{"class":52},[46,117428,115984],{"class":169},[46,117430,115987],{"class":56},[19,117432,117433,117434,117436],{},"定义内部函数，用来生成观测。函数名前面的 ",[43,117435,3176],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[36,117438,117440],{"className":38,"code":117439,"language":40,"meta":41,"style":41},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[43,117441,117442,117456],{"__ignoreMap":41},[46,117443,117444,117446,117448,117450,117452,117454],{"class":48,"line":49},[46,117445,113196],{"class":56},[46,117447,79],{"class":52},[46,117449,40845],{"class":180},[46,117451,115998],{"class":56},[46,117453,32803],{"class":180},[46,117455,116003],{"class":56},[46,117457,117458,117460,117462,117464,117466,117468],{"class":48,"line":60},[46,117459,113206],{"class":56},[46,117461,79],{"class":52},[46,117463,40845],{"class":180},[46,117465,115998],{"class":56},[46,117467,32803],{"class":180},[46,117469,116018],{"class":56},[19,117471,117472],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[36,117474,117476],{"className":38,"code":117475,"language":40,"meta":41,"style":41},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[43,117477,117478,117494],{"__ignoreMap":41},[46,117479,117480,117482,117484,117486,117488,117490,117492],{"class":48,"line":49},[46,117481,112482],{"class":56},[46,117483,79],{"class":52},[46,117485,116027],{"class":56},[46,117487,32803],{"class":180},[46,117489,116032],{"class":56},[46,117491,32803],{"class":180},[46,117493,116037],{"class":56},[46,117495,117496,117498],{"class":48,"line":60},[46,117497,19047],{"class":52},[46,117499,116044],{"class":56},[19,117501,117502,117503,117506,117507,117509],{},"拼接观测，并转换成 ",[43,117504,117505],{},"float32","。很多强化学习库默认使用 ",[43,117508,117505],{},"，所以这里主动转换。",[36,117511,117512],{"className":38,"code":116915,"language":40,"meta":41,"style":41},[43,117513,117514],{"__ignoreMap":41},[46,117515,117516,117518,117520,117522,117524,117526,117528,117530,117532,117534,117536,117538,117540,117542,117544,117546,117548],{"class":48,"line":49},[46,117517,748],{"class":52},[46,117519,116150],{"class":169},[46,117521,116153],{"class":56},[46,117523,2642],{"class":52},[46,117525,116158],{"class":56},[46,117527,2201],{"class":180},[46,117529,27102],{"class":52},[46,117531,40905],{"class":180},[46,117533,647],{"class":52},[46,117535,40905],{"class":180},[46,117537,116171],{"class":56},[46,117539,116174],{"class":180},[46,117541,27102],{"class":52},[46,117543,40905],{"class":180},[46,117545,647],{"class":52},[46,117547,40905],{"class":180},[46,117549,1158],{"class":56},[19,117551,117552,117553,117555,117556,117559],{},"定义 reset。",[43,117554,116194],{}," 用来控制随机数，保证实验可以复现。",[43,117557,117558],{},"options"," 用来接收额外配置，本章暂时不用。",[36,117561,117563],{"className":38,"code":117562,"language":40,"meta":41,"style":41},"super().reset(seed=seed)\n",[43,117564,117565],{"__ignoreMap":41},[46,117566,117567,117569,117571,117573,117575],{"class":48,"line":49},[46,117568,117156],{"class":180},[46,117570,116191],{"class":56},[46,117572,116194],{"class":439},[46,117574,79],{"class":52},[46,117576,116199],{"class":56},[19,117578,117579,117580,117583],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[43,117581,117582],{},"self.np_random"," 生成可复现的随机数。",[36,117585,117587],{"className":38,"code":117586,"language":40,"meta":41,"style":41},"mujoco.mj_resetData(self.model, self.data)\n",[43,117588,117589],{"__ignoreMap":41},[46,117590,117591,117594,117596,117598,117600],{"class":48,"line":49},[46,117592,117593],{"class":56},"mujoco.mj_resetData(",[46,117595,32803],{"class":180},[46,117597,116209],{"class":56},[46,117599,32803],{"class":180},[46,117601,116214],{"class":56},[19,117603,117604],{},"把 MuJoCo 状态重置到默认状态。",[36,117606,117608],{"className":38,"code":117607,"language":40,"meta":41,"style":41},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[43,117609,117610],{"__ignoreMap":41},[46,117611,117612,117614,117616,117618,117620,117622,117624,117626,117628,117630,117632,117634,117636,117638,117640,117642,117644],{"class":48,"line":49},[46,117613,32803],{"class":180},[46,117615,116225],{"class":56},[46,117617,79],{"class":52},[46,117619,40845],{"class":180},[46,117621,116232],{"class":56},[46,117623,115390],{"class":439},[46,117625,115393],{"class":52},[46,117627,88173],{"class":180},[46,117629,448],{"class":56},[46,117631,115400],{"class":439},[46,117633,79],{"class":52},[46,117635,88173],{"class":180},[46,117637,448],{"class":56},[46,117639,33473],{"class":439},[46,117641,79],{"class":52},[46,117643,32803],{"class":180},[46,117645,116257],{"class":56},[19,117647,116969,117648,117651,117652,117655,117656,117658],{},[43,117649,117650],{},"[:]"," 表示修改整个数组。",[43,117653,117654],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[43,117657,104055],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[36,117660,117662],{"className":38,"code":117661,"language":40,"meta":41,"style":41},"self.data.qvel[:] = 0.0\n",[43,117663,117664],{"__ignoreMap":41},[46,117665,117666,117668,117670,117672],{"class":48,"line":49},[46,117667,32803],{"class":180},[46,117669,116264],{"class":56},[46,117671,79],{"class":52},[46,117673,106646],{"class":180},[19,117675,117676],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[36,117678,117680],{"className":38,"code":117679,"language":40,"meta":41,"style":41},"self.steps = 0\nreturn self._get_obs(), {}\n",[43,117681,117682,117692],{"__ignoreMap":41},[46,117683,117684,117686,117688,117690],{"class":48,"line":49},[46,117685,32803],{"class":180},[46,117687,115334],{"class":56},[46,117689,79],{"class":52},[46,117691,49301],{"class":180},[46,117693,117694,117696,117698],{"class":48,"line":60},[46,117695,19047],{"class":52},[46,117697,40845],{"class":180},[46,117699,116304],{"class":56},[19,117701,117702],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[36,117704,117705],{"className":38,"code":116978,"language":40,"meta":41,"style":41},[43,117706,117707],{"__ignoreMap":41},[46,117708,117709,117711,117713],{"class":48,"line":49},[46,117710,748],{"class":52},[46,117712,116315],{"class":169},[46,117714,116318],{"class":56},[19,117716,117717],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[36,117719,117721],{"className":38,"code":117720,"language":40,"meta":41,"style":41},"action = np.asarray(action, dtype=np.float32)\n",[43,117722,117723],{"__ignoreMap":41},[46,117724,117725,117727,117729,117731,117733,117735],{"class":48,"line":49},[46,117726,109327],{"class":56},[46,117728,79],{"class":52},[46,117730,116327],{"class":56},[46,117732,95463],{"class":439},[46,117734,79],{"class":52},[46,117736,115424],{"class":56},[19,117738,117739,117740,365],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[43,117741,117505],{},[36,117743,117745],{"className":38,"code":117744,"language":40,"meta":41,"style":41},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[43,117746,117747],{"__ignoreMap":41},[46,117748,117749,117751,117753,117755,117757,117759,117761],{"class":48,"line":49},[46,117750,109327],{"class":56},[46,117752,79],{"class":52},[46,117754,109332],{"class":56},[46,117756,32803],{"class":180},[46,117758,116346],{"class":56},[46,117760,32803],{"class":180},[46,117762,116351],{"class":56},[19,117764,117765],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[36,117767,117769],{"className":38,"code":117768,"language":40,"meta":41,"style":41},"self.data.ctrl[:] = action\n",[43,117770,117771],{"__ignoreMap":41},[46,117772,117773,117775,117777,117779],{"class":48,"line":49},[46,117774,32803],{"class":180},[46,117776,116362],{"class":56},[46,117778,79],{"class":52},[46,117780,109355],{"class":56},[19,117782,117783],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[36,117785,117787],{"className":38,"code":117786,"language":40,"meta":41,"style":41},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[43,117788,117789,117805],{"__ignoreMap":41},[46,117790,117791,117793,117795,117797,117799,117801,117803],{"class":48,"line":49},[46,117792,1713],{"class":52},[46,117794,1143],{"class":56},[46,117796,1146],{"class":52},[46,117798,1149],{"class":180},[46,117800,1152],{"class":56},[46,117802,32803],{"class":180},[46,117804,116383],{"class":56},[46,117806,117807,117810,117812,117814,117816],{"class":48,"line":60},[46,117808,117809],{"class":56},"    mujoco.mj_step(",[46,117811,32803],{"class":180},[46,117813,116209],{"class":56},[46,117815,32803],{"class":180},[46,117817,116214],{"class":56},[19,117819,117820,117821,117824,117825,117827,117828,365],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[43,117822,117823],{},"frame_skip=5","，所以外部调用一次 ",[43,117826,115505],{},"，内部实际执行 5 次 ",[43,117829,504],{},[36,117831,117833],{"className":38,"code":117832,"language":40,"meta":41,"style":41},"self.steps += 1\n",[43,117834,117835],{"__ignoreMap":41},[46,117836,117837,117839,117841,117843],{"class":48,"line":49},[46,117838,32803],{"class":180},[46,117840,115334],{"class":56},[46,117842,11481],{"class":52},[46,117844,57664],{"class":180},[19,117846,117847],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[36,117849,117851],{"className":38,"code":117850,"language":40,"meta":41,"style":41},"obs = self._get_obs()\nreward = self._get_reward()\n",[43,117852,117853,117863],{"__ignoreMap":41},[46,117854,117855,117857,117859,117861],{"class":48,"line":49},[46,117856,112482],{"class":56},[46,117858,79],{"class":52},[46,117860,40845],{"class":180},[46,117862,116425],{"class":56},[46,117864,117865,117867,117869,117871],{"class":48,"line":60},[46,117866,112633],{"class":56},[46,117868,79],{"class":52},[46,117870,40845],{"class":180},[46,117872,116436],{"class":56},[19,117874,117875],{},"计算新的观测和奖励。",[36,117877,117879],{"className":38,"code":117878,"language":40,"meta":41,"style":41},"dist = float(np.linalg.norm(tip - target))\n",[43,117880,117881],{"__ignoreMap":41},[46,117882,117883,117885,117887,117889,117891,117893],{"class":48,"line":49},[46,117884,113224],{"class":56},[46,117886,79],{"class":52},[46,117888,111425],{"class":180},[46,117890,116479],{"class":56},[46,117892,534],{"class":52},[46,117894,116484],{"class":56},[19,117896,117897],{},"计算末端到目标的距离，并转换成 Python float。",[36,117899,117900],{"className":38,"code":115305,"language":40,"meta":41,"style":41},[43,117901,117902,117914],{"__ignoreMap":41},[46,117903,117904,117906,117908,117910,117912],{"class":48,"line":49},[46,117905,115312],{"class":56},[46,117907,79],{"class":52},[46,117909,115317],{"class":56},[46,117911,821],{"class":52},[46,117913,115322],{"class":180},[46,117915,117916,117918,117920,117922,117924,117926,117928],{"class":48,"line":60},[46,117917,115327],{"class":56},[46,117919,79],{"class":52},[46,117921,40845],{"class":180},[46,117923,115334],{"class":56},[46,117925,3750],{"class":52},[46,117927,40845],{"class":180},[46,117929,115341],{"class":56},[19,117931,117932],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[36,117934,117936],{"className":38,"code":117935,"language":40,"meta":41,"style":41},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[43,117937,117938,117951],{"__ignoreMap":41},[46,117939,117940,117943,117945,117947,117949],{"class":48,"line":49},[46,117941,117942],{"class":56},"info ",[46,117944,79],{"class":52},[46,117946,6465],{"class":56},[46,117948,116530],{"class":173},[46,117950,116533],{"class":56},[46,117952,117953,117955],{"class":48,"line":60},[46,117954,19047],{"class":52},[46,117956,116540],{"class":56},[19,117958,117959,117962],{},[43,117960,117961],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[36,117964,117966],{"className":38,"code":117965,"language":40,"meta":41,"style":41},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[43,117967,117968,117977],{"__ignoreMap":41},[46,117969,117970,117973,117975],{"class":48,"line":49},[46,117971,117972],{"class":56},"env ",[46,117974,79],{"class":52},[46,117976,116570],{"class":56},[46,117978,117979,117981,117983,117985,117987,117989,117991],{"class":48,"line":60},[46,117980,115028],{"class":56},[46,117982,79],{"class":52},[46,117984,116580],{"class":56},[46,117986,116194],{"class":439},[46,117988,79],{"class":52},[46,117990,2379],{"class":180},[46,117992,459],{"class":56},[19,117994,117995,117996,117999],{},"创建环境并重置。",[43,117997,117998],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[36,118001,118003],{"className":38,"code":118002,"language":40,"meta":41,"style":41},"action = env.action_space.sample()\n",[43,118004,118005],{"__ignoreMap":41},[46,118006,118007,118009,118011],{"class":48,"line":49},[46,118008,109327],{"class":56},[46,118010,79],{"class":52},[46,118012,116649],{"class":56},[19,118014,118015],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,118017,1811],{"id":1810},[19,118019,107369],{},[36,118021,118024],{"className":118022,"code":118023,"language":571,"meta":41},[569],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[43,118025,118023],{"__ignoreMap":41},[19,118027,118028],{},"这个环境已经具备强化学习环境的基本结构。",[19,118030,118031],{},"主函数里使用随机动作：",[36,118033,118034],{"className":38,"code":118002,"language":40,"meta":41,"style":41},[43,118035,118036],{"__ignoreMap":41},[46,118037,118038,118040,118042],{"class":48,"line":49},[46,118039,109327],{"class":56},[46,118041,79],{"class":52},[46,118043,116649],{"class":56},[19,118045,118046],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,118048,1842],{"id":1841},[23,118050,118051,118054,118060,118069,118078,118087,118093],{},[26,118052,118053],{},"运行程序。",[26,118055,118056,118057,365],{},"确认 ",[43,118058,118059],{},"obs.shape == (10,)",[26,118061,112809,118062,118065,118066,365],{},[43,118063,118064],{},"env.action_space","，应类似 ",[43,118067,118068],{},"Box(-1.0, 1.0, (2,), float32)",[26,118070,107470,118071,118074,118075,365],{},[43,118072,118073],{},"self.max_steps = 10","，确认环境会更快 ",[43,118076,118077],{},"truncated=True",[26,118079,104312,118080,1938,118083,118086],{},[43,118081,118082],{},"terminated = dist \u003C 0.05",[43,118084,118085],{},"dist \u003C 0.2","，观察是否更容易结束。",[26,118088,104312,118089,118092],{},[43,118090,118091],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[26,118094,118095,118096,118098,118099,118102],{},"在 ",[43,118097,117961],{}," 里加入 ",[43,118100,118101],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,118104,1946],{"id":1945},[479,118106,118108],{"id":118107},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[19,118110,118111,118112,118114],{},"Gymnasium 的 ",[43,118113,109019],{}," 返回 5 个值:",[36,118116,118118],{"className":38,"code":118117,"language":40,"meta":41,"style":41},"obs, reward, terminated, truncated, info\n",[43,118119,118120],{"__ignoreMap":41},[46,118121,118122],{"class":48,"line":49},[46,118123,118117],{"class":56},[19,118125,118126],{},"不是旧 Gym 的 4 个值。",[479,118128,118130,118133],{"id":118129},"datactrl-action-维度错误",[43,118131,118132],{},"data.ctrl[:] = action"," 维度错误",[19,118135,104418],{},[36,118137,118139],{"className":38,"code":118138,"language":40,"meta":41,"style":41},"print(self.model.nu)\nprint(action.shape)\n",[43,118140,118141,118152],{"__ignoreMap":41},[46,118142,118143,118145,118147,118149],{"class":48,"line":49},[46,118144,32398],{"class":180},[46,118146,1152],{"class":56},[46,118148,32803],{"class":180},[46,118150,118151],{"class":56},".model.nu)\n",[46,118153,118154,118156],{"class":48,"line":60},[46,118155,32398],{"class":180},[46,118157,118158],{"class":56},"(action.shape)\n",[19,118160,118161],{},"两者必须匹配。",[479,118163,118165],{"id":118164},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[19,118167,104360],{},[36,118169,118171],{"className":38,"code":118170,"language":40,"meta":41,"style":41},"mujoco.mj_forward(self.model, self.data)\n",[43,118172,118173],{"__ignoreMap":41},[46,118174,118175,118178,118180,118182,118184],{"class":48,"line":49},[46,118176,118177],{"class":56},"mujoco.mj_forward(",[46,118179,32803],{"class":180},[46,118181,116209],{"class":56},[46,118183,32803],{"class":180},[46,118185,116214],{"class":56},[479,118187,118189,118191],{"id":118188},"observation_space-维度和-obs-不一致",[43,118190,115228],{}," 维度和 obs 不一致",[19,118193,2016],{},[36,118195,118197],{"className":38,"code":118196,"language":40,"meta":41,"style":41},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[43,118198,118199,118209,118216],{"__ignoreMap":41},[46,118200,118201,118203,118205,118207],{"class":48,"line":49},[46,118202,112482],{"class":56},[46,118204,79],{"class":52},[46,118206,40845],{"class":180},[46,118208,116425],{"class":56},[46,118210,118211,118213],{"class":48,"line":60},[46,118212,32398],{"class":180},[46,118214,118215],{"class":56},"(obs.shape)\n",[46,118217,118218,118220,118222,118224],{"class":48,"line":200},[46,118219,32398],{"class":180},[46,118221,1152],{"class":56},[46,118223,32803],{"class":180},[46,118225,118226],{"class":56},".observation_space.shape)\n",[19,118228,118229],{},"两者必须一致。本章观测是：",[36,118231,118234],{"className":118232,"code":118233,"language":571,"meta":41},[569],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[43,118235,118233],{"__ignoreMap":41},[479,118237,118239],{"id":118238},"action-超过范围","action 超过范围",[19,118241,118242],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[36,118244,118245],{"className":38,"code":117744,"language":40,"meta":41,"style":41},[43,118246,118247],{"__ignoreMap":41},[46,118248,118249,118251,118253,118255,118257,118259,118261],{"class":48,"line":49},[46,118250,109327],{"class":56},[46,118252,79],{"class":52},[46,118254,109332],{"class":56},[46,118256,32803],{"class":180},[46,118258,116346],{"class":56},[46,118260,32803],{"class":180},[46,118262,116351],{"class":56},[19,118264,118265,118266,365],{},"这能避免无效动作直接写入 ",[43,118267,103010],{},[479,118269,118271],{"id":118270},"忘记返回-info","忘记返回 info",[19,118273,118111,118274,1700,118276,118278],{},[43,118275,72021],{},[43,118277,109019],{}," 都会返回 info：",[36,118280,118281],{"className":38,"code":115021,"language":40,"meta":41,"style":41},[43,118282,118283,118291],{"__ignoreMap":41},[46,118284,118285,118287,118289],{"class":48,"line":49},[46,118286,115028],{"class":56},[46,118288,79],{"class":52},[46,118290,115033],{"class":56},[46,118292,118293,118295,118297],{"class":48,"line":60},[46,118294,115038],{"class":56},[46,118296,79],{"class":52},[46,118298,115043],{"class":56},[19,118300,118301,118302,365],{},"即使暂时没有额外信息，也返回 ",[43,118303,34433],{},[14,118305,118307],{"id":118306},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[19,118309,118310],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[23,118312,118313,118316,118319,118322,118325,118328],{},[26,118314,118315],{},"更稳定的 reward。",[26,118317,118318],{},"合理的 episode 长度。",[26,118320,118321],{},"可重复的随机目标采样。",[26,118323,118324],{},"render 接口。",[26,118326,118327],{},"环境注册代码。",[26,118329,118330],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[19,118332,118333],{},"如果只是自己写训练循环，最小形式是：",[36,118335,118337],{"className":38,"code":118336,"language":40,"meta":41,"style":41},"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",[43,118338,118339,118347,118363,118367,118383,118392,118401,118411],{"__ignoreMap":41},[46,118340,118341,118343,118345],{"class":48,"line":49},[46,118342,117972],{"class":56},[46,118344,79],{"class":52},[46,118346,116570],{"class":56},[46,118348,118349,118351,118353,118355,118357,118359,118361],{"class":48,"line":60},[46,118350,115028],{"class":56},[46,118352,79],{"class":52},[46,118354,116580],{"class":56},[46,118356,116194],{"class":439},[46,118358,79],{"class":52},[46,118360,2379],{"class":180},[46,118362,459],{"class":56},[46,118364,118365],{"class":48,"line":200},[46,118366,616],{"emptyLinePlaceholder":615},[46,118368,118369,118371,118373,118375,118377,118379,118381],{"class":48,"line":211},[46,118370,1713],{"class":52},[46,118372,1143],{"class":56},[46,118374,1146],{"class":52},[46,118376,1149],{"class":180},[46,118378,1152],{"class":56},[46,118380,8423],{"class":180},[46,118382,1158],{"class":56},[46,118384,118385,118388,118390],{"class":48,"line":222},[46,118386,118387],{"class":56},"    action ",[46,118389,79],{"class":52},[46,118391,116649],{"class":56},[46,118393,118394,118397,118399],{"class":48,"line":636},[46,118395,118396],{"class":56},"    obs, reward, terminated, truncated, info ",[46,118398,79],{"class":52},[46,118400,115043],{"class":56},[46,118402,118403,118405,118407,118409],{"class":48,"line":641},[46,118404,5121],{"class":52},[46,118406,116715],{"class":56},[46,118408,116718],{"class":52},[46,118410,116721],{"class":56},[46,118412,118413,118416,118418],{"class":48,"line":653},[46,118414,118415],{"class":56},"        obs, info ",[46,118417,79],{"class":52},[46,118419,115033],{"class":56},[14,118421,118423],{"id":118422},"_9本章小结","9.本章小结",[19,118425,118426],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[36,118428,118431],{"className":118429,"code":118430,"language":571,"meta":41},[569],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[43,118432,118430],{"__ignoreMap":41},[19,118434,118435],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[2098,118437,118438],{},"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":41,"searchDepth":60,"depth":60,"links":118440},[118441,118442,118443,118450,118454,118455,118456,118466,118467],{"id":16,"depth":60,"text":17},{"id":153,"depth":60,"text":154},{"id":375,"depth":60,"text":376,"children":118444},[118445,118447,118449],{"id":115252,"depth":200,"text":118446},"terminated 和 truncated 的区别",{"id":115355,"depth":200,"text":118448},"observation_space 和 action_space",{"id":115482,"depth":200,"text":115483},{"id":594,"depth":60,"text":595,"children":118451},[118452,118453],{"id":1293,"depth":200,"text":1293},{"id":103613,"depth":200,"text":103613},{"id":1810,"depth":60,"text":1811},{"id":1841,"depth":60,"text":1842},{"id":1945,"depth":60,"text":1946,"children":118457},[118458,118459,118461,118462,118464,118465],{"id":118107,"depth":200,"text":118108},{"id":118129,"depth":200,"text":118460},"data.ctrl[:] = action 维度错误",{"id":118164,"depth":200,"text":118165},{"id":118188,"depth":200,"text":118463},"observation_space 维度和 obs 不一致",{"id":118238,"depth":200,"text":118239},{"id":118270,"depth":200,"text":118271},{"id":118306,"depth":60,"text":118307},{"id":118422,"depth":60,"text":118423},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":115005,"description":41},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":118474,"title":118475,"body":118476,"description":118899,"extension":2125,"meta":118900,"navigation":615,"path":118901,"seo":118902,"stem":118903,"__hash__":118904},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":118477,"toc":118889},[118478,118482,118485,118488,118508,118514,118520,118530,118533,118536,118556,118559,118563,118566,118572,118575,118589,118592,118595,118669,118672,118678,118681,118704,118707,118757,118760,118766,118769,118772,118775,118794,118797,118803,118806,118809,118812,118832,118835,118838,118841,118886],[10,118479,118481],{"id":118480},"mujoco-学习","MuJoCo 学习",[19,118483,118484],{},"初版",[19,118486,118487],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[23,118489,118490,118493,118496,118505],{},[26,118491,118492],{},"MuJoCo 模型文件在描述什么。",[26,118494,118495],{},"Python 代码怎样读取和推进仿真。",[26,118497,118498,2400,118500,2400,118502,118504],{},[43,118499,105919],{},[43,118501,106248],{},[43,118503,106251],{}," 这些数组为什么重要。",[26,118506,118507],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[19,118509,118510,118511,118513],{},"默认环境为 Fedora 44、Python >= 3.10、",[43,118512,102965],{}," 官方 Python bindings。",[19,118515,118516,118517,118519],{},"注意：本文禁止使用 ",[43,118518,102951],{},"。所有示例均使用：",[36,118521,118522],{"className":38,"code":103485,"language":40,"meta":41,"style":41},[43,118523,118524],{"__ignoreMap":41},[46,118525,118526,118528],{"class":48,"line":49},[46,118527,53],{"class":52},[46,118529,623],{"class":56},[14,118531,118532],{"id":118532},"适合谁阅读",[19,118534,118535],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[23,118537,118538,118541,118544,118547],{},[26,118539,118540],{},"没学过 MuJoCo，只会一点 Python。",[26,118542,118543],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[26,118545,118546],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[26,118548,118549,118550,118552,118553,118555],{},"以前接触过 ",[43,118551,102951],{},"，现在想迁移到官方 ",[43,118554,102959],{}," Python bindings。",[19,118557,118558],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,118560,118562],{"id":118561},"mujoco-到底是什么","MuJoCo 到底是什么",[19,118564,118565],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[36,118567,118570],{"className":118568,"code":118569,"language":571,"meta":41},[569],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[43,118571,118569],{"__ignoreMap":41},[19,118573,118574],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[23,118576,118577,118580,118583,118586],{},[26,118578,118579],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[26,118581,118582],{},"快速测试控制算法，不必一开始就上真实机器人。",[26,118584,118585],{},"生成强化学习环境。",[26,118587,118588],{},"采集状态、动作、图像、奖励等训练数据。",[14,118590,118591],{"id":118591},"学习前的心智模型",[19,118593,118594],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[97,118596,118597,118609],{},[100,118598,118599],{},[103,118600,118601,118604,118607],{},[106,118602,118603],{"align":108},"部分",[106,118605,118606],{"align":108},"负责什么",[106,118608,23188],{"align":108},[120,118610,118611,118622,118634,118646,118658],{},[103,118612,118613,118616,118619],{},[125,118614,118615],{"align":108},"MJCF XML",[125,118617,118618],{"align":108},"定义世界和机器人结构",[125,118620,118621],{"align":108},"地面、盒子、关节、电机、摄像头",[103,118623,118624,118628,118631],{},[125,118625,118626],{"align":108},[43,118627,102668],{},[125,118629,118630],{"align":108},"编译后的静态模型",[125,118632,118633],{"align":108},"有几个关节、有几个电机、时间步长是多少",[103,118635,118636,118640,118643],{},[125,118637,118638],{"align":108},[43,118639,102678],{},[125,118641,118642],{"align":108},"运行中的动态状态",[125,118644,118645],{"align":108},"当前时间、位置、速度、电机输入",[103,118647,118648,118652,118655],{},[125,118649,118650],{"align":108},[43,118651,504],{},[125,118653,118654],{"align":108},"推进一步物理仿真",[125,118656,118657],{"align":108},"根据重力、力、碰撞更新状态",[103,118659,118660,118663,118666],{},[125,118661,118662],{"align":108},"Viewer \u002F Renderer",[125,118664,118665],{"align":108},"把仿真显示出来",[125,118667,118668],{"align":108},"打开窗口或保存图片",[19,118670,118671],{},"一句话总结：",[36,118673,118676],{"className":118674,"code":118675,"language":571,"meta":41},[569],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[43,118677,118675],{"__ignoreMap":41},[19,118679,118680],{},"参考来源：",[3191,118682,118683,118690,118697],{},[26,118684,118685,118686],{},"MuJoCo Python 官方文档：",[2426,118687,118688],{"href":118688,"rel":118689},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[25862],[26,118691,118692,118693],{},"MuJoCo XML Reference：",[2426,118694,118695],{"href":118695,"rel":118696},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[25862],[26,118698,118699,118700],{},"MuJoCo Overview：",[2426,118701,118702],{"href":118702,"rel":118703},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[25862],[14,118705,118706],{"id":118706},"章节目录",[23,118708,118709,118715,118721,118727,118733,118739,118745,118751],{},[26,118710,118711],{},[2426,118712,118714],{"href":118713},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[26,118716,118717],{},[2426,118718,118720],{"href":118719},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[26,118722,118723],{},[2426,118724,118726],{"href":118725},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[26,118728,118729],{},[2426,118730,118732],{"href":118731},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[26,118734,118735],{},[2426,118736,118738],{"href":118737},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[26,118740,118741],{},[2426,118742,118744],{"href":118743},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[26,118746,118747],{},[2426,118748,118750],{"href":118749},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[26,118752,118753],{},[2426,118754,118756],{"href":118755},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,118758,118759],{"id":118759},"推荐学习路线",[36,118761,118764],{"className":118762,"code":118763,"language":571,"meta":41},[569],"环境安装\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",[43,118765,118763],{"__ignoreMap":41},[19,118767,118768],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,118770,118771],{"id":118771},"建议的目录结构",[19,118773,118774],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[36,118776,118778],{"className":160,"code":118777,"language":162,"meta":41,"style":41},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[43,118779,118780,118788],{"__ignoreMap":41},[46,118781,118782,118784,118786],{"class":48,"line":49},[46,118783,103195],{"class":169},[46,118785,31203],{"class":180},[46,118787,103200],{"class":173},[46,118789,118790,118792],{"class":48,"line":60},[46,118791,103205],{"class":180},[46,118793,103200],{"class":173},[19,118795,118796],{},"每一章的代码都单独保存：",[36,118798,118801],{"className":118799,"code":118800,"language":571,"meta":41},[569],"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",[43,118802,118800],{"__ignoreMap":41},[19,118804,118805],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,118807,118808],{"id":118808},"学习方法",[19,118810,118811],{},"每章建议按这个顺序操作：",[23,118813,118814,118817,118820,118823,118826,118829],{},[26,118815,118816],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[26,118818,118819],{},"复制最小可运行代码，保存成指定文件。",[26,118821,118822],{},"运行代码，确认没有报错。",[26,118824,118825],{},"对照“运行结果说明”理解输出。",[26,118827,118828],{},"做“验证步骤”，主动改一两个参数。",[26,118830,118831],{},"遇到报错先看“常见错误与解决方案”。",[19,118833,118834],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,118836,118837],{"id":118837},"全局排错顺序",[19,118839,118840],{},"遇到问题时，按下面顺序查：",[23,118842,118843,118849,118855,118860,118863,118866,118873,118883],{},[26,118844,118845,118846],{},"Python 环境是否激活：",[43,118847,118848],{},"which python",[26,118850,118851,118852],{},"MuJoCo 是否能导入：",[43,118853,118854],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[26,118856,118857,118858],{},"是否误装了 ",[43,118859,102951],{},[26,118861,118862],{},"XML 标签是否闭合、属性是否拼写正确",[26,118864,118865],{},"actuator 引用的 joint 名字是否存在",[26,118867,118868,118870,118871],{},[43,118869,103010],{}," 的长度是否等于 ",[43,118872,104063],{},[26,118874,107470,118875,2006,118877,118879,118880],{},[43,118876,105919],{},[43,118878,106248],{}," 后是否调用了 ",[43,118881,118882],{},"mujoco.mj_forward",[26,118884,118885],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[2098,118887,118888],{},"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":41,"searchDepth":60,"depth":60,"links":118890},[118891,118892,118893,118894,118895,118896,118897,118898],{"id":118532,"depth":60,"text":118532},{"id":118561,"depth":60,"text":118562},{"id":118591,"depth":60,"text":118591},{"id":118706,"depth":60,"text":118706},{"id":118759,"depth":60,"text":118759},{"id":118771,"depth":60,"text":118771},{"id":118808,"depth":60,"text":118808},{"id":118837,"depth":60,"text":118837},"仿真搭建。",{"category":25380},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":118475,"description":118899},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":118906,"title":118907,"body":118908,"description":25378,"extension":2125,"meta":119363,"navigation":615,"path":119364,"seo":119365,"stem":119366,"__hash__":119367},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":118909,"toc":119361},[118910,118913,118916,118922,119358],[10,118911,118907],{"id":118912},"_1-最常用的基本操作更新",[19,118914,118915],{},"装linux系统教程：",[19,118917,118918],{},[2426,118919,118920],{"href":118920,"rel":118921},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[25862],[36,118923,118927],{"className":118924,"code":118925,"language":118926,"meta":41,"style":41},"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",[43,118928,118929,118934,118939,118948,118953,118962,118967,118987,118992,119003,119008,119017,119022,119050,119055,119074,119079,119098,119102,119107,119123,119127,119132,119162,119166,119171,119187,119191,119196,119211,119215,119220,119236,119240,119245,119257,119269,119273,119278,119295,119299,119304,119322,119326,119331,119340,119344,119349],{"__ignoreMap":41},[46,118930,118931],{"class":48,"line":49},[46,118932,118933],{"class":2253},"#更新相关的知识\n",[46,118935,118936],{"class":48,"line":60},[46,118937,118938],{"class":2253},"# 更新软件包列表（从服务器获取最新软件信息）\n",[46,118940,118941,118943,118946],{"class":48,"line":200},[46,118942,170],{"class":169},[46,118944,118945],{"class":173}," apt",[46,118947,28233],{"class":173},[46,118949,118950],{"class":48,"line":211},[46,118951,118952],{"class":2253},"# 升级所有可更新的软件包（不删除旧包）\n",[46,118954,118955,118957,118959],{"class":48,"line":222},[46,118956,170],{"class":169},[46,118958,118945],{"class":173},[46,118960,118961],{"class":173}," upgrade\n",[46,118963,118964],{"class":48,"line":636},[46,118965,118966],{"class":2253},"#更新和升级软件包\n",[46,118968,118969,118971,118973,118976,118978,118980,118982,118985],{"class":48,"line":641},[46,118970,170],{"class":169},[46,118972,118945],{"class":173},[46,118974,118975],{"class":173}," update",[46,118977,28181],{"class":56},[46,118979,170],{"class":169},[46,118981,118945],{"class":173},[46,118983,118984],{"class":173}," upgrade",[46,118986,292],{"class":180},[46,118988,118989],{"class":48,"line":653},[46,118990,118991],{"class":2253},"#列出可更新的软件包及版本信息\n",[46,118993,118994,118997,119000],{"class":48,"line":659},[46,118995,118996],{"class":169},"apt",[46,118998,118999],{"class":173}," list",[46,119001,119002],{"class":180}," --upgradable\n",[46,119004,119005],{"class":48,"line":665},[46,119006,119007],{"class":2253},"#彻底升级（处理依赖关系，可能删除旧包）\n",[46,119009,119010,119012,119014],{"class":48,"line":670},[46,119011,170],{"class":169},[46,119013,118945],{"class":173},[46,119015,119016],{"class":173}," full-upgrade\n",[46,119018,119019],{"class":48,"line":676},[46,119020,119021],{"class":2253},"#设置指定版本\n",[46,119023,119024,119026,119028,119030,119032,119035,119037,119039,119041,119043,119046,119048],{"class":48,"line":682},[46,119025,170],{"class":169},[46,119027,118945],{"class":173},[46,119029,177],{"class":173},[46,119031,30890],{"class":52},[46,119033,119034],{"class":173},"package_nam",[46,119036,2269],{"class":56},[46,119038,884],{"class":52},[46,119040,79],{"class":173},[46,119042,821],{"class":52},[46,119044,119045],{"class":173},"version_numbe",[46,119047,2856],{"class":56},[46,119049,53274],{"class":52},[46,119051,119052],{"class":48,"line":688},[46,119053,119054],{"class":2253},"#只安装软件包不升级\n",[46,119056,119057,119059,119061,119063,119065,119067,119069,119071],{"class":48,"line":693},[46,119058,170],{"class":169},[46,119060,118945],{"class":173},[46,119062,177],{"class":173},[46,119064,30890],{"class":52},[46,119066,119034],{"class":173},[46,119068,2269],{"class":56},[46,119070,884],{"class":52},[46,119072,119073],{"class":180}," --no-upgrade\n",[46,119075,119076],{"class":48,"line":699},[46,119077,119078],{"class":2253},"#只升级，不存在就不安装\n",[46,119080,119081,119083,119085,119087,119089,119091,119093,119095],{"class":48,"line":705},[46,119082,170],{"class":169},[46,119084,118945],{"class":173},[46,119086,177],{"class":173},[46,119088,30890],{"class":52},[46,119090,119034],{"class":173},[46,119092,2269],{"class":56},[46,119094,884],{"class":52},[46,119096,119097],{"class":180}," --only-upgrade\n",[46,119099,119100],{"class":48,"line":711},[46,119101,616],{"emptyLinePlaceholder":615},[46,119103,119104],{"class":48,"line":717},[46,119105,119106],{"class":2253},"#安装指定的软件命令\n",[46,119108,119109,119111,119113,119115,119117,119119,119121],{"class":48,"line":723},[46,119110,170],{"class":169},[46,119112,118945],{"class":173},[46,119114,177],{"class":173},[46,119116,30890],{"class":52},[46,119118,119034],{"class":173},[46,119120,2269],{"class":56},[46,119122,53274],{"class":52},[46,119124,119125],{"class":48,"line":729},[46,119126,616],{"emptyLinePlaceholder":615},[46,119128,119129],{"class":48,"line":735},[46,119130,119131],{"class":2253},"#安装多个软件包\n",[46,119133,119134,119136,119138,119140,119142,119145,119148,119150,119152,119155,119157,119159],{"class":48,"line":740},[46,119135,170],{"class":169},[46,119137,118945],{"class":173},[46,119139,177],{"class":173},[46,119141,30890],{"class":52},[46,119143,119144],{"class":173},"package_",[46,119146,119147],{"class":52},"1>",[46,119149,30890],{"class":52},[46,119151,119144],{"class":173},[46,119153,119154],{"class":52},"2>",[46,119156,30890],{"class":52},[46,119158,119144],{"class":173},[46,119160,119161],{"class":52},"3>\n",[46,119163,119164],{"class":48,"line":745},[46,119165,616],{"emptyLinePlaceholder":615},[46,119167,119168],{"class":48,"line":763},[46,119169,119170],{"class":2253},"#更新指定的软件命令\n",[46,119172,119173,119175,119177,119179,119181,119183,119185],{"class":48,"line":778},[46,119174,170],{"class":169},[46,119176,118945],{"class":173},[46,119178,118975],{"class":173},[46,119180,30890],{"class":52},[46,119182,119034],{"class":173},[46,119184,2269],{"class":56},[46,119186,53274],{"class":52},[46,119188,119189],{"class":48,"line":789},[46,119190,616],{"emptyLinePlaceholder":615},[46,119192,119193],{"class":48,"line":794},[46,119194,119195],{"class":2253},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[46,119197,119198,119200,119203,119205,119207,119209],{"class":48,"line":806},[46,119199,118996],{"class":169},[46,119201,119202],{"class":173}," show",[46,119204,30890],{"class":52},[46,119206,119034],{"class":173},[46,119208,2269],{"class":56},[46,119210,53274],{"class":52},[46,119212,119213],{"class":48,"line":829},[46,119214,616],{"emptyLinePlaceholder":615},[46,119216,119217],{"class":48,"line":840},[46,119218,119219],{"class":2253},"#删除软件包命令\n",[46,119221,119222,119224,119226,119228,119230,119232,119234],{"class":48,"line":846},[46,119223,170],{"class":169},[46,119225,118945],{"class":173},[46,119227,28070],{"class":173},[46,119229,30890],{"class":52},[46,119231,119034],{"class":173},[46,119233,2269],{"class":56},[46,119235,53274],{"class":52},[46,119237,119238],{"class":48,"line":852},[46,119239,616],{"emptyLinePlaceholder":615},[46,119241,119242],{"class":48,"line":857},[46,119243,119244],{"class":2253},"# 清理旧版本和缓存（释放磁盘空间）\n",[46,119246,119247,119249,119251,119254],{"class":48,"line":875},[46,119248,170],{"class":169},[46,119250,118945],{"class":173},[46,119252,119253],{"class":173}," autoremove",[46,119255,119256],{"class":2253},"  # 删除不再需要的依赖和库文件\n",[46,119258,119259,119261,119263,119266],{"class":48,"line":892},[46,119260,170],{"class":169},[46,119262,118945],{"class":173},[46,119264,119265],{"class":173}," clean",[46,119267,119268],{"class":2253},"       # 清理下载的缓存包\n",[46,119270,119271],{"class":48,"line":898},[46,119272,616],{"emptyLinePlaceholder":615},[46,119274,119275],{"class":48,"line":903},[46,119276,119277],{"class":2253},"#移除软件包及配置文件\n",[46,119279,119280,119282,119284,119287,119289,119291,119293],{"class":48,"line":908},[46,119281,170],{"class":169},[46,119283,118945],{"class":173},[46,119285,119286],{"class":173}," purge",[46,119288,30890],{"class":52},[46,119290,119034],{"class":173},[46,119292,2269],{"class":56},[46,119294,53274],{"class":52},[46,119296,119297],{"class":48,"line":925},[46,119298,616],{"emptyLinePlaceholder":615},[46,119300,119301],{"class":48,"line":1238},[46,119302,119303],{"class":2253},"#查找软件包命令\n",[46,119305,119306,119308,119310,119313,119315,119318,119320],{"class":48,"line":1251},[46,119307,170],{"class":169},[46,119309,118945],{"class":173},[46,119311,119312],{"class":173}," search",[46,119314,30890],{"class":52},[46,119316,119317],{"class":173},"keywor",[46,119319,2501],{"class":56},[46,119321,53274],{"class":52},[46,119323,119324],{"class":48,"line":1256},[46,119325,616],{"emptyLinePlaceholder":615},[46,119327,119328],{"class":48,"line":1261},[46,119329,119330],{"class":2253},"#列出所有已安装的包\n",[46,119332,119333,119335,119337],{"class":48,"line":1274},[46,119334,118996],{"class":169},[46,119336,118999],{"class":173},[46,119338,119339],{"class":180}," --installed\n",[46,119341,119342],{"class":48,"line":10061},[46,119343,616],{"emptyLinePlaceholder":615},[46,119345,119346],{"class":48,"line":11720},[46,119347,119348],{"class":2253},"#列出所有已安装的包的版本信息\n",[46,119350,119351,119353,119355],{"class":48,"line":11745},[46,119352,118996],{"class":169},[46,119354,118999],{"class":173},[46,119356,119357],{"class":180}," --all-versions\n",[2098,119359,119360],{},"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":41,"searchDepth":60,"depth":60,"links":119362},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":118907,"description":25378},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":119369,"title":119370,"body":119371,"description":25378,"extension":2125,"meta":120112,"navigation":615,"path":120113,"seo":120114,"stem":120115,"__hash__":120116},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":119372,"toc":120099},[119373,119376,119380,119383,119389,119393,119397,119403,119408,119413,119418,119423,119428,119431,119434,119437,119440,119444,119447,119452,119455,119460,119463,119468,119475,119478,119481,119484,119487,119490,119501,119505,119509,119514,119519,119523,119528,119532,119537,119541,119545,119550,119553,119598,119603,119607,119611,119616,119622,119627,119637,119642,119652,119657,119662,119689,119693,119696,119701,119704,119729,119733,119738,119741,119746,119751,119771,119776,119779,119794,119798,119851,119854,119859,119863,119866,119881,119884,119887,119892,119896,119900,119903,119907,119911,119914,119919,119924,119928,119935,119943,119946,119953,119958,119963,119966,119971,119978,119983,119990,119994,119996,120001,120005,120008,120011,120016,120019,120024,120027,120032,120037,120042,120046,120051,120055,120096],[10,119374,119370],{"id":119375},"_2-linux装机教程",[14,119377,119379],{"id":119378},"_21-实体机","2.1 实体机",[19,119381,119382],{},"使用清华源：（Ubuntu24.04）",[19,119384,119385],{},[2426,119386,119387],{"href":119387,"rel":119388},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[25862],[14,119390,119392],{"id":119391},"_22-普通虚拟机","2.2 普通虚拟机",[479,119394,119396],{"id":119395},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[19,119398,119399],{},[2426,119400,119401],{"href":119401,"rel":119402},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[25862],[19,119404,119405],{},[3514,119406],{"alt":41,"src":119407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[19,119409,119410],{},[3514,119411],{"alt":41,"src":119412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[19,119414,119415],{},[3514,119416],{"alt":41,"src":119417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[19,119419,119420],{},[3514,119421],{"alt":41,"src":119422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[19,119424,119425],{},[3514,119426],{"alt":41,"src":119427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[19,119429,119430],{},"内存4G（4096MB）；",[19,119432,119433],{},"CPU给4个核；",[19,119435,119436],{},"硬盘动态分配60G；",[19,119438,119439],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[479,119441,119443],{"id":119442},"_222-安装ubuntu","2.2.2 安装Ubuntu",[19,119445,119446],{},"按照1.1的步骤下载Ubuntu",[19,119448,119449],{},[3514,119450],{"alt":41,"src":119451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[19,119453,119454],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[19,119456,119457],{},[3514,119458],{"alt":41,"src":119459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[19,119461,119462],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[19,119464,119465],{},[3514,119466],{"alt":41,"src":119467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[19,119469,119470,119471,119474],{},"选择“正常安装”(找不到都用Alt+F7)， ",[2339,119472,119473],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[19,119476,119477],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[19,119479,119480],{},"将改动写入磁盘吗 继续",[19,119482,119483],{},"选择东八区（shanghai，大致在地图上点一下），继续",[19,119485,119486],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[19,119488,119489],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[19,119491,119492,119493,119496,119497,119500],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[2339,119494,119495],{},"除了"," 选不发送系统信息与不升级之外， ",[2339,119498,119499],{},"其它"," 都跳过或前进）",[479,119502,119504],{"id":119503},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[23999,119506,119508],{"id":119507},"_2231-全屏","2.2.3.1 全屏",[19,119510,119511],{},[3514,119512],{"alt":41,"src":119513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[19,119515,119516],{},[3514,119517],{"alt":41,"src":119518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[23999,119520,119522],{"id":119521},"_2232-文件交换","2.2.3.2 文件交换",[19,119524,119525],{},[3514,119526],{"alt":41,"src":119527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[23999,119529,119531],{"id":119530},"_2233-新建文本文档","2.2.3.3 新建文本文档",[19,119533,119534],{},[3514,119535],{"alt":41,"src":119536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,119538,119540],{"id":119539},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[479,119542,119544],{"id":119543},"_231-简介与优缺点","2.3.1 简介与优缺点",[23,119546,119547],{},[26,119548,119549],{},"什么情况下推荐？",[19,119551,119552],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[23,119554,119555],{"start":60},[26,119556,119557,119558],{},"优缺点：",[23,119559,119560,119590],{},[26,119561,119562,119563],{},"优点：",[23,119564,119565,119568,119575,119578,119581,119584,119587],{},[26,119566,119567],{},"WSL2是最好的Linux发行版;(bushi)",[26,119569,119570,119571,119574],{},"性能损耗极低。且比在Windows上跑深度性能 ",[2339,119572,119573],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[26,119576,119577],{},"非常方便调用USB设备，可以USB直通;",[26,119579,119580],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[26,119582,119583],{},"非常方便Win与WSL2互相传文件等协同操作;",[26,119585,119586],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[26,119588,119589],{},"非常方便使用Windows的VScode远程开发;",[26,119591,119592,119593],{},"缺点：",[23,119594,119595],{},[26,119596,119597],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[19,119599,119600],{},[3514,119601],{"alt":41,"src":119602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[479,119604,119606],{"id":119605},"_232-安装教程","2.3.2 安装教程",[23999,119608,119610],{"id":119609},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[23,119612,119613],{},[26,119614,119615],{},"方法一(图形界面)",[19,119617,119618,119619,26615],{},"用Win+R输入",[43,119620,119621],{},"appwiz.cpl",[19,119623,119624],{},[3514,119625],{"alt":41,"src":119626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[19,119628,119629,119630,119633,119634,28462],{},"点击OK进入 ",[2339,119631,119632],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[2339,119635,119636],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[19,119638,119639],{},[3514,119640],{"alt":41,"src":119641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[19,119643,119644,119645,1700,119648,119651],{},"选择 ",[2339,119646,119647],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[2339,119649,119650],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[19,119653,119654],{},[3514,119655],{"alt":41,"src":119656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[23,119658,119659],{"start":60},[26,119660,119661],{},"方法二(命令行)",[36,119663,119667],{"className":119664,"code":119665,"language":119666,"meta":41,"style":41},"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",[43,119668,119669,119674,119679,119684],{"__ignoreMap":41},[46,119670,119671],{"class":48,"line":49},[46,119672,119673],{},"# 开启 Linux 子系统\n",[46,119675,119676],{"class":48,"line":60},[46,119677,119678],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[46,119680,119681],{"class":48,"line":200},[46,119682,119683],{},"# 开启虚拟机平台\n",[46,119685,119686],{"class":48,"line":211},[46,119687,119688],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[23999,119690,119692],{"id":119691},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[19,119694,119695],{},"用管理员权限打开powershell",[19,119697,119698],{},[3514,119699],{"alt":41,"src":119700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[19,119702,119703],{},"升级WSL并设置默认版本为WSL2",[36,119705,119707],{"className":119664,"code":119706,"language":119666,"meta":41,"style":41},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[43,119708,119709,119714,119719,119724],{"__ignoreMap":41},[46,119710,119711],{"class":48,"line":49},[46,119712,119713],{},"# 更新 wsl\n",[46,119715,119716],{"class":48,"line":60},[46,119717,119718],{},"wsl --update\n",[46,119720,119721],{"class":48,"line":200},[46,119722,119723],{},"# 将 wsl 版本设置为 wsl2\n",[46,119725,119726],{"class":48,"line":211},[46,119727,119728],{},"wsl --set-default-version 2\n",[23999,119730,119732],{"id":119731},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[23,119734,119735],{},[26,119736,119737],{},"方式一(商店下载)",[19,119739,119740],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[19,119742,119743],{},[3514,119744],{"alt":41,"src":119745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[23,119747,119748],{"start":60},[26,119749,119750],{},"方式二(命令行安装)",[36,119752,119754],{"className":119664,"code":119753,"language":119666,"meta":41,"style":41},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[43,119755,119756,119761,119766],{"__ignoreMap":41},[46,119757,119758],{"class":48,"line":49},[46,119759,119760],{},"# 列出可安装的 Linux 版本\n",[46,119762,119763],{"class":48,"line":60},[46,119764,119765],{},"#（需要科学手段）\n",[46,119767,119768],{"class":48,"line":200},[46,119769,119770],{},"wsl --list --online\n",[19,119772,119773],{},[3514,119774],{"alt":41,"src":119775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[19,119777,119778],{},"选择对应发行版并安装",[36,119780,119782],{"className":119664,"code":119781,"language":119666,"meta":41,"style":41},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[43,119783,119784,119789],{"__ignoreMap":41},[46,119785,119786],{"class":48,"line":49},[46,119787,119788],{},"# Ubuntu安装完毕后需要重启系统\n",[46,119790,119791],{"class":48,"line":60},[46,119792,119793],{},"wsl --install -d Ubuntu-24.04\n",[23999,119795,119797],{"id":119796},"_2324-查看系统状态","2.3.2.4 查看系统状态",[36,119799,119801],{"className":119664,"code":119800,"language":119666,"meta":41,"style":41},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[43,119802,119803,119808,119813,119818,119823,119827,119831,119836,119841,119846],{"__ignoreMap":41},[46,119804,119805],{"class":48,"line":49},[46,119806,119807],{},"# 查看 wsl\n",[46,119809,119810],{"class":48,"line":60},[46,119811,119812],{},"wsl -l\n",[46,119814,119815],{"class":48,"line":200},[46,119816,119817],{},"# 查看 wsl 运行版本或模式\n",[46,119819,119820],{"class":48,"line":211},[46,119821,119822],{},"wsl -l -v\n",[46,119824,119825],{"class":48,"line":222},[46,119826,616],{"emptyLinePlaceholder":615},[46,119828,119829],{"class":48,"line":636},[46,119830,616],{"emptyLinePlaceholder":615},[46,119832,119833],{"class":48,"line":641},[46,119834,119835],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[46,119837,119838],{"class":48,"line":653},[46,119839,119840],{},"wsl --set-version \u003Cdistro> 2\n",[46,119842,119843],{"class":48,"line":659},[46,119844,119845],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[46,119847,119848],{"class":48,"line":665},[46,119849,119850],{},"wsl --unregister \u003Cdistro>\n",[19,119852,119853],{},"输出Version为2即正常",[19,119855,119856],{},[3514,119857],{"alt":41,"src":119858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[23999,119860,119862],{"id":119861},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[19,119864,119865],{},"直接在Powershell里输入wsl命令进入子系统",[36,119867,119869],{"className":119664,"code":119868,"language":119666,"meta":41,"style":41},"# 进入子系统\nwsl\n",[43,119870,119871,119876],{"__ignoreMap":41},[46,119872,119873],{"class":48,"line":49},[46,119874,119875],{},"# 进入子系统\n",[46,119877,119878],{"class":48,"line":60},[46,119879,119880],{},"wsl\n",[19,119882,119883],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[19,119885,119886],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[19,119888,119889],{},[3514,119890],{"alt":41,"src":119891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[479,119893,119895],{"id":119894},"_233-配置各种环境","2.3.3 配置各种环境",[23999,119897,119899],{"id":119898},"_2331-换源","2.3.3.1 换源",[19,119901,119902],{},"(同实体机LINUX，往下找教程)",[23999,119904,119906],{"id":119905},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[24911,119908,119910],{"id":119909},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[19,119912,119913],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[19,119915,119916],{},[3514,119917],{"alt":41,"src":119918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[19,119920,119921],{},[3514,119922],{"alt":41,"src":119923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[24911,119925,119927],{"id":119926},"_23322-cuda","2.3.3.2.2 CUDA",[19,119929,119930,119931],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[2426,119932,119933],{"href":119933,"rel":119934},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[25862],[19,119936,119937,119940],{},[3514,119938],{"alt":41,"src":119939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[3514,119941],{"alt":41,"src":119942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[19,119944,119945],{},"在下方的网站，选择合适的版本。",[19,119947,119948,119949],{},"WSL2 专属 CUDA 指南：",[2426,119950,119951],{"href":119951,"rel":119952},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[25862],[19,119954,119955],{},[2339,119956,119957],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[19,119959,119960],{},[3514,119961],{"alt":41,"src":119962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[19,119964,119965],{},"挨行敲一遍",[19,119967,119968],{},[3514,119969],{"alt":41,"src":119970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[19,119972,119973,119974,119977],{},"敲完后，输入",[43,119975,119976],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[19,119979,119980],{},[3514,119981],{"alt":41,"src":119982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[19,119984,119985,119986,119989],{},"（请详看下方教程的",[2339,119987,119988],{},"安装CUDA的配置环境来看","如何配置环境）",[24911,119991,119993],{"id":119992},"_23323-cudnn","2.3.3.2.3 cuDNN",[19,119995,119902],{},[19,119997,119998],{},[3514,119999],{"alt":41,"src":120000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[23999,120002,120004],{"id":120003},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[19,120006,120007],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[19,120009,120010],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[19,120012,120013],{},[3514,120014],{"alt":41,"src":120015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[19,120017,120018],{},"连接WSL2",[19,120020,120021],{},[3514,120022],{"alt":41,"src":120023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[19,120025,120026],{},"远程开发成功。",[19,120028,120029],{},[3514,120030],{"alt":41,"src":120031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[19,120033,120034],{},[3514,120035],{"alt":41,"src":120036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[19,120038,120039],{},[3514,120040],{"alt":41,"src":120041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[23999,120043,120045],{"id":120044},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[19,120047,120048],{},[3514,120049],{"alt":41,"src":120050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[23999,120052,120054],{"id":120053},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[36,120056,120058],{"className":118924,"code":120057,"language":118926,"meta":41,"style":41},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[43,120059,120060,120068,120076,120087,120091],{"__ignoreMap":41},[46,120061,120062,120064,120066],{"class":48,"line":49},[46,120063,170],{"class":169},[46,120065,118945],{"class":173},[46,120067,28233],{"class":173},[46,120069,120070,120072,120074],{"class":48,"line":60},[46,120071,170],{"class":169},[46,120073,118945],{"class":173},[46,120075,118961],{"class":173},[46,120077,120078,120080,120082,120084],{"class":48,"line":200},[46,120079,170],{"class":169},[46,120081,118945],{"class":173},[46,120083,177],{"class":173},[46,120085,120086],{"class":173}," mesa-utils\n",[46,120088,120089],{"class":48,"line":211},[46,120090,616],{"emptyLinePlaceholder":615},[46,120092,120093],{"class":48,"line":222},[46,120094,120095],{"class":2253},"#然后重启wsl2即可\n",[2098,120097,120098],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":41,"searchDepth":60,"depth":60,"links":120100},[120101,120102,120107],{"id":119378,"depth":60,"text":119379},{"id":119391,"depth":60,"text":119392,"children":120103},[120104,120105,120106],{"id":119395,"depth":200,"text":119396},{"id":119442,"depth":200,"text":119443},{"id":119503,"depth":200,"text":119504},{"id":119539,"depth":60,"text":119540,"children":120108},[120109,120110,120111],{"id":119543,"depth":200,"text":119544},{"id":119605,"depth":200,"text":119606},{"id":119894,"depth":200,"text":119895},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":119370,"description":25378},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":120118,"title":120119,"body":120120,"description":25378,"extension":2125,"meta":123056,"navigation":615,"path":123057,"seo":123058,"stem":123059,"__hash__":123060},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":120121,"toc":123028},[120122,120125,120129,120135,120139,120145,120149,120337,120340,120345,120349,120353,120356,120359,120365,120370,120373,120376,120381,120414,120419,120423,120500,120503,120508,120512,120515,120554,120557,120566,120584,120589,120596,120713,120718,120721,120748,120753,120757,120766,120816,120823,120827,120830,120844,120851,120885,120890,120894,120917,120920,120925,120929,120932,120935,120938,120980,120984,120987,120990,121031,121035,121039,121042,121047,121052,121055,121078,121081,121089,121094,121097,121102,121107,121110,121115,121119,121124,121147,121152,121214,121222,121227,121232,121235,121240,121243,121248,121253,121271,121276,121282,121287,121301,121305,121308,121311,121314,121357,121360,121365,121466,121469,121474,121478,121482,121519,121523,121527,121531,121577,121581,121626,121630,121637,121645,121700,121703,121780,121783,121806,121810,121813,121818,121823,121831,121834,121839,121844,121849,121852,121857,121866,121869,121874,121877,121948,121953,121956,121961,121964,121969,121972,121977,121980,121985,121990,121993,122068,122071,122084,122089,122092,122106,122109,122138,122143,122172,122175,122180,122184,122189,122198,122201,122206,122209,122214,122217,122220,122225,122228,122233,122238,122241,122246,122249,122374,122379,122409,122412,122417,122422,122439,122442,122485,122488,122515,122520,122533,122676,122680,122685,122699,122702,122753,122756,122786,122789,122805,122810,122824,122827,122894,122899,122908,122913,122916,122928,122933,122940,122964,122967,122972,122975,122994,122999,123006,123018,123025],[10,120123,120119],{"id":120124},"_3-安装必备配置",[14,120126,120128],{"id":120127},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[36,120130,120133],{"className":120131,"code":120132,"language":571},[569],"  打开下方网站（注意，该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",[43,120134,120132],{"__ignoreMap":41},[479,120136,120138],{"id":120137},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[36,120140,120143],{"className":120141,"code":120142,"language":571},[569],"  输入以下命令\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",[43,120144,120142],{"__ignoreMap":41},[479,120146,120148],{"id":120147},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[36,120150,120154],{"className":120151,"code":120152,"language":120153,"meta":41,"style":41},"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",[43,120155,120156,120164,120175,120187,120201,120205,120215,120220,120224,120228,120233,120237,120249,120253,120258,120262,120273,120277,120293,120297,120308,120312,120317,120321,120329],{"__ignoreMap":41},[46,120157,120158,120160,120162],{"class":48,"line":49},[46,120159,170],{"class":169},[46,120161,118945],{"class":173},[46,120163,28233],{"class":173},[46,120165,120166,120168,120170,120172],{"class":48,"line":60},[46,120167,170],{"class":169},[46,120169,118945],{"class":173},[46,120171,177],{"class":173},[46,120173,120174],{"class":173}," vim\n",[46,120176,120177,120179,120182,120184],{"class":48,"line":200},[46,120178,170],{"class":169},[46,120180,120181],{"class":173}," rm",[46,120183,27317],{"class":180},[46,120185,120186],{"class":173}," \u002Fetc\u002Fapt\u002Fsources.list\n",[46,120188,120189,120191,120193,120195,120198],{"class":48,"line":211},[46,120190,170],{"class":169},[46,120192,120181],{"class":173},[46,120194,27317],{"class":180},[46,120196,120197],{"class":173}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[46,120199,120200],{"class":180},"**\n",[46,120202,120203],{"class":48,"line":222},[46,120204,616],{"emptyLinePlaceholder":615},[46,120206,120207,120209,120212],{"class":48,"line":636},[46,120208,170],{"class":169},[46,120210,120211],{"class":173}," vim",[46,120213,120214],{"class":173}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[46,120216,120217],{"class":48,"line":641},[46,120218,120219],{"class":173},"```\n",[46,120221,120222],{"class":48,"line":653},[46,120223,616],{"emptyLinePlaceholder":615},[46,120225,120226],{"class":48,"line":659},[46,120227,616],{"emptyLinePlaceholder":615},[46,120229,120230],{"class":48,"line":665},[46,120231,120232],{"class":169},"选择好Ubuntu版本后，复制下方的内容。\n",[46,120234,120235],{"class":48,"line":670},[46,120236,616],{"emptyLinePlaceholder":615},[46,120238,120239,120241,120244,120247],{"class":48,"line":676},[46,120240,2414],{"class":52},[46,120242,120243],{"class":173},"[](",[46,120245,120246],{"class":169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[46,120248,459],{"class":173},[46,120250,120251],{"class":48,"line":682},[46,120252,616],{"emptyLinePlaceholder":615},[46,120254,120255],{"class":48,"line":688},[46,120256,120257],{"class":169},"粘贴进去\n",[46,120259,120260],{"class":48,"line":693},[46,120261,616],{"emptyLinePlaceholder":615},[46,120263,120264,120266,120268,120271],{"class":48,"line":699},[46,120265,2414],{"class":52},[46,120267,120243],{"class":173},[46,120269,120270],{"class":169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[46,120272,459],{"class":173},[46,120274,120275],{"class":48,"line":705},[46,120276,616],{"emptyLinePlaceholder":615},[46,120278,120279,120282,120285,120288,120290],{"class":48,"line":711},[46,120280,120281],{"class":169},"按一下ESC，然后英文冒号，输入",[46,120283,120284],{"class":173}," `",[46,120286,120287],{"class":169},":wq!",[46,120289,3156],{"class":173},[46,120291,120292],{"class":169},"然后回车\n",[46,120294,120295],{"class":48,"line":717},[46,120296,616],{"emptyLinePlaceholder":615},[46,120298,120299,120301,120303,120306],{"class":48,"line":723},[46,120300,2414],{"class":52},[46,120302,120243],{"class":173},[46,120304,120305],{"class":169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[46,120307,459],{"class":173},[46,120309,120310],{"class":48,"line":729},[46,120311,616],{"emptyLinePlaceholder":615},[46,120313,120314],{"class":48,"line":735},[46,120315,120316],{"class":169},"输入以下命令\n",[46,120318,120319],{"class":48,"line":740},[46,120320,616],{"emptyLinePlaceholder":615},[46,120322,120323,120326],{"class":48,"line":745},[46,120324,120325],{"class":173},"```",[46,120327,120328],{"class":169},"Bash\n",[46,120330,120331,120333,120335],{"class":48,"line":763},[46,120332,170],{"class":169},[46,120334,118945],{"class":173},[46,120336,28233],{"class":173},[19,120338,120339],{},"这里被替换成对应学校则成功",[19,120341,120342],{},[3514,120343],{"alt":41,"src":120344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,120346,120348],{"id":120347},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[479,120350,120352],{"id":120351},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[19,120354,120355],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[19,120357,120358],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[19,120360,120361],{},[2426,120362,120363],{"href":120363,"rel":120364},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[25862],[19,120366,120367],{},[3514,120368],{"alt":41,"src":120369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[19,120371,120372],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[19,120374,120375],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[19,120377,120378],{},[3514,120379],{"alt":41,"src":120380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[36,120382,120384],{"className":118924,"code":120383,"language":118926,"meta":41,"style":41},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[43,120385,120386,120391,120398,120403],{"__ignoreMap":41},[46,120387,120388],{"class":48,"line":49},[46,120389,120390],{"class":2253},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[46,120392,120393,120395],{"class":48,"line":60},[46,120394,103205],{"class":180},[46,120396,120397],{"class":173}," ~\u002FDownloads\n",[46,120399,120400],{"class":48,"line":200},[46,120401,120402],{"class":2253},"#下方chrome安装包名不一定是这个，根据名字来看\n",[46,120404,120405,120407,120409,120411],{"class":48,"line":211},[46,120406,170],{"class":169},[46,120408,118945],{"class":173},[46,120410,177],{"class":173},[46,120412,120413],{"class":173}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[19,120415,120416],{},[3514,120417],{"alt":41,"src":120418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[479,120420,120422],{"id":120421},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[36,120424,120426],{"className":118924,"code":120425,"language":118926,"meta":41,"style":41},"# 老版\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",[43,120427,120428,120433,120441,120452,120457,120461,120466,120476,120484,120495],{"__ignoreMap":41},[46,120429,120430],{"class":48,"line":49},[46,120431,120432],{"class":2253},"# 老版\n",[46,120434,120435,120437,120439],{"class":48,"line":60},[46,120436,170],{"class":169},[46,120438,118945],{"class":173},[46,120440,28233],{"class":173},[46,120442,120443,120445,120447,120449],{"class":48,"line":200},[46,120444,170],{"class":169},[46,120446,118945],{"class":173},[46,120448,177],{"class":173},[46,120450,120451],{"class":173}," neofetch\n",[46,120453,120454],{"class":48,"line":211},[46,120455,120456],{"class":169},"neofetch\n",[46,120458,120459],{"class":48,"line":222},[46,120460,616],{"emptyLinePlaceholder":615},[46,120462,120463],{"class":48,"line":636},[46,120464,120465],{"class":2253},"# 新版\n",[46,120467,120468,120470,120473],{"class":48,"line":641},[46,120469,170],{"class":169},[46,120471,120472],{"class":173}," add-apt-repository",[46,120474,120475],{"class":173}," ppa:zhangsongcui3371\u002Ffastfetch\n",[46,120477,120478,120480,120482],{"class":48,"line":653},[46,120479,170],{"class":169},[46,120481,118945],{"class":173},[46,120483,28233],{"class":173},[46,120485,120486,120488,120490,120492],{"class":48,"line":659},[46,120487,170],{"class":169},[46,120489,118945],{"class":173},[46,120491,177],{"class":173},[46,120493,120494],{"class":173}," fastfetch\n",[46,120496,120497],{"class":48,"line":665},[46,120498,120499],{"class":169},"fastfetch\n",[19,120501,120502],{},"这里显示，一共有3162个debian的程序，7个snap程序",[19,120504,120505],{},[3514,120506],{"alt":41,"src":120507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[479,120509,120511],{"id":120510},"_323-移除snap应用","3.2.3 移除snap应用",[19,120513,120514],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[36,120516,120518],{"className":118924,"code":120517,"language":118926,"meta":41,"style":41},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[43,120519,120520,120532,120543],{"__ignoreMap":41},[46,120521,120522,120524,120526,120529],{"class":48,"line":49},[46,120523,170],{"class":169},[46,120525,28502],{"class":173},[46,120527,120528],{"class":173}," disable",[46,120530,120531],{"class":173}," snapd.service\n",[46,120533,120534,120536,120538,120540],{"class":48,"line":60},[46,120535,170],{"class":169},[46,120537,28502],{"class":173},[46,120539,120528],{"class":173},[46,120541,120542],{"class":173}," snapd.socket\n",[46,120544,120545,120547,120549,120551],{"class":48,"line":200},[46,120546,170],{"class":169},[46,120548,28502],{"class":173},[46,120550,120528],{"class":173},[46,120552,120553],{"class":173}," snapd.seeded.service\n",[19,120555,120556],{},"然后查看snap应用列表",[19,120558,120559,120560,120565],{},"根据你安装的选择不同（最小安装或普通安装），有",[2426,120561,120564],{"href":120562,"rel":120563},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[25862],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[36,120567,120569],{"className":118924,"code":120568,"language":118926,"meta":41,"style":41},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[43,120570,120571,120576],{"__ignoreMap":41},[46,120572,120573],{"class":48,"line":49},[46,120574,120575],{"class":2253},"# 查询当前系统上snap安装了哪些app\n",[46,120577,120578,120581],{"class":48,"line":60},[46,120579,120580],{"class":169},"snap",[46,120582,120583],{"class":173}," list\n",[19,120585,120586],{},[3514,120587],{"alt":41,"src":120588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[19,120590,120591,120592,120595],{},"卸载掉图中所有应用，按照 ",[2339,120593,120594],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[36,120597,120599],{"className":118924,"code":120598,"language":118926,"meta":41,"style":41},"#移除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",[43,120600,120601,120606,120618,120623,120634,120639,120650,120655,120666,120671,120675,120680,120691,120702],{"__ignoreMap":41},[46,120602,120603],{"class":48,"line":49},[46,120604,120605],{"class":2253},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[46,120607,120608,120610,120613,120615],{"class":48,"line":60},[46,120609,170],{"class":169},[46,120611,120612],{"class":173}," snap",[46,120614,28070],{"class":173},[46,120616,120617],{"class":173}," snap-store\n",[46,120619,120620],{"class":48,"line":200},[46,120621,120622],{"class":2253},"#移除firefox浏览器\n",[46,120624,120625,120627,120629,120631],{"class":48,"line":211},[46,120626,170],{"class":169},[46,120628,120612],{"class":173},[46,120630,28070],{"class":173},[46,120632,120633],{"class":173}," firefox\n",[46,120635,120636],{"class":48,"line":222},[46,120637,120638],{"class":2253},"#移除gnome-42-2204\n",[46,120640,120641,120643,120645,120647],{"class":48,"line":636},[46,120642,170],{"class":169},[46,120644,120612],{"class":173},[46,120646,28070],{"class":173},[46,120648,120649],{"class":173}," gnome-42-2204\n",[46,120651,120652],{"class":48,"line":641},[46,120653,120654],{"class":2253},"#移除gtk-common-themes\n",[46,120656,120657,120659,120661,120663],{"class":48,"line":653},[46,120658,170],{"class":169},[46,120660,120612],{"class":173},[46,120662,28070],{"class":173},[46,120664,120665],{"class":173}," gtk-common-themes\n",[46,120667,120668],{"class":48,"line":659},[46,120669,120670],{"class":2253},"#移除其它...\n",[46,120672,120673],{"class":48,"line":665},[46,120674,4695],{"class":56},[46,120676,120677],{"class":48,"line":670},[46,120678,120679],{"class":2253},"#移除core22,bare以及snapd\n",[46,120681,120682,120684,120686,120688],{"class":48,"line":676},[46,120683,170],{"class":169},[46,120685,120612],{"class":173},[46,120687,28070],{"class":173},[46,120689,120690],{"class":173}," core22\n",[46,120692,120693,120695,120697,120699],{"class":48,"line":682},[46,120694,170],{"class":169},[46,120696,120612],{"class":173},[46,120698,28070],{"class":173},[46,120700,120701],{"class":173}," bare\n",[46,120703,120704,120706,120708,120710],{"class":48,"line":688},[46,120705,170],{"class":169},[46,120707,120612],{"class":173},[46,120709,28070],{"class":173},[46,120711,120712],{"class":173}," snapd\n",[19,120714,120715],{},[3514,120716],{"alt":41,"src":120717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[19,120719,120720],{},"输入以下命令查看是否还有snap包",[36,120722,120724],{"className":118924,"code":120723,"language":118926,"meta":41,"style":41},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[43,120725,120726,120732,120736,120740,120744],{"__ignoreMap":41},[46,120727,120728,120730],{"class":48,"line":49},[46,120729,120580],{"class":169},[46,120731,120583],{"class":173},[46,120733,120734],{"class":48,"line":60},[46,120735,120432],{"class":2253},[46,120737,120738],{"class":48,"line":200},[46,120739,120456],{"class":169},[46,120741,120742],{"class":48,"line":211},[46,120743,120465],{"class":2253},[46,120745,120746],{"class":48,"line":222},[46,120747,120499],{"class":169},[19,120749,120750],{},[3514,120751],{"alt":41,"src":120752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[479,120754,120756],{"id":120755},"_324-移除snap","3.2.4 移除snap",[19,120758,120759,120760,120765],{},"在删除掉",[2426,120761,120764],{"href":120762,"rel":120763},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[25862],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[36,120767,120769],{"className":118924,"code":120768,"language":118926,"meta":41,"style":41}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[43,120770,120771,120776,120789,120794,120805],{"__ignoreMap":41},[46,120772,120773],{"class":48,"line":49},[46,120774,120775],{"class":2253}," #使用apt移除掉snap\n",[46,120777,120778,120780,120782,120784,120787],{"class":48,"line":60},[46,120779,170],{"class":169},[46,120781,118945],{"class":173},[46,120783,119253],{"class":173},[46,120785,120786],{"class":180}," --purge",[46,120788,120712],{"class":173},[46,120790,120791],{"class":48,"line":200},[46,120792,120793],{"class":2253},"#移除snapd的一些目录\n",[46,120795,120796,120798,120800,120802],{"class":48,"line":211},[46,120797,170],{"class":169},[46,120799,120181],{"class":173},[46,120801,27317],{"class":180},[46,120803,120804],{"class":173}," \u002Fvar\u002Fcache\u002Fsnapd\n",[46,120806,120807,120809,120811,120813],{"class":48,"line":222},[46,120808,170],{"class":169},[46,120810,120181],{"class":173},[46,120812,27317],{"class":180},[46,120814,120815],{"class":173}," ~\u002Fsnap\n",[19,120817,120818,120819,120822],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[43,120820,120821],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[479,120824,120826],{"id":120825},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[19,120828,120829],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[36,120831,120833],{"className":118924,"code":120832,"language":118926,"meta":41,"style":41},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[43,120834,120835],{"__ignoreMap":41},[46,120836,120837,120839,120841],{"class":48,"line":49},[46,120838,170],{"class":169},[46,120840,120211],{"class":173},[46,120842,120843],{"class":173}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[19,120845,120846,120847,120850],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[43,120848,120849],{},":wq"," 回车",[36,120852,120854],{"className":118924,"code":120853,"language":118926,"meta":41,"style":41},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[43,120855,120856,120863,120877],{"__ignoreMap":41},[46,120857,120858,120861],{"class":48,"line":49},[46,120859,120860],{"class":169},"Package:",[46,120862,120712],{"class":173},[46,120864,120865,120868,120871,120874],{"class":48,"line":60},[46,120866,120867],{"class":169},"Pin:",[46,120869,120870],{"class":173}," release",[46,120872,120873],{"class":173}," a=",[46,120875,120876],{"class":180},"*\n",[46,120878,120879,120882],{"class":48,"line":200},[46,120880,120881],{"class":169},"Pin-Priority:",[46,120883,120884],{"class":180}," -10\n",[19,120886,120887],{},[3514,120888],{"alt":41,"src":120889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[479,120891,120893],{"id":120892},"_326-测试是否成功","3.2.6 测试是否成功",[36,120895,120897],{"className":118924,"code":120896,"language":118926,"meta":41,"style":41},"sudo apt update\nsudo apt install firefox\n",[43,120898,120899,120907],{"__ignoreMap":41},[46,120900,120901,120903,120905],{"class":48,"line":49},[46,120902,170],{"class":169},[46,120904,118945],{"class":173},[46,120906,28233],{"class":173},[46,120908,120909,120911,120913,120915],{"class":48,"line":60},[46,120910,170],{"class":169},[46,120912,118945],{"class":173},[46,120914,177],{"class":173},[46,120916,120633],{"class":173},[19,120918,120919],{},"这里提示snapd无法被安装，就证明成功了",[19,120921,120922],{},[3514,120923],{"alt":41,"src":120924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[479,120926,120928],{"id":120927},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[19,120930,120931],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[19,120933,120934],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[19,120936,120937],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[36,120939,120941],{"className":118924,"code":120940,"language":118926,"meta":41,"style":41},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[43,120942,120943,120948,120957,120962,120970],{"__ignoreMap":41},[46,120944,120945],{"class":48,"line":49},[46,120946,120947],{"class":2253},"# 添加Mozilla提供的源\n",[46,120949,120950,120952,120954],{"class":48,"line":60},[46,120951,170],{"class":169},[46,120953,120472],{"class":173},[46,120955,120956],{"class":173}," ppa:mozillateam\u002Fppa\n",[46,120958,120959],{"class":48,"line":200},[46,120960,120961],{"class":2253},"# 安装Firefox\n",[46,120963,120964,120966,120968],{"class":48,"line":211},[46,120965,170],{"class":169},[46,120967,118945],{"class":173},[46,120969,28233],{"class":173},[46,120971,120972,120974,120976,120978],{"class":48,"line":222},[46,120973,170],{"class":169},[46,120975,118945],{"class":173},[46,120977,177],{"class":173},[46,120979,120633],{"class":173},[479,120981,120983],{"id":120982},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[19,120985,120986],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[19,120988,120989],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[36,120991,120993],{"className":118924,"code":120992,"language":118926,"meta":41,"style":41},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[43,120994,120995,121000,121010,121018,121022],{"__ignoreMap":41},[46,120996,120997],{"class":48,"line":49},[46,120998,120999],{"class":2253},"#删掉禁止安装snap的配置文件\n",[46,121001,121002,121004,121006,121008],{"class":48,"line":60},[46,121003,170],{"class":169},[46,121005,120181],{"class":173},[46,121007,27317],{"class":180},[46,121009,120843],{"class":173},[46,121011,121012,121014,121016],{"class":48,"line":200},[46,121013,170],{"class":169},[46,121015,118945],{"class":173},[46,121017,28233],{"class":173},[46,121019,121020],{"class":48,"line":211},[46,121021,616],{"emptyLinePlaceholder":615},[46,121023,121024,121026,121028],{"class":48,"line":222},[46,121025,170],{"class":169},[46,121027,118945],{"class":173},[46,121029,121030],{"class":173}," dist-update\n",[14,121032,121034],{"id":121033},"_33-中文输入法","3.3 中文输入法",[479,121036,121038],{"id":121037},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[19,121040,121041],{},"官网下载搜狗输入法",[19,121043,121044],{},[3514,121045],{"alt":41,"src":121046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[19,121048,121049],{},[3514,121050],{"alt":41,"src":121051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[19,121053,121054],{},"打开终端输入如下",[36,121056,121058],{"className":118924,"code":121057,"language":118926,"meta":41,"style":41},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[43,121059,121060,121067],{"__ignoreMap":41},[46,121061,121062,121064],{"class":48,"line":49},[46,121063,103205],{"class":180},[46,121065,121066],{"class":173}," ~\u002FDownloads\u002F\n",[46,121068,121069,121071,121073,121075],{"class":48,"line":60},[46,121070,170],{"class":169},[46,121072,118945],{"class":173},[46,121074,177],{"class":173},[46,121076,121077],{"class":173}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[19,121079,121080],{},"打开Fcitx",[19,121082,121083,121086],{},[3514,121084],{"alt":41,"src":121085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[3514,121087],{"alt":41,"src":121088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[19,121090,121091],{},[3514,121092],{"alt":41,"src":121093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[19,121095,121096],{},"添加搜狗输入法",[19,121098,121099],{},[3514,121100],{"alt":41,"src":121101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[19,121103,121104],{},[3514,121105],{"alt":41,"src":121106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[19,121108,121109],{},"将搜狗输入法设置为唯一输入法",[19,121111,121112],{},[3514,121113],{"alt":41,"src":121114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[479,121116,121118],{"id":121117},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[23,121120,121121],{},[26,121122,121123],{},"卸载旧输入法",[36,121125,121127],{"className":120151,"code":121126,"language":120153,"meta":41,"style":41},"sudo apt purge fcitx* ibus*\n",[43,121128,121129],{"__ignoreMap":41},[46,121130,121131,121133,121135,121137,121140,121142,121145],{"class":48,"line":49},[46,121132,170],{"class":169},[46,121134,118945],{"class":173},[46,121136,119286],{"class":173},[46,121138,121139],{"class":173}," fcitx",[46,121141,2642],{"class":180},[46,121143,121144],{"class":173}," ibus",[46,121146,120876],{"class":180},[23,121148,121149],{"start":60},[26,121150,121151],{},"安装Fcitx5",[36,121153,121155],{"className":118924,"code":121154,"language":118926,"meta":41,"style":41},"# 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",[43,121156,121157,121162,121176,121180,121185,121194,121202],{"__ignoreMap":41},[46,121158,121159],{"class":48,"line":49},[46,121160,121161],{"class":2253},"# Ubuntu22.04及以上、Debian12及以上\n",[46,121163,121164,121166,121168,121170,121173],{"class":48,"line":60},[46,121165,170],{"class":169},[46,121167,118945],{"class":173},[46,121169,177],{"class":173},[46,121171,121172],{"class":173}," fcitx5",[46,121174,121175],{"class":173}," fcitx5-chinese-addons\n",[46,121177,121178],{"class":48,"line":200},[46,121179,616],{"emptyLinePlaceholder":615},[46,121181,121182],{"class":48,"line":211},[46,121183,121184],{"class":2253},"# Ubuntu20.04\n",[46,121186,121187,121189,121191],{"class":48,"line":222},[46,121188,170],{"class":169},[46,121190,120472],{"class":173},[46,121192,121193],{"class":173}," ppa:zhsj\u002Ffcitx5\n",[46,121195,121196,121198,121200],{"class":48,"line":636},[46,121197,170],{"class":169},[46,121199,118945],{"class":173},[46,121201,28233],{"class":173},[46,121203,121204,121206,121208,121210,121212],{"class":48,"line":641},[46,121205,170],{"class":169},[46,121207,118945],{"class":173},[46,121209,177],{"class":173},[46,121211,121172],{"class":173},[46,121213,121175],{"class":173},[23,121215,121216,121219],{"start":200},[26,121217,121218],{},"Reboot System",[26,121220,121221],{},"启动Fcitx5",[19,121223,121224],{},[3514,121225],{"alt":41,"src":121226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[23,121228,121229],{"start":222},[26,121230,121231],{},"修改一些设置",[19,121233,121234],{},"将Pinyin和Keyboard - English US加入到左边。",[19,121236,121237],{},[3514,121238],{"alt":41,"src":121239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[19,121241,121242],{},"添加快捷键以便于更好切换中英文",[19,121244,121245],{},[3514,121246],{"alt":41,"src":121247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[23,121249,121250],{"start":636},[26,121251,121252],{},"重启",[36,121254,121256],{"className":120151,"code":121255,"language":120153,"meta":41,"style":41},"sudo shutdown -r now\n",[43,121257,121258],{"__ignoreMap":41},[46,121259,121260,121262,121265,121268],{"class":48,"line":49},[46,121261,170],{"class":169},[46,121263,121264],{"class":173}," shutdown",[46,121266,121267],{"class":180}," -r",[46,121269,121270],{"class":173}," now\n",[23,121272,121273],{"start":641},[26,121274,121275],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[19,121277,121278],{},[2426,121279,121280],{"href":121280,"rel":121281},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[25862],[23,121283,121284],{"start":653},[26,121285,121286],{},"再重启",[36,121288,121289],{"className":120151,"code":121255,"language":120153,"meta":41,"style":41},[43,121290,121291],{"__ignoreMap":41},[46,121292,121293,121295,121297,121299],{"class":48,"line":49},[46,121294,170],{"class":169},[46,121296,121264],{"class":173},[46,121298,121267],{"class":180},[46,121300,121270],{"class":173},[14,121302,121304],{"id":121303},"_34-pip3源替换","3.4 pip3源替换",[19,121306,121307],{},"非Debian系发行版需要做。",[19,121309,121310],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[19,121312,121313],{},"使用dnf的系统也可能不用做。",[36,121315,121317],{"className":118924,"code":121316,"language":118926,"meta":41,"style":41},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[43,121318,121319,121324,121331,121336,121341],{"__ignoreMap":41},[46,121320,121321],{"class":48,"line":49},[46,121322,121323],{"class":2253},"# 检查是否已安装 pip\n",[46,121325,121326,121329],{"class":48,"line":60},[46,121327,121328],{"class":169},"pip3",[46,121330,28284],{"class":180},[46,121332,121333],{"class":48,"line":200},[46,121334,121335],{"class":2253},"# 如果未安装，先安装 pip3（见下方）\n",[46,121337,121338],{"class":48,"line":211},[46,121339,121340],{"class":2253},"# 配置 pip 使用清华源\n",[46,121342,121343,121345,121348,121351,121354],{"class":48,"line":222},[46,121344,121328],{"class":169},[46,121346,121347],{"class":173}," config",[46,121349,121350],{"class":173}," set",[46,121352,121353],{"class":173}," global.index-url",[46,121355,121356],{"class":173}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[19,121358,121359],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[19,121361,121362],{},[3514,121363],{"alt":41,"src":121364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[36,121366,121368],{"className":118924,"code":121367,"language":118926,"meta":41,"style":41},"#安装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",[43,121369,121370,121375,121383,121394,121398,121403,121422,121426,121431,121443,121447,121452],{"__ignoreMap":41},[46,121371,121372],{"class":48,"line":49},[46,121373,121374],{"class":2253},"#安装pip3\n",[46,121376,121377,121379,121381],{"class":48,"line":60},[46,121378,170],{"class":169},[46,121380,118945],{"class":173},[46,121382,28233],{"class":173},[46,121384,121385,121387,121389,121391],{"class":48,"line":200},[46,121386,170],{"class":169},[46,121388,28067],{"class":173},[46,121390,177],{"class":173},[46,121392,121393],{"class":173}," python3-pip\n",[46,121395,121396],{"class":48,"line":211},[46,121397,616],{"emptyLinePlaceholder":615},[46,121399,121400],{"class":48,"line":222},[46,121401,121402],{"class":2253},"#更新pip3\n",[46,121404,121405,121407,121409,121411,121413,121415,121418,121420],{"class":48,"line":636},[46,121406,102823],{"class":169},[46,121408,102826],{"class":180},[46,121410,102849],{"class":173},[46,121412,177],{"class":173},[46,121414,28419],{"class":180},[46,121416,121417],{"class":173}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[46,121419,102854],{"class":180},[46,121421,102857],{"class":173},[46,121423,121424],{"class":48,"line":641},[46,121425,616],{"emptyLinePlaceholder":615},[46,121427,121428],{"class":48,"line":653},[46,121429,121430],{"class":2253},"#设置pip源为清华源\n",[46,121432,121433,121435,121437,121439,121441],{"class":48,"line":659},[46,121434,121328],{"class":169},[46,121436,121347],{"class":173},[46,121438,121350],{"class":173},[46,121440,121353],{"class":173},[46,121442,121356],{"class":173},[46,121444,121445],{"class":48,"line":665},[46,121446,616],{"emptyLinePlaceholder":615},[46,121448,121449],{"class":48,"line":670},[46,121450,121451],{"class":2253},"#测试\n",[46,121453,121454,121456,121458,121460,121462,121464],{"class":48,"line":676},[46,121455,102823],{"class":169},[46,121457,102826],{"class":180},[46,121459,102849],{"class":173},[46,121461,177],{"class":173},[46,121463,102854],{"class":180},[46,121465,102857],{"class":173},[19,121467,121468],{},"成功的话，会看到Looking后面是tsinghua字样。",[19,121470,121471],{},[3514,121472],{"alt":41,"src":121473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,121475,121477],{"id":121476},"_35-显卡驱动安装","3.5 显卡驱动安装",[479,121479,121481],{"id":121480},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[36,121483,121485],{"className":120151,"code":121484,"language":120153,"meta":41,"style":41},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[43,121486,121487,121492,121507,121512],{"__ignoreMap":41},[46,121488,121489],{"class":48,"line":49},[46,121490,121491],{"class":2253},"# 如果是使用apt安装的驱动\n",[46,121493,121494,121496,121498,121500,121502,121505],{"class":48,"line":60},[46,121495,170],{"class":169},[46,121497,28067],{"class":173},[46,121499,28070],{"class":173},[46,121501,120786],{"class":180},[46,121503,121504],{"class":173}," nvidia",[46,121506,120876],{"class":180},[46,121508,121509],{"class":48,"line":200},[46,121510,121511],{"class":2253},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[46,121513,121514,121516],{"class":48,"line":211},[46,121515,170],{"class":169},[46,121517,121518],{"class":173}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[479,121520,121522],{"id":121521},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[23999,121524,121526],{"id":121525},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[24911,121528,121530],{"id":121529},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[36,121532,121534],{"className":120151,"code":121533,"language":120153,"meta":41,"style":41},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[43,121535,121536,121541,121552,121557,121567,121572],{"__ignoreMap":41},[46,121537,121538],{"class":48,"line":49},[46,121539,121540],{"class":2253},"# 安装英伟达驱动\n",[46,121542,121543,121545,121547,121549],{"class":48,"line":60},[46,121544,170],{"class":169},[46,121546,118945],{"class":173},[46,121548,177],{"class":173},[46,121550,121551],{"class":173}," nvidia-driver-版本号\n",[46,121553,121554],{"class":48,"line":200},[46,121555,121556],{"class":2253},"# 重启 \n",[46,121558,121559,121561,121563,121565],{"class":48,"line":211},[46,121560,170],{"class":169},[46,121562,121264],{"class":173},[46,121564,121267],{"class":180},[46,121566,121270],{"class":173},[46,121568,121569],{"class":48,"line":222},[46,121570,121571],{"class":2253},"# 检查驱动是否安装成功\n",[46,121573,121574],{"class":48,"line":636},[46,121575,121576],{"class":169},"nvidia-smi\n",[24911,121578,121580],{"id":121579},"_35212-debian","3.5.2.1.2 Debian",[36,121582,121584],{"className":120151,"code":121583,"language":120153,"meta":41,"style":41},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[43,121585,121586,121590,121604,121608,121618,121622],{"__ignoreMap":41},[46,121587,121588],{"class":48,"line":49},[46,121589,121540],{"class":2253},[46,121591,121592,121594,121596,121598,121601],{"class":48,"line":60},[46,121593,170],{"class":169},[46,121595,118945],{"class":173},[46,121597,177],{"class":173},[46,121599,121600],{"class":173}," nvidia-driver",[46,121602,121603],{"class":173}," nvidia-settings\n",[46,121605,121606],{"class":48,"line":200},[46,121607,121556],{"class":2253},[46,121609,121610,121612,121614,121616],{"class":48,"line":211},[46,121611,170],{"class":169},[46,121613,121264],{"class":173},[46,121615,121267],{"class":180},[46,121617,121270],{"class":173},[46,121619,121620],{"class":48,"line":222},[46,121621,121571],{"class":2253},[46,121623,121624],{"class":48,"line":636},[46,121625,121576],{"class":169},[23999,121627,121629],{"id":121628},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[19,121631,121632,121633,121636],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[2339,121634,121635],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[19,121638,121639,121640],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[25555,121641,121642],{},[2339,121643,121644],{},"（也可以不禁用桌面环境，直接进行下一步。）",[36,121646,121648],{"className":120151,"code":121647,"language":120153,"meta":41,"style":41},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[43,121649,121650,121655,121665,121670,121683,121688],{"__ignoreMap":41},[46,121651,121652],{"class":48,"line":49},[46,121653,121654],{"class":2253},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[46,121656,121657,121659,121662],{"class":48,"line":60},[46,121658,170],{"class":169},[46,121660,121661],{"class":173}," telinit",[46,121663,121664],{"class":180}," 3\n",[46,121666,121667],{"class":48,"line":200},[46,121668,121669],{"class":2253},"# ubuntu 使用下方命令\n",[46,121671,121672,121674,121677,121680],{"class":48,"line":211},[46,121673,170],{"class":169},[46,121675,121676],{"class":173}," service",[46,121678,121679],{"class":173}," lightdm",[46,121681,121682],{"class":173}," stop\n",[46,121684,121685],{"class":48,"line":222},[46,121686,121687],{"class":2253},"# Fedora 使用下方命令\n",[46,121689,121690,121692,121694,121697],{"class":48,"line":636},[46,121691,170],{"class":169},[46,121693,28502],{"class":173},[46,121695,121696],{"class":173}," isolate",[46,121698,121699],{"class":173}," multi-user.target\n",[19,121701,121702],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[36,121704,121706],{"className":120151,"code":121705,"language":120153,"meta":41,"style":41},"# 编译环境+准备工作\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",[43,121707,121708,121713,121724,121729,121736,121741,121753,121758,121765,121770],{"__ignoreMap":41},[46,121709,121710],{"class":48,"line":49},[46,121711,121712],{"class":2253},"# 编译环境+准备工作\n",[46,121714,121715,121717,121719,121721],{"class":48,"line":60},[46,121716,170],{"class":169},[46,121718,118945],{"class":173},[46,121720,177],{"class":173},[46,121722,121723],{"class":173}," build-essential\n",[46,121725,121726],{"class":48,"line":200},[46,121727,121728],{"class":2253},"# 进入到.run目录中\n",[46,121730,121731,121733],{"class":48,"line":211},[46,121732,103205],{"class":180},[46,121734,121735],{"class":173}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[46,121737,121738],{"class":48,"line":222},[46,121739,121740],{"class":2253},"# 给驱动文件增加可执行权限：\n",[46,121742,121743,121745,121747,121750],{"class":48,"line":636},[46,121744,170],{"class":169},[46,121746,26576],{"class":173},[46,121748,121749],{"class":173}," a+x",[46,121751,121752],{"class":173}," NVIDIA-Linux-x86_64-550.107.02.run\n",[46,121754,121755],{"class":48,"line":641},[46,121756,121757],{"class":2253},"# 然后执行安装：\n",[46,121759,121760,121762],{"class":48,"line":653},[46,121761,170],{"class":169},[46,121763,121764],{"class":173}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[46,121766,121767],{"class":48,"line":659},[46,121768,121769],{"class":2253},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[46,121771,121772,121774,121777],{"class":48,"line":665},[46,121773,170],{"class":169},[46,121775,121776],{"class":173}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[46,121778,121779],{"class":180},"  --no-opengl-files\n",[19,121781,121782],{},"安装完毕重启即可",[36,121784,121786],{"className":120151,"code":121785,"language":120153,"meta":41,"style":41},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[43,121787,121788,121792,121798,121802],{"__ignoreMap":41},[46,121789,121790],{"class":48,"line":49},[46,121791,121556],{"class":2253},[46,121793,121794,121796],{"class":48,"line":60},[46,121795,170],{"class":169},[46,121797,28636],{"class":173},[46,121799,121800],{"class":48,"line":200},[46,121801,121571],{"class":2253},[46,121803,121804],{"class":48,"line":211},[46,121805,121576],{"class":169},[479,121807,121809],{"id":121808},"_353-安装cuda","3.5.3 安装CUDA",[19,121811,121812],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[19,121814,121815],{},[3514,121816],{"alt":41,"src":121817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[23,121819,121820],{},[26,121821,121822],{},"先查看显卡驱动所支持的最高CUDA版本",[36,121824,121825],{"className":120151,"code":121576,"language":120153,"meta":41,"style":41},[43,121826,121827],{"__ignoreMap":41},[46,121828,121829],{"class":48,"line":49},[46,121830,121576],{"class":169},[19,121832,121833],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[19,121835,121836],{},[3514,121837],{"alt":41,"src":121838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[23,121840,121841],{"start":60},[26,121842,121843],{},"下载CUDA并安装CUDA",[19,121845,119930,121846],{},[2426,121847,119933],{"href":119933,"rel":121848},[25862],[19,121850,121851],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[19,121853,121854],{},[3514,121855],{"alt":41,"src":121856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[19,121858,121859,121860,121865],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[2426,121861,121864],{"href":121862,"rel":121863},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[25862],"Vinci机器人队单片机教程","）",[19,121867,121868],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[19,121870,121871],{},[3514,121872],{"alt":41,"src":121873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[19,121875,121876],{},"将最下方框框里的命令敲入终端",[36,121878,121880],{"className":120151,"code":121879,"language":120153,"meta":41,"style":41},"# 在当前文件夹下创建一个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",[43,121881,121882,121887,121896,121901,121908,121913,121921,121926,121937,121942],{"__ignoreMap":41},[46,121883,121884],{"class":48,"line":49},[46,121885,121886],{"class":2253},"# 在当前文件夹下创建一个ttt的子文件夹\n",[46,121888,121889,121891,121893],{"class":48,"line":60},[46,121890,103195],{"class":169},[46,121892,31203],{"class":180},[46,121894,121895],{"class":173}," .\u002Fttt\n",[46,121897,121898],{"class":48,"line":200},[46,121899,121900],{"class":2253},"# 进入ttt文件夹\n",[46,121902,121903,121905],{"class":48,"line":211},[46,121904,103205],{"class":180},[46,121906,121907],{"class":173}," ttt\n",[46,121909,121910],{"class":48,"line":222},[46,121911,121912],{"class":2253},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[46,121914,121915,121918],{"class":48,"line":636},[46,121916,121917],{"class":169},"wget",[46,121919,121920],{"class":173}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[46,121922,121923],{"class":48,"line":641},[46,121924,121925],{"class":2253},"# 给予权限\n",[46,121927,121928,121930,121932,121934],{"class":48,"line":653},[46,121929,170],{"class":169},[46,121931,26576],{"class":173},[46,121933,121749],{"class":173},[46,121935,121936],{"class":173}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[46,121938,121939],{"class":48,"line":659},[46,121940,121941],{"class":2253},"# 运行脚本\n",[46,121943,121944,121946],{"class":48,"line":665},[46,121945,170],{"class":169},[46,121947,121936],{"class":173},[19,121949,121950],{},[3514,121951],{"alt":41,"src":121952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[19,121954,121955],{},"正在安装中：",[19,121957,121958],{},[3514,121959],{"alt":41,"src":121960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[19,121962,121963],{},"输入accept接受即可",[19,121965,121966],{},[3514,121967],{"alt":41,"src":121968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[19,121970,121971],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[19,121973,121974],{},[3514,121975],{"alt":41,"src":121976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[19,121978,121979],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[19,121981,121982],{},[3514,121983],{"alt":41,"src":121984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[23,121986,121987],{"start":200},[26,121988,121989],{},"配置环境",[19,121991,121992],{},"根据上方确认一下路径，比如我上面红色框起来的为",[36,121994,121996],{"className":120151,"code":121995,"language":120153,"meta":41,"style":41},"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",[43,121997,121998,122014,122029],{"__ignoreMap":41},[46,121999,122000,122003,122006,122009,122012],{"class":48,"line":49},[46,122001,122002],{"class":169},"Please",[46,122004,122005],{"class":173}," make",[46,122007,122008],{"class":173}," sure",[46,122010,122011],{"class":173}," that",[46,122013,4695],{"class":56},[46,122015,122016,122018,122021,122024,122027],{"class":48,"line":60},[46,122017,54238],{"class":169},[46,122019,122020],{"class":173},"   PATH",[46,122022,122023],{"class":173}," includes",[46,122025,122026],{"class":173}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[46,122028,4695],{"class":56},[46,122030,122031,122033,122036,122038,122041,122044,122046,122049,122052,122055,122058,122060,122063,122065],{"class":48,"line":200},[46,122032,54238],{"class":169},[46,122034,122035],{"class":173},"   LD_LIBRARY_PATH",[46,122037,122023],{"class":173},[46,122039,122040],{"class":173}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[46,122042,122043],{"class":173}," or,",[46,122045,7223],{"class":173},[46,122047,122048],{"class":173}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[46,122050,122051],{"class":173}," to",[46,122053,122054],{"class":173}," \u002Fetc\u002Fld.so.conf",[46,122056,122057],{"class":173}," and",[46,122059,29219],{"class":173},[46,122061,122062],{"class":173}," ldconfig",[46,122064,66569],{"class":173},[46,122066,122067],{"class":173}," root\n",[19,122069,122070],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[36,122072,122074],{"className":120151,"code":122073,"language":120153,"meta":41,"style":41},"which nvcc\n",[43,122075,122076],{"__ignoreMap":41},[46,122077,122078,122081],{"class":48,"line":49},[46,122079,122080],{"class":180},"which",[46,122082,122083],{"class":173}," nvcc\n",[19,122085,122086],{},[3514,122087],{"alt":41,"src":122088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[19,122090,122091],{},"所以我进行以下操作：",[36,122093,122095],{"className":120151,"code":122094,"language":120153,"meta":41,"style":41},"sudo vim ~\u002F.bashrc\n",[43,122096,122097],{"__ignoreMap":41},[46,122098,122099,122101,122103],{"class":48,"line":49},[46,122100,170],{"class":169},[46,122102,120211],{"class":173},[46,122104,122105],{"class":173}," ~\u002F.bashrc\n",[19,122107,122108],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[36,122110,122112],{"className":120151,"code":122111,"language":120153,"meta":41,"style":41},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[43,122113,122114,122126],{"__ignoreMap":41},[46,122115,122116,122118,122121,122123],{"class":48,"line":49},[46,122117,327],{"class":52},[46,122119,122120],{"class":56}," PATH",[46,122122,79],{"class":52},[46,122124,122125],{"class":56},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[46,122127,122128,122130,122133,122135],{"class":48,"line":60},[46,122129,327],{"class":52},[46,122131,122132],{"class":56}," LD_LIBRARY_PATH",[46,122134,79],{"class":52},[46,122136,122137],{"class":56},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[19,122139,122140],{},[3514,122141],{"alt":41,"src":122142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[36,122144,122146],{"className":120151,"code":122145,"language":120153,"meta":41,"style":41},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[43,122147,122148,122153,122159,122164],{"__ignoreMap":41},[46,122149,122150],{"class":48,"line":49},[46,122151,122152],{"class":2253},"# 刷新当前终端的环境变量\n",[46,122154,122155,122157],{"class":48,"line":60},[46,122156,102837],{"class":180},[46,122158,122105],{"class":173},[46,122160,122161],{"class":48,"line":200},[46,122162,122163],{"class":2253},"# 验证CUDA是否安装成功\n",[46,122165,122166,122169],{"class":48,"line":211},[46,122167,122168],{"class":169},"nvcc",[46,122170,122171],{"class":180}," -V\n",[19,122173,122174],{},"出现下图这种则安装成功。",[19,122176,122177],{},[3514,122178],{"alt":41,"src":122179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[479,122181,122183],{"id":122182},"_354-安装cudnn","3.5.4 安装cuDNN",[23,122185,122186],{},[26,122187,122188],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[19,122190,122191,122192,122197],{},"前往 NVIDIA cuDNN 下载页面：",[2426,122193,122196],{"href":122194,"rel":122195},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[25862],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[19,122199,122200],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[19,122202,122203],{},[3514,122204],{"alt":41,"src":122205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[19,122207,122208],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[19,122210,122211],{},[3514,122212],{"alt":41,"src":122213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[19,122215,122216],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[19,122218,122219],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[19,122221,122222],{},[2339,122223,122224],{},"我这里选择所有Linux X86_64最通用的办法：",[19,122226,122227],{},"下载好的：",[19,122229,122230],{},[3514,122231],{"alt":41,"src":122232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[23,122234,122235],{"start":60},[26,122236,122237],{},"安装cuDNN",[19,122239,122240],{},"找到该文件所在目录，并打开终端，cd到该目录。",[19,122242,122243],{},[3514,122244],{"alt":41,"src":122245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[19,122247,122248],{},"解压文件，并复制到对应位置完成安装",[36,122250,122252],{"className":120151,"code":122251,"language":120153,"meta":41,"style":41},"# 解压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",[43,122253,122254,122259,122270,122275,122282,122287,122303,122317,122322,122333,122342,122346,122362],{"__ignoreMap":41},[46,122255,122256],{"class":48,"line":49},[46,122257,122258],{"class":2253},"# 解压cuDNN文件\n",[46,122260,122261,122264,122267],{"class":48,"line":60},[46,122262,122263],{"class":169},"tar",[46,122265,122266],{"class":180}," -xvf",[46,122268,122269],{"class":173}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[46,122271,122272],{"class":48,"line":200},[46,122273,122274],{"class":2253},"# cd进文件夹\n",[46,122276,122277,122279],{"class":48,"line":211},[46,122278,103205],{"class":180},[46,122280,122281],{"class":173}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[46,122283,122284],{"class":48,"line":222},[46,122285,122286],{"class":2253},"# 复制cuDNN文件到CUDA目录\n",[46,122288,122289,122291,122293,122296,122298,122301],{"class":48,"line":636},[46,122290,170],{"class":169},[46,122292,29850],{"class":173},[46,122294,122295],{"class":173}," include\u002Fcudnn",[46,122297,2642],{"class":180},[46,122299,122300],{"class":173},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[46,122302,4695],{"class":56},[46,122304,122305,122307,122309,122312,122314],{"class":48,"line":641},[46,122306,170],{"class":169},[46,122308,29850],{"class":173},[46,122310,122311],{"class":173}," lib\u002Flibcudnn",[46,122313,2642],{"class":180},[46,122315,122316],{"class":173},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[46,122318,122319],{"class":48,"line":653},[46,122320,122321],{"class":2253},"# 对比一下有没有缺文件\n",[46,122323,122324,122326,122329,122331],{"class":48,"line":659},[46,122325,28750],{"class":169},[46,122327,122328],{"class":173}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[46,122330,2642],{"class":180},[46,122332,4695],{"class":56},[46,122334,122335,122337,122340],{"class":48,"line":665},[46,122336,28750],{"class":169},[46,122338,122339],{"class":173}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[46,122341,120876],{"class":180},[46,122343,122344],{"class":48,"line":670},[46,122345,121925],{"class":2253},[46,122347,122348,122350,122352,122355,122357,122359],{"class":48,"line":676},[46,122349,170],{"class":169},[46,122351,26576],{"class":173},[46,122353,122354],{"class":173}," a+r",[46,122356,122328],{"class":173},[46,122358,2642],{"class":180},[46,122360,122361],{"class":56},"   \n",[46,122363,122364,122366,122368,122370,122372],{"class":48,"line":682},[46,122365,170],{"class":169},[46,122367,26576],{"class":173},[46,122369,122354],{"class":173},[46,122371,122339],{"class":173},[46,122373,120876],{"class":180},[23,122375,122376],{"start":200},[26,122377,122378],{},"检查是否安装成功",[36,122380,122382],{"className":120151,"code":122381,"language":120153,"meta":41,"style":41},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[43,122383,122384,122389],{"__ignoreMap":41},[46,122385,122386],{"class":48,"line":49},[46,122387,122388],{"class":2253},"# 检查cuDNN版本命令\n",[46,122390,122391,122394,122397,122399,122401,122404,122407],{"class":48,"line":60},[46,122392,122393],{"class":169},"cat",[46,122395,122396],{"class":173}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[46,122398,27102],{"class":52},[46,122400,32223],{"class":169},[46,122402,122403],{"class":173}," CUDNN_MAJOR",[46,122405,122406],{"class":180}," -A",[46,122408,49691],{"class":180},[19,122410,122411],{},"出现下图这样的就是安装成功了",[19,122413,122414],{},[3514,122415],{"alt":41,"src":122416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[23,122418,122419],{"start":211},[26,122420,122421],{},"软链接(一般不需要)",[36,122423,122425],{"className":120151,"code":122424,"language":120153,"meta":41,"style":41},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[43,122426,122427,122432],{"__ignoreMap":41},[46,122428,122429],{"class":48,"line":49},[46,122430,122431],{"class":2253},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[46,122433,122434,122436],{"class":48,"line":60},[46,122435,170],{"class":169},[46,122437,122438],{"class":173}," ldconfig\n",[19,122440,122441],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[36,122443,122448],{"className":122444,"code":122445,"language":122446,"meta":122447,"style":41},"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",[43,122449,122450,122455,122460,122465,122470,122475,122480],{"__ignoreMap":41},[46,122451,122452],{"class":48,"line":49},[46,122453,122454],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[46,122456,122457],{"class":48,"line":60},[46,122458,122459],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[46,122461,122462],{"class":48,"line":200},[46,122463,122464],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[46,122466,122467],{"class":48,"line":211},[46,122468,122469],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[46,122471,122472],{"class":48,"line":222},[46,122473,122474],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[46,122476,122477],{"class":48,"line":636},[46,122478,122479],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[46,122481,122482],{"class":48,"line":641},[46,122483,122484],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[19,122486,122487],{},"运行下方的命令",[36,122489,122491],{"className":120151,"code":122490,"language":120153,"meta":41,"style":41},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[43,122492,122493,122498,122505,122510],{"__ignoreMap":41},[46,122494,122495],{"class":48,"line":49},[46,122496,122497],{"class":2253},"# cd进入CUDA路径\n",[46,122499,122500,122502],{"class":48,"line":60},[46,122501,103205],{"class":180},[46,122503,122504],{"class":173}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[46,122506,122507],{"class":48,"line":200},[46,122508,122509],{"class":2253}," # 查看本路径下的需要软链接的文件名\n",[46,122511,122512],{"class":48,"line":211},[46,122513,122514],{"class":169}," ls\n",[19,122516,122517],{},[3514,122518],{"alt":41,"src":122519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[19,122521,122522,122523,20411,122526,20411,122529,122532],{},"如上图，我需要将",[43,122524,122525],{},"libcudnn_xxx_xxxxx.so.8.9.7",[43,122527,122528],{},"libcudnn_xxx_xxxxx.so.8",[43,122530,122531],{},"libcudnn_xxx_xxxxx.so","软链接",[36,122534,122536],{"className":120151,"code":122535,"language":120153,"meta":41,"style":41},"# 创建符号链接。对于每个 .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",[43,122537,122538,122543,122559,122573,122587,122601,122615,122629,122643,122648,122654,122659],{"__ignoreMap":41},[46,122539,122540],{"class":48,"line":49},[46,122541,122542],{"class":2253},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[46,122544,122545,122547,122550,122553,122556],{"class":48,"line":60},[46,122546,170],{"class":169},[46,122548,122549],{"class":173}," ln",[46,122551,122552],{"class":180}," -sf",[46,122554,122555],{"class":173}," libcudnn_cnn_train.so.8.9.7",[46,122557,122558],{"class":173}," libcudnn_cnn_train.so.8\n",[46,122560,122561,122563,122565,122567,122570],{"class":48,"line":200},[46,122562,170],{"class":169},[46,122564,122549],{"class":173},[46,122566,122552],{"class":180},[46,122568,122569],{"class":173}," libcudnn_adv_infer.so.8.9.7",[46,122571,122572],{"class":173}," libcudnn_adv_infer.so.8\n",[46,122574,122575,122577,122579,122581,122584],{"class":48,"line":211},[46,122576,170],{"class":169},[46,122578,122549],{"class":173},[46,122580,122552],{"class":180},[46,122582,122583],{"class":173}," libcudnn_adv_train.so.8.9.7",[46,122585,122586],{"class":173}," libcudnn_adv_train.so.8\n",[46,122588,122589,122591,122593,122595,122598],{"class":48,"line":222},[46,122590,170],{"class":169},[46,122592,122549],{"class":173},[46,122594,122552],{"class":180},[46,122596,122597],{"class":173}," libcudnn_cnn_infer.so.8.9.7",[46,122599,122600],{"class":173}," libcudnn_cnn_infer.so.8\n",[46,122602,122603,122605,122607,122609,122612],{"class":48,"line":636},[46,122604,170],{"class":169},[46,122606,122549],{"class":173},[46,122608,122552],{"class":180},[46,122610,122611],{"class":173}," libcudnn.so.8.9.7",[46,122613,122614],{"class":173}," libcudnn.so.8\n",[46,122616,122617,122619,122621,122623,122626],{"class":48,"line":641},[46,122618,170],{"class":169},[46,122620,122549],{"class":173},[46,122622,122552],{"class":180},[46,122624,122625],{"class":173}," libcudnn_ops_infer.so.8.9.7",[46,122627,122628],{"class":173}," libcudnn_ops_infer.so.8\n",[46,122630,122631,122633,122635,122637,122640],{"class":48,"line":653},[46,122632,170],{"class":169},[46,122634,122549],{"class":173},[46,122636,122552],{"class":180},[46,122638,122639],{"class":173}," libcudnn_ops_train.so.8.9.7",[46,122641,122642],{"class":173}," libcudnn_ops_train.so.8\n",[46,122644,122645],{"class":48,"line":659},[46,122646,122647],{"class":2253},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[46,122649,122650,122652],{"class":48,"line":665},[46,122651,170],{"class":169},[46,122653,122438],{"class":173},[46,122655,122656],{"class":48,"line":670},[46,122657,122658],{"class":2253},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[46,122660,122661,122663,122666,122669,122671,122674],{"class":48,"line":676},[46,122662,28750],{"class":169},[46,122664,122665],{"class":180}," -l",[46,122667,122668],{"class":173}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[46,122670,2642],{"class":180},[46,122672,122673],{"class":173},".so",[46,122675,120876],{"class":180},[479,122677,122679],{"id":122678},"_355-常见问题","3.5.5 常见问题",[23,122681,122682],{},[26,122683,122684],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[36,122686,122688],{"className":120151,"code":122687,"language":120153,"meta":41,"style":41},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[43,122689,122690],{"__ignoreMap":41},[46,122691,122692,122694,122696],{"class":48,"line":49},[46,122693,170],{"class":169},[46,122695,120211],{"class":173},[46,122697,122698],{"class":173}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[19,122700,122701],{},"blacklist-nouveau.conf文件内容如下：",[36,122703,122705],{"className":120151,"code":122704,"language":120153,"meta":41,"style":41},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[43,122706,122707,122715,122722,122734,122744],{"__ignoreMap":41},[46,122708,122709,122712],{"class":48,"line":49},[46,122710,122711],{"class":169},"blacklist",[46,122713,122714],{"class":173}," nouveau\n",[46,122716,122717,122719],{"class":48,"line":60},[46,122718,122711],{"class":169},[46,122720,122721],{"class":173}," lbm-nouveau\n",[46,122723,122724,122726,122729,122732],{"class":48,"line":200},[46,122725,117558],{"class":169},[46,122727,122728],{"class":173}," nouveau",[46,122730,122731],{"class":173}," modeset=",[46,122733,5105],{"class":180},[46,122735,122736,122739,122741],{"class":48,"line":211},[46,122737,122738],{"class":180},"alias",[46,122740,122728],{"class":173},[46,122742,122743],{"class":173}," off\n",[46,122745,122746,122748,122751],{"class":48,"line":222},[46,122747,122738],{"class":180},[46,122749,122750],{"class":173}," lbm-nouveau",[46,122752,122743],{"class":173},[19,122754,122755],{},"接着运行下方命令",[36,122757,122759],{"className":120151,"code":122758,"language":120153,"meta":41,"style":41},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[43,122760,122761,122771,122776],{"__ignoreMap":41},[46,122762,122763,122765,122768],{"class":48,"line":49},[46,122764,170],{"class":169},[46,122766,122767],{"class":173}," update-initramfs",[46,122769,122770],{"class":180}," -u\n",[46,122772,122773],{"class":48,"line":60},[46,122774,122775],{"class":169},"或者\n",[46,122777,122778,122780,122783],{"class":48,"line":200},[46,122779,170],{"class":169},[46,122781,122782],{"class":173}," dracut",[46,122784,122785],{"class":180}," --force\n",[19,122787,122788],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[36,122790,122792],{"className":120151,"code":122791,"language":120153,"meta":41,"style":41},"lsmod | grep nouveau\n",[43,122793,122794],{"__ignoreMap":41},[46,122795,122796,122799,122801,122803],{"class":48,"line":49},[46,122797,122798],{"class":169},"lsmod",[46,122800,27102],{"class":52},[46,122802,32223],{"class":169},[46,122804,122714],{"class":173},[23,122806,122807],{"start":60},[26,122808,122809],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[36,122811,122813],{"className":120151,"code":122812,"language":120153,"meta":41,"style":41},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[43,122814,122815],{"__ignoreMap":41},[46,122816,122817,122819,122821],{"class":48,"line":49},[46,122818,170],{"class":169},[46,122820,120211],{"class":173},[46,122822,122823],{"class":173}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[19,122825,122826],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[36,122828,122830],{"className":120151,"code":122829,"language":120153,"meta":41,"style":41},"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",[43,122831,122832,122840,122848,122856,122863,122871,122881,122889],{"__ignoreMap":41},[46,122833,122834,122837],{"class":48,"line":49},[46,122835,122836],{"class":169},"Section",[46,122838,122839],{"class":173}," \"OutputClass\"\n",[46,122841,122842,122845],{"class":48,"line":60},[46,122843,122844],{"class":169},"   Identifier",[46,122846,122847],{"class":173}," \"nvidia\"\n",[46,122849,122850,122853],{"class":48,"line":200},[46,122851,122852],{"class":169},"   MatchDriver",[46,122854,122855],{"class":173}," \"nvidia-drm\"\n",[46,122857,122858,122861],{"class":48,"line":211},[46,122859,122860],{"class":169},"   Driver",[46,122862,122847],{"class":173},[46,122864,122865,122868],{"class":48,"line":222},[46,122866,122867],{"class":169},"   Option",[46,122869,122870],{"class":173}," \"AllowEmptyInitialConfiguration\"\n",[46,122872,122873,122875,122878],{"class":48,"line":636},[46,122874,122867],{"class":169},[46,122876,122877],{"class":173}," \"PrimaryGPU\"",[46,122879,122880],{"class":173}," \"yes\"\n",[46,122882,122883,122886],{"class":48,"line":641},[46,122884,122885],{"class":169},"   ModulePath",[46,122887,122888],{"class":173}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[46,122890,122891],{"class":48,"line":653},[46,122892,122893],{"class":169},"EndSection\n",[23,122895,122896],{"start":200},[26,122897,122898],{},"安装N卡驱动提示错误",[36,122900,122902],{"className":122444,"code":122901,"language":122446,"meta":122447,"style":41},"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",[43,122903,122904],{"__ignoreMap":41},[46,122905,122906],{"class":48,"line":49},[46,122907,122901],{},[23,122909,122910],{},[26,122911,122912],{},"检查当前运行的内核版本：",[19,122914,122915],{},"运行以下命令以查看你当前正在使用的内核版本：",[36,122917,122919],{"className":118924,"code":122918,"language":118926,"meta":41,"style":41},"uname -r\n",[43,122920,122921],{"__ignoreMap":41},[46,122922,122923,122925],{"class":48,"line":49},[46,122924,72169],{"class":169},[46,122926,122927],{"class":180}," -r\n",[23,122929,122930],{"start":60},[26,122931,122932],{},"安装内核开发文件：",[19,122934,122935,122936,122939],{},"确保你已经安装了与当前内核版本相匹配的 ",[43,122937,122938],{},"kernel-devel"," 包。运行以下命令来安装：",[36,122941,122943],{"className":118924,"code":122942,"language":118926,"meta":41,"style":41},"sudo dnf install kernel-devel-$(uname -r)\n",[43,122944,122945],{"__ignoreMap":41},[46,122946,122947,122949,122951,122953,122956,122958,122960,122962],{"class":48,"line":49},[46,122948,170],{"class":169},[46,122950,174],{"class":173},[46,122952,177],{"class":173},[46,122954,122955],{"class":173}," kernel-devel-",[46,122957,27092],{"class":56},[46,122959,72169],{"class":169},[46,122961,121267],{"class":180},[46,122963,459],{"class":56},[19,122965,122966],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[23,122968,122969],{"start":200},[26,122970,122971],{},"安装内核源代码（如果需要）：",[19,122973,122974],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[36,122976,122978],{"className":118924,"code":122977,"language":118926,"meta":41,"style":41},"sudo dnf install kernel-headers kernel-source\n",[43,122979,122980],{"__ignoreMap":41},[46,122981,122982,122984,122986,122988,122991],{"class":48,"line":49},[46,122983,170],{"class":169},[46,122985,174],{"class":173},[46,122987,177],{"class":173},[46,122989,122990],{"class":173}," kernel-headers",[46,122992,122993],{"class":173}," kernel-source\n",[23,122995,122996],{"start":211},[26,122997,122998],{},"检查安装：",[19,123000,123001,123002,123005],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[43,123003,123004],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[36,123007,123009],{"className":118924,"code":123008,"language":118926,"meta":41,"style":41},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[43,123010,123011],{"__ignoreMap":41},[46,123012,123013,123015],{"class":48,"line":49},[46,123014,28750],{"class":169},[46,123016,123017],{"class":173}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[19,123019,123020,123021,123024],{},"如果仍然遇到问题，可以通过 ",[43,123022,123023],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[2098,123026,123027],{},"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":41,"searchDepth":60,"depth":60,"links":123029},[123030,123034,123044,123048,123049],{"id":120127,"depth":60,"text":120128,"children":123031},[123032,123033],{"id":120137,"depth":200,"text":120138},{"id":120147,"depth":200,"text":120148},{"id":120347,"depth":60,"text":120348,"children":123035},[123036,123037,123038,123039,123040,123041,123042,123043],{"id":120351,"depth":200,"text":120352},{"id":120421,"depth":200,"text":120422},{"id":120510,"depth":200,"text":120511},{"id":120755,"depth":200,"text":120756},{"id":120825,"depth":200,"text":120826},{"id":120892,"depth":200,"text":120893},{"id":120927,"depth":200,"text":120928},{"id":120982,"depth":200,"text":120983},{"id":121033,"depth":60,"text":121034,"children":123045},[123046,123047],{"id":121037,"depth":200,"text":121038},{"id":121117,"depth":200,"text":121118},{"id":121303,"depth":60,"text":121304},{"id":121476,"depth":60,"text":121477,"children":123050},[123051,123052,123053,123054,123055],{"id":121480,"depth":200,"text":121481},{"id":121521,"depth":200,"text":121522},{"id":121808,"depth":200,"text":121809},{"id":122182,"depth":200,"text":122183},{"id":122678,"depth":200,"text":122679},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":120119,"description":25378},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":123062,"title":123063,"body":123064,"description":25378,"extension":2125,"meta":123404,"navigation":615,"path":123405,"seo":123406,"stem":123407,"__hash__":123408},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":123065,"toc":123402},[123066,123069,123074,123077,123323,123328,123331,123367,123370,123399],[10,123067,123063],{"id":123068},"_4-命令教程长期积累",[23,123070,123071],{},[26,123072,123073],{},"大多数命令",[19,123075,123076],{},"常用 Linux 命令速查：",[36,123078,123080],{"className":118924,"code":123079,"language":118926,"meta":41,"style":41},"# 文件与目录\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",[43,123081,123082,123087,123094,123101,123109,123116,123123,123131,123139,123146,123153,123161,123165,123170,123177,123185,123192,123196,123201,123208,123216,123224,123232,123240,123244,123249,123257,123264,123271,123279,123287,123291,123296,123305,123314],{"__ignoreMap":41},[46,123083,123084],{"class":48,"line":49},[46,123085,123086],{"class":2253},"# 文件与目录\n",[46,123088,123089,123091],{"class":48,"line":60},[46,123090,28750],{"class":169},[46,123092,123093],{"class":2253},"        # 列出目录内容\n",[46,123095,123096,123098],{"class":48,"line":200},[46,123097,103205],{"class":180},[46,123099,123100],{"class":2253},"        # 切换目录\n",[46,123102,123103,123106],{"class":48,"line":211},[46,123104,123105],{"class":180},"pwd",[46,123107,123108],{"class":2253},"       # 显示当前路径\n",[46,123110,123111,123113],{"class":48,"line":222},[46,123112,103195],{"class":169},[46,123114,123115],{"class":2253},"     # 创建目录\n",[46,123117,123118,123120],{"class":48,"line":636},[46,123119,27314],{"class":169},[46,123121,123122],{"class":2253},"        # 删除文件或目录\n",[46,123124,123125,123128],{"class":48,"line":641},[46,123126,123127],{"class":169},"cp",[46,123129,123130],{"class":2253},"        # 复制文件或目录\n",[46,123132,123133,123136],{"class":48,"line":653},[46,123134,123135],{"class":169},"mv",[46,123137,123138],{"class":2253},"        # 移动\u002F重命名文件或目录\n",[46,123140,123141,123143],{"class":48,"line":659},[46,123142,941],{"class":169},[46,123144,123145],{"class":2253},"     # 创建空文件\n",[46,123147,123148,123150],{"class":48,"line":665},[46,123149,122393],{"class":169},[46,123151,123152],{"class":2253},"       # 查看文件内容\n",[46,123154,123155,123158],{"class":48,"line":670},[46,123156,123157],{"class":169},"head\u002Ftail",[46,123159,123160],{"class":2253}," # 查看文件头部\u002F尾部\n",[46,123162,123163],{"class":48,"line":676},[46,123164,616],{"emptyLinePlaceholder":615},[46,123166,123167],{"class":48,"line":682},[46,123168,123169],{"class":2253},"# 权限管理\n",[46,123171,123172,123174],{"class":48,"line":688},[46,123173,26608],{"class":169},[46,123175,123176],{"class":2253},"     # 修改文件权限\n",[46,123178,123179,123182],{"class":48,"line":693},[46,123180,123181],{"class":169},"chown",[46,123183,123184],{"class":2253},"     # 修改文件所有者\n",[46,123186,123187,123189],{"class":48,"line":699},[46,123188,170],{"class":169},[46,123190,123191],{"class":2253},"      # 以管理员身份执行\n",[46,123193,123194],{"class":48,"line":705},[46,123195,616],{"emptyLinePlaceholder":615},[46,123197,123198],{"class":48,"line":711},[46,123199,123200],{"class":2253},"# 系统信息\n",[46,123202,123203,123205],{"class":48,"line":717},[46,123204,72169],{"class":169},[46,123206,123207],{"class":2253},"     # 系统信息\n",[46,123209,123210,123213],{"class":48,"line":723},[46,123211,123212],{"class":169},"df",[46,123214,123215],{"class":2253},"        # 磁盘使用情况\n",[46,123217,123218,123221],{"class":48,"line":729},[46,123219,123220],{"class":169},"free",[46,123222,123223],{"class":2253},"      # 内存使用情况\n",[46,123225,123226,123229],{"class":48,"line":735},[46,123227,123228],{"class":169},"top\u002Fhtop",[46,123230,123231],{"class":2253},"  # 进程监控\n",[46,123233,123234,123237],{"class":48,"line":740},[46,123235,123236],{"class":169},"ps",[46,123238,123239],{"class":2253},"        # 查看进程\n",[46,123241,123242],{"class":48,"line":745},[46,123243,616],{"emptyLinePlaceholder":615},[46,123245,123246],{"class":48,"line":763},[46,123247,123248],{"class":2253},"# 网络\n",[46,123250,123251,123254],{"class":48,"line":778},[46,123252,123253],{"class":169},"ping",[46,123255,123256],{"class":2253},"      # 测试网络连通性\n",[46,123258,123259,123261],{"class":48,"line":789},[46,123260,28838],{"class":169},[46,123262,123263],{"class":2253},"      # 发送 HTTP 请求\n",[46,123265,123266,123268],{"class":48,"line":794},[46,123267,121917],{"class":169},[46,123269,123270],{"class":2253},"      # 下载文件\n",[46,123272,123273,123276],{"class":48,"line":806},[46,123274,123275],{"class":169},"ssh",[46,123277,123278],{"class":2253},"       # 远程登录\n",[46,123280,123281,123284],{"class":48,"line":829},[46,123282,123283],{"class":169},"scp",[46,123285,123286],{"class":2253},"       # 远程文件传输\n",[46,123288,123289],{"class":48,"line":840},[46,123290,616],{"emptyLinePlaceholder":615},[46,123292,123293],{"class":48,"line":846},[46,123294,123295],{"class":2253},"# 包管理（Debian\u002FUbuntu）\n",[46,123297,123298,123300,123302],{"class":48,"line":852},[46,123299,118996],{"class":169},[46,123301,118975],{"class":173},[46,123303,123304],{"class":2253},"   # 更新软件源\n",[46,123306,123307,123309,123311],{"class":48,"line":857},[46,123308,118996],{"class":169},[46,123310,177],{"class":173},[46,123312,123313],{"class":2253},"  # 安装软件包\n",[46,123315,123316,123318,123320],{"class":48,"line":875},[46,123317,118996],{"class":169},[46,123319,28070],{"class":173},[46,123321,123322],{"class":2253},"   # 卸载软件包\n",[23,123324,123325],{"start":60},[26,123326,123327],{},"KDE Dolphin 以root打开",[19,123329,123330],{},"kde5",[36,123332,123334],{"className":118924,"code":123333,"language":118926,"meta":41,"style":41},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[43,123335,123336],{"__ignoreMap":41},[46,123337,123338,123341,123344,123347,123349,123351,123354,123357,123359,123362,123364],{"class":48,"line":49},[46,123339,123340],{"class":169},"pkexec",[46,123342,123343],{"class":173}," env",[46,123345,123346],{"class":173}," DISPLAY=",[46,123348,30132],{"class":56},[46,123350,30190],{"class":173},[46,123352,123353],{"class":56},"$XAUTHORITY ",[46,123355,123356],{"class":173},"KDE_SESSION_VERSION=",[46,123358,2506],{"class":180},[46,123360,123361],{"class":173}," KDE_FULL_SESSION=",[46,123363,3414],{"class":180},[46,123365,123366],{"class":173}," dolphin\n",[19,123368,123369],{},"kde6",[36,123371,123373],{"className":118924,"code":123372,"language":118926,"meta":41,"style":41},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[43,123374,123375],{"__ignoreMap":41},[46,123376,123377,123379,123381,123383,123385,123387,123389,123391,123393,123395,123397],{"class":48,"line":49},[46,123378,123340],{"class":169},[46,123380,123343],{"class":173},[46,123382,123346],{"class":173},[46,123384,30132],{"class":56},[46,123386,30190],{"class":173},[46,123388,123353],{"class":56},[46,123390,123356],{"class":173},[46,123392,2531],{"class":180},[46,123394,123361],{"class":173},[46,123396,3414],{"class":180},[46,123398,123366],{"class":173},[2098,123400,123401],{},"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":41,"searchDepth":60,"depth":60,"links":123403},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":123063,"description":25378},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":123410,"title":123411,"body":123412,"description":25378,"extension":2125,"meta":123426,"navigation":615,"path":123427,"seo":123428,"stem":123429,"__hash__":123430},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":123413,"toc":123424},[123414,123417],[10,123415,123411],{"id":123416},"_5-各种环境配置",[19,123418,123419],{},[2426,123420,123423],{"href":123421,"rel":123422},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[25862],"电控组环境搭建大全",{"title":41,"searchDepth":60,"depth":60,"links":123425},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":123411,"description":25378},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":123432,"title":123433,"body":123434,"description":25378,"extension":2125,"meta":123782,"navigation":615,"path":123783,"seo":123784,"stem":123785,"__hash__":123786},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":123435,"toc":123774},[123436,123439,123443,123447,123451,123456,123463,123467,123760,123764,123771],[10,123437,123433],{"id":123438},"_6-拓展功能",[14,123440,123442],{"id":123441},"_61-wine","6.1 Wine",[14,123444,123446],{"id":123445},"_62-android","6.2 Android",[479,123448,123450],{"id":123449},"_621-i卡a卡","6.2.1 I卡、A卡",[23,123452,123453],{},[26,123454,123455],{},"Wayland-Waydroid(体验超级好)",[19,123457,123458,123459],{},"Waydroid 官网与安装指南：",[2426,123460,123461],{"href":123461,"rel":123462},"https:\u002F\u002Fwaydro.id\u002F",[25862],[479,123464,123466],{"id":123465},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[23,123468,123469],{},[26,123470,123471,123472,123474,123475,123479,123481,123484,123489,123686],{},"QEMU-KVM虚拟机 + BlissOS-X86",[55681,123473],{},"BlissOS 官网下载：",[2426,123476,123477],{"href":123477,"rel":123478},"https:\u002F\u002Fblissos.org\u002F",[25862],[55681,123480],{},[3514,123482],{"alt":41,"src":123483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[23,123485,123486],{"start":200},[26,123487,123488],{},"比较推荐的配置",[36,123490,123492],{"className":118924,"code":123491,"language":118926,"meta":41,"style":41},"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",[43,123493,123494,123501,123511,123521,123531,123543,123553,123560,123570,123579,123588,123598,123608,123617,123627,123637,123649,123659,123668,123678],{"__ignoreMap":41},[46,123495,123496,123499],{"class":48,"line":49},[46,123497,123498],{"class":169},"qemu-system-x86_64",[46,123500,184],{"class":180},[46,123502,123503,123506,123509],{"class":48,"line":60},[46,123504,123505],{"class":180},"        -M",[46,123507,123508],{"class":173}," q35,vmport=off",[46,123510,184],{"class":180},[46,123512,123513,123516,123519],{"class":48,"line":200},[46,123514,123515],{"class":180},"        -accel",[46,123517,123518],{"class":173}," kvm",[46,123520,184],{"class":180},[46,123522,123523,123526,123529],{"class":48,"line":211},[46,123524,123525],{"class":180},"        -cpu",[46,123527,123528],{"class":173}," qemu64,+sse3,+sse4.2",[46,123530,184],{"class":180},[46,123532,123533,123536,123539,123541],{"class":48,"line":222},[46,123534,123535],{"class":180},"        -smp",[46,123537,123538],{"class":173}," 8,cores=",[46,123540,2481],{"class":180},[46,123542,184],{"class":180},[46,123544,123545,123548,123551],{"class":48,"line":636},[46,123546,123547],{"class":180},"        -m",[46,123549,123550],{"class":173}," 6G",[46,123552,184],{"class":180},[46,123554,123555,123558],{"class":48,"line":641},[46,123556,123557],{"class":180},"        -usb",[46,123559,184],{"class":180},[46,123561,123562,123565,123568],{"class":48,"line":653},[46,123563,123564],{"class":180},"        -device",[46,123566,123567],{"class":173}," virtio-tablet",[46,123569,184],{"class":180},[46,123571,123572,123574,123577],{"class":48,"line":659},[46,123573,123564],{"class":180},[46,123575,123576],{"class":173}," virtio-keyboard",[46,123578,184],{"class":180},[46,123580,123581,123583,123586],{"class":48,"line":665},[46,123582,123564],{"class":180},[46,123584,123585],{"class":173}," usb-tablet",[46,123587,184],{"class":180},[46,123589,123590,123593,123596],{"class":48,"line":670},[46,123591,123592],{"class":180},"        -bios",[46,123594,123595],{"class":173}," OVMF-pure-efi64.fd",[46,123597,184],{"class":180},[46,123599,123600,123603,123606],{"class":48,"line":676},[46,123601,123602],{"class":180},"        -net",[46,123604,123605],{"class":173}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[46,123607,184],{"class":180},[46,123609,123610,123612,123615],{"class":48,"line":682},[46,123611,123602],{"class":180},[46,123613,123614],{"class":173}," nic,model=virtio",[46,123616,184],{"class":180},[46,123618,123619,123622,123625],{"class":48,"line":688},[46,123620,123621],{"class":180},"        -audio",[46,123623,123624],{"class":173}," sdl,model=hda",[46,123626,184],{"class":180},[46,123628,123629,123632,123635],{"class":48,"line":693},[46,123630,123631],{"class":180},"        -display",[46,123633,123634],{"class":173}," sdl,gl=on,show-cursor=on",[46,123636,184],{"class":180},[46,123638,123639,123641,123644,123647],{"class":48,"line":699},[46,123640,123564],{"class":180},[46,123642,123643],{"class":173}," virtio-vga-gl,xres=1920,yres=",[46,123645,123646],{"class":180},"1080",[46,123648,184],{"class":180},[46,123650,123651,123654,123657],{"class":48,"line":705},[46,123652,123653],{"class":180},"        -drive",[46,123655,123656],{"class":173}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[46,123658,184],{"class":180},[46,123660,123661,123663,123666],{"class":48,"line":711},[46,123662,123653],{"class":180},[46,123664,123665],{"class":173}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[46,123667,184],{"class":180},[46,123669,123670,123673,123676],{"class":48,"line":717},[46,123671,123672],{"class":180},"        -monitor",[46,123674,123675],{"class":173}," stdio",[46,123677,184],{"class":180},[46,123679,123680,123683],{"class":48,"line":723},[46,123681,123682],{"class":180},"        -serial",[46,123684,123685],{"class":173}," none\n",[23,123687,123688],{"start":222},[26,123689,123690,123691],{},"常用操作：",[23,123692,123693,123696,123752],{},[26,123694,123695],{},"全屏：Ctrl+Alt+F",[26,123697,123698,123699,123704],{},"adb调试",[23,123700,123701],{},[26,123702,123703],{},"使Linux与Android用ADB连接。",[36,123705,123707],{"className":118924,"code":123706,"language":118926,"meta":41,"style":41},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[43,123708,123709,123714,123725,123730,123742,123747],{"__ignoreMap":41},[46,123710,123711],{"class":48,"line":49},[46,123712,123713],{"class":2253},"# 连接安卓\n",[46,123715,123716,123719,123722],{"class":48,"line":60},[46,123717,123718],{"class":169},"adb",[46,123720,123721],{"class":173}," connect",[46,123723,123724],{"class":180}," 127.0.0.1\n",[46,123726,123727],{"class":48,"line":200},[46,123728,123729],{"class":2253},"# 打开shell\n",[46,123731,123732,123734,123736,123739],{"class":48,"line":211},[46,123733,123718],{"class":169},[46,123735,28872],{"class":180},[46,123737,123738],{"class":173}," 127.0.0.1:5555",[46,123740,123741],{"class":173}," shell\n",[46,123743,123744],{"class":48,"line":222},[46,123745,123746],{"class":2253},"# 使用root权限\n",[46,123748,123749],{"class":48,"line":636},[46,123750,123751],{"class":169},"su\n",[26,123753,123754,123755],{},"中文输入法",[23,123756,123757],{},[26,123758,123759],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,123761,123763],{"id":123762},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[19,123765,123766,123767],{},"rEFInd 官网与文档：",[2426,123768,123769],{"href":123769,"rel":123770},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[25862],[2098,123772,123773],{},"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":41,"searchDepth":60,"depth":60,"links":123775},[123776,123777,123781],{"id":123441,"depth":60,"text":123442},{"id":123445,"depth":60,"text":123446,"children":123778},[123779,123780],{"id":123449,"depth":200,"text":123450},{"id":123465,"depth":200,"text":123466},{"id":123762,"depth":60,"text":123763},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":123433,"description":25378},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":123788,"title":123789,"body":123790,"description":25378,"extension":2125,"meta":127089,"navigation":615,"path":127090,"seo":127091,"stem":127092,"__hash__":127093},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":123791,"toc":127063},[123792,123795,123799,123802,123809,124059,124062,124134,124137,124141,124145,124150,124153,124156,124159,124164,124167,124170,124173,124178,124181,124186,124189,124192,124197,124200,124205,124208,124212,124216,124219,124224,124227,124241,124244,124247,124256,124259,124268,124271,124274,124283,124286,124295,124298,124301,124310,124313,124316,124331,124334,124337,124346,124351,124354,124357,124366,124369,124378,124381,124390,124393,124402,124407,124410,124418,124423,124426,124435,124438,124446,124451,124454,124463,124466,124469,124473,124476,124481,124484,124489,124503,124508,124513,124524,124529,124535,124540,124555,124560,124563,124568,124573,124578,124586,124591,124598,124603,124614,124619,124622,124626,124629,124632,124637,124640,124659,124664,124667,124676,124681,124684,124706,124709,124739,124742,124747,124750,124764,124769,124788,124791,124794,124799,124811,124816,124821,124824,124829,124832,124847,124850,124855,124860,124864,124869,124909,124912,124916,124922,124928,124933,124936,124943,124948,124955,124958,124961,124968,124982,124985,125045,125048,125062,125074,125077,125080,125083,125147,125150,125153,125156,125176,125179,125184,125191,125195,125198,125202,125207,125212,125216,125219,125222,125264,125269,125272,125294,125309,125311,125316,125328,125388,125390,125392,125446,125448,125450,125456,125461,125464,125469,125473,125476,125538,125543,125546,125548,125552,125564,125646,125648,125650,125704,125710,125712,125716,125721,125723,125728,125732,125752,125787,125791,125794,125797,125800,125807,125810,125822,125825,125840,125843,125862,125910,125913,125930,125933,125947,125952,125955,125964,125979,125991,126029,126034,126043,126048,126053,126079,126088,126092,126096,126101,126104,126108,126112,126117,126120,126125,126128,126133,126136,126141,126144,126148,126153,126156,126161,126164,126168,126173,126176,126181,126184,126189,126192,126196,126201,126204,126209,126212,126217,126220,126224,126229,126232,126237,126240,126245,126248,126253,126256,126261,126264,126269,126272,126276,126281,126284,126289,126296,126300,126305,126308,126313,126316,126320,126325,126328,126331,126334,126337,126340,126344,126347,126357,126362,126367,126389,126394,126399,126406,126410,126415,126418,126421,126426,126429,126432,126435,126438,126441,126444,126447,126450,126453,126456,126459,126462,126467,126472,126477,126482,126487,126492,126497,126500,126504,126507,126511,126516,126521,126526,126531,126535,126541,126549,126554,126557,126562,126577,126580,126585,126619,126634,126637,126692,126718,126730,126733,126742,126745,126760,126765,126768,126774,126779,126782,126787,126790,126795,126800,126807,126810,126825,126828,126863,126868,126876,126914,126917,126920,126925,126928,126933,126944,126978,126983,126986,126995,127000,127006,127009,127014,127023,127028,127031,127034,127039,127047,127050,127055,127060],[10,123793,123789],{"id":123794},"_7-其他操作",[14,123796,123798],{"id":123797},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[19,123800,123801],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[19,123803,123804,123805,123808],{},"进入工控机的硬盘目录，进入",[43,123806,123807],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[36,123810,123814],{"className":123811,"code":123812,"language":123813,"meta":41,"style":41},"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",[43,123815,123816,123824,123835,123842,123849,123861,123868,123880,123891,123902,123909,123916,123923,123935,123947,123954,123966,123978,123985,123997,124009,124021,124032,124039,124050],{"__ignoreMap":41},[46,123817,123818,123821],{"class":48,"line":49},[46,123819,123820],{"class":1361},"network",[46,123822,123823],{"class":56},": \n",[46,123825,123826,123829,123831,123833],{"class":48,"line":60},[46,123827,123828],{"class":1361},"  version",[46,123830,53404],{"class":56},[46,123832,2272],{"class":180},[46,123834,4695],{"class":56},[46,123836,123837,123840],{"class":48,"line":200},[46,123838,123839],{"class":1361},"  wifis",[46,123841,123823],{"class":56},[46,123843,123844,123847],{"class":48,"line":211},[46,123845,123846],{"class":1361},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[46,123848,123823],{"class":56},[46,123850,123851,123854,123856,123859],{"class":48,"line":222},[46,123852,123853],{"class":1361},"      renderer",[46,123855,53404],{"class":56},[46,123857,123858],{"class":173},"NetworkManager",[46,123860,4695],{"class":56},[46,123862,123863,123866],{"class":48,"line":636},[46,123864,123865],{"class":1361},"      match",[46,123867,123823],{"class":56},[46,123869,123870,123873,123875,123878],{"class":48,"line":641},[46,123871,123872],{"class":1361},"        name",[46,123874,53404],{"class":56},[46,123876,123877],{"class":173},"\"wlan0\"",[46,123879,4695],{"class":56},[46,123881,123882,123885,123887,123889],{"class":48,"line":653},[46,123883,123884],{"class":1361},"      dhcp4",[46,123886,53404],{"class":56},[46,123888,3414],{"class":180},[46,123890,4695],{"class":56},[46,123892,123893,123896,123898,123900],{"class":48,"line":659},[46,123894,123895],{"class":1361},"      dhcp6",[46,123897,53404],{"class":56},[46,123899,3414],{"class":180},[46,123901,4695],{"class":56},[46,123903,123904,123907],{"class":48,"line":665},[46,123905,123906],{"class":1361},"      access-points",[46,123908,123823],{"class":56},[46,123910,123911,123914],{"class":48,"line":670},[46,123912,123913],{"class":173},"        \"EMIS_Vinci_Robocon_5G\"",[46,123915,123823],{"class":56},[46,123917,123918,123921],{"class":48,"line":676},[46,123919,123920],{"class":1361},"          auth",[46,123922,123823],{"class":56},[46,123924,123925,123928,123930,123933],{"class":48,"line":682},[46,123926,123927],{"class":1361},"            key-management",[46,123929,53404],{"class":56},[46,123931,123932],{"class":173},"\"psk\"",[46,123934,4695],{"class":56},[46,123936,123937,123940,123942,123945],{"class":48,"line":688},[46,123938,123939],{"class":1361},"            password",[46,123941,53404],{"class":56},[46,123943,123944],{"class":173},"\"vinci666\"",[46,123946,4695],{"class":56},[46,123948,123949,123952],{"class":48,"line":693},[46,123950,123951],{"class":1361},"          networkmanager",[46,123953,123823],{"class":56},[46,123955,123956,123959,123961,123964],{"class":48,"line":699},[46,123957,123958],{"class":1361},"            uuid",[46,123960,53404],{"class":56},[46,123962,123963],{"class":173},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[46,123965,4695],{"class":56},[46,123967,123968,123971,123973,123976],{"class":48,"line":705},[46,123969,123970],{"class":1361},"            name",[46,123972,53404],{"class":56},[46,123974,123975],{"class":173},"\"EMIS_Vinci_Robocon_5G\"",[46,123977,4695],{"class":56},[46,123979,123980,123983],{"class":48,"line":711},[46,123981,123982],{"class":1361},"            passthrough",[46,123984,123823],{"class":56},[46,123986,123987,123990,123992,123995],{"class":48,"line":717},[46,123988,123989],{"class":1361},"              wifi-security.auth-alg",[46,123991,53404],{"class":56},[46,123993,123994],{"class":173},"\"open\"",[46,123996,4695],{"class":56},[46,123998,123999,124002,124004,124007],{"class":48,"line":723},[46,124000,124001],{"class":1361},"              ipv6.addr-gen-mode",[46,124003,53404],{"class":56},[46,124005,124006],{"class":173},"\"default\"",[46,124008,4695],{"class":56},[46,124010,124011,124014,124016,124019],{"class":48,"line":729},[46,124012,124013],{"class":1361},"              ipv6.ip6-privacy",[46,124015,53404],{"class":56},[46,124017,124018],{"class":173},"\"-1\"",[46,124020,4695],{"class":56},[46,124022,124023,124026,124028,124030],{"class":48,"line":735},[46,124024,124025],{"class":1361},"              proxy._",[46,124027,53404],{"class":56},[46,124029,9665],{"class":173},[46,124031,4695],{"class":56},[46,124033,124034,124037],{"class":48,"line":740},[46,124035,124036],{"class":1361},"      networkmanager",[46,124038,123823],{"class":56},[46,124040,124041,124044,124046,124048],{"class":48,"line":745},[46,124042,124043],{"class":1361},"        uuid",[46,124045,53404],{"class":56},[46,124047,123963],{"class":173},[46,124049,4695],{"class":56},[46,124051,124052,124054,124056],{"class":48,"line":763},[46,124053,123872],{"class":1361},[46,124055,53404],{"class":56},[46,124057,124058],{"class":173},"\"EMIS_Vinci_Robocon_5G\"\n",[19,124060,124061],{},"将其改为新wifi的名和密码：",[36,124063,124065],{"className":123811,"code":124064,"language":123813,"meta":41,"style":41},"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",[43,124066,124067,124073,124082,124088,124095,124104,124112,124118,124124],{"__ignoreMap":41},[46,124068,124069,124071],{"class":48,"line":49},[46,124070,123820],{"class":1361},[46,124072,760],{"class":56},[46,124074,124075,124077,124079],{"class":48,"line":60},[46,124076,123828],{"class":1361},[46,124078,53404],{"class":56},[46,124080,124081],{"class":180},"2\n",[46,124083,124084,124086],{"class":48,"line":200},[46,124085,123839],{"class":1361},[46,124087,760],{"class":56},[46,124089,124090,124093],{"class":48,"line":211},[46,124091,124092],{"class":1361},"    wlan0",[46,124094,760],{"class":56},[46,124096,124097,124099,124101],{"class":48,"line":222},[46,124098,123884],{"class":1361},[46,124100,53404],{"class":56},[46,124102,124103],{"class":180},"true\n",[46,124105,124106,124108,124110],{"class":48,"line":636},[46,124107,123895],{"class":1361},[46,124109,53404],{"class":56},[46,124111,124103],{"class":180},[46,124113,124114,124116],{"class":48,"line":641},[46,124115,123906],{"class":1361},[46,124117,760],{"class":56},[46,124119,124120,124122],{"class":48,"line":653},[46,124121,123913],{"class":173},[46,124123,760],{"class":56},[46,124125,124126,124129,124131],{"class":48,"line":659},[46,124127,124128],{"class":1361},"          password",[46,124130,53404],{"class":56},[46,124132,124133],{"class":173},"\"vinci666\"\n",[19,124135,124136],{},"工控机开机即可连上网。",[14,124138,124140],{"id":124139},"_72-ssh远程开发","7.2 SSH远程开发",[479,124142,124144],{"id":124143},"_721-环境准备","7.2.1 环境准备",[19,124146,124147],{},[2339,124148,124149],{},"1.硬件准备",[19,124151,124152],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[19,124154,124155],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[19,124157,124158],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[19,124160,124161],{},[2339,124162,124163],{},"2.设置固定IP",[19,124165,124166],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[19,124168,124169],{},"1.进入设置界面",[19,124171,124172],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[19,124174,124175],{},[3514,124176],{"alt":41,"src":124177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[19,124179,124180],{},"2.配置所连接的网络",[19,124182,124183],{},[3514,124184],{"alt":41,"src":124185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[19,124187,124188],{},"3.设置固定IP",[19,124190,124191],{},"查看当前IP地址。",[19,124193,124194],{},[3514,124195],{"alt":41,"src":124196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[19,124198,124199],{},"设置固定IP。",[19,124201,124202],{},[3514,124203],{"alt":41,"src":124204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[19,124206,124207],{},"至此，IP配置完毕。",[479,124209,124211],{"id":124210},"_722-环境搭建","7.2.2 环境搭建",[19,124213,124214],{},[2339,124215,27745],{},[19,124217,124218],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[19,124220,124221],{},[2339,124222,124223],{},"实现",[19,124225,124226],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[23,124228,124229,124232,124235,124238],{},[26,124230,124231],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[26,124233,124234],{},"远程主机启动SSH服务；",[26,124236,124237],{},"本地主机登陆远程主机；",[26,124239,124240],{},"实现数据传输。",[19,124242,124243],{},"1.安装SSH客户端与服务端",[19,124245,124246],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[36,124248,124250],{"className":122444,"code":124249,"language":122446,"meta":122447,"style":41}," sudo apt install openssh-server\n",[43,124251,124252],{"__ignoreMap":41},[46,124253,124254],{"class":48,"line":49},[46,124255,124249],{},[19,124257,124258],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[36,124260,124262],{"className":122444,"code":124261,"language":122446,"meta":122447,"style":41},"sudo apt install openssh-client\n",[43,124263,124264],{"__ignoreMap":41},[46,124265,124266],{"class":48,"line":49},[46,124267,124261],{},[19,124269,124270],{},"2.远程主机启动SSH服务",[19,124272,124273],{},"远程主机启动 ssh 服务命令如下：",[36,124275,124277],{"className":122444,"code":124276,"language":122446,"meta":122447,"style":41},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[43,124278,124279],{"__ignoreMap":41},[46,124280,124281],{"class":48,"line":49},[46,124282,124276],{},[19,124284,124285],{},"启动后可使用如下命令查看服务是否正常运行：",[36,124287,124289],{"className":122444,"code":124288,"language":122446,"meta":122447,"style":41},"ps -e | grep ssh\n",[43,124290,124291],{"__ignoreMap":41},[46,124292,124293],{"class":48,"line":49},[46,124294,124288],{},[19,124296,124297],{},"如果启动成功，会包含 sshd 程序。",[19,124299,124300],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[36,124302,124304],{"className":122444,"code":124303,"language":122446,"meta":122447,"style":41},"sudo systemctl enable ssh\n",[43,124305,124306],{"__ignoreMap":41},[46,124307,124308],{"class":48,"line":49},[46,124309,124303],{},[19,124311,124312],{},"3.本地远程登录",[19,124314,124315],{},"登录远程主机可以调用如下命令:",[36,124317,124319],{"className":118924,"code":124318,"language":118926,"meta":41,"style":41},"ssh -X 用户名@ip地址\n",[43,124320,124321],{"__ignoreMap":41},[46,124322,124323,124325,124328],{"class":48,"line":49},[46,124324,123275],{"class":169},[46,124326,124327],{"class":180}," -X",[46,124329,124330],{"class":173}," 用户名@ip地址\n",[19,124332,124333],{},"然后根据提示，录入登陆密码，即可成功登录。",[19,124335,124336],{},"如果退出，可以调用exit命令：",[36,124338,124340],{"className":122444,"code":124339,"language":122446,"meta":122447,"style":41},"exit\n",[43,124341,124342],{"__ignoreMap":41},[46,124343,124344],{"class":48,"line":49},[46,124345,124339],{},[19,124347,124348],{},[2339,124349,124350],{},"4.实现数据传输",[19,124352,124353],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[19,124355,124356],{},"上传文件指令格式如下：",[36,124358,124360],{"className":122444,"code":124359,"language":122446,"meta":122447,"style":41},"scp 本地文件路径 账号@ip:路径\n",[43,124361,124362],{"__ignoreMap":41},[46,124363,124364],{"class":48,"line":49},[46,124365,124359],{},[19,124367,124368],{},"上传文件夹指令格式如下：",[36,124370,124372],{"className":122444,"code":124371,"language":122446,"meta":122447,"style":41},"scp -r 本地文件夹路径 账号@ip:路径\n",[43,124373,124374],{"__ignoreMap":41},[46,124375,124376],{"class":48,"line":49},[46,124377,124371],{},[19,124379,124380],{},"下载文件指令格式如下：",[36,124382,124384],{"className":122444,"code":124383,"language":122446,"meta":122447,"style":41},"scp 账号@ip:路径 本地文件夹路径\n",[43,124385,124386],{"__ignoreMap":41},[46,124387,124388],{"class":48,"line":49},[46,124389,124383],{},[19,124391,124392],{},"下载文件夹指令格式如下：",[36,124394,124396],{"className":122444,"code":124395,"language":122446,"meta":122447,"style":41},"scp -r 账号@ip:路径 本地文件夹路径\n",[43,124397,124398],{"__ignoreMap":41},[46,124399,124400],{"class":48,"line":49},[46,124401,124395],{},[19,124403,124404],{},[2339,124405,124406],{},"优化",[19,124408,124409],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[23,124411,124412,124415],{},[26,124413,124414],{},"本地生成密钥对；",[26,124416,124417],{},"将公钥上传至远程主机。",[19,124419,124420],{},[2339,124421,124422],{},"1.生成密钥对",[19,124424,124425],{},"本地客户端生成公私钥：（一路回车默认即可）",[36,124427,124429],{"className":122444,"code":124428,"language":122446,"meta":122447,"style":41},"ssh-keygen\n",[43,124430,124431],{"__ignoreMap":41},[46,124432,124433],{"class":48,"line":49},[46,124434,124428],{},[19,124436,124437],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[23,124439,124440,124443],{},[26,124441,124442],{},"id_rsa （私钥）；",[26,124444,124445],{},"id_rsa.pub (公钥)。",[19,124447,124448],{},[2339,124449,124450],{},"2.公钥上传",[19,124452,124453],{},"上传指令如下：",[36,124455,124457],{"className":122444,"code":124456,"language":122446,"meta":122447,"style":41},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[43,124458,124459],{"__ignoreMap":41},[46,124460,124461],{"class":48,"line":49},[46,124462,124456],{},[19,124464,124465],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[19,124467,124468],{},"以后再远程登录就无需录入密码了。",[479,124470,124472],{"id":124471},"_723-使用vscode优化","7.2.3 使用VScode优化",[19,124474,124475],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[19,124477,124478],{},[2339,124479,124480],{},"1.准备工作",[19,124482,124483],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[19,124485,124486],{},[2339,124487,124488],{},"2.为VScode安装远程开发插件",[19,124490,124491,124492,124495,124496,124499,124500,365],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[43,124493,124494],{},"扩展：商店","的搜索栏输入",[43,124497,124498],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[43,124501,124502],{},"安装",[19,124504,124505],{},[3514,124506],{"alt":41,"src":124507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[19,124509,124510],{},[2339,124511,124512],{},"3.配置远程连接",[19,124514,124515,124516,124519,124520,124523],{},"步骤1：使用快捷键",[43,124517,124518],{},"ctrl + shift + p","打开命令输入窗口，并输入",[43,124521,124522],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[19,124525,124526],{},[3514,124527],{"alt":41,"src":124528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[19,124530,124531,124532,365],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[43,124533,124534],{},"Add New SSH Host",[19,124536,124537],{},[3514,124538],{"alt":41,"src":124539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[19,124541,124542,124543,124546,124547,124550,124551,124554],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[43,124544,124545],{},"ssh +X ubuntu@192.168.43.164","，其中，",[43,124548,124549],{},"ubuntu","需要替换为你的登录用户名，",[43,124552,124553],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[19,124556,124557],{},[3514,124558],{"alt":41,"src":124559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[19,124561,124562],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[19,124564,124565],{},[3514,124566],{"alt":41,"src":124567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[19,124569,124570],{},[3514,124571],{"alt":41,"src":124572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[19,124574,124575],{},[2339,124576,124577],{},"4.使用",[19,124579,124580,124581,124519,124583,124585],{},"步骤1：继续使用快捷键",[43,124582,124518],{},[43,124584,124522],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[19,124587,124588],{},[3514,124589],{"alt":41,"src":124590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[19,124592,124593,124594,124597],{},"或者，也可以点击侧边栏的",[43,124595,124596],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[19,124599,124600],{},[3514,124601],{"alt":41,"src":124602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[19,124604,124605,124606,124609,124610,124613],{},"步骤2：选择菜单栏的",[43,124607,124608],{},"文件","下的",[43,124611,124612],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[19,124615,124616],{},[3514,124617],{"alt":41,"src":124618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[19,124620,124621],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,124623,124625],{"id":124624},"_73-远程桌面","7.3 远程桌面",[19,124627,124628],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[19,124630,124631],{},"我们选择使用VNC来看。",[23,124633,124634],{},[26,124635,124636],{},"安装VNC服务器：",[19,124638,124639],{},"这里以TigerVNC为例进行安装：",[36,124641,124643],{"className":118924,"code":124642,"language":118926,"meta":41,"style":41},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[43,124644,124645],{"__ignoreMap":41},[46,124646,124647,124649,124651,124653,124656],{"class":48,"line":49},[46,124648,170],{"class":169},[46,124650,118945],{"class":173},[46,124652,177],{"class":173},[46,124654,124655],{"class":173}," tigervnc-standalone-server",[46,124657,124658],{"class":173}," tigervnc-common\n",[23,124660,124661],{"start":60},[26,124662,124663],{},"设置VNC密码：",[19,124665,124666],{},"为VNC用户设置密码，运行以下命令：",[36,124668,124670],{"className":118924,"code":124669,"language":118926,"meta":41,"style":41},"vncpasswd\n",[43,124671,124672],{"__ignoreMap":41},[46,124673,124674],{"class":48,"line":49},[46,124675,124669],{"class":169},[23,124677,124678],{"start":200},[26,124679,124680],{},"配置VNC启动脚本:",[19,124682,124683],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[36,124685,124687],{"className":118924,"code":124686,"language":118926,"meta":41,"style":41},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[43,124688,124689,124698],{"__ignoreMap":41},[46,124690,124691,124693,124695],{"class":48,"line":49},[46,124692,103195],{"class":169},[46,124694,31203],{"class":180},[46,124696,124697],{"class":173}," ~\u002F.vnc\n",[46,124699,124700,124703],{"class":48,"line":60},[46,124701,124702],{"class":169},"nano",[46,124704,124705],{"class":173}," ~\u002F.vnc\u002Fxstartup\n",[19,124707,124708],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[36,124710,124712],{"className":118924,"code":124711,"language":118926,"meta":41,"style":41},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[43,124713,124714,124719,124727,124734],{"__ignoreMap":41},[46,124715,124716],{"class":48,"line":49},[46,124717,124718],{"class":2253},"#!\u002Fbin\u002Fsh\n",[46,124720,124721,124724],{"class":48,"line":60},[46,124722,124723],{"class":180},"unset",[46,124725,124726],{"class":173}," SESSION_MANAGER\n",[46,124728,124729,124731],{"class":48,"line":200},[46,124730,124723],{"class":180},[46,124732,124733],{"class":173}," DBUS_SESSION_BUS_ADDRESS\n",[46,124735,124736],{"class":48,"line":211},[46,124737,124738],{"class":169},"gnome-session\n",[19,124740,124741],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[23,124743,124744],{"start":211},[26,124745,124746],{},"给予执行权限：",[19,124748,124749],{},"为xstartup文件设置执行权限：",[36,124751,124753],{"className":118924,"code":124752,"language":118926,"meta":41,"style":41},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[43,124754,124755],{"__ignoreMap":41},[46,124756,124757,124759,124762],{"class":48,"line":49},[46,124758,26608],{"class":169},[46,124760,124761],{"class":173}," +x",[46,124763,124705],{"class":173},[23,124765,124766],{"start":222},[26,124767,124768],{},"启动VNC服务器：",[36,124770,124772],{"className":118924,"code":124771,"language":118926,"meta":41,"style":41},"vncserver -geometry 1920x1080 -localhost=0\n",[43,124773,124774],{"__ignoreMap":41},[46,124775,124776,124779,124782,124785],{"class":48,"line":49},[46,124777,124778],{"class":169},"vncserver",[46,124780,124781],{"class":180}," -geometry",[46,124783,124784],{"class":173}," 1920x1080",[46,124786,124787],{"class":180}," -localhost=0\n",[19,124789,124790],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[19,124792,124793],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[23,124795,124796],{"start":636},[26,124797,124798],{},"查看已开启的VNC服务器：",[36,124800,124802],{"className":118924,"code":124801,"language":118926,"meta":41,"style":41},"vncserver -list\n",[43,124803,124804],{"__ignoreMap":41},[46,124805,124806,124808],{"class":48,"line":49},[46,124807,124778],{"class":169},[46,124809,124810],{"class":180}," -list\n",[19,124812,124813],{},[3514,124814],{"alt":41,"src":124815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[23,124817,124818],{"start":641},[26,124819,124820],{},"连接到VNC服务器：",[19,124822,124823],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[23,124825,124826],{"start":653},[26,124827,124828],{},"停止VNC服务器：",[19,124830,124831],{},"如果需要停止VNC服务器，可以使用以下命令：",[36,124833,124835],{"className":118924,"code":124834,"language":118926,"meta":41,"style":41},"vncserver -kill :1\n",[43,124836,124837],{"__ignoreMap":41},[46,124838,124839,124841,124844],{"class":48,"line":49},[46,124840,124778],{"class":169},[46,124842,124843],{"class":180}," -kill",[46,124845,124846],{"class":173}," :1\n",[19,124848,124849],{},"将:1替换为你实际使用的显示编号。",[19,124851,124852],{},[3514,124853],{"alt":41,"src":124854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[19,124856,124857],{},[3514,124858],{"alt":41,"src":124859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,124861,124863],{"id":124862},"_74-usb端口设置","7.4 USB端口设置",[19,124865,124866],{},[2339,124867,124868],{},"首先先配置好权限",[36,124870,124872],{"className":118924,"code":124871,"language":118926,"meta":41,"style":41},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[43,124873,124874,124879,124892,124899,124904],{"__ignoreMap":41},[46,124875,124876],{"class":48,"line":49},[46,124877,124878],{"class":2253},"# 将用户权限提高\n",[46,124880,124881,124883,124885,124887,124890],{"class":48,"line":60},[46,124882,170],{"class":169},[46,124884,28563],{"class":173},[46,124886,28566],{"class":180},[46,124888,124889],{"class":173}," dialout",[46,124891,28571],{"class":56},[46,124893,124894,124896],{"class":48,"line":200},[46,124895,28590],{"class":169},[46,124897,124898],{"class":173}," dialout\n",[46,124900,124901],{"class":48,"line":211},[46,124902,124903],{"class":2253},"# 查看下面命令是否输出dialout（若输出才正常）\n",[46,124905,124906],{"class":48,"line":222},[46,124907,124908],{"class":169},"groups\n",[19,124910,124911],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[479,124913,124915],{"id":124914},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[19,124917,124918,124921],{},[2339,124919,124920],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[19,124923,124924,124927],{},[2339,124925,124926],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[19,124929,124930],{},[2339,124931,124932],{},"流程如下：",[19,124934,124935],{},"（1）.查找设备idVendor和idProduct",[19,124937,124938,124939,124942],{},"接入两个USB设备，在终端调用指令",[43,124940,124941],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[19,124944,124945],{},[3514,124946],{"alt":41,"src":124947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[19,124949,124950,124951,124954],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[43,124952,124953],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[19,124956,124957],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[19,124959,124960],{},"（2）.编写映射规则",[19,124962,124963,124964,124967],{},"在",[43,124965,124966],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[36,124969,124971],{"className":118924,"code":124970,"language":118926,"meta":41,"style":41},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[43,124972,124973],{"__ignoreMap":41},[46,124974,124975,124977,124979],{"class":48,"line":49},[46,124976,170],{"class":169},[46,124978,120211],{"class":173},[46,124980,124981],{"class":173}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[19,124983,124984],{},"输入如下内容：",[36,124986,124988],{"className":118924,"code":124987,"language":118926,"meta":41,"style":41},"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",[43,124989,124990,125020],{"__ignoreMap":41},[46,124991,124992,124995,124997,125000,125003,125006,125009,125011,125014,125017],{"class":48,"line":49},[46,124993,124994],{"class":56},"KERNEL",[46,124996,79],{"class":52},[46,124998,124999],{"class":173},"=\"ttyUSB*\",",[46,125001,125002],{"class":169}," ATTRS",[46,125004,125005],{"class":173},"{idVendor}==",[46,125007,125008],{"class":169},"\"10c4\"",[46,125010,2565],{"class":169},[46,125012,125013],{"class":173}," ATTRS{idProduct}==\"ea60\",",[46,125015,125016],{"class":173}," MODE:=\"0777\",",[46,125018,125019],{"class":173}," SYMLINK+=\"mylidar\"\n",[46,125021,125022,125024,125026,125028,125030,125032,125035,125037,125040,125042],{"class":48,"line":60},[46,125023,124994],{"class":56},[46,125025,79],{"class":52},[46,125027,124999],{"class":173},[46,125029,125002],{"class":169},[46,125031,125005],{"class":173},[46,125033,125034],{"class":169},"\"1a86\"",[46,125036,2565],{"class":169},[46,125038,125039],{"class":173}," ATTRS{idProduct}==\"7523\",",[46,125041,125016],{"class":173},[46,125043,125044],{"class":173}," SYMLINK+=\"mycar\"\n",[19,125046,125047],{},"代码解释：",[3191,125049,125050,125053,125056,125059],{},[26,125051,125052],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[26,125054,125055],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[26,125057,125058],{},"SYMLINK是符号连接，即绑定的别名；",[26,125060,125061],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[19,125063,125064,125065,125068,125071],{},"***小提示：***",[25555,125066,125067],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[43,125069,125070],{},"\u002Fetc\u002Fudev\u002Frule.d",[25555,125072,125073],{},"目录即可。",[19,125075,125076],{},"表格 还在加载中，请等待加载完成后再尝试复制",[19,125078,125079],{},"（3）.使规则生效",[19,125081,125082],{},"在终端下输入如下指令：",[36,125084,125086],{"className":118924,"code":125085,"language":118926,"meta":41,"style":41},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[43,125087,125088,125093,125105,125116,125120,125125,125138],{"__ignoreMap":41},[46,125089,125090],{"class":48,"line":49},[46,125091,125092],{"class":2253},"# Ubuntu用下方命令\n",[46,125094,125095,125097,125099,125102],{"class":48,"line":60},[46,125096,170],{"class":169},[46,125098,121676],{"class":173},[46,125100,125101],{"class":173}," udev",[46,125103,125104],{"class":173}," reload\n",[46,125106,125107,125109,125111,125113],{"class":48,"line":200},[46,125108,170],{"class":169},[46,125110,121676],{"class":173},[46,125112,125101],{"class":173},[46,125114,125115],{"class":173}," restart\n",[46,125117,125118],{"class":48,"line":211},[46,125119,616],{"emptyLinePlaceholder":615},[46,125121,125122],{"class":48,"line":222},[46,125123,125124],{"class":2253},"#Fedora用下方命令\n",[46,125126,125127,125129,125132,125135],{"class":48,"line":636},[46,125128,170],{"class":169},[46,125130,125131],{"class":173}," udevadm",[46,125133,125134],{"class":173}," control",[46,125136,125137],{"class":180}," --reload\n",[46,125139,125140,125142,125144],{"class":48,"line":641},[46,125141,170],{"class":169},[46,125143,125131],{"class":173},[46,125145,125146],{"class":173}," trigger\n",[19,125148,125149],{},"再重新插拔设备即可。",[19,125151,125152],{},"（4）.测试",[19,125154,125155],{},"终端下输入如下指令",[36,125157,125159],{"className":118924,"code":125158,"language":118926,"meta":41,"style":41},"ll \u002Fdev | grep ttyUSB\n",[43,125160,125161],{"__ignoreMap":41},[46,125162,125163,125166,125169,125171,125173],{"class":48,"line":49},[46,125164,125165],{"class":169},"ll",[46,125167,125168],{"class":173}," \u002Fdev",[46,125170,27102],{"class":52},[46,125172,32223],{"class":169},[46,125174,125175],{"class":173}," ttyUSB\n",[19,125177,125178],{},"运行结果如下：",[19,125180,125181],{},[3514,125182],{"alt":41,"src":125183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[19,125185,125186,125187,125190],{},"也可以多次插拔USB设备，会发现设备端口",[43,125188,125189],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[19,125192,125193],{},[2339,125194,119592],{},[19,125196,125197],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[479,125199,125201],{"id":125200},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[19,125203,125204,125206],{},[2339,125205,124920],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[19,125208,125209,125211],{},[2339,125210,124926],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[19,125213,125214],{},[2339,125215,124932],{},[19,125217,125218],{},"（1）.查看所连接的主机USB接口的KERNELS",[19,125220,125221],{},"调用如下指令查看第一台雷达的USB信息：",[36,125223,125225],{"className":118924,"code":125224,"language":118926,"meta":41,"style":41},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[43,125226,125227,125247],{"__ignoreMap":41},[46,125228,125229,125232,125234,125237,125240,125242,125244],{"class":48,"line":49},[46,125230,125231],{"class":169},"udevadm",[46,125233,71786],{"class":173},[46,125235,125236],{"class":180}," --attribute-walk",[46,125238,125239],{"class":180}," --name=\u002Fdev\u002FttyUSB0",[46,125241,27102],{"class":52},[46,125243,32223],{"class":169},[46,125245,125246],{"class":173}," KERNELS\n",[46,125248,125249,125251,125253,125255,125258,125260,125262],{"class":48,"line":60},[46,125250,125231],{"class":169},[46,125252,71786],{"class":173},[46,125254,125236],{"class":180},[46,125256,125257],{"class":180}," --name=\u002Fdev\u002FttyACM0",[46,125259,27102],{"class":52},[46,125261,32223],{"class":169},[46,125263,125246],{"class":173},[19,125265,125266],{},[3514,125267],{"alt":41,"src":125268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[19,125270,125271],{},"调用如下指令查看第二台雷达的USB信息：",[36,125273,125275],{"className":118924,"code":125274,"language":118926,"meta":41,"style":41},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[43,125276,125277],{"__ignoreMap":41},[46,125278,125279,125281,125283,125285,125288,125290,125292],{"class":48,"line":49},[46,125280,125231],{"class":169},[46,125282,71786],{"class":173},[46,125284,125236],{"class":180},[46,125286,125287],{"class":180}," --name=\u002Fdev\u002FttyUSB1",[46,125289,27102],{"class":52},[46,125291,32223],{"class":169},[46,125293,125246],{"class":173},[19,125295,125296,125297,125300,125301,125304,125305,125308],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[43,125298,125299],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[43,125302,125303],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[2339,125306,125307],{},"唯一性标识","”。",[19,125310,124960],{},[19,125312,124963,125313,125315],{},[43,125314,124966],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[36,125317,125318],{"className":118924,"code":124970,"language":118926,"meta":41,"style":41},[43,125319,125320],{"__ignoreMap":41},[46,125321,125322,125324,125326],{"class":48,"line":49},[46,125323,170],{"class":169},[46,125325,120211],{"class":173},[46,125327,124981],{"class":173},[36,125329,125331],{"className":118924,"code":125330,"language":118926,"meta":41,"style":41},"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",[43,125332,125333,125362],{"__ignoreMap":41},[46,125334,125335,125337,125339,125341,125344,125346,125349,125352,125354,125357,125359],{"class":48,"line":49},[46,125336,124994],{"class":56},[46,125338,79],{"class":52},[46,125340,124999],{"class":173},[46,125342,125343],{"class":56}," KERNELS",[46,125345,79],{"class":52},[46,125347,125348],{"class":173},"=\"1-1.3:1.0\",",[46,125350,125351],{"class":169}," MODE:",[46,125353,79],{"class":173},[46,125355,125356],{"class":169},"\"0777\"",[46,125358,2565],{"class":169},[46,125360,125361],{"class":173}," SYMLINK+=\"rplidar_front\"\n",[46,125363,125364,125366,125368,125370,125372,125374,125377,125379,125381,125383,125385],{"class":48,"line":60},[46,125365,124994],{"class":56},[46,125367,79],{"class":52},[46,125369,124999],{"class":173},[46,125371,125343],{"class":56},[46,125373,79],{"class":52},[46,125375,125376],{"class":173},"=\"1-1.4:1.0\",",[46,125378,125351],{"class":169},[46,125380,79],{"class":173},[46,125382,125356],{"class":169},[46,125384,2565],{"class":169},[46,125386,125387],{"class":173}," SYMLINK+=\"rplidar_back\"\n",[19,125389,125079],{},[19,125391,125082],{},[36,125393,125394],{"className":118924,"code":125085,"language":118926,"meta":41,"style":41},[43,125395,125396,125400,125410,125420,125424,125428,125438],{"__ignoreMap":41},[46,125397,125398],{"class":48,"line":49},[46,125399,125092],{"class":2253},[46,125401,125402,125404,125406,125408],{"class":48,"line":60},[46,125403,170],{"class":169},[46,125405,121676],{"class":173},[46,125407,125101],{"class":173},[46,125409,125104],{"class":173},[46,125411,125412,125414,125416,125418],{"class":48,"line":200},[46,125413,170],{"class":169},[46,125415,121676],{"class":173},[46,125417,125101],{"class":173},[46,125419,125115],{"class":173},[46,125421,125422],{"class":48,"line":211},[46,125423,616],{"emptyLinePlaceholder":615},[46,125425,125426],{"class":48,"line":222},[46,125427,125124],{"class":2253},[46,125429,125430,125432,125434,125436],{"class":48,"line":636},[46,125431,170],{"class":169},[46,125433,125131],{"class":173},[46,125435,125134],{"class":173},[46,125437,125137],{"class":180},[46,125439,125440,125442,125444],{"class":48,"line":641},[46,125441,170],{"class":169},[46,125443,125131],{"class":173},[46,125445,125146],{"class":173},[19,125447,125149],{},[19,125449,125152],{},[19,125451,125155,125452,125455],{},[43,125453,125454],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[19,125457,125458],{},[3514,125459],{"alt":41,"src":125460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[19,125462,125463],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[19,125465,125466,125468],{},[2339,125467,119592],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[479,125470,125472],{"id":125471},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[19,125474,125475],{},"（1）.查看所连接的主机USB接口的信息",[36,125477,125479],{"className":118924,"code":125478,"language":118926,"meta":41,"style":41},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[43,125480,125481,125511],{"__ignoreMap":41},[46,125482,125483,125485,125487,125490,125492,125494,125496,125498,125501,125504,125506,125509],{"class":48,"line":49},[46,125484,125231],{"class":169},[46,125486,71786],{"class":173},[46,125488,125489],{"class":180}," -a",[46,125491,31203],{"class":180},[46,125493,30410],{"class":56},[46,125495,125231],{"class":169},[46,125497,71786],{"class":173},[46,125499,125500],{"class":180}," -q",[46,125502,125503],{"class":173}," path",[46,125505,280],{"class":180},[46,125507,125508],{"class":173}," \u002Fdev\u002FttyACM0",[46,125510,459],{"class":56},[46,125512,125513,125515,125517,125519,125521,125523,125525,125527,125529,125531,125533,125536],{"class":48,"line":60},[46,125514,125231],{"class":169},[46,125516,71786],{"class":173},[46,125518,125489],{"class":180},[46,125520,31203],{"class":180},[46,125522,30410],{"class":56},[46,125524,125231],{"class":169},[46,125526,71786],{"class":173},[46,125528,125500],{"class":180},[46,125530,125503],{"class":173},[46,125532,280],{"class":180},[46,125534,125535],{"class":173}," \u002Fdev\u002FttyUSB0",[46,125537,459],{"class":56},[19,125539,125540],{},[3514,125541],{"alt":41,"src":125542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[19,125544,125545],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[19,125547,124960],{},[19,125549,124963,125550,125315],{},[43,125551,124966],{},[36,125553,125554],{"className":118924,"code":124970,"language":118926,"meta":41,"style":41},[43,125555,125556],{"__ignoreMap":41},[46,125557,125558,125560,125562],{"class":48,"line":49},[46,125559,170],{"class":169},[46,125561,120211],{"class":173},[46,125563,124981],{"class":173},[36,125565,125567],{"className":118924,"code":125566,"language":118926,"meta":41,"style":41},"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",[43,125568,125569,125597,125623],{"__ignoreMap":41},[46,125570,125571,125573,125575,125578,125580,125582,125584,125586,125589,125592,125594],{"class":48,"line":49},[46,125572,124994],{"class":56},[46,125574,79],{"class":52},[46,125576,125577],{"class":173},"=\"ttyACM*\",",[46,125579,125002],{"class":169},[46,125581,125005],{"class":173},[46,125583,125034],{"class":169},[46,125585,2565],{"class":169},[46,125587,125588],{"class":173}," ATTRS{idProduct}==\"55d4\",",[46,125590,125591],{"class":173}," ATTRS{serial}==\"0001\",",[46,125593,125016],{"class":173},[46,125595,125596],{"class":173}," SYMLINK+=\"ttyACM_MCU\"\n",[46,125598,125599,125601,125603,125605,125607,125609,125611,125613,125615,125618,125620],{"class":48,"line":60},[46,125600,124994],{"class":56},[46,125602,79],{"class":52},[46,125604,125577],{"class":173},[46,125606,125002],{"class":169},[46,125608,125005],{"class":173},[46,125610,125034],{"class":169},[46,125612,2565],{"class":169},[46,125614,125588],{"class":173},[46,125616,125617],{"class":173}," ATTRS{serial}==\"0002\",",[46,125619,125016],{"class":173},[46,125621,125622],{"class":173}," SYMLINK+=\"ttyACM_Lidar\"\n",[46,125624,125625,125627,125629,125631,125633,125635,125637,125639,125641,125643],{"class":48,"line":200},[46,125626,124994],{"class":56},[46,125628,79],{"class":52},[46,125630,124999],{"class":173},[46,125632,125002],{"class":169},[46,125634,125005],{"class":173},[46,125636,125034],{"class":169},[46,125638,2565],{"class":169},[46,125640,125039],{"class":173},[46,125642,125016],{"class":173},[46,125644,125645],{"class":173}," SYMLINK+=\"ttyUSB_IMU\"\n",[19,125647,125079],{},[19,125649,125082],{},[36,125651,125652],{"className":118924,"code":125085,"language":118926,"meta":41,"style":41},[43,125653,125654,125658,125668,125678,125682,125686,125696],{"__ignoreMap":41},[46,125655,125656],{"class":48,"line":49},[46,125657,125092],{"class":2253},[46,125659,125660,125662,125664,125666],{"class":48,"line":60},[46,125661,170],{"class":169},[46,125663,121676],{"class":173},[46,125665,125101],{"class":173},[46,125667,125104],{"class":173},[46,125669,125670,125672,125674,125676],{"class":48,"line":200},[46,125671,170],{"class":169},[46,125673,121676],{"class":173},[46,125675,125101],{"class":173},[46,125677,125115],{"class":173},[46,125679,125680],{"class":48,"line":211},[46,125681,616],{"emptyLinePlaceholder":615},[46,125683,125684],{"class":48,"line":222},[46,125685,125124],{"class":2253},[46,125687,125688,125690,125692,125694],{"class":48,"line":636},[46,125689,170],{"class":169},[46,125691,125131],{"class":173},[46,125693,125134],{"class":173},[46,125695,125137],{"class":180},[46,125697,125698,125700,125702],{"class":48,"line":641},[46,125699,170],{"class":169},[46,125701,125131],{"class":173},[46,125703,125146],{"class":173},[19,125705,125706,125707],{},"再重新插拔设备即可，或者 ",[2339,125708,125709],{},"直接重启系统。",[19,125711,125152],{},[19,125713,125155,125714,125455],{},[43,125715,125454],{},[19,125717,125718],{},[3514,125719],{"alt":41,"src":125720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[19,125722,125463],{},[19,125724,125725,125727],{},[2339,125726,119592],{}," 一些设备可能没有串口号等。",[479,125729,125731],{"id":125730},"_744-其他注意事项","7.4.4 其他注意事项",[19,125733,125734,125735,125737,125738,125741,125742,20411,125745,125748,125749,125751],{},"并非所有的USB设备端口号都是",[43,125736,125189],{},"的格式，比如Arduino的端口号可能是",[43,125739,125740],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[43,125743,125744],{},"videon",[43,125746,125747],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[43,125750,125744],{},"端口，绑定时需要关联的也是该接口。",[19,125753,125754,125755,125758,125759,125762,125763,125765,125766,125769,125770,125773,125774,125777,125778,125777,125781,125777,125784,365],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[43,125756,125757],{},"KERNEL==\"ttyUSB*\"","修改为",[43,125760,125761],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[43,125764,125757],{},"修改为类似于",[43,125767,125768],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[43,125771,125772],{},"video[0,2,4,6]","表示可以绑定的端口为",[43,125775,125776],{},"video0","或",[43,125779,125780],{},"video2",[43,125782,125783],{},"video4",[43,125785,125786],{},"video6",[14,125788,125790],{"id":125789},"_75-挂载内网网页","7.5 挂载内网网页",[19,125792,125793],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[19,125795,125796],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[19,125798,125799],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[19,125801,125802,125803],{},"Termux 下载地址（F-Droid）：",[2426,125804,125805],{"href":125805,"rel":125806},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[25862],[19,125808,125809],{},"首先打开app后，先更新软件缓存：",[36,125811,125813],{"className":118924,"code":125812,"language":118926,"meta":41,"style":41},"pkg update\n",[43,125814,125815],{"__ignoreMap":41},[46,125816,125817,125820],{"class":48,"line":49},[46,125818,125819],{"class":169},"pkg",[46,125821,28233],{"class":173},[19,125823,125824],{},"然后换源",[36,125826,125828],{"className":118924,"code":125827,"language":118926,"meta":41,"style":41},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[43,125829,125830],{"__ignoreMap":41},[46,125831,125832,125834,125837],{"class":48,"line":49},[46,125833,124702],{"class":169},[46,125835,125836],{"class":56}," $PREFIX",[46,125838,125839],{"class":173},"\u002Fetc\u002Fapt\u002Fsources.list\n",[19,125841,125842],{},"将该文件内容替换为下面：",[36,125844,125846],{"className":118924,"code":125845,"language":118926,"meta":41,"style":41},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[43,125847,125848],{"__ignoreMap":41},[46,125849,125850,125853,125856,125859],{"class":48,"line":49},[46,125851,125852],{"class":169},"deb",[46,125854,125855],{"class":173}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[46,125857,125858],{"class":173}," stable",[46,125860,125861],{"class":173}," main\n",[3191,125863,125864,125891],{},[26,125865,125866,125867,125869,125870],{},"如果你使用的是",[43,125868,124702],{},"编辑器：",[3191,125871,125872,125879,125885],{},[26,125873,125874,125875,125878],{},"按 ",[43,125876,125877],{},"Ctrl+O"," 保存文件。",[26,125880,125874,125881,125884],{},[43,125882,125883],{},"Enter"," 确认文件名。",[26,125886,125874,125887,125890],{},[43,125888,125889],{},"Ctrl+X"," 退出编辑器。",[26,125892,125866,125893,125869,125896],{},[43,125894,125895],{},"vim",[3191,125897,125898,125904],{},[26,125899,125874,125900,125903],{},[43,125901,125902],{},"Esc"," 退出编辑模式。",[26,125905,125906,125907,125909],{},"输入 ",[43,125908,120849],{}," 保存并退出。",[19,125911,125912],{},"接下来重新更新软件源：",[36,125914,125916],{"className":118924,"code":125915,"language":118926,"meta":41,"style":41},"pkg update && pkg upgrade\n",[43,125917,125918],{"__ignoreMap":41},[46,125919,125920,125922,125924,125926,125928],{"class":48,"line":49},[46,125921,125819],{"class":169},[46,125923,118975],{"class":173},[46,125925,28181],{"class":56},[46,125927,125819],{"class":169},[46,125929,118961],{"class":173},[19,125931,125932],{},"安装python：",[36,125934,125936],{"className":118924,"code":125935,"language":118926,"meta":41,"style":41},"pkg install python\n",[43,125937,125938],{"__ignoreMap":41},[46,125939,125940,125942,125944],{"class":48,"line":49},[46,125941,125819],{"class":169},[46,125943,177],{"class":173},[46,125945,125946],{"class":173}," python\n",[19,125948,125949,28462],{},[2339,125950,125951],{},"通过Termux访问设备存储",[19,125953,125954],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[36,125956,125958],{"className":118924,"code":125957,"language":118926,"meta":41,"style":41},"termux-setup-storage\n",[43,125959,125960],{"__ignoreMap":41},[46,125961,125962],{"class":48,"line":49},[46,125963,125957],{"class":169},[23,125965,125966],{},[26,125967,125968,28462,125971],{},[2339,125969,125970],{},"进入HTML文件所在的目录",[23,125972,125973],{},[26,125974,125975,125976,125978],{},"使用",[43,125977,103205],{},"命令进入HTML文件所在的目录：",[36,125980,125982],{"className":118924,"code":125981,"language":118926,"meta":41,"style":41},"cd ~\u002Fyour_html_folder\n",[43,125983,125984],{"__ignoreMap":41},[46,125985,125986,125988],{"class":48,"line":49},[46,125987,103205],{"class":180},[46,125989,125990],{"class":173}," ~\u002Fyour_html_folder\n",[23,125992,125993],{"start":60},[26,125994,125995,28462,125998,126003,126020],{},[2339,125996,125997],{},"启动Python HTTP服务器",[23,125999,126000],{},[26,126001,126002],{},"运行以下命令启动一个简单的HTTP服务器：",[36,126004,126006],{"className":118924,"code":126005,"language":118926,"meta":41,"style":41},"python -m http.server 8000\n",[43,126007,126008],{"__ignoreMap":41},[46,126009,126010,126012,126014,126017],{"class":48,"line":49},[46,126011,40],{"class":169},[46,126013,102826],{"class":180},[46,126015,126016],{"class":173}," http.server",[46,126018,126019],{"class":180}," 8000\n",[23,126021,126022],{"start":200},[26,126023,126024,126025,126028],{},"这会在端口",[43,126026,126027],{},"8000","上启动一个Web服务器。",[3191,126030,126031],{},[26,126032,126033],{},"启动服务器后，Termux会显示日志信息，例如：",[36,126035,126037],{"className":122444,"code":126036,"language":122446,"meta":122447,"style":41},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[43,126038,126039],{"__ignoreMap":41},[46,126040,126041],{"class":48,"line":49},[46,126042,126036],{},[3191,126044,126045],{},[26,126046,126047],{},"这表示服务器已成功启动。",[19,126049,126050],{},[2339,126051,126052],{},"在浏览器中访问HTML文件",[23,126054,126055],{},[26,126056,126057,28462,126060,126065],{},[2339,126058,126059],{},"在同一设备上访问",[23,126061,126062],{},[26,126063,126064],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[36,126066,126069],{"className":126067,"code":126068,"language":73629,"meta":41,"style":41},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[43,126070,126071],{"__ignoreMap":41},[46,126072,126073,126076],{"class":48,"line":49},[46,126074,126075],{"class":56},"http:",[46,126077,126078],{"class":2253},"\u002F\u002Flocalhost:8000\n",[3191,126080,126081],{},[26,126082,126083,126084,126087],{},"如果HTML文件中有",[43,126085,126086],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,126089,126091],{"id":126090},"_76-linux重点知识","7.6 Linux重点知识",[479,126093,126095],{"id":126094},"_761-关于点的说明","7.6.1 关于点的说明",[19,126097,126098],{},[3514,126099],{"alt":41,"src":126100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[19,126102,126103],{},"一点本目录，两点上目录",[479,126105,126107],{"id":126106},"_762-目录","7.6.2 目录",[23999,126109,126111],{"id":126110},"_7621-系统启动必须","7.6.2.1 系统启动必须",[19,126113,126114],{},[2339,126115,126116],{},"\u002Fboot:",[19,126118,126119],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[19,126121,126122],{},[2339,126123,126124],{},"\u002Fetc:",[19,126126,126127],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[19,126129,126130],{},[2339,126131,126132],{},"\u002Flib：",[19,126134,126135],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[19,126137,126138],{},[2339,126139,126140],{},"\u002Fsys:",[19,126142,126143],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[23999,126145,126147],{"id":126146},"_7622-指令集合","7.6.2.2 指令集合",[19,126149,126150],{},[2339,126151,126152],{},"\u002Fbin:",[19,126154,126155],{},"为二进制文件的缩写，存放最经常使用的命令",[19,126157,126158],{},[2339,126159,126160],{},"\u002Fsbin:",[19,126162,126163],{},"只有系统管理员才能使用的程序和指令",[23999,126165,126167],{"id":126166},"_7623-外部文件管理","7.6.2.3 外部文件管理",[19,126169,126170],{},[2339,126171,126172],{},"\u002Fdev:",[19,126174,126175],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[19,126177,126178],{},[2339,126179,126180],{},"\u002Fmedia:",[19,126182,126183],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[19,126185,126186],{},[2339,126187,126188],{},"\u002Fmnt:",[19,126190,126191],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[23999,126193,126195],{"id":126194},"_7624-临时文件","7.6.2.4 临时文件",[19,126197,126198],{},[2339,126199,126200],{},"\u002Frun:",[19,126202,126203],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[19,126205,126206],{},[2339,126207,126208],{},"\u002Flost+found:",[19,126210,126211],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[19,126213,126214],{},[2339,126215,126216],{},"\u002Ftmp:",[19,126218,126219],{},"这个目录是用来存放一些临时文件的",[23999,126221,126223],{"id":126222},"_7625-账户","7.6.2.5 账户",[19,126225,126226],{},[2339,126227,126228],{},"\u002Froot：",[19,126230,126231],{},"系统管理员的用户主目录",[19,126233,126234,28462],{},[2339,126235,126236],{},"\u002Fhome",[19,126238,126239],{},"用户的主目录，以用户的账号命名的",[19,126241,126242,28462],{},[2339,126243,126244],{},"\u002Fusr",[19,126246,126247],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[19,126249,126250],{},[2339,126251,126252],{},"\u002Fusr\u002Fbin：",[19,126254,126255],{},"系统用户使用的应用程序与指令",[19,126257,126258],{},[2339,126259,126260],{},"\u002Fusr\u002Fsbin：",[19,126262,126263],{},"超级用户使用的比较高级的管理程序和系统守护程序",[19,126265,126266],{},[2339,126267,126268],{},"\u002Fusr\u002Fsrc：",[19,126270,126271],{},"内核源代码默认的放置目录",[23999,126273,126275],{"id":126274},"_7626-运行过程要用","7.6.2.6 运行过程要用",[19,126277,126278],{},[2339,126279,126280],{},"\u002Fvar：",[19,126282,126283],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[19,126285,126286],{},[2339,126287,126288],{},"\u002Fproc:",[19,126290,126291,126292,126295],{},"管理 ",[2339,126293,126294],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[23999,126297,126299],{"id":126298},"_7627-扩展用的","7.6.2.7 扩展用的",[19,126301,126302],{},[2339,126303,126304],{},"\u002Fopt:",[19,126306,126307],{},"默认是空的，我们安装额外软件可以放在这个里面",[19,126309,126310],{},[2339,126311,126312],{},"\u002Fsrv:",[19,126314,126315],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[479,126317,126319],{"id":126318},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[19,126321,126322],{},[3514,126323],{"alt":41,"src":126324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[19,126326,126327],{},"windows-->linux:",[19,126329,126330],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[19,126332,126333],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[19,126335,126336],{},"linux传输文件到windows",[19,126338,126339],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[479,126341,126343],{"id":126342},"_764-易忘知识","7.6.4 易忘知识",[19,126345,126346],{},"操作系统内核查看",[36,126348,126349],{"className":118924,"code":122918,"language":118926,"meta":41,"style":41},[43,126350,126351],{"__ignoreMap":41},[46,126352,126353,126355],{"class":48,"line":49},[46,126354,72169],{"class":169},[46,126356,122927],{"class":180},[19,126358,126359],{},[3514,126360],{"alt":41,"src":126361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[19,126363,126364],{},[3514,126365],{"alt":41,"src":126366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[36,126368,126370],{"className":118924,"code":126369,"language":118926,"meta":41,"style":41},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[43,126371,126372,126384],{"__ignoreMap":41},[46,126373,126374,126376,126379,126382],{"class":48,"line":49},[46,126375,123135],{"class":169},[46,126377,126378],{"class":173}," mvtest",[46,126380,126381],{"class":173}," mvtest2",[46,126383,4695],{"class":56},[46,126385,126386],{"class":48,"line":60},[46,126387,126388],{"class":169},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[19,126390,126391],{},[3514,126392],{"alt":41,"src":126393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[19,126395,126396],{},[3514,126397],{"alt":41,"src":126398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[19,126400,126401,126402,126405],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[43,126403,126404],{},"du -a"," 可以快速查看磁盘使用细节。",[479,126407,126409],{"id":126408},"_765-vim","7.6.5 Vim",[19,126411,126412],{},[3514,126413],{"alt":41,"src":126414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[19,126416,126417],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[19,126419,126420],{},"一开始进去为命令模式，此时点击输入的字母为命令",[19,126422,126423],{},[2339,126424,126425],{},"1.命令模式：",[19,126427,126428],{},"i 切换到输入模式，在光标当前位置开始输入文本",[19,126430,126431],{},"x 删除当前光标所在处的字符",[19,126433,126434],{},"：切换到底线命令模式，以在最底一行输入命令",[19,126436,126437],{},"a 进行插入模式，在光标下一个位置输入文本",[19,126439,126440],{},"o 在当前的下方插入一个新行，并进入插入模式",[19,126442,126443],{},"0 在当前行的上方插入一个新行，并进入插入模式",[19,126445,126446],{},"dd 剪切当前行",[19,126448,126449],{},"yy 复制当前行",[19,126451,126452],{},"p 粘贴剪贴板内容到光标下方",[19,126454,126455],{},"P 粘贴剪贴板内容到光标上方",[19,126457,126458],{},"u 撤销上一次操作",[19,126460,126461],{},"ctrl+r 重做上一次操作",[19,126463,126464,126466],{},[2981,126465],{}," 保存文件",[19,126468,126469,126471],{},[2831,126470],{}," 退出Vim编辑器",[19,126473,126474,126476],{},[2831,126475],{},"! 强制退出Vim编辑器，不保存修改",[19,126478,126479],{},[2339,126480,126481],{},"2.输入模式：",[19,126483,126484],{},[3514,126485],{"alt":41,"src":126486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[19,126488,126489],{},[2339,126490,126491],{},"3.底线命令模式：",[19,126493,126494],{},[3514,126495],{"alt":41,"src":126496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[19,126498,126499],{},"按下esc可以退出底线命令模式",[479,126501,126503],{"id":126502},"_766-apt","7.6.6 apt",[19,126505,126506],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[479,126508,126510],{"id":126509},"_767-home与root的区别","7.6.7 home与root的区别",[19,126512,126513],{},[3514,126514],{"alt":41,"src":126515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[19,126517,126518],{},[3514,126519],{"alt":41,"src":126520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[19,126522,126523],{},[3514,126524],{"alt":41,"src":126525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[19,126527,126528],{},[3514,126529],{"alt":41,"src":126530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[479,126532,126534],{"id":126533},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[19,126536,126537],{},[2426,126538,126539],{"href":126539,"rel":126540},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[25862],[23,126542,126543,126546],{},[26,126544,126545],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[26,126547,126548],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[19,126550,126551],{},[3514,126552],{"alt":41,"src":126553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[19,126555,126556],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[19,126558,126559],{},[3514,126560],{"alt":41,"src":126561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[36,126563,126565],{"className":122444,"code":126564,"language":122446,"meta":122447,"style":41},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[43,126566,126567,126572],{"__ignoreMap":41},[46,126568,126569],{"class":48,"line":49},[46,126570,126571],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[46,126573,126574],{"class":48,"line":60},[46,126575,126576],{},".\u002Fpycharm.sh\n",[19,126578,126579],{},"3️⃣创建.desktop文件",[19,126581,126582],{},[2339,126583,126584],{},"原理：",[3191,126586,126587,126597],{},[26,126588,126589,126590,126596],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[2339,126591,126592,126595],{},[43,126593,126594],{},".desktop"," 文件"," 来识别应用。",[26,126598,126599,126601,126602],{},[43,126600,126594],{}," 文件相当于一个“应用注册表”，告诉系统：",[3191,126603,126604,126607,126610,126613,126616],{},[26,126605,126606],{},"应用名字（Name）",[26,126608,126609],{},"图标（Icon）",[26,126611,126612],{},"执行命令（Exec）",[26,126614,126615],{},"分类（Categories）",[26,126617,126618],{},"是否需要终端（Terminal）",[36,126620,126622],{"className":122444,"code":126621,"language":122446,"meta":122447,"style":41},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[43,126623,126624,126629],{"__ignoreMap":41},[46,126625,126626],{"class":48,"line":49},[46,126627,126628],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[46,126630,126631],{"class":48,"line":60},[46,126632,126633],{},"nano pycharm.desktop\n",[19,126635,126636],{},"nano是一个命令行下的编辑器，也可以使用vim",[36,126638,126640],{"className":122444,"code":126639,"language":122446,"meta":122447,"style":41},"[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",[43,126641,126642,126647,126652,126657,126662,126667,126672,126677,126682,126687],{"__ignoreMap":41},[46,126643,126644],{"class":48,"line":49},[46,126645,126646],{},"[Desktop Entry]\n",[46,126648,126649],{"class":48,"line":60},[46,126650,126651],{},"Version=1.0\n",[46,126653,126654],{"class":48,"line":200},[46,126655,126656],{},"Type=Application\n",[46,126658,126659],{"class":48,"line":211},[46,126660,126661],{},"Name=PyCharm\n",[46,126663,126664],{"class":48,"line":222},[46,126665,126666],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[46,126668,126669],{"class":48,"line":636},[46,126670,126671],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[46,126673,126674],{"class":48,"line":641},[46,126675,126676],{},"Comment=JetBrains PyCharm IDE\n",[46,126678,126679],{"class":48,"line":653},[46,126680,126681],{},"Categories=Development;IDE;\n",[46,126683,126684],{"class":48,"line":659},[46,126685,126686],{},"Terminal=false\n",[46,126688,126689],{"class":48,"line":665},[46,126690,126691],{},"StartupWMClass=jetbrains-pycharm\n",[3191,126693,126694,126700,126706,126712],{},[26,126695,126696,126699],{},[43,126697,126698],{},"Exec"," → 点击图标时执行的命令",[26,126701,126702,126705],{},[43,126703,126704],{},"Icon"," → 显示在菜单和桌面上的图标",[26,126707,126708,126711],{},[43,126709,126710],{},"Terminal=false"," → 不打开终端",[26,126713,126714,126717],{},[43,126715,126716],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[126719,126720,126721],"blockquote",{},[19,126722,126723,126724,126726,126727],{},"可以理解成 ",[43,126725,126594],{}," 文件是 Linux 的 ",[2339,126728,126729],{},"快捷方式配置文件",[19,126731,126732],{},"4️⃣设置可执行权限",[36,126734,126736],{"className":122444,"code":126735,"language":122446,"meta":122447,"style":41},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[43,126737,126738],{"__ignoreMap":41},[46,126739,126740],{"class":48,"line":49},[46,126741,126735],{},[19,126743,126744],{},"5️⃣桌面图标启动的话如下：",[36,126746,126748],{"className":122444,"code":126747,"language":122446,"meta":122447,"style":41},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[43,126749,126750,126755],{"__ignoreMap":41},[46,126751,126752],{"class":48,"line":49},[46,126753,126754],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[46,126756,126757],{"class":48,"line":60},[46,126758,126759],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[23,126761,126762],{"start":200},[26,126763,126764],{},"下载Appimage文件实现软件的安装",[19,126766,126767],{},"1️⃣先下载appimage",[19,126769,126770],{},[2426,126771,126772],{"href":126772,"rel":126773},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[25862],[19,126775,126776],{},[3514,126777],{"alt":41,"src":126778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[19,126780,126781],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[19,126783,126784],{},[3514,126785],{"alt":41,"src":126786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[19,126788,126789],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[19,126791,126792],{},[3514,126793],{"alt":41,"src":126794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[19,126796,126797],{},[3514,126798],{"alt":41,"src":126799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[19,126801,126802,126803,126806],{},"3️⃣给他们放在",[43,126804,126805],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[19,126808,126809],{},"4️⃣给软件执行权限",[36,126811,126813],{"className":122444,"code":126812,"language":122446,"meta":122447,"style":41},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[43,126814,126815,126820],{"__ignoreMap":41},[46,126816,126817],{"class":48,"line":49},[46,126818,126819],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[46,126821,126822],{"class":48,"line":60},[46,126823,126824],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[19,126826,126827],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[36,126829,126831],{"className":118924,"code":126830,"language":118926,"meta":41,"style":41},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[43,126832,126833,126840,126847,126853],{"__ignoreMap":41},[46,126834,126835,126837],{"class":48,"line":49},[46,126836,103205],{"class":180},[46,126838,126839],{"class":173}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[46,126841,126842,126844],{"class":48,"line":60},[46,126843,941],{"class":169},[46,126845,126846],{"class":173}," .\u002Fqqmusic.desktop\n",[46,126848,126849,126851],{"class":48,"line":200},[46,126850,125895],{"class":169},[46,126852,126846],{"class":173},[46,126854,126855,126857,126859,126861],{"class":48,"line":211},[46,126856,170],{"class":169},[46,126858,26576],{"class":173},[46,126860,124761],{"class":173},[46,126862,126846],{"class":173},[19,126864,126865,126867],{},[43,126866,941],{},"：一个 Linux 命令，主要功能是：",[3191,126869,126870,126873],{},[26,126871,126872],{},"如果文件不存在，就创建一个新的空文件",[26,126874,126875],{},"如果文件已存在，就更新该文件的最后修改时间",[36,126877,126879],{"className":122444,"code":126878,"language":122446,"meta":122447,"style":41},"[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",[43,126880,126881,126885,126890,126895,126900,126904,126909],{"__ignoreMap":41},[46,126882,126883],{"class":48,"line":49},[46,126884,126646],{},[46,126886,126887],{"class":48,"line":60},[46,126888,126889],{},"Name=QQ音乐\n",[46,126891,126892],{"class":48,"line":200},[46,126893,126894],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[46,126896,126897],{"class":48,"line":211},[46,126898,126899],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[46,126901,126902],{"class":48,"line":222},[46,126903,126656],{},[46,126905,126906],{"class":48,"line":636},[46,126907,126908],{},"Categories=Audio;Music;Player;\n",[46,126910,126911],{"class":48,"line":641},[46,126912,126913],{},"Comment=QQ Music Client for Linux\n",[19,126915,126916],{},"将文件复制进去",[19,126918,126919],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[19,126921,126922],{},[3514,126923],{"alt":41,"src":126924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[19,126926,126927],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[19,126929,126930],{},[3514,126931],{"alt":41,"src":126932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[19,126934,126935,126936,126939,126940,126943],{},"如果你用的不是KDE，那么也可以直接修改",[43,126937,126938],{},"qqmuic.desktop","：在exec的末尾加上",[43,126941,126942],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[36,126945,126947],{"className":122444,"code":126946,"language":122446,"meta":122447,"style":41},"[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",[43,126948,126949,126953,126957,126962,126966,126970,126974],{"__ignoreMap":41},[46,126950,126951],{"class":48,"line":49},[46,126952,126646],{},[46,126954,126955],{"class":48,"line":60},[46,126956,126889],{},[46,126958,126959],{"class":48,"line":200},[46,126960,126961],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[46,126963,126964],{"class":48,"line":211},[46,126965,126899],{},[46,126967,126968],{"class":48,"line":222},[46,126969,126656],{},[46,126971,126972],{"class":48,"line":636},[46,126973,126908],{},[46,126975,126976],{"class":48,"line":641},[46,126977,126913],{},[19,126979,126980],{},[3514,126981],{"alt":41,"src":126982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[19,126984,126985],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[36,126987,126989],{"className":122444,"code":126988,"language":122446,"meta":122447,"style":41},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[43,126990,126991],{"__ignoreMap":41},[46,126992,126993],{"class":48,"line":49},[46,126994,126988],{},[23,126996,126997],{"start":211},[26,126998,126999],{},"去Flathub上安装软件",[19,127001,127002],{},[2426,127003,127004],{"href":127004,"rel":127005},"https:\u002F\u002Fflathub.org\u002F",[25862],[19,127007,127008],{},"1️⃣去上面的官网搜索软件+下载软件",[19,127010,127011],{},[3514,127012],{"alt":41,"src":127013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[36,127015,127017],{"className":122444,"code":127016,"language":122446,"meta":122447,"style":41},"flatpak install flathub com.obsproject.Studio\n",[43,127018,127019],{"__ignoreMap":41},[46,127020,127021],{"class":48,"line":49},[46,127022,127016],{},[19,127024,127025],{},[3514,127026],{"alt":41,"src":127027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[19,127029,127030],{},"2️⃣运行软件",[19,127032,127033],{},"a.官方方式：",[19,127035,127036],{},[3514,127037],{"alt":41,"src":127038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[36,127040,127041],{"className":122444,"code":127016,"language":122446,"meta":122447,"style":41},[43,127042,127043],{"__ignoreMap":41},[46,127044,127045],{"class":48,"line":49},[46,127046,127016],{},[19,127048,127049],{},"b.当普通软件运行：",[19,127051,127052],{},[3514,127053],{"alt":41,"src":127054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[19,127056,127057],{},[3514,127058],{"alt":41,"src":127059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[2098,127061,127062],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":41,"searchDepth":60,"depth":60,"links":127064},[127065,127066,127071,127072,127078,127079],{"id":123797,"depth":60,"text":123798},{"id":124139,"depth":60,"text":124140,"children":127067},[127068,127069,127070],{"id":124143,"depth":200,"text":124144},{"id":124210,"depth":200,"text":124211},{"id":124471,"depth":200,"text":124472},{"id":124624,"depth":60,"text":124625},{"id":124862,"depth":60,"text":124863,"children":127073},[127074,127075,127076,127077],{"id":124914,"depth":200,"text":124915},{"id":125200,"depth":200,"text":125201},{"id":125471,"depth":200,"text":125472},{"id":125730,"depth":200,"text":125731},{"id":125789,"depth":60,"text":125790},{"id":126090,"depth":60,"text":126091,"children":127080},[127081,127082,127083,127084,127085,127086,127087,127088],{"id":126094,"depth":200,"text":126095},{"id":126106,"depth":200,"text":126107},{"id":126318,"depth":200,"text":126319},{"id":126342,"depth":200,"text":126343},{"id":126408,"depth":200,"text":126409},{"id":126502,"depth":200,"text":126503},{"id":126509,"depth":200,"text":126510},{"id":126533,"depth":200,"text":126534},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":123789,"description":25378},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":127095,"title":127096,"body":127097,"description":25378,"extension":2125,"meta":127101,"navigation":615,"path":127102,"seo":127103,"stem":127104,"__hash__":127105},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":127098,"toc":127099},[],{"title":41,"searchDepth":60,"depth":60,"links":127100},[],{"category":32250},"\u002Fwiki\u002F2025-01-27-linux",{"title":127096,"description":25378},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":127107,"title":127108,"body":127109,"description":127113,"extension":2125,"meta":127504,"navigation":615,"path":127505,"seo":127506,"stem":127507,"__hash__":127508},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":127110,"toc":127502},[127111,127114,127118,127135,127138,127191,127195,127197,127237,127246,127250,127253,127494,127499],[19,127112,127113],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,127115,127117],{"id":127116},"_1ubuntu环境配置","1.Ubuntu环境配置",[23,127119,127120,127123,127126,127129,127132],{},[26,127121,127122],{},"ubuntu环境换源",[26,127124,127125],{},"安装cuda",[26,127127,127128],{},"安装miniconda",[26,127130,127131],{},"安装pytorch",[26,127133,127134],{},"安装genesis",[19,127136,127137],{},"参考链接：",[36,127139,127141],{"className":160,"code":127140,"language":162,"meta":41,"style":41},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[43,127142,127143],{"__ignoreMap":41},[46,127144,127145,127148,127151,127154,127156,127159,127162,127164,127167,127170,127172,127175,127178,127180,127183,127186,127188],{"class":48,"line":49},[46,127146,127147],{"class":169},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[46,127149,127150],{"class":173},"=blogdetail",[46,127152,127153],{"class":56},"&sharetype",[46,127155,79],{"class":52},[46,127157,127158],{"class":173},"blogdetail",[46,127160,127161],{"class":56},"&sharerId",[46,127163,79],{"class":52},[46,127165,127166],{"class":173},"144728092",[46,127168,127169],{"class":56},"&sharerefer",[46,127171,79],{"class":52},[46,127173,127174],{"class":173},"PC",[46,127176,127177],{"class":56},"&sharesource",[46,127179,79],{"class":52},[46,127181,127182],{"class":173},"qq_69379513",[46,127184,127185],{"class":56},"&sharefrom",[46,127187,79],{"class":52},[46,127189,127190],{"class":173},"from_link\n",[10,127192,127194],{"id":127193},"_2genesis-报错issue","2.Genesis 报错issue",[19,127196,127137],{},[36,127198,127199],{"className":160,"code":127140,"language":162,"meta":41,"style":41},[43,127200,127201],{"__ignoreMap":41},[46,127202,127203,127205,127207,127209,127211,127213,127215,127217,127219,127221,127223,127225,127227,127229,127231,127233,127235],{"class":48,"line":49},[46,127204,127147],{"class":169},[46,127206,127150],{"class":173},[46,127208,127153],{"class":56},[46,127210,79],{"class":52},[46,127212,127158],{"class":173},[46,127214,127161],{"class":56},[46,127216,79],{"class":52},[46,127218,127166],{"class":173},[46,127220,127169],{"class":56},[46,127222,79],{"class":52},[46,127224,127174],{"class":173},[46,127226,127177],{"class":56},[46,127228,79],{"class":52},[46,127230,127182],{"class":173},[46,127232,127185],{"class":56},[46,127234,79],{"class":52},[46,127236,127190],{"class":173},[36,127238,127240],{"className":160,"code":127239,"language":162,"meta":41,"style":41},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[43,127241,127242],{"__ignoreMap":41},[46,127243,127244],{"class":48,"line":49},[46,127245,127239],{"class":169},[10,127247,127249],{"id":127248},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[19,127251,127252],{},"hello_robot.py",[36,127254,127256],{"className":38,"code":127255,"language":40,"meta":41,"style":41},"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",[43,127257,127258,127264,127279,127283,127295,127307,127311,127324,127328,127347,127357,127367,127381,127385,127389,127394,127398,127408,127415,127429,127436,127446,127451,127455,127473,127478,127482,127489],{"__ignoreMap":41},[46,127259,127260,127262],{"class":48,"line":49},[46,127261,53],{"class":52},[46,127263,47276],{"class":56},[46,127265,127266,127269,127272,127274,127276],{"class":48,"line":60},[46,127267,127268],{"class":56},"os.environ[",[46,127270,127271],{"class":173},"'PYOPENGL_PLATFORM'",[46,127273,6460],{"class":56},[46,127275,79],{"class":52},[46,127277,127278],{"class":173}," 'glx'\n",[46,127280,127281],{"class":48,"line":200},[46,127282,616],{"emptyLinePlaceholder":615},[46,127284,127285,127287,127290,127292],{"class":48,"line":211},[46,127286,53],{"class":52},[46,127288,127289],{"class":56}," genesis ",[46,127291,398],{"class":52},[46,127293,127294],{"class":56}," gs\n",[46,127296,127297,127299,127302,127304],{"class":48,"line":222},[46,127298,957],{"class":52},[46,127300,127301],{"class":56}," pynput ",[46,127303,53],{"class":52},[46,127305,127306],{"class":56}," keyboard\n",[46,127308,127309],{"class":48,"line":636},[46,127310,616],{"emptyLinePlaceholder":615},[46,127312,127313,127316,127319,127321],{"class":48,"line":641},[46,127314,127315],{"class":56},"gs.init(",[46,127317,127318],{"class":439},"backend",[46,127320,79],{"class":52},[46,127322,127323],{"class":56},"gs.gpu)\n",[46,127325,127326],{"class":48,"line":653},[46,127327,616],{"emptyLinePlaceholder":615},[46,127329,127330,127333,127335,127338,127341,127343,127345],{"class":48,"line":659},[46,127331,127332],{"class":56},"scene ",[46,127334,79],{"class":52},[46,127336,127337],{"class":56}," gs.Scene(",[46,127339,127340],{"class":439},"show_viewer",[46,127342,79],{"class":52},[46,127344,33453],{"class":180},[46,127346,459],{"class":56},[46,127348,127349,127352,127354],{"class":48,"line":665},[46,127350,127351],{"class":56},"plane ",[46,127353,79],{"class":52},[46,127355,127356],{"class":56}," scene.add_entity(gs.morphs.Plane())\n",[46,127358,127359,127362,127364],{"class":48,"line":670},[46,127360,127361],{"class":56},"franka ",[46,127363,79],{"class":52},[46,127365,127366],{"class":56}," scene.add_entity(\n",[46,127368,127369,127372,127374,127376,127379],{"class":48,"line":676},[46,127370,127371],{"class":56},"    gs.morphs.MJCF(",[46,127373,47325],{"class":439},[46,127375,79],{"class":52},[46,127377,127378],{"class":173},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[46,127380,40019],{"class":56},[46,127382,127383],{"class":48,"line":682},[46,127384,459],{"class":56},[46,127386,127387],{"class":48,"line":688},[46,127388,616],{"emptyLinePlaceholder":615},[46,127390,127391],{"class":48,"line":693},[46,127392,127393],{"class":56},"scene.build()\n",[46,127395,127396],{"class":48,"line":699},[46,127397,616],{"emptyLinePlaceholder":615},[46,127399,127400,127402,127405],{"class":48,"line":705},[46,127401,748],{"class":52},[46,127403,127404],{"class":169}," on_press",[46,127406,127407],{"class":56},"(key):\n",[46,127409,127410,127413],{"class":48,"line":711},[46,127411,127412],{"class":52},"    try",[46,127414,760],{"class":56},[46,127416,127417,127419,127422,127424,127427],{"class":48,"line":717},[46,127418,4525],{"class":52},[46,127420,127421],{"class":56}," key.char ",[46,127423,4970],{"class":52},[46,127425,127426],{"class":173}," 'q'",[46,127428,760],{"class":56},[46,127430,127431,127433],{"class":48,"line":723},[46,127432,17733],{"class":52},[46,127434,127435],{"class":180}," False\n",[46,127437,127438,127441,127444],{"class":48,"line":729},[46,127439,127440],{"class":52},"    except",[46,127442,127443],{"class":180}," AttributeError",[46,127445,760],{"class":56},[46,127447,127448],{"class":48,"line":735},[46,127449,127450],{"class":52},"        pass\n",[46,127452,127453],{"class":48,"line":740},[46,127454,616],{"emptyLinePlaceholder":615},[46,127456,127457,127460,127462,127465,127468,127470],{"class":48,"line":745},[46,127458,127459],{"class":56},"listener ",[46,127461,79],{"class":52},[46,127463,127464],{"class":56}," keyboard.Listener(",[46,127466,127467],{"class":439},"on_press",[46,127469,79],{"class":52},[46,127471,127472],{"class":56},"on_press)\n",[46,127474,127475],{"class":48,"line":763},[46,127476,127477],{"class":56},"listener.start()\n",[46,127479,127480],{"class":48,"line":778},[46,127481,616],{"emptyLinePlaceholder":615},[46,127483,127484,127486],{"class":48,"line":789},[46,127485,1329],{"class":52},[46,127487,127488],{"class":56}," listener.running:\n",[46,127490,127491],{"class":48,"line":794},[46,127492,127493],{"class":56},"    scene.step()\n",[19,127495,127496],{},[3514,127497],{"alt":41,"src":127498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[2098,127500,127501],{},"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":41,"searchDepth":60,"depth":60,"links":127503},[],{"category":25380},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":127108,"description":127113},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":127510,"title":127511,"body":127512,"description":25378,"extension":2125,"meta":127527,"navigation":615,"path":127528,"seo":127529,"stem":127530,"__hash__":127531},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":127513,"toc":127524},[127514,127517,127521],[10,127515,127511],{"id":127516},"_1-基础知识",[14,127518,127520],{"id":127519},"_11-js的组成","1.1 js的组成",[19,127522,127523],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":41,"searchDepth":60,"depth":60,"links":127525},[127526],{"id":127519,"depth":60,"text":127520},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":127511,"description":25378},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":127533,"title":127534,"body":127535,"description":25378,"extension":2125,"meta":127674,"navigation":615,"path":127675,"seo":127676,"stem":127677,"__hash__":127678},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":127536,"toc":127662},[127537,127540,127544,127547,127551,127561,127565,127568,127571,127574,127578,127585,127591,127595,127601,127612,127616,127619,127623,127626,127630,127633,127637,127640,127644,127647,127650,127653,127656,127659],[10,127538,127534],{"id":127539},"_2-vscode必备内容",[14,127541,127543],{"id":127542},"_21-标签分类","2.1 标签分类",[19,127545,127546],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,127548,127550],{"id":127549},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[19,127552,127553,127554,127556,127557,127560],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[43,127555,2414],{}," 然后按 ",[43,127558,127559],{},"Tab","，快速自动生成基本结构。",[14,127562,127564],{"id":127563},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[19,127566,127567],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[19,127569,127570],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[19,127572,127573],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,127575,127577],{"id":127576},"_24-视图缩放","2.4 视图缩放",[19,127579,127580,127581,127584],{},"缩放视图 ",[43,127582,127583],{},"ctrl+"," 可实现代码增大。",[19,127586,127587,127590],{},[43,127588,127589],{},"ctrl-"," 可实现代码减小。",[14,127592,127594],{"id":127593},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[19,127596,127597,127598,365],{},"VSCode 新建文件快捷键为 ",[43,127599,127600],{},"ctrl+N",[19,127602,127603,127604,127607,127608,127611],{},"保存快捷键为 ",[43,127605,127606],{},"ctrl+S","，将文本保存为 ",[43,127609,127610],{},".html"," 文件。",[14,127613,127615],{"id":127614},"_26-auto-rename-tag","2.6 Auto Rename Tag",[19,127617,127618],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,127620,127622],{"id":127621},"_27-vscode-icons","2.7 vscode-icons",[19,127624,127625],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,127627,127629],{"id":127628},"_28-easy-less","2.8 Easy LESS",[19,127631,127632],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,127634,127636],{"id":127635},"_29-会了吧插件","2.9 会了吧插件",[19,127638,127639],{},"会了吧插件可以展示代码中英语单词的意思。",[14,127641,127643],{"id":127642},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[19,127645,127646],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[19,127648,127649],{},"②选定多个相同的单词:ctrl+D",[19,127651,127652],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[19,127654,127655],{},"④全局替换某些单词:ctrl+h",[19,127657,127658],{},"⑤快速定位到某一行:ctrl+g",[19,127660,127661],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":41,"searchDepth":60,"depth":60,"links":127663},[127664,127665,127666,127667,127668,127669,127670,127671,127672,127673],{"id":127542,"depth":60,"text":127543},{"id":127549,"depth":60,"text":127550},{"id":127563,"depth":60,"text":127564},{"id":127576,"depth":60,"text":127577},{"id":127593,"depth":60,"text":127594},{"id":127614,"depth":60,"text":127615},{"id":127621,"depth":60,"text":127622},{"id":127628,"depth":60,"text":127629},{"id":127635,"depth":60,"text":127636},{"id":127642,"depth":60,"text":127643},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":127534,"description":25378},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":127680,"title":127681,"body":127682,"description":25378,"extension":2125,"meta":127841,"navigation":615,"path":127842,"seo":127843,"stem":127844,"__hash__":127845},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":127683,"toc":127833},[127684,127687,127691,127701,127707,127713,127717,127726,127730,127735,127738,127741,127745,127748,127758,127767,127776,127785,127795,127802,127807,127812,127825],[10,127685,127681],{"id":127686},"_3-html文本与容器标签",[14,127688,127690],{"id":127689},"_31-标题标签","3.1 标题标签",[19,127692,127693,127696,127697,127700],{},[43,127694,127695],{},"\u003Ch1>","我是一级标签",[43,127698,127699],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[19,127702,127703,127696,127705],{},[43,127704,127695],{},[43,127706,127699],{},[19,127708,124963,127709,127712],{},[43,127710,127711],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,127714,127716],{"id":127715},"_32-段落标签","3.2 段落标签",[19,127718,127719,127722,127723],{},[43,127720,127721],{},"\u003Cp>","....",[43,127724,127725],{},"\u003C\u002Fp>",[14,127727,127729],{"id":127728},"_33-换行标签","3.3 换行标签",[19,127731,127732],{},[43,127733,127734],{},"\u003Cbr \u002F>",[19,127736,127737],{},"具有强制换行的作用",[19,127739,127740],{},"单标签",[14,127742,127744],{"id":127743},"_34-文本格式化标签","3.4 文本格式化标签",[19,127746,127747],{},"提供粗体、斜体和下划线等效果",[19,127749,127750,127751,2006,127754,127757],{},"加粗：",[43,127752,127753],{},"\u003Cstrong>...\u003C\u002Fstrong>",[43,127755,127756],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[19,127759,127760,127761,2006,127764,127757],{},"斜体：",[43,127762,127763],{},"\u003Cem>...\u003C\u002Fem>",[43,127765,127766],{},"\u003Ci>...\u003C\u002Fi>",[19,127768,127769,127770,2006,127773,127757],{},"删除线：",[43,127771,127772],{},"\u003Cdel>...\u003C\u002Fdel>",[43,127774,127775],{},"\u003Cs>...\u003C\u002Fs>",[19,127777,127778,127779,2006,127782,127757],{},"下划线：",[43,127780,127781],{},"\u003Cins>...\u003C\u002Fins>",[43,127783,127784],{},"\u003Cu>...\u003C\u002Fu>",[14,127786,127788,127789,20411,127792,104585],{"id":127787},"_35-div和span标签","3.5 ",[43,127790,127791],{},"\u003Cdiv>",[43,127793,127794],{},"\u003Cspan>",[19,127796,127797,1700,127799,127801],{},[43,127798,127791],{},[43,127800,127794],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[19,127803,127804],{},[43,127805,127806],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[19,127808,127809],{},[43,127810,127811],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[19,127813,127814,127815,127817,127818,127820,127821,127824],{},"两者特点：①",[43,127816,127791],{}," 标签用来布局，但一行通常只放一个 ",[43,127819,127791],{},"。可以理解为一个大盒子，独占一行，在 ",[43,127822,127823],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[19,127826,79214,127827,127829,127830,127832],{},[43,127828,127794],{}," 标签也可用于布局，一行可以放多个 ",[43,127831,127794],{},"，可理解为小盒子。",{"title":41,"searchDepth":60,"depth":60,"links":127834},[127835,127836,127837,127838,127839],{"id":127689,"depth":60,"text":127690},{"id":127715,"depth":60,"text":127716},{"id":127728,"depth":60,"text":127729},{"id":127743,"depth":60,"text":127744},{"id":127787,"depth":60,"text":127840},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":127681,"description":25378},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":127847,"title":127848,"body":127849,"description":25378,"extension":2125,"meta":128046,"navigation":615,"path":128047,"seo":128048,"stem":128049,"__hash__":128050},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":127850,"toc":128038},[127851,127854,127858,127861,127867,127874,127880,127886,127889,127892,127895,127898,127901,127904,127907,127911,127914,127917,127920,127926,127932,127938,127945,127949,127955,127961,127964,127967,127973,127979,127985,127988,127991,127995,127998,128008,128014,128018,128027,128031,128034],[10,127852,127848],{"id":127853},"_4-html图像与链接",[14,127855,127857],{"id":127856},"_41-图像标签","4.1 图像标签",[19,127859,127860],{},"（1）标签",[19,127862,127863,127866],{},[43,127864,127865],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[19,127868,127869,127870,127873],{},"src是",[43,127871,127872],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[19,127875,127876,127877],{},"alt:文本，替换文本。图像不能显示的文字 ",[43,127878,127879],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[19,127881,127882,127883],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[43,127884,127885],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[19,127887,127888],{},"width:像素，设置图像的宽度",[19,127890,127891],{},"height:像素，设置图像的高度",[19,127893,127894],{},"border：像素，设置图像的边框粗细",[19,127896,127897],{},"（2）图像标签属性的注意点：",[19,127899,127900],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[19,127902,127903],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[19,127905,127906],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,127908,127910],{"id":127909},"_42-路径注意要点","4.2 路径注意要点：",[19,127912,127913],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[19,127915,127916],{},"（2）根目录：就是打开文件夹的第一层根目录",[19,127918,127919],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[19,127921,127922,127923],{},"①同一级路径：图像文件位于HTML文件同一级，如",[43,127924,127925],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[19,127927,127928,127929],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[43,127930,127931],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[19,127933,127934,127935],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[43,127936,127937],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[19,127939,127940,127941,2439],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[2426,127942,127943],{"href":127943,"rel":127944},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[25862],[14,127946,127948],{"id":127947},"_43-超链接标签","4.3 超链接标签",[19,127950,127951,127954],{},[43,127952,127953],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[19,127956,127957,127958],{},"①语法格式：",[43,127959,127960],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[19,127962,127963],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[19,127965,127966],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[19,127968,127969,127970],{},"③链接分类：外部链接：",[43,127971,127972],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[19,127974,127975,127976],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[43,127977,127978],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[19,127980,127981,127982],{},"空链接：如果当时没有确定链接目标时，",[43,127983,127984],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[19,127986,127987],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[19,127989,127990],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,127992,127994],{"id":127993},"_44-锚点链接","4.4 锚点链接",[19,127996,127997],{},"点我们点击链接，可以快速定位到页面中的某个位置",[19,127999,128000,128001,128004,128005],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[43,128002,128003],{},"\u003Ca href=\"#two\">","第二级",[43,128006,128007],{},"\u003C\u002Fa>",[19,128009,128010,128011],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[43,128012,128013],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,128015,128017],{"id":128016},"_45-注释标签","4.5 注释标签",[19,128019,128020,128023,128024],{},[43,128021,128022],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[43,128025,128026],{},"ctrl+\u002F",[14,128028,128030],{"id":128029},"_46-特殊字符","4.6 特殊字符",[19,128032,128033],{},"可以实现添加多个空格",[3514,128035],{"style":128036,"src":128037},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":41,"searchDepth":60,"depth":60,"links":128039},[128040,128041,128042,128043,128044,128045],{"id":127856,"depth":60,"text":127857},{"id":127909,"depth":60,"text":127910},{"id":127947,"depth":60,"text":127948},{"id":127993,"depth":60,"text":127994},{"id":128016,"depth":60,"text":128017},{"id":128029,"depth":60,"text":128030},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":127848,"description":25378},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":128052,"title":128053,"body":128054,"description":25378,"extension":2125,"meta":128347,"navigation":615,"path":128348,"seo":128349,"stem":128350,"__hash__":128351},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":128055,"toc":128338},[128056,128059,128063,128066,128069,128072,128075,128078,128081,128084,128087,128090,128110,128116,128120,128123,128126,128129,128132,128135,128138,128142,128145,128148,128151,128154,128167,128172,128175,128178,128193,128196,128199,128202,128205,128208,128212,128215,128222,128225,128228,128231,128234,128237,128243,128246,128249,128255,128258,128261,128264,128270,128273,128276,128290,128297,128300,128303,128310,128319,128322,128325,128328,128332,128335],[10,128057,128053],{"id":128058},"_5-html表格列表与表单",[14,128060,128062],{"id":128061},"_51-表格标签","5.1 表格标签",[19,128064,128065],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[19,128067,128068],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[19,128070,128071],{},"②表格基本语法：",[3514,128073],{"style":128036,"src":128074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[19,128076,128077],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[3514,128079],{"style":128036,"src":128080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[19,128082,128083],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[3514,128085],{"style":128036,"src":128086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[19,128088,128089],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[19,128091,128092,128095,128096,128098,128099,128102,128103,128105,128106,128109],{},[43,128093,128094],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[43,128097,128094],{},"内部必须拥有",[43,128100,128101],{},"\u003Ctr>","标签，一般位于第一行，",[43,128104,128094],{},"比",[43,128107,128108],{},"\u003Cth>","范围广",[19,128111,128112,128115],{},[43,128113,128114],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,128117,128119],{"id":128118},"_52-合并单元格","5.2 合并单元格",[19,128121,128122],{},"（1）合并单元格方式：",[19,128124,128125],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[19,128127,128128],{},"②跨列合并：colspan=\"合并单元格的个数\"",[19,128130,128131],{},"（2）目标单元格：",[19,128133,128134],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[19,128136,128137],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,128139,128141],{"id":128140},"_53-列表标签","5.3 列表标签",[19,128143,128144],{},"（1）分类：无序列表、有序列表、自定义列表",[19,128146,128147],{},"①无序列表：",[3514,128149],{"style":128036,"src":128150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[19,128152,128153],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[19,128155,128156,128159,128160,128163,128164,128166],{},[43,128157,128158],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[43,128161,128162],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[43,128165,128158],{},"中输入其他标签或文字是不对的",[19,128168,128169,128171],{},[43,128170,128162],{},"之间相当于一个容器，可以容纳所有元素",[19,128173,128174],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[19,128176,128177],{},"在css中去除前边的小圆点采用如下代码:",[36,128179,128183],{"className":128180,"code":128181,"language":128182,"meta":41,"style":41},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[43,128184,128185],{"__ignoreMap":41},[46,128186,128187,128190],{"class":48,"line":49},[46,128188,128189],{"class":1361},"list-style",[46,128191,128192],{"class":56},": none;\n",[19,128194,128195],{},"②有序列表：",[3514,128197],{"style":128036,"src":128198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[19,128200,128201],{},"③自定义列表：",[3514,128203],{"style":128036,"src":128204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[3514,128206],{"style":128036,"src":128207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,128209,128211],{"id":128210},"_54-表单标签","5.4 表单标签",[19,128213,128214],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[19,128216,128217,128218,128221],{},"（1）表单域：包含单元素的区域，",[43,128219,128220],{},"\u003Cform>","标签可以实现信息的收集和传递。",[3514,128223],{"style":128036,"src":128224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[19,128226,128227],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[19,128229,128230],{},"表单元素提交必须有name属性",[19,128232,128233],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[19,128235,128236],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[19,128238,79191,128239,128242],{},[43,128240,128241],{},"\u003Cinput>","输入表单元素",[3514,128244],{"style":128036,"src":128245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[3514,128247],{"style":128036,"src":128248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[19,128250,128251,128252],{},"单选按钮：",[43,128253,128254],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[3514,128256],{"style":128036,"src":128257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[19,128259,128260],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[3514,128262],{"style":128036,"src":128263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[19,128265,128266,128269],{},[2339,128267,128268],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[19,128271,128272],{},"②select下拉表单元素：可以节约页面控件",[3514,128274],{"style":128036,"src":128275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[19,128277,128278,15797,128280,128283,128284,128286,128287,128289],{},[2339,128279,2226],{},[43,128281,128282],{},"\u003Cselect>","中至少包含一对",[43,128285,104606],{},"；在",[43,128288,104606],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[19,128291,128292,128293,128296],{},"③",[43,128294,128295],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[3514,128298],{"style":128036,"src":128299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[19,128301,128302],{},"3行20列",[14,128304,128306,128307,104585],{"id":128305},"_55-lable标签","5.5 ",[43,128308,128309],{},"\u003Clable>",[19,128311,128312,128313,128315,128316,128318],{},"它不是表单标签，但常常与表单标签搭配使用，",[43,128314,128309],{},"标签用于绑定一个表单标签，当点击",[43,128317,128309],{},"标签内的文本",[19,128320,128321],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[3514,128323],{"style":128036,"src":128324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[3514,128326],{"style":128036,"src":128327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,128329,128331],{"id":128330},"_56-实例","5.6 实例",[3514,128333],{"style":128036,"src":128334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[2098,128336,128337],{},"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":41,"searchDepth":60,"depth":60,"links":128339},[128340,128341,128342,128343,128344,128346],{"id":128061,"depth":60,"text":128062},{"id":128118,"depth":60,"text":128119},{"id":128140,"depth":60,"text":128141},{"id":128210,"depth":60,"text":128211},{"id":128305,"depth":60,"text":128345},"5.5 \u003Clable>标签",{"id":128330,"depth":60,"text":128331},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":128053,"description":25378},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":128353,"title":128354,"body":128355,"description":25378,"extension":2125,"meta":128904,"navigation":615,"path":128905,"seo":128906,"stem":128907,"__hash__":128908},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":128356,"toc":128879},[128357,128360,128364,128367,128370,128374,128377,128380,128383,128386,128389,128392,128395,128399,128402,128406,128409,128412,128415,128419,128422,128425,128428,128434,128437,128440,128443,128446,128449,128452,128455,128488,128492,128495,128498,128501,128505,128508,128511,128514,128517,128520,128524,128527,128530,128533,128537,128540,128544,128547,128551,128554,128559,128563,128566,128570,128573,128576,128579,128582,128609,128612,128616,128619,128622,128627,128630,128633,128637,128640,128645,128648,128651,128654,128658,128661,128664,128667,128671,128674,128677,128680,128684,128688,128691,128731,128734,128738,128745,128748,128752,128755,128801,128805,128808,128811,128814,128842,128846,128849,128876],[10,128358,128354],{"id":128359},"_6-css语法与文本样式",[14,128361,128363],{"id":128362},"_61-css语法规范","6.1 css语法规范",[19,128365,128366],{},"由两部分组成，选择器及一条或多条声明",[3514,128368],{"style":128036,"src":128369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[19,128371,128372],{},[2339,128373,2226],{},[19,128375,128376],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[19,128378,128379],{},"②属性与属性值以“键值对”的形式出现",[19,128381,128382],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[19,128384,128385],{},"④属性和属性值之间用英文“;”分开",[3514,128387],{"style":128036,"src":128388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[3514,128390],{"style":128036,"src":128391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[3514,128393],{"style":128036,"src":128394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,128396,128398],{"id":128397},"_62-css选择器","6.2 css选择器",[19,128400,128401],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[479,128403,128405],{"id":128404},"_621-标签选择器","6.2.1 标签选择器",[19,128407,128408],{},"①优点：能快速为页面中同类型的标签统一设置样式",[19,128410,128411],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[3514,128413],{"style":128036,"src":128414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[479,128416,128418],{"id":128417},"_622-类选择器","6.2.2 类选择器",[19,128420,128421],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[19,128423,128424],{},"②样例",[3514,128426],{"style":128036,"src":128427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[19,128429,128430,128431,128433],{},"③ ",[2339,128432,128268],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[19,128435,128436],{},"可以理解为给这个标签起了个名字，来表示；",[19,128438,128439],{},"长名称或词组可以使用横线来为选择器命名；",[19,128441,128442],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[19,128444,128445],{},"命名要有意义；",[3514,128447],{"style":128036,"src":128448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[19,128450,128451],{},"类选择器也可以指定特殊的元素p.center{}",[19,128453,128454],{},"p.center和.center都对",[36,128456,128458],{"className":128180,"code":128457,"language":128182,"meta":41,"style":41},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[43,128459,128460,128465,128474,128484],{"__ignoreMap":41},[46,128461,128462],{"class":48,"line":49},[46,128463,128464],{"class":2253},"\u002F* 类选择器指定特殊元素 *\u002F\n",[46,128466,128467,128469,128472],{"class":48,"line":60},[46,128468,19],{"class":1361},[46,128470,128471],{"class":169},".center",[46,128473,17573],{"class":56},[46,128475,128476,128478,128480,128482],{"class":48,"line":200},[46,128477,72491],{"class":180},[46,128479,53404],{"class":56},[46,128481,53559],{"class":180},[46,128483,3345],{"class":56},[46,128485,128486],{"class":48,"line":211},[46,128487,3616],{"class":56},[479,128489,128491],{"id":128490},"_623-多类名使用","6.2.3 多类名使用",[19,128493,128494],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[3514,128496],{"style":128036,"src":128497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[19,128499,128500],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[479,128502,128504],{"id":128503},"_624-id选择器","6.2.4 id选择器",[19,128506,128507],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[19,128509,128510],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[3514,128512],{"style":128036,"src":128513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[19,128515,128516],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[19,128518,128519],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[479,128521,128523],{"id":128522},"_625-通配符选择器","6.2.5 通配符选择器",[19,128525,128526],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[19,128528,128529],{},"* {",[19,128531,128532],{},"color=\"red\"}",[479,128534,128536],{"id":128535},"_626-总结","6.2.6 总结",[3514,128538],{"style":128036,"src":128539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,128541,128543],{"id":128542},"_63-css字体属性","6.3 css字体属性",[19,128545,128546],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[479,128548,128550],{"id":128549},"_631-字体系列","6.3.1 字体系列",[19,128552,128553],{},"font-family: '宋体';",[19,128555,128556,128558],{},[2339,128557,2226],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[479,128560,128562],{"id":128561},"_632-字体大小","6.3.2 字体大小",[19,128564,128565],{},"font-size: 20px",[19,128567,128568,28462],{},[2339,128569,128268],{},[19,128571,128572],{},"①px（像素）大小是网页的最常用单位",[19,128574,128575],{},"②谷歌浏览器默认为16px",[19,128577,128578],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[19,128580,128581],{},"④可以给body指定整个页面的大小：会自动引用",[36,128583,128585],{"className":128180,"code":128584,"language":128182,"meta":41,"style":41},"body {\n  font-size: 16px;\n}\n",[43,128586,128587,128593,128605],{"__ignoreMap":41},[46,128588,128589,128591],{"class":48,"line":49},[46,128590,53767],{"class":1361},[46,128592,17573],{"class":56},[46,128594,128595,128597,128599,128601,128603],{"class":48,"line":60},[46,128596,72591],{"class":180},[46,128598,53404],{"class":56},[46,128600,2787],{"class":180},[46,128602,53459],{"class":52},[46,128604,3345],{"class":56},[46,128606,128607],{"class":48,"line":200},[46,128608,3616],{"class":56},[19,128610,128611],{},"⑤标题标签比较特殊，需要单独指定大小",[479,128613,128615],{"id":128614},"_633-字体粗细","6.3.3 字体粗细",[19,128617,128618],{},"font-weight: bold;",[19,128620,128621],{},"font-weight: 100；",[19,128623,128624,128626],{},[2339,128625,2226],{}," ①粗体文字变细：尽量别用normal，多用数字",[19,128628,128629],{},"font-weight= 400;",[19,128631,128632],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[479,128634,128636],{"id":128635},"_634-文字样式","6.3.4 文字样式",[19,128638,128639],{},"font-style: normal；",[19,128641,128642,28462],{},[2339,128643,128644],{},"属性值",[19,128646,128647],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[19,128649,128650],{},"②italic：浏览器会显示斜体的字体样式",[3514,128652],{"style":128036,"src":128653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[479,128655,128657],{"id":128656},"_635-字体符合属性","6.3.5 字体符合属性",[3514,128659],{"style":128036,"src":128660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[3514,128662],{"style":128036,"src":128663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[19,128665,128666],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[19,128668,128669,28462],{},[2339,128670,128268],{},[19,128672,128673],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[19,128675,128676],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[19,128678,128679],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,128681,128683],{"id":128682},"_64-css-test文本属性","6.4 css test文本属性",[479,128685,128687],{"id":128686},"_641-文本颜色","6.4.1 文本颜色",[19,128689,128690],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[36,128692,128694],{"className":128180,"code":128693,"language":128182,"meta":41,"style":41},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[43,128695,128696,128701,128707,128717,128722,128727],{"__ignoreMap":41},[46,128697,128698],{"class":48,"line":49},[46,128699,128700],{"class":2253},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[46,128702,128703,128705],{"class":48,"line":60},[46,128704,19],{"class":1361},[46,128706,17573],{"class":56},[46,128708,128709,128711,128713,128715],{"class":48,"line":200},[46,128710,72870],{"class":180},[46,128712,53404],{"class":56},[46,128714,59386],{"class":180},[46,128716,3345],{"class":56},[46,128718,128719],{"class":48,"line":211},[46,128720,128721],{"class":2253},"  \u002F* color: #ff0000; *\u002F\n",[46,128723,128724],{"class":48,"line":222},[46,128725,128726],{"class":2253},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[46,128728,128729],{"class":48,"line":636},[46,128730,3616],{"class":56},[3514,128732],{"style":128036,"src":128733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[479,128735,128737],{"id":128736},"_642-对齐文本","6.4.2 对齐文本",[19,128739,128740,128741,128744],{},"text-align属于用于设置元素内文本内容的 ",[2339,128742,128743],{},"水平对齐"," 方式",[19,128746,128747],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[479,128749,128751],{"id":128750},"_643-装饰文本","6.4.3 装饰文本",[19,128753,128754],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[36,128756,128758],{"className":128180,"code":128757,"language":128182,"meta":41,"style":41},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[43,128759,128760,128766,128776,128780,128786,128797],{"__ignoreMap":41},[46,128761,128762,128764],{"class":48,"line":49},[46,128763,2426],{"class":1361},[46,128765,17573],{"class":56},[46,128767,128768,128770,128772,128774],{"class":48,"line":60},[46,128769,72467],{"class":180},[46,128771,53404],{"class":56},[46,128773,56702],{"class":180},[46,128775,3345],{"class":56},[46,128777,128778],{"class":48,"line":200},[46,128779,3616],{"class":56},[46,128781,128782,128784],{"class":48,"line":211},[46,128783,19],{"class":1361},[46,128785,17573],{"class":56},[46,128787,128788,128790,128792,128795],{"class":48,"line":222},[46,128789,72467],{"class":180},[46,128791,53404],{"class":56},[46,128793,128794],{"class":180},"underline",[46,128796,3345],{"class":56},[46,128798,128799],{"class":48,"line":636},[46,128800,3616],{"class":56},[479,128802,128804],{"id":128803},"_644-文本缩进","6.4.4 文本缩进",[19,128806,128807],{},"实现文本的第一行首行缩进自己指定的距离",[19,128809,128810],{},"20px往右边走；-20px往左边走",[19,128812,128813],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[36,128815,128817],{"className":128180,"code":128816,"language":128182,"meta":41,"style":41},"p {\n  text-indent: 2em;\n}\n",[43,128818,128819,128825,128838],{"__ignoreMap":41},[46,128820,128821,128823],{"class":48,"line":49},[46,128822,19],{"class":1361},[46,128824,17573],{"class":56},[46,128826,128827,128830,128832,128834,128836],{"class":48,"line":60},[46,128828,128829],{"class":180},"  text-indent",[46,128831,53404],{"class":56},[46,128833,2272],{"class":180},[46,128835,25555],{"class":52},[46,128837,3345],{"class":56},[46,128839,128840],{"class":48,"line":200},[46,128841,3616],{"class":56},[479,128843,128845],{"id":128844},"_645-行间距","6.4.5 行间距",[19,128847,128848],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[36,128850,128852],{"className":128180,"code":128851,"language":128182,"meta":41,"style":41},"p {\n  line-height: 1.6;\n}\n",[43,128853,128854,128860,128872],{"__ignoreMap":41},[46,128855,128856,128858],{"class":48,"line":49},[46,128857,19],{"class":1361},[46,128859,17573],{"class":56},[46,128861,128862,128865,128867,128870],{"class":48,"line":60},[46,128863,128864],{"class":180},"  line-height",[46,128866,53404],{"class":56},[46,128868,128869],{"class":180},"1.6",[46,128871,3345],{"class":56},[46,128873,128874],{"class":48,"line":200},[46,128875,3616],{"class":56},[2098,128877,128878],{},"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":41,"searchDepth":60,"depth":60,"links":128880},[128881,128882,128890,128897],{"id":128362,"depth":60,"text":128363},{"id":128397,"depth":60,"text":128398,"children":128883},[128884,128885,128886,128887,128888,128889],{"id":128404,"depth":200,"text":128405},{"id":128417,"depth":200,"text":128418},{"id":128490,"depth":200,"text":128491},{"id":128503,"depth":200,"text":128504},{"id":128522,"depth":200,"text":128523},{"id":128535,"depth":200,"text":128536},{"id":128542,"depth":60,"text":128543,"children":128891},[128892,128893,128894,128895,128896],{"id":128549,"depth":200,"text":128550},{"id":128561,"depth":200,"text":128562},{"id":128614,"depth":200,"text":128615},{"id":128635,"depth":200,"text":128636},{"id":128656,"depth":200,"text":128657},{"id":128682,"depth":60,"text":128683,"children":128898},[128899,128900,128901,128902,128903],{"id":128686,"depth":200,"text":128687},{"id":128736,"depth":200,"text":128737},{"id":128750,"depth":200,"text":128751},{"id":128803,"depth":200,"text":128804},{"id":128844,"depth":200,"text":128845},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":128354,"description":25378},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":128910,"title":128911,"body":128912,"description":25378,"extension":2125,"meta":129561,"navigation":615,"path":129562,"seo":129563,"stem":129564,"__hash__":129565},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":128913,"toc":129542},[128914,128917,128921,128925,128985,128989,128999,129002,129005,129009,129034,129038,129041,129044,129047,129050,129053,129057,129060,129063,129105,129108,129134,129140,129143,129147,129151,129157,129160,129163,129166,129169,129172,129175,129220,129224,129227,129230,129234,129238,129267,129270,129275,129278,129281,129284,129287,129291,129295,129298,129300,129303,129307,129310,129314,129317,129320,129323,129327,129331,129337,129347,129350,129353,129356,129359,129362,129485,129493,129501,129539],[10,128915,128911],{"id":128916},"_7-css引入方式与选择器进阶",[14,128918,128920],{"id":128919},"_71-css引入方式","7.1 css引入方式",[479,128922,128924],{"id":128923},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[36,128926,128930],{"className":128927,"code":128928,"language":128929,"meta":41,"style":41},"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",[43,128931,128932,128940,128947,128959,128972,128977],{"__ignoreMap":41},[46,128933,128934,128936,128938],{"class":48,"line":49},[46,128935,821],{"class":56},[46,128937,2098],{"class":1361},[46,128939,53274],{"class":56},[46,128941,128942,128945],{"class":48,"line":60},[46,128943,128944],{"class":1361},"  h1",[46,128946,17573],{"class":56},[46,128948,128949,128952,128954,128957],{"class":48,"line":200},[46,128950,128951],{"class":180},"    color",[46,128953,53404],{"class":56},[46,128955,128956],{"class":180},"blue",[46,128958,3345],{"class":56},[46,128960,128961,128964,128966,128968,128970],{"class":48,"line":211},[46,128962,128963],{"class":180},"    font-size",[46,128965,53404],{"class":56},[46,128967,2986],{"class":180},[46,128969,53459],{"class":52},[46,128971,3345],{"class":56},[46,128973,128974],{"class":48,"line":222},[46,128975,128976],{"class":56},"  }\n",[46,128978,128979,128981,128983],{"class":48,"line":636},[46,128980,53752],{"class":56},[46,128982,2098],{"class":1361},[46,128984,53274],{"class":56},[19,128986,128987,28462],{},[2339,128988,128268],{},[19,128990,79191,128991,128994,128995,128998],{},[43,128992,128993],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[43,128996,128997],{},"\u003Chead>","标签中",[19,129000,129001],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[19,129003,129004],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[479,129006,129008],{"id":129007},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[36,129010,129012],{"className":128927,"code":129011,"language":128929,"meta":41,"style":41},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[43,129013,129014],{"__ignoreMap":41},[46,129015,129016,129018,129020,129022,129024,129027,129030,129032],{"class":48,"line":49},[46,129017,821],{"class":56},[46,129019,19],{"class":1361},[46,129021,64591],{"class":169},[46,129023,79],{"class":56},[46,129025,129026],{"class":173},"\"color: red; font-size: 16px;\"",[46,129028,129029],{"class":56},">这是一个段落\u003C\u002F",[46,129031,19],{"class":1361},[46,129033,53274],{"class":56},[19,129035,129036,28462],{},[2339,129037,128268],{},[19,129039,129040],{},"①style其实就是标签的属性",[19,129042,129043],{},"②在双引号中间，写法要符合css规范",[19,129045,129046],{},"③可以控制当前的标签设置样式",[19,129048,129049],{},"④书写繁琐，简单时才用",[19,129051,129052],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[479,129054,129056],{"id":129055},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[19,129058,129059],{},"使用最多，单独建一个css文件，然后html引用",[19,129061,129062],{},"①css文件部分： style.css",[36,129064,129066],{"className":128180,"code":129065,"language":128182,"meta":41,"style":41},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[43,129067,129068,129073,129079,129089,129101],{"__ignoreMap":41},[46,129069,129070],{"class":48,"line":49},[46,129071,129072],{"class":2253},"\u002F* style.css *\u002F\n",[46,129074,129075,129077],{"class":48,"line":60},[46,129076,10],{"class":1361},[46,129078,17573],{"class":56},[46,129080,129081,129083,129085,129087],{"class":48,"line":200},[46,129082,72870],{"class":180},[46,129084,53404],{"class":56},[46,129086,128956],{"class":180},[46,129088,3345],{"class":56},[46,129090,129091,129093,129095,129097,129099],{"class":48,"line":211},[46,129092,72591],{"class":180},[46,129094,53404],{"class":56},[46,129096,2986],{"class":180},[46,129098,53459],{"class":52},[46,129100,3345],{"class":56},[46,129102,129103],{"class":48,"line":222},[46,129104,3616],{"class":56},[19,129106,129107],{},"②html部分",[36,129109,129111],{"className":128927,"code":129110,"language":128929,"meta":41,"style":41},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[43,129112,129113],{"__ignoreMap":41},[46,129114,129115,129117,129119,129121,129123,129125,129127,129129,129132],{"class":48,"line":49},[46,129116,821],{"class":56},[46,129118,70970],{"class":1361},[46,129120,70973],{"class":169},[46,129122,79],{"class":56},[46,129124,70978],{"class":173},[46,129126,63022],{"class":169},[46,129128,79],{"class":56},[46,129130,129131],{"class":173},"\"style.css\"",[46,129133,53274],{"class":56},[19,129135,129136,129139],{},[43,129137,129138],{},"\u003Chr>","水平线标签（但是不常用！）",[19,129141,129142],{},"ctrl+0回到页面原来大小",[14,129144,129146],{"id":129145},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[479,129148,129150],{"id":129149},"_721-快速生成html","7.2.1 快速生成html",[19,129152,129153,129154],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[43,129155,129156],{},"\u003Cdiv>``\u003C\u002Fdiv>",[19,129158,129159],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[19,129161,129162],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[19,129164,129165],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[19,129167,129168],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[19,129170,129171],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[19,129173,129174],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[36,129176,129178],{"className":128927,"code":129177,"language":128929,"meta":41,"style":41},"\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",[43,129179,129180,129185,129190,129195,129200,129205,129210,129215],{"__ignoreMap":41},[46,129181,129182],{"class":48,"line":49},[46,129183,129184],{"class":2253},"\u003C!-- Emmet 语法示例 -->\n",[46,129186,129187],{"class":48,"line":60},[46,129188,129189],{"class":2253},"\u003C!-- div*3        → 生成3个div -->\n",[46,129191,129192],{"class":48,"line":200},[46,129193,129194],{"class":2253},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[46,129196,129197],{"class":48,"line":211},[46,129198,129199],{"class":2253},"\u003C!-- div+p        → 兄弟div和p -->\n",[46,129201,129202],{"class":48,"line":222},[46,129203,129204],{"class":2253},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[46,129206,129207],{"class":48,"line":636},[46,129208,129209],{"class":2253},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[46,129211,129212],{"class":48,"line":641},[46,129213,129214],{"class":2253},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[46,129216,129217],{"class":48,"line":653},[46,129218,129219],{"class":2253},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[479,129221,129223],{"id":129222},"_722-快速生成css","7.2.2 快速生成css",[19,129225,129226],{},"简写开头",[19,129228,129229],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,129231,129233],{"id":129232},"_73-css复合选择器","7.3 css复合选择器",[479,129235,129237],{"id":129236},"_731-后代选择器","7.3.1 后代选择器",[36,129239,129241],{"className":128180,"code":129240,"language":128182,"meta":41,"style":41},".parent .child {\n  color: blue;\n}\n",[43,129242,129243,129253,129263],{"__ignoreMap":41},[46,129244,129245,129248,129251],{"class":48,"line":49},[46,129246,129247],{"class":169},".parent",[46,129249,129250],{"class":169}," .child",[46,129252,17573],{"class":56},[46,129254,129255,129257,129259,129261],{"class":48,"line":60},[46,129256,72870],{"class":180},[46,129258,53404],{"class":56},[46,129260,128956],{"class":180},[46,129262,3345],{"class":56},[46,129264,129265],{"class":48,"line":200},[46,129266,3616],{"class":56},[19,129268,129269],{},"元素1 元素2 {样式声明}",[19,129271,129272],{},[2339,129273,129274],{},"注意点:",[19,129276,129277],{},"①元素1和元素2中间用空格隔开",[19,129279,129280],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[19,129282,129283],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[19,129285,129286],{},"④元素1和元素2可以是任意基础选择器",[479,129288,129290],{"id":129289},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[19,129292,129293],{},[2339,129294,129274],{},[19,129296,129297],{},"①元素1和元素2中间用大于号隔开",[19,129299,129280],{},[19,129301,129302],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[479,129304,129306],{"id":129305},"_733-并集选择器","7.3.3 并集选择器",[19,129308,129309],{},"元素1，元素2 {样式声明}",[19,129311,129312],{},[2339,129313,129274],{},[19,129315,129316],{},"①元素1和元素2中间用逗号隔开",[19,129318,129319],{},"②逗号可以理解为和的意思",[19,129321,129322],{},"③并集选择器通常用于集体声明",[479,129324,129326],{"id":129325},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[19,129328,129329],{},[2339,129330,129274],{},[19,129332,129333,129334,129336],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[70970,129335],{},"－:visited－:hover－:active。",[19,129338,129339,129340,129343,129344,27732],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[129341,129342],"hover",{}," 、 ",[129345,129346],"first-child",{},[19,129348,129349],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[19,129351,129352],{},"link对没访问的进行设置",[19,129354,129355],{},"vistied对已访问的进行改变",[19,129357,129358],{},"hover鼠标经过就会变",[19,129360,129361],{},"active常按(点)就会变",[36,129363,129365],{"className":128180,"code":129364,"language":128182,"meta":41,"style":41},"\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",[43,129366,129367,129372,129381,129391,129401,129405,129414,129425,129429,129437,129447,129457,129461,129470,129481],{"__ignoreMap":41},[46,129368,129369],{"class":48,"line":49},[46,129370,129371],{"class":2253},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[46,129373,129374,129376,129379],{"class":48,"line":60},[46,129375,2426],{"class":1361},[46,129377,129378],{"class":169},":link",[46,129380,17573],{"class":56},[46,129382,129383,129385,129387,129389],{"class":48,"line":200},[46,129384,72870],{"class":180},[46,129386,53404],{"class":56},[46,129388,64334],{"class":180},[46,129390,3345],{"class":56},[46,129392,129393,129395,129397,129399],{"class":48,"line":211},[46,129394,72467],{"class":180},[46,129396,53404],{"class":56},[46,129398,56702],{"class":180},[46,129400,3345],{"class":56},[46,129402,129403],{"class":48,"line":222},[46,129404,3616],{"class":56},[46,129406,129407,129409,129412],{"class":48,"line":636},[46,129408,2426],{"class":1361},[46,129410,129411],{"class":169},":visited",[46,129413,17573],{"class":56},[46,129415,129416,129418,129420,129423],{"class":48,"line":641},[46,129417,72870],{"class":180},[46,129419,53404],{"class":56},[46,129421,129422],{"class":180},"purple",[46,129424,3345],{"class":56},[46,129426,129427],{"class":48,"line":653},[46,129428,3616],{"class":56},[46,129430,129431,129433,129435],{"class":48,"line":659},[46,129432,2426],{"class":1361},[46,129434,62905],{"class":169},[46,129436,17573],{"class":56},[46,129438,129439,129441,129443,129445],{"class":48,"line":665},[46,129440,72870],{"class":180},[46,129442,53404],{"class":56},[46,129444,56854],{"class":180},[46,129446,3345],{"class":56},[46,129448,129449,129451,129453,129455],{"class":48,"line":670},[46,129450,72467],{"class":180},[46,129452,53404],{"class":56},[46,129454,128794],{"class":180},[46,129456,3345],{"class":56},[46,129458,129459],{"class":48,"line":676},[46,129460,3616],{"class":56},[46,129462,129463,129465,129468],{"class":48,"line":682},[46,129464,2426],{"class":1361},[46,129466,129467],{"class":169},":active",[46,129469,17573],{"class":56},[46,129471,129472,129474,129476,129479],{"class":48,"line":688},[46,129473,72870],{"class":180},[46,129475,53404],{"class":56},[46,129477,129478],{"class":180},"green",[46,129480,3345],{"class":56},[46,129482,129483],{"class":48,"line":693},[46,129484,3616],{"class":56},[479,129486,129488,129489,129492],{"id":129487},"_735-伪类选择器","7.3.5 ",[129490,129491],"focus",{},"伪类选择器",[19,129494,129495,129497,129498,129500],{},[129490,129496],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[43,129499,128241],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[36,129502,129504],{"className":128180,"code":129503,"language":128182,"meta":41,"style":41},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[43,129505,129506,129514,129525,129535],{"__ignoreMap":41},[46,129507,129508,129510,129512],{"class":48,"line":49},[46,129509,55786],{"class":1361},[46,129511,63865],{"class":169},[46,129513,17573],{"class":56},[46,129515,129516,129519,129521,129523],{"class":48,"line":60},[46,129517,129518],{"class":180},"  border-color",[46,129520,53404],{"class":56},[46,129522,56854],{"class":180},[46,129524,3345],{"class":56},[46,129526,129527,129529,129531,129533],{"class":48,"line":200},[46,129528,72763],{"class":180},[46,129530,53404],{"class":56},[46,129532,56702],{"class":180},[46,129534,3345],{"class":56},[46,129536,129537],{"class":48,"line":211},[46,129538,3616],{"class":56},[2098,129540,129541],{},"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":41,"searchDepth":60,"depth":60,"links":129543},[129544,129549,129553],{"id":128919,"depth":60,"text":128920,"children":129545},[129546,129547,129548],{"id":128923,"depth":200,"text":128924},{"id":129007,"depth":200,"text":129008},{"id":129055,"depth":200,"text":129056},{"id":129145,"depth":60,"text":129146,"children":129550},[129551,129552],{"id":129149,"depth":200,"text":129150},{"id":129222,"depth":200,"text":129223},{"id":129232,"depth":60,"text":129233,"children":129554},[129555,129556,129557,129558,129559],{"id":129236,"depth":200,"text":129237},{"id":129289,"depth":200,"text":129290},{"id":129305,"depth":200,"text":129306},{"id":129325,"depth":200,"text":129326},{"id":129487,"depth":200,"text":129560},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":128911,"description":25378},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":129567,"title":129568,"body":129569,"description":25378,"extension":2125,"meta":131492,"navigation":615,"path":131493,"seo":131494,"stem":131495,"__hash__":131496},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":129570,"toc":131466},[129571,129574,129578,129587,129591,129617,129622,129625,129628,129631,129634,129638,129641,129651,129659,129663,129698,129703,129706,129709,129712,129715,129719,129722,129731,129735,129748,129753,129756,129759,129762,129766,129769,129773,129776,129831,129834,129865,129868,129922,129926,129929,130095,130218,130221,130224,130227,130230,130234,130237,130241,130244,130247,130251,130254,130285,130312,130340,130343,130347,130373,130416,130420,130514,130517,130544,130547,130550,130553,130556,130559,130562,130565,130568,130571,130575,130632,130659,130663,130711,130715,130756,130758,130761,130764,130767,130770,130774,130866,130869,130872,130875,130879,131002,131203,131207,131211,131214,131217,131220,131224,131227,131230,131255,131258,131261,131264,131267,131270,131274,131282,131344,131347,131405,131408,131411,131414,131417,131420,131423,131426,131463],[10,129572,129568],{"id":129573},"_8-css显示模式与背景特性",[14,129575,129577],{"id":129576},"_81-css元素显示模式","8.1 css元素显示模式",[19,129579,129580,129581,129583,129584,129586],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[43,129582,127791],{},"自己占一行，比如一行可以放多个",[43,129585,127794],{},"，HTML 元素一般分为块元素和行内元素两种类型",[479,129588,129590],{"id":129589},"_811-块元素","8.1.1 块元素",[19,129592,129593,129594,129596,129597,2400,129600,2400,129602,2400,129604,2400,129607,2400,129610,129613,129614,129616],{},"常见的块元素有",[43,129595,127695],{},"~",[43,129598,129599],{},"\u003Ch6>",[43,129601,127721],{},[43,129603,127791],{},[43,129605,129606],{},"\u003Cul>",[43,129608,129609],{},"\u003Col>",[43,129611,129612],{},"\u003Cli>","等，其中 ",[43,129615,127791],{}," 标签是最典型的块元素",[19,129618,129619],{},[2339,129620,129621],{},"块级元素的特点：",[19,129623,129624],{},"① 比较霸道，自己独占一行。",[19,129626,129627],{},"② 高度，宽度、外边距以及内边距都可以控制。",[19,129629,129630],{},"③ 宽度默认是容器（父级宽度）的100%。",[19,129632,129633],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[19,129635,129636],{},[2339,129637,2226],{},[19,129639,129640],{},"①文字类的元素内不能使用块级元素",[19,129642,79214,129643,129645,129646,129648,129649],{},[43,129644,127721],{}," 标签主要用于存放文字，因此 ",[43,129647,127721],{}," 里面不能放块级元素，特别是不能放",[43,129650,127791],{},[19,129652,129653,129654,129596,129656,129658],{},"⑥同理， ",[43,129655,127695],{},[43,129657,129599],{},"等都是文字类块级标签，里面也不能放其他块级元素",[479,129660,129662],{"id":129661},"_812-行内元素","8.1.2 行内元素",[19,129664,129665,129666,2400,129668,2400,129671,2400,129674,2400,129677,2400,129680,2400,129683,2400,129686,2400,129689,2400,129692,129694,129695,129697],{},"常见的行内元素有 ",[43,129667,127953],{},[43,129669,129670],{},"\u003Cstrong>",[43,129672,129673],{},"\u003Cb>",[43,129675,129676],{},"\u003Cem>",[43,129678,129679],{},"\u003Ci>",[43,129681,129682],{},"\u003Cdel>",[43,129684,129685],{},"\u003Cs>",[43,129687,129688],{},"\u003Cins>",[43,129690,129691],{},"\u003Cu>",[43,129693,127794],{}," 等，其中 ",[43,129696,127794],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[19,129699,129700],{},[2339,129701,129702],{},"特点：",[19,129704,129705],{},"① 相邻行内元素在一行上，一行可以显示多个。",[19,129707,129708],{},"② 高、宽直接设置是无效的。",[19,129710,129711],{},"③ 默认宽度就是它本身内容的宽度。",[19,129713,129714],{},"④ 行内元素只能容纳文本或其他行内元素。",[19,129716,129717],{},[2339,129718,2226],{},[19,129720,129721],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[19,129723,129724,129725,129727,129728,129730],{},"②特殊情况链接 ",[43,129726,127953],{}," 里面可以放块级元素，但是给 ",[43,129729,127953],{}," 转换一下块级模式最安全",[479,129732,129734],{"id":129733},"_813-行内块元素","8.1.3 行内块元素",[19,129736,129737,129738,2400,129741,2400,129744,129747],{},"在行内元素中有几个特殊的标签 —— ",[43,129739,129740],{},"\u003Cimg \u002F>",[43,129742,129743],{},"\u003Cinput \u002F>",[43,129745,129746],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[19,129749,129750],{},[2339,129751,129752],{},"行内块元素的特点：",[19,129754,129755],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[19,129757,129758],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[19,129760,129761],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[479,129763,129765],{"id":129764},"_814-总结","8.1.4 总结",[3514,129767],{"style":128036,"src":129768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[479,129770,129772],{"id":129771},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[19,129774,129775],{},"①转换为块元素：display:block;",[36,129777,129779],{"className":128180,"code":129778,"language":128182,"meta":41,"style":41},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[43,129780,129781,129786,129792,129803,129815,129827],{"__ignoreMap":41},[46,129782,129783],{"class":48,"line":49},[46,129784,129785],{"class":2253},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[46,129787,129788,129790],{"class":48,"line":60},[46,129789,2426],{"class":1361},[46,129791,17573],{"class":56},[46,129793,129794,129797,129799,129801],{"class":48,"line":200},[46,129795,129796],{"class":180},"  display",[46,129798,53404],{"class":56},[46,129800,62834],{"class":180},[46,129802,3345],{"class":56},[46,129804,129805,129807,129809,129811,129813],{"class":48,"line":211},[46,129806,72533],{"class":180},[46,129808,53404],{"class":56},[46,129810,1155],{"class":180},[46,129812,53459],{"class":52},[46,129814,3345],{"class":56},[46,129816,129817,129819,129821,129823,129825],{"class":48,"line":222},[46,129818,72753],{"class":180},[46,129820,53404],{"class":56},[46,129822,2588],{"class":180},[46,129824,53459],{"class":52},[46,129826,3345],{"class":56},[46,129828,129829],{"class":48,"line":636},[46,129830,3616],{"class":56},[19,129832,129833],{},"②转换为行内元素：display:inline;",[36,129835,129837],{"className":128180,"code":129836,"language":128182,"meta":41,"style":41},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[43,129838,129839,129844,129850,129861],{"__ignoreMap":41},[46,129840,129841],{"class":48,"line":49},[46,129842,129843],{"class":2253},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[46,129845,129846,129848],{"class":48,"line":60},[46,129847,53578],{"class":1361},[46,129849,17573],{"class":56},[46,129851,129852,129854,129856,129859],{"class":48,"line":200},[46,129853,129796],{"class":180},[46,129855,53404],{"class":56},[46,129857,129858],{"class":180},"inline",[46,129860,3345],{"class":56},[46,129862,129863],{"class":48,"line":211},[46,129864,3616],{"class":56},[19,129866,129867],{},"③转换为行内块：display:inline-block;",[36,129869,129871],{"className":128180,"code":129870,"language":128182,"meta":41,"style":41},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[43,129872,129873,129878,129884,129894,129906,129918],{"__ignoreMap":41},[46,129874,129875],{"class":48,"line":49},[46,129876,129877],{"class":2253},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[46,129879,129880,129882],{"class":48,"line":60},[46,129881,46],{"class":1361},[46,129883,17573],{"class":56},[46,129885,129886,129888,129890,129892],{"class":48,"line":200},[46,129887,129796],{"class":180},[46,129889,53404],{"class":56},[46,129891,74348],{"class":180},[46,129893,3345],{"class":56},[46,129895,129896,129898,129900,129902,129904],{"class":48,"line":211},[46,129897,72533],{"class":180},[46,129899,53404],{"class":56},[46,129901,2798],{"class":180},[46,129903,53459],{"class":52},[46,129905,3345],{"class":56},[46,129907,129908,129910,129912,129914,129916],{"class":48,"line":222},[46,129909,72753],{"class":180},[46,129911,53404],{"class":56},[46,129913,3136],{"class":180},[46,129915,53459],{"class":52},[46,129917,3345],{"class":56},[46,129919,129920],{"class":48,"line":636},[46,129921,3616],{"class":56},[479,129923,129925],{"id":129924},"_816-小米侧边栏","8.1.6 小米侧边栏",[3514,129927],{"style":128036,"src":129928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[36,129930,129932],{"className":128927,"code":129931,"language":128929,"meta":41,"style":41},"\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",[43,129933,129934,129939,129954,129973,129992,130011,130030,130049,130068,130087],{"__ignoreMap":41},[46,129935,129936],{"class":48,"line":49},[46,129937,129938],{"class":2253},"\u003C!-- 小米侧边栏案例 -->\n",[46,129940,129941,129943,129945,129947,129949,129952],{"class":48,"line":60},[46,129942,821],{"class":56},[46,129944,53578],{"class":1361},[46,129946,55451],{"class":169},[46,129948,79],{"class":56},[46,129950,129951],{"class":173},"\"sidebar\"",[46,129953,53274],{"class":56},[46,129955,129956,129958,129960,129962,129964,129966,129969,129971],{"class":48,"line":200},[46,129957,54111],{"class":56},[46,129959,2426],{"class":1361},[46,129961,63022],{"class":169},[46,129963,79],{"class":56},[46,129965,63027],{"class":173},[46,129967,129968],{"class":56},">手机 电话卡\u003C\u002F",[46,129970,2426],{"class":1361},[46,129972,53274],{"class":56},[46,129974,129975,129977,129979,129981,129983,129985,129988,129990],{"class":48,"line":211},[46,129976,54111],{"class":56},[46,129978,2426],{"class":1361},[46,129980,63022],{"class":169},[46,129982,79],{"class":56},[46,129984,63027],{"class":173},[46,129986,129987],{"class":56},">电视 盒子\u003C\u002F",[46,129989,2426],{"class":1361},[46,129991,53274],{"class":56},[46,129993,129994,129996,129998,130000,130002,130004,130007,130009],{"class":48,"line":222},[46,129995,54111],{"class":56},[46,129997,2426],{"class":1361},[46,129999,63022],{"class":169},[46,130001,79],{"class":56},[46,130003,63027],{"class":173},[46,130005,130006],{"class":56},">笔记本 平板\u003C\u002F",[46,130008,2426],{"class":1361},[46,130010,53274],{"class":56},[46,130012,130013,130015,130017,130019,130021,130023,130026,130028],{"class":48,"line":636},[46,130014,54111],{"class":56},[46,130016,2426],{"class":1361},[46,130018,63022],{"class":169},[46,130020,79],{"class":56},[46,130022,63027],{"class":173},[46,130024,130025],{"class":56},">出行 穿戴\u003C\u002F",[46,130027,2426],{"class":1361},[46,130029,53274],{"class":56},[46,130031,130032,130034,130036,130038,130040,130042,130045,130047],{"class":48,"line":641},[46,130033,54111],{"class":56},[46,130035,2426],{"class":1361},[46,130037,63022],{"class":169},[46,130039,79],{"class":56},[46,130041,63027],{"class":173},[46,130043,130044],{"class":56},">智能 路由器\u003C\u002F",[46,130046,2426],{"class":1361},[46,130048,53274],{"class":56},[46,130050,130051,130053,130055,130057,130059,130061,130064,130066],{"class":48,"line":653},[46,130052,54111],{"class":56},[46,130054,2426],{"class":1361},[46,130056,63022],{"class":169},[46,130058,79],{"class":56},[46,130060,63027],{"class":173},[46,130062,130063],{"class":56},">健康 儿童\u003C\u002F",[46,130065,2426],{"class":1361},[46,130067,53274],{"class":56},[46,130069,130070,130072,130074,130076,130078,130080,130083,130085],{"class":48,"line":659},[46,130071,54111],{"class":56},[46,130073,2426],{"class":1361},[46,130075,63022],{"class":169},[46,130077,79],{"class":56},[46,130079,63027],{"class":173},[46,130081,130082],{"class":56},">耳机 音响\u003C\u002F",[46,130084,2426],{"class":1361},[46,130086,53274],{"class":56},[46,130088,130089,130091,130093],{"class":48,"line":665},[46,130090,53752],{"class":56},[46,130092,53578],{"class":1361},[46,130094,53274],{"class":56},[36,130096,130098],{"className":128180,"code":130097,"language":128182,"meta":41,"style":41},".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",[43,130099,130100,130109,130119,130132,130144,130156,130168,130178,130189,130193,130203,130214],{"__ignoreMap":41},[46,130101,130102,130105,130107],{"class":48,"line":49},[46,130103,130104],{"class":169},".sidebar",[46,130106,3450],{"class":1361},[46,130108,17573],{"class":56},[46,130110,130111,130113,130115,130117],{"class":48,"line":60},[46,130112,129796],{"class":180},[46,130114,53404],{"class":56},[46,130116,62834],{"class":180},[46,130118,3345],{"class":56},[46,130120,130121,130123,130125,130128,130130],{"class":48,"line":200},[46,130122,72533],{"class":180},[46,130124,53404],{"class":56},[46,130126,130127],{"class":180},"234",[46,130129,53459],{"class":52},[46,130131,3345],{"class":56},[46,130133,130134,130136,130138,130140,130142],{"class":48,"line":211},[46,130135,72753],{"class":180},[46,130137,53404],{"class":56},[46,130139,2639],{"class":180},[46,130141,53459],{"class":52},[46,130143,3345],{"class":56},[46,130145,130146,130148,130150,130152,130154],{"class":48,"line":222},[46,130147,128864],{"class":180},[46,130149,53404],{"class":56},[46,130151,2639],{"class":180},[46,130153,53459],{"class":52},[46,130155,3345],{"class":56},[46,130157,130158,130160,130162,130164,130166],{"class":48,"line":636},[46,130159,72788],{"class":180},[46,130161,53404],{"class":56},[46,130163,3136],{"class":180},[46,130165,53459],{"class":52},[46,130167,3345],{"class":56},[46,130169,130170,130172,130174,130176],{"class":48,"line":641},[46,130171,72870],{"class":180},[46,130173,53404],{"class":56},[46,130175,62807],{"class":180},[46,130177,3345],{"class":56},[46,130179,130180,130182,130184,130187],{"class":48,"line":653},[46,130181,72843],{"class":180},[46,130183,53404],{"class":56},[46,130185,130186],{"class":180},"#55585a",[46,130188,3345],{"class":56},[46,130190,130191],{"class":48,"line":659},[46,130192,3616],{"class":56},[46,130194,130195,130197,130199,130201],{"class":48,"line":665},[46,130196,130104],{"class":169},[46,130198,3450],{"class":1361},[46,130200,62905],{"class":169},[46,130202,17573],{"class":56},[46,130204,130205,130207,130209,130212],{"class":48,"line":670},[46,130206,72843],{"class":180},[46,130208,53404],{"class":56},[46,130210,130211],{"class":180},"#ff6700",[46,130213,3345],{"class":56},[46,130215,130216],{"class":48,"line":676},[46,130217,3616],{"class":56},[3514,130219],{"style":128036,"src":130220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[19,130222,130223],{},"行高=盒子高度：实现文字的垂直居中",[19,130225,130226],{},"原理讲解：",[3514,130228],{"style":128036,"src":130229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,130231,130233],{"id":130232},"_82-css背景","8.2 css背景",[19,130235,130236],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[479,130238,130240],{"id":130239},"_821-背景颜色","8.2.1 背景颜色",[19,130242,130243],{},"background-color:颜色值;",[19,130245,130246],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[479,130248,130250],{"id":130249},"_822-背景图片","8.2.2 背景图片",[19,130252,130253],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[36,130255,130257],{"className":128180,"code":130256,"language":128182,"meta":41,"style":41},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[43,130258,130259,130265,130281],{"__ignoreMap":41},[46,130260,130261,130263],{"class":48,"line":49},[46,130262,53578],{"class":1361},[46,130264,17573],{"class":56},[46,130266,130267,130270,130272,130274,130276,130279],{"class":48,"line":60},[46,130268,130269],{"class":180},"  background-image",[46,130271,53404],{"class":56},[46,130273,63691],{"class":180},[46,130275,1152],{"class":56},[46,130277,130278],{"class":439},"images\u002Fbg.png",[46,130280,4740],{"class":56},[46,130282,130283],{"class":48,"line":200},[46,130284,3616],{"class":56},[97,130286,130287,130296],{},[100,130288,130289],{},[103,130290,130291,130294],{},[106,130292,130293],{"align":108},"参数值",[106,130295,104588],{"align":108},[120,130297,130298,130305],{},[103,130299,130300,130302],{},[125,130301,56702],{"align":108},[125,130303,130304],{"align":108},"无背景图（默认的）",[103,130306,130307,130309],{},[125,130308,63691],{"align":108},[125,130310,130311],{"align":108},"使用绝对或相对地址指定背景图像",[36,130313,130314],{"className":128180,"code":130256,"language":128182,"meta":41,"style":41},[43,130315,130316,130322,130336],{"__ignoreMap":41},[46,130317,130318,130320],{"class":48,"line":49},[46,130319,53578],{"class":1361},[46,130321,17573],{"class":56},[46,130323,130324,130326,130328,130330,130332,130334],{"class":48,"line":60},[46,130325,130269],{"class":180},[46,130327,53404],{"class":56},[46,130329,63691],{"class":180},[46,130331,1152],{"class":56},[46,130333,130278],{"class":439},[46,130335,4740],{"class":56},[46,130337,130338],{"class":48,"line":200},[46,130339,3616],{"class":56},[19,130341,130342],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[479,130344,130346],{"id":130345},"_823-背景平铺","8.2.3 背景平铺",[36,130348,130350],{"className":128180,"code":130349,"language":128182,"meta":41,"style":41},"div {\n  background-repeat: no-repeat;\n}\n",[43,130351,130352,130358,130369],{"__ignoreMap":41},[46,130353,130354,130356],{"class":48,"line":49},[46,130355,53578],{"class":1361},[46,130357,17573],{"class":56},[46,130359,130360,130363,130365,130367],{"class":48,"line":60},[46,130361,130362],{"class":180},"  background-repeat",[46,130364,53404],{"class":56},[46,130366,63701],{"class":180},[46,130368,3345],{"class":56},[46,130370,130371],{"class":48,"line":200},[46,130372,3616],{"class":56},[97,130374,130375,130383],{},[100,130376,130377],{},[103,130378,130379,130381],{},[106,130380,130293],{"align":108},[106,130382,104588],{"align":108},[120,130384,130385,130393,130400,130408],{},[103,130386,130387,130390],{},[125,130388,130389],{"align":108},"repeat",[125,130391,130392],{"align":108},"背景图像在纵向和横向上平铺（默认的）",[103,130394,130395,130397],{},[125,130396,63701],{"align":108},[125,130398,130399],{"align":108},"背景图像不平铺",[103,130401,130402,130405],{},[125,130403,130404],{"align":108},"repeat-x",[125,130406,130407],{"align":108},"背景图像在横向上平铺",[103,130409,130410,130413],{},[125,130411,130412],{"align":108},"repeat-y",[125,130414,130415],{"align":108},"背景图像在纵向平铺",[479,130417,130419],{"id":130418},"_824-背景图片位置","8.2.4 背景图片位置",[36,130421,130423],{"className":128180,"code":130422,"language":128182,"meta":41,"style":41},"\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",[43,130424,130425,130430,130436,130450,130454,130459,130465,130481,130485,130490,130496,130510],{"__ignoreMap":41},[46,130426,130427],{"class":48,"line":49},[46,130428,130429],{"class":2253},"\u002F* 方位名词 *\u002F\n",[46,130431,130432,130434],{"class":48,"line":60},[46,130433,53578],{"class":1361},[46,130435,17573],{"class":56},[46,130437,130438,130441,130443,130445,130448],{"class":48,"line":200},[46,130439,130440],{"class":180},"  background-position",[46,130442,53404],{"class":56},[46,130444,53559],{"class":180},[46,130446,130447],{"class":180}," top",[46,130449,3345],{"class":56},[46,130451,130452],{"class":48,"line":211},[46,130453,3616],{"class":56},[46,130455,130456],{"class":48,"line":222},[46,130457,130458],{"class":2253},"\u002F* 精确单位 *\u002F\n",[46,130460,130461,130463],{"class":48,"line":636},[46,130462,53578],{"class":1361},[46,130464,17573],{"class":56},[46,130466,130467,130469,130471,130473,130475,130477,130479],{"class":48,"line":641},[46,130468,130440],{"class":180},[46,130470,53404],{"class":56},[46,130472,2886],{"class":180},[46,130474,53459],{"class":52},[46,130476,59469],{"class":180},[46,130478,53459],{"class":52},[46,130480,3345],{"class":56},[46,130482,130483],{"class":48,"line":653},[46,130484,3616],{"class":56},[46,130486,130487],{"class":48,"line":659},[46,130488,130489],{"class":2253},"\u002F* 混合单位 *\u002F\n",[46,130491,130492,130494],{"class":48,"line":665},[46,130493,53578],{"class":1361},[46,130495,17573],{"class":56},[46,130497,130498,130500,130502,130504,130506,130508],{"class":48,"line":670},[46,130499,130440],{"class":180},[46,130501,53404],{"class":56},[46,130503,2886],{"class":180},[46,130505,53459],{"class":52},[46,130507,19145],{"class":180},[46,130509,3345],{"class":56},[46,130511,130512],{"class":48,"line":676},[46,130513,3616],{"class":56},[19,130515,130516],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[97,130518,130519,130527],{},[100,130520,130521],{},[103,130522,130523,130525],{},[106,130524,130293],{"align":108},[106,130526,27861],{"align":108},[120,130528,130529,130536],{},[103,130530,130531,130533],{},[125,130532,53935],{"align":108},[125,130534,130535],{"align":108},"百分数|由浮点数和单位标识符组成的长度值",[103,130537,130538,130541],{},[125,130539,130540],{"align":108},"position",[125,130542,130543],{"align":108},"top|center|bottom|left|center|right 方位名词",[19,130545,130546],{},"其他说明：",[19,130548,130549],{},"①参数是方位名词",[19,130551,130552],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[19,130554,130555],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[19,130557,130558],{},"②参数是精确单位",[19,130560,130561],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[19,130563,130564],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[19,130566,130567],{},"③参数是混合单位",[19,130569,130570],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[479,130572,130574],{"id":130573},"_825-背景图片固定","8.2.5 背景图片固定",[36,130576,130578],{"className":128180,"code":130577,"language":128182,"meta":41,"style":41},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[43,130579,130580,130585,130591,130603,130607,130612,130618,130628],{"__ignoreMap":41},[46,130581,130582],{"class":48,"line":49},[46,130583,130584],{"class":2253},"\u002F* 背景滚动（默认） *\u002F\n",[46,130586,130587,130589],{"class":48,"line":60},[46,130588,53578],{"class":1361},[46,130590,17573],{"class":56},[46,130592,130593,130596,130598,130601],{"class":48,"line":200},[46,130594,130595],{"class":180},"  background-attachment",[46,130597,53404],{"class":56},[46,130599,130600],{"class":180},"scroll",[46,130602,3345],{"class":56},[46,130604,130605],{"class":48,"line":211},[46,130606,3616],{"class":56},[46,130608,130609],{"class":48,"line":222},[46,130610,130611],{"class":2253},"\u002F* 背景固定 *\u002F\n",[46,130613,130614,130616],{"class":48,"line":636},[46,130615,53578],{"class":1361},[46,130617,17573],{"class":56},[46,130619,130620,130622,130624,130626],{"class":48,"line":641},[46,130621,130595],{"class":180},[46,130623,53404],{"class":56},[46,130625,88196],{"class":180},[46,130627,3345],{"class":56},[46,130629,130630],{"class":48,"line":653},[46,130631,3616],{"class":56},[97,130633,130634,130643],{},[100,130635,130636],{},[103,130637,130638,130641],{},[106,130639,130640],{"align":108},"参数",[106,130642,104588],{"align":108},[120,130644,130645,130652],{},[103,130646,130647,130649],{},[125,130648,130600],{"align":108},[125,130650,130651],{"align":108},"背景图像是随对象内容滚动",[103,130653,130654,130656],{},[125,130655,88196],{"align":108},[125,130657,130658],{"align":108},"背景图像固定",[479,130660,130662],{"id":130661},"_826-背景样式合写","8.2.6 背景样式合写",[36,130664,130666],{"className":128180,"code":130665,"language":128182,"meta":41,"style":41},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[43,130667,130668,130673,130679,130707],{"__ignoreMap":41},[46,130669,130670],{"class":48,"line":49},[46,130671,130672],{"class":2253},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[46,130674,130675,130677],{"class":48,"line":60},[46,130676,53578],{"class":1361},[46,130678,17573],{"class":56},[46,130680,130681,130683,130685,130687,130690,130692,130694,130696,130698,130701,130703,130705],{"class":48,"line":200},[46,130682,72576],{"class":180},[46,130684,53404],{"class":56},[46,130686,62807],{"class":180},[46,130688,130689],{"class":180}," url",[46,130691,1152],{"class":56},[46,130693,130278],{"class":439},[46,130695,15716],{"class":56},[46,130697,63701],{"class":180},[46,130699,130700],{"class":180}," fixed",[46,130702,19145],{"class":180},[46,130704,130447],{"class":180},[46,130706,3345],{"class":56},[46,130708,130709],{"class":48,"line":211},[46,130710,3616],{"class":56},[479,130712,130714],{"id":130713},"_827-背景色半透明","8.2.7 背景色半透明",[36,130716,130718],{"className":128180,"code":130717,"language":128182,"meta":41,"style":41},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[43,130719,130720,130726,130752],{"__ignoreMap":41},[46,130721,130722,130724],{"class":48,"line":49},[46,130723,53578],{"class":1361},[46,130725,17573],{"class":56},[46,130727,130728,130730,130732,130734,130736,130738,130740,130742,130744,130746,130748,130750],{"class":48,"line":60},[46,130729,72576],{"class":180},[46,130731,53404],{"class":56},[46,130733,57075],{"class":180},[46,130735,1152],{"class":56},[46,130737,2379],{"class":180},[46,130739,448],{"class":56},[46,130741,2379],{"class":180},[46,130743,448],{"class":56},[46,130745,2379],{"class":180},[46,130747,448],{"class":56},[46,130749,102482],{"class":180},[46,130751,4740],{"class":56},[46,130753,130754],{"class":48,"line":200},[46,130755,3616],{"class":56},[19,130757,101357],{},[19,130759,130760],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[19,130762,130763],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[19,130765,130766],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[19,130768,130769],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[479,130771,130773],{"id":130772},"_828-总结","8.2.8 总结",[97,130775,130776,130787],{},[100,130777,130778],{},[103,130779,130780,130783,130785],{},[106,130781,130782],{"align":108},"属性",[106,130784,104588],{"align":108},[106,130786,2342],{"align":108},[120,130788,130789,130800,130811,130822,130833,130844,130855],{},[103,130790,130791,130794,130797],{},[125,130792,130793],{"align":108},"background-color",[125,130795,130796],{"align":108},"背景颜色",[125,130798,130799],{"align":108},"预定义的颜色值\u002F十六进制\u002FRGB代码",[103,130801,130802,130805,130808],{},[125,130803,130804],{"align":108},"background-image",[125,130806,130807],{"align":108},"背景图片",[125,130809,130810],{"align":108},"url(图片路径)",[103,130812,130813,130816,130819],{},[125,130814,130815],{"align":108},"background-repeat",[125,130817,130818],{"align":108},"是否平铺",[125,130820,130821],{"align":108},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[103,130823,130824,130827,130830],{},[125,130825,130826],{"align":108},"background-position",[125,130828,130829],{"align":108},"背景位置",[125,130831,130832],{"align":108},"length\u002Fposition 分别是x和y坐标",[103,130834,130835,130838,130841],{},[125,130836,130837],{"align":108},"background-attachment",[125,130839,130840],{"align":108},"背景附着",[125,130842,130843],{"align":108},"scroll(背景滚动) \u002Ffixed (背景固定)",[103,130845,130846,130849,130852],{},[125,130847,130848],{"align":108},"背景简写",[125,130850,130851],{"align":108},"书写更简单",[125,130853,130854],{"align":108},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[103,130856,130857,130860,130863],{},[125,130858,130859],{"align":108},"背景半透明",[125,130861,130862],{"align":108},"背景颜色半透明",[125,130864,130865],{"align":108},"background: rgba(0,0,0.3); 后面必须是4个值",[19,130867,130868],{},"颜色渐变：",[3514,130870],{"style":128036,"src":130871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[3514,130873],{"style":128036,"src":130874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[479,130876,130878],{"id":130877},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[36,130880,130882],{"className":128927,"code":130881,"language":128929,"meta":41,"style":41},"\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",[43,130883,130884,130899,130918,130937,130956,130975,130994],{"__ignoreMap":41},[46,130885,130886,130888,130890,130892,130894,130897],{"class":48,"line":49},[46,130887,821],{"class":56},[46,130889,53578],{"class":1361},[46,130891,55451],{"class":169},[46,130893,79],{"class":56},[46,130895,130896],{"class":173},"\"nav\"",[46,130898,53274],{"class":56},[46,130900,130901,130903,130905,130907,130909,130911,130914,130916],{"class":48,"line":60},[46,130902,54111],{"class":56},[46,130904,2426],{"class":1361},[46,130906,63022],{"class":169},[46,130908,79],{"class":56},[46,130910,63027],{"class":173},[46,130912,130913],{"class":56},">五彩导航1\u003C\u002F",[46,130915,2426],{"class":1361},[46,130917,53274],{"class":56},[46,130919,130920,130922,130924,130926,130928,130930,130933,130935],{"class":48,"line":200},[46,130921,54111],{"class":56},[46,130923,2426],{"class":1361},[46,130925,63022],{"class":169},[46,130927,79],{"class":56},[46,130929,63027],{"class":173},[46,130931,130932],{"class":56},">五彩导航2\u003C\u002F",[46,130934,2426],{"class":1361},[46,130936,53274],{"class":56},[46,130938,130939,130941,130943,130945,130947,130949,130952,130954],{"class":48,"line":211},[46,130940,54111],{"class":56},[46,130942,2426],{"class":1361},[46,130944,63022],{"class":169},[46,130946,79],{"class":56},[46,130948,63027],{"class":173},[46,130950,130951],{"class":56},">五彩导航3\u003C\u002F",[46,130953,2426],{"class":1361},[46,130955,53274],{"class":56},[46,130957,130958,130960,130962,130964,130966,130968,130971,130973],{"class":48,"line":222},[46,130959,54111],{"class":56},[46,130961,2426],{"class":1361},[46,130963,63022],{"class":169},[46,130965,79],{"class":56},[46,130967,63027],{"class":173},[46,130969,130970],{"class":56},">五彩导航4\u003C\u002F",[46,130972,2426],{"class":1361},[46,130974,53274],{"class":56},[46,130976,130977,130979,130981,130983,130985,130987,130990,130992],{"class":48,"line":636},[46,130978,54111],{"class":56},[46,130980,2426],{"class":1361},[46,130982,63022],{"class":169},[46,130984,79],{"class":56},[46,130986,63027],{"class":173},[46,130988,130989],{"class":56},">五彩导航5\u003C\u002F",[46,130991,2426],{"class":1361},[46,130993,53274],{"class":56},[46,130995,130996,130998,131000],{"class":48,"line":641},[46,130997,53752],{"class":56},[46,130999,53578],{"class":1361},[46,131001,53274],{"class":56},[36,131003,131005],{"className":128180,"code":131004,"language":128182,"meta":41,"style":41},".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",[43,131006,131007,131016,131026,131038,131050,131060,131072,131082,131086,131111,131134,131157,131180],{"__ignoreMap":41},[46,131008,131009,131012,131014],{"class":48,"line":49},[46,131010,131011],{"class":169},".nav",[46,131013,3450],{"class":1361},[46,131015,17573],{"class":56},[46,131017,131018,131020,131022,131024],{"class":48,"line":60},[46,131019,129796],{"class":180},[46,131021,53404],{"class":56},[46,131023,74348],{"class":180},[46,131025,3345],{"class":56},[46,131027,131028,131030,131032,131034,131036],{"class":48,"line":200},[46,131029,72533],{"class":180},[46,131031,53404],{"class":56},[46,131033,3003],{"class":180},[46,131035,53459],{"class":52},[46,131037,3345],{"class":56},[46,131039,131040,131042,131044,131046,131048],{"class":48,"line":211},[46,131041,72753],{"class":180},[46,131043,53404],{"class":56},[46,131045,3042],{"class":180},[46,131047,53459],{"class":52},[46,131049,3345],{"class":56},[46,131051,131052,131054,131056,131058],{"class":48,"line":222},[46,131053,72491],{"class":180},[46,131055,53404],{"class":56},[46,131057,53559],{"class":180},[46,131059,3345],{"class":56},[46,131061,131062,131064,131066,131068,131070],{"class":48,"line":636},[46,131063,128864],{"class":180},[46,131065,53404],{"class":56},[46,131067,3042],{"class":180},[46,131069,53459],{"class":52},[46,131071,3345],{"class":56},[46,131073,131074,131076,131078,131080],{"class":48,"line":641},[46,131075,72870],{"class":180},[46,131077,53404],{"class":56},[46,131079,62807],{"class":180},[46,131081,3345],{"class":56},[46,131083,131084],{"class":48,"line":653},[46,131085,3616],{"class":56},[46,131087,131088,131090,131092,131095,131097,131099,131102,131104,131106,131108],{"class":48,"line":659},[46,131089,131011],{"class":169},[46,131091,3450],{"class":1361},[46,131093,131094],{"class":169},":nth-child",[46,131096,1152],{"class":56},[46,131098,2405],{"class":180},[46,131100,131101],{"class":56},") { ",[46,131103,130793],{"class":180},[46,131105,53404],{"class":56},[46,131107,130211],{"class":180},[46,131109,131110],{"class":56},"; }\n",[46,131112,131113,131115,131117,131119,131121,131123,131125,131127,131129,131132],{"class":48,"line":665},[46,131114,131011],{"class":169},[46,131116,3450],{"class":1361},[46,131118,131094],{"class":169},[46,131120,1152],{"class":56},[46,131122,2272],{"class":180},[46,131124,131101],{"class":56},[46,131126,130793],{"class":180},[46,131128,53404],{"class":56},[46,131130,131131],{"class":180},"#ff0000",[46,131133,131110],{"class":56},[46,131135,131136,131138,131140,131142,131144,131146,131148,131150,131152,131155],{"class":48,"line":670},[46,131137,131011],{"class":169},[46,131139,3450],{"class":1361},[46,131141,131094],{"class":169},[46,131143,1152],{"class":56},[46,131145,2266],{"class":180},[46,131147,131101],{"class":56},[46,131149,130793],{"class":180},[46,131151,53404],{"class":56},[46,131153,131154],{"class":180},"#00a4ff",[46,131156,131110],{"class":56},[46,131158,131159,131161,131163,131165,131167,131169,131171,131173,131175,131178],{"class":48,"line":676},[46,131160,131011],{"class":169},[46,131162,3450],{"class":1361},[46,131164,131094],{"class":169},[46,131166,1152],{"class":56},[46,131168,2481],{"class":180},[46,131170,131101],{"class":56},[46,131172,130793],{"class":180},[46,131174,53404],{"class":56},[46,131176,131177],{"class":180},"#ff00ff",[46,131179,131110],{"class":56},[46,131181,131182,131184,131186,131188,131190,131192,131194,131196,131198,131201],{"class":48,"line":682},[46,131183,131011],{"class":169},[46,131185,3450],{"class":1361},[46,131187,131094],{"class":169},[46,131189,1152],{"class":56},[46,131191,2506],{"class":180},[46,131193,131101],{"class":56},[46,131195,130793],{"class":180},[46,131197,53404],{"class":56},[46,131199,131200],{"class":180},"#00ff00",[46,131202,131110],{"class":56},[14,131204,131206],{"id":131205},"_83-css三大特性","8.3 css三大特性",[479,131208,131210],{"id":131209},"_831-层叠性","8.3.1 层叠性",[19,131212,131213],{},"为了解决样式冲突问题",[19,131215,131216],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[19,131218,131219],{},"   ②样式不冲突，不会层叠",[479,131221,131223],{"id":131222},"_832-继承性","8.3.2 继承性",[19,131225,131226],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[19,131228,131229],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[36,131231,131233],{"className":128180,"code":131232,"language":128182,"meta":41,"style":41},"p {\n  color: #333;\n}\n",[43,131234,131235,131241,131251],{"__ignoreMap":41},[46,131236,131237,131239],{"class":48,"line":49},[46,131238,19],{"class":1361},[46,131240,17573],{"class":56},[46,131242,131243,131245,131247,131249],{"class":48,"line":60},[46,131244,72870],{"class":180},[46,131246,53404],{"class":56},[46,131248,64334],{"class":180},[46,131250,3345],{"class":56},[46,131252,131253],{"class":48,"line":200},[46,131254,3616],{"class":56},[3514,131256],{"style":128036,"src":131257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[19,131259,131260],{},"解释：①行高可以跟单位也可以不跟单位",[19,131262,131263],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[19,131265,131266],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[19,131268,131269],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[479,131271,131273],{"id":131272},"_833-优先级","8.3.3 优先级",[23,131275,131276,131279],{},[26,131277,131278],{},"选择器相同，则执行层叠性",[26,131280,131281],{},"选择器不同，则根据选择器权重执行",[97,131283,131284,131294],{},[100,131285,131286],{},[103,131287,131288,131291],{},[106,131289,131290],{"align":108},"选择器",[106,131292,131293],{"align":108},"选择器权重",[120,131295,131296,131304,131312,131320,131328,131336],{},[103,131297,131298,131301],{},[125,131299,131300],{"align":108},"继承 或者*",[125,131302,131303],{"align":108},"0，0，0，0",[103,131305,131306,131309],{},[125,131307,131308],{"align":108},"标签选择器",[125,131310,131311],{"align":108},"0，0，0，1",[103,131313,131314,131317],{},[125,131315,131316],{"align":108},"类选择器，伪类选择器",[125,131318,131319],{"align":108},"0，0，1，0",[103,131321,131322,131325],{},[125,131323,131324],{"align":108},"ID选择器",[125,131326,131327],{"align":108},"0，1，0，0",[103,131329,131330,131333],{},[125,131331,131332],{"align":108},"行内样式",[125,131334,131335],{"align":108},"1，0，0，0",[103,131337,131338,131341],{},[125,131339,131340],{"align":108},"！important",[125,131342,131343],{"align":108},"无穷大",[19,131345,131346],{},"! important用法：",[36,131348,131350],{"className":128180,"code":131349,"language":128182,"meta":41,"style":41},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[43,131351,131352,131357,131363,131376,131380,131385,131391,131401],{"__ignoreMap":41},[46,131353,131354],{"class":48,"line":49},[46,131355,131356],{"class":2253},"\u002F* !important 拥有最高优先级 *\u002F\n",[46,131358,131359,131361],{"class":48,"line":60},[46,131360,53578],{"class":1361},[46,131362,17573],{"class":56},[46,131364,131365,131367,131369,131371,131374],{"class":48,"line":200},[46,131366,72870],{"class":180},[46,131368,53404],{"class":56},[46,131370,53612],{"class":180},[46,131372,131373],{"class":52}," !important",[46,131375,3345],{"class":56},[46,131377,131378],{"class":48,"line":211},[46,131379,3616],{"class":56},[46,131381,131382],{"class":48,"line":222},[46,131383,131384],{"class":2253},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[46,131386,131387,131389],{"class":48,"line":636},[46,131388,53578],{"class":1361},[46,131390,17573],{"class":56},[46,131392,131393,131395,131397,131399],{"class":48,"line":641},[46,131394,72870],{"class":180},[46,131396,53404],{"class":56},[46,131398,59386],{"class":180},[46,131400,3345],{"class":56},[46,131402,131403],{"class":48,"line":653},[46,131404,3616],{"class":56},[19,131406,131407],{},"优先级注意点：",[19,131409,131410],{},"①权重是有4组数字组成,但是不会有进位",[19,131412,131413],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[19,131415,131416],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[19,131418,131419],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[19,131421,131422],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[19,131424,131425],{},"⑥复合选择器",[97,131427,131428,131438],{},[100,131429,131430],{},[103,131431,131432,131435],{},[106,131433,131434],{"align":108},"div ul li",[106,131436,131437],{"align":108},"0,0,0,3",[120,131439,131440,131448,131456],{},[103,131441,131442,131445],{},[125,131443,131444],{"align":108},".nav ul li",[125,131446,131447],{"align":108},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[103,131449,131450,131453],{},[125,131451,131452],{"align":108},"a:hover",[125,131454,131455],{"align":108},"0,0,1,1",[103,131457,131458,131461],{},[125,131459,131460],{"align":108},".nav a",[125,131462,131455],{"align":108},[2098,131464,131465],{},"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":41,"searchDepth":60,"depth":60,"links":131467},[131468,131476,131487],{"id":129576,"depth":60,"text":129577,"children":131469},[131470,131471,131472,131473,131474,131475],{"id":129589,"depth":200,"text":129590},{"id":129661,"depth":200,"text":129662},{"id":129733,"depth":200,"text":129734},{"id":129764,"depth":200,"text":129765},{"id":129771,"depth":200,"text":129772},{"id":129924,"depth":200,"text":129925},{"id":130232,"depth":60,"text":130233,"children":131477},[131478,131479,131480,131481,131482,131483,131484,131485,131486],{"id":130239,"depth":200,"text":130240},{"id":130249,"depth":200,"text":130250},{"id":130345,"depth":200,"text":130346},{"id":130418,"depth":200,"text":130419},{"id":130573,"depth":200,"text":130574},{"id":130661,"depth":200,"text":130662},{"id":130713,"depth":200,"text":130714},{"id":130772,"depth":200,"text":130773},{"id":130877,"depth":200,"text":130878},{"id":131205,"depth":60,"text":131206,"children":131488},[131489,131490,131491],{"id":131209,"depth":200,"text":131210},{"id":131222,"depth":200,"text":131223},{"id":131272,"depth":200,"text":131273},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":129568,"description":25378},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":131498,"title":131499,"body":131500,"description":25378,"extension":2125,"meta":133090,"navigation":615,"path":133091,"seo":133092,"stem":133093,"__hash__":133094},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":131501,"toc":133069},[131502,131505,131509,131512,131515,131518,131521,131524,131527,131530,131534,131542,131579,131615,131618,131632,131637,131671,131674,131767,131772,131775,131805,131808,131813,131821,131825,131832,131878,131922,131927,131930,131933,131936,131939,131942,131945,131947,131950,131954,131959,132003,132008,132011,132014,132051,132056,132059,132062,132065,132068,132100,132103,132106,132109,132141,132144,132147,132150,132154,132157,132189,132192,132196,132216,132219,132227,132230,132234,132239,132242,132274,132279,132282,132320,132324,132329,132332,132335,132366,132369,132386,132391,132443,132503,132508,132562,132600,132604,132608,132611,132615,132623,132626,132628,132639,132644,132692,132726,132729,132732,132735,132738,132782,132785,132788,132791,132794,132797,132800,132844,132847,132850,132853,132856,132859,132862,132868,132871,132915,132918,132921,132924,132927,132930,132974,132977,132979,132982,132986,132990,133028,133032,133035,133038,133042,133050,133054,133057,133060,133063,133066],[10,131503,131499],{"id":131504},"_9-css盒模型浮动与切图",[14,131506,131508],{"id":131507},"_91-盒子模型","9.1 盒子模型",[19,131510,131511],{},"利用盒子来设计网页",[19,131513,131514],{},"盒子包含：边框、外边距、内边距、实际内容",[19,131516,131517],{},"网页布局设置：",[19,131519,131520],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[19,131522,131523],{},"②利用css设置好盒子样式，然后摆放到相应位置",[19,131525,131526],{},"③往盒子里装内容",[3514,131528],{"style":128036,"src":131529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[479,131531,131533],{"id":131532},"_911-边框border","9.1.1 边框（border）",[23,131535,131536,131539],{},[26,131537,131538],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[26,131540,131541],{},"语法",[36,131543,131545],{"className":128180,"code":131544,"language":128182,"meta":41,"style":41},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[43,131546,131547,131552,131558,131575],{"__ignoreMap":41},[46,131548,131549],{"class":48,"line":49},[46,131550,131551],{"class":2253},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[46,131553,131554,131556],{"class":48,"line":60},[46,131555,53578],{"class":1361},[46,131557,17573],{"class":56},[46,131559,131560,131562,131564,131566,131568,131570,131573],{"class":48,"line":200},[46,131561,72861],{"class":180},[46,131563,53404],{"class":56},[46,131565,2405],{"class":180},[46,131567,53459],{"class":52},[46,131569,53488],{"class":180},[46,131571,131572],{"class":180}," #ccc",[46,131574,3345],{"class":56},[46,131576,131577],{"class":48,"line":211},[46,131578,3616],{"class":56},[97,131580,131581,131589],{},[100,131582,131583],{},[103,131584,131585,131587],{},[106,131586,130782],{"align":108},[106,131588,104588],{"align":108},[120,131590,131591,131599,131607],{},[103,131592,131593,131596],{},[125,131594,131595],{"align":108},"border-width",[125,131597,131598],{"align":108},"定义边框粗细，单位是px",[103,131600,131601,131604],{},[125,131602,131603],{"align":108},"border-style",[125,131605,131606],{"align":108},"边框的样式",[103,131608,131609,131612],{},[125,131610,131611],{"align":108},"border-color",[125,131613,131614],{"align":108},"边框的颜色",[19,131616,131617],{},"边框样式 border-style 可以设置如下值：",[3191,131619,131620,131623,131626,131629],{},[26,131621,131622],{},"none：没有边框即忽略所有边框的宽度（默认值）",[26,131624,131625],{},"solid：边框为单实线(最为常用的)",[26,131627,131628],{},"dashed：边框为虚线",[26,131630,131631],{},"dotted：边框为点线",[23,131633,131634],{"start":200},[26,131635,131636],{},"边框的合写分写",[36,131638,131639],{"className":128180,"code":131544,"language":128182,"meta":41,"style":41},[43,131640,131641,131645,131651,131667],{"__ignoreMap":41},[46,131642,131643],{"class":48,"line":49},[46,131644,131551],{"class":2253},[46,131646,131647,131649],{"class":48,"line":60},[46,131648,53578],{"class":1361},[46,131650,17573],{"class":56},[46,131652,131653,131655,131657,131659,131661,131663,131665],{"class":48,"line":200},[46,131654,72861],{"class":180},[46,131656,53404],{"class":56},[46,131658,2405],{"class":180},[46,131660,53459],{"class":52},[46,131662,53488],{"class":180},[46,131664,131572],{"class":180},[46,131666,3345],{"class":56},[46,131668,131669],{"class":48,"line":211},[46,131670,3616],{"class":56},[19,131672,131673],{},"边框分开写法：",[36,131675,131677],{"className":128180,"code":131676,"language":128182,"meta":41,"style":41},"\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",[43,131678,131679,131684,131690,131708,131726,131745,131763],{"__ignoreMap":41},[46,131680,131681],{"class":48,"line":49},[46,131682,131683],{"class":2253},"\u002F* 边框分开写法 *\u002F\n",[46,131685,131686,131688],{"class":48,"line":60},[46,131687,53578],{"class":1361},[46,131689,17573],{"class":56},[46,131691,131692,131695,131697,131699,131701,131703,131706],{"class":48,"line":200},[46,131693,131694],{"class":180},"  border-top",[46,131696,53404],{"class":56},[46,131698,2405],{"class":180},[46,131700,53459],{"class":52},[46,131702,53488],{"class":180},[46,131704,131705],{"class":180}," #000",[46,131707,3345],{"class":56},[46,131709,131710,131713,131715,131717,131719,131721,131724],{"class":48,"line":211},[46,131711,131712],{"class":180},"  border-right",[46,131714,53404],{"class":56},[46,131716,2272],{"class":180},[46,131718,53459],{"class":52},[46,131720,64206],{"class":180},[46,131722,131723],{"class":180}," #333",[46,131725,3345],{"class":56},[46,131727,131728,131731,131733,131735,131737,131740,131743],{"class":48,"line":222},[46,131729,131730],{"class":180},"  border-bottom",[46,131732,53404],{"class":56},[46,131734,2266],{"class":180},[46,131736,53459],{"class":52},[46,131738,131739],{"class":180}," dotted",[46,131741,131742],{"class":180}," #666",[46,131744,3345],{"class":56},[46,131746,131747,131750,131752,131754,131756,131758,131761],{"class":48,"line":636},[46,131748,131749],{"class":180},"  border-left",[46,131751,53404],{"class":56},[46,131753,2405],{"class":180},[46,131755,53459],{"class":52},[46,131757,53488],{"class":180},[46,131759,131760],{"class":180}," #999",[46,131762,3345],{"class":56},[46,131764,131765],{"class":48,"line":641},[46,131766,3616],{"class":56},[23,131768,131769],{"start":211},[26,131770,131771],{},"表格的细线边框",[19,131773,131774],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[36,131776,131778],{"className":128180,"code":131777,"language":128182,"meta":41,"style":41},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[43,131779,131780,131785,131791,131801],{"__ignoreMap":41},[46,131781,131782],{"class":48,"line":49},[46,131783,131784],{"class":2253},"\u002F* 表格细线边框合并 *\u002F\n",[46,131786,131787,131789],{"class":48,"line":60},[46,131788,97],{"class":1361},[46,131790,17573],{"class":56},[46,131792,131793,131795,131797,131799],{"class":48,"line":200},[46,131794,72543],{"class":180},[46,131796,53404],{"class":56},[46,131798,67000],{"class":180},[46,131800,3345],{"class":56},[46,131802,131803],{"class":48,"line":211},[46,131804,3616],{"class":56},[19,131806,131807],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[23,131809,131810],{"start":222},[26,131811,131812],{},"解决边框额外增加盒子的实际大小的方法：",[3191,131814,131815,131818],{},[26,131816,131817],{},"测量盒子大小的时候,不量边框",[26,131819,131820],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[479,131822,131824],{"id":131823},"_912-内边距","9.1.2 内边距",[23,131826,131827,131830],{},[26,131828,131829],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[26,131831,131541],{},[97,131833,131834,131844],{},[100,131835,131836],{},[103,131837,131838,131841],{},[106,131839,131840],{"align":108},"值的个数",[106,131842,131843],{"align":108},"表达意思",[120,131845,131846,131854,131862,131870],{},[103,131847,131848,131851],{},[125,131849,131850],{"align":108},"padding: 5px;",[125,131852,131853],{"align":108},"1个值，代表上下左右都有5个元素",[103,131855,131856,131859],{},[125,131857,131858],{"align":108},"padding: 5px 10px;",[125,131860,131861],{"align":108},"2个值，代表上下内边距为5像素，左右内边距为10像素",[103,131863,131864,131867],{},[125,131865,131866],{"align":108},"padding: 5px 10px 20px;",[125,131868,131869],{"align":108},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[103,131871,131872,131875],{},[125,131873,131874],{"align":108},"padding: 5px 10px 20px 30px;",[125,131876,131877],{"align":108},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[97,131879,131880,131888],{},[100,131881,131882],{},[103,131883,131884,131886],{},[106,131885,130782],{"align":108},[106,131887,104588],{"align":108},[120,131889,131890,131898,131906,131914],{},[103,131891,131892,131895],{},[125,131893,131894],{"align":108},"padding-left",[125,131896,131897],{"align":108},"左内边距",[103,131899,131900,131903],{},[125,131901,131902],{"align":108},"padding-right",[125,131904,131905],{"align":108},"右内边距",[103,131907,131908,131911],{},[125,131909,131910],{"align":108},"padding-top",[125,131912,131913],{"align":108},"上内边距",[103,131915,131916,131919],{},[125,131917,131918],{"align":108},"padding-bottom",[125,131920,131921],{"align":108},"下内边距",[23,131923,131924],{"start":200},[26,131925,131926],{},"内边距会影响盒子的实际大小",[19,131928,131929],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[19,131931,131932],{},"①内容和边框有了距离，添加了内边距",[19,131934,131935],{},"②padding影响了盒子实际大小",[19,131937,131938],{},"内边距对盒子大小的影响：",[19,131940,131941],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[19,131943,131944],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[19,131946,97183],{},[19,131948,131949],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[479,131951,131953],{"id":131952},"_913-外边距","9.1.3 外边距",[23,131955,131956],{},[26,131957,131958],{},"控制盒子与盒子之间的距离",[97,131960,131961,131969],{},[100,131962,131963],{},[103,131964,131965,131967],{},[106,131966,130782],{"align":108},[106,131968,104588],{"align":108},[120,131970,131971,131979,131987,131995],{},[103,131972,131973,131976],{},[125,131974,131975],{"align":108},"margin-left",[125,131977,131978],{"align":108},"左外边距",[103,131980,131981,131984],{},[125,131982,131983],{"align":108},"margin-right",[125,131985,131986],{"align":108},"右外边距",[103,131988,131989,131992],{},[125,131990,131991],{"align":108},"margin-top",[125,131993,131994],{"align":108},"上外边距",[103,131996,131997,132000],{},[125,131998,131999],{"align":108},"margin-bottom",[125,132001,132002],{"align":108},"下外边距",[23,132004,132005],{"start":60},[26,132006,132007],{},"外边距可以让块级盒子水平居中的两个条件：",[19,132009,132010],{},"①盒子必须指定了宽度（width）",[19,132012,132013],{},"②盒子左右的外边距都设置为 auto",[36,132015,132017],{"className":128180,"code":132016,"language":128182,"meta":41,"style":41},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[43,132018,132019,132024,132031,132047],{"__ignoreMap":41},[46,132020,132021],{"class":48,"line":49},[46,132022,132023],{"class":2253},"\u002F* margin 复合写法（同上） *\u002F\n",[46,132025,132026,132029],{"class":48,"line":60},[46,132027,132028],{"class":169},".box",[46,132030,17573],{"class":56},[46,132032,132033,132035,132037,132039,132041,132044],{"class":48,"line":200},[46,132034,72435],{"class":180},[46,132036,53404],{"class":56},[46,132038,2379],{"class":180},[46,132040,53523],{"class":180},[46,132042,132043],{"class":56},";  ",[46,132045,132046],{"class":2253},"\u002F* 块级盒子水平居中 *\u002F\n",[46,132048,132049],{"class":48,"line":211},[46,132050,3616],{"class":56},[23,132052,132053],{"start":200},[26,132054,132055],{},"外边距塌陷问题",[19,132057,132058],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[3514,132060],{"style":128036,"src":132061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[19,132063,132064],{},"解决方案：",[19,132066,132067],{},"①可以为父亲元素定义上边距",[36,132069,132070],{"className":128180,"code":132016,"language":128182,"meta":41,"style":41},[43,132071,132072,132076,132082,132096],{"__ignoreMap":41},[46,132073,132074],{"class":48,"line":49},[46,132075,132023],{"class":2253},[46,132077,132078,132080],{"class":48,"line":60},[46,132079,132028],{"class":169},[46,132081,17573],{"class":56},[46,132083,132084,132086,132088,132090,132092,132094],{"class":48,"line":200},[46,132085,72435],{"class":180},[46,132087,53404],{"class":56},[46,132089,2379],{"class":180},[46,132091,53523],{"class":180},[46,132093,132043],{"class":56},[46,132095,132046],{"class":2253},[46,132097,132098],{"class":48,"line":211},[46,132099,3616],{"class":56},[19,132101,132102],{},"②可以为父亲元素定义上内边距",[19,132104,132105],{},"③可以为父亲元素添加overflow:hidden",[3514,132107],{"style":128036,"src":132108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[36,132110,132111],{"className":128180,"code":132016,"language":128182,"meta":41,"style":41},[43,132112,132113,132117,132123,132137],{"__ignoreMap":41},[46,132114,132115],{"class":48,"line":49},[46,132116,132023],{"class":2253},[46,132118,132119,132121],{"class":48,"line":60},[46,132120,132028],{"class":169},[46,132122,17573],{"class":56},[46,132124,132125,132127,132129,132131,132133,132135],{"class":48,"line":200},[46,132126,72435],{"class":180},[46,132128,53404],{"class":56},[46,132130,2379],{"class":180},[46,132132,53523],{"class":180},[46,132134,132043],{"class":56},[46,132136,132046],{"class":2253},[46,132138,132139],{"class":48,"line":211},[46,132140,3616],{"class":56},[3514,132142],{"style":128036,"src":132143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[19,132145,132146],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[19,132148,132149],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[479,132151,132153],{"id":132152},"_914-清除内外边距","9.1.4 清除内外边距",[19,132155,132156],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[36,132158,132159],{"className":128180,"code":132016,"language":128182,"meta":41,"style":41},[43,132160,132161,132165,132171,132185],{"__ignoreMap":41},[46,132162,132163],{"class":48,"line":49},[46,132164,132023],{"class":2253},[46,132166,132167,132169],{"class":48,"line":60},[46,132168,132028],{"class":169},[46,132170,17573],{"class":56},[46,132172,132173,132175,132177,132179,132181,132183],{"class":48,"line":200},[46,132174,72435],{"class":180},[46,132176,53404],{"class":56},[46,132178,2379],{"class":180},[46,132180,53523],{"class":180},[46,132182,132043],{"class":56},[46,132184,132046],{"class":2253},[46,132186,132187],{"class":48,"line":211},[46,132188,3616],{"class":56},[19,132190,132191],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[479,132193,132195],{"id":132194},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[3191,132197,132198,132201,132204,132207,132210,132213],{},[26,132199,132200],{},"文件→打开 ：可以打开我们要测量的图片",[26,132202,132203],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[26,132205,132206],{},"右击标尺，把里面的单位改为像素",[26,132208,132209],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[26,132211,132212],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[26,132214,132215],{},"用选区拖动 可以测量大小",[3514,132217],{"style":128036,"src":132218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[3191,132220,132221,132224],{},[26,132222,132223],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[26,132225,132226],{},"吸管取色工具",[3514,132228],{"style":128036,"src":132229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[479,132231,132233],{"id":132232},"_916-案例","9.1.6 案例",[23,132235,132236],{},[26,132237,132238],{},"小米商品",[3514,132240],{"style":128036,"src":132241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[36,132243,132244],{"className":128180,"code":132016,"language":128182,"meta":41,"style":41},[43,132245,132246,132250,132256,132270],{"__ignoreMap":41},[46,132247,132248],{"class":48,"line":49},[46,132249,132023],{"class":2253},[46,132251,132252,132254],{"class":48,"line":60},[46,132253,132028],{"class":169},[46,132255,17573],{"class":56},[46,132257,132258,132260,132262,132264,132266,132268],{"class":48,"line":200},[46,132259,72435],{"class":180},[46,132261,53404],{"class":56},[46,132263,2379],{"class":180},[46,132265,53523],{"class":180},[46,132267,132043],{"class":56},[46,132269,132046],{"class":2253},[46,132271,132272],{"class":48,"line":211},[46,132273,3616],{"class":56},[23,132275,132276],{"start":60},[26,132277,132278],{},"快报模块",[3514,132280],{"style":128036,"src":132281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[36,132283,132285],{"className":128927,"code":132284,"language":128929,"meta":41,"style":41},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[43,132286,132287,132292,132307,132312],{"__ignoreMap":41},[46,132288,132289],{"class":48,"line":49},[46,132290,132291],{"class":2253},"\u003C!-- HTML 代码示例 -->\n",[46,132293,132294,132296,132298,132300,132302,132305],{"class":48,"line":60},[46,132295,821],{"class":56},[46,132297,53578],{"class":1361},[46,132299,55451],{"class":169},[46,132301,79],{"class":56},[46,132303,132304],{"class":173},"\"example\"",[46,132306,53274],{"class":56},[46,132308,132309],{"class":48,"line":200},[46,132310,132311],{"class":56},"  示例内容\n",[46,132313,132314,132316,132318],{"class":48,"line":211},[46,132315,53752],{"class":56},[46,132317,53578],{"class":1361},[46,132319,53274],{"class":56},[479,132321,132323],{"id":132322},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[23,132325,132326],{},[26,132327,132328],{},"圆角边框",[19,132330,132331],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[3514,132333],{"style":128036,"src":132334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[36,132336,132338],{"className":128180,"code":132337,"language":128182,"meta":41,"style":41},"div {\n  border: 1px solid #ccc;\n}\n",[43,132339,132340,132346,132362],{"__ignoreMap":41},[46,132341,132342,132344],{"class":48,"line":49},[46,132343,53578],{"class":1361},[46,132345,17573],{"class":56},[46,132347,132348,132350,132352,132354,132356,132358,132360],{"class":48,"line":60},[46,132349,72861],{"class":180},[46,132351,53404],{"class":56},[46,132353,2405],{"class":180},[46,132355,53459],{"class":52},[46,132357,53488],{"class":180},[46,132359,131572],{"class":180},[46,132361,3345],{"class":56},[46,132363,132364],{"class":48,"line":200},[46,132365,3616],{"class":56},[19,132367,132368],{},"解释:",[3191,132370,132371,132374,132377,132380,132383],{},[26,132372,132373],{},"参数值可以为数值或百分比的形式",[26,132375,132376],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[26,132378,132379],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[26,132381,132382],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[26,132384,132385],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[23,132387,132388],{"start":60},[26,132389,132390],{},"盒子阴影",[36,132392,132394],{"className":128180,"code":132393,"language":128182,"meta":41,"style":41},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[43,132395,132396,132402,132439],{"__ignoreMap":41},[46,132397,132398,132400],{"class":48,"line":49},[46,132399,53578],{"class":1361},[46,132401,17573],{"class":56},[46,132403,132404,132407,132409,132411,132413,132415,132417,132419,132421,132423,132425,132427,132429,132431,132433,132435,132437],{"class":48,"line":60},[46,132405,132406],{"class":180},"  box-shadow",[46,132408,53404],{"class":56},[46,132410,2379],{"class":180},[46,132412,16757],{"class":180},[46,132414,53459],{"class":52},[46,132416,4068],{"class":180},[46,132418,53459],{"class":52},[46,132420,80732],{"class":180},[46,132422,1152],{"class":56},[46,132424,2379],{"class":180},[46,132426,448],{"class":56},[46,132428,2379],{"class":180},[46,132430,448],{"class":56},[46,132432,2379],{"class":180},[46,132434,448],{"class":56},[46,132436,88173],{"class":180},[46,132438,4740],{"class":56},[46,132440,132441],{"class":48,"line":200},[46,132442,3616],{"class":56},[97,132444,132445,132453],{},[100,132446,132447],{},[103,132448,132449,132451],{},[106,132450,2342],{"align":108},[106,132452,29478],{"align":108},[120,132454,132455,132463,132471,132479,132487,132495],{},[103,132456,132457,132460],{},[125,132458,132459],{"align":108},"h-shadow",[125,132461,132462],{"align":108},"必需,水平阴影的位置,允许负值",[103,132464,132465,132468],{},[125,132466,132467],{"align":108},"v-shadow",[125,132469,132470],{"align":108},"必需,垂直阴影的位置,允许负值",[103,132472,132473,132476],{},[125,132474,132475],{"align":108},"blur",[125,132477,132478],{"align":108},"可选,模糊距离,就是影子的虚实",[103,132480,132481,132484],{},[125,132482,132483],{"align":108},"spread",[125,132485,132486],{"align":108},"可选,阴影尺寸",[103,132488,132489,132492],{},[125,132490,132491],{"align":108},"color",[125,132493,132494],{"align":108},"可选,阴影的颜色",[103,132496,132497,132500],{},[125,132498,132499],{"align":108},"inset",[125,132501,132502],{"align":108},"可选,将外部阴影(outset)改为内部阴影",[23,132504,132505],{"start":200},[26,132506,132507],{},"文字阴影",[36,132509,132511],{"className":128180,"code":132510,"language":128182,"meta":41,"style":41},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[43,132512,132513,132519,132558],{"__ignoreMap":41},[46,132514,132515,132517],{"class":48,"line":49},[46,132516,19],{"class":1361},[46,132518,17573],{"class":56},[46,132520,132521,132524,132526,132528,132530,132532,132534,132536,132538,132540,132542,132544,132546,132548,132550,132552,132554,132556],{"class":48,"line":60},[46,132522,132523],{"class":180},"  text-shadow",[46,132525,53404],{"class":56},[46,132527,2405],{"class":180},[46,132529,53459],{"class":52},[46,132531,27110],{"class":180},[46,132533,53459],{"class":52},[46,132535,16757],{"class":180},[46,132537,53459],{"class":52},[46,132539,80732],{"class":180},[46,132541,1152],{"class":56},[46,132543,2379],{"class":180},[46,132545,448],{"class":56},[46,132547,2379],{"class":180},[46,132549,448],{"class":56},[46,132551,2379],{"class":180},[46,132553,448],{"class":56},[46,132555,102482],{"class":180},[46,132557,4740],{"class":56},[46,132559,132560],{"class":48,"line":200},[46,132561,3616],{"class":56},[97,132563,132564,132572],{},[100,132565,132566],{},[103,132567,132568,132570],{},[106,132569,2342],{"align":108},[106,132571,29478],{"align":108},[120,132573,132574,132580,132587,132594],{},[103,132575,132576,132578],{},[125,132577,132459],{"align":108},[125,132579,132462],{"align":108},[103,132581,132582,132584],{},[125,132583,132467],{"align":108},[125,132585,132586],{"align":108},"必需,垂直阴影位置,允许负值",[103,132588,132589,132591],{},[125,132590,132475],{"align":108},[125,132592,132593],{"align":108},"可选,模糊的距离",[103,132595,132596,132598],{},[125,132597,132491],{"align":108},[125,132599,132494],{"align":108},[14,132601,132603],{"id":132602},"_92-浮动","9.2 浮动",[479,132605,132607],{"id":132606},"_921-浮动介绍","9.2.1 浮动介绍",[19,132609,132610],{},"在16.2中详细介绍",[479,132612,132614],{"id":132613},"_922-清除浮动","9.2.2 清除浮动",[23,132616,132617,132620],{},[26,132618,132619],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[26,132621,132622],{},"清除浮动的本质",[19,132624,132625],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[19,132627,11029],{},[3191,132629,132630,132633,132636],{},[26,132631,132632],{},"如果父盒子本身有高度，则不需要清除浮动",[26,132634,132635],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[26,132637,132638],{},"父级有了高度，就不会影响下面的标准流了",[23,132640,132641],{"start":200},[26,132642,132643],{},"清除浮动样式",[36,132645,132647],{"className":128180,"code":132646,"language":128182,"meta":41,"style":41},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[43,132648,132649,132656,132667,132671,132678,132688],{"__ignoreMap":41},[46,132650,132651,132654],{"class":48,"line":49},[46,132652,132653],{"class":169},".left",[46,132655,17573],{"class":56},[46,132657,132658,132661,132663,132665],{"class":48,"line":60},[46,132659,132660],{"class":180},"  float",[46,132662,53404],{"class":56},[46,132664,108],{"class":180},[46,132666,3345],{"class":56},[46,132668,132669],{"class":48,"line":200},[46,132670,3616],{"class":56},[46,132672,132673,132676],{"class":48,"line":211},[46,132674,132675],{"class":169},".right",[46,132677,17573],{"class":56},[46,132679,132680,132682,132684,132686],{"class":48,"line":222},[46,132681,132660],{"class":180},[46,132683,53404],{"class":56},[46,132685,74487],{"class":180},[46,132687,3345],{"class":56},[46,132689,132690],{"class":48,"line":636},[46,132691,3616],{"class":56},[97,132693,132694,132702],{},[100,132695,132696],{},[103,132697,132698,132700],{},[106,132699,128644],{"align":108},[106,132701,29478],{"align":108},[120,132703,132704,132711,132718],{},[103,132705,132706,132708],{},[125,132707,108],{"align":108},[125,132709,132710],{"align":108},"不允许左侧有浮动元素（清除左侧浮动的影响）",[103,132712,132713,132715],{},[125,132714,74487],{"align":108},[125,132716,132717],{"align":108},"不允许右侧有浮动元素（清除右侧浮动的影响）",[103,132719,132720,132723],{},[125,132721,132722],{"align":108},"both",[125,132724,132725],{"align":108},"同时清除左右侧浮动的影响",[19,132727,132728],{},"法一",[19,132730,132731],{},"额外标签法也称为隔墙法",[19,132733,132734],{},"使用方式：",[19,132736,132737],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[36,132739,132740],{"className":128180,"code":132646,"language":128182,"meta":41,"style":41},[43,132741,132742,132748,132758,132762,132768,132778],{"__ignoreMap":41},[46,132743,132744,132746],{"class":48,"line":49},[46,132745,132653],{"class":169},[46,132747,17573],{"class":56},[46,132749,132750,132752,132754,132756],{"class":48,"line":60},[46,132751,132660],{"class":180},[46,132753,53404],{"class":56},[46,132755,108],{"class":180},[46,132757,3345],{"class":56},[46,132759,132760],{"class":48,"line":200},[46,132761,3616],{"class":56},[46,132763,132764,132766],{"class":48,"line":211},[46,132765,132675],{"class":169},[46,132767,17573],{"class":56},[46,132769,132770,132772,132774,132776],{"class":48,"line":222},[46,132771,132660],{"class":180},[46,132773,53404],{"class":56},[46,132775,74487],{"class":180},[46,132777,3345],{"class":56},[46,132779,132780],{"class":48,"line":636},[46,132781,3616],{"class":56},[19,132783,132784],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[19,132786,132787],{},"优点： 通俗易懂，书写方便",[19,132789,132790],{},"缺点： 添加许多无意义的标签，结构化较差",[19,132792,132793],{},"注意： 要求这个新的空标签必须是块级元素。",[19,132795,132796],{},"法二",[19,132798,132799],{},"父级添加overflow属性",[36,132801,132802],{"className":128180,"code":132646,"language":128182,"meta":41,"style":41},[43,132803,132804,132810,132820,132824,132830,132840],{"__ignoreMap":41},[46,132805,132806,132808],{"class":48,"line":49},[46,132807,132653],{"class":169},[46,132809,17573],{"class":56},[46,132811,132812,132814,132816,132818],{"class":48,"line":60},[46,132813,132660],{"class":180},[46,132815,53404],{"class":56},[46,132817,108],{"class":180},[46,132819,3345],{"class":56},[46,132821,132822],{"class":48,"line":200},[46,132823,3616],{"class":56},[46,132825,132826,132828],{"class":48,"line":211},[46,132827,132675],{"class":169},[46,132829,17573],{"class":56},[46,132831,132832,132834,132836,132838],{"class":48,"line":222},[46,132833,132660],{"class":180},[46,132835,53404],{"class":56},[46,132837,74487],{"class":180},[46,132839,3345],{"class":56},[46,132841,132842],{"class":48,"line":636},[46,132843,3616],{"class":56},[19,132845,132846],{},"overflow: hidden;",[19,132848,132849],{},"优点：代码简洁",[19,132851,132852],{},"缺点：无法显示溢出的部分",[19,132854,132855],{},"注意：是给父元素添加代码",[19,132857,132858],{},"法三",[19,132860,132861],{},"父级添加after伪元素",[19,132863,132864,132867],{},[132865,132866],"after",{}," 方式是额外标签法的升级版",[19,132869,132870],{},"使用的时候复制就可以",[36,132872,132873],{"className":128180,"code":132646,"language":128182,"meta":41,"style":41},[43,132874,132875,132881,132891,132895,132901,132911],{"__ignoreMap":41},[46,132876,132877,132879],{"class":48,"line":49},[46,132878,132653],{"class":169},[46,132880,17573],{"class":56},[46,132882,132883,132885,132887,132889],{"class":48,"line":60},[46,132884,132660],{"class":180},[46,132886,53404],{"class":56},[46,132888,108],{"class":180},[46,132890,3345],{"class":56},[46,132892,132893],{"class":48,"line":200},[46,132894,3616],{"class":56},[46,132896,132897,132899],{"class":48,"line":211},[46,132898,132675],{"class":169},[46,132900,17573],{"class":56},[46,132902,132903,132905,132907,132909],{"class":48,"line":222},[46,132904,132660],{"class":180},[46,132906,53404],{"class":56},[46,132908,74487],{"class":180},[46,132910,3345],{"class":56},[46,132912,132913],{"class":48,"line":636},[46,132914,3616],{"class":56},[19,132916,132917],{},"优点：没有增加标签，结构更简单",[19,132919,132920],{},"缺点：照顾低版本浏览器",[19,132922,132923],{},"代表网站： 百度、淘宝网、网易等",[19,132925,132926],{},"法四",[19,132928,132929],{},"父级添加双伪元素",[36,132931,132932],{"className":128180,"code":132646,"language":128182,"meta":41,"style":41},[43,132933,132934,132940,132950,132954,132960,132970],{"__ignoreMap":41},[46,132935,132936,132938],{"class":48,"line":49},[46,132937,132653],{"class":169},[46,132939,17573],{"class":56},[46,132941,132942,132944,132946,132948],{"class":48,"line":60},[46,132943,132660],{"class":180},[46,132945,53404],{"class":56},[46,132947,108],{"class":180},[46,132949,3345],{"class":56},[46,132951,132952],{"class":48,"line":200},[46,132953,3616],{"class":56},[46,132955,132956,132958],{"class":48,"line":211},[46,132957,132675],{"class":169},[46,132959,17573],{"class":56},[46,132961,132962,132964,132966,132968],{"class":48,"line":222},[46,132963,132660],{"class":180},[46,132965,53404],{"class":56},[46,132967,74487],{"class":180},[46,132969,3345],{"class":56},[46,132971,132972],{"class":48,"line":636},[46,132973,3616],{"class":56},[19,132975,132976],{},"优点：代码更简洁",[19,132978,132920],{},[19,132980,132981],{},"代表网站：小米、腾讯等",[14,132983,132985],{"id":132984},"_93-ps切图","9.3 PS切图",[479,132987,132989],{"id":132988},"_931-常见图片格式","9.3.1 常见图片格式",[97,132991,132992,133002],{},[100,132993,132994],{},[103,132995,132996,132999],{},[106,132997,132998],{"align":108},"jpg图像格式",[106,133000,133001],{"align":108},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[120,133003,133004,133012,133020],{},[103,133005,133006,133009],{},[125,133007,133008],{"align":108},"gif图像格式",[125,133010,133011],{"align":108},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[103,133013,133014,133017],{},[125,133015,133016],{"align":108},"png图像格式",[125,133018,133019],{"align":108},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[103,133021,133022,133025],{},[125,133023,133024],{"align":108},"PSD图像格式",[125,133026,133027],{"align":108},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[479,133029,133031],{"id":133030},"_932-图层切图","9.3.2 图层切图",[19,133033,133034],{},"最简单的切图方式：右击图层 → 导出 → 切片",[19,133036,133037],{},"按住shift选中两个图层->图层菜单->合并图层",[479,133039,133041],{"id":133040},"_933-切片切图","9.3.3 切片切图",[3191,133043,133044,133047],{},[26,133045,133046],{},"利用切片工具手动划出",[26,133048,133049],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[479,133051,133053],{"id":133052},"_934-切图步骤","9.3.4 切图步骤",[19,133055,133056],{},"用切片工具选中：",[3514,133058],{"style":128036,"src":133059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[19,133061,133062],{},"文件 -> 导出",[3514,133064],{"style":128036,"src":133065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[2098,133067,133068],{},"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":41,"searchDepth":60,"depth":60,"links":133070},[133071,133080,133084],{"id":131507,"depth":60,"text":131508,"children":133072},[133073,133074,133075,133076,133077,133078,133079],{"id":131532,"depth":200,"text":131533},{"id":131823,"depth":200,"text":131824},{"id":131952,"depth":200,"text":131953},{"id":132152,"depth":200,"text":132153},{"id":132194,"depth":200,"text":132195},{"id":132232,"depth":200,"text":132233},{"id":132322,"depth":200,"text":132323},{"id":132602,"depth":60,"text":132603,"children":133081},[133082,133083],{"id":132606,"depth":200,"text":132607},{"id":132613,"depth":200,"text":132614},{"id":132984,"depth":60,"text":132985,"children":133085},[133086,133087,133088,133089],{"id":132988,"depth":200,"text":132989},{"id":133030,"depth":200,"text":133031},{"id":133040,"depth":200,"text":133041},{"id":133052,"depth":200,"text":133053},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":131499,"description":25378},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":133096,"title":133097,"body":133098,"description":25378,"extension":2125,"meta":133739,"navigation":615,"path":133740,"seo":133741,"stem":133742,"__hash__":133743},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":133099,"toc":133727},[133100,133103,133107,133133,133167,133171,133175,133178,133220,133227,133237,133245,133247,133250,133253,133256,133263,133277,133281,133284,133313,133317,133320,133334,133338,133341,133369,133373,133376,133402,133406,133411,133444,133449,133477,133481,133498,133544,133549,133593,133610,133717,133725],[10,133101,133097],{"id":133102},"_10-css规范与学成在线案例",[14,133104,133106],{"id":133105},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[23,133108,133109,133115,133121,133127],{},[26,133110,133111,133114],{},[2339,133112,133113],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[26,133116,133117,133120],{},[2339,133118,133119],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[26,133122,133123,133126],{},[2339,133124,133125],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[26,133128,133129,133132],{},[2339,133130,133131],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[36,133134,133135],{"className":128180,"code":131544,"language":128182,"meta":41,"style":41},[43,133136,133137,133141,133147,133163],{"__ignoreMap":41},[46,133138,133139],{"class":48,"line":49},[46,133140,131551],{"class":2253},[46,133142,133143,133145],{"class":48,"line":60},[46,133144,53578],{"class":1361},[46,133146,17573],{"class":56},[46,133148,133149,133151,133153,133155,133157,133159,133161],{"class":48,"line":200},[46,133150,72861],{"class":180},[46,133152,53404],{"class":56},[46,133154,2405],{"class":180},[46,133156,53459],{"class":52},[46,133158,53488],{"class":180},[46,133160,131572],{"class":180},[46,133162,3345],{"class":56},[46,133164,133165],{"class":48,"line":211},[46,133166,3616],{"class":56},[14,133168,133170],{"id":133169},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[479,133172,133174],{"id":133173},"_1021-header头部制作","10.2.1 header头部制作",[3514,133176],{"style":128036,"src":133177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[3191,133179,133180,133187,133194,133200,133207,133214],{},[26,133181,133182,133183,133186],{},"1号是版心盒子 ",[2339,133184,133185],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[26,133188,133189,133190,133193],{},"版心盒子 里面包含 2号盒子 ",[2339,133191,133192],{},"logo"," 图标",[26,133195,133196,133197,133199],{},"版心盒子 里面包含 3号盒子 ",[2339,133198,55678],{}," 导航栏",[26,133201,133202,133203,133206],{},"版心盒子 里面包含 4号盒子 ",[2339,133204,133205],{},"search"," 搜索框",[26,133208,133209,133210,133213],{},"版心盒子 里面包含 5号盒子 ",[2339,133211,133212],{},"user"," 个人信息",[26,133215,133216,133217],{},"注意，要求里面的 ",[2339,133218,133219],{},"4个子盒子 必须都浮动",[23,133221,133222],{},[26,133223,133224],{},[2339,133225,133226],{},"导航栏注意点:",[19,133228,133229,133230,133233,133234],{},"实际开发中， ",[2339,133231,133232],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[2339,133235,133236],{},"用 li 包含链接(li+a)的做法",[3191,133238,133239,133242],{},[26,133240,133241],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[26,133243,133244],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[19,133246,11029],{},[19,133248,133249],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[19,133251,133252],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[19,133254,133255],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[23,133257,133258],{"start":60},[26,133259,133260],{},[2339,133261,133262],{},"4号盒子search的细节：",[3191,133264,133265,133268,133271],{},[26,133266,133267],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[26,133269,133270],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[26,133272,133273,133276],{},[43,133274,133275],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[479,133278,133280],{"id":133279},"_1022-banner制作","10.2.2 banner制作",[3514,133282],{"style":128036,"src":133283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[3191,133285,133286,133293,133299,133306],{},[26,133287,133288,133289,133292],{},"1号盒子是通栏的大盒子 ",[2339,133290,133291],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[26,133294,133295,133296,133298],{},"2号盒子是版心 ",[2339,133297,2981],{}," ， 要水平居中对齐",[26,133300,133301,133302,133305],{},"3号盒子版心内，左对齐 ",[2339,133303,133304],{},"subnav"," 侧导航栏",[26,133307,133308,133309,133312],{},"4号盒子版心内，右对齐 ",[2339,133310,133311],{},"course"," 课程",[479,133314,133316],{"id":133315},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[3514,133318],{"style":128036,"src":133319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[3191,133321,133322,133325,133328,133331],{},[26,133323,133324],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[26,133326,133327],{},"1号盒子是标题 H3 左侧浮动",[26,133329,133330],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[26,133332,133333],{},"3号盒子 右浮动 mod 修改",[479,133335,133337],{"id":133336},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[3514,133339],{"style":128036,"src":133340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[3191,133342,133343,133349,133356,133363,133366],{},[26,133344,133345,133346,133348],{},"1号盒子为最大的盒子 ",[2339,133347,55679],{}," 版心水平居中对齐",[26,133350,133351,133352,133355],{},"2号盒子为上面部分 ",[2339,133353,133354],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[26,133357,133358,133359,133362],{},"3号盒子为底下部分 ",[2339,133360,133361],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[26,133364,133365],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[26,133367,133368],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[479,133370,133372],{"id":133371},"_1025-底部模块制作","10.2.5 底部模块制作",[3514,133374],{"style":128036,"src":133375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[3191,133377,133378,133385,133388,133395],{},[26,133379,133380,133381,133384],{},"1号盒子通栏大盒子 底部 ",[2339,133382,133383],{},"footer"," 给高度 底色是白色",[26,133386,133387],{},"2号盒子版心水平居中",[26,133389,133390,133391,133394],{},"3号盒子版权 ",[2339,133392,133393],{},"copyright"," 左对齐",[26,133396,133397,133398,133401],{},"4号盒子 链接组 ",[2339,133399,133400],{},"links"," 右对齐",[479,133403,133405],{"id":133404},"_1026-代码模块","10.2.6 代码模块",[23,133407,133408],{},[26,133409,133410],{},"html部分",[36,133412,133414],{"className":128927,"code":133413,"language":128929,"meta":41,"style":41},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[43,133415,133416],{"__ignoreMap":41},[46,133417,133418,133420,133422,133424,133426,133429,133432,133434,133437,133440,133442],{"class":48,"line":49},[46,133419,821],{"class":56},[46,133421,2426],{"class":1361},[46,133423,63022],{"class":169},[46,133425,79],{"class":56},[46,133427,133428],{"class":173},"\"https:\u002F\u002Fexample.com\"",[46,133430,133431],{"class":169}," target",[46,133433,79],{"class":56},[46,133435,133436],{"class":173},"\"_blank\"",[46,133438,133439],{"class":56},">链接文字\u003C\u002F",[46,133441,2426],{"class":1361},[46,133443,53274],{"class":56},[23,133445,133446],{"start":60},[26,133447,133448],{},"css部分",[36,133450,133451],{"className":128927,"code":133413,"language":128929,"meta":41,"style":41},[43,133452,133453],{"__ignoreMap":41},[46,133454,133455,133457,133459,133461,133463,133465,133467,133469,133471,133473,133475],{"class":48,"line":49},[46,133456,821],{"class":56},[46,133458,2426],{"class":1361},[46,133460,63022],{"class":169},[46,133462,79],{"class":56},[46,133464,133428],{"class":173},[46,133466,133431],{"class":169},[46,133468,79],{"class":56},[46,133470,133436],{"class":173},[46,133472,133439],{"class":56},[46,133474,2426],{"class":1361},[46,133476,53274],{"class":56},[479,133478,133480],{"id":133479},"_1027-收获","10.2.7 收获",[23,133482,133483,133486,133489,133492,133495],{},[26,133484,133485],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[26,133487,133488],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[26,133490,133491],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[26,133493,133494],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[26,133496,133497],{},"遗忘代码",[36,133499,133501],{"className":128180,"code":133500,"language":128182,"meta":41,"style":41},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[43,133502,133503,133525,133530,133540],{"__ignoreMap":41},[46,133504,133505,133507,133509,133511,133513,133515,133517,133519,133521,133523],{"class":48,"line":49},[46,133506,53578],{"class":1361},[46,133508,448],{"class":56},[46,133510,19],{"class":1361},[46,133512,448],{"class":56},[46,133514,10],{"class":1361},[46,133516,448],{"class":56},[46,133518,3191],{"class":1361},[46,133520,448],{"class":56},[46,133522,26],{"class":1361},[46,133524,17573],{"class":56},[46,133526,133527],{"class":48,"line":60},[46,133528,133529],{"class":2253},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[46,133531,133532,133534,133536,133538],{"class":48,"line":200},[46,133533,129796],{"class":180},[46,133535,53404],{"class":56},[46,133537,62834],{"class":180},[46,133539,3345],{"class":56},[46,133541,133542],{"class":48,"line":211},[46,133543,3616],{"class":56},[23,133545,133546],{"start":636},[26,133547,133548],{},"html引css的程序",[36,133550,133551],{"className":128180,"code":133500,"language":128182,"meta":41,"style":41},[43,133552,133553,133575,133579,133589],{"__ignoreMap":41},[46,133554,133555,133557,133559,133561,133563,133565,133567,133569,133571,133573],{"class":48,"line":49},[46,133556,53578],{"class":1361},[46,133558,448],{"class":56},[46,133560,19],{"class":1361},[46,133562,448],{"class":56},[46,133564,10],{"class":1361},[46,133566,448],{"class":56},[46,133568,3191],{"class":1361},[46,133570,448],{"class":56},[46,133572,26],{"class":1361},[46,133574,17573],{"class":56},[46,133576,133577],{"class":48,"line":60},[46,133578,133529],{"class":2253},[46,133580,133581,133583,133585,133587],{"class":48,"line":200},[46,133582,129796],{"class":180},[46,133584,53404],{"class":56},[46,133586,62834],{"class":180},[46,133588,3345],{"class":56},[46,133590,133591],{"class":48,"line":211},[46,133592,3616],{"class":56},[23,133594,133595,133598,133601,133604,133607],{"start":641},[26,133596,133597],{},"浮动的盒子不会有外边距合并问题",[26,133599,133600],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[26,133602,133603],{},"ctrl+g快速定位行；shift+alt多个光标",[26,133605,133606],{},"学习上方各个模块的选择器起名方法，以后就这样用",[26,133608,133609],{},"在写选择器时尽量写全一些，例如",[36,133611,133613],{"className":128180,"code":133612,"language":128182,"meta":41,"style":41},"\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",[43,133614,133615,133620,133636,133641,133656,133661,133676,133681,133696,133701],{"__ignoreMap":41},[46,133616,133617],{"class":48,"line":49},[46,133618,133619],{"class":2253},"\u002F* 静态定位（默认） *\u002F\n",[46,133621,133622,133625,133627,133629,133631,133634],{"class":48,"line":60},[46,133623,133624],{"class":169},".static",[46,133626,81772],{"class":56},[46,133628,130540],{"class":180},[46,133630,53404],{"class":56},[46,133632,133633],{"class":180},"static",[46,133635,131110],{"class":56},[46,133637,133638],{"class":48,"line":200},[46,133639,133640],{"class":2253},"\u002F* 相对定位 *\u002F\n",[46,133642,133643,133646,133648,133650,133652,133654],{"class":48,"line":211},[46,133644,133645],{"class":169},".relative",[46,133647,81772],{"class":56},[46,133649,130540],{"class":180},[46,133651,53404],{"class":56},[46,133653,56729],{"class":180},[46,133655,131110],{"class":56},[46,133657,133658],{"class":48,"line":222},[46,133659,133660],{"class":2253},"\u002F* 绝对定位 *\u002F\n",[46,133662,133663,133666,133668,133670,133672,133674],{"class":48,"line":636},[46,133664,133665],{"class":169},".absolute",[46,133667,81772],{"class":56},[46,133669,130540],{"class":180},[46,133671,53404],{"class":56},[46,133673,56796],{"class":180},[46,133675,131110],{"class":56},[46,133677,133678],{"class":48,"line":641},[46,133679,133680],{"class":2253},"\u002F* 固定定位 *\u002F\n",[46,133682,133683,133686,133688,133690,133692,133694],{"class":48,"line":653},[46,133684,133685],{"class":169},".fixed",[46,133687,81772],{"class":56},[46,133689,130540],{"class":180},[46,133691,53404],{"class":56},[46,133693,88196],{"class":180},[46,133695,131110],{"class":56},[46,133697,133698],{"class":48,"line":659},[46,133699,133700],{"class":2253},"\u002F* 粘性定位 *\u002F\n",[46,133702,133703,133706,133708,133710,133712,133715],{"class":48,"line":665},[46,133704,133705],{"class":169},".sticky",[46,133707,81772],{"class":56},[46,133709,130540],{"class":180},[46,133711,53404],{"class":56},[46,133713,133714],{"class":180},"sticky",[46,133716,131110],{"class":56},[23,133718,133719,133722],{"start":676},[26,133720,133721],{},"一定要用好注释",[26,133723,133724],{},"浮动的盒子不会有外边距合并的问题",[2098,133726,133068],{},{"title":41,"searchDepth":60,"depth":60,"links":133728},[133729,133730],{"id":133105,"depth":60,"text":133106},{"id":133169,"depth":60,"text":133170,"children":133731},[133732,133733,133734,133735,133736,133737,133738],{"id":133173,"depth":200,"text":133174},{"id":133279,"depth":200,"text":133280},{"id":133315,"depth":200,"text":133316},{"id":133336,"depth":200,"text":133337},{"id":133371,"depth":200,"text":133372},{"id":133404,"depth":200,"text":133405},{"id":133479,"depth":200,"text":133480},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":133097,"description":25378},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":133745,"title":133746,"body":133747,"description":25378,"extension":2125,"meta":135233,"navigation":615,"path":135234,"seo":135235,"stem":135236,"__hash__":135237},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":133748,"toc":135225},[133749,133752,133756,133760,133771,133775,133792,133836,133869,133872,133889,133892,133895,133939,133943,133947,133950,133953,133957,133960,133971,134034,134075,134078,134093,134147,134155,134158,134169,134223,134249,134252,134265,134319,134351,134405,134428,134482,134485,134488,134495,134549,134570,134624,134627,134630,134715,134723,134780,134803,134807,134810,134828,134832,134851,134905,134943,134947,134950,134953,134975,134979,134987,134990,134995,135006,135009,135013,135027,135071,135074,135078,135081,135086,135112,135117,135194,135197,135201,135204,135207,135210,135213,135216,135219,135222],[10,133750,133746],{"id":133751},"_11-传统布局与定位体系",[14,133753,133755],{"id":133754},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[479,133757,133759],{"id":133758},"_1111-普通流标准流","11.1.1 普通流（标准流）",[3191,133761,133762,133765,133768],{},[26,133763,133764],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[26,133766,133767],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[26,133769,133770],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[479,133772,133774],{"id":133773},"_1112-浮动","11.1.2 浮动",[3191,133776,133777,133780,133783,133786,133789],{},[26,133778,133779],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[26,133781,133782],{},"浮动可以改变元素标签默认的排列方式",[26,133784,133785],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[26,133787,133788],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[26,133790,133791],{},"在使用行内块转换时盒子之间是有空隙的",[36,133793,133794],{"className":128180,"code":132646,"language":128182,"meta":41,"style":41},[43,133795,133796,133802,133812,133816,133822,133832],{"__ignoreMap":41},[46,133797,133798,133800],{"class":48,"line":49},[46,133799,132653],{"class":169},[46,133801,17573],{"class":56},[46,133803,133804,133806,133808,133810],{"class":48,"line":60},[46,133805,132660],{"class":180},[46,133807,53404],{"class":56},[46,133809,108],{"class":180},[46,133811,3345],{"class":56},[46,133813,133814],{"class":48,"line":200},[46,133815,3616],{"class":56},[46,133817,133818,133820],{"class":48,"line":211},[46,133819,132675],{"class":169},[46,133821,17573],{"class":56},[46,133823,133824,133826,133828,133830],{"class":48,"line":222},[46,133825,132660],{"class":180},[46,133827,53404],{"class":56},[46,133829,74487],{"class":180},[46,133831,3345],{"class":56},[46,133833,133834],{"class":48,"line":636},[46,133835,3616],{"class":56},[97,133837,133838,133846],{},[100,133839,133840],{},[103,133841,133842,133844],{},[106,133843,128644],{"align":108},[106,133845,29478],{"align":108},[120,133847,133848,133855,133862],{},[103,133849,133850,133852],{},[125,133851,56702],{"align":108},[125,133853,133854],{"align":108},"元素不浮动（默认值）",[103,133856,133857,133859],{},[125,133858,108],{"align":108},[125,133860,133861],{"align":108},"元素向左浮动",[103,133863,133864,133866],{},[125,133865,74487],{"align":108},[125,133867,133868],{"align":108},"元素向右浮动",[19,133870,133871],{},"浮动重点：",[3191,133873,133874,133877,133880,133883,133886],{},[26,133875,133876],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[26,133878,133879],{},"浮动的元素会一行内显示并且元素顶部对齐",[26,133881,133882],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[26,133884,133885],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[26,133887,133888],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[19,133890,133891],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[19,133893,133894],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[36,133896,133897],{"className":128180,"code":132646,"language":128182,"meta":41,"style":41},[43,133898,133899,133905,133915,133919,133925,133935],{"__ignoreMap":41},[46,133900,133901,133903],{"class":48,"line":49},[46,133902,132653],{"class":169},[46,133904,17573],{"class":56},[46,133906,133907,133909,133911,133913],{"class":48,"line":60},[46,133908,132660],{"class":180},[46,133910,53404],{"class":56},[46,133912,108],{"class":180},[46,133914,3345],{"class":56},[46,133916,133917],{"class":48,"line":200},[46,133918,3616],{"class":56},[46,133920,133921,133923],{"class":48,"line":211},[46,133922,132675],{"class":169},[46,133924,17573],{"class":56},[46,133926,133927,133929,133931,133933],{"class":48,"line":222},[46,133928,132660],{"class":180},[46,133930,53404],{"class":56},[46,133932,74487],{"class":180},[46,133934,3345],{"class":56},[46,133936,133937],{"class":48,"line":636},[46,133938,3616],{"class":56},[479,133940,133942],{"id":133941},"_1113-定位","11.1.3 定位",[23999,133944,133946],{"id":133945},"_11131-使用场景","11.1.3.1 使用场景",[19,133948,133949],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[19,133951,133952],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[23999,133954,133956],{"id":133955},"_11132-定位组成","11.1.3.2 定位组成",[19,133958,133959],{},"定位 = 定位模式 + 边偏移",[23,133961,133962],{},[26,133963,133964,133967,133968],{},[2339,133965,133966],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[2339,133969,133970],{},"定位模式",[36,133972,133974],{"className":128180,"code":133973,"language":128182,"meta":41,"style":41},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[43,133975,133976,133982,133996,134013,134030],{"__ignoreMap":41},[46,133977,133978,133980],{"class":48,"line":49},[46,133979,132028],{"class":169},[46,133981,17573],{"class":56},[46,133983,133984,133987,133989,133991,133993],{"class":48,"line":60},[46,133985,133986],{"class":180},"  position",[46,133988,53404],{"class":56},[46,133990,56729],{"class":180},[46,133992,132043],{"class":56},[46,133994,133995],{"class":2253},"\u002F* 定位模式 *\u002F\n",[46,133997,133998,134001,134003,134005,134007,134010],{"class":48,"line":200},[46,133999,134000],{"class":180},"  top",[46,134002,53404],{"class":56},[46,134004,2633],{"class":180},[46,134006,53459],{"class":52},[46,134008,134009],{"class":56},";           ",[46,134011,134012],{"class":2253},"\u002F* 边偏移：上 *\u002F\n",[46,134014,134015,134018,134020,134022,134024,134027],{"class":48,"line":211},[46,134016,134017],{"class":180},"  left",[46,134019,53404],{"class":56},[46,134021,2886],{"class":180},[46,134023,53459],{"class":52},[46,134025,134026],{"class":56},";          ",[46,134028,134029],{"class":2253},"\u002F* 边偏移：左 *\u002F\n",[46,134031,134032],{"class":48,"line":222},[46,134033,3616],{"class":56},[97,134035,134036,134045],{},[100,134037,134038],{},[103,134039,134040,134042],{},[106,134041,2342],{"align":108},[106,134043,134044],{"align":108},"语义",[120,134046,134047,134054,134061,134068],{},[103,134048,134049,134051],{},[125,134050,133633],{"align":108},[125,134052,134053],{"align":108},"静态定位",[103,134055,134056,134058],{},[125,134057,56729],{"align":108},[125,134059,134060],{"align":108},"相对定位",[103,134062,134063,134065],{},[125,134064,56796],{"align":108},[125,134066,134067],{"align":108},"绝对定位",[103,134069,134070,134072],{},[125,134071,88196],{"align":108},[125,134073,134074],{"align":108},"固定定位",[19,134076,134077],{},"（1）静态定位：",[3191,134079,134080,134091],{},[26,134081,134082,134083,134086,134087,134090],{},"静态定位是元素的 ",[2339,134084,134085],{},"默认定位方式"," ， ",[2339,134088,134089],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[26,134092,7197],{},[36,134094,134095],{"className":128180,"code":133973,"language":128182,"meta":41,"style":41},[43,134096,134097,134103,134115,134129,134143],{"__ignoreMap":41},[46,134098,134099,134101],{"class":48,"line":49},[46,134100,132028],{"class":169},[46,134102,17573],{"class":56},[46,134104,134105,134107,134109,134111,134113],{"class":48,"line":60},[46,134106,133986],{"class":180},[46,134108,53404],{"class":56},[46,134110,56729],{"class":180},[46,134112,132043],{"class":56},[46,134114,133995],{"class":2253},[46,134116,134117,134119,134121,134123,134125,134127],{"class":48,"line":200},[46,134118,134000],{"class":180},[46,134120,53404],{"class":56},[46,134122,2633],{"class":180},[46,134124,53459],{"class":52},[46,134126,134009],{"class":56},[46,134128,134012],{"class":2253},[46,134130,134131,134133,134135,134137,134139,134141],{"class":48,"line":211},[46,134132,134017],{"class":180},[46,134134,53404],{"class":56},[46,134136,2886],{"class":180},[46,134138,53459],{"class":52},[46,134140,134026],{"class":56},[46,134142,134029],{"class":2253},[46,134144,134145],{"class":48,"line":222},[46,134146,3616],{"class":56},[3191,134148,134149,134152],{},[26,134150,134151],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[26,134153,134154],{},"静态定位在布局时我们几乎不用的",[19,134156,134157],{},"（2）相对定位",[3191,134159,134160,134167],{},[26,134161,134162,134163,134166],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[2339,134164,134165],{},"原来的位置"," 来说的（自恋型）",[26,134168,7197],{},[36,134170,134171],{"className":128180,"code":133973,"language":128182,"meta":41,"style":41},[43,134172,134173,134179,134191,134205,134219],{"__ignoreMap":41},[46,134174,134175,134177],{"class":48,"line":49},[46,134176,132028],{"class":169},[46,134178,17573],{"class":56},[46,134180,134181,134183,134185,134187,134189],{"class":48,"line":60},[46,134182,133986],{"class":180},[46,134184,53404],{"class":56},[46,134186,56729],{"class":180},[46,134188,132043],{"class":56},[46,134190,133995],{"class":2253},[46,134192,134193,134195,134197,134199,134201,134203],{"class":48,"line":200},[46,134194,134000],{"class":180},[46,134196,53404],{"class":56},[46,134198,2633],{"class":180},[46,134200,53459],{"class":52},[46,134202,134009],{"class":56},[46,134204,134012],{"class":2253},[46,134206,134207,134209,134211,134213,134215,134217],{"class":48,"line":211},[46,134208,134017],{"class":180},[46,134210,53404],{"class":56},[46,134212,2886],{"class":180},[46,134214,53459],{"class":52},[46,134216,134026],{"class":56},[46,134218,134029],{"class":2253},[46,134220,134221],{"class":48,"line":222},[46,134222,3616],{"class":56},[3191,134224,134225],{},[26,134226,134227,134228,134230,134231,134233,134234,134237,134238,134241,134242,134244,134245,134248],{},"相对定位的特点：",[55681,134229],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[55681,134232],{},"  ② ",[2339,134235,134236],{},"原来"," 在标准流的 ",[2339,134239,134240],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[55681,134243],{},"  ③因此， ",[2339,134246,134247],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[19,134250,134251],{},"（3）绝对定位",[3191,134253,134254,134263],{},[26,134255,134256,134258,134259,134262],{},[2339,134257,134067],{}," 是元素在移动位置的时候，是相对于它 ",[2339,134260,134261],{},"祖先元素"," 来说的（拼爹型）",[26,134264,7197],{},[36,134266,134267],{"className":128180,"code":133973,"language":128182,"meta":41,"style":41},[43,134268,134269,134275,134287,134301,134315],{"__ignoreMap":41},[46,134270,134271,134273],{"class":48,"line":49},[46,134272,132028],{"class":169},[46,134274,17573],{"class":56},[46,134276,134277,134279,134281,134283,134285],{"class":48,"line":60},[46,134278,133986],{"class":180},[46,134280,53404],{"class":56},[46,134282,56729],{"class":180},[46,134284,132043],{"class":56},[46,134286,133995],{"class":2253},[46,134288,134289,134291,134293,134295,134297,134299],{"class":48,"line":200},[46,134290,134000],{"class":180},[46,134292,53404],{"class":56},[46,134294,2633],{"class":180},[46,134296,53459],{"class":52},[46,134298,134009],{"class":56},[46,134300,134012],{"class":2253},[46,134302,134303,134305,134307,134309,134311,134313],{"class":48,"line":211},[46,134304,134017],{"class":180},[46,134306,53404],{"class":56},[46,134308,2886],{"class":180},[46,134310,53459],{"class":52},[46,134312,134026],{"class":56},[46,134314,134029],{"class":2253},[46,134316,134317],{"class":48,"line":222},[46,134318,3616],{"class":56},[3191,134320,134321,134336,134345,134348],{},[26,134322,134323,134324,134326,134327,134329,134330,134332,134333,134335],{},"绝对定位的特点：",[55681,134325],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[55681,134328],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[55681,134331],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[55681,134334],{},"  (4)固定定位",[26,134337,134338,134340,134341,134344],{},[2339,134339,134074],{}," 是元素 ",[2339,134342,134343],{},"固定于浏览器可视区的位置"," 。（认死理型）",[26,134346,134347],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[26,134349,134350],{},"语法:",[36,134352,134353],{"className":128180,"code":133973,"language":128182,"meta":41,"style":41},[43,134354,134355,134361,134373,134387,134401],{"__ignoreMap":41},[46,134356,134357,134359],{"class":48,"line":49},[46,134358,132028],{"class":169},[46,134360,17573],{"class":56},[46,134362,134363,134365,134367,134369,134371],{"class":48,"line":60},[46,134364,133986],{"class":180},[46,134366,53404],{"class":56},[46,134368,56729],{"class":180},[46,134370,132043],{"class":56},[46,134372,133995],{"class":2253},[46,134374,134375,134377,134379,134381,134383,134385],{"class":48,"line":200},[46,134376,134000],{"class":180},[46,134378,53404],{"class":56},[46,134380,2633],{"class":180},[46,134382,53459],{"class":52},[46,134384,134009],{"class":56},[46,134386,134012],{"class":2253},[46,134388,134389,134391,134393,134395,134397,134399],{"class":48,"line":211},[46,134390,134017],{"class":180},[46,134392,53404],{"class":56},[46,134394,2886],{"class":180},[46,134396,53459],{"class":52},[46,134398,134026],{"class":56},[46,134400,134029],{"class":2253},[46,134402,134403],{"class":48,"line":222},[46,134404,3616],{"class":56},[3191,134406,134407,134416],{},[26,134408,134409,134410,134412,134413,134415],{},"特点:",[55681,134411],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[55681,134414],{},"  ②固定定位不再占有原先的位置,完全脱标",[26,134417,134418,134419,134421,134422,134424,134425,134427],{},"固定在版心位置的方法:",[55681,134420],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[55681,134423],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[55681,134426],{},"  实例：",[36,134429,134430],{"className":128180,"code":133973,"language":128182,"meta":41,"style":41},[43,134431,134432,134438,134450,134464,134478],{"__ignoreMap":41},[46,134433,134434,134436],{"class":48,"line":49},[46,134435,132028],{"class":169},[46,134437,17573],{"class":56},[46,134439,134440,134442,134444,134446,134448],{"class":48,"line":60},[46,134441,133986],{"class":180},[46,134443,53404],{"class":56},[46,134445,56729],{"class":180},[46,134447,132043],{"class":56},[46,134449,133995],{"class":2253},[46,134451,134452,134454,134456,134458,134460,134462],{"class":48,"line":200},[46,134453,134000],{"class":180},[46,134455,53404],{"class":56},[46,134457,2633],{"class":180},[46,134459,53459],{"class":52},[46,134461,134009],{"class":56},[46,134463,134012],{"class":2253},[46,134465,134466,134468,134470,134472,134474,134476],{"class":48,"line":211},[46,134467,134017],{"class":180},[46,134469,53404],{"class":56},[46,134471,2886],{"class":180},[46,134473,53459],{"class":52},[46,134475,134026],{"class":56},[46,134477,134029],{"class":2253},[46,134479,134480],{"class":48,"line":222},[46,134481,3616],{"class":56},[3514,134483],{"style":128036,"src":134484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[19,134486,134487],{},"(5)粘性定位",[3191,134489,134490,134493],{},[26,134491,134492],{},"粘性定位可以被认为是相对定位和固定定位的混合",[26,134494,7197],{},[36,134496,134497],{"className":128180,"code":133973,"language":128182,"meta":41,"style":41},[43,134498,134499,134505,134517,134531,134545],{"__ignoreMap":41},[46,134500,134501,134503],{"class":48,"line":49},[46,134502,132028],{"class":169},[46,134504,17573],{"class":56},[46,134506,134507,134509,134511,134513,134515],{"class":48,"line":60},[46,134508,133986],{"class":180},[46,134510,53404],{"class":56},[46,134512,56729],{"class":180},[46,134514,132043],{"class":56},[46,134516,133995],{"class":2253},[46,134518,134519,134521,134523,134525,134527,134529],{"class":48,"line":200},[46,134520,134000],{"class":180},[46,134522,53404],{"class":56},[46,134524,2633],{"class":180},[46,134526,53459],{"class":52},[46,134528,134009],{"class":56},[46,134530,134012],{"class":2253},[46,134532,134533,134535,134537,134539,134541,134543],{"class":48,"line":211},[46,134534,134017],{"class":180},[46,134536,53404],{"class":56},[46,134538,2886],{"class":180},[46,134540,53459],{"class":52},[46,134542,134026],{"class":56},[46,134544,134029],{"class":2253},[46,134546,134547],{"class":48,"line":222},[46,134548,3616],{"class":56},[3191,134550,134551],{},[26,134552,134553,134554,134556,134557,134559,134560,134562,134563,134566,134567,134569],{},"粘性定位的特点：",[55681,134555],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[55681,134558],{},"  ②粘性定位占有原先的位置（相对定位特点）",[55681,134561],{},"  ③必须添加 top 、left、right、bottom ",[2339,134564,134565],{},"其中一个"," 才有效",[55681,134568],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[36,134571,134572],{"className":128180,"code":133973,"language":128182,"meta":41,"style":41},[43,134573,134574,134580,134592,134606,134620],{"__ignoreMap":41},[46,134575,134576,134578],{"class":48,"line":49},[46,134577,132028],{"class":169},[46,134579,17573],{"class":56},[46,134581,134582,134584,134586,134588,134590],{"class":48,"line":60},[46,134583,133986],{"class":180},[46,134585,53404],{"class":56},[46,134587,56729],{"class":180},[46,134589,132043],{"class":56},[46,134591,133995],{"class":2253},[46,134593,134594,134596,134598,134600,134602,134604],{"class":48,"line":200},[46,134595,134000],{"class":180},[46,134597,53404],{"class":56},[46,134599,2633],{"class":180},[46,134601,53459],{"class":52},[46,134603,134009],{"class":56},[46,134605,134012],{"class":2253},[46,134607,134608,134610,134612,134614,134616,134618],{"class":48,"line":211},[46,134609,134017],{"class":180},[46,134611,53404],{"class":56},[46,134613,2886],{"class":180},[46,134615,53459],{"class":52},[46,134617,134026],{"class":56},[46,134619,134029],{"class":2253},[46,134621,134622],{"class":48,"line":222},[46,134623,3616],{"class":56},[3514,134625],{"style":128036,"src":134626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[19,134628,134629],{},"(6)总结",[97,134631,134632,134647],{},[100,134633,134634],{},[103,134635,134636,134638,134641,134644],{},[106,134637,133970],{"align":108},[106,134639,134640],{"align":108},"是否脱标",[106,134642,134643],{"align":108},"移动位置",[106,134645,134646],{"align":108},"是否常用",[120,134648,134649,134662,134676,134690,134703],{},[103,134650,134651,134654,134656,134659],{},[125,134652,134653],{"align":108},"Static 静态定位",[125,134655,147],{"align":108},[125,134657,134658],{"align":108},"不能使用边偏移",[125,134660,134661],{"align":108},"很少",[103,134663,134664,134667,134670,134673],{},[125,134665,134666],{"align":108},"Relative 相对定位",[125,134668,134669],{"align":108},"否(占有位置)",[125,134671,134672],{"align":108},"相对于自身位置移动",[125,134674,134675],{"align":108},"基本单独使用",[103,134677,134678,134681,134684,134687],{},[125,134679,134680],{"align":108},"Absolute 绝对定位",[125,134682,134683],{"align":108},"是(不占有位置)",[125,134685,134686],{"align":108},"带有定位的父级",[125,134688,134689],{"align":108},"要和定位父级元素搭配使用",[103,134691,134692,134695,134697,134700],{},[125,134693,134694],{"align":108},"Fixed 固定定位",[125,134696,134683],{"align":108},[125,134698,134699],{"align":108},"浏览器可视区",[125,134701,134702],{"align":108},"单独使用,不需要父级",[103,134704,134705,134708,134710,134712],{},[125,134706,134707],{"align":108},"Sticky 粘性定位",[125,134709,134669],{"align":108},[125,134711,134699],{"align":108},[125,134713,134714],{"align":108},"当前阶段少",[23,134716,134717],{"start":60},[26,134718,134719,134722],{},[2339,134720,134721],{},"边偏移"," 则决定了该元素的最终位置",[97,134724,134725,134736],{},[100,134726,134727],{},[103,134728,134729,134732,134734],{},[106,134730,134731],{"align":108},"边偏移属性",[106,134733,29481],{"align":108},[106,134735,29478],{"align":108},[120,134737,134738,134749,134760,134770],{},[103,134739,134740,134743,134746],{},[125,134741,134742],{"align":108},"top",[125,134744,134745],{"align":108},"top: 80px;",[125,134747,134748],{"align":108},"顶端偏移量，定义元素相对于父元素上边线的距离",[103,134750,134751,134754,134757],{},[125,134752,134753],{"align":108},"bottom",[125,134755,134756],{"align":108},"bottom: 80px ;",[125,134758,134759],{"align":108},"底部偏移量，定义元素相对于其父元素下边线的距离",[103,134761,134762,134764,134767],{},[125,134763,108],{"align":108},[125,134765,134766],{"align":108},"left: 80px ;",[125,134768,134769],{"align":108},"左侧偏移量，定义元素相对于其父元素左边线的距离",[103,134771,134772,134774,134777],{},[125,134773,74487],{"align":108},[125,134775,134776],{"align":108},"right: 80px ;",[125,134778,134779],{"align":108},"右侧偏移量，定义元素相对于其父元素右边线的距离",[3191,134781,134782],{},[26,134783,11029,134784,134786,134787,134789,134790,134792,134793,134796,134797,134799,134800,134802],{},[55681,134785],{},"  ① ",[2339,134788,134721],{}," 需要和 ",[2339,134791,133970],{}," 联合使用， ",[2339,134794,134795],{},"单独使用无效"," ；",[55681,134798],{},"  ②top和bottom不要同时使用",[55681,134801],{},"  ③left和right不要同时使用",[23999,134804,134806],{"id":134805},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[19,134808,134809],{},"子级是绝对定位的话，父级要用相对定位",[3191,134811,134812,134815,134818,134821],{},[26,134813,134814],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[26,134816,134817],{},"父盒子需要加定位限制子盒子在父盒子内显示",[26,134819,134820],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[26,134822,134823,134824,134827],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[2339,134825,134826],{},"子绝父绝"," 也会遇到",[23999,134829,134831],{"id":134830},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[3191,134833,134834,134849],{},[26,134835,134836,134837,134840,134841,134844,134845,134848],{},"在使用 ",[2339,134838,134839],{},"定位"," 布局时，可能会 ",[2339,134842,134843],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[2339,134846,134847],{},"z-index"," 来控制盒子的前后次序 (z轴)",[26,134850,7197],{},[36,134852,134853],{"className":128180,"code":133973,"language":128182,"meta":41,"style":41},[43,134854,134855,134861,134873,134887,134901],{"__ignoreMap":41},[46,134856,134857,134859],{"class":48,"line":49},[46,134858,132028],{"class":169},[46,134860,17573],{"class":56},[46,134862,134863,134865,134867,134869,134871],{"class":48,"line":60},[46,134864,133986],{"class":180},[46,134866,53404],{"class":56},[46,134868,56729],{"class":180},[46,134870,132043],{"class":56},[46,134872,133995],{"class":2253},[46,134874,134875,134877,134879,134881,134883,134885],{"class":48,"line":200},[46,134876,134000],{"class":180},[46,134878,53404],{"class":56},[46,134880,2633],{"class":180},[46,134882,53459],{"class":52},[46,134884,134009],{"class":56},[46,134886,134012],{"class":2253},[46,134888,134889,134891,134893,134895,134897,134899],{"class":48,"line":211},[46,134890,134017],{"class":180},[46,134892,53404],{"class":56},[46,134894,2886],{"class":180},[46,134896,53459],{"class":52},[46,134898,134026],{"class":56},[46,134900,134029],{"class":2253},[46,134902,134903],{"class":48,"line":222},[46,134904,3616],{"class":56},[3191,134906,134907],{},[26,134908,134909,134910,134786,134912,134914,134915,129343,134918,2006,134921,134923,134924,134926,134927,134930,134931,134796,134934,134936,134937,134940,134942],{},"z-index的特性",[55681,134911],{},[2339,134913,128644],{}," ： ",[2339,134916,134917],{},"正整数",[2339,134919,134920],{},"负整数",[2339,134922,2379],{}," ，默认值是 0，数值越大，盒子越靠上；",[55681,134925],{},"  ②如果 ",[2339,134928,134929],{},"属性值相同"," ，则按照书写顺序， ",[2339,134932,134933],{},"后来居上",[55681,134935],{},"  ③数字后面 ",[2339,134938,134939],{},"不能加单位",[55681,134941],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[23999,134944,134946],{"id":134945},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[19,134948,134949],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[19,134951,134952],{},"方法:",[3191,134954,134955,134965],{},[26,134956,134957,134958,134961,134962],{},"left: 50%; 让 ",[2339,134959,134960],{},"盒子的左侧"," 移动到 ",[2339,134963,134964],{},"父级元素的水平中心位置",[26,134966,134967,134968,134971,134972],{},"margin-left: -100px; 让盒子 ",[2339,134969,134970],{},"向左"," 移动 ",[2339,134973,134974],{},"自身宽度的一半",[23999,134976,134978],{"id":134977},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[23,134980,134981,134984],{},[26,134982,134983],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[26,134985,134986],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[19,134988,134989],{},"也就是说绝对定位和固定定位和浮动类似",[23,134991,134992],{"start":200},[26,134993,134994],{},"display 是显示模式， 可以改变显示模式有以下方式:",[3191,134996,134997,135000,135003],{},[26,134998,134999],{},"可以用inline-block 转换为行内块",[26,135001,135002],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[26,135004,135005],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[19,135007,135008],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[23999,135010,135012],{"id":135011},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[23,135014,135015,135018,135021,135024],{},[26,135016,135017],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[26,135019,135020],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[26,135022,135023],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[26,135025,135026],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[36,135028,135029],{"className":128180,"code":132646,"language":128182,"meta":41,"style":41},[43,135030,135031,135037,135047,135051,135057,135067],{"__ignoreMap":41},[46,135032,135033,135035],{"class":48,"line":49},[46,135034,132653],{"class":169},[46,135036,17573],{"class":56},[46,135038,135039,135041,135043,135045],{"class":48,"line":60},[46,135040,132660],{"class":180},[46,135042,53404],{"class":56},[46,135044,108],{"class":180},[46,135046,3345],{"class":56},[46,135048,135049],{"class":48,"line":200},[46,135050,3616],{"class":56},[46,135052,135053,135055],{"class":48,"line":211},[46,135054,132675],{"class":169},[46,135056,17573],{"class":56},[46,135058,135059,135061,135063,135065],{"class":48,"line":222},[46,135060,132660],{"class":180},[46,135062,53404],{"class":56},[46,135064,74487],{"class":180},[46,135066,3345],{"class":56},[46,135068,135069],{"class":48,"line":636},[46,135070,3616],{"class":56},[3514,135072],{"style":128036,"src":135073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[23999,135075,135077],{"id":135076},"_11138-轮播图","11.1.3.8 轮播图",[3514,135079],{"style":128036,"src":135080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[23,135082,135083],{},[26,135084,135085],{},"制作顺序:",[3191,135087,135088,135091,135094,135103],{},[26,135089,135090],{},"大盒子我们类名为： tb-promo 淘宝广告",[26,135092,135093],{},"里面先放一张图片",[26,135095,135096,135097,135099,135100,135102],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[55681,135098],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[55681,135101],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[26,135104,135105,135106,135108,135109,135111],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[55681,135107],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[55681,135110],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[23,135113,135114],{"start":60},[26,135115,135116],{},"代码模块",[36,135118,135120],{"className":128180,"code":135119,"language":128182,"meta":41,"style":41},"\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",[43,135121,135122,135127,135134,135144,135154,135164,135168,135173,135180,135190],{"__ignoreMap":41},[46,135123,135124],{"class":48,"line":49},[46,135125,135126],{"class":2253},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[46,135128,135129,135132],{"class":48,"line":60},[46,135130,135131],{"class":169},".son",[46,135133,17573],{"class":56},[46,135135,135136,135138,135140,135142],{"class":48,"line":200},[46,135137,133986],{"class":180},[46,135139,53404],{"class":56},[46,135141,56796],{"class":180},[46,135143,3345],{"class":56},[46,135145,135146,135148,135150,135152],{"class":48,"line":211},[46,135147,134000],{"class":180},[46,135149,53404],{"class":56},[46,135151,2379],{"class":180},[46,135153,3345],{"class":56},[46,135155,135156,135158,135160,135162],{"class":48,"line":222},[46,135157,134017],{"class":180},[46,135159,53404],{"class":56},[46,135161,2379],{"class":180},[46,135163,3345],{"class":56},[46,135165,135166],{"class":48,"line":636},[46,135167,3616],{"class":56},[46,135169,135170],{"class":48,"line":641},[46,135171,135172],{"class":2253},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[46,135174,135175,135178],{"class":48,"line":653},[46,135176,135177],{"class":169},".father",[46,135179,17573],{"class":56},[46,135181,135182,135184,135186,135188],{"class":48,"line":659},[46,135183,133986],{"class":180},[46,135185,53404],{"class":56},[46,135187,56729],{"class":180},[46,135189,3345],{"class":56},[46,135191,135192],{"class":48,"line":665},[46,135193,3616],{"class":56},[19,135195,135196],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[479,135198,135200],{"id":135199},"_1114-定位数值的移动","11.1.4 定位数值的移动",[3514,135202],{"style":128036,"src":135203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[19,135205,135206],{},"✨ 黄金口诀：",[19,135208,135209],{},"\"TOP正下负上，LEFT正右负左\"",[19,135211,135212],{},"\"RIGHT正左负右，BOTTOM正上负下",[19,135214,135215],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[19,135217,135218],{},"✨ 简单记：",[19,135220,135221],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[2098,135223,135224],{},"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":41,"searchDepth":60,"depth":60,"links":135226},[135227],{"id":133754,"depth":60,"text":133755,"children":135228},[135229,135230,135231,135232],{"id":133758,"depth":200,"text":133759},{"id":133773,"depth":200,"text":133774},{"id":133941,"depth":200,"text":133942},{"id":135199,"depth":200,"text":135200},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":133746,"description":25378},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":135239,"title":135240,"body":135241,"description":25378,"extension":2125,"meta":136664,"navigation":615,"path":136665,"seo":136666,"stem":136667,"__hash__":136668},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":135242,"toc":136643},[135243,135246,135250,135258,135262,135267,135275,135287,135291,135296,135304,135315,135319,135324,135365,135373,135377,135380,135383,135386,135480,135483,135577,135580,135674,135677,135680,135715,135718,135721,135751,135754,135757,135760,135763,135766,135769,135772,135842,135845,135849,135853,135894,135898,135904,135907,135910,135914,135917,135920,135923,136004,136007,136010,136014,136018,136021,136024,136027,136030,136033,136039,136048,136052,136071,136075,136085,136088,136091,136094,136097,136100,136103,136106,136109,136118,136122,136131,136134,136139,136192,136197,136363,136366,136369,136374,136377,136380,136383,136386,136391,136539,136542,136545,136550,136553,136558,136592,136595,136598,136602,136605,136612,136615,136618,136621,136624,136627,136630,136633,136637,136640],[10,135244,135240],{"id":135245},"_12-显示隐藏与图形资源",[14,135247,135249],{"id":135248},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[3191,135251,135252,135255],{},[26,135253,135254],{},"目的:让一个元素在页面中消失或者显示出来",[26,135256,135257],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[479,135259,135261],{"id":135260},"_1211-display-显示","12.1.1 display 显示",[23,135263,135264],{},[26,135265,135266],{},"display 设置或检索对象是否及如何显示",[3191,135268,135269,135272],{},[26,135270,135271],{},"display: none;隐藏对象",[26,135273,135274],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[23,135276,135277,135284],{"start":60},[26,135278,135279,135280,135283],{},"特点： display 隐藏元素后， ",[2339,135281,135282],{},"不再占"," 有原来的位置",[26,135285,135286],{},"在js中使用非常的广泛",[479,135288,135290],{"id":135289},"_1212-visibility可见性","12.1.2 visibility可见性",[23,135292,135293],{},[26,135294,135295],{},"visibility 属性用于指定一个元素应可见还是隐藏",[3191,135297,135298,135301],{},[26,135299,135300],{},"visibility： visible；元素可见",[26,135302,135303],{},"visibility：hidden；元素隐藏",[23,135305,135306,135309,135312],{"start":60},[26,135307,135308],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[26,135310,135311],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[26,135313,135314],{},"隐藏后继续占有原有位置",[479,135316,135318],{"id":135317},"_1213-overflow溢出","12.1.3 overflow溢出",[3191,135320,135321],{},[26,135322,135323],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[97,135325,135326,135334],{},[100,135327,135328],{},[103,135329,135330,135332],{},[106,135331,128644],{"align":108},[106,135333,29478],{"align":108},[120,135335,135336,135344,135351,135358],{},[103,135337,135338,135341],{},[125,135339,135340],{"align":108},"visible",[125,135342,135343],{"align":108},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[103,135345,135346,135348],{},[125,135347,63679],{"align":108},[125,135349,135350],{"align":108},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[103,135352,135353,135355],{},[125,135354,130600],{"align":108},[125,135356,135357],{"align":108},"不管超出内容否，总是显示滚动条",[103,135359,135360,135362],{},[125,135361,74628],{"align":108},[125,135363,135364],{"align":108},"超出自动显示滚动条，不超出不显示滚动条",[3191,135366,135367,135370],{},[26,135368,135369],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[26,135371,135372],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[479,135374,135376],{"id":135375},"_1214-案例收获","12.1.4 案例收获",[3514,135378],{"style":128036,"src":135379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[19,135381,135382],{},"问题：没做出来动态效果，使用hover没实现",[19,135384,135385],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[36,135387,135388],{"className":128180,"code":133612,"language":128182,"meta":41,"style":41},[43,135389,135390,135394,135408,135412,135426,135430,135444,135448,135462,135466],{"__ignoreMap":41},[46,135391,135392],{"class":48,"line":49},[46,135393,133619],{"class":2253},[46,135395,135396,135398,135400,135402,135404,135406],{"class":48,"line":60},[46,135397,133624],{"class":169},[46,135399,81772],{"class":56},[46,135401,130540],{"class":180},[46,135403,53404],{"class":56},[46,135405,133633],{"class":180},[46,135407,131110],{"class":56},[46,135409,135410],{"class":48,"line":200},[46,135411,133640],{"class":2253},[46,135413,135414,135416,135418,135420,135422,135424],{"class":48,"line":211},[46,135415,133645],{"class":169},[46,135417,81772],{"class":56},[46,135419,130540],{"class":180},[46,135421,53404],{"class":56},[46,135423,56729],{"class":180},[46,135425,131110],{"class":56},[46,135427,135428],{"class":48,"line":222},[46,135429,133660],{"class":2253},[46,135431,135432,135434,135436,135438,135440,135442],{"class":48,"line":636},[46,135433,133665],{"class":169},[46,135435,81772],{"class":56},[46,135437,130540],{"class":180},[46,135439,53404],{"class":56},[46,135441,56796],{"class":180},[46,135443,131110],{"class":56},[46,135445,135446],{"class":48,"line":641},[46,135447,133680],{"class":2253},[46,135449,135450,135452,135454,135456,135458,135460],{"class":48,"line":653},[46,135451,133685],{"class":169},[46,135453,81772],{"class":56},[46,135455,130540],{"class":180},[46,135457,53404],{"class":56},[46,135459,88196],{"class":180},[46,135461,131110],{"class":56},[46,135463,135464],{"class":48,"line":659},[46,135465,133700],{"class":2253},[46,135467,135468,135470,135472,135474,135476,135478],{"class":48,"line":665},[46,135469,133705],{"class":169},[46,135471,81772],{"class":56},[46,135473,130540],{"class":180},[46,135475,53404],{"class":56},[46,135477,133714],{"class":180},[46,135479,131110],{"class":56},[19,135481,135482],{},"完整代码：",[36,135484,135485],{"className":128180,"code":133612,"language":128182,"meta":41,"style":41},[43,135486,135487,135491,135505,135509,135523,135527,135541,135545,135559,135563],{"__ignoreMap":41},[46,135488,135489],{"class":48,"line":49},[46,135490,133619],{"class":2253},[46,135492,135493,135495,135497,135499,135501,135503],{"class":48,"line":60},[46,135494,133624],{"class":169},[46,135496,81772],{"class":56},[46,135498,130540],{"class":180},[46,135500,53404],{"class":56},[46,135502,133633],{"class":180},[46,135504,131110],{"class":56},[46,135506,135507],{"class":48,"line":200},[46,135508,133640],{"class":2253},[46,135510,135511,135513,135515,135517,135519,135521],{"class":48,"line":211},[46,135512,133645],{"class":169},[46,135514,81772],{"class":56},[46,135516,130540],{"class":180},[46,135518,53404],{"class":56},[46,135520,56729],{"class":180},[46,135522,131110],{"class":56},[46,135524,135525],{"class":48,"line":222},[46,135526,133660],{"class":2253},[46,135528,135529,135531,135533,135535,135537,135539],{"class":48,"line":636},[46,135530,133665],{"class":169},[46,135532,81772],{"class":56},[46,135534,130540],{"class":180},[46,135536,53404],{"class":56},[46,135538,56796],{"class":180},[46,135540,131110],{"class":56},[46,135542,135543],{"class":48,"line":641},[46,135544,133680],{"class":2253},[46,135546,135547,135549,135551,135553,135555,135557],{"class":48,"line":653},[46,135548,133685],{"class":169},[46,135550,81772],{"class":56},[46,135552,130540],{"class":180},[46,135554,53404],{"class":56},[46,135556,88196],{"class":180},[46,135558,131110],{"class":56},[46,135560,135561],{"class":48,"line":659},[46,135562,133700],{"class":2253},[46,135564,135565,135567,135569,135571,135573,135575],{"class":48,"line":665},[46,135566,133705],{"class":169},[46,135568,81772],{"class":56},[46,135570,130540],{"class":180},[46,135572,53404],{"class":56},[46,135574,133714],{"class":180},[46,135576,131110],{"class":56},[19,135578,135579],{},"分布思路重点详解：",[36,135581,135582],{"className":128180,"code":133612,"language":128182,"meta":41,"style":41},[43,135583,135584,135588,135602,135606,135620,135624,135638,135642,135656,135660],{"__ignoreMap":41},[46,135585,135586],{"class":48,"line":49},[46,135587,133619],{"class":2253},[46,135589,135590,135592,135594,135596,135598,135600],{"class":48,"line":60},[46,135591,133624],{"class":169},[46,135593,81772],{"class":56},[46,135595,130540],{"class":180},[46,135597,53404],{"class":56},[46,135599,133633],{"class":180},[46,135601,131110],{"class":56},[46,135603,135604],{"class":48,"line":200},[46,135605,133640],{"class":2253},[46,135607,135608,135610,135612,135614,135616,135618],{"class":48,"line":211},[46,135609,133645],{"class":169},[46,135611,81772],{"class":56},[46,135613,130540],{"class":180},[46,135615,53404],{"class":56},[46,135617,56729],{"class":180},[46,135619,131110],{"class":56},[46,135621,135622],{"class":48,"line":222},[46,135623,133660],{"class":2253},[46,135625,135626,135628,135630,135632,135634,135636],{"class":48,"line":636},[46,135627,133665],{"class":169},[46,135629,81772],{"class":56},[46,135631,130540],{"class":180},[46,135633,53404],{"class":56},[46,135635,56796],{"class":180},[46,135637,131110],{"class":56},[46,135639,135640],{"class":48,"line":641},[46,135641,133680],{"class":2253},[46,135643,135644,135646,135648,135650,135652,135654],{"class":48,"line":653},[46,135645,133685],{"class":169},[46,135647,81772],{"class":56},[46,135649,130540],{"class":180},[46,135651,53404],{"class":56},[46,135653,88196],{"class":180},[46,135655,131110],{"class":56},[46,135657,135658],{"class":48,"line":659},[46,135659,133700],{"class":2253},[46,135661,135662,135664,135666,135668,135670,135672],{"class":48,"line":665},[46,135663,133705],{"class":169},[46,135665,81772],{"class":56},[46,135667,130540],{"class":180},[46,135669,53404],{"class":56},[46,135671,133714],{"class":180},[46,135673,131110],{"class":56},[3514,135675],{"style":128036,"src":135676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[19,135678,135679],{},"图片太大，盒子太小，此时需要修改图片的大小",[36,135681,135683],{"className":128927,"code":135682,"language":128929,"meta":41,"style":41},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[43,135684,135685],{"__ignoreMap":41},[46,135686,135687,135689,135691,135693,135695,135698,135700,135702,135705,135708,135710,135713],{"class":48,"line":49},[46,135688,821],{"class":56},[46,135690,3514],{"class":1361},[46,135692,57204],{"class":169},[46,135694,79],{"class":56},[46,135696,135697],{"class":173},"\"images\u002Fpic.jpg\"",[46,135699,57212],{"class":169},[46,135701,79],{"class":56},[46,135703,135704],{"class":173},"\"描述文字\"",[46,135706,135707],{"class":169}," title",[46,135709,79],{"class":56},[46,135711,135712],{"class":173},"\"悬停提示\"",[46,135714,53274],{"class":56},[3514,135716],{"style":128036,"src":135717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[19,135719,135720],{},"制造遮罩层",[36,135722,135723],{"className":128927,"code":135682,"language":128929,"meta":41,"style":41},[43,135724,135725],{"__ignoreMap":41},[46,135726,135727,135729,135731,135733,135735,135737,135739,135741,135743,135745,135747,135749],{"class":48,"line":49},[46,135728,821],{"class":56},[46,135730,3514],{"class":1361},[46,135732,57204],{"class":169},[46,135734,79],{"class":56},[46,135736,135697],{"class":173},[46,135738,57212],{"class":169},[46,135740,79],{"class":56},[46,135742,135704],{"class":173},[46,135744,135707],{"class":169},[46,135746,79],{"class":56},[46,135748,135712],{"class":173},[46,135750,53274],{"class":56},[19,135752,135753],{},"此时是这样的为标准流",[3514,135755],{"style":128036,"src":135756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[19,135758,135759],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[19,135761,135762],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[19,135764,135765],{},"让他在中间，用center(background-position)",[19,135767,135768],{},"将需要变的尽可能放到一个盒子中",[19,135770,135771],{},"放大盒子上内部盒子发生变化",[36,135773,135775],{"className":128180,"code":135774,"language":128182,"meta":41,"style":41},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[43,135776,135777,135783,135793,135797,135804,135814,135826,135838],{"__ignoreMap":41},[46,135778,135779,135781],{"class":48,"line":49},[46,135780,129247],{"class":169},[46,135782,17573],{"class":56},[46,135784,135785,135787,135789,135791],{"class":48,"line":60},[46,135786,133986],{"class":180},[46,135788,53404],{"class":56},[46,135790,56729],{"class":180},[46,135792,3345],{"class":56},[46,135794,135795],{"class":48,"line":200},[46,135796,3616],{"class":56},[46,135798,135799,135802],{"class":48,"line":211},[46,135800,135801],{"class":169},".child",[46,135803,17573],{"class":56},[46,135805,135806,135808,135810,135812],{"class":48,"line":222},[46,135807,133986],{"class":180},[46,135809,53404],{"class":56},[46,135811,56796],{"class":180},[46,135813,3345],{"class":56},[46,135815,135816,135818,135820,135822,135824],{"class":48,"line":636},[46,135817,134000],{"class":180},[46,135819,53404],{"class":56},[46,135821,2842],{"class":180},[46,135823,2515],{"class":52},[46,135825,3345],{"class":56},[46,135827,135828,135830,135832,135834,135836],{"class":48,"line":641},[46,135829,134017],{"class":180},[46,135831,53404],{"class":56},[46,135833,2842],{"class":180},[46,135835,2515],{"class":52},[46,135837,3345],{"class":56},[46,135839,135840],{"class":48,"line":653},[46,135841,3616],{"class":56},[19,135843,135844],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,135846,135848],{"id":135847},"_122-精灵图","12.2 精灵图",[479,135850,135852],{"id":135851},"_1221-理解","12.2.1 理解",[23,135854,135855,135873],{},[26,135856,135857,135858,134086,135861,135864,135865,135868,135869,135872],{},"目的： ",[2339,135859,135860],{},"为了有效地减少服务器接收和发送请求的次数",[2339,135862,135863],{},"提高"," 页面的 ",[2339,135866,135867],{},"加载速度"," ，出现了 ",[2339,135870,135871],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[26,135874,135875,135876,135878,135879,135881,135882,135884,135885,135887,135888,135890,135891,135893],{},"使用精灵图核心：",[55681,135877],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[55681,135880],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[55681,135883],{},"  ③移动背景图片位置， 此时可以使用 background-position",[55681,135886],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[55681,135889],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[55681,135892],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[479,135895,135897],{"id":135896},"_1222-扒图","12.2.2 扒图",[36,135899,135902],{"className":135900,"code":135901,"language":571},[569],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[43,135903,135901],{"__ignoreMap":41},[3514,135905],{"style":128036,"src":135906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[3514,135908],{"style":128036,"src":135909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[479,135911,135913],{"id":135912},"_1223-精灵图的实现","12.2.3 精灵图的实现",[3514,135915],{"style":128036,"src":135916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[19,135918,135919],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[3514,135921],{"style":128036,"src":135922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[36,135924,135926],{"className":128180,"code":135925,"language":128182,"meta":41,"style":41},"\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",[43,135927,135928,135933,135940,135952,135964,135983,136000],{"__ignoreMap":41},[46,135929,135930],{"class":48,"line":49},[46,135931,135932],{"class":2253},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[46,135934,135935,135938],{"class":48,"line":60},[46,135936,135937],{"class":169},".icon",[46,135939,17573],{"class":56},[46,135941,135942,135944,135946,135948,135950],{"class":48,"line":200},[46,135943,72533],{"class":180},[46,135945,53404],{"class":56},[46,135947,2886],{"class":180},[46,135949,53459],{"class":52},[46,135951,3345],{"class":56},[46,135953,135954,135956,135958,135960,135962],{"class":48,"line":211},[46,135955,72753],{"class":180},[46,135957,53404],{"class":56},[46,135959,2886],{"class":180},[46,135961,53459],{"class":52},[46,135963,3345],{"class":56},[46,135965,135966,135968,135970,135972,135974,135977,135979,135981],{"class":48,"line":222},[46,135967,72576],{"class":180},[46,135969,53404],{"class":56},[46,135971,63691],{"class":180},[46,135973,1152],{"class":56},[46,135975,135976],{"class":439},"sprites.png",[46,135978,15716],{"class":56},[46,135980,63701],{"class":180},[46,135982,3345],{"class":56},[46,135984,135985,135987,135989,135991,135993,135996,135998],{"class":48,"line":636},[46,135986,130440],{"class":180},[46,135988,53404],{"class":56},[46,135990,53730],{"class":180},[46,135992,53459],{"class":52},[46,135994,135995],{"class":180}," -20",[46,135997,53459],{"class":52},[46,135999,3345],{"class":56},[46,136001,136002],{"class":48,"line":641},[46,136003,3616],{"class":56},[3514,136005],{"style":128036,"src":136006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[19,136008,136009],{},"在前端中坐标轴的正方向是右和下",[14,136011,136013],{"id":136012},"_123-字体图标","12.3 字体图标",[479,136015,136017],{"id":136016},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[19,136019,136020],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[19,136022,136023],{},"精灵图是有诸多优点的，但是缺点很明显。",[19,136025,136026],{},"1.图片文件还是比较大的。",[19,136028,136029],{},"2.图片本身放大和缩小会失真。",[19,136031,136032],{},"3.一旦图片制作完毕想要更换非常复杂。",[19,136034,136035,136036,27732],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[2339,136037,136038],{},"字体图标 iconfont",[19,136040,136041,136044,136045,365],{},[2339,136042,136043],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[2339,136046,136047],{},"展示的是图标，本质属于字体",[479,136049,136051],{"id":136050},"_1232-字体图标的优点","12.3.2 字体图标的优点",[3191,136053,136054,136059,136062,136065,136068],{},[26,136055,136056,136058],{},[2339,136057,27868],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[26,136060,136061],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[26,136063,136064],{},"兼容性：几乎支持所有的浏览器，请放心使用",[26,136066,136067],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[26,136069,136070],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[479,136072,136074],{"id":136073},"_1233-字体库下载网站","12.3.3 字体库下载网站",[3191,136076,136077],{},[26,136078,136079,136080],{},"icomoon字体库：",[2426,136081,136084],{"href":136082,"rel":136083},"http:\u002F\u002Ficomoon.io\u002F",[25862],"http:\u002F\u002Ficomoon.io",[19,136086,136087],{},"进去之后点icomoon app",[3514,136089],{"style":128036,"src":136090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[19,136092,136093],{},"可以对其编辑：",[3514,136095],{"style":128036,"src":136096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[19,136098,136099],{},"生成字体：",[3514,136101],{"style":128036,"src":136102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[19,136104,136105],{},"下载：",[3514,136107],{"style":128036,"src":136108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[3191,136110,136111],{},[26,136112,136113,136114],{},"阿里iconfont字体库： ",[2426,136115,136116],{"href":136116,"rel":136117},"http:\u002F\u002Fwww.iconfont.cn\u002F",[25862],[479,136119,136121],{"id":136120},"_1234-字体图标的引入","12.3.4 字体图标的引入",[23,136123,136124],{},[26,136125,136126,136127,136130],{},"把下载包里面的 ",[2339,136128,136129],{},"fonts"," 文件夹放入页面根目录下",[3514,136132],{"style":128036,"src":136133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[23,136135,136136],{"start":60},[26,136137,136138],{},"字体文件格式",[97,136140,136141,136150],{},[100,136142,136143],{},[103,136144,136145,136148],{},[106,136146,136147],{"align":108},"格式",[106,136149,25741],{"align":108},[120,136151,136152,136162,136172,136182],{},[103,136153,136154,136159],{},[125,136155,136156],{"align":108},[2339,136157,136158],{},".ttf",[125,136160,136161],{"align":108},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[103,136163,136164,136169],{},[125,136165,136166],{"align":108},[2339,136167,136168],{},".woff",[125,136170,136171],{"align":108},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[103,136173,136174,136179],{},[125,136175,136176],{"align":108},[2339,136177,136178],{},".eot",[125,136180,136181],{"align":108},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[103,136183,136184,136189],{},[125,136185,136186],{"align":108},[2339,136187,136188],{},"svg",[125,136190,136191],{"align":108},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[23,136193,136194],{"start":200},[26,136195,136196],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[36,136198,136200],{"className":128180,"code":136199,"language":128182,"meta":41,"style":41},"\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",[43,136201,136202,136207,136214,136226,136242,136267,136288,136308,136328,136332,136338,136348,136359],{"__ignoreMap":41},[46,136203,136204],{"class":48,"line":49},[46,136205,136206],{"class":2253},"\u002F* 引入字体图标 *\u002F\n",[46,136208,136209,136212],{"class":48,"line":60},[46,136210,136211],{"class":52},"@font-face",[46,136213,17573],{"class":56},[46,136215,136216,136219,136221,136224],{"class":48,"line":200},[46,136217,136218],{"class":180},"  font-family",[46,136220,53404],{"class":56},[46,136222,136223],{"class":173},"'icomoon'",[46,136225,3345],{"class":56},[46,136227,136228,136231,136233,136235,136237,136240],{"class":48,"line":211},[46,136229,136230],{"class":180},"  src",[46,136232,53404],{"class":56},[46,136234,63691],{"class":180},[46,136236,1152],{"class":56},[46,136238,136239],{"class":173},"'fonts\u002Ficomoon.eot'",[46,136241,4740],{"class":56},[46,136243,136244,136246,136248,136250,136252,136255,136257,136260,136262,136265],{"class":48,"line":222},[46,136245,136230],{"class":180},[46,136247,53404],{"class":56},[46,136249,63691],{"class":180},[46,136251,1152],{"class":56},[46,136253,136254],{"class":173},"'fonts\u002Ficomoon.eot?#iefix'",[46,136256,15716],{"class":56},[46,136258,136259],{"class":180},"format",[46,136261,1152],{"class":56},[46,136263,136264],{"class":173},"'embedded-opentype'",[46,136266,40019],{"class":56},[46,136268,136269,136272,136274,136277,136279,136281,136283,136286],{"class":48,"line":636},[46,136270,136271],{"class":180},"       url",[46,136273,1152],{"class":56},[46,136275,136276],{"class":173},"'fonts\u002Ficomoon.woff'",[46,136278,15716],{"class":56},[46,136280,136259],{"class":180},[46,136282,1152],{"class":56},[46,136284,136285],{"class":173},"'woff'",[46,136287,40019],{"class":56},[46,136289,136290,136292,136294,136297,136299,136301,136303,136306],{"class":48,"line":641},[46,136291,136271],{"class":180},[46,136293,1152],{"class":56},[46,136295,136296],{"class":173},"'fonts\u002Ficomoon.ttf'",[46,136298,15716],{"class":56},[46,136300,136259],{"class":180},[46,136302,1152],{"class":56},[46,136304,136305],{"class":173},"'truetype'",[46,136307,40019],{"class":56},[46,136309,136310,136312,136314,136317,136319,136321,136323,136326],{"class":48,"line":653},[46,136311,136271],{"class":180},[46,136313,1152],{"class":56},[46,136315,136316],{"class":173},"'fonts\u002Ficomoon.svg#icomoon'",[46,136318,15716],{"class":56},[46,136320,136259],{"class":180},[46,136322,1152],{"class":56},[46,136324,136325],{"class":173},"'svg'",[46,136327,4740],{"class":56},[46,136329,136330],{"class":48,"line":659},[46,136331,3616],{"class":56},[46,136333,136334,136336],{"class":48,"line":665},[46,136335,135937],{"class":169},[46,136337,17573],{"class":56},[46,136339,136340,136342,136344,136346],{"class":48,"line":670},[46,136341,136218],{"class":180},[46,136343,53404],{"class":56},[46,136345,136223],{"class":173},[46,136347,3345],{"class":56},[46,136349,136350,136353,136355,136357],{"class":48,"line":676},[46,136351,136352],{"class":180},"  font-style",[46,136354,53404],{"class":56},[46,136356,65806],{"class":180},[46,136358,3345],{"class":56},[46,136360,136361],{"class":48,"line":682},[46,136362,3616],{"class":56},[19,136364,136365],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[3514,136367],{"style":128036,"src":136368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[23,136370,136371],{"start":211},[26,136372,136373],{},"添加字体",[3514,136375],{"style":128036,"src":136376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[19,136378,136379],{},"复制：",[3514,136381],{"style":128036,"src":136382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[19,136384,136385],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[23,136387,136388],{"start":222},[26,136389,136390],{},"代码展示：",[36,136392,136393],{"className":128180,"code":136199,"language":128182,"meta":41,"style":41},[43,136394,136395,136399,136405,136415,136429,136451,136469,136487,136505,136509,136515,136525,136535],{"__ignoreMap":41},[46,136396,136397],{"class":48,"line":49},[46,136398,136206],{"class":2253},[46,136400,136401,136403],{"class":48,"line":60},[46,136402,136211],{"class":52},[46,136404,17573],{"class":56},[46,136406,136407,136409,136411,136413],{"class":48,"line":200},[46,136408,136218],{"class":180},[46,136410,53404],{"class":56},[46,136412,136223],{"class":173},[46,136414,3345],{"class":56},[46,136416,136417,136419,136421,136423,136425,136427],{"class":48,"line":211},[46,136418,136230],{"class":180},[46,136420,53404],{"class":56},[46,136422,63691],{"class":180},[46,136424,1152],{"class":56},[46,136426,136239],{"class":173},[46,136428,4740],{"class":56},[46,136430,136431,136433,136435,136437,136439,136441,136443,136445,136447,136449],{"class":48,"line":222},[46,136432,136230],{"class":180},[46,136434,53404],{"class":56},[46,136436,63691],{"class":180},[46,136438,1152],{"class":56},[46,136440,136254],{"class":173},[46,136442,15716],{"class":56},[46,136444,136259],{"class":180},[46,136446,1152],{"class":56},[46,136448,136264],{"class":173},[46,136450,40019],{"class":56},[46,136452,136453,136455,136457,136459,136461,136463,136465,136467],{"class":48,"line":636},[46,136454,136271],{"class":180},[46,136456,1152],{"class":56},[46,136458,136276],{"class":173},[46,136460,15716],{"class":56},[46,136462,136259],{"class":180},[46,136464,1152],{"class":56},[46,136466,136285],{"class":173},[46,136468,40019],{"class":56},[46,136470,136471,136473,136475,136477,136479,136481,136483,136485],{"class":48,"line":641},[46,136472,136271],{"class":180},[46,136474,1152],{"class":56},[46,136476,136296],{"class":173},[46,136478,15716],{"class":56},[46,136480,136259],{"class":180},[46,136482,1152],{"class":56},[46,136484,136305],{"class":173},[46,136486,40019],{"class":56},[46,136488,136489,136491,136493,136495,136497,136499,136501,136503],{"class":48,"line":653},[46,136490,136271],{"class":180},[46,136492,1152],{"class":56},[46,136494,136316],{"class":173},[46,136496,15716],{"class":56},[46,136498,136259],{"class":180},[46,136500,1152],{"class":56},[46,136502,136325],{"class":173},[46,136504,4740],{"class":56},[46,136506,136507],{"class":48,"line":659},[46,136508,3616],{"class":56},[46,136510,136511,136513],{"class":48,"line":665},[46,136512,135937],{"class":169},[46,136514,17573],{"class":56},[46,136516,136517,136519,136521,136523],{"class":48,"line":670},[46,136518,136218],{"class":180},[46,136520,53404],{"class":56},[46,136522,136223],{"class":173},[46,136524,3345],{"class":56},[46,136526,136527,136529,136531,136533],{"class":48,"line":676},[46,136528,136352],{"class":180},[46,136530,53404],{"class":56},[46,136532,65806],{"class":180},[46,136534,3345],{"class":56},[46,136536,136537],{"class":48,"line":682},[46,136538,3616],{"class":56},[3514,136540],{"style":128036,"src":136541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[19,136543,136544],{},"更加细节展示：",[23,136546,136547],{},[26,136548,136549],{},"html 标签内添加小图标",[3514,136551],{"style":128036,"src":136552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[23,136554,136555],{"start":60},[26,136556,136557],{},"给标签定义字体",[36,136559,136560],{"className":128927,"code":132284,"language":128929,"meta":41,"style":41},[43,136561,136562,136566,136580,136584],{"__ignoreMap":41},[46,136563,136564],{"class":48,"line":49},[46,136565,132291],{"class":2253},[46,136567,136568,136570,136572,136574,136576,136578],{"class":48,"line":60},[46,136569,821],{"class":56},[46,136571,53578],{"class":1361},[46,136573,55451],{"class":169},[46,136575,79],{"class":56},[46,136577,132304],{"class":173},[46,136579,53274],{"class":56},[46,136581,136582],{"class":48,"line":200},[46,136583,132311],{"class":56},[46,136585,136586,136588,136590],{"class":48,"line":211},[46,136587,53752],{"class":56},[46,136589,53578],{"class":1361},[46,136591,53274],{"class":56},[19,136593,136594],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[3514,136596],{"style":128036,"src":136597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[479,136599,136601],{"id":136600},"_1235-字体图标的追加","12.3.5 字体图标的追加",[19,136603,136604],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[19,136606,136607,136608,136611],{},"把压缩包里面的 ",[2339,136609,136610],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[19,136613,136614],{},"打开网站，点下方：",[3514,136616],{"style":128036,"src":136617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[3514,136619],{"style":128036,"src":136620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[3514,136622],{"style":128036,"src":136623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[19,136625,136626],{},"点yes重新加载",[19,136628,136629],{},"然后重复之前的操作就可以实现了",[19,136631,136632],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[479,136634,136636],{"id":136635},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[3514,136638],{"style":128036,"src":136639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[2098,136641,136642],{},"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":41,"searchDepth":60,"depth":60,"links":136644},[136645,136651,136656],{"id":135248,"depth":60,"text":135249,"children":136646},[136647,136648,136649,136650],{"id":135260,"depth":200,"text":135261},{"id":135289,"depth":200,"text":135290},{"id":135317,"depth":200,"text":135318},{"id":135375,"depth":200,"text":135376},{"id":135847,"depth":60,"text":135848,"children":136652},[136653,136654,136655],{"id":135851,"depth":200,"text":135852},{"id":135896,"depth":200,"text":135897},{"id":135912,"depth":200,"text":135913},{"id":136012,"depth":60,"text":136013,"children":136657},[136658,136659,136660,136661,136662,136663],{"id":136016,"depth":200,"text":136017},{"id":136050,"depth":200,"text":136051},{"id":136073,"depth":200,"text":136074},{"id":136120,"depth":200,"text":136121},{"id":136600,"depth":200,"text":136601},{"id":136635,"depth":200,"text":136636},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":135240,"description":25378},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":136670,"title":136671,"body":136672,"description":25378,"extension":2125,"meta":137899,"navigation":615,"path":137900,"seo":137901,"stem":137902,"__hash__":137903},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":136673,"toc":137880},[136674,136677,136681,136684,136698,136766,136796,136799,136803,136807,136909,136956,136960,136963,136966,137000,137003,137006,137009,137012,137015,137018,137021,137023,137026,137029,137032,137035,137038,137041,137044,137072,137075,137079,137082,137089,137092,137095,137121,137124,137128,137131,137134,137141,137145,137148,137150,137182,137185,137188,137200,137206,137209,137212,137215,137217,137221,137224,137227,137230,137275,137279,137281,137284,137291,137333,137336,137340,137345,137359,137363,137366,137369,137372,137375,137378,137412,137415,137418,137472,137475,137478,137481,137484,137536,137539,137542,137591,137595,137597,137600,137603,137606,137609,137612,137670,137673,137679,137682,137685,137717,137720,137724,137728,137731,137763,137767,137770,137814,137818,137821,137824,137827,137830,137833,137836,137839,137841,137844,137846,137849,137852,137855,137858,137863,137866,137868,137871,137874,137877],[10,136675,136671],{"id":136676},"_13-界面样式与布局技巧",[14,136678,136680],{"id":136679},"_131-css三角","13.1 css三角",[19,136682,136683],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[3191,136685,136686,136689,136692,136695],{},[26,136687,136688],{},"用css 边框可以模拟三角效果",[26,136690,136691],{},"宽度高度为0",[26,136693,136694],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[26,136696,136697],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[36,136699,136701],{"className":128180,"code":136700,"language":128182,"meta":41,"style":41},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[43,136702,136703,136708,136715,136725,136735,136751,136762],{"__ignoreMap":41},[46,136704,136705],{"class":48,"line":49},[46,136706,136707],{"class":2253},"\u002F* CSS 实现三角形 *\u002F\n",[46,136709,136710,136713],{"class":48,"line":60},[46,136711,136712],{"class":169},".triangle",[46,136714,17573],{"class":56},[46,136716,136717,136719,136721,136723],{"class":48,"line":200},[46,136718,72533],{"class":180},[46,136720,53404],{"class":56},[46,136722,2379],{"class":180},[46,136724,3345],{"class":56},[46,136726,136727,136729,136731,136733],{"class":48,"line":211},[46,136728,72753],{"class":180},[46,136730,53404],{"class":56},[46,136732,2379],{"class":180},[46,136734,3345],{"class":56},[46,136736,136737,136739,136741,136743,136745,136747,136749],{"class":48,"line":222},[46,136738,72861],{"class":180},[46,136740,53404],{"class":56},[46,136742,2633],{"class":180},[46,136744,53459],{"class":52},[46,136746,53488],{"class":180},[46,136748,65956],{"class":180},[46,136750,3345],{"class":56},[46,136752,136753,136756,136758,136760],{"class":48,"line":636},[46,136754,136755],{"class":180},"  border-bottom-color",[46,136757,53404],{"class":56},[46,136759,64334],{"class":180},[46,136761,3345],{"class":56},[46,136763,136764],{"class":48,"line":641},[46,136765,3616],{"class":56},[36,136767,136768],{"className":128180,"code":132337,"language":128182,"meta":41,"style":41},[43,136769,136770,136776,136792],{"__ignoreMap":41},[46,136771,136772,136774],{"class":48,"line":49},[46,136773,53578],{"class":1361},[46,136775,17573],{"class":56},[46,136777,136778,136780,136782,136784,136786,136788,136790],{"class":48,"line":60},[46,136779,72861],{"class":180},[46,136781,53404],{"class":56},[46,136783,2405],{"class":180},[46,136785,53459],{"class":52},[46,136787,53488],{"class":180},[46,136789,131572],{"class":180},[46,136791,3345],{"class":56},[46,136793,136794],{"class":48,"line":200},[46,136795,3616],{"class":56},[3514,136797],{"style":128036,"src":136798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,136800,136802],{"id":136801},"_132-css用户界面样式","13.2 css用户界面样式",[479,136804,136806],{"id":136805},"_1321-鼠标样式","13.2.1 鼠标样式",[36,136808,136810],{"className":128180,"code":136809,"language":128182,"meta":41,"style":41},"\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",[43,136811,136812,136817,136836,136854,136873,136890],{"__ignoreMap":41},[46,136813,136814],{"class":48,"line":49},[46,136815,136816],{"class":2253},"\u002F* 鼠标样式 *\u002F\n",[46,136818,136819,136821,136823,136826,136828,136830,136833],{"class":48,"line":60},[46,136820,53578],{"class":1361},[46,136822,81772],{"class":56},[46,136824,136825],{"class":180},"cursor",[46,136827,53404],{"class":56},[46,136829,63995],{"class":180},[46,136831,136832],{"class":56},"; }   ",[46,136834,136835],{"class":2253},"\u002F* 手型 *\u002F\n",[46,136837,136838,136840,136842,136844,136846,136849,136851],{"class":48,"line":200},[46,136839,53578],{"class":1361},[46,136841,81772],{"class":56},[46,136843,136825],{"class":180},[46,136845,53404],{"class":56},[46,136847,136848],{"class":180},"default",[46,136850,136832],{"class":56},[46,136852,136853],{"class":2253},"\u002F* 默认 *\u002F\n",[46,136855,136856,136858,136860,136862,136864,136867,136870],{"class":48,"line":211},[46,136857,53578],{"class":1361},[46,136859,81772],{"class":56},[46,136861,136825],{"class":180},[46,136863,53404],{"class":56},[46,136865,136866],{"class":180},"move",[46,136868,136869],{"class":56},"; }      ",[46,136871,136872],{"class":2253},"\u002F* 移动 *\u002F\n",[46,136874,136875,136877,136879,136881,136883,136885,136887],{"class":48,"line":222},[46,136876,53578],{"class":1361},[46,136878,81772],{"class":56},[46,136880,136825],{"class":180},[46,136882,53404],{"class":56},[46,136884,571],{"class":180},[46,136886,136869],{"class":56},[46,136888,136889],{"class":2253},"\u002F* 文本 *\u002F\n",[46,136891,136892,136894,136896,136898,136900,136903,136906],{"class":48,"line":636},[46,136893,53578],{"class":1361},[46,136895,81772],{"class":56},[46,136897,136825],{"class":180},[46,136899,53404],{"class":56},[46,136901,136902],{"class":180},"not-allowed",[46,136904,136905],{"class":56},"; } ",[46,136907,136908],{"class":2253},"\u002F* 禁止 *\u002F\n",[97,136910,136911,136919],{},[100,136912,136913],{},[103,136914,136915,136917],{},[106,136916,128644],{"align":108},[106,136918,29478],{"align":108},[120,136920,136921,136928,136935,136942,136949],{},[103,136922,136923,136925],{},[125,136924,136848],{"align":108},[125,136926,136927],{"align":108},"小白 默认",[103,136929,136930,136932],{},[125,136931,63995],{"align":108},[125,136933,136934],{"align":108},"小手",[103,136936,136937,136939],{},[125,136938,136866],{"align":108},[125,136940,136941],{"align":108},"移动",[103,136943,136944,136946],{},[125,136945,571],{"align":108},[125,136947,136948],{"align":108},"文本",[103,136950,136951,136953],{},[125,136952,136902],{"align":108},[125,136954,136955],{"align":108},"禁止",[479,136957,136959],{"id":136958},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[19,136961,136962],{},"去除表单轮廓线",[19,136964,136965],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[36,136967,136968],{"className":128180,"code":131544,"language":128182,"meta":41,"style":41},[43,136969,136970,136974,136980,136996],{"__ignoreMap":41},[46,136971,136972],{"class":48,"line":49},[46,136973,131551],{"class":2253},[46,136975,136976,136978],{"class":48,"line":60},[46,136977,53578],{"class":1361},[46,136979,17573],{"class":56},[46,136981,136982,136984,136986,136988,136990,136992,136994],{"class":48,"line":200},[46,136983,72861],{"class":180},[46,136985,53404],{"class":56},[46,136987,2405],{"class":180},[46,136989,53459],{"class":52},[46,136991,53488],{"class":180},[46,136993,131572],{"class":180},[46,136995,3345],{"class":56},[46,136997,136998],{"class":48,"line":211},[46,136999,3616],{"class":56},[19,137001,137002],{},"文本域：",[3514,137004],{"style":128036,"src":137005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[19,137007,137008],{},"此时会有一个空白区域",[3514,137010],{"style":128036,"src":137011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[19,137013,137014],{},"写在同一行就不会出现这个问题",[3514,137016],{"style":128036,"src":137017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[19,137019,137020],{},"文本域是行内块元素，一定记住！！！",[19,137022,100194],{},[3514,137024],{"style":128036,"src":137025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[19,137027,137028],{},"文本域尽量放在一行",[19,137030,137031],{},"知识回顾：cols是列，rols是行",[3514,137033],{"style":128036,"src":137034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[19,137036,137037],{},"它可以进行拖动，显然这是我们不愿意看到的",[3514,137039],{"style":128036,"src":137040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[19,137042,137043],{},"使用resize进行解决",[36,137045,137047],{"className":128180,"code":137046,"language":128182,"meta":41,"style":41},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[43,137048,137049,137055,137068],{"__ignoreMap":41},[46,137050,137051,137053],{"class":48,"line":49},[46,137052,55786],{"class":1361},[46,137054,17573],{"class":56},[46,137056,137057,137059,137061,137063,137065],{"class":48,"line":60},[46,137058,72763],{"class":180},[46,137060,53404],{"class":56},[46,137062,56702],{"class":180},[46,137064,132043],{"class":56},[46,137066,137067],{"class":2253},"\u002F* 取消表单轮廓线 *\u002F\n",[46,137069,137070],{"class":48,"line":200},[46,137071,3616],{"class":56},[19,137073,137074],{},"此时就无法通过右下方实现拖动了",[479,137076,137078],{"id":137077},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[19,137080,137081],{},"实现一个盒子中的文字和图片对齐",[19,137083,137084,137085,137088],{},"用于设置一个元素的 ",[2339,137086,137087],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[19,137090,137091],{},"图片和文字默认是基线对齐",[3514,137093],{"style":128036,"src":137094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[36,137096,137097],{"className":128180,"code":137046,"language":128182,"meta":41,"style":41},[43,137098,137099,137105,137117],{"__ignoreMap":41},[46,137100,137101,137103],{"class":48,"line":49},[46,137102,55786],{"class":1361},[46,137104,17573],{"class":56},[46,137106,137107,137109,137111,137113,137115],{"class":48,"line":60},[46,137108,72763],{"class":180},[46,137110,53404],{"class":56},[46,137112,56702],{"class":180},[46,137114,132043],{"class":56},[46,137116,137067],{"class":2253},[46,137118,137119],{"class":48,"line":200},[46,137120,3616],{"class":56},[3514,137122],{"style":128036,"src":137123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[23999,137125,137127],{"id":137126},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[19,137129,137130],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[3514,137132],{"style":128036,"src":137133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[19,137135,137136,137137,137140],{},"此时可以给图片、表单这些行内块元素的 ",[2339,137138,137139],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[23999,137142,137144],{"id":137143},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[19,137146,137147],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[19,137149,16635],{},[36,137151,137153],{"className":128180,"code":137152,"language":128182,"meta":41,"style":41},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[43,137154,137155,137160,137166,137178],{"__ignoreMap":41},[46,137156,137157],{"class":48,"line":49},[46,137158,137159],{"class":2253},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[46,137161,137162,137164],{"class":48,"line":60},[46,137163,3514],{"class":1361},[46,137165,17573],{"class":56},[46,137167,137168,137171,137173,137176],{"class":48,"line":200},[46,137169,137170],{"class":180},"  vertical-align",[46,137172,53404],{"class":56},[46,137174,137175],{"class":180},"middle",[46,137177,3345],{"class":56},[46,137179,137180],{"class":48,"line":211},[46,137181,3616],{"class":56},[3514,137183],{"style":128036,"src":137184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[19,137186,137187],{},"主要解决方法有两种：",[23,137189,137190],{},[26,137191,137192,137195,137196,137199],{},[2339,137193,137194],{},"给图片"," 添加 ",[2339,137197,137198],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[19,137201,137202,137203],{},"2.把图片转换为块级元素 ",[2339,137204,137205],{},"display: block",[19,137207,137208],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[19,137210,137211],{},"img {",[19,137213,137214],{},"vertical-align:middle;",[19,137216,3131],{},[479,137218,137220],{"id":137219},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[19,137222,137223],{},"效果：",[3514,137225],{"style":128036,"src":137226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[19,137228,137229],{},"单行文本溢出显示省略号--必须满足三个条件：",[36,137231,137233],{"className":128180,"code":137232,"language":128182,"meta":41,"style":41},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[43,137234,137235,137240,137246,137256,137261,137271],{"__ignoreMap":41},[46,137236,137237],{"class":48,"line":49},[46,137238,137239],{"class":2253},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[46,137241,137242,137244],{"class":48,"line":60},[46,137243,3514],{"class":1361},[46,137245,17573],{"class":56},[46,137247,137248,137250,137252,137254],{"class":48,"line":200},[46,137249,137170],{"class":180},[46,137251,53404],{"class":56},[46,137253,137175],{"class":180},[46,137255,3345],{"class":56},[46,137257,137258],{"class":48,"line":211},[46,137259,137260],{"class":2253},"  \u002F* 或 *\u002F\n",[46,137262,137263,137265,137267,137269],{"class":48,"line":222},[46,137264,129796],{"class":180},[46,137266,53404],{"class":56},[46,137268,62834],{"class":180},[46,137270,3345],{"class":56},[46,137272,137273],{"class":48,"line":636},[46,137274,3616],{"class":56},[479,137276,137278],{"id":137277},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[19,137280,137223],{},[3514,137282],{"style":128036,"src":137283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[19,137285,137286,137287,137290],{},"多行文本溢出显示省略号， ",[2339,137288,137289],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[36,137292,137293],{"className":128180,"code":137232,"language":128182,"meta":41,"style":41},[43,137294,137295,137299,137305,137315,137319,137329],{"__ignoreMap":41},[46,137296,137297],{"class":48,"line":49},[46,137298,137239],{"class":2253},[46,137300,137301,137303],{"class":48,"line":60},[46,137302,3514],{"class":1361},[46,137304,17573],{"class":56},[46,137306,137307,137309,137311,137313],{"class":48,"line":200},[46,137308,137170],{"class":180},[46,137310,53404],{"class":56},[46,137312,137175],{"class":180},[46,137314,3345],{"class":56},[46,137316,137317],{"class":48,"line":211},[46,137318,137260],{"class":2253},[46,137320,137321,137323,137325,137327],{"class":48,"line":222},[46,137322,129796],{"class":180},[46,137324,53404],{"class":56},[46,137326,62834],{"class":180},[46,137328,3345],{"class":56},[46,137330,137331],{"class":48,"line":636},[46,137332,3616],{"class":56},[19,137334,137335],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,137337,137339],{"id":137338},"_133-常见布局技巧","13.3 常见布局技巧",[19,137341,137342],{},[2339,137343,137344],{},"巧妙利用一个技术更快更好的布局：",[23,137346,137347,137350,137353,137356],{},[26,137348,137349],{},"margin负值的运用",[26,137351,137352],{},"文字围绕浮动元素",[26,137354,137355],{},"行内块的巧妙运用",[26,137357,137358],{},"CSS三角强化",[479,137360,137362],{"id":137361},"_1331-margin负值的运用","13.3.1 margin负值的运用",[19,137364,137365],{},"应用场景：",[3514,137367],{"style":128036,"src":137368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[3514,137370],{"style":128036,"src":137371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[19,137373,137374],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[19,137376,137377],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[36,137379,137380],{"className":128180,"code":131544,"language":128182,"meta":41,"style":41},[43,137381,137382,137386,137392,137408],{"__ignoreMap":41},[46,137383,137384],{"class":48,"line":49},[46,137385,131551],{"class":2253},[46,137387,137388,137390],{"class":48,"line":60},[46,137389,53578],{"class":1361},[46,137391,17573],{"class":56},[46,137393,137394,137396,137398,137400,137402,137404,137406],{"class":48,"line":200},[46,137395,72861],{"class":180},[46,137397,53404],{"class":56},[46,137399,2405],{"class":180},[46,137401,53459],{"class":52},[46,137403,53488],{"class":180},[46,137405,131572],{"class":180},[46,137407,3345],{"class":56},[46,137409,137410],{"class":48,"line":211},[46,137411,3616],{"class":56},[3514,137413],{"style":128036,"src":137414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[19,137416,137417],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[36,137419,137421],{"className":128180,"code":137420,"language":128182,"meta":41,"style":41},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[43,137422,137423,137428,137434,137444,137456,137468],{"__ignoreMap":41},[46,137424,137425],{"class":48,"line":49},[46,137426,137427],{"class":2253},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[46,137429,137430,137432],{"class":48,"line":60},[46,137431,132028],{"class":169},[46,137433,17573],{"class":56},[46,137435,137436,137438,137440,137442],{"class":48,"line":200},[46,137437,133986],{"class":180},[46,137439,53404],{"class":56},[46,137441,56729],{"class":180},[46,137443,3345],{"class":56},[46,137445,137446,137448,137450,137452,137454],{"class":48,"line":211},[46,137447,134000],{"class":180},[46,137449,53404],{"class":56},[46,137451,2633],{"class":180},[46,137453,53459],{"class":52},[46,137455,3345],{"class":56},[46,137457,137458,137460,137462,137464,137466],{"class":48,"line":222},[46,137459,134017],{"class":180},[46,137461,53404],{"class":56},[46,137463,2886],{"class":180},[46,137465,53459],{"class":52},[46,137467,3345],{"class":56},[46,137469,137470],{"class":48,"line":636},[46,137471,3616],{"class":56},[19,137473,137474],{},"加上上述代码会发现：",[3514,137476],{"style":128036,"src":137477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[19,137479,137480],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[19,137482,137483],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[36,137485,137486],{"className":128180,"code":137420,"language":128182,"meta":41,"style":41},[43,137487,137488,137492,137498,137508,137520,137532],{"__ignoreMap":41},[46,137489,137490],{"class":48,"line":49},[46,137491,137427],{"class":2253},[46,137493,137494,137496],{"class":48,"line":60},[46,137495,132028],{"class":169},[46,137497,17573],{"class":56},[46,137499,137500,137502,137504,137506],{"class":48,"line":200},[46,137501,133986],{"class":180},[46,137503,53404],{"class":56},[46,137505,56729],{"class":180},[46,137507,3345],{"class":56},[46,137509,137510,137512,137514,137516,137518],{"class":48,"line":211},[46,137511,134000],{"class":180},[46,137513,53404],{"class":56},[46,137515,2633],{"class":180},[46,137517,53459],{"class":52},[46,137519,3345],{"class":56},[46,137521,137522,137524,137526,137528,137530],{"class":48,"line":222},[46,137523,134017],{"class":180},[46,137525,53404],{"class":56},[46,137527,2886],{"class":180},[46,137529,53459],{"class":52},[46,137531,3345],{"class":56},[46,137533,137534],{"class":48,"line":636},[46,137535,3616],{"class":56},[19,137537,137538],{},"解决方式2：",[19,137540,137541],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[36,137543,137545],{"className":128180,"code":137544,"language":128182,"meta":41,"style":41},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[43,137546,137547,137553,137563,137575,137587],{"__ignoreMap":41},[46,137548,137549,137551],{"class":48,"line":49},[46,137550,53578],{"class":1361},[46,137552,17573],{"class":56},[46,137554,137555,137557,137559,137561],{"class":48,"line":60},[46,137556,133986],{"class":180},[46,137558,53404],{"class":56},[46,137560,56729],{"class":180},[46,137562,3345],{"class":56},[46,137564,137565,137567,137569,137571,137573],{"class":48,"line":200},[46,137566,134000],{"class":180},[46,137568,53404],{"class":56},[46,137570,2633],{"class":180},[46,137572,53459],{"class":52},[46,137574,3345],{"class":56},[46,137576,137577,137579,137581,137583,137585],{"class":48,"line":211},[46,137578,134017],{"class":180},[46,137580,53404],{"class":56},[46,137582,2886],{"class":180},[46,137584,53459],{"class":52},[46,137586,3345],{"class":56},[46,137588,137589],{"class":48,"line":222},[46,137590,3616],{"class":56},[479,137592,137594],{"id":137593},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[19,137596,137365],{},[3514,137598],{"style":128036,"src":137599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[19,137601,137602],{},"实现结构图：",[3514,137604],{"style":128036,"src":137605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[19,137607,137608],{},"巧妙运用浮动元素不会压住文字的特性",[19,137610,137611],{},"代码显示：",[36,137613,137615],{"className":128180,"code":137614,"language":128182,"meta":41,"style":41},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[43,137616,137617,137623,137633,137637,137642,137646,137652,137666],{"__ignoreMap":41},[46,137618,137619,137621],{"class":48,"line":49},[46,137620,132028],{"class":169},[46,137622,17573],{"class":56},[46,137624,137625,137627,137629,137631],{"class":48,"line":60},[46,137626,132660],{"class":180},[46,137628,53404],{"class":56},[46,137630,108],{"class":180},[46,137632,3345],{"class":56},[46,137634,137635],{"class":48,"line":200},[46,137636,3616],{"class":56},[46,137638,137639],{"class":48,"line":211},[46,137640,137641],{"class":56},"```Css\n",[46,137643,137644],{"class":48,"line":222},[46,137645,132023],{"class":2253},[46,137647,137648,137650],{"class":48,"line":636},[46,137649,132028],{"class":169},[46,137651,17573],{"class":56},[46,137653,137654,137656,137658,137660,137662,137664],{"class":48,"line":641},[46,137655,72435],{"class":180},[46,137657,53404],{"class":56},[46,137659,2379],{"class":180},[46,137661,53523],{"class":180},[46,137663,132043],{"class":56},[46,137665,132046],{"class":2253},[46,137667,137668],{"class":48,"line":653},[46,137669,3616],{"class":56},[19,137671,137672],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[36,137674,137677],{"className":137675,"code":137676,"language":571},[569],"\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",[43,137678,137676],{"__ignoreMap":41},[3514,137680],{"style":128036,"src":137681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[19,137683,137684],{},"最终展示结果：",[36,137686,137687],{"className":128180,"code":132016,"language":128182,"meta":41,"style":41},[43,137688,137689,137693,137699,137713],{"__ignoreMap":41},[46,137690,137691],{"class":48,"line":49},[46,137692,132023],{"class":2253},[46,137694,137695,137697],{"class":48,"line":60},[46,137696,132028],{"class":169},[46,137698,17573],{"class":56},[46,137700,137701,137703,137705,137707,137709,137711],{"class":48,"line":200},[46,137702,72435],{"class":180},[46,137704,53404],{"class":56},[46,137706,2379],{"class":180},[46,137708,53523],{"class":180},[46,137710,132043],{"class":56},[46,137712,132046],{"class":2253},[46,137714,137715],{"class":48,"line":211},[46,137716,3616],{"class":56},[3514,137718],{"style":128036,"src":137719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,137721,137723],{"id":137722},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[479,137725,137727],{"id":137726},"_1341-原理","13.4.1 原理",[3514,137729],{"style":128036,"src":137730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[36,137732,137733],{"className":128180,"code":132016,"language":128182,"meta":41,"style":41},[43,137734,137735,137739,137745,137759],{"__ignoreMap":41},[46,137736,137737],{"class":48,"line":49},[46,137738,132023],{"class":2253},[46,137740,137741,137743],{"class":48,"line":60},[46,137742,132028],{"class":169},[46,137744,17573],{"class":56},[46,137746,137747,137749,137751,137753,137755,137757],{"class":48,"line":200},[46,137748,72435],{"class":180},[46,137750,53404],{"class":56},[46,137752,2379],{"class":180},[46,137754,53523],{"class":180},[46,137756,132043],{"class":56},[46,137758,132046],{"class":2253},[46,137760,137761],{"class":48,"line":211},[46,137762,3616],{"class":56},[479,137764,137766],{"id":137765},"_1342-实例","13.4.2 实例",[3514,137768],{"style":128036,"src":137769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[36,137771,137772],{"className":128180,"code":132646,"language":128182,"meta":41,"style":41},[43,137773,137774,137780,137790,137794,137800,137810],{"__ignoreMap":41},[46,137775,137776,137778],{"class":48,"line":49},[46,137777,132653],{"class":169},[46,137779,17573],{"class":56},[46,137781,137782,137784,137786,137788],{"class":48,"line":60},[46,137783,132660],{"class":180},[46,137785,53404],{"class":56},[46,137787,108],{"class":180},[46,137789,3345],{"class":56},[46,137791,137792],{"class":48,"line":200},[46,137793,3616],{"class":56},[46,137795,137796,137798],{"class":48,"line":211},[46,137797,132675],{"class":169},[46,137799,17573],{"class":56},[46,137801,137802,137804,137806,137808],{"class":48,"line":222},[46,137803,132660],{"class":180},[46,137805,53404],{"class":56},[46,137807,74487],{"class":180},[46,137809,3345],{"class":56},[46,137811,137812],{"class":48,"line":636},[46,137813,3616],{"class":56},[14,137815,137817],{"id":137816},"_135-css的初始化","13.5 css的初始化",[19,137819,137820],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[19,137822,137823],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[19,137825,137826],{},"每个网页都必须首先进行 CSS初始化。",[19,137828,137829],{},"这里我们以 京东CSS初始化代码为例。",[19,137831,137832],{},"在网页右键查看网页源代码",[19,137834,137835],{},"找到css的link引入语句",[19,137837,137838],{},"然后ctrl+f 输入body",[19,137840,79191],{},[3514,137842],{"style":128036,"src":137843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[19,137845,79214],{},[3514,137847],{"style":128036,"src":137848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[19,137850,137851],{},"③打开了网页上传压缩的代码",[3514,137853],{"style":128036,"src":137854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[19,137856,137857],{},"④从body前可以查看这个网页的初始化代码",[19,137859,137860],{},[2339,137861,137862],{},"Unicode编码字体：",[19,137864,137865],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[19,137867,85170],{},[19,137869,137870],{},"黑体 \\9ED1\\4F53",[19,137872,137873],{},"宋体 \\5B8B\\4F53",[19,137875,137876],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[2098,137878,137879],{},"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":41,"searchDepth":60,"depth":60,"links":137881},[137882,137883,137890,137894,137898],{"id":136679,"depth":60,"text":136680},{"id":136801,"depth":60,"text":136802,"children":137884},[137885,137886,137887,137888,137889],{"id":136805,"depth":200,"text":136806},{"id":136958,"depth":200,"text":136959},{"id":137077,"depth":200,"text":137078},{"id":137219,"depth":200,"text":137220},{"id":137277,"depth":200,"text":137278},{"id":137338,"depth":60,"text":137339,"children":137891},[137892,137893],{"id":137361,"depth":200,"text":137362},{"id":137593,"depth":200,"text":137594},{"id":137722,"depth":60,"text":137723,"children":137895},[137896,137897],{"id":137726,"depth":200,"text":137727},{"id":137765,"depth":200,"text":137766},{"id":137816,"depth":60,"text":137817},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":136671,"description":25378},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":137905,"title":137906,"body":137907,"description":25378,"extension":2125,"meta":139593,"navigation":615,"path":139594,"seo":139595,"stem":139596,"__hash__":139597},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":137908,"toc":139582},[137909,137912,137916,137920,137923,137930,137933,137936,137974,137977,137979,137993,137997,138006,138010,138015,138018,138021,138024,138059,138064,138067,138097,138100,138105,138108,138111,138141,138144,138198,138201,138205,138210,138222,138225,138229,138259,138262,138267,138270,138300,138303,138307,138324,138328,138332,138335,138368,138371,138375,138378,138381,138384,138387,138390,138501,138504,138507,138510,138612,138615,138619,138623,138627,138630,138670,138673,138675,138691,138695,138698,138703,138784,138787,138790,138916,138921,138924,138932,138935,138940,139025,139028,139032,139035,139038,139042,139062,139067,139151,139154,139159,139162,139165,139243,139246,139249,139252,139255,139258,139263,139266,139269,139341,139344,139349,139352,139449,139452,139458,139461,139464,139467,139470,139473,139476,139479,139482,139486,139491,139494,139527,139532,139535,139576,139579],[10,137910,137906],{"id":137911},"_14-html5与css3新特性",[14,137913,137915],{"id":137914},"_141-html5的新特性","14.1 HTML5的新特性",[479,137917,137919],{"id":137918},"_1411-基本标签","14.1.1 基本标签",[19,137921,137922],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[19,137924,137925,137926,137929],{},"这些新特性都有兼容性问题，基本是 ",[2339,137927,137928],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[19,137931,137932],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[19,137934,137935],{},"现在使用的是新特性：",[3191,137937,137938,137944,137950,137956,137962,137968],{},[26,137939,137940,137943],{},[43,137941,137942],{},"\u003Cheader>"," 头部标签",[26,137945,137946,137949],{},[43,137947,137948],{},"\u003Cnav>"," 导航标签",[26,137951,137952,137955],{},[43,137953,137954],{},"\u003Carticle>"," 内容标签",[26,137957,137958,137961],{},[43,137959,137960],{},"\u003Csection>"," 定义文档某个区域",[26,137963,137964,137967],{},[43,137965,137966],{},"\u003Caside>"," 侧边栏标签",[26,137969,137970,137973],{},[43,137971,137972],{},"\u003Cfooter>"," 尾部标签",[3514,137975],{"style":128036,"src":137976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[19,137978,2226],{},[3191,137980,137981,137984,137987,137990],{},[26,137982,137983],{},"这种语义化标准主要是针对搜索引擎的",[26,137985,137986],{},"这些标签页面中可以经常使用",[26,137988,137989],{},"在IE9中，需要把这些元素转换为块级元素",[26,137991,137992],{},"移动端更喜欢使用这些标签",[479,137994,137996],{"id":137995},"_1412-多媒体标签","14.1.2 多媒体标签",[19,137998,137999,138000,138002,138003,138005],{},"音频 ",[2339,138001,30163],{}," 和视频 ",[2339,138004,30172],{}," 两个标签",[23999,138007,138009],{"id":138008},"_14121-视频标签-video","14.1.2.1 视频标签- video",[23,138011,138012],{},[26,138013,138014],{},"支持格式：",[3514,138016],{"style":128036,"src":138017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[19,138019,138020],{},"尽量使用MP4，兼容性好",[19,138022,138023],{},"用MP4就可以",[36,138025,138027],{"className":128927,"code":138026,"language":128929,"meta":41,"style":41},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[43,138028,138029],{"__ignoreMap":41},[46,138030,138031,138033,138035,138037,138039,138042,138044,138047,138050,138053,138055,138057],{"class":48,"line":49},[46,138032,821],{"class":56},[46,138034,30172],{"class":1361},[46,138036,57204],{"class":169},[46,138038,79],{"class":56},[46,138040,138041],{"class":173},"\"movie.mp4\"",[46,138043,94386],{"class":169},[46,138045,138046],{"class":169}," autoplay",[46,138048,138049],{"class":169}," muted",[46,138051,138052],{"class":169}," loop",[46,138054,57279],{"class":56},[46,138056,30172],{"class":1361},[46,138058,53274],{"class":56},[23,138060,138061],{"start":60},[26,138062,138063],{},"兼容写法",[19,138065,138066],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[36,138068,138069],{"className":128927,"code":138026,"language":128929,"meta":41,"style":41},[43,138070,138071],{"__ignoreMap":41},[46,138072,138073,138075,138077,138079,138081,138083,138085,138087,138089,138091,138093,138095],{"class":48,"line":49},[46,138074,821],{"class":56},[46,138076,30172],{"class":1361},[46,138078,57204],{"class":169},[46,138080,79],{"class":56},[46,138082,138041],{"class":173},[46,138084,94386],{"class":169},[46,138086,138046],{"class":169},[46,138088,138049],{"class":169},[46,138090,138052],{"class":169},[46,138092,57279],{"class":56},[46,138094,30172],{"class":1361},[46,138096,53274],{"class":56},[19,138098,138099],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[23,138101,138102],{"start":200},[26,138103,138104],{},"video常用属性",[3514,138106],{"style":128036,"src":138107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[19,138109,138110],{},"poster属性后面是跟的等待加载图片的地址",[36,138112,138113],{"className":128927,"code":135682,"language":128929,"meta":41,"style":41},[43,138114,138115],{"__ignoreMap":41},[46,138116,138117,138119,138121,138123,138125,138127,138129,138131,138133,138135,138137,138139],{"class":48,"line":49},[46,138118,821],{"class":56},[46,138120,3514],{"class":1361},[46,138122,57204],{"class":169},[46,138124,79],{"class":56},[46,138126,135697],{"class":173},[46,138128,57212],{"class":169},[46,138130,79],{"class":56},[46,138132,135704],{"class":173},[46,138134,135707],{"class":169},[46,138136,79],{"class":56},[46,138138,135712],{"class":173},[46,138140,53274],{"class":56},[19,138142,138143],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[36,138145,138147],{"className":128180,"code":138146,"language":128182,"meta":41,"style":41},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[43,138148,138149,138154,138160,138184,138189,138194],{"__ignoreMap":41},[46,138150,138151],{"class":48,"line":49},[46,138152,138153],{"class":2253},"\u002F* 2D 位移 *\u002F\n",[46,138155,138156,138158],{"class":48,"line":60},[46,138157,53578],{"class":1361},[46,138159,17573],{"class":56},[46,138161,138162,138165,138167,138170,138172,138174,138176,138178,138180,138182],{"class":48,"line":200},[46,138163,138164],{"class":180},"  transform",[46,138166,53404],{"class":56},[46,138168,138169],{"class":180},"translate",[46,138171,1152],{"class":56},[46,138173,1155],{"class":180},[46,138175,53459],{"class":52},[46,138177,448],{"class":56},[46,138179,2842],{"class":180},[46,138181,53459],{"class":52},[46,138183,4740],{"class":56},[46,138185,138186],{"class":48,"line":211},[46,138187,138188],{"class":2253},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[46,138190,138191],{"class":48,"line":222},[46,138192,138193],{"class":2253},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[46,138195,138196],{"class":48,"line":636},[46,138197,3616],{"class":56},[19,138199,138200],{},"muted:自动静音属性",[23999,138202,138204],{"id":138203},"_14122-音频标签audio","14.1.2.2 音频标签audio",[23,138206,138207],{},[26,138208,138209],{},"基本使用",[19,138211,138212,138213,138218,138219],{},"当前 ",[2339,138214,138215],{},[43,138216,138217],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[2339,138220,138221],{},"mp3格式",[3514,138223],{"style":128036,"src":138224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[23,138226,138227],{"start":60},[26,138228,138063],{},[36,138230,138231],{"className":128927,"code":138026,"language":128929,"meta":41,"style":41},[43,138232,138233],{"__ignoreMap":41},[46,138234,138235,138237,138239,138241,138243,138245,138247,138249,138251,138253,138255,138257],{"class":48,"line":49},[46,138236,821],{"class":56},[46,138238,30172],{"class":1361},[46,138240,57204],{"class":169},[46,138242,79],{"class":56},[46,138244,138041],{"class":173},[46,138246,94386],{"class":169},[46,138248,138046],{"class":169},[46,138250,138049],{"class":169},[46,138252,138052],{"class":169},[46,138254,57279],{"class":56},[46,138256,30172],{"class":1361},[46,138258,53274],{"class":56},[19,138260,138261],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[23,138263,138264],{"start":200},[26,138265,138266],{},"常用属性",[3514,138268],{"style":128036,"src":138269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[36,138271,138272],{"className":128927,"code":138026,"language":128929,"meta":41,"style":41},[43,138273,138274],{"__ignoreMap":41},[46,138275,138276,138278,138280,138282,138284,138286,138288,138290,138292,138294,138296,138298],{"class":48,"line":49},[46,138277,821],{"class":56},[46,138279,30172],{"class":1361},[46,138281,57204],{"class":169},[46,138283,79],{"class":56},[46,138285,138041],{"class":173},[46,138287,94386],{"class":169},[46,138289,138046],{"class":169},[46,138291,138049],{"class":169},[46,138293,138052],{"class":169},[46,138295,57279],{"class":56},[46,138297,30172],{"class":1361},[46,138299,53274],{"class":56},[19,138301,138302],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[23999,138304,138306],{"id":138305},"_14123-总结","14.1.2.3 总结",[3191,138308,138309,138312,138315,138318,138321],{},[26,138310,138311],{},"音频标签和视频标签使用方式基本一致",[26,138313,138314],{},"浏览器支持情况不同",[26,138316,138317],{},"谷歌浏览器把音频和视频自动播放禁止了",[26,138319,138320],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[26,138322,138323],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[479,138325,138327],{"id":138326},"_1413-表单元素","14.1.3 表单元素",[23999,138329,138331],{"id":138330},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[3514,138333],{"style":128036,"src":138334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[36,138336,138338],{"className":128927,"code":138337,"language":128929,"meta":41,"style":41},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[43,138339,138340],{"__ignoreMap":41},[46,138341,138342,138344,138346,138348,138350,138352,138354,138356,138359,138361,138363,138366],{"class":48,"line":49},[46,138343,821],{"class":56},[46,138345,55786],{"class":1361},[46,138347,55789],{"class":169},[46,138349,79],{"class":56},[46,138351,64664],{"class":173},[46,138353,1364],{"class":169},[46,138355,79],{"class":56},[46,138357,138358],{"class":173},"\"username\"",[46,138360,62985],{"class":169},[46,138362,79],{"class":56},[46,138364,138365],{"class":173},"\"请输入用户名\"",[46,138367,53274],{"class":56},[3514,138369],{"style":128036,"src":138370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[23999,138372,138374],{"id":138373},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[3514,138376],{"style":128036,"src":138377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[19,138379,138380],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[19,138382,138383],{},"快捷操作：",[3514,138385],{"style":128036,"src":138386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[19,138388,138389],{},"例子1：",[36,138391,138393],{"className":128927,"code":138392,"language":128929,"meta":41,"style":41},"\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",[43,138394,138395,138418,138445,138474,138493],{"__ignoreMap":41},[46,138396,138397,138399,138401,138403,138405,138408,138411,138413,138416],{"class":48,"line":49},[46,138398,821],{"class":56},[46,138400,68590],{"class":1361},[46,138402,68593],{"class":169},[46,138404,79],{"class":56},[46,138406,138407],{"class":173},"\"\u002Fsubmit\"",[46,138409,138410],{"class":169}," method",[46,138412,79],{"class":56},[46,138414,138415],{"class":173},"\"post\"",[46,138417,53274],{"class":56},[46,138419,138420,138422,138424,138426,138428,138430,138432,138434,138436,138438,138440,138443],{"class":48,"line":60},[46,138421,54111],{"class":56},[46,138423,55786],{"class":1361},[46,138425,55789],{"class":169},[46,138427,79],{"class":56},[46,138429,64664],{"class":173},[46,138431,1364],{"class":169},[46,138433,79],{"class":56},[46,138435,138358],{"class":173},[46,138437,62985],{"class":169},[46,138439,79],{"class":56},[46,138441,138442],{"class":173},"\"用户名\"",[46,138444,53274],{"class":56},[46,138446,138447,138449,138451,138453,138455,138458,138460,138462,138465,138467,138469,138472],{"class":48,"line":200},[46,138448,54111],{"class":56},[46,138450,55786],{"class":1361},[46,138452,55789],{"class":169},[46,138454,79],{"class":56},[46,138456,138457],{"class":173},"\"password\"",[46,138459,1364],{"class":169},[46,138461,79],{"class":56},[46,138463,138464],{"class":173},"\"pwd\"",[46,138466,62985],{"class":169},[46,138468,79],{"class":56},[46,138470,138471],{"class":173},"\"密码\"",[46,138473,53274],{"class":56},[46,138475,138476,138478,138480,138482,138484,138486,138489,138491],{"class":48,"line":211},[46,138477,54111],{"class":56},[46,138479,55852],{"class":1361},[46,138481,55789],{"class":169},[46,138483,79],{"class":56},[46,138485,68613],{"class":173},[46,138487,138488],{"class":56},">提交\u003C\u002F",[46,138490,55852],{"class":1361},[46,138492,53274],{"class":56},[46,138494,138495,138497,138499],{"class":48,"line":222},[46,138496,53752],{"class":56},[46,138498,68590],{"class":1361},[46,138500,53274],{"class":56},[3514,138502],{"style":128036,"src":138503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[19,138505,138506],{},"value是表单域的内容",[19,138508,138509],{},"例子2：",[36,138511,138512],{"className":128927,"code":138392,"language":128929,"meta":41,"style":41},[43,138513,138514,138534,138560,138586,138604],{"__ignoreMap":41},[46,138515,138516,138518,138520,138522,138524,138526,138528,138530,138532],{"class":48,"line":49},[46,138517,821],{"class":56},[46,138519,68590],{"class":1361},[46,138521,68593],{"class":169},[46,138523,79],{"class":56},[46,138525,138407],{"class":173},[46,138527,138410],{"class":169},[46,138529,79],{"class":56},[46,138531,138415],{"class":173},[46,138533,53274],{"class":56},[46,138535,138536,138538,138540,138542,138544,138546,138548,138550,138552,138554,138556,138558],{"class":48,"line":60},[46,138537,54111],{"class":56},[46,138539,55786],{"class":1361},[46,138541,55789],{"class":169},[46,138543,79],{"class":56},[46,138545,64664],{"class":173},[46,138547,1364],{"class":169},[46,138549,79],{"class":56},[46,138551,138358],{"class":173},[46,138553,62985],{"class":169},[46,138555,79],{"class":56},[46,138557,138442],{"class":173},[46,138559,53274],{"class":56},[46,138561,138562,138564,138566,138568,138570,138572,138574,138576,138578,138580,138582,138584],{"class":48,"line":200},[46,138563,54111],{"class":56},[46,138565,55786],{"class":1361},[46,138567,55789],{"class":169},[46,138569,79],{"class":56},[46,138571,138457],{"class":173},[46,138573,1364],{"class":169},[46,138575,79],{"class":56},[46,138577,138464],{"class":173},[46,138579,62985],{"class":169},[46,138581,79],{"class":56},[46,138583,138471],{"class":173},[46,138585,53274],{"class":56},[46,138587,138588,138590,138592,138594,138596,138598,138600,138602],{"class":48,"line":211},[46,138589,54111],{"class":56},[46,138591,55852],{"class":1361},[46,138593,55789],{"class":169},[46,138595,79],{"class":56},[46,138597,68613],{"class":173},[46,138599,138488],{"class":56},[46,138601,55852],{"class":1361},[46,138603,53274],{"class":56},[46,138605,138606,138608,138610],{"class":48,"line":222},[46,138607,53752],{"class":56},[46,138609,68590],{"class":1361},[46,138611,53274],{"class":56},[3514,138613],{"style":128036,"src":138614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,138616,138618],{"id":138617},"_142-css新特性","14.2 CSS新特性",[479,138620,138622],{"id":138621},"_1421-新增选择器","14.2.1 新增选择器",[23999,138624,138626],{"id":138625},"_14211-属性选择器","14.2.1.1 属性选择器",[3514,138628],{"style":128036,"src":138629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[36,138631,138633],{"className":128180,"code":138632,"language":128182,"meta":41,"style":41},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[43,138634,138635,138650,138666],{"__ignoreMap":41},[46,138636,138637,138639,138641,138643,138645,138647],{"class":48,"line":49},[46,138638,55786],{"class":1361},[46,138640,3076],{"class":56},[46,138642,104997],{"class":169},[46,138644,79],{"class":52},[46,138646,64664],{"class":173},[46,138648,138649],{"class":56},"] {\n",[46,138651,138652,138654,138656,138658,138660,138662,138664],{"class":48,"line":60},[46,138653,72861],{"class":180},[46,138655,53404],{"class":56},[46,138657,2405],{"class":180},[46,138659,53459],{"class":52},[46,138661,53488],{"class":180},[46,138663,131760],{"class":180},[46,138665,3345],{"class":56},[46,138667,138668],{"class":48,"line":200},[46,138669,3616],{"class":56},[3514,138671],{"style":128036,"src":138672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[19,138674,2226],{},[3191,138676,138677,138680,138683,138686],{},[26,138678,138679],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[26,138681,138682],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[26,138684,138685],{},"属性选择器也可以选择出来自定义的属性",[26,138687,138688,138690],{},[2339,138689,11029],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[23999,138692,138694],{"id":138693},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[3514,138696],{"style":128036,"src":138697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[23,138699,138700],{},[26,138701,138702],{},"fist-child",[36,138704,138706],{"className":128180,"code":138705,"language":128182,"meta":41,"style":41},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[43,138707,138708,138713,138728,138748,138766],{"__ignoreMap":41},[46,138709,138710],{"class":48,"line":49},[46,138711,138712],{"class":2253},"\u002F* 属性选择器 *\u002F\n",[46,138714,138715,138717,138719,138721,138723,138725],{"class":48,"line":60},[46,138716,55786],{"class":1361},[46,138718,3076],{"class":56},[46,138720,104997],{"class":169},[46,138722,79],{"class":52},[46,138724,64664],{"class":173},[46,138726,138727],{"class":56},"] { }\n",[46,138729,138730,138732,138734,138736,138739,138742,138745],{"class":48,"line":200},[46,138731,55786],{"class":1361},[46,138733,3076],{"class":56},[46,138735,16696],{"class":169},[46,138737,138738],{"class":52},"^=",[46,138740,138741],{"class":173},"\"icon\"",[46,138743,138744],{"class":56},"] { }  ",[46,138746,138747],{"class":2253},"\u002F* 以 icon 开头 *\u002F\n",[46,138749,138750,138752,138754,138756,138759,138761,138763],{"class":48,"line":211},[46,138751,55786],{"class":1361},[46,138753,3076],{"class":56},[46,138755,16696],{"class":169},[46,138757,138758],{"class":52},"$=",[46,138760,138741],{"class":173},[46,138762,138744],{"class":56},[46,138764,138765],{"class":2253},"\u002F* 以 icon 结尾 *\u002F\n",[46,138767,138768,138770,138772,138774,138777,138779,138781],{"class":48,"line":222},[46,138769,55786],{"class":1361},[46,138771,3076],{"class":56},[46,138773,16696],{"class":169},[46,138775,138776],{"class":52},"*=",[46,138778,138741],{"class":173},[46,138780,138744],{"class":56},[46,138782,138783],{"class":2253},"\u002F* 包含 icon *\u002F\n",[19,138785,138786],{},"ul的第一个儿子文本为红色",[19,138788,138789],{},"一定要在冒号前加空格，不然就是选中所有的了",[36,138791,138793],{"className":128180,"code":138792,"language":128182,"meta":41,"style":41},".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",[43,138794,138795,138801,138811,138815,138819,138824,138837,138850,138866,138883,138900],{"__ignoreMap":41},[46,138796,138797,138799],{"class":48,"line":49},[46,138798,128471],{"class":169},[46,138800,17573],{"class":56},[46,138802,138803,138805,138807,138809],{"class":48,"line":60},[46,138804,72870],{"class":180},[46,138806,53404],{"class":56},[46,138808,59386],{"class":180},[46,138810,3345],{"class":56},[46,138812,138813],{"class":48,"line":200},[46,138814,3616],{"class":56},[46,138816,138817],{"class":48,"line":211},[46,138818,137641],{"class":56},[46,138820,138821],{"class":48,"line":222},[46,138822,138823],{"class":2253},"\u002F* 结构伪类选择器 *\u002F\n",[46,138825,138826,138828,138831,138834],{"class":48,"line":636},[46,138827,26],{"class":1361},[46,138829,138830],{"class":169},":first-child",[46,138832,138833],{"class":56}," { }           ",[46,138835,138836],{"class":2253},"\u002F* 第一个 *\u002F\n",[46,138838,138839,138841,138844,138847],{"class":48,"line":641},[46,138840,26],{"class":1361},[46,138842,138843],{"class":169},":last-child",[46,138845,138846],{"class":56}," { }            ",[46,138848,138849],{"class":2253},"\u002F* 最后一个 *\u002F\n",[46,138851,138852,138854,138856,138858,138860,138863],{"class":48,"line":653},[46,138853,26],{"class":1361},[46,138855,131094],{"class":169},[46,138857,1152],{"class":56},[46,138859,2272],{"class":180},[46,138861,138862],{"class":56},") { }          ",[46,138864,138865],{"class":2253},"\u002F* 第2个 *\u002F\n",[46,138867,138868,138870,138872,138874,138877,138880],{"class":48,"line":659},[46,138869,26],{"class":1361},[46,138871,131094],{"class":169},[46,138873,1152],{"class":56},[46,138875,138876],{"class":180},"2n",[46,138878,138879],{"class":56},") { }         ",[46,138881,138882],{"class":2253},"\u002F* 偶数 *\u002F\n",[46,138884,138885,138887,138889,138891,138894,138897],{"class":48,"line":665},[46,138886,26],{"class":1361},[46,138888,131094],{"class":169},[46,138890,1152],{"class":56},[46,138892,138893],{"class":180},"2n+1",[46,138895,138896],{"class":56},") { }       ",[46,138898,138899],{"class":2253},"\u002F* 奇数 *\u002F\n",[46,138901,138902,138904,138906,138908,138911,138913],{"class":48,"line":670},[46,138903,26],{"class":1361},[46,138905,131094],{"class":169},[46,138907,1152],{"class":56},[46,138909,138910],{"class":180},"-n+3",[46,138912,138896],{"class":56},[46,138914,138915],{"class":2253},"\u002F* 前3个 *\u002F\n",[53578,138917,138920],{"className":138918},[138919],"example","\n  示例内容\n",[19,138922,138923],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[3191,138925,138926],{},[26,138927,138928,138931],{},[43,138929,138930],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[19,138933,138934],{},"也就是说它选择的是熊大",[23,138936,138937],{"start":636},[26,138938,138939],{},"权重",[36,138941,138943],{"className":128180,"code":138942,"language":128182,"meta":41,"style":41},"\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",[43,138944,138945,138949,138959,138969,138983,138997,139011],{"__ignoreMap":41},[46,138946,138947],{"class":48,"line":49},[46,138948,138823],{"class":2253},[46,138950,138951,138953,138955,138957],{"class":48,"line":60},[46,138952,26],{"class":1361},[46,138954,138830],{"class":169},[46,138956,138833],{"class":56},[46,138958,138836],{"class":2253},[46,138960,138961,138963,138965,138967],{"class":48,"line":200},[46,138962,26],{"class":1361},[46,138964,138843],{"class":169},[46,138966,138846],{"class":56},[46,138968,138849],{"class":2253},[46,138970,138971,138973,138975,138977,138979,138981],{"class":48,"line":211},[46,138972,26],{"class":1361},[46,138974,131094],{"class":169},[46,138976,1152],{"class":56},[46,138978,2272],{"class":180},[46,138980,138862],{"class":56},[46,138982,138865],{"class":2253},[46,138984,138985,138987,138989,138991,138993,138995],{"class":48,"line":222},[46,138986,26],{"class":1361},[46,138988,131094],{"class":169},[46,138990,1152],{"class":56},[46,138992,138876],{"class":180},[46,138994,138879],{"class":56},[46,138996,138882],{"class":2253},[46,138998,138999,139001,139003,139005,139007,139009],{"class":48,"line":636},[46,139000,26],{"class":1361},[46,139002,131094],{"class":169},[46,139004,1152],{"class":56},[46,139006,138893],{"class":180},[46,139008,138896],{"class":56},[46,139010,138899],{"class":2253},[46,139012,139013,139015,139017,139019,139021,139023],{"class":48,"line":641},[46,139014,26],{"class":1361},[46,139016,131094],{"class":169},[46,139018,1152],{"class":56},[46,139020,138910],{"class":180},[46,139022,138896],{"class":56},[46,139024,138915],{"class":2253},[19,139026,139027],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[23999,139029,139031],{"id":139030},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[19,139033,139034],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[3514,139036],{"style":128036,"src":139037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[23,139039,139040],{},[26,139041,2226],{},[3191,139043,139044,139047,139050,139053,139056,139059],{},[26,139045,139046],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[26,139048,139049],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[26,139051,139052],{},"语法： element::before {}",[26,139054,139055],{},"before 和 after 必须有 content 属性",[26,139057,139058],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[26,139060,139061],{},"伪元素选择器和标签选择器一样，权重为 1",[23,139063,139064],{"start":60},[26,139065,139066],{},"实例",[36,139068,139069],{"className":128180,"code":138942,"language":128182,"meta":41,"style":41},[43,139070,139071,139075,139085,139095,139109,139123,139137],{"__ignoreMap":41},[46,139072,139073],{"class":48,"line":49},[46,139074,138823],{"class":2253},[46,139076,139077,139079,139081,139083],{"class":48,"line":60},[46,139078,26],{"class":1361},[46,139080,138830],{"class":169},[46,139082,138833],{"class":56},[46,139084,138836],{"class":2253},[46,139086,139087,139089,139091,139093],{"class":48,"line":200},[46,139088,26],{"class":1361},[46,139090,138843],{"class":169},[46,139092,138846],{"class":56},[46,139094,138849],{"class":2253},[46,139096,139097,139099,139101,139103,139105,139107],{"class":48,"line":211},[46,139098,26],{"class":1361},[46,139100,131094],{"class":169},[46,139102,1152],{"class":56},[46,139104,2272],{"class":180},[46,139106,138862],{"class":56},[46,139108,138865],{"class":2253},[46,139110,139111,139113,139115,139117,139119,139121],{"class":48,"line":222},[46,139112,26],{"class":1361},[46,139114,131094],{"class":169},[46,139116,1152],{"class":56},[46,139118,138876],{"class":180},[46,139120,138879],{"class":56},[46,139122,138882],{"class":2253},[46,139124,139125,139127,139129,139131,139133,139135],{"class":48,"line":636},[46,139126,26],{"class":1361},[46,139128,131094],{"class":169},[46,139130,1152],{"class":56},[46,139132,138893],{"class":180},[46,139134,138896],{"class":56},[46,139136,138899],{"class":2253},[46,139138,139139,139141,139143,139145,139147,139149],{"class":48,"line":641},[46,139140,26],{"class":1361},[46,139142,131094],{"class":169},[46,139144,1152],{"class":56},[46,139146,138910],{"class":180},[46,139148,138896],{"class":56},[46,139150,138915],{"class":2253},[3514,139152],{"style":128036,"src":139153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[23,139155,139156],{"start":200},[26,139157,139158],{},"使用场景1",[3514,139160],{"style":128036,"src":139161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[19,139163,139164],{},"不需要再加盒子来整红色那部分了",[36,139166,139168],{"className":128180,"code":139167,"language":128182,"meta":41,"style":41},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[43,139169,139170,139175,139184,139195,139205,139209,139218,139229,139239],{"__ignoreMap":41},[46,139171,139172],{"class":48,"line":49},[46,139173,139174],{"class":2253},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[46,139176,139177,139179,139182],{"class":48,"line":60},[46,139178,53578],{"class":1361},[46,139180,139181],{"class":169},"::before",[46,139183,17573],{"class":56},[46,139185,139186,139189,139191,139193],{"class":48,"line":200},[46,139187,139188],{"class":180},"  content",[46,139190,53404],{"class":56},[46,139192,9665],{"class":173},[46,139194,3345],{"class":56},[46,139196,139197,139199,139201,139203],{"class":48,"line":211},[46,139198,129796],{"class":180},[46,139200,53404],{"class":56},[46,139202,62834],{"class":180},[46,139204,3345],{"class":56},[46,139206,139207],{"class":48,"line":222},[46,139208,3616],{"class":56},[46,139210,139211,139213,139216],{"class":48,"line":636},[46,139212,53578],{"class":1361},[46,139214,139215],{"class":169},"::after",[46,139217,17573],{"class":56},[46,139219,139220,139222,139224,139227],{"class":48,"line":641},[46,139221,139188],{"class":180},[46,139223,53404],{"class":56},[46,139225,139226],{"class":173},"\"→\"",[46,139228,3345],{"class":56},[46,139230,139231,139233,139235,139237],{"class":48,"line":653},[46,139232,72870],{"class":180},[46,139234,53404],{"class":56},[46,139236,64035],{"class":180},[46,139238,3345],{"class":56},[46,139240,139241],{"class":48,"line":659},[46,139242,3616],{"class":56},[3514,139244],{"style":128036,"src":139245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[19,139247,139248],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[3514,139250],{"style":128036,"src":139251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[19,139253,139254],{},"但是在引用时需要先转义一下",[19,139256,139257],{},"content='\\e930'",[23,139259,139260],{"start":211},[26,139261,139262],{},"使用场景2",[19,139264,139265],{},"仿土豆效果",[19,139267,139268],{},"通过使用伪元素选择器可以减少body中盒子的数量",[36,139270,139271],{"className":128180,"code":139167,"language":128182,"meta":41,"style":41},[43,139272,139273,139277,139285,139295,139305,139309,139317,139327,139337],{"__ignoreMap":41},[46,139274,139275],{"class":48,"line":49},[46,139276,139174],{"class":2253},[46,139278,139279,139281,139283],{"class":48,"line":60},[46,139280,53578],{"class":1361},[46,139282,139181],{"class":169},[46,139284,17573],{"class":56},[46,139286,139287,139289,139291,139293],{"class":48,"line":200},[46,139288,139188],{"class":180},[46,139290,53404],{"class":56},[46,139292,9665],{"class":173},[46,139294,3345],{"class":56},[46,139296,139297,139299,139301,139303],{"class":48,"line":211},[46,139298,129796],{"class":180},[46,139300,53404],{"class":56},[46,139302,62834],{"class":180},[46,139304,3345],{"class":56},[46,139306,139307],{"class":48,"line":222},[46,139308,3616],{"class":56},[46,139310,139311,139313,139315],{"class":48,"line":636},[46,139312,53578],{"class":1361},[46,139314,139215],{"class":169},[46,139316,17573],{"class":56},[46,139318,139319,139321,139323,139325],{"class":48,"line":641},[46,139320,139188],{"class":180},[46,139322,53404],{"class":56},[46,139324,139226],{"class":173},[46,139326,3345],{"class":56},[46,139328,139329,139331,139333,139335],{"class":48,"line":653},[46,139330,72870],{"class":180},[46,139332,53404],{"class":56},[46,139334,64035],{"class":180},[46,139336,3345],{"class":56},[46,139338,139339],{"class":48,"line":659},[46,139340,3616],{"class":56},[3514,139342],{"style":128036,"src":139343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[23,139345,139346],{"start":222},[26,139347,139348],{},"使用场景3",[19,139350,139351],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[36,139353,139355],{"className":128180,"code":139354,"language":128182,"meta":41,"style":41},".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",[43,139356,139357,139363,139373,139377,139381,139385,139393,139403,139413,139417,139425,139435,139445],{"__ignoreMap":41},[46,139358,139359,139361],{"class":48,"line":49},[46,139360,132028],{"class":169},[46,139362,17573],{"class":56},[46,139364,139365,139367,139369,139371],{"class":48,"line":60},[46,139366,132660],{"class":180},[46,139368,53404],{"class":56},[46,139370,108],{"class":180},[46,139372,3345],{"class":56},[46,139374,139375],{"class":48,"line":200},[46,139376,3616],{"class":56},[46,139378,139379],{"class":48,"line":211},[46,139380,137641],{"class":56},[46,139382,139383],{"class":48,"line":222},[46,139384,139174],{"class":2253},[46,139386,139387,139389,139391],{"class":48,"line":636},[46,139388,53578],{"class":1361},[46,139390,139181],{"class":169},[46,139392,17573],{"class":56},[46,139394,139395,139397,139399,139401],{"class":48,"line":641},[46,139396,139188],{"class":180},[46,139398,53404],{"class":56},[46,139400,9665],{"class":173},[46,139402,3345],{"class":56},[46,139404,139405,139407,139409,139411],{"class":48,"line":653},[46,139406,129796],{"class":180},[46,139408,53404],{"class":56},[46,139410,62834],{"class":180},[46,139412,3345],{"class":56},[46,139414,139415],{"class":48,"line":659},[46,139416,3616],{"class":56},[46,139418,139419,139421,139423],{"class":48,"line":665},[46,139420,53578],{"class":1361},[46,139422,139215],{"class":169},[46,139424,17573],{"class":56},[46,139426,139427,139429,139431,139433],{"class":48,"line":670},[46,139428,139188],{"class":180},[46,139430,53404],{"class":56},[46,139432,139226],{"class":173},[46,139434,3345],{"class":56},[46,139436,139437,139439,139441,139443],{"class":48,"line":676},[46,139438,72870],{"class":180},[46,139440,53404],{"class":56},[46,139442,64035],{"class":180},[46,139444,3345],{"class":56},[46,139446,139447],{"class":48,"line":682},[46,139448,3616],{"class":56},[19,139450,139451],{},"div {\nmargin: 0 auto;\n}",[36,139453,139456],{"className":139454,"code":139455,"language":571},[569],"\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",[43,139457,139455],{"__ignoreMap":41},[19,139459,139460],{},"如果想让多个元素都发生变化",[19,139462,139463],{},"不能如下操作：",[19,139465,139466],{},"transition: width 2s ease 0.5s;",[19,139468,139469],{},"transition: height 2s ease 0.5s;不对！！！",[19,139471,139472],{},"上方会样式冲突，导致不显示任何过渡效果",[19,139474,139475],{},"使用如下：加逗号隔开",[19,139477,139478],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[19,139480,139481],{},"transition all 2s ease;",[479,139483,139485],{"id":139484},"_1426-过渡练习","14.2.6 过渡练习",[23,139487,139488],{},[26,139489,139490],{},"进度条",[3514,139492],{"style":128036,"src":139493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[36,139495,139497],{"className":128180,"code":139496,"language":128182,"meta":41,"style":41},"div {\n  transition: all 0.3s ease;\n}\n",[43,139498,139499,139505,139523],{"__ignoreMap":41},[46,139500,139501,139503],{"class":48,"line":49},[46,139502,53578],{"class":1361},[46,139504,17573],{"class":56},[46,139506,139507,139510,139512,139514,139517,139519,139521],{"class":48,"line":60},[46,139508,139509],{"class":180},"  transition",[46,139511,53404],{"class":56},[46,139513,30110],{"class":180},[46,139515,139516],{"class":180}," 0.3",[46,139518,2881],{"class":52},[46,139520,80645],{"class":180},[46,139522,3345],{"class":56},[46,139524,139525],{"class":48,"line":200},[46,139526,3616],{"class":56},[23,139528,139529],{"start":60},[26,139530,139531],{},"小米logo",[19,139533,139534],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[36,139536,139538],{"className":128180,"code":139537,"language":128182,"meta":41,"style":41},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[43,139539,139540,139545,139551,139567,139572],{"__ignoreMap":41},[46,139541,139542],{"class":48,"line":49},[46,139543,139544],{"class":2253},"\u002F* CSS3 过渡 *\u002F\n",[46,139546,139547,139549],{"class":48,"line":60},[46,139548,53578],{"class":1361},[46,139550,17573],{"class":56},[46,139552,139553,139555,139557,139559,139561,139563,139565],{"class":48,"line":200},[46,139554,139509],{"class":180},[46,139556,53404],{"class":56},[46,139558,30110],{"class":180},[46,139560,139516],{"class":180},[46,139562,2881],{"class":52},[46,139564,80645],{"class":180},[46,139566,3345],{"class":56},[46,139568,139569],{"class":48,"line":211},[46,139570,139571],{"class":2253},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[46,139573,139574],{"class":48,"line":222},[46,139575,3616],{"class":56},[19,139577,139578],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[2098,139580,139581],{},"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":41,"searchDepth":60,"depth":60,"links":139583},[139584,139589],{"id":137914,"depth":60,"text":137915,"children":139585},[139586,139587,139588],{"id":137918,"depth":200,"text":137919},{"id":137995,"depth":200,"text":137996},{"id":138326,"depth":200,"text":138327},{"id":138617,"depth":60,"text":138618,"children":139590},[139591,139592],{"id":138621,"depth":200,"text":138622},{"id":139484,"depth":200,"text":139485},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":137906,"description":25378},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":139599,"title":139600,"body":139601,"description":25378,"extension":2125,"meta":141345,"navigation":615,"path":141346,"seo":141347,"stem":141348,"__hash__":141349},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":139602,"toc":141326},[139603,139606,139610,139613,139619,139625,139629,139631,139634,139637,139640,139643,139646,139649,139652,139656,139660,139663,139666,139669,139673,139676,139679,139684,139687,139690,139693,139697,139700,139709,139712,139715,139719,139722,139725,139730,139737,139751,139759,139766,139771,139774,139777,139780,139787,139791,139797,139803,139806,139809,139814,139820,139822,139830,139835,139838,139844,139846,139851,139856,139859,139861,139866,139869,139874,139879,139913,139917,139921,139924,139928,139931,140017,140020,140057,140060,140096,140100,140105,140118,140172,140174,140202,140204,140232,140238,140252,140254,140298,140300,140344,140347,140354,140365,140367,140394,140396,140422,140429,140445,140447,140541,140543,140637,140644,140647,140652,140658,140732,140735,140737,140773,140775,140811,140814,140821,140840,140843,140846,140848,140873,140875,140899,140902,140905,140935,140939,140942,141005,141007,141073,141075,141139,141142,141174,141176,141202,141204,141230,141233,141264,141266,141292,141294,141320,141323],[10,139604,139600],{"id":139605},"_15-品优购项目上篇-搭建与公共模块",[14,139607,139609],{"id":139608},"_151-项目规划","15.1 项目规划",[3514,139611],{"style":128036,"src":139612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[19,139614,139615,139618],{},[2339,139616,139617],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[19,139620,139621,139624],{},[2339,139622,139623],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,139626,139628],{"id":139627},"_152-项目介绍","15.2 项目介绍",[19,139630,139617],{},[3514,139632],{"style":128036,"src":139633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[19,139635,139636],{},"主页：",[3514,139638],{"style":128036,"src":139639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[19,139641,139642],{},"列表页：",[3514,139644],{"style":128036,"src":139645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[19,139647,139648],{},"注册页：",[3514,139650],{"style":128036,"src":139651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,139653,139655],{"id":139654},"_153-项目搭建工作","15.3 项目搭建工作",[479,139657,139659],{"id":139658},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[3514,139661],{"style":128036,"src":139662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[19,139664,139665],{},"经常更换的图片要放到upload文件夹中",[19,139667,139668],{},"不经常换的放到images文件夹中",[479,139670,139672],{"id":139671},"_1532-创建文件如下","15.3.2 创建文件如下",[3514,139674],{"style":128036,"src":139675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[3514,139677],{"style":128036,"src":139678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[19,139680,139681],{},[2339,139682,139683],{},"初始化样式：",[19,139685,139686],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[19,139688,139689],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[19,139691,139692],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[479,139694,139696],{"id":139695},"_1533-项目模块化开发","15.3.3 项目模块化开发",[19,139698,139699],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[19,139701,139702,139703,139708],{},"这里最典型的应用就是 ",[2339,139704,139705],{},[43,139706,139707],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[3514,139710],{"style":128036,"src":139711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[19,139713,139714],{},"通过link方法来引入",[479,139716,139718],{"id":139717},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[3514,139720],{"style":128036,"src":139721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[19,139723,139724],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[23,139726,139727],{},[26,139728,139729],{},"制作favicon图标",[19,139731,139732,139733,139736],{},"①把品优购图标切成 ",[43,139734,139735],{},"png"," 图片",[19,139738,139739,139740,139742,139743,139746,139747],{},"②把 ",[43,139741,139735],{}," 图片转换为 ",[43,139744,139745],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[2426,139748,139749],{"href":139749,"rel":139750},"http:\u002F\u002Fwww.bitbug.net\u002F",[25862],[23,139752,139753,139756],{"start":60},[26,139754,139755],{},"favicon图标放到网站根目录下",[26,139757,139758],{},"HTML页面引入favicon",[19,139760,139761,139762,139765],{},"在html 页面里面的 ",[43,139763,139764],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[19,139767,139768],{},[43,139769,139770],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[19,139772,139773],{},"复制这行代码或者在生成这个的网站进行复制",[3514,139775],{"style":128036,"src":139776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[19,139778,139779],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[19,139781,139782,139783],{},"例如:",[2426,139784,139785],{"href":139785,"rel":139786},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[25862],[479,139788,139790],{"id":139789},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[19,139792,139793,139796],{},[2339,139794,139795],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[19,139798,139799,139802],{},[2339,139800,139801],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[19,139804,139805],{},"页面必须有三个标签用来符合 SEO 优化",[3514,139807],{"style":128036,"src":139808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[23,139810,139811],{},[26,139812,139813],{},"title网站标题",[19,139815,139816,139819],{},[2339,139817,139818],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[19,139821,70755],{},[3191,139823,139824,139827],{},[26,139825,139826],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[26,139828,139829],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[23,139831,139832],{"start":60},[26,139833,139834],{},"description网站描述",[19,139836,139837],{},"简要说明我们网站主要是做什么的",[19,139839,139840,139843],{},[2339,139841,139842],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[19,139845,70755],{},[19,139847,139848],{},[43,139849,139850],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[23,139852,139853],{"start":200},[26,139854,139855],{},"keywords关键词",[19,139857,139858],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[19,139860,70755],{},[19,139862,139863],{},[43,139864,139865],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[19,139867,139868],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[19,139870,139871],{},[2339,139872,139873],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[23,139875,139876],{"start":211},[26,139877,139878],{},"代码总结",[36,139880,139881],{"className":128927,"code":132284,"language":128929,"meta":41,"style":41},[43,139882,139883,139887,139901,139905],{"__ignoreMap":41},[46,139884,139885],{"class":48,"line":49},[46,139886,132291],{"class":2253},[46,139888,139889,139891,139893,139895,139897,139899],{"class":48,"line":60},[46,139890,821],{"class":56},[46,139892,53578],{"class":1361},[46,139894,55451],{"class":169},[46,139896,79],{"class":56},[46,139898,132304],{"class":173},[46,139900,53274],{"class":56},[46,139902,139903],{"class":48,"line":200},[46,139904,132311],{"class":56},[46,139906,139907,139909,139911],{"class":48,"line":211},[46,139908,53752],{"class":56},[46,139910,53578],{"class":1361},[46,139912,53274],{"class":56},[14,139914,139916],{"id":139915},"_154-项目公共部分制作","15.4 项目公共部分制作",[479,139918,139920],{"id":139919},"_1541-常用模块类命名","15.4.1 常用模块类命名",[3514,139922],{"style":128036,"src":139923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[479,139925,139927],{"id":139926},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[19,139929,139930],{},"布局思路：",[3191,139932,139933,139936,139939,139961,139994],{},[26,139934,139935],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[26,139937,139938],{},"里面包含版心的盒子",[26,139940,139941,139942],{},"版心盒子里面包含 1 号左侧盒子左浮动",[3191,139943,139944,139952,139958],{},[26,139945,139946,139947,23501,139949,139951],{},"1 号盒子 里面包含一个",[43,139948,3191],{},[43,139950,3191],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[26,139953,139954,139955,139957],{},"里面的内容是水平排列，所以需要给",[43,139956,26],{},"设置浮动",[26,139959,139960],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[26,139962,139963,139964],{},"版心盒子里面包含 2 号右侧盒子右浮动",[3191,139965,139966,139980,139985],{},[26,139967,139968,139969,23501,139971,139973,139974,139976,139977,139979],{},"2 号盒子 里面包含一个",[43,139970,3191],{},[43,139972,3191],{},"包裹",[43,139975,26],{},"，中间的",[43,139978,3106],{},"可以用样式去设置，也可以用字符 |",[26,139981,139982,139983,139957],{},"里面内容水平排列，给",[43,139984,26],{},[26,139986,139987,139988,139990,139991,139993],{},"找到里面所有偶数的 ",[43,139989,26],{}," 设置样式（偶数的 ",[43,139992,26],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[26,139995,139996,139997],{},"需要用到字体图标",[3191,139998,139999,140005,140008,140011,140014],{},[26,140000,140001,140002],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[43,140003,140004],{},"arrow-icon",[26,140006,140007],{},"先要引入字体图片的资源",[26,140009,140010],{},"在样式里面利用 font-face 来进行声明",[26,140012,140013],{},"在伪元素的 content属性设置 图标的编码",[26,140015,140016],{},"给伪元素设置font-family属性",[19,140018,140019],{},"结构实例代码：",[36,140021,140023],{"className":128180,"code":140022,"language":128182,"meta":41,"style":41},"div::before {\n  content: \"\";\n  display: block;\n}\n",[43,140024,140025,140033,140043,140053],{"__ignoreMap":41},[46,140026,140027,140029,140031],{"class":48,"line":49},[46,140028,53578],{"class":1361},[46,140030,139181],{"class":169},[46,140032,17573],{"class":56},[46,140034,140035,140037,140039,140041],{"class":48,"line":60},[46,140036,139188],{"class":180},[46,140038,53404],{"class":56},[46,140040,9665],{"class":173},[46,140042,3345],{"class":56},[46,140044,140045,140047,140049,140051],{"class":48,"line":200},[46,140046,129796],{"class":180},[46,140048,53404],{"class":56},[46,140050,62834],{"class":180},[46,140052,3345],{"class":56},[46,140054,140055],{"class":48,"line":211},[46,140056,3616],{"class":56},[19,140058,140059],{},"样式实例代码：",[36,140061,140062],{"className":128180,"code":140022,"language":128182,"meta":41,"style":41},[43,140063,140064,140072,140082,140092],{"__ignoreMap":41},[46,140065,140066,140068,140070],{"class":48,"line":49},[46,140067,53578],{"class":1361},[46,140069,139181],{"class":169},[46,140071,17573],{"class":56},[46,140073,140074,140076,140078,140080],{"class":48,"line":60},[46,140075,139188],{"class":180},[46,140077,53404],{"class":56},[46,140079,9665],{"class":173},[46,140081,3345],{"class":56},[46,140083,140084,140086,140088,140090],{"class":48,"line":200},[46,140085,129796],{"class":180},[46,140087,53404],{"class":56},[46,140089,62834],{"class":180},[46,140091,3345],{"class":56},[46,140093,140094],{"class":48,"line":211},[46,140095,3616],{"class":56},[479,140097,140099],{"id":140098},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[3191,140101,140102],{},[26,140103,140104],{},"header 盒子必须要有高度",[19,140106,140107,140108,140110,140111],{},"1 号盒子是 ",[43,140109,133192],{}," 标志定位，在正常开发过程中， ",[2339,140112,140113,140114,140117],{},"logo的布局其实是有讲究的，需要进行 ",[43,140115,140116],{},"logoSEO","的优化 （★★★）",[3191,140119,140120,140128,140136,140163],{},[26,140121,140122,140124,140125,140127],{},[43,140123,133192],{}," 里面首先放一个 ",[43,140126,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[26,140129,140130,140132,140133,140135],{},[43,140131,10],{}," 里面再放一个链接，可以返回首页的，把 ",[43,140134,133192],{}," 的背景图片给链接即可",[26,140137,140138,140139],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[3191,140140,140141,140156],{},[26,140142,140143,140144,140147,140148,140151,140152,140155],{},"方法1：",[43,140145,140146],{},"text-indent"," 移到盒子外面（",[43,140149,140150],{},"text-indent: -9999px",") ，然后 ",[43,140153,140154],{},"overflow:hidden"," ，淘宝的做法",[26,140157,140158,140159,140162],{},"方法2：直接给 ",[43,140160,140161],{},"font-size: 0;"," 就看不到文字了，京东的做法",[26,140164,140165,140166,140168,140169,140171],{},"最后给链接一个 ",[43,140167,53374],{}," 属性，这样鼠标放到 ",[43,140170,133192],{}," 上就可以看到提示文字了",[19,140173,140019],{},[36,140175,140176],{"className":128927,"code":133413,"language":128929,"meta":41,"style":41},[43,140177,140178],{"__ignoreMap":41},[46,140179,140180,140182,140184,140186,140188,140190,140192,140194,140196,140198,140200],{"class":48,"line":49},[46,140181,821],{"class":56},[46,140183,2426],{"class":1361},[46,140185,63022],{"class":169},[46,140187,79],{"class":56},[46,140189,133428],{"class":173},[46,140191,133431],{"class":169},[46,140193,79],{"class":56},[46,140195,133436],{"class":173},[46,140197,133439],{"class":56},[46,140199,2426],{"class":1361},[46,140201,53274],{"class":56},[19,140203,140059],{},[36,140205,140206],{"className":128927,"code":133413,"language":128929,"meta":41,"style":41},[43,140207,140208],{"__ignoreMap":41},[46,140209,140210,140212,140214,140216,140218,140220,140222,140224,140226,140228,140230],{"class":48,"line":49},[46,140211,821],{"class":56},[46,140213,2426],{"class":1361},[46,140215,63022],{"class":169},[46,140217,79],{"class":56},[46,140219,133428],{"class":173},[46,140221,133431],{"class":169},[46,140223,79],{"class":56},[46,140225,133436],{"class":173},[46,140227,133439],{"class":56},[46,140229,2426],{"class":1361},[46,140231,53274],{"class":56},[19,140233,140234,140235,140237],{},"2 号盒子是 ",[43,140236,133205],{}," 搜索模块定位",[3191,140239,140240,140243,140246,140249],{},[26,140241,140242],{},"search盒子利用定位的方式放在对应的位置",[26,140244,140245],{},"search盒子设置绝对定位，header盒子设置相对定位",[26,140247,140248],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[26,140250,140251],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[19,140253,140019],{},[36,140255,140256],{"className":128180,"code":133500,"language":128182,"meta":41,"style":41},[43,140257,140258,140280,140284,140294],{"__ignoreMap":41},[46,140259,140260,140262,140264,140266,140268,140270,140272,140274,140276,140278],{"class":48,"line":49},[46,140261,53578],{"class":1361},[46,140263,448],{"class":56},[46,140265,19],{"class":1361},[46,140267,448],{"class":56},[46,140269,10],{"class":1361},[46,140271,448],{"class":56},[46,140273,3191],{"class":1361},[46,140275,448],{"class":56},[46,140277,26],{"class":1361},[46,140279,17573],{"class":56},[46,140281,140282],{"class":48,"line":60},[46,140283,133529],{"class":2253},[46,140285,140286,140288,140290,140292],{"class":48,"line":200},[46,140287,129796],{"class":180},[46,140289,53404],{"class":56},[46,140291,62834],{"class":180},[46,140293,3345],{"class":56},[46,140295,140296],{"class":48,"line":211},[46,140297,3616],{"class":56},[19,140299,140059],{},[36,140301,140302],{"className":128180,"code":133500,"language":128182,"meta":41,"style":41},[43,140303,140304,140326,140330,140340],{"__ignoreMap":41},[46,140305,140306,140308,140310,140312,140314,140316,140318,140320,140322,140324],{"class":48,"line":49},[46,140307,53578],{"class":1361},[46,140309,448],{"class":56},[46,140311,19],{"class":1361},[46,140313,448],{"class":56},[46,140315,10],{"class":1361},[46,140317,448],{"class":56},[46,140319,3191],{"class":1361},[46,140321,448],{"class":56},[46,140323,26],{"class":1361},[46,140325,17573],{"class":56},[46,140327,140328],{"class":48,"line":60},[46,140329,133529],{"class":2253},[46,140331,140332,140334,140336,140338],{"class":48,"line":200},[46,140333,129796],{"class":180},[46,140335,53404],{"class":56},[46,140337,62834],{"class":180},[46,140339,3345],{"class":56},[46,140341,140342],{"class":48,"line":211},[46,140343,3616],{"class":56},[19,140345,140346],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[19,140348,140349,140350,140353],{},"3 号盒子是 ",[43,140351,140352],{},"hotwords"," 热词模块定位",[3191,140355,140356,140359,140362],{},[26,140357,140358],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[26,140360,140361],{},"给里面所有的a标签设置 左右10px的外边距",[26,140363,140364],{},"给第一个a标签设置文字变红色（#c81623）",[19,140366,140019],{},[36,140368,140370],{"className":128180,"code":140369,"language":128182,"meta":41,"style":41},"div {\n  margin: 0 auto;\n}\n",[43,140371,140372,140378,140390],{"__ignoreMap":41},[46,140373,140374,140376],{"class":48,"line":49},[46,140375,53578],{"class":1361},[46,140377,17573],{"class":56},[46,140379,140380,140382,140384,140386,140388],{"class":48,"line":60},[46,140381,72435],{"class":180},[46,140383,53404],{"class":56},[46,140385,2379],{"class":180},[46,140387,53523],{"class":180},[46,140389,3345],{"class":56},[46,140391,140392],{"class":48,"line":200},[46,140393,3616],{"class":56},[19,140395,140059],{},[36,140397,140398],{"className":128180,"code":140369,"language":128182,"meta":41,"style":41},[43,140399,140400,140406,140418],{"__ignoreMap":41},[46,140401,140402,140404],{"class":48,"line":49},[46,140403,53578],{"class":1361},[46,140405,17573],{"class":56},[46,140407,140408,140410,140412,140414,140416],{"class":48,"line":60},[46,140409,72435],{"class":180},[46,140411,53404],{"class":56},[46,140413,2379],{"class":180},[46,140415,53523],{"class":180},[46,140417,3345],{"class":56},[46,140419,140420],{"class":48,"line":200},[46,140421,3616],{"class":56},[19,140423,140424,140425,140428],{},"4 号盒子是 ",[43,140426,140427],{},"shopcar"," 购物车模块",[3191,140430,140431,140436,140439,140442],{},[26,140432,124963,140433,140435],{},[43,140434,140427],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[26,140437,140438],{},"count 统计部分用绝对定位做",[26,140440,140441],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[26,140443,140444],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[19,140446,140019],{},[36,140448,140449],{"className":128180,"code":133612,"language":128182,"meta":41,"style":41},[43,140450,140451,140455,140469,140473,140487,140491,140505,140509,140523,140527],{"__ignoreMap":41},[46,140452,140453],{"class":48,"line":49},[46,140454,133619],{"class":2253},[46,140456,140457,140459,140461,140463,140465,140467],{"class":48,"line":60},[46,140458,133624],{"class":169},[46,140460,81772],{"class":56},[46,140462,130540],{"class":180},[46,140464,53404],{"class":56},[46,140466,133633],{"class":180},[46,140468,131110],{"class":56},[46,140470,140471],{"class":48,"line":200},[46,140472,133640],{"class":2253},[46,140474,140475,140477,140479,140481,140483,140485],{"class":48,"line":211},[46,140476,133645],{"class":169},[46,140478,81772],{"class":56},[46,140480,130540],{"class":180},[46,140482,53404],{"class":56},[46,140484,56729],{"class":180},[46,140486,131110],{"class":56},[46,140488,140489],{"class":48,"line":222},[46,140490,133660],{"class":2253},[46,140492,140493,140495,140497,140499,140501,140503],{"class":48,"line":636},[46,140494,133665],{"class":169},[46,140496,81772],{"class":56},[46,140498,130540],{"class":180},[46,140500,53404],{"class":56},[46,140502,56796],{"class":180},[46,140504,131110],{"class":56},[46,140506,140507],{"class":48,"line":641},[46,140508,133680],{"class":2253},[46,140510,140511,140513,140515,140517,140519,140521],{"class":48,"line":653},[46,140512,133685],{"class":169},[46,140514,81772],{"class":56},[46,140516,130540],{"class":180},[46,140518,53404],{"class":56},[46,140520,88196],{"class":180},[46,140522,131110],{"class":56},[46,140524,140525],{"class":48,"line":659},[46,140526,133700],{"class":2253},[46,140528,140529,140531,140533,140535,140537,140539],{"class":48,"line":665},[46,140530,133705],{"class":169},[46,140532,81772],{"class":56},[46,140534,130540],{"class":180},[46,140536,53404],{"class":56},[46,140538,133714],{"class":180},[46,140540,131110],{"class":56},[19,140542,140059],{},[36,140544,140545],{"className":128180,"code":133612,"language":128182,"meta":41,"style":41},[43,140546,140547,140551,140565,140569,140583,140587,140601,140605,140619,140623],{"__ignoreMap":41},[46,140548,140549],{"class":48,"line":49},[46,140550,133619],{"class":2253},[46,140552,140553,140555,140557,140559,140561,140563],{"class":48,"line":60},[46,140554,133624],{"class":169},[46,140556,81772],{"class":56},[46,140558,130540],{"class":180},[46,140560,53404],{"class":56},[46,140562,133633],{"class":180},[46,140564,131110],{"class":56},[46,140566,140567],{"class":48,"line":200},[46,140568,133640],{"class":2253},[46,140570,140571,140573,140575,140577,140579,140581],{"class":48,"line":211},[46,140572,133645],{"class":169},[46,140574,81772],{"class":56},[46,140576,130540],{"class":180},[46,140578,53404],{"class":56},[46,140580,56729],{"class":180},[46,140582,131110],{"class":56},[46,140584,140585],{"class":48,"line":222},[46,140586,133660],{"class":2253},[46,140588,140589,140591,140593,140595,140597,140599],{"class":48,"line":636},[46,140590,133665],{"class":169},[46,140592,81772],{"class":56},[46,140594,130540],{"class":180},[46,140596,53404],{"class":56},[46,140598,56796],{"class":180},[46,140600,131110],{"class":56},[46,140602,140603],{"class":48,"line":641},[46,140604,133680],{"class":2253},[46,140606,140607,140609,140611,140613,140615,140617],{"class":48,"line":653},[46,140608,133685],{"class":169},[46,140610,81772],{"class":56},[46,140612,130540],{"class":180},[46,140614,53404],{"class":56},[46,140616,88196],{"class":180},[46,140618,131110],{"class":56},[46,140620,140621],{"class":48,"line":659},[46,140622,133700],{"class":2253},[46,140624,140625,140627,140629,140631,140633,140635],{"class":48,"line":665},[46,140626,133705],{"class":169},[46,140628,81772],{"class":56},[46,140630,130540],{"class":180},[46,140632,53404],{"class":56},[46,140634,133714],{"class":180},[46,140636,131110],{"class":56},[479,140638,140640,140641,140643],{"id":140639},"_1544-nav导航模块制作","15.4.4 ",[43,140642,55678],{},"导航模块制作",[3514,140645],{"style":128036,"src":140646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[19,140648,140649,140651],{},[43,140650,55678],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[19,140653,140654,140655],{},"1 号盒子左侧浮动，",[43,140656,140657],{},"dropdown",[3191,140659,140660,140670,140678,140684,140692,140702,140710,140721],{},[26,140661,140662,140663,1700,140666,140669],{},"1号盒子有讲究，根据相关性 里面包含 ",[43,140664,140665],{},".dt",[43,140667,140668],{},".dd"," 两个盒子",[26,140671,140672,140674,140675,140677],{},[43,140673,140665],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[43,140676,140668],{}," 挤到下面去了",[26,140679,140680,140681,140683],{},"给 ",[43,140682,140668],{}," 盒子设置宽度 和 高度，以及背景颜色",[26,140685,140680,140686,140688,140689,121865],{},[43,140687,140668],{}," 盒子里面定义 无序列表 （",[43,140690,140691],{},"ul > li > a",[26,140693,140694,140695,140697,140698,140701],{},"每个 ",[43,140696,26],{}," 都有一个高度（",[43,140699,140700],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[26,140703,140680,140704,140706,140707,121865],{},[43,140705,26],{}," 里面的a设置文字大小（",[43,140708,140709],{},"14px",[26,140711,140680,140712,140714,140715,140717,140718,140720],{},[43,140713,26],{}," 设置 ",[43,140716,129341],{},"，当鼠标移入的时候，让",[43,140719,26],{},"的背景变成白色，让里面的文字变成红色",[26,140722,140723,140725,140726,140728,140729,140731],{},[43,140724,26],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[43,140727,26],{},"的右侧，那么给",[43,140730,26],{},"设置相对定位",[19,140733,140734],{},"一定要注意相关性",[19,140736,140019],{},[36,140738,140739],{"className":128180,"code":140022,"language":128182,"meta":41,"style":41},[43,140740,140741,140749,140759,140769],{"__ignoreMap":41},[46,140742,140743,140745,140747],{"class":48,"line":49},[46,140744,53578],{"class":1361},[46,140746,139181],{"class":169},[46,140748,17573],{"class":56},[46,140750,140751,140753,140755,140757],{"class":48,"line":60},[46,140752,139188],{"class":180},[46,140754,53404],{"class":56},[46,140756,9665],{"class":173},[46,140758,3345],{"class":56},[46,140760,140761,140763,140765,140767],{"class":48,"line":200},[46,140762,129796],{"class":180},[46,140764,53404],{"class":56},[46,140766,62834],{"class":180},[46,140768,3345],{"class":56},[46,140770,140771],{"class":48,"line":211},[46,140772,3616],{"class":56},[19,140774,140059],{},[36,140776,140777],{"className":128180,"code":140022,"language":128182,"meta":41,"style":41},[43,140778,140779,140787,140797,140807],{"__ignoreMap":41},[46,140780,140781,140783,140785],{"class":48,"line":49},[46,140782,53578],{"class":1361},[46,140784,139181],{"class":169},[46,140786,17573],{"class":56},[46,140788,140789,140791,140793,140795],{"class":48,"line":60},[46,140790,139188],{"class":180},[46,140792,53404],{"class":56},[46,140794,9665],{"class":173},[46,140796,3345],{"class":56},[46,140798,140799,140801,140803,140805],{"class":48,"line":200},[46,140800,129796],{"class":180},[46,140802,53404],{"class":56},[46,140804,62834],{"class":180},[46,140806,3345],{"class":56},[46,140808,140809],{"class":48,"line":211},[46,140810,3616],{"class":56},[19,140812,140813],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[19,140815,140816,140817,140820],{},"2 号盒子左侧浮动，",[43,140818,140819],{},"navitems"," 导航栏组",[3191,140822,140823,140828,140837],{},[26,140824,140825,140826],{},"里面结构是 ",[43,140827,140691],{},[26,140829,140830,140831,140833,140834,140836],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[43,140832,2426],{},"左右的",[43,140835,32863],{},"把两侧撑开",[26,140838,140839],{},"让文字垂直居中（行高等于高度）",[3514,140841],{"style":128036,"src":140842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[19,140844,140845],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[19,140847,140019],{},[36,140849,140851],{"className":128180,"code":140850,"language":128182,"meta":41,"style":41},".box {\n  float: left;\n}\n",[43,140852,140853,140859,140869],{"__ignoreMap":41},[46,140854,140855,140857],{"class":48,"line":49},[46,140856,132028],{"class":169},[46,140858,17573],{"class":56},[46,140860,140861,140863,140865,140867],{"class":48,"line":60},[46,140862,132660],{"class":180},[46,140864,53404],{"class":56},[46,140866,108],{"class":180},[46,140868,3345],{"class":56},[46,140870,140871],{"class":48,"line":200},[46,140872,3616],{"class":56},[19,140874,140059],{},[36,140876,140877],{"className":128180,"code":140850,"language":128182,"meta":41,"style":41},[43,140878,140879,140885,140895],{"__ignoreMap":41},[46,140880,140881,140883],{"class":48,"line":49},[46,140882,132028],{"class":169},[46,140884,17573],{"class":56},[46,140886,140887,140889,140891,140893],{"class":48,"line":60},[46,140888,132660],{"class":180},[46,140890,53404],{"class":56},[46,140892,108],{"class":180},[46,140894,3345],{"class":56},[46,140896,140897],{"class":48,"line":200},[46,140898,3616],{"class":56},[19,140900,140901],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[3514,140903],{"style":128036,"src":140904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[36,140906,140907],{"className":128180,"code":132337,"language":128182,"meta":41,"style":41},[43,140908,140909,140915,140931],{"__ignoreMap":41},[46,140910,140911,140913],{"class":48,"line":49},[46,140912,53578],{"class":1361},[46,140914,17573],{"class":56},[46,140916,140917,140919,140921,140923,140925,140927,140929],{"class":48,"line":60},[46,140918,72861],{"class":180},[46,140920,53404],{"class":56},[46,140922,2405],{"class":180},[46,140924,53459],{"class":52},[46,140926,53488],{"class":180},[46,140928,131572],{"class":180},[46,140930,3345],{"class":56},[46,140932,140933],{"class":48,"line":200},[46,140934,3616],{"class":56},[479,140936,140938],{"id":140937},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[3514,140940],{"style":128036,"src":140941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[3191,140943,140944,140949,140954],{},[26,140945,140946,140948],{},[43,140947,133383],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[26,140950,140951,140953],{},[43,140952,133383],{}," 里面有一个大的版心",[26,140955,140956,140957,140960,140961],{},"版心里面包含 1 号盒子，",[43,140958,140959],{},"mod_service"," 是服务模块，mod 是模块的意思",[3191,140962,140963,140968,140981,140997,141002],{},[26,140964,140680,140965,140967],{},[43,140966,140959],{}," 设置高度（80px）和下边框",[26,140969,140970,140971,140974,140975,140977,140978,140980],{},"在里面定义 ",[43,140972,140973],{},"ul > li"," ,每个",[43,140976,26],{}," 宽度是300px 高度是 50px，给每个",[43,140979,26],{},"设置35px的左内边距",[26,140982,140983,140984,140986,140987,140989,140990,140992,140993,20411,140995,121865],{},"在每个",[43,140985,26],{},"里面，放一个 ",[43,140988,24911],{},"（里面放图标），一个",[43,140991,53578],{},"（里面放",[43,140994,53578],{},[43,140996,19],{},[26,140998,140680,140999,141001],{},[43,141000,24911],{},"设置浮动，让h5与这个div左右排列",[26,141003,141004],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[19,141006,140019],{},[36,141008,141010],{"className":128180,"code":141009,"language":128182,"meta":41,"style":41},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[43,141011,141012,141018,141030,141042,141069],{"__ignoreMap":41},[46,141013,141014,141016],{"class":48,"line":49},[46,141015,135937],{"class":169},[46,141017,17573],{"class":56},[46,141019,141020,141022,141024,141026,141028],{"class":48,"line":60},[46,141021,72533],{"class":180},[46,141023,53404],{"class":56},[46,141025,2886],{"class":180},[46,141027,53459],{"class":52},[46,141029,3345],{"class":56},[46,141031,141032,141034,141036,141038,141040],{"class":48,"line":200},[46,141033,72753],{"class":180},[46,141035,53404],{"class":56},[46,141037,2886],{"class":180},[46,141039,53459],{"class":52},[46,141041,3345],{"class":56},[46,141043,141044,141046,141048,141050,141052,141054,141056,141058,141061,141063,141065,141067],{"class":48,"line":211},[46,141045,72576],{"class":180},[46,141047,53404],{"class":56},[46,141049,63691],{"class":180},[46,141051,1152],{"class":56},[46,141053,135976],{"class":439},[46,141055,15716],{"class":56},[46,141057,63701],{"class":180},[46,141059,141060],{"class":180}," -10",[46,141062,53459],{"class":52},[46,141064,135995],{"class":180},[46,141066,53459],{"class":52},[46,141068,3345],{"class":56},[46,141070,141071],{"class":48,"line":222},[46,141072,3616],{"class":56},[19,141074,140059],{},[36,141076,141077],{"className":128180,"code":141009,"language":128182,"meta":41,"style":41},[43,141078,141079,141085,141097,141109,141135],{"__ignoreMap":41},[46,141080,141081,141083],{"class":48,"line":49},[46,141082,135937],{"class":169},[46,141084,17573],{"class":56},[46,141086,141087,141089,141091,141093,141095],{"class":48,"line":60},[46,141088,72533],{"class":180},[46,141090,53404],{"class":56},[46,141092,2886],{"class":180},[46,141094,53459],{"class":52},[46,141096,3345],{"class":56},[46,141098,141099,141101,141103,141105,141107],{"class":48,"line":200},[46,141100,72753],{"class":180},[46,141102,53404],{"class":56},[46,141104,2886],{"class":180},[46,141106,53459],{"class":52},[46,141108,3345],{"class":56},[46,141110,141111,141113,141115,141117,141119,141121,141123,141125,141127,141129,141131,141133],{"class":48,"line":211},[46,141112,72576],{"class":180},[46,141114,53404],{"class":56},[46,141116,63691],{"class":180},[46,141118,1152],{"class":56},[46,141120,135976],{"class":439},[46,141122,15716],{"class":56},[46,141124,63701],{"class":180},[46,141126,141060],{"class":180},[46,141128,53459],{"class":52},[46,141130,135995],{"class":180},[46,141132,53459],{"class":52},[46,141134,3345],{"class":56},[46,141136,141137],{"class":48,"line":222},[46,141138,3616],{"class":56},[19,141140,141141],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[3191,141143,141144,141147,141153,141159,141171],{},[26,141145,141146],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[26,141148,141149,141150,121865],{},"里面的布局利用 自定义列表来实现（",[43,141151,141152],{},"dl > dt + dd",[26,141154,140680,141155,141158],{},[43,141156,141157],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[26,141160,140680,141161,141164,141165,20411,141167,141170],{},[43,141162,141163],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[43,141166,141163],{},[43,141168,141169],{},"dd","之间有些距离",[26,141172,141173],{},"最后一个 dl 结构和样式不一样，需要单独设置",[19,141175,140019],{},[36,141177,141178],{"className":128180,"code":140369,"language":128182,"meta":41,"style":41},[43,141179,141180,141186,141198],{"__ignoreMap":41},[46,141181,141182,141184],{"class":48,"line":49},[46,141183,53578],{"class":1361},[46,141185,17573],{"class":56},[46,141187,141188,141190,141192,141194,141196],{"class":48,"line":60},[46,141189,72435],{"class":180},[46,141191,53404],{"class":56},[46,141193,2379],{"class":180},[46,141195,53523],{"class":180},[46,141197,3345],{"class":56},[46,141199,141200],{"class":48,"line":200},[46,141201,3616],{"class":56},[19,141203,140059],{},[36,141205,141206],{"className":128180,"code":140369,"language":128182,"meta":41,"style":41},[43,141207,141208,141214,141226],{"__ignoreMap":41},[46,141209,141210,141212],{"class":48,"line":49},[46,141211,53578],{"class":1361},[46,141213,17573],{"class":56},[46,141215,141216,141218,141220,141222,141224],{"class":48,"line":60},[46,141217,72435],{"class":180},[46,141219,53404],{"class":56},[46,141221,2379],{"class":180},[46,141223,53523],{"class":180},[46,141225,3345],{"class":56},[46,141227,141228],{"class":48,"line":200},[46,141229,3616],{"class":56},[19,141231,141232],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[3191,141234,141235,141244,141247,141258],{},[26,141236,141237,141238,141240,141241,141243],{},"分为上下两块，上面是 ",[43,141239,133400],{}," 友情链接，下面是 ",[43,141242,133393],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[26,141245,141246],{},"把内容分别复制到相应模块中",[26,141248,140680,141249,141251,141252,141254,141255,141257],{},[43,141250,133400],{}," 设置 15px 的下外边距，给",[43,141253,133400],{}," 里面 的 ",[43,141256,2426],{}," 标签设置 左右 3px 的外边距",[26,141259,141260,141261,141263],{},"给",[43,141262,133393],{}," 设置 20px 的行高",[19,141265,140019],{},[36,141267,141268],{"className":128180,"code":140369,"language":128182,"meta":41,"style":41},[43,141269,141270,141276,141288],{"__ignoreMap":41},[46,141271,141272,141274],{"class":48,"line":49},[46,141273,53578],{"class":1361},[46,141275,17573],{"class":56},[46,141277,141278,141280,141282,141284,141286],{"class":48,"line":60},[46,141279,72435],{"class":180},[46,141281,53404],{"class":56},[46,141283,2379],{"class":180},[46,141285,53523],{"class":180},[46,141287,3345],{"class":56},[46,141289,141290],{"class":48,"line":200},[46,141291,3616],{"class":56},[19,141293,140059],{},[36,141295,141296],{"className":128180,"code":140369,"language":128182,"meta":41,"style":41},[43,141297,141298,141304,141316],{"__ignoreMap":41},[46,141299,141300,141302],{"class":48,"line":49},[46,141301,53578],{"class":1361},[46,141303,17573],{"class":56},[46,141305,141306,141308,141310,141312,141314],{"class":48,"line":60},[46,141307,72435],{"class":180},[46,141309,53404],{"class":56},[46,141311,2379],{"class":180},[46,141313,53523],{"class":180},[46,141315,3345],{"class":56},[46,141317,141318],{"class":48,"line":200},[46,141319,3616],{"class":56},[19,141321,141322],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[2098,141324,141325],{},"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":41,"searchDepth":60,"depth":60,"links":141327},[141328,141329,141330,141337],{"id":139608,"depth":60,"text":139609},{"id":139627,"depth":60,"text":139628},{"id":139654,"depth":60,"text":139655,"children":141331},[141332,141333,141334,141335,141336],{"id":139658,"depth":200,"text":139659},{"id":139671,"depth":200,"text":139672},{"id":139695,"depth":200,"text":139696},{"id":139717,"depth":200,"text":139718},{"id":139789,"depth":200,"text":139790},{"id":139915,"depth":60,"text":139916,"children":141338},[141339,141340,141341,141342,141344],{"id":139919,"depth":200,"text":139920},{"id":139926,"depth":200,"text":139927},{"id":140098,"depth":200,"text":140099},{"id":140639,"depth":200,"text":141343},"15.4.4 nav导航模块制作",{"id":140937,"depth":200,"text":140938},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":139600,"description":25378},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":141351,"title":141352,"body":141353,"description":25378,"extension":2125,"meta":143755,"navigation":615,"path":143756,"seo":143757,"stem":143758,"__hash__":143759},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":141354,"toc":143732},[141355,141358,141362,141366,141378,141381,141384,141387,141398,141400,141424,141426,141450,141455,141458,141460,141496,141498,141534,141537,141542,141545,141548,141551,141581,141588,141591,141601,141603,141637,141640,141674,141680,141697,141699,141735,141737,141773,141778,141803,141805,141831,141833,141857,141864,141867,141931,141933,141975,141977,142017,142024,142029,142031,142061,142063,142093,142097,142100,142107,142119,142121,142147,142149,142173,142176,142178,142202,142208,142218,142220,142250,142252,142282,142289,142330,142332,142368,142370,142406,142410,142413,142416,142419,142425,142430,142433,142456,142459,142483,142486,142510,142515,142518,142521,142524,142527,142530,142604,142606,142636,142638,142668,142671,142674,142706,142710,142714,142728,142737,142740,142745,142747,142841,142843,142937,142960,142962,142986,142988,143012,143019,143022,143032,143034,143058,143063,143071,143073,143103,143108,143148,143150,143176,143178,143204,143208,143211,143216,143219,143223,143231,143238,143246,143248,143278,143280,143310,143318,143321,143324,143326,143356,143358,143388,143391,143396,143398,143422,143424,143448,143451,143536,143538,143562,143564,143588,143592,143594,143618,143620,143654,143658,143672,143675,143680,143683,143688,143691,143721,143729],[10,141356,141352],{"id":141357},"_16-品优购项目下篇-主体与页面开发",[14,141359,141361],{"id":141360},"_161-项目主体模块制作","16.1 项目主体模块制作",[479,141363,141365],{"id":141364},"_1611-首页制作","16.1.1 首页制作",[19,141367,141368,141370,141371,141373,141374,141377],{},[2339,141369,103963],{}," 主体模块是 ",[2339,141372,76023],{}," 里面专有的，注意需要新的样式文件 ",[2339,141375,141376],{},"index.css，"," 就不要写在common.css中了",[3514,141379],{"style":128036,"src":141380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[3514,141382],{"style":128036,"src":141383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[19,141385,141386],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[3191,141388,141389,141392,141395],{},[26,141390,141391],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[26,141393,141394],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[26,141396,141397],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[19,141399,140019],{},[36,141401,141402],{"className":128180,"code":140850,"language":128182,"meta":41,"style":41},[43,141403,141404,141410,141420],{"__ignoreMap":41},[46,141405,141406,141408],{"class":48,"line":49},[46,141407,132028],{"class":169},[46,141409,17573],{"class":56},[46,141411,141412,141414,141416,141418],{"class":48,"line":60},[46,141413,132660],{"class":180},[46,141415,53404],{"class":56},[46,141417,108],{"class":180},[46,141419,3345],{"class":56},[46,141421,141422],{"class":48,"line":200},[46,141423,3616],{"class":56},[19,141425,140059],{},[36,141427,141428],{"className":128180,"code":140850,"language":128182,"meta":41,"style":41},[43,141429,141430,141436,141446],{"__ignoreMap":41},[46,141431,141432,141434],{"class":48,"line":49},[46,141433,132028],{"class":169},[46,141435,17573],{"class":56},[46,141437,141438,141440,141442,141444],{"class":48,"line":60},[46,141439,132660],{"class":180},[46,141441,53404],{"class":56},[46,141443,108],{"class":180},[46,141445,3345],{"class":56},[46,141447,141448],{"class":48,"line":200},[46,141449,3616],{"class":56},[23,141451,141452],{},[26,141453,141454],{},"左侧focus模块制作",[3514,141456],{"style":128036,"src":141457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[19,141459,140019],{},[36,141461,141462],{"className":128180,"code":129503,"language":128182,"meta":41,"style":41},[43,141463,141464,141472,141482,141492],{"__ignoreMap":41},[46,141465,141466,141468,141470],{"class":48,"line":49},[46,141467,55786],{"class":1361},[46,141469,63865],{"class":169},[46,141471,17573],{"class":56},[46,141473,141474,141476,141478,141480],{"class":48,"line":60},[46,141475,129518],{"class":180},[46,141477,53404],{"class":56},[46,141479,56854],{"class":180},[46,141481,3345],{"class":56},[46,141483,141484,141486,141488,141490],{"class":48,"line":200},[46,141485,72763],{"class":180},[46,141487,53404],{"class":56},[46,141489,56702],{"class":180},[46,141491,3345],{"class":56},[46,141493,141494],{"class":48,"line":211},[46,141495,3616],{"class":56},[19,141497,140059],{},[36,141499,141500],{"className":128180,"code":129503,"language":128182,"meta":41,"style":41},[43,141501,141502,141510,141520,141530],{"__ignoreMap":41},[46,141503,141504,141506,141508],{"class":48,"line":49},[46,141505,55786],{"class":1361},[46,141507,63865],{"class":169},[46,141509,17573],{"class":56},[46,141511,141512,141514,141516,141518],{"class":48,"line":60},[46,141513,129518],{"class":180},[46,141515,53404],{"class":56},[46,141517,56854],{"class":180},[46,141519,3345],{"class":56},[46,141521,141522,141524,141526,141528],{"class":48,"line":200},[46,141523,72763],{"class":180},[46,141525,53404],{"class":56},[46,141527,56702],{"class":180},[46,141529,3345],{"class":56},[46,141531,141532],{"class":48,"line":211},[46,141533,3616],{"class":56},[19,141535,141536],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[23,141538,141539],{"start":60},[26,141540,141541],{},"右侧newsflash模块制作",[3514,141543],{"style":128036,"src":141544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[19,141546,141547],{},"右侧的模块 分为上中下三个盒子",[19,141549,141550],{},"结构代码：",[36,141552,141553],{"className":128927,"code":135682,"language":128929,"meta":41,"style":41},[43,141554,141555],{"__ignoreMap":41},[46,141556,141557,141559,141561,141563,141565,141567,141569,141571,141573,141575,141577,141579],{"class":48,"line":49},[46,141558,821],{"class":56},[46,141560,3514],{"class":1361},[46,141562,57204],{"class":169},[46,141564,79],{"class":56},[46,141566,135697],{"class":173},[46,141568,57212],{"class":169},[46,141570,79],{"class":56},[46,141572,135704],{"class":173},[46,141574,135707],{"class":169},[46,141576,79],{"class":56},[46,141578,135712],{"class":173},[46,141580,53274],{"class":56},[19,141582,141583,141584,141587],{},"1 号盒子为 ",[43,141585,141586],{},"news"," 新闻模块 高度为 165px",[3514,141589],{"style":128036,"src":141590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[19,141592,141593,141594,141597,141598],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[43,141595,141596],{},"news-hd","，下面是 ",[43,141599,141600],{},"news-bd",[19,141602,141550],{},[36,141604,141605],{"className":128927,"code":132284,"language":128929,"meta":41,"style":41},[43,141606,141607,141611,141625,141629],{"__ignoreMap":41},[46,141608,141609],{"class":48,"line":49},[46,141610,132291],{"class":2253},[46,141612,141613,141615,141617,141619,141621,141623],{"class":48,"line":60},[46,141614,821],{"class":56},[46,141616,53578],{"class":1361},[46,141618,55451],{"class":169},[46,141620,79],{"class":56},[46,141622,132304],{"class":173},[46,141624,53274],{"class":56},[46,141626,141627],{"class":48,"line":200},[46,141628,132311],{"class":56},[46,141630,141631,141633,141635],{"class":48,"line":211},[46,141632,53752],{"class":56},[46,141634,53578],{"class":1361},[46,141636,53274],{"class":56},[19,141638,141639],{},"样式代码：",[36,141641,141642],{"className":128927,"code":132284,"language":128929,"meta":41,"style":41},[43,141643,141644,141648,141662,141666],{"__ignoreMap":41},[46,141645,141646],{"class":48,"line":49},[46,141647,132291],{"class":2253},[46,141649,141650,141652,141654,141656,141658,141660],{"class":48,"line":60},[46,141651,821],{"class":56},[46,141653,53578],{"class":1361},[46,141655,55451],{"class":169},[46,141657,79],{"class":56},[46,141659,132304],{"class":173},[46,141661,53274],{"class":56},[46,141663,141664],{"class":48,"line":200},[46,141665,132311],{"class":56},[46,141667,141668,141670,141672],{"class":48,"line":211},[46,141669,53752],{"class":56},[46,141671,53578],{"class":1361},[46,141673,53274],{"class":56},[19,141675,141676,141677,141679],{},"上面是",[43,141678,141596],{},"，设置高度是 33px，设置下边框",[3191,141681,141682,141688],{},[26,141683,141684,141685,141687],{},"里面放一个",[43,141686,24911],{}," 标题",[26,141689,141690,141691,141693,141694,141696],{},"放一个a",[43,141692,104585],{},"，内容是 更多，然后让 ",[43,141695,2426],{}," 进行右浮动，三角用伪元素设置字体图标就好",[19,141698,141550],{},[36,141700,141701],{"className":128180,"code":140022,"language":128182,"meta":41,"style":41},[43,141702,141703,141711,141721,141731],{"__ignoreMap":41},[46,141704,141705,141707,141709],{"class":48,"line":49},[46,141706,53578],{"class":1361},[46,141708,139181],{"class":169},[46,141710,17573],{"class":56},[46,141712,141713,141715,141717,141719],{"class":48,"line":60},[46,141714,139188],{"class":180},[46,141716,53404],{"class":56},[46,141718,9665],{"class":173},[46,141720,3345],{"class":56},[46,141722,141723,141725,141727,141729],{"class":48,"line":200},[46,141724,129796],{"class":180},[46,141726,53404],{"class":56},[46,141728,62834],{"class":180},[46,141730,3345],{"class":56},[46,141732,141733],{"class":48,"line":211},[46,141734,3616],{"class":56},[19,141736,141639],{},[36,141738,141739],{"className":128180,"code":140022,"language":128182,"meta":41,"style":41},[43,141740,141741,141749,141759,141769],{"__ignoreMap":41},[46,141742,141743,141745,141747],{"class":48,"line":49},[46,141744,53578],{"class":1361},[46,141746,139181],{"class":169},[46,141748,17573],{"class":56},[46,141750,141751,141753,141755,141757],{"class":48,"line":60},[46,141752,139188],{"class":180},[46,141754,53404],{"class":56},[46,141756,9665],{"class":173},[46,141758,3345],{"class":56},[46,141760,141761,141763,141765,141767],{"class":48,"line":200},[46,141762,129796],{"class":180},[46,141764,53404],{"class":56},[46,141766,62834],{"class":180},[46,141768,3345],{"class":56},[46,141770,141771],{"class":48,"line":211},[46,141772,3616],{"class":56},[19,141774,141775,141776],{},"下面是",[43,141777,141600],{},[3191,141779,141780,141788],{},[26,141781,141782,141783,1700,141785,141787],{},"里面包含 ",[43,141784,3191],{},[43,141786,26],{}," 还有链接",[26,141789,141260,141790,141792,141793,141795,141796,141799,141800],{},[43,141791,26],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[43,141794,132846],{}," 2.设置 ",[43,141797,141798],{},"white-space: nowrap;"," 3. 设置 ",[43,141801,141802],{},"text-overflow: ellipsis;",[19,141804,141550],{},[36,141806,141808],{"className":128180,"code":141807,"language":128182,"meta":41,"style":41},"div {\n  overflow: hidden;\n}\n",[43,141809,141810,141816,141827],{"__ignoreMap":41},[46,141811,141812,141814],{"class":48,"line":49},[46,141813,53578],{"class":1361},[46,141815,17573],{"class":56},[46,141817,141818,141821,141823,141825],{"class":48,"line":60},[46,141819,141820],{"class":180},"  overflow",[46,141822,53404],{"class":56},[46,141824,63679],{"class":180},[46,141826,3345],{"class":56},[46,141828,141829],{"class":48,"line":200},[46,141830,3616],{"class":56},[19,141832,141639],{},[36,141834,141835],{"className":128180,"code":141807,"language":128182,"meta":41,"style":41},[43,141836,141837,141843,141853],{"__ignoreMap":41},[46,141838,141839,141841],{"class":48,"line":49},[46,141840,53578],{"class":1361},[46,141842,17573],{"class":56},[46,141844,141845,141847,141849,141851],{"class":48,"line":60},[46,141846,141820],{"class":180},[46,141848,53404],{"class":56},[46,141850,63679],{"class":180},[46,141852,3345],{"class":56},[46,141854,141855],{"class":48,"line":200},[46,141856,3616],{"class":56},[19,141858,141859,141860,141863],{},"2 号盒子为 ",[43,141861,141862],{},"lifeservice"," 生活服务模块 高度为 209px",[3514,141865],{"style":128036,"src":141866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[3191,141868,141869,141872,141882,141906,141917],{},[26,141870,141871],{},"设置边框（左右下边框）",[26,141873,141874,141875,141878,141879,141881],{},"里面的内容 是 ",[43,141876,141877],{},"ul > 12*li","，给",[43,141880,26],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[26,141883,141884,141885],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[3191,141886,141887,141892,141901],{},[26,141888,141889,141891],{},[43,141890,141862],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[26,141893,141894,141895,141897,141898,141900],{},"可以让 ",[43,141896,141862],{}," 里面的 ",[43,141899,3191],{}," 宽度为 252，就可以装的下 4 个 小 li",[26,141902,141903,141905],{},[43,141904,141862],{}," 盒子 overflow 隐藏多余的部分就可以了",[26,141907,118095,141908,141910,141911,141913,141914,141916],{},[43,141909,26],{}," 里面放一个 ",[43,141912,2628],{},"（里面放图标），下面的文本用 ",[43,141915,19],{}," 标签包裹",[26,141918,140680,141919,141921,141922,141924,141925,140714,141927,141930],{},[43,141920,2628],{}," 设置 24px宽和28px的高（注意 ",[43,141923,2628],{}," 是行内元素， 转成行内块），给 ",[43,141926,26],{},[43,141928,141929],{},"text-align:center"," 让里面内容居中显示",[19,141932,141550],{},[36,141934,141936],{"className":128180,"code":141935,"language":128182,"meta":41,"style":41},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[43,141937,141938,141956,141961,141971],{"__ignoreMap":41},[46,141939,141940,141942,141944,141946,141948,141950,141952,141954],{"class":48,"line":49},[46,141941,46],{"class":1361},[46,141943,448],{"class":56},[46,141945,2426],{"class":1361},[46,141947,448],{"class":56},[46,141949,25555],{"class":1361},[46,141951,448],{"class":56},[46,141953,2339],{"class":1361},[46,141955,17573],{"class":56},[46,141957,141958],{"class":48,"line":60},[46,141959,141960],{"class":2253},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[46,141962,141963,141965,141967,141969],{"class":48,"line":200},[46,141964,129796],{"class":180},[46,141966,53404],{"class":56},[46,141968,129858],{"class":180},[46,141970,3345],{"class":56},[46,141972,141973],{"class":48,"line":211},[46,141974,3616],{"class":56},[19,141976,141639],{},[36,141978,141979],{"className":128180,"code":141935,"language":128182,"meta":41,"style":41},[43,141980,141981,141999,142003,142013],{"__ignoreMap":41},[46,141982,141983,141985,141987,141989,141991,141993,141995,141997],{"class":48,"line":49},[46,141984,46],{"class":1361},[46,141986,448],{"class":56},[46,141988,2426],{"class":1361},[46,141990,448],{"class":56},[46,141992,25555],{"class":1361},[46,141994,448],{"class":56},[46,141996,2339],{"class":1361},[46,141998,17573],{"class":56},[46,142000,142001],{"class":48,"line":60},[46,142002,141960],{"class":2253},[46,142004,142005,142007,142009,142011],{"class":48,"line":200},[46,142006,129796],{"class":180},[46,142008,53404],{"class":56},[46,142010,129858],{"class":180},[46,142012,3345],{"class":56},[46,142014,142015],{"class":48,"line":211},[46,142016,3616],{"class":56},[19,142018,142019,142020,142023],{},"3 号盒子为 ",[43,142021,142022],{},"bargain"," 特价商品",[3191,142025,142026],{},[26,142027,142028],{},"这个比较简单，直接插入一张图片即可",[19,142030,141550],{},[36,142032,142033],{"className":128927,"code":135682,"language":128929,"meta":41,"style":41},[43,142034,142035],{"__ignoreMap":41},[46,142036,142037,142039,142041,142043,142045,142047,142049,142051,142053,142055,142057,142059],{"class":48,"line":49},[46,142038,821],{"class":56},[46,142040,3514],{"class":1361},[46,142042,57204],{"class":169},[46,142044,79],{"class":56},[46,142046,135697],{"class":173},[46,142048,57212],{"class":169},[46,142050,79],{"class":56},[46,142052,135704],{"class":173},[46,142054,135707],{"class":169},[46,142056,79],{"class":56},[46,142058,135712],{"class":173},[46,142060,53274],{"class":56},[19,142062,141639],{},[36,142064,142065],{"className":128927,"code":135682,"language":128929,"meta":41,"style":41},[43,142066,142067],{"__ignoreMap":41},[46,142068,142069,142071,142073,142075,142077,142079,142081,142083,142085,142087,142089,142091],{"class":48,"line":49},[46,142070,821],{"class":56},[46,142072,3514],{"class":1361},[46,142074,57204],{"class":169},[46,142076,79],{"class":56},[46,142078,135697],{"class":173},[46,142080,57212],{"class":169},[46,142082,79],{"class":56},[46,142084,135704],{"class":173},[46,142086,135707],{"class":169},[46,142088,79],{"class":56},[46,142090,135712],{"class":173},[46,142092,53274],{"class":56},[479,142094,142096],{"id":142095},"_1612-推荐模块制作","16.1.2 推荐模块制作",[3514,142098],{"style":128036,"src":142099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[19,142101,142102,142103,142106],{},"大盒子 ",[43,142104,142105],{},"recom"," 推荐模块 recommend",[3191,142108,142109],{},[26,142110,142111,142112,142114,142115,142118],{},"给这个 ",[43,142113,142105],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[43,142116,142117],{},"#ebebeb","），设置距离上边 12px",[19,142120,141550],{},[36,142122,142124],{"className":128180,"code":142123,"language":128182,"meta":41,"style":41},"div {\n  background-color: #f0f0f0;\n}\n",[43,142125,142126,142132,142143],{"__ignoreMap":41},[46,142127,142128,142130],{"class":48,"line":49},[46,142129,53578],{"class":1361},[46,142131,17573],{"class":56},[46,142133,142134,142136,142138,142141],{"class":48,"line":60},[46,142135,72843],{"class":180},[46,142137,53404],{"class":56},[46,142139,142140],{"class":180},"#f0f0f0",[46,142142,3345],{"class":56},[46,142144,142145],{"class":48,"line":200},[46,142146,3616],{"class":56},[19,142148,141639],{},[36,142150,142151],{"className":128180,"code":142123,"language":128182,"meta":41,"style":41},[43,142152,142153,142159,142169],{"__ignoreMap":41},[46,142154,142155,142157],{"class":48,"line":49},[46,142156,53578],{"class":1361},[46,142158,17573],{"class":56},[46,142160,142161,142163,142165,142167],{"class":48,"line":60},[46,142162,72843],{"class":180},[46,142164,53404],{"class":56},[46,142166,142140],{"class":180},[46,142168,3345],{"class":56},[46,142170,142171],{"class":48,"line":200},[46,142172,3616],{"class":56},[19,142174,142175],{},"里面包含 2 个盒子， 浮动即可",[19,142177,141550],{},[36,142179,142180],{"className":128180,"code":140850,"language":128182,"meta":41,"style":41},[43,142181,142182,142188,142198],{"__ignoreMap":41},[46,142183,142184,142186],{"class":48,"line":49},[46,142185,132028],{"class":169},[46,142187,17573],{"class":56},[46,142189,142190,142192,142194,142196],{"class":48,"line":60},[46,142191,132660],{"class":180},[46,142193,53404],{"class":56},[46,142195,108],{"class":180},[46,142197,3345],{"class":56},[46,142199,142200],{"class":48,"line":200},[46,142201,3616],{"class":56},[19,142203,142204,142205],{},"1 号盒子 ",[43,142206,142207],{},"recom_hd",[3191,142209,142210,142213],{},[26,142211,142212],{},"设置宽度205px，高度163px",[26,142214,141684,142215,142217],{},[43,142216,3514],{},"标签，插入图片即可",[19,142219,141550],{},[36,142221,142222],{"className":128927,"code":135682,"language":128929,"meta":41,"style":41},[43,142223,142224],{"__ignoreMap":41},[46,142225,142226,142228,142230,142232,142234,142236,142238,142240,142242,142244,142246,142248],{"class":48,"line":49},[46,142227,821],{"class":56},[46,142229,3514],{"class":1361},[46,142231,57204],{"class":169},[46,142233,79],{"class":56},[46,142235,135697],{"class":173},[46,142237,57212],{"class":169},[46,142239,79],{"class":56},[46,142241,135704],{"class":173},[46,142243,135707],{"class":169},[46,142245,79],{"class":56},[46,142247,135712],{"class":173},[46,142249,53274],{"class":56},[19,142251,141639],{},[36,142253,142254],{"className":128927,"code":135682,"language":128929,"meta":41,"style":41},[43,142255,142256],{"__ignoreMap":41},[46,142257,142258,142260,142262,142264,142266,142268,142270,142272,142274,142276,142278,142280],{"class":48,"line":49},[46,142259,821],{"class":56},[46,142261,3514],{"class":1361},[46,142263,57204],{"class":169},[46,142265,79],{"class":56},[46,142267,135697],{"class":173},[46,142269,57212],{"class":169},[46,142271,79],{"class":56},[46,142273,135704],{"class":173},[46,142275,135707],{"class":169},[46,142277,79],{"class":56},[46,142279,135712],{"class":173},[46,142281,53274],{"class":56},[19,142283,142284,142285,142288],{},"2 号盒子 ",[43,142286,142287],{},"recom_bd"," ，注意里面的小竖线",[3191,142290,142291,142302,142305,142310,142315],{},[26,142292,142293,142294,142296,142297,142299,142300],{},"右侧结构里面放 ",[43,142295,3191],{}," 包含 4个 ",[43,142298,26],{},"，每个li里面包含一个",[43,142301,3514],{},[26,142303,142304],{},"直接利用切片工具把里面的内容当成一张图片",[26,142306,140680,142307,142309],{},[43,142308,26],{}," 设置浮动",[26,142311,140680,142312,142314],{},[43,142313,3514],{}," 设置宽高，宽度 248px，高度 163px",[26,142316,142317,142318,141878,142321,142323,142324,142326,142327],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[43,142319,142320],{},"top 10px",[43,142322,26],{},"设置相对定位（注意，最后一个",[43,142325,26],{},"不用设置伪元素），可以利用 ",[43,142328,142329],{},"nth-child(-n+3){...}",[19,142331,141550],{},[36,142333,142334],{"className":128180,"code":140022,"language":128182,"meta":41,"style":41},[43,142335,142336,142344,142354,142364],{"__ignoreMap":41},[46,142337,142338,142340,142342],{"class":48,"line":49},[46,142339,53578],{"class":1361},[46,142341,139181],{"class":169},[46,142343,17573],{"class":56},[46,142345,142346,142348,142350,142352],{"class":48,"line":60},[46,142347,139188],{"class":180},[46,142349,53404],{"class":56},[46,142351,9665],{"class":173},[46,142353,3345],{"class":56},[46,142355,142356,142358,142360,142362],{"class":48,"line":200},[46,142357,129796],{"class":180},[46,142359,53404],{"class":56},[46,142361,62834],{"class":180},[46,142363,3345],{"class":56},[46,142365,142366],{"class":48,"line":211},[46,142367,3616],{"class":56},[19,142369,141639],{},[36,142371,142372],{"className":128180,"code":140022,"language":128182,"meta":41,"style":41},[43,142373,142374,142382,142392,142402],{"__ignoreMap":41},[46,142375,142376,142378,142380],{"class":48,"line":49},[46,142377,53578],{"class":1361},[46,142379,139181],{"class":169},[46,142381,17573],{"class":56},[46,142383,142384,142386,142388,142390],{"class":48,"line":60},[46,142385,139188],{"class":180},[46,142387,53404],{"class":56},[46,142389,9665],{"class":173},[46,142391,3345],{"class":56},[46,142393,142394,142396,142398,142400],{"class":48,"line":200},[46,142395,129796],{"class":180},[46,142397,53404],{"class":56},[46,142399,62834],{"class":180},[46,142401,3345],{"class":56},[46,142403,142404],{"class":48,"line":211},[46,142405,3616],{"class":56},[479,142407,142409],{"id":142408},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[3514,142411],{"style":128036,"src":142412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[19,142414,142415],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[19,142417,142418],{},"第一楼是家用电器模块： 里面包含两个盒子",[19,142420,142421,142424],{},[43,142422,142423],{},"box_hd"," 制作",[19,142426,142204,142427,142429],{},[43,142428,142423],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[3514,142431],{"style":128036,"src":142432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[3191,142434,142435,142440,142445,142448],{},[26,142436,142437,142439],{},[43,142438,142423],{}," 给 30px 的高度，2个像素的下边框",[26,142441,142442,142443],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[43,142444,140691],{},[26,142446,142447],{},"左侧盒左浮动，右侧盒子右浮动",[26,142449,142450,142452,142453,142455],{},[43,142451,2426],{},"标签之间的距离用左右的",[43,142454,32863],{},"撑开即可",[19,142457,142458],{},"结构代码",[36,142460,142461],{"className":128180,"code":140850,"language":128182,"meta":41,"style":41},[43,142462,142463,142469,142479],{"__ignoreMap":41},[46,142464,142465,142467],{"class":48,"line":49},[46,142466,132028],{"class":169},[46,142468,17573],{"class":56},[46,142470,142471,142473,142475,142477],{"class":48,"line":60},[46,142472,132660],{"class":180},[46,142474,53404],{"class":56},[46,142476,108],{"class":180},[46,142478,3345],{"class":56},[46,142480,142481],{"class":48,"line":200},[46,142482,3616],{"class":56},[19,142484,142485],{},"样式代码",[36,142487,142488],{"className":128180,"code":140850,"language":128182,"meta":41,"style":41},[43,142489,142490,142496,142506],{"__ignoreMap":41},[46,142491,142492,142494],{"class":48,"line":49},[46,142493,132028],{"class":169},[46,142495,17573],{"class":56},[46,142497,142498,142500,142502,142504],{"class":48,"line":60},[46,142499,132660],{"class":180},[46,142501,53404],{"class":56},[46,142503,108],{"class":180},[46,142505,3345],{"class":56},[46,142507,142508],{"class":48,"line":200},[46,142509,3616],{"class":56},[19,142511,142512,142424],{},[43,142513,142514],{},"box_bd",[19,142516,142517],{},"2 号盒子 box_bd，不要给高度",[3514,142519],{"style":128036,"src":142520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[19,142522,142523],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[19,142525,142526],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[19,142528,142529],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[3191,142531,142532,142544,142560],{},[26,142533,142534,142536,142537,142540,142541,142543],{},[43,142535,142514],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[43,142538,142539],{},"tab_content","，在",[43,142542,142539],{}," 里面包裹tab选项卡对应的内容",[26,142545,142546,142547,142550,142551,142553,142554,142556,142557,142559],{},"内容被一个大盒子包裹（",[43,142548,142549],{},"tab_list_item","），里面是 ",[43,142552,3191],{}," 包裹 5个 ",[43,142555,26],{},"，每个",[43,142558,26],{},"设置对应的宽度，然后设置浮动",[26,142561,142562,142563,142565,142566,142568,142569],{},"而这5个",[43,142564,26],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[43,142567,26],{},"设置",[3191,142570,142571,142589,142592],{},[26,142572,142573,142574,142576,142577,142579,142580,142582,142583,142585,142586,142588],{},"第一个小 ",[43,142575,26],{}," 分为上下结构，上面是 ",[43,142578,3191],{}," 包裹 ",[43,142581,26],{}," ，",[43,142584,26],{},"里面包裹 ",[43,142587,2426],{},"，下面插入一张图片",[26,142590,142591],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[26,142593,142594,142595,142597,142598,142600,142601,142603],{},"后面的小 ",[43,142596,26],{}," 里面先放一个",[43,142599,2426],{},"标签，然后在",[43,142602,2426],{},"标签里面插入图片即可",[19,142605,142458],{},[36,142607,142608],{"className":128927,"code":135682,"language":128929,"meta":41,"style":41},[43,142609,142610],{"__ignoreMap":41},[46,142611,142612,142614,142616,142618,142620,142622,142624,142626,142628,142630,142632,142634],{"class":48,"line":49},[46,142613,821],{"class":56},[46,142615,3514],{"class":1361},[46,142617,57204],{"class":169},[46,142619,79],{"class":56},[46,142621,135697],{"class":173},[46,142623,57212],{"class":169},[46,142625,79],{"class":56},[46,142627,135704],{"class":173},[46,142629,135707],{"class":169},[46,142631,79],{"class":56},[46,142633,135712],{"class":173},[46,142635,53274],{"class":56},[19,142637,142485],{},[36,142639,142640],{"className":128927,"code":135682,"language":128929,"meta":41,"style":41},[43,142641,142642],{"__ignoreMap":41},[46,142643,142644,142646,142648,142650,142652,142654,142656,142658,142660,142662,142664,142666],{"class":48,"line":49},[46,142645,821],{"class":56},[46,142647,3514],{"class":1361},[46,142649,57204],{"class":169},[46,142651,79],{"class":56},[46,142653,135697],{"class":173},[46,142655,57212],{"class":169},[46,142657,79],{"class":56},[46,142659,135704],{"class":173},[46,142661,135707],{"class":169},[46,142663,79],{"class":56},[46,142665,135712],{"class":173},[46,142667,53274],{"class":56},[19,142669,142670],{},"tab栏切换需求！！！！！！介绍：",[3514,142672],{"style":128036,"src":142673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[3191,142675,142676,142684,142690,142693],{},[26,142677,142678,142681,142682],{},[43,142679,142680],{},"tab","栏的布局是 ",[43,142683,140691],{},[26,142685,142686,142687,142689],{},"有多少个",[43,142688,142680],{},"选项卡，那么对应就有多少个内容",[26,142691,142692],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[26,142694,142695,142696,142699,142700,142702,142703,142705],{},"等后面我们学习了",[43,142697,142698],{},"js","之后，我们就会配合",[43,142701,142698],{},"来实现，",[43,142704,142680],{},"栏的切换",[14,142707,142709],{"id":142708},"_162-列表制作","16.2 列表制作",[479,142711,142713],{"id":142712},"_1621-准备工作","16.2.1 准备工作",[3191,142715,142716,142719,142722,142725],{},[26,142717,142718],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[26,142720,142721],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[26,142723,142724],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[26,142726,142727],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[479,142729,142731,142732,1700,142734,142736],{"id":142730},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[43,142733,133185],{},[43,142735,55678],{}," 修改",[3514,142738],{"style":128036,"src":142739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[3191,142741,142742],{},[26,142743,142744],{},"秒杀盒子 sk（ second kill ） 定位即可",[19,142746,141550],{},[36,142748,142749],{"className":128180,"code":133612,"language":128182,"meta":41,"style":41},[43,142750,142751,142755,142769,142773,142787,142791,142805,142809,142823,142827],{"__ignoreMap":41},[46,142752,142753],{"class":48,"line":49},[46,142754,133619],{"class":2253},[46,142756,142757,142759,142761,142763,142765,142767],{"class":48,"line":60},[46,142758,133624],{"class":169},[46,142760,81772],{"class":56},[46,142762,130540],{"class":180},[46,142764,53404],{"class":56},[46,142766,133633],{"class":180},[46,142768,131110],{"class":56},[46,142770,142771],{"class":48,"line":200},[46,142772,133640],{"class":2253},[46,142774,142775,142777,142779,142781,142783,142785],{"class":48,"line":211},[46,142776,133645],{"class":169},[46,142778,81772],{"class":56},[46,142780,130540],{"class":180},[46,142782,53404],{"class":56},[46,142784,56729],{"class":180},[46,142786,131110],{"class":56},[46,142788,142789],{"class":48,"line":222},[46,142790,133660],{"class":2253},[46,142792,142793,142795,142797,142799,142801,142803],{"class":48,"line":636},[46,142794,133665],{"class":169},[46,142796,81772],{"class":56},[46,142798,130540],{"class":180},[46,142800,53404],{"class":56},[46,142802,56796],{"class":180},[46,142804,131110],{"class":56},[46,142806,142807],{"class":48,"line":641},[46,142808,133680],{"class":2253},[46,142810,142811,142813,142815,142817,142819,142821],{"class":48,"line":653},[46,142812,133685],{"class":169},[46,142814,81772],{"class":56},[46,142816,130540],{"class":180},[46,142818,53404],{"class":56},[46,142820,88196],{"class":180},[46,142822,131110],{"class":56},[46,142824,142825],{"class":48,"line":659},[46,142826,133700],{"class":2253},[46,142828,142829,142831,142833,142835,142837,142839],{"class":48,"line":665},[46,142830,133705],{"class":169},[46,142832,81772],{"class":56},[46,142834,130540],{"class":180},[46,142836,53404],{"class":56},[46,142838,133714],{"class":180},[46,142840,131110],{"class":56},[19,142842,141639],{},[36,142844,142845],{"className":128180,"code":133612,"language":128182,"meta":41,"style":41},[43,142846,142847,142851,142865,142869,142883,142887,142901,142905,142919,142923],{"__ignoreMap":41},[46,142848,142849],{"class":48,"line":49},[46,142850,133619],{"class":2253},[46,142852,142853,142855,142857,142859,142861,142863],{"class":48,"line":60},[46,142854,133624],{"class":169},[46,142856,81772],{"class":56},[46,142858,130540],{"class":180},[46,142860,53404],{"class":56},[46,142862,133633],{"class":180},[46,142864,131110],{"class":56},[46,142866,142867],{"class":48,"line":200},[46,142868,133640],{"class":2253},[46,142870,142871,142873,142875,142877,142879,142881],{"class":48,"line":211},[46,142872,133645],{"class":169},[46,142874,81772],{"class":56},[46,142876,130540],{"class":180},[46,142878,53404],{"class":56},[46,142880,56729],{"class":180},[46,142882,131110],{"class":56},[46,142884,142885],{"class":48,"line":222},[46,142886,133660],{"class":2253},[46,142888,142889,142891,142893,142895,142897,142899],{"class":48,"line":636},[46,142890,133665],{"class":169},[46,142892,81772],{"class":56},[46,142894,130540],{"class":180},[46,142896,53404],{"class":56},[46,142898,56796],{"class":180},[46,142900,131110],{"class":56},[46,142902,142903],{"class":48,"line":641},[46,142904,133680],{"class":2253},[46,142906,142907,142909,142911,142913,142915,142917],{"class":48,"line":653},[46,142908,133685],{"class":169},[46,142910,81772],{"class":56},[46,142912,130540],{"class":180},[46,142914,53404],{"class":56},[46,142916,88196],{"class":180},[46,142918,131110],{"class":56},[46,142920,142921],{"class":48,"line":659},[46,142922,133700],{"class":2253},[46,142924,142925,142927,142929,142931,142933,142935],{"class":48,"line":665},[46,142926,133705],{"class":169},[46,142928,81772],{"class":56},[46,142930,130540],{"class":180},[46,142932,53404],{"class":56},[46,142934,133714],{"class":180},[46,142936,131110],{"class":56},[3191,142938,142939,142950],{},[26,142940,142941,142942,142945,142946,1700,142948],{},"1 号盒子左侧浮动 ",[43,142943,142944],{},"sk_list"," 里面包含 ",[43,142947,3191],{},[43,142949,26],{},[26,142951,142952,142953,142945,142956,1700,142958],{},"2 号盒子左侧浮动 ",[43,142954,142955],{},"sk_con",[43,142957,3191],{},[43,142959,26],{},[19,142961,141550],{},[36,142963,142964],{"className":128180,"code":140850,"language":128182,"meta":41,"style":41},[43,142965,142966,142972,142982],{"__ignoreMap":41},[46,142967,142968,142970],{"class":48,"line":49},[46,142969,132028],{"class":169},[46,142971,17573],{"class":56},[46,142973,142974,142976,142978,142980],{"class":48,"line":60},[46,142975,132660],{"class":180},[46,142977,53404],{"class":56},[46,142979,108],{"class":180},[46,142981,3345],{"class":56},[46,142983,142984],{"class":48,"line":200},[46,142985,3616],{"class":56},[19,142987,141639],{},[36,142989,142990],{"className":128180,"code":140850,"language":128182,"meta":41,"style":41},[43,142991,142992,142998,143008],{"__ignoreMap":41},[46,142993,142994,142996],{"class":48,"line":49},[46,142995,132028],{"class":169},[46,142997,17573],{"class":56},[46,142999,143000,143002,143004,143006],{"class":48,"line":60},[46,143001,132660],{"class":180},[46,143003,53404],{"class":56},[46,143005,108],{"class":180},[46,143007,3345],{"class":56},[46,143009,143010],{"class":48,"line":200},[46,143011,3616],{"class":56},[479,143013,143015,143016],{"id":143014},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[43,143017,143018],{},"sk_container",[3514,143020],{"style":128036,"src":143021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[3191,143023,143024,143029],{},[26,143025,142204,143026,143028],{},[43,143027,143018],{}," 给宽度 1200，不要给高度",[26,143030,143031],{},"一定不要忘记清除浮动",[19,143033,141550],{},[36,143035,143036],{"className":128180,"code":140850,"language":128182,"meta":41,"style":41},[43,143037,143038,143044,143054],{"__ignoreMap":41},[46,143039,143040,143042],{"class":48,"line":49},[46,143041,132028],{"class":169},[46,143043,17573],{"class":56},[46,143045,143046,143048,143050,143052],{"class":48,"line":60},[46,143047,132660],{"class":180},[46,143049,53404],{"class":56},[46,143051,108],{"class":180},[46,143053,3345],{"class":56},[46,143055,143056],{"class":48,"line":200},[46,143057,3616],{"class":56},[23,143059,143060],{},[26,143061,143062],{},"sk_hd制作",[3191,143064,143065],{},[26,143066,142284,143067,143070],{},[43,143068,143069],{},"sk_hd"," ，插入图片即可",[19,143072,141550],{},[36,143074,143075],{"className":128927,"code":135682,"language":128929,"meta":41,"style":41},[43,143076,143077],{"__ignoreMap":41},[46,143078,143079,143081,143083,143085,143087,143089,143091,143093,143095,143097,143099,143101],{"class":48,"line":49},[46,143080,821],{"class":56},[46,143082,3514],{"class":1361},[46,143084,57204],{"class":169},[46,143086,79],{"class":56},[46,143088,135697],{"class":173},[46,143090,57212],{"class":169},[46,143092,79],{"class":56},[46,143094,135704],{"class":173},[46,143096,135707],{"class":169},[46,143098,79],{"class":56},[46,143100,135712],{"class":173},[46,143102,53274],{"class":56},[23,143104,143105],{"start":60},[26,143106,143107],{},"sk_bd制作",[3191,143109,143110],{},[26,143111,143112,143113,143116,143117,1700,143119,143121],{},"3 号盒子 ",[43,143114,143115],{},"sk_bd"," ，里面包含很多的 ",[43,143118,3191],{},[43,143120,26],{},[3191,143122,143123,143132],{},[26,143124,143125,143126,143128,143129,143131],{},"当鼠标移入到 ",[43,143127,26],{}," 上面的时候显示红色的边框，在这里先给 ",[43,143130,26],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[26,143133,143134,143135,143137,143138,143140,143141,143144,143145,143147],{},"由于给每个 ",[43,143136,26],{}," 都设置了外边距，导致一行的最后一个 ",[43,143139,26],{}," 掉了下来，在这里我们利用 ",[43,143142,143143],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[43,143146,26],{},"，去掉外边距就好了",[19,143149,141550],{},[36,143151,143152],{"className":128180,"code":140369,"language":128182,"meta":41,"style":41},[43,143153,143154,143160,143172],{"__ignoreMap":41},[46,143155,143156,143158],{"class":48,"line":49},[46,143157,53578],{"class":1361},[46,143159,17573],{"class":56},[46,143161,143162,143164,143166,143168,143170],{"class":48,"line":60},[46,143163,72435],{"class":180},[46,143165,53404],{"class":56},[46,143167,2379],{"class":180},[46,143169,53523],{"class":180},[46,143171,3345],{"class":56},[46,143173,143174],{"class":48,"line":200},[46,143175,3616],{"class":56},[19,143177,141639],{},[36,143179,143180],{"className":128180,"code":140369,"language":128182,"meta":41,"style":41},[43,143181,143182,143188,143200],{"__ignoreMap":41},[46,143183,143184,143186],{"class":48,"line":49},[46,143185,53578],{"class":1361},[46,143187,17573],{"class":56},[46,143189,143190,143192,143194,143196,143198],{"class":48,"line":60},[46,143191,72435],{"class":180},[46,143193,53404],{"class":56},[46,143195,2379],{"class":180},[46,143197,53523],{"class":180},[46,143199,3345],{"class":56},[46,143201,143202],{"class":48,"line":200},[46,143203,3616],{"class":56},[14,143205,143207],{"id":143206},"_163-注册页面制作","16.3 注册页面制作",[3514,143209],{"style":128036,"src":143210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[19,143212,143213,143215],{},[2339,143214,11029],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[3514,143217],{"style":128036,"src":143218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[479,143220,143222],{"id":143221},"_1631-准备工作","16.3.1 准备工作",[3191,143224,143225,143228],{},[26,143226,143227],{},"创建register.html，引入 base.css，引入favicon图标",[26,143229,143230],{},"创建register.css ，在html页面进行引入",[479,143232,143234,143235,143237],{"id":143233},"_1632-header-头部实现","16.3.2 ",[43,143236,133185],{}," 头部实现",[3191,143239,143240,143243],{},[26,143241,143242],{},"整个内容用 版心 进行包裹",[26,143244,143245],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[19,143247,141550],{},[36,143249,143250],{"className":128927,"code":135682,"language":128929,"meta":41,"style":41},[43,143251,143252],{"__ignoreMap":41},[46,143253,143254,143256,143258,143260,143262,143264,143266,143268,143270,143272,143274,143276],{"class":48,"line":49},[46,143255,821],{"class":56},[46,143257,3514],{"class":1361},[46,143259,57204],{"class":169},[46,143261,79],{"class":56},[46,143263,135697],{"class":173},[46,143265,57212],{"class":169},[46,143267,79],{"class":56},[46,143269,135704],{"class":173},[46,143271,135707],{"class":169},[46,143273,79],{"class":56},[46,143275,135712],{"class":173},[46,143277,53274],{"class":56},[19,143279,141639],{},[36,143281,143282],{"className":128927,"code":135682,"language":128929,"meta":41,"style":41},[43,143283,143284],{"__ignoreMap":41},[46,143285,143286,143288,143290,143292,143294,143296,143298,143300,143302,143304,143306,143308],{"class":48,"line":49},[46,143287,821],{"class":56},[46,143289,3514],{"class":1361},[46,143291,57204],{"class":169},[46,143293,79],{"class":56},[46,143295,135697],{"class":173},[46,143297,57212],{"class":169},[46,143299,79],{"class":56},[46,143301,135704],{"class":173},[46,143303,135707],{"class":169},[46,143305,79],{"class":56},[46,143307,135712],{"class":173},[46,143309,53274],{"class":56},[479,143311,143313,143314,143317],{"id":143312},"_1633-registerarea-主体模块实现","16.3.3 ",[43,143315,143316],{},"registerarea"," 主体模块实现",[3514,143319],{"style":128036,"src":143320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[19,143322,143323],{},"整个大盒子 高度为 522px，设置4个边框",[19,143325,141550],{},[36,143327,143328],{"className":128180,"code":132337,"language":128182,"meta":41,"style":41},[43,143329,143330,143336,143352],{"__ignoreMap":41},[46,143331,143332,143334],{"class":48,"line":49},[46,143333,53578],{"class":1361},[46,143335,17573],{"class":56},[46,143337,143338,143340,143342,143344,143346,143348,143350],{"class":48,"line":60},[46,143339,72861],{"class":180},[46,143341,53404],{"class":56},[46,143343,2405],{"class":180},[46,143345,53459],{"class":52},[46,143347,53488],{"class":180},[46,143349,131572],{"class":180},[46,143351,3345],{"class":56},[46,143353,143354],{"class":48,"line":200},[46,143355,3616],{"class":56},[19,143357,141639],{},[36,143359,143360],{"className":128180,"code":132337,"language":128182,"meta":41,"style":41},[43,143361,143362,143368,143384],{"__ignoreMap":41},[46,143363,143364,143366],{"class":48,"line":49},[46,143365,53578],{"class":1361},[46,143367,17573],{"class":56},[46,143369,143370,143372,143374,143376,143378,143380,143382],{"class":48,"line":60},[46,143371,72861],{"class":180},[46,143373,53404],{"class":56},[46,143375,2405],{"class":180},[46,143377,53459],{"class":52},[46,143379,53488],{"class":180},[46,143381,131572],{"class":180},[46,143383,3345],{"class":56},[46,143385,143386],{"class":48,"line":200},[46,143387,3616],{"class":56},[19,143389,143390],{},"1号盒子 是一个 h3 标签，放标题",[3191,143392,143393],{},[26,143394,143395],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[19,143397,141550],{},[36,143399,143400],{"className":128180,"code":140850,"language":128182,"meta":41,"style":41},[43,143401,143402,143408,143418],{"__ignoreMap":41},[46,143403,143404,143406],{"class":48,"line":49},[46,143405,132028],{"class":169},[46,143407,17573],{"class":56},[46,143409,143410,143412,143414,143416],{"class":48,"line":60},[46,143411,132660],{"class":180},[46,143413,53404],{"class":56},[46,143415,108],{"class":180},[46,143417,3345],{"class":56},[46,143419,143420],{"class":48,"line":200},[46,143421,3616],{"class":56},[19,143423,141639],{},[36,143425,143426],{"className":128180,"code":140850,"language":128182,"meta":41,"style":41},[43,143427,143428,143434,143444],{"__ignoreMap":41},[46,143429,143430,143432],{"class":48,"line":49},[46,143431,132028],{"class":169},[46,143433,17573],{"class":56},[46,143435,143436,143438,143440,143442],{"class":48,"line":60},[46,143437,132660],{"class":180},[46,143439,53404],{"class":56},[46,143441,108],{"class":180},[46,143443,3345],{"class":56},[46,143445,143446],{"class":48,"line":200},[46,143447,3616],{"class":56},[19,143449,143450],{},"2号盒子 里面放注册的内容",[3191,143452,143453,143456,143465,143479,143492,143495,143498,143516,143530],{},[26,143454,143455],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[26,143457,143458,143459,143461,143462,143464],{},"里面的内容利用 ",[43,143460,3191],{}," 包含 ",[43,143463,26],{}," 来实现的（不需要用表格）",[26,143466,140694,143467,143469,143470,143472,143473,143475,143476,143478],{},[43,143468,26],{}," 里面，左侧放 ",[43,143471,35581],{}," 标签， 中间放",[43,143474,55786],{}," 标签， 右侧放 ",[43,143477,46],{}," 提示信息",[26,143480,143481,143482,143484,143485,143487,143488,143491],{},"左侧 ",[43,143483,35581],{},"里面的文字都是右对齐，我们可以给",[43,143486,35581],{},"设置一个宽度（88px），然后利用",[43,143489,143490],{},"text-align"," 来设置右对齐",[26,143493,143494],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[26,143496,143497],{},"右侧 span修饰一下文字颜色",[26,143499,143500,143501],{},"提示信息的样式优化",[3191,143502,143503,143506,143509],{},[26,143504,143505],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[26,143507,143508],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[26,143510,143511,143512,143515],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[43,143513,143514],{},"vertical-algin"," 来设置 图片与文字对齐方式",[26,143517,143518,143519],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[3191,143520,143521,143527],{},[26,143522,143523,143524,143526],{},"设置 ",[43,143525,25555],{}," 的 左右 12px 的内边距，设置一下文字颜色",[26,143528,143529],{},"分别设置 背景颜色",[26,143531,143532,143533,143535],{},"同意协议 和 完成注册 都是用 ",[43,143534,26],{}," 进行包裹",[19,143537,141550],{},[36,143539,143540],{"className":128180,"code":142123,"language":128182,"meta":41,"style":41},[43,143541,143542,143548,143558],{"__ignoreMap":41},[46,143543,143544,143546],{"class":48,"line":49},[46,143545,53578],{"class":1361},[46,143547,17573],{"class":56},[46,143549,143550,143552,143554,143556],{"class":48,"line":60},[46,143551,72843],{"class":180},[46,143553,53404],{"class":56},[46,143555,142140],{"class":180},[46,143557,3345],{"class":56},[46,143559,143560],{"class":48,"line":200},[46,143561,3616],{"class":56},[19,143563,141639],{},[36,143565,143566],{"className":128180,"code":142123,"language":128182,"meta":41,"style":41},[43,143567,143568,143574,143584],{"__ignoreMap":41},[46,143569,143570,143572],{"class":48,"line":49},[46,143571,53578],{"class":1361},[46,143573,17573],{"class":56},[46,143575,143576,143578,143580,143582],{"class":48,"line":60},[46,143577,72843],{"class":180},[46,143579,53404],{"class":56},[46,143581,142140],{"class":180},[46,143583,3345],{"class":56},[46,143585,143586],{"class":48,"line":200},[46,143587,3616],{"class":56},[479,143589,143591],{"id":143590},"_1634-底部实现","16.3.4 底部实现",[19,143593,141550],{},[36,143595,143596],{"className":128180,"code":142123,"language":128182,"meta":41,"style":41},[43,143597,143598,143604,143614],{"__ignoreMap":41},[46,143599,143600,143602],{"class":48,"line":49},[46,143601,53578],{"class":1361},[46,143603,17573],{"class":56},[46,143605,143606,143608,143610,143612],{"class":48,"line":60},[46,143607,72843],{"class":180},[46,143609,53404],{"class":56},[46,143611,142140],{"class":180},[46,143613,3345],{"class":56},[46,143615,143616],{"class":48,"line":200},[46,143617,3616],{"class":56},[19,143619,141639],{},[36,143621,143622],{"className":128927,"code":132284,"language":128929,"meta":41,"style":41},[43,143623,143624,143628,143642,143646],{"__ignoreMap":41},[46,143625,143626],{"class":48,"line":49},[46,143627,132291],{"class":2253},[46,143629,143630,143632,143634,143636,143638,143640],{"class":48,"line":60},[46,143631,821],{"class":56},[46,143633,53578],{"class":1361},[46,143635,55451],{"class":169},[46,143637,79],{"class":56},[46,143639,132304],{"class":173},[46,143641,53274],{"class":56},[46,143643,143644],{"class":48,"line":200},[46,143645,132311],{"class":56},[46,143647,143648,143650,143652],{"class":48,"line":211},[46,143649,53752],{"class":56},[46,143651,53578],{"class":1361},[46,143653,53274],{"class":56},[14,143655,143657],{"id":143656},"_164-项目总结","16.4 项目总结",[23,143659,143660,143663,143666,143669],{},[26,143661,143662],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[26,143664,143665],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[26,143667,143668],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[26,143670,143671],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[3514,143673],{"style":128036,"src":143674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[23,143676,143677],{"start":222},[26,143678,143679],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[3514,143681],{"style":128036,"src":143682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[23,143684,143685],{"start":636},[26,143686,143687],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[3514,143689],{"style":128036,"src":143690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[36,143692,143693],{"className":128927,"code":138337,"language":128929,"meta":41,"style":41},[43,143694,143695],{"__ignoreMap":41},[46,143696,143697,143699,143701,143703,143705,143707,143709,143711,143713,143715,143717,143719],{"class":48,"line":49},[46,143698,821],{"class":56},[46,143700,55786],{"class":1361},[46,143702,55789],{"class":169},[46,143704,79],{"class":56},[46,143706,64664],{"class":173},[46,143708,1364],{"class":169},[46,143710,79],{"class":56},[46,143712,138358],{"class":173},[46,143714,62985],{"class":169},[46,143716,79],{"class":56},[46,143718,138365],{"class":173},[46,143720,53274],{"class":56},[23,143722,143723,143726],{"start":641},[26,143724,143725],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[26,143727,143728],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[2098,143730,143731],{},"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":41,"searchDepth":60,"depth":60,"links":143733},[143734,143739,143746,143754],{"id":141360,"depth":60,"text":141361,"children":143735},[143736,143737,143738],{"id":141364,"depth":200,"text":141365},{"id":142095,"depth":200,"text":142096},{"id":142408,"depth":200,"text":142409},{"id":142708,"depth":60,"text":142709,"children":143740},[143741,143742,143744],{"id":142712,"depth":200,"text":142713},{"id":142730,"depth":200,"text":143743},"16.2.2 列表页 header 和 nav 修改",{"id":143014,"depth":200,"text":143745},"16.2.3 列表页主体 sk_container",{"id":143206,"depth":60,"text":143207,"children":143747},[143748,143749,143751,143753],{"id":143221,"depth":200,"text":143222},{"id":143233,"depth":200,"text":143750},"16.3.2 header 头部实现",{"id":143312,"depth":200,"text":143752},"16.3.3 registerarea 主体模块实现",{"id":143590,"depth":200,"text":143591},{"id":143656,"depth":60,"text":143657},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":141352,"description":25378},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":143761,"title":143762,"body":143763,"description":25378,"extension":2125,"meta":143871,"navigation":615,"path":143872,"seo":143873,"stem":143874,"__hash__":143875},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":143764,"toc":143866},[143765,143768,143772,143775,143778,143787,143796,143800,143805,143812,143830,143833,143836,143839,143842,143845,143848,143851,143854,143857,143860,143863],[10,143766,143762],{"id":143767},"_17-web服务器与网站发布",[14,143769,143771],{"id":143770},"_171-web服务器","17.1 Web服务器",[19,143773,143774],{},"把自己网站上传到服务器上，可以让其他人访问",[3514,143776],{"style":128036,"src":143777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[19,143779,143780,143783,143784],{},[2339,143781,143782],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[2339,143785,143786],{},"Web 服务器等",[19,143788,143789,143790,1700,143793,27732],{},"根据服务器在网络中所在的位置不同，又可分为 ",[2339,143791,143792],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[2339,143794,143795],{},"远程服务器",[479,143797,143799],{"id":143798},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[19,143801,143802],{},[2339,143803,143804],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[19,143806,143807,143808],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[2426,143809,143810],{"href":143810,"rel":143811},"http:\u002F\u002Ffree.3v.do\u002F",[25862],[3191,143813,143814,143817,143820,143827],{},[26,143815,143816],{},"去免费空间网站注册账号。",[26,143818,143819],{},"记录下主机名、用户名、密码、域名。",[26,143821,143822,143823,143826],{},"利用 ",[43,143824,143825],{},"utftp"," 软件 上传网站到远程服务器",[26,143828,143829],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[19,143831,143832],{},"使用软件上传，对上传软件文件进行解压",[3514,143834],{"style":128036,"src":143835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[3514,143837],{"style":128036,"src":143838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[19,143840,143841],{},"输入刚刚申请的服务器账号信息：",[3514,143843],{"style":128036,"src":143844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[3514,143846],{"style":128036,"src":143847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[3514,143849],{"style":128036,"src":143850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[3514,143852],{"style":128036,"src":143853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[19,143855,143856],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[3514,143858],{"style":128036,"src":143859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[19,143861,143862],{},"浏览器输入域名即可访问",[19,143864,143865],{},"首页一定必须是index",{"title":41,"searchDepth":60,"depth":60,"links":143867},[143868],{"id":143770,"depth":60,"text":143771,"children":143869},[143870],{"id":143798,"depth":200,"text":143799},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":143762,"description":25378},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":143877,"title":143878,"body":143879,"description":25378,"extension":2125,"meta":144806,"navigation":615,"path":144807,"seo":144808,"stem":144809,"__hash__":144810},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":143880,"toc":144789},[143881,143884,143888,143891,143894,143905,143908,143912,143916,143921,143924,143927,143930,143933,143937,143963,143967,143971,143974,143977,143981,144014,144018,144021,144024,144088,144092,144096,144099,144102,144105,144109,144154,144158,144161,144191,144195,144199,144202,144205,144209,144212,144281,144284,144392,144394,144400,144404,144407,144410,144506,144509,144513,144537,144541,144544,144548,144551,144555,144558,144561,144564,144567,144571,144574,144577,144581,144585,144588,144591,144594,144597,144601,144604,144608,144611,144614,144659,144663,144667,144670,144673,144676,144708,144712,144715,144749,144753,144756,144786],[10,143882,143878],{"id":143883},"_18-2d动画与3d转换",[14,143885,143887],{"id":143886},"_181-css3-2d转换","18.1 CSS3 2D转换",[19,143889,143890],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[19,143892,143893],{},"转换（transform）你可以简单理解为变形",[3191,143895,143896,143899,143902],{},[26,143897,143898],{},"移动：translate",[26,143900,143901],{},"旋转：rotate",[26,143903,143904],{},"缩放：scale",[3514,143906],{"style":128036,"src":143907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[479,143909,143911],{"id":143910},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[23999,143913,143915],{"id":143914},"_18111-translate介绍","18.1.1.1 translate介绍",[19,143917,143918,143919],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[2339,143920,134839],{},[3514,143922],{"style":128036,"src":143923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[19,143925,143926],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[19,143928,143929],{},"对于行内元素无效",[19,143931,143932],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[23999,143934,143936],{"id":143935},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[36,143938,143939],{"className":128180,"code":140369,"language":128182,"meta":41,"style":41},[43,143940,143941,143947,143959],{"__ignoreMap":41},[46,143942,143943,143945],{"class":48,"line":49},[46,143944,53578],{"class":1361},[46,143946,17573],{"class":56},[46,143948,143949,143951,143953,143955,143957],{"class":48,"line":60},[46,143950,72435],{"class":180},[46,143952,53404],{"class":56},[46,143954,2379],{"class":180},[46,143956,53523],{"class":180},[46,143958,3345],{"class":56},[46,143960,143961],{"class":48,"line":200},[46,143962,3616],{"class":56},[479,143964,143966],{"id":143965},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[23999,143968,143970],{"id":143969},"_18121-rotate介绍","18.1.2.1 rotate介绍",[19,143972,143973],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[3514,143975],{"style":128036,"src":143976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[23999,143978,143980],{"id":143979},"_18122-旋转效果","18.1.2.2 旋转效果",[36,143982,143984],{"className":128180,"code":143983,"language":128182,"meta":41,"style":41},"div {\n  transform: rotate(45deg);\n}\n",[43,143985,143986,143992,144010],{"__ignoreMap":41},[46,143987,143988,143990],{"class":48,"line":49},[46,143989,53578],{"class":1361},[46,143991,17573],{"class":56},[46,143993,143994,143996,143998,144001,144003,144005,144008],{"class":48,"line":60},[46,143995,138164],{"class":180},[46,143997,53404],{"class":56},[46,143999,144000],{"class":180},"rotate",[46,144002,1152],{"class":56},[46,144004,2716],{"class":180},[46,144006,144007],{"class":52},"deg",[46,144009,4740],{"class":56},[46,144011,144012],{"class":48,"line":200},[46,144013,3616],{"class":56},[23999,144015,144017],{"id":144016},"_18123-三角做法","18.1.2.3 三角做法",[19,144019,144020],{},"该下标当经过最外层大盒子时会实现向上反转",[3514,144022],{"style":128036,"src":144023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[36,144025,144026],{"className":128180,"code":136700,"language":128182,"meta":41,"style":41},[43,144027,144028,144032,144038,144048,144058,144074,144084],{"__ignoreMap":41},[46,144029,144030],{"class":48,"line":49},[46,144031,136707],{"class":2253},[46,144033,144034,144036],{"class":48,"line":60},[46,144035,136712],{"class":169},[46,144037,17573],{"class":56},[46,144039,144040,144042,144044,144046],{"class":48,"line":200},[46,144041,72533],{"class":180},[46,144043,53404],{"class":56},[46,144045,2379],{"class":180},[46,144047,3345],{"class":56},[46,144049,144050,144052,144054,144056],{"class":48,"line":211},[46,144051,72753],{"class":180},[46,144053,53404],{"class":56},[46,144055,2379],{"class":180},[46,144057,3345],{"class":56},[46,144059,144060,144062,144064,144066,144068,144070,144072],{"class":48,"line":222},[46,144061,72861],{"class":180},[46,144063,53404],{"class":56},[46,144065,2633],{"class":180},[46,144067,53459],{"class":52},[46,144069,53488],{"class":180},[46,144071,65956],{"class":180},[46,144073,3345],{"class":56},[46,144075,144076,144078,144080,144082],{"class":48,"line":636},[46,144077,136755],{"class":180},[46,144079,53404],{"class":56},[46,144081,64334],{"class":180},[46,144083,3345],{"class":56},[46,144085,144086],{"class":48,"line":641},[46,144087,3616],{"class":56},[479,144089,144091],{"id":144090},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[23999,144093,144095],{"id":144094},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[19,144097,144098],{},"设置中心点",[3514,144100],{"style":128036,"src":144101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[19,144103,144104],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[23999,144106,144108],{"id":144107},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[36,144110,144112],{"className":128180,"code":144111,"language":128182,"meta":41,"style":41},"\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",[43,144113,144114,144119,144125,144140,144145,144150],{"__ignoreMap":41},[46,144115,144116],{"class":48,"line":49},[46,144117,144118],{"class":2253},"\u002F* 转换中心点 *\u002F\n",[46,144120,144121,144123],{"class":48,"line":60},[46,144122,53578],{"class":1361},[46,144124,17573],{"class":56},[46,144126,144127,144130,144132,144134,144136,144138],{"class":48,"line":200},[46,144128,144129],{"class":180},"  transform-origin",[46,144131,53404],{"class":56},[46,144133,53559],{"class":180},[46,144135,19145],{"class":180},[46,144137,132043],{"class":56},[46,144139,136853],{"class":2253},[46,144141,144142],{"class":48,"line":211},[46,144143,144144],{"class":2253},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[46,144146,144147],{"class":48,"line":222},[46,144148,144149],{"class":2253},"  \u002F* transform-origin: left top; *\u002F\n",[46,144151,144152],{"class":48,"line":636},[46,144153,3616],{"class":56},[23999,144155,144157],{"id":144156},"_18133-旋转案例","18.1.3.3 旋转案例",[3514,144159],{"style":128036,"src":144160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[36,144162,144163],{"className":128180,"code":143983,"language":128182,"meta":41,"style":41},[43,144164,144165,144171,144187],{"__ignoreMap":41},[46,144166,144167,144169],{"class":48,"line":49},[46,144168,53578],{"class":1361},[46,144170,17573],{"class":56},[46,144172,144173,144175,144177,144179,144181,144183,144185],{"class":48,"line":60},[46,144174,138164],{"class":180},[46,144176,53404],{"class":56},[46,144178,144000],{"class":180},[46,144180,1152],{"class":56},[46,144182,2716],{"class":180},[46,144184,144007],{"class":52},[46,144186,4740],{"class":56},[46,144188,144189],{"class":48,"line":200},[46,144190,3616],{"class":56},[479,144192,144194],{"id":144193},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[23999,144196,144198],{"id":144197},"_18141-scale介绍","18.1.4.1 scale介绍",[19,144200,144201],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[3514,144203],{"style":128036,"src":144204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[23999,144206,144208],{"id":144207},"_18142-分页按钮","18.1.4.2 分页按钮",[3514,144210],{"style":128036,"src":144211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[36,144213,144215],{"className":128180,"code":144214,"language":128182,"meta":41,"style":41},"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",[43,144216,144217,144223,144239,144243,144247,144252,144258,144272,144277],{"__ignoreMap":41},[46,144218,144219,144221],{"class":48,"line":49},[46,144220,53578],{"class":1361},[46,144222,17573],{"class":56},[46,144224,144225,144227,144229,144232,144234,144237],{"class":48,"line":60},[46,144226,138164],{"class":180},[46,144228,53404],{"class":56},[46,144230,144231],{"class":180},"scale",[46,144233,1152],{"class":56},[46,144235,144236],{"class":180},"1.2",[46,144238,4740],{"class":56},[46,144240,144241],{"class":48,"line":200},[46,144242,3616],{"class":56},[46,144244,144245],{"class":48,"line":211},[46,144246,137641],{"class":56},[46,144248,144249],{"class":48,"line":222},[46,144250,144251],{"class":2253},"\u002F* 2D 缩放 *\u002F\n",[46,144253,144254,144256],{"class":48,"line":636},[46,144255,53578],{"class":1361},[46,144257,17573],{"class":56},[46,144259,144260,144262,144264,144266,144268,144270],{"class":48,"line":641},[46,144261,138164],{"class":180},[46,144263,53404],{"class":56},[46,144265,144231],{"class":180},[46,144267,1152],{"class":56},[46,144269,144236],{"class":180},[46,144271,4740],{"class":56},[46,144273,144274],{"class":48,"line":653},[46,144275,144276],{"class":2253},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[46,144278,144279],{"class":48,"line":659},[46,144280,3616],{"class":56},[19,144282,144283],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[36,144285,144287],{"className":128180,"code":144286,"language":128182,"meta":41,"style":41},"\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",[43,144288,144289,144294,144304,144325,144346,144350,144355,144361,144388],{"__ignoreMap":41},[46,144290,144291],{"class":48,"line":49},[46,144292,144293],{"class":2253},"\u002F* 定义动画 *\u002F\n",[46,144295,144296,144299,144302],{"class":48,"line":60},[46,144297,144298],{"class":52},"@keyframes",[46,144300,144301],{"class":439}," move",[46,144303,17573],{"class":56},[46,144305,144306,144309,144311,144313,144315,144318,144320,144322],{"class":48,"line":200},[46,144307,144308],{"class":169},"  0%",[46,144310,81772],{"class":56},[46,144312,50102],{"class":180},[46,144314,53404],{"class":56},[46,144316,144317],{"class":180},"translateX",[46,144319,1152],{"class":56},[46,144321,2379],{"class":180},[46,144323,144324],{"class":56},"); }\n",[46,144326,144327,144330,144332,144334,144336,144338,144340,144342,144344],{"class":48,"line":211},[46,144328,144329],{"class":169},"  100%",[46,144331,81772],{"class":56},[46,144333,50102],{"class":180},[46,144335,53404],{"class":56},[46,144337,144317],{"class":180},[46,144339,1152],{"class":56},[46,144341,1155],{"class":180},[46,144343,53459],{"class":52},[46,144345,144324],{"class":56},[46,144347,144348],{"class":48,"line":222},[46,144349,3616],{"class":56},[46,144351,144352],{"class":48,"line":636},[46,144353,144354],{"class":2253},"\u002F* 调用动画 *\u002F\n",[46,144356,144357,144359],{"class":48,"line":641},[46,144358,53578],{"class":1361},[46,144360,17573],{"class":56},[46,144362,144363,144366,144368,144370,144372,144374,144376,144378,144380,144383,144386],{"class":48,"line":653},[46,144364,144365],{"class":180},"  animation",[46,144367,53404],{"class":56},[46,144369,136866],{"class":180},[46,144371,27110],{"class":180},[46,144373,2881],{"class":52},[46,144375,80645],{"class":180},[46,144377,887],{"class":180},[46,144379,2881],{"class":52},[46,144381,144382],{"class":180}," infinite",[46,144384,144385],{"class":180}," alternate",[46,144387,3345],{"class":56},[46,144389,144390],{"class":48,"line":659},[46,144391,3616],{"class":56},[19,144393,144283],{},[36,144395,144398],{"className":144396,"code":144397,"language":571},[569],"\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",[43,144399,144397],{"__ignoreMap":41},[23999,144401,144403],{"id":144402},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[19,144405,144406],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[3514,144408],{"style":128036,"src":144409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[36,144411,144412],{"className":128180,"code":144286,"language":128182,"meta":41,"style":41},[43,144413,144414,144418,144426,144444,144464,144468,144472,144478,144502],{"__ignoreMap":41},[46,144415,144416],{"class":48,"line":49},[46,144417,144293],{"class":2253},[46,144419,144420,144422,144424],{"class":48,"line":60},[46,144421,144298],{"class":52},[46,144423,144301],{"class":439},[46,144425,17573],{"class":56},[46,144427,144428,144430,144432,144434,144436,144438,144440,144442],{"class":48,"line":200},[46,144429,144308],{"class":169},[46,144431,81772],{"class":56},[46,144433,50102],{"class":180},[46,144435,53404],{"class":56},[46,144437,144317],{"class":180},[46,144439,1152],{"class":56},[46,144441,2379],{"class":180},[46,144443,144324],{"class":56},[46,144445,144446,144448,144450,144452,144454,144456,144458,144460,144462],{"class":48,"line":211},[46,144447,144329],{"class":169},[46,144449,81772],{"class":56},[46,144451,50102],{"class":180},[46,144453,53404],{"class":56},[46,144455,144317],{"class":180},[46,144457,1152],{"class":56},[46,144459,1155],{"class":180},[46,144461,53459],{"class":52},[46,144463,144324],{"class":56},[46,144465,144466],{"class":48,"line":222},[46,144467,3616],{"class":56},[46,144469,144470],{"class":48,"line":636},[46,144471,144354],{"class":2253},[46,144473,144474,144476],{"class":48,"line":641},[46,144475,53578],{"class":1361},[46,144477,17573],{"class":56},[46,144479,144480,144482,144484,144486,144488,144490,144492,144494,144496,144498,144500],{"class":48,"line":653},[46,144481,144365],{"class":180},[46,144483,53404],{"class":56},[46,144485,136866],{"class":180},[46,144487,27110],{"class":180},[46,144489,2881],{"class":52},[46,144491,80645],{"class":180},[46,144493,887],{"class":180},[46,144495,2881],{"class":52},[46,144497,144382],{"class":180},[46,144499,144385],{"class":180},[46,144501,3345],{"class":56},[46,144503,144504],{"class":48,"line":659},[46,144505,3616],{"class":56},[19,144507,144508],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[479,144510,144512],{"id":144511},"_1823-知识点回顾","18.2.3 知识点回顾",[36,144514,144515],{"className":128180,"code":130349,"language":128182,"meta":41,"style":41},[43,144516,144517,144523,144533],{"__ignoreMap":41},[46,144518,144519,144521],{"class":48,"line":49},[46,144520,53578],{"class":1361},[46,144522,17573],{"class":56},[46,144524,144525,144527,144529,144531],{"class":48,"line":60},[46,144526,130362],{"class":180},[46,144528,53404],{"class":56},[46,144530,63701],{"class":180},[46,144532,3345],{"class":56},[46,144534,144535],{"class":48,"line":200},[46,144536,3616],{"class":56},[14,144538,144540],{"id":144539},"_183-3d-转换","18.3 3D 转换",[19,144542,144543],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[479,144545,144547],{"id":144546},"_1831-坐标轴认识","18.3.1 坐标轴认识",[3514,144549],{"style":128036,"src":144550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[479,144552,144554],{"id":144553},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[3514,144556],{"style":128036,"src":144557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[19,144559,144560],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[19,144562,144563],{},"translate3d的效果需要搭配透视perspective来使用",[3514,144565],{"style":128036,"src":144566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[479,144568,144570],{"id":144569},"_1833-透视-perspective","18.3.3 透视 perspective",[3514,144572],{"style":128036,"src":144573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[19,144575,144576],{},"透视写在父盒子上，单位为像素",[479,144578,144580],{"id":144579},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[23999,144582,144584],{"id":144583},"_18341-分开解释","18.3.4.1 分开解释",[3514,144586],{"style":128036,"src":144587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[3514,144589],{"style":128036,"src":144590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[3514,144592],{"style":128036,"src":144593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[19,144595,144596],{},"总结来说就是左手原则",[23999,144598,144600],{"id":144599},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[3514,144602],{"style":128036,"src":144603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[479,144605,144607],{"id":144606},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[3514,144609],{"style":128036,"src":144610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[3514,144612],{"style":128036,"src":144613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[36,144615,144617],{"className":128180,"code":144616,"language":128182,"meta":41,"style":41},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[43,144618,144619,144625,144638,144655],{"__ignoreMap":41},[46,144620,144621,144623],{"class":48,"line":49},[46,144622,53578],{"class":1361},[46,144624,17573],{"class":56},[46,144626,144627,144630,144632,144634,144636],{"class":48,"line":60},[46,144628,144629],{"class":180},"  perspective",[46,144631,53404],{"class":56},[46,144633,67039],{"class":180},[46,144635,53459],{"class":52},[46,144637,3345],{"class":56},[46,144639,144640,144642,144644,144647,144649,144651,144653],{"class":48,"line":200},[46,144641,138164],{"class":180},[46,144643,53404],{"class":56},[46,144645,144646],{"class":180},"rotateX",[46,144648,1152],{"class":56},[46,144650,2716],{"class":180},[46,144652,144007],{"class":52},[46,144654,4740],{"class":56},[46,144656,144657],{"class":48,"line":211},[46,144658,3616],{"class":56},[479,144660,144662],{"id":144661},"_1836-案例","18.3.6 案例",[23999,144664,144666],{"id":144665},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[3514,144668],{"style":128036,"src":144669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[3514,144671],{"style":128036,"src":144672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[3514,144674],{"style":128036,"src":144675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[36,144677,144679],{"className":128180,"code":144678,"language":128182,"meta":41,"style":41},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[43,144680,144681,144686,144692,144704],{"__ignoreMap":41},[46,144682,144683],{"class":48,"line":49},[46,144684,144685],{"class":2253},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[46,144687,144688,144690],{"class":48,"line":60},[46,144689,135177],{"class":169},[46,144691,17573],{"class":56},[46,144693,144694,144696,144698,144700,144702],{"class":48,"line":200},[46,144695,144629],{"class":180},[46,144697,53404],{"class":56},[46,144699,67039],{"class":180},[46,144701,53459],{"class":52},[46,144703,3345],{"class":56},[46,144705,144706],{"class":48,"line":211},[46,144707,3616],{"class":56},[23999,144709,144711],{"id":144710},"_18362-3d导航栏","18.3.6.2 3D导航栏",[3514,144713],{"style":128036,"src":144714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[36,144716,144717],{"className":128927,"code":132284,"language":128929,"meta":41,"style":41},[43,144718,144719,144723,144737,144741],{"__ignoreMap":41},[46,144720,144721],{"class":48,"line":49},[46,144722,132291],{"class":2253},[46,144724,144725,144727,144729,144731,144733,144735],{"class":48,"line":60},[46,144726,821],{"class":56},[46,144728,53578],{"class":1361},[46,144730,55451],{"class":169},[46,144732,79],{"class":56},[46,144734,132304],{"class":173},[46,144736,53274],{"class":56},[46,144738,144739],{"class":48,"line":200},[46,144740,132311],{"class":56},[46,144742,144743,144745,144747],{"class":48,"line":211},[46,144744,53752],{"class":56},[46,144746,53578],{"class":1361},[46,144748,53274],{"class":56},[23999,144750,144752],{"id":144751},"_18363-旋转木马","18.3.6.3 旋转木马",[3514,144754],{"style":128036,"src":144755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[36,144757,144758],{"className":128180,"code":143983,"language":128182,"meta":41,"style":41},[43,144759,144760,144766,144782],{"__ignoreMap":41},[46,144761,144762,144764],{"class":48,"line":49},[46,144763,53578],{"class":1361},[46,144765,17573],{"class":56},[46,144767,144768,144770,144772,144774,144776,144778,144780],{"class":48,"line":60},[46,144769,138164],{"class":180},[46,144771,53404],{"class":56},[46,144773,144000],{"class":180},[46,144775,1152],{"class":56},[46,144777,2716],{"class":180},[46,144779,144007],{"class":52},[46,144781,4740],{"class":56},[46,144783,144784],{"class":48,"line":200},[46,144785,3616],{"class":56},[2098,144787,144788],{},"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":41,"searchDepth":60,"depth":60,"links":144790},[144791,144798],{"id":143886,"depth":60,"text":143887,"children":144792},[144793,144794,144795,144796,144797],{"id":143910,"depth":200,"text":143911},{"id":143965,"depth":200,"text":143966},{"id":144090,"depth":200,"text":144091},{"id":144193,"depth":200,"text":144194},{"id":144511,"depth":200,"text":144512},{"id":144539,"depth":60,"text":144540,"children":144799},[144800,144801,144802,144803,144804,144805],{"id":144546,"depth":200,"text":144547},{"id":144553,"depth":200,"text":144554},{"id":144569,"depth":200,"text":144570},{"id":144579,"depth":200,"text":144580},{"id":144606,"depth":200,"text":144607},{"id":144661,"depth":200,"text":144662},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":143878,"description":25378},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":144812,"title":144813,"body":144814,"description":25378,"extension":2125,"meta":145017,"navigation":615,"path":145018,"seo":145019,"stem":145020,"__hash__":145021},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":144815,"toc":145006},[144816,144819,144823,144826,144829,144833,144836,144839,144842,144846,144849,144853,144856,144860,144863,144867,144881,144885,144910,144913,144916,144933,144937,144941,144944,144947,144951,144954,144957,144975,144979,144982,144996,145000,145003],[10,144817,144813],{"id":144818},"_19-移动端基础-前缀现状与视口",[14,144820,144822],{"id":144821},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[3514,144824],{"style":128036,"src":144825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[19,144827,144828],{},"意思就是加个前缀，增加兼容性",[14,144830,144832],{"id":144831},"_192-移动端现状认识","19.2 移动端现状认识",[3514,144834],{"style":128036,"src":144835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[19,144837,144838],{},"调试方法：",[3514,144840],{"style":128036,"src":144841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,144843,144845],{"id":144844},"_193-视口","19.3 视口",[19,144847,144848],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[479,144850,144852],{"id":144851},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[3514,144854],{"style":128036,"src":144855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[479,144857,144859],{"id":144858},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[3514,144861],{"style":128036,"src":144862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[479,144864,144866],{"id":144865},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[3191,144868,144869,144872,144875,144878],{},[26,144870,144871],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[26,144873,144874],{},"理想视口，对设备来讲，是最理想的视口尺寸",[26,144876,144877],{},"需要手动添写meta视口标签通知浏览器操作",[26,144879,144880],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[479,144882,144884],{"id":144883},"_1934-meta视口标签","19.3.4 meta视口标签",[36,144886,144888],{"className":128927,"code":144887,"language":128929,"meta":41,"style":41},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[43,144889,144890],{"__ignoreMap":41},[46,144891,144892,144894,144896,144898,144900,144902,144904,144906,144908],{"class":48,"line":49},[46,144893,821],{"class":56},[46,144895,53311],{"class":1361},[46,144897,1364],{"class":169},[46,144899,79],{"class":56},[46,144901,53358],{"class":173},[46,144903,53338],{"class":169},[46,144905,79],{"class":56},[46,144907,53365],{"class":173},[46,144909,53274],{"class":56},[3514,144911],{"style":128036,"src":144912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[19,144914,144915],{},"标准视口设置：",[23,144917,144918,144921,144924,144927,144930],{},[26,144919,144920],{},"视口宽度和设备保持一致",[26,144922,144923],{},"视口的默认缩放比例1.0",[26,144925,144926],{},"不允许用户自行缩放",[26,144928,144929],{},"最大允许的缩放比例1.0",[26,144931,144932],{},"最小允许的缩放比例1.0",[479,144934,144936],{"id":144935},"_1935-二倍图","19.3.5 二倍图",[23999,144938,144940],{"id":144939},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[3514,144942],{"style":128036,"src":144943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[3514,144945],{"style":128036,"src":144946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[23999,144948,144950],{"id":144949},"_19352-多倍图","19.3.5.2 多倍图",[3514,144952],{"style":128036,"src":144953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[19,144955,144956],{},"二倍图法，代码如下：",[36,144958,144960],{"className":128180,"code":144959,"language":128182,"meta":41,"style":41},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[43,144961,144962,144967],{"__ignoreMap":41},[46,144963,144964],{"class":48,"line":49},[46,144965,144966],{"class":2253},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[46,144968,144969,144972],{"class":48,"line":60},[46,144970,144971],{"class":1361},"background-size",[46,144973,144974],{"class":56},": 50% 50%;\n",[23999,144976,144978],{"id":144977},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[3514,144980],{"style":128036,"src":144981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[23,144983,144984,144987,144990,144993],{},[26,144985,144986],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[26,144988,144989],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[26,144991,144992],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[26,144994,144995],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[23999,144997,144999],{"id":144998},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[3514,145001],{"style":128036,"src":145002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[2098,145004,145005],{},"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":41,"searchDepth":60,"depth":60,"links":145007},[145008,145009,145010],{"id":144821,"depth":60,"text":144822},{"id":144831,"depth":60,"text":144832},{"id":144844,"depth":60,"text":144845,"children":145011},[145012,145013,145014,145015,145016],{"id":144851,"depth":200,"text":144852},{"id":144858,"depth":200,"text":144859},{"id":144865,"depth":200,"text":144866},{"id":144883,"depth":200,"text":144884},{"id":144935,"depth":200,"text":144936},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":144813,"description":25378},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":145023,"title":145024,"body":145025,"description":25378,"extension":2125,"meta":145902,"navigation":615,"path":145903,"seo":145904,"stem":145905,"__hash__":145906},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":145026,"toc":145886},[145027,145030,145034,145041,145044,145051,145054,145059,145062,145066,145070,145077,145080,145083,145087,145090,145093,145096,145099,145102,145106,145109,145113,145115,145118,145121,145124,145127,145129,145132,145134,145164,145166,145196,145200,145203,145207,145210,145227,145230,145233,145309,145311,145314,145317,145320,145323,145325,145328,145331,145335,145357,145360,145363,145367,145370,145376,145379,145383,145386,145389,145393,145396,145399,145402,145406,145409,145412,145415,145418,145422,145425,145429,145436,145439,145442,145445,145448,145458,145461,145464,145471,145474,145478,145481,145484,145488,145491,145494,145497,145542,145545,145548,145551,145553,145682,145684,145722,145725,145728,145730,145848,145850,145884],[10,145028,145024],{"id":145029},"_20-移动端布局实战上篇",[14,145031,145033],{"id":145032},"_201-移动端主流方案","20.1 移动端主流方案",[23,145035,145036],{},[26,145037,145038],{},[2339,145039,145040],{},"单独移动端页面（主流）",[3514,145042],{"style":128036,"src":145043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[23,145045,145046],{"start":60},[26,145047,145048],{},[2339,145049,145050],{},"响应式兼容PC移动端",[3514,145052],{"style":128036,"src":145053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[23,145055,145056],{"start":200},[26,145057,145058],{},"两种页面选型布局方式",[3514,145060],{"style":128036,"src":145061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,145063,145065],{"id":145064},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[479,145067,145069],{"id":145068},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[19,145071,145072,145073],{},"官网地址： ",[2426,145074,145075],{"href":145075,"rel":145076},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[25862],[3514,145078],{"style":128036,"src":145079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[3514,145081],{"style":128036,"src":145082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[479,145084,145086],{"id":145085},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[3514,145088],{"style":128036,"src":145089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[3514,145091],{"style":128036,"src":145092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[19,145094,145095],{},"去除高亮：",[19,145097,145098],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[19,145100,145101],{},"-webkit- tap-highlight-color: transparent;",[14,145103,145105],{"id":145104},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[3514,145107],{"style":128036,"src":145108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,145110,145112],{"id":145111},"_204-流式布局案例","20.4 流式布局案例",[19,145114,2226],{},[19,145116,145117],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[19,145119,145120],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[19,145122,145123],{},"图片格式：",[3514,145125],{"style":128036,"src":145126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[19,145128,137223],{},[3514,145130],{"style":128036,"src":145131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[19,145133,141550],{},[36,145135,145136],{"className":128927,"code":135682,"language":128929,"meta":41,"style":41},[43,145137,145138],{"__ignoreMap":41},[46,145139,145140,145142,145144,145146,145148,145150,145152,145154,145156,145158,145160,145162],{"class":48,"line":49},[46,145141,821],{"class":56},[46,145143,3514],{"class":1361},[46,145145,57204],{"class":169},[46,145147,79],{"class":56},[46,145149,135697],{"class":173},[46,145151,57212],{"class":169},[46,145153,79],{"class":56},[46,145155,135704],{"class":173},[46,145157,135707],{"class":169},[46,145159,79],{"class":56},[46,145161,135712],{"class":173},[46,145163,53274],{"class":56},[19,145165,141639],{},[36,145167,145168],{"className":128927,"code":135682,"language":128929,"meta":41,"style":41},[43,145169,145170],{"__ignoreMap":41},[46,145171,145172,145174,145176,145178,145180,145182,145184,145186,145188,145190,145192,145194],{"class":48,"line":49},[46,145173,821],{"class":56},[46,145175,3514],{"class":1361},[46,145177,57204],{"class":169},[46,145179,79],{"class":56},[46,145181,135697],{"class":173},[46,145183,57212],{"class":169},[46,145185,79],{"class":56},[46,145187,135704],{"class":173},[46,145189,135707],{"class":169},[46,145191,79],{"class":56},[46,145193,135712],{"class":173},[46,145195,53274],{"class":56},[14,145197,145199],{"id":145198},"_205-flex布局","20.5 flex布局",[3514,145201],{"style":128036,"src":145202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[479,145204,145206],{"id":145205},"_2051-布局原理","20.5.1 布局原理",[19,145208,145209],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[3191,145211,145212,145215,145218,145221,145224],{},[26,145213,145214],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[26,145216,145217],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[26,145219,145220],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[26,145222,145223],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[26,145225,145226],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[19,145228,145229],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[19,145231,145232],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[36,145234,145236],{"className":128180,"code":145235,"language":128182,"meta":41,"style":41},"\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",[43,145237,145238,145243,145250,145260,145272,145283,145294,145305],{"__ignoreMap":41},[46,145239,145240],{"class":48,"line":49},[46,145241,145242],{"class":2253},"\u002F* Flex 弹性布局 *\u002F\n",[46,145244,145245,145248],{"class":48,"line":60},[46,145246,145247],{"class":169},".container",[46,145249,17573],{"class":56},[46,145251,145252,145254,145256,145258],{"class":48,"line":200},[46,145253,129796],{"class":180},[46,145255,53404],{"class":56},[46,145257,53444],{"class":180},[46,145259,3345],{"class":56},[46,145261,145262,145265,145267,145270],{"class":48,"line":211},[46,145263,145264],{"class":180},"  flex-direction",[46,145266,53404],{"class":56},[46,145268,145269],{"class":180},"row",[46,145271,3345],{"class":56},[46,145273,145274,145277,145279,145281],{"class":48,"line":222},[46,145275,145276],{"class":180},"  justify-content",[46,145278,53404],{"class":56},[46,145280,53635],{"class":180},[46,145282,3345],{"class":56},[46,145284,145285,145288,145290,145292],{"class":48,"line":636},[46,145286,145287],{"class":180},"  align-items",[46,145289,53404],{"class":56},[46,145291,53559],{"class":180},[46,145293,3345],{"class":56},[46,145295,145296,145299,145301,145303],{"class":48,"line":641},[46,145297,145298],{"class":180},"  flex-wrap",[46,145300,53404],{"class":56},[46,145302,80575],{"class":180},[46,145304,3345],{"class":56},[46,145306,145307],{"class":48,"line":653},[46,145308,3616],{"class":56},[19,145310,72418],{},[19,145312,145313],{},".form-item .male-label {",[19,145315,145316],{},"   margin-right: 20px;",[19,145318,145319],{},"   display: inline-flex;",[19,145321,145322],{},"   align-items: center;",[19,145324,3131],{},[3514,145326],{"style":128036,"src":145327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[3514,145329],{"style":128036,"src":145330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[479,145332,145334],{"id":145333},"_2052-常见父项属性","20.5.2 常见父项属性",[23,145336,145337,145340,145343,145346,145349,145352,145355],{},[26,145338,145339],{},"flex-direction：设置主轴的方向",[26,145341,145342],{},"justify-content：设置主轴上的子元素排列方式",[26,145344,145345],{},"flex-wrap：设置子元素是否换行",[26,145347,145348],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[26,145350,145351],{},"align-items：设置侧轴上的子元素排列方式（单行）",[26,145353,145354],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[26,145356,145339],{},[3514,145358],{"style":128036,"src":145359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[3514,145361],{"style":128036,"src":145362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[23,145364,145365],{"start":60},[26,145366,145342],{},[3514,145368],{"style":128036,"src":145369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[19,145371,145372,145375],{},[43,145373,145374],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[19,145377,145378],{},"跟着主轴走",[23,145380,145381],{"start":200},[26,145382,145345],{},[3514,145384],{"style":128036,"src":145385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[19,145387,145388],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[23,145390,145391],{"start":211},[26,145392,145348],{},[3514,145394],{"style":128036,"src":145395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[19,145397,145398],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[19,145400,145401],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[23,145403,145404],{"start":222},[26,145405,145351],{},[3514,145407],{"style":128036,"src":145408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[19,145410,145411],{},"align-items与align-content之间的区别：",[19,145413,145414],{},"单找items，多找content",[3514,145416],{"style":128036,"src":145417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[23,145419,145420],{"start":636},[26,145421,145354],{},[3514,145423],{"style":128036,"src":145424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[479,145426,145428],{"id":145427},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[23,145430,145431],{},[26,145432,145433],{},[2339,145434,145435],{},"flex 属性",[19,145437,145438],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[3514,145440],{"style":128036,"src":145441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[19,145443,145444],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[19,145446,145447],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[23,145449,145450],{"start":60},[26,145451,145452,15797,145455],{},[2339,145453,145454],{},"align-self",[2339,145456,145457],{},"控制子项自己在侧轴上的排列方式",[3514,145459],{"style":128036,"src":145460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[19,145462,145463],{},"单个子盒子在父盒子侧轴上的排列方式",[23,145465,145466],{"start":200},[26,145467,145468,145470],{},[2339,145469,97260],{}," 属性定义项目的排列顺序",[3514,145472],{"style":128036,"src":145473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[479,145475,145477],{"id":145476},"_2054-背景线性渐变","20.5.4 背景线性渐变",[3514,145479],{"style":128036,"src":145480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[19,145482,145483],{},"必须要添加浏览器的私有前缀",[479,145485,145487],{"id":145486},"_2055-携程网首页案例","20.5.5 携程网首页案例",[19,145489,145490],{},"学到最重要的知识：",[19,145492,145493],{},"flex处理这样的布局思路",[3514,145495],{"style":128036,"src":145496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[36,145498,145500],{"className":128180,"code":145499,"language":128182,"meta":41,"style":41},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[43,145501,145502,145508,145518,145528,145538],{"__ignoreMap":41},[46,145503,145504,145506],{"class":48,"line":49},[46,145505,145247],{"class":169},[46,145507,17573],{"class":56},[46,145509,145510,145512,145514,145516],{"class":48,"line":60},[46,145511,129796],{"class":180},[46,145513,53404],{"class":56},[46,145515,53444],{"class":180},[46,145517,3345],{"class":56},[46,145519,145520,145522,145524,145526],{"class":48,"line":200},[46,145521,145276],{"class":180},[46,145523,53404],{"class":56},[46,145525,53559],{"class":180},[46,145527,3345],{"class":56},[46,145529,145530,145532,145534,145536],{"class":48,"line":211},[46,145531,145287],{"class":180},[46,145533,53404],{"class":56},[46,145535,53559],{"class":180},[46,145537,3345],{"class":56},[46,145539,145540],{"class":48,"line":222},[46,145541,3616],{"class":56},[19,145543,145544],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[19,145546,145547],{},"使用属性选择器",[3514,145549],{"style":128036,"src":145550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[19,145552,70854],{},[36,145554,145556],{"className":128927,"code":145555,"language":128929,"meta":41,"style":41},"\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",[43,145557,145558,145563,145577,145582,145602,145607,145626,145631,145650,145655,145674],{"__ignoreMap":41},[46,145559,145560],{"class":48,"line":49},[46,145561,145562],{"class":2253},"\u003C!-- 携程网移动端案例结构 -->\n",[46,145564,145565,145567,145569,145571,145573,145575],{"class":48,"line":60},[46,145566,821],{"class":56},[46,145568,53578],{"class":1361},[46,145570,55451],{"class":169},[46,145572,79],{"class":56},[46,145574,94286],{"class":173},[46,145576,53274],{"class":56},[46,145578,145579],{"class":48,"line":200},[46,145580,145581],{"class":2253},"  \u003C!-- 搜索栏 -->\n",[46,145583,145584,145586,145588,145590,145592,145595,145598,145600],{"class":48,"line":211},[46,145585,54111],{"class":56},[46,145587,53578],{"class":1361},[46,145589,55451],{"class":169},[46,145591,79],{"class":56},[46,145593,145594],{"class":173},"\"search-index\"",[46,145596,145597],{"class":56},">...\u003C\u002F",[46,145599,53578],{"class":1361},[46,145601,53274],{"class":56},[46,145603,145604],{"class":48,"line":222},[46,145605,145606],{"class":2253},"  \u003C!-- 焦点图 -->\n",[46,145608,145609,145611,145613,145615,145617,145620,145622,145624],{"class":48,"line":636},[46,145610,54111],{"class":56},[46,145612,53578],{"class":1361},[46,145614,55451],{"class":169},[46,145616,79],{"class":56},[46,145618,145619],{"class":173},"\"focus\"",[46,145621,145597],{"class":56},[46,145623,53578],{"class":1361},[46,145625,53274],{"class":56},[46,145627,145628],{"class":48,"line":641},[46,145629,145630],{"class":2253},"  \u003C!-- 主导航 -->\n",[46,145632,145633,145635,145637,145639,145641,145644,145646,145648],{"class":48,"line":653},[46,145634,54111],{"class":56},[46,145636,53578],{"class":1361},[46,145638,55451],{"class":169},[46,145640,79],{"class":56},[46,145642,145643],{"class":173},"\"local-nav\"",[46,145645,145597],{"class":56},[46,145647,53578],{"class":1361},[46,145649,53274],{"class":56},[46,145651,145652],{"class":48,"line":659},[46,145653,145654],{"class":2253},"  \u003C!-- 子导航 -->\n",[46,145656,145657,145659,145661,145663,145665,145668,145670,145672],{"class":48,"line":665},[46,145658,54111],{"class":56},[46,145660,53578],{"class":1361},[46,145662,55451],{"class":169},[46,145664,79],{"class":56},[46,145666,145667],{"class":173},"\"nav-common\"",[46,145669,145597],{"class":56},[46,145671,53578],{"class":1361},[46,145673,53274],{"class":56},[46,145675,145676,145678,145680],{"class":48,"line":670},[46,145677,53752],{"class":56},[46,145679,53578],{"class":1361},[46,145681,53274],{"class":56},[19,145683,72418],{},[36,145685,145686],{"className":128180,"code":138632,"language":128182,"meta":41,"style":41},[43,145687,145688,145702,145718],{"__ignoreMap":41},[46,145689,145690,145692,145694,145696,145698,145700],{"class":48,"line":49},[46,145691,55786],{"class":1361},[46,145693,3076],{"class":56},[46,145695,104997],{"class":169},[46,145697,79],{"class":52},[46,145699,64664],{"class":173},[46,145701,138649],{"class":56},[46,145703,145704,145706,145708,145710,145712,145714,145716],{"class":48,"line":60},[46,145705,72861],{"class":180},[46,145707,53404],{"class":56},[46,145709,2405],{"class":180},[46,145711,53459],{"class":52},[46,145713,53488],{"class":180},[46,145715,131760],{"class":180},[46,145717,3345],{"class":56},[46,145719,145720],{"class":48,"line":200},[46,145721,3616],{"class":56},[19,145723,145724],{},"总代码和效果展示：",[3514,145726],{"style":128036,"src":145727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[19,145729,70854],{},[36,145731,145732],{"className":128927,"code":145555,"language":128929,"meta":41,"style":41},[43,145733,145734,145738,145752,145756,145774,145778,145796,145800,145818,145822,145840],{"__ignoreMap":41},[46,145735,145736],{"class":48,"line":49},[46,145737,145562],{"class":2253},[46,145739,145740,145742,145744,145746,145748,145750],{"class":48,"line":60},[46,145741,821],{"class":56},[46,145743,53578],{"class":1361},[46,145745,55451],{"class":169},[46,145747,79],{"class":56},[46,145749,94286],{"class":173},[46,145751,53274],{"class":56},[46,145753,145754],{"class":48,"line":200},[46,145755,145581],{"class":2253},[46,145757,145758,145760,145762,145764,145766,145768,145770,145772],{"class":48,"line":211},[46,145759,54111],{"class":56},[46,145761,53578],{"class":1361},[46,145763,55451],{"class":169},[46,145765,79],{"class":56},[46,145767,145594],{"class":173},[46,145769,145597],{"class":56},[46,145771,53578],{"class":1361},[46,145773,53274],{"class":56},[46,145775,145776],{"class":48,"line":222},[46,145777,145606],{"class":2253},[46,145779,145780,145782,145784,145786,145788,145790,145792,145794],{"class":48,"line":636},[46,145781,54111],{"class":56},[46,145783,53578],{"class":1361},[46,145785,55451],{"class":169},[46,145787,79],{"class":56},[46,145789,145619],{"class":173},[46,145791,145597],{"class":56},[46,145793,53578],{"class":1361},[46,145795,53274],{"class":56},[46,145797,145798],{"class":48,"line":641},[46,145799,145630],{"class":2253},[46,145801,145802,145804,145806,145808,145810,145812,145814,145816],{"class":48,"line":653},[46,145803,54111],{"class":56},[46,145805,53578],{"class":1361},[46,145807,55451],{"class":169},[46,145809,79],{"class":56},[46,145811,145643],{"class":173},[46,145813,145597],{"class":56},[46,145815,53578],{"class":1361},[46,145817,53274],{"class":56},[46,145819,145820],{"class":48,"line":659},[46,145821,145654],{"class":2253},[46,145823,145824,145826,145828,145830,145832,145834,145836,145838],{"class":48,"line":665},[46,145825,54111],{"class":56},[46,145827,53578],{"class":1361},[46,145829,55451],{"class":169},[46,145831,79],{"class":56},[46,145833,145667],{"class":173},[46,145835,145597],{"class":56},[46,145837,53578],{"class":1361},[46,145839,53274],{"class":56},[46,145841,145842,145844,145846],{"class":48,"line":670},[46,145843,53752],{"class":56},[46,145845,53578],{"class":1361},[46,145847,53274],{"class":56},[19,145849,72418],{},[36,145851,145852],{"className":128927,"code":132284,"language":128929,"meta":41,"style":41},[43,145853,145854,145858,145872,145876],{"__ignoreMap":41},[46,145855,145856],{"class":48,"line":49},[46,145857,132291],{"class":2253},[46,145859,145860,145862,145864,145866,145868,145870],{"class":48,"line":60},[46,145861,821],{"class":56},[46,145863,53578],{"class":1361},[46,145865,55451],{"class":169},[46,145867,79],{"class":56},[46,145869,132304],{"class":173},[46,145871,53274],{"class":56},[46,145873,145874],{"class":48,"line":200},[46,145875,132311],{"class":56},[46,145877,145878,145880,145882],{"class":48,"line":211},[46,145879,53752],{"class":56},[46,145881,53578],{"class":1361},[46,145883,53274],{"class":56},[2098,145885,139581],{},{"title":41,"searchDepth":60,"depth":60,"links":145887},[145888,145889,145893,145894,145895],{"id":145032,"depth":60,"text":145033},{"id":145064,"depth":60,"text":145065,"children":145890},[145891,145892],{"id":145068,"depth":200,"text":145069},{"id":145085,"depth":200,"text":145086},{"id":145104,"depth":60,"text":145105},{"id":145111,"depth":60,"text":145112},{"id":145198,"depth":60,"text":145199,"children":145896},[145897,145898,145899,145900,145901],{"id":145205,"depth":200,"text":145206},{"id":145333,"depth":200,"text":145334},{"id":145427,"depth":200,"text":145428},{"id":145476,"depth":200,"text":145477},{"id":145486,"depth":200,"text":145487},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":145024,"description":25378},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":145908,"title":145909,"body":145910,"description":25378,"extension":2125,"meta":147137,"navigation":615,"path":147138,"seo":147139,"stem":147140,"__hash__":147141},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":145911,"toc":147115},[145912,145915,145919,145923,145926,145929,145933,145938,145941,145944,145947,145950,145953,146010,146013,146018,146021,146024,146028,146039,146043,146046,146049,146056,146061,146065,146068,146074,146077,146081,146084,146091,146094,146097,146104,146107,146114,146117,146120,146127,146130,146133,146135,146152,146156,146159,146162,146165,146169,146172,146175,146178,146181,146184,146187,146189,146192,146195,146257,146260,146370,146377,146383,146386,146389,146393,146396,146400,146405,146408,146415,146418,146424,146429,146432,146435,146438,146441,146444,146447,146450,146453,146509,146511,146537,146541,146544,146547,146550,146558,146561,146564,146568,146624,146627,146631,146637,146648,146651,146656,146659,146662,146668,146671,146674,146677,146680,146683,146686,146689,146692,146717,146723,146726,146729,146732,146735,146738,146741,146746,146749,146752,146755,146763,146766,146773,146776,146779,146781,146805,146807,146810,146813,146816,146819,146822,146825,146828,146862,146865,146868,146902,146909,146912,146915,146918,146921,146924,146927,146934,146937,146940,146943,146946,146953,146956,146959,146966,146969,146972,146976,146979,146982,146985,146988,146991,146994,146997,147000,147002,147026,147028,147052,147056,147067,147070,147073,147076,147079,147082,147085,147088,147091,147094,147097,147100,147103,147106,147109,147112],[10,145913,145909],{"id":145914},"_21-移动端布局实战下篇",[14,145916,145918],{"id":145917},"_211-rem适配布局","21.1 rem适配布局",[479,145920,145922],{"id":145921},"_2111-rem单位","21.1.1 rem单位",[3514,145924],{"style":128036,"src":145925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[19,145927,145928],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[479,145930,145932],{"id":145931},"_2112-媒体查询","21.1.2 媒体查询",[23,145934,145935],{},[26,145936,145937],{},"参数介绍",[3514,145939],{"style":128036,"src":145940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[3514,145942],{"style":128036,"src":145943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[3514,145945],{"style":128036,"src":145946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[3514,145948],{"style":128036,"src":145949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[3514,145951],{"style":128036,"src":145952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[36,145954,145956],{"className":128180,"code":145955,"language":128182,"meta":41,"style":41},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[43,145957,145958,145963,145982,145989,146002,146006],{"__ignoreMap":41},[46,145959,145960],{"class":48,"line":49},[46,145961,145962],{"class":2253},"\u002F* 媒体查询 *\u002F\n",[46,145964,145965,145968,145970,145973,145975,145978,145980],{"class":48,"line":60},[46,145966,145967],{"class":52},"@media",[46,145969,3702],{"class":56},[46,145971,145972],{"class":180},"max-width",[46,145974,53404],{"class":56},[46,145976,145977],{"class":180},"768",[46,145979,53459],{"class":52},[46,145981,14445],{"class":56},[46,145983,145984,145987],{"class":48,"line":200},[46,145985,145986],{"class":169},"  .container",[46,145988,17573],{"class":56},[46,145990,145991,145994,145996,145998,146000],{"class":48,"line":211},[46,145992,145993],{"class":180},"    width",[46,145995,53404],{"class":56},[46,145997,1155],{"class":180},[46,145999,2515],{"class":52},[46,146001,3345],{"class":56},[46,146003,146004],{"class":48,"line":222},[46,146005,128976],{"class":56},[46,146007,146008],{"class":48,"line":636},[46,146009,3616],{"class":56},[19,146011,146012],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[23,146014,146015],{"start":60},[26,146016,146017],{},"引入资源",[3514,146019],{"style":128036,"src":146020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[19,146022,146023],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[479,146025,146027],{"id":146026},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[3191,146029,146030,146033,146036],{},[26,146031,146032],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[26,146034,146035],{},"媒体查询可以根据不同设备宽度来修改样式",[26,146037,146038],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,146040,146042],{"id":146041},"_212-less基础","21.2 Less基础",[19,146044,146045],{},"css冗余度较高，不利于复用，没有很好的计算能力",[19,146047,146048],{},"Less可以解决该问题，它是css的扩展语言",[19,146050,146051,146052],{},"Less中文网址： ",[2426,146053,146054],{"href":146054,"rel":146055},"http:\u002F\u002Flesscss.cn\u002F",[25862],[19,146057,146058],{},[2339,146059,146060],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[479,146062,146064],{"id":146063},"_2121-less安装","21.2.1 less安装",[19,146066,146067],{},"如果使用vscode，则无需进行下方安装步骤",[19,146069,146070],{},[2426,146071,146072],{"href":146072,"rel":146073},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[25862],[3514,146075],{"style":128036,"src":146076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[479,146078,146080],{"id":146079},"_2122-less使用","21.2.2 less使用",[19,146082,146083],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[23,146085,146086],{},[26,146087,146088],{},[2339,146089,146090],{},"Less 变量",[3514,146092],{"style":128036,"src":146093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[3514,146095],{"style":128036,"src":146096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[23,146098,146099],{"start":60},[26,146100,146101],{},[2339,146102,146103],{},"Less 编译",[3514,146105],{"style":128036,"src":146106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[23,146108,146109],{"start":200},[26,146110,146111],{},[2339,146112,146113],{},"Less 嵌套",[3514,146115],{"style":128036,"src":146116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[3514,146118],{"style":128036,"src":146119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[23,146121,146122],{"start":211},[26,146123,146124],{},[2339,146125,146126],{},"Less 运算",[3514,146128],{"style":128036,"src":146129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[19,146131,146132],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[19,146134,2226],{},[3191,146136,146137,146140,146143,146146,146149],{},[26,146138,146139],{},"乘号（*）和除号（\u002F）的写法",[26,146141,146142],{},"运算符中间左右有个空格隔开 1px + 5",[26,146144,146145],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[26,146147,146148],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[26,146150,146151],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,146153,146155],{"id":146154},"_213-rem-适配方案","21.3 rem 适配方案",[19,146157,146158],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[19,146160,146161],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[3514,146163],{"style":128036,"src":146164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[479,146166,146168],{"id":146167},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[19,146170,146171],{},"rem + 媒体查询 + less 技术",[3514,146173],{"style":128036,"src":146174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[19,146176,146177],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[19,146179,146180],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[3514,146182],{"style":128036,"src":146183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[19,146185,146186],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[19,146188,16635],{},[3514,146190],{"style":128036,"src":146191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[19,146193,146194],{},"index.html:",[36,146196,146198],{"className":128180,"code":146197,"language":128182,"meta":41,"style":41},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[43,146199,146200,146205,146211,146227,146231,146237,146253],{"__ignoreMap":41},[46,146201,146202],{"class":48,"line":49},[46,146203,146204],{"class":2253},"\u002F* rem 适配方案 *\u002F\n",[46,146206,146207,146209],{"class":48,"line":60},[46,146208,52603],{"class":1361},[46,146210,17573],{"class":56},[46,146212,146213,146215,146217,146220,146222,146224],{"class":48,"line":200},[46,146214,72591],{"class":180},[46,146216,53404],{"class":56},[46,146218,146219],{"class":180},"62.5",[46,146221,2515],{"class":52},[46,146223,132043],{"class":56},[46,146225,146226],{"class":2253},"\u002F* 1rem = 10px *\u002F\n",[46,146228,146229],{"class":48,"line":211},[46,146230,3616],{"class":56},[46,146232,146233,146235],{"class":48,"line":222},[46,146234,132028],{"class":169},[46,146236,17573],{"class":56},[46,146238,146239,146241,146243,146245,146248,146250],{"class":48,"line":636},[46,146240,72533],{"class":180},[46,146242,53404],{"class":56},[46,146244,2633],{"class":180},[46,146246,146247],{"class":52},"rem",[46,146249,132043],{"class":56},[46,146251,146252],{"class":2253},"\u002F* 100px *\u002F\n",[46,146254,146255],{"class":48,"line":641},[46,146256,3616],{"class":56},[19,146258,146259],{},"common.less",[36,146261,146263],{"className":128180,"code":146262,"language":128182,"meta":41,"style":41},"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",[43,146264,146265,146271,146286,146290,146296,146310,146314,146318,146322,146328,146342,146346,146352,146366],{"__ignoreMap":41},[46,146266,146267,146269],{"class":48,"line":49},[46,146268,52603],{"class":1361},[46,146270,17573],{"class":56},[46,146272,146273,146275,146277,146279,146281,146283],{"class":48,"line":60},[46,146274,72591],{"class":180},[46,146276,53404],{"class":56},[46,146278,146219],{"class":180},[46,146280,2515],{"class":52},[46,146282,28058],{"class":56},[46,146284,146285],{"class":2253},"\u002F* 10px *\u002F\n",[46,146287,146288],{"class":48,"line":200},[46,146289,3616],{"class":56},[46,146291,146292,146294],{"class":48,"line":211},[46,146293,53578],{"class":1361},[46,146295,17573],{"class":56},[46,146297,146298,146300,146302,146304,146306,146308],{"class":48,"line":222},[46,146299,72533],{"class":180},[46,146301,53404],{"class":56},[46,146303,2633],{"class":180},[46,146305,146247],{"class":52},[46,146307,28058],{"class":56},[46,146309,146252],{"class":2253},[46,146311,146312],{"class":48,"line":636},[46,146313,3616],{"class":56},[46,146315,146316],{"class":48,"line":641},[46,146317,137641],{"class":56},[46,146319,146320],{"class":48,"line":653},[46,146321,146204],{"class":2253},[46,146323,146324,146326],{"class":48,"line":659},[46,146325,52603],{"class":1361},[46,146327,17573],{"class":56},[46,146329,146330,146332,146334,146336,146338,146340],{"class":48,"line":665},[46,146331,72591],{"class":180},[46,146333,53404],{"class":56},[46,146335,146219],{"class":180},[46,146337,2515],{"class":52},[46,146339,132043],{"class":56},[46,146341,146226],{"class":2253},[46,146343,146344],{"class":48,"line":670},[46,146345,3616],{"class":56},[46,146347,146348,146350],{"class":48,"line":676},[46,146349,132028],{"class":169},[46,146351,17573],{"class":56},[46,146353,146354,146356,146358,146360,146362,146364],{"class":48,"line":682},[46,146355,72533],{"class":180},[46,146357,53404],{"class":56},[46,146359,2633],{"class":180},[46,146361,146247],{"class":52},[46,146363,132043],{"class":56},[46,146365,146252],{"class":2253},[46,146367,146368],{"class":48,"line":688},[46,146369,3616],{"class":56},[19,146371,146372,146373,146376],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[25555,146374,146375],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[36,146378,146381],{"className":146379,"code":146380,"language":571},[569],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[43,146382,146380],{"__ignoreMap":41},[19,146384,146385],{},"less保存时会自动变成.css文件",[19,146387,146388],{},"好好搞懂上述代码写法",[479,146390,146392],{"id":146391},"_2132-样式导入样式","21.3.2 样式导入样式",[3514,146394],{"style":128036,"src":146395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[479,146397,146399],{"id":146398},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[23,146401,146402],{},[26,146403,146404],{},"准备工作",[3514,146406],{"style":128036,"src":146407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[19,146409,146410,146411],{},"github地址：",[2426,146412,146413],{"href":146413,"rel":146414},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[25862],[19,146416,146417],{},"下载之后，将index.js文件拖到项目中就可以了",[19,146419,146420,146421],{},"js文件引入到index.html中使用的是",[43,146422,146423],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[23,146425,146426],{"start":60},[26,146427,146428],{},"vscode插件",[3514,146430],{"style":128036,"src":146431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[19,146433,146434],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[19,146436,146437],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[3514,146439],{"style":128036,"src":146440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[19,146442,146443],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[3514,146445],{"style":128036,"src":146446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[19,146448,146449],{},"修改成75就可以，alt+z为快捷键",[19,146451,146452],{},"index.css：",[36,146454,146455],{"className":128180,"code":146197,"language":128182,"meta":41,"style":41},[43,146456,146457,146461,146467,146481,146485,146491,146505],{"__ignoreMap":41},[46,146458,146459],{"class":48,"line":49},[46,146460,146204],{"class":2253},[46,146462,146463,146465],{"class":48,"line":60},[46,146464,52603],{"class":1361},[46,146466,17573],{"class":56},[46,146468,146469,146471,146473,146475,146477,146479],{"class":48,"line":200},[46,146470,72591],{"class":180},[46,146472,53404],{"class":56},[46,146474,146219],{"class":180},[46,146476,2515],{"class":52},[46,146478,132043],{"class":56},[46,146480,146226],{"class":2253},[46,146482,146483],{"class":48,"line":211},[46,146484,3616],{"class":56},[46,146486,146487,146489],{"class":48,"line":222},[46,146488,132028],{"class":169},[46,146490,17573],{"class":56},[46,146492,146493,146495,146497,146499,146501,146503],{"class":48,"line":636},[46,146494,72533],{"class":180},[46,146496,53404],{"class":56},[46,146498,2633],{"class":180},[46,146500,146247],{"class":52},[46,146502,132043],{"class":56},[46,146504,146252],{"class":2253},[46,146506,146507],{"class":48,"line":641},[46,146508,3616],{"class":56},[19,146510,146194],{},[36,146512,146513],{"className":128180,"code":128584,"language":128182,"meta":41,"style":41},[43,146514,146515,146521,146533],{"__ignoreMap":41},[46,146516,146517,146519],{"class":48,"line":49},[46,146518,53767],{"class":1361},[46,146520,17573],{"class":56},[46,146522,146523,146525,146527,146529,146531],{"class":48,"line":60},[46,146524,72591],{"class":180},[46,146526,53404],{"class":56},[46,146528,2787],{"class":180},[46,146530,53459],{"class":52},[46,146532,3345],{"class":56},[46,146534,146535],{"class":48,"line":200},[46,146536,3616],{"class":56},[14,146538,146540],{"id":146539},"_214-响应式开发","21.4 响应式开发",[19,146542,146543],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[3514,146545],{"style":128036,"src":146546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[19,146548,146549],{},"做法：",[3191,146551,146552,146555],{},[26,146553,146554],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[26,146556,146557],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[3514,146559],{"style":128036,"src":146560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[19,146562,146563],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[479,146565,146567],{"id":146566},"_2141-简单代码示范","21.4.1 简单代码示范",[36,146569,146570],{"className":128180,"code":146197,"language":128182,"meta":41,"style":41},[43,146571,146572,146576,146582,146596,146600,146606,146620],{"__ignoreMap":41},[46,146573,146574],{"class":48,"line":49},[46,146575,146204],{"class":2253},[46,146577,146578,146580],{"class":48,"line":60},[46,146579,52603],{"class":1361},[46,146581,17573],{"class":56},[46,146583,146584,146586,146588,146590,146592,146594],{"class":48,"line":200},[46,146585,72591],{"class":180},[46,146587,53404],{"class":56},[46,146589,146219],{"class":180},[46,146591,2515],{"class":52},[46,146593,132043],{"class":56},[46,146595,146226],{"class":2253},[46,146597,146598],{"class":48,"line":211},[46,146599,3616],{"class":56},[46,146601,146602,146604],{"class":48,"line":222},[46,146603,132028],{"class":169},[46,146605,17573],{"class":56},[46,146607,146608,146610,146612,146614,146616,146618],{"class":48,"line":636},[46,146609,72533],{"class":180},[46,146611,53404],{"class":56},[46,146613,2633],{"class":180},[46,146615,146247],{"class":52},[46,146617,132043],{"class":56},[46,146619,146252],{"class":2253},[46,146621,146622],{"class":48,"line":641},[46,146623,3616],{"class":56},[19,146625,146626],{},"父盒子一般命名为container",[479,146628,146630],{"id":146629},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[19,146632,146633,146634],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[2339,146635,146636],{},"使得 Web 开发更加快捷",[3191,146638,146639],{},[26,146640,146641,146642],{},"官网：",[2339,146643,146644],{},[2426,146645,146646],{"href":146646,"rel":146647},"http:\u002F\u002Fgetbootstrap.com\u002F",[25862],[19,146649,146650],{},"可以直接去官网拿现成的东西",[23,146652,146653],{},[26,146654,146655],{},"Bootstrap的使用",[19,146657,146658],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[19,146660,146661],{},"Bootstrap 使用四步曲：",[19,146663,146664,146667],{},[2339,146665,146666],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[3514,146669],{"style":128036,"src":146670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[19,146672,146673],{},"打开Bootstrap官网，然后下载",[3514,146675],{"style":128036,"src":146676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[3514,146678],{"style":128036,"src":146679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[19,146681,146682],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[19,146684,146685],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[19,146687,146688],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[3514,146690],{"style":128036,"src":146691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[36,146693,146695],{"className":128180,"code":146694,"language":128182,"meta":41,"style":41},".center {\n  color: red;\n}\n",[43,146696,146697,146703,146713],{"__ignoreMap":41},[46,146698,146699,146701],{"class":48,"line":49},[46,146700,128471],{"class":169},[46,146702,17573],{"class":56},[46,146704,146705,146707,146709,146711],{"class":48,"line":60},[46,146706,72870],{"class":180},[46,146708,53404],{"class":56},[46,146710,59386],{"class":180},[46,146712,3345],{"class":56},[46,146714,146715],{"class":48,"line":200},[46,146716,3616],{"class":56},[19,146718,146719,146722],{},[43,146720,146721],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[3514,146724],{"style":128036,"src":146725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[3514,146727],{"style":128036,"src":146728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[3514,146730],{"style":128036,"src":146731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[19,146733,146734],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[3514,146736],{"style":128036,"src":146737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[19,146739,146740],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[23,146742,146743],{"start":60},[26,146744,146745],{},"布局容器",[3514,146747],{"style":128036,"src":146748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[19,146750,146751],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[19,146753,146754],{},"container-fluid用于移动式布局比较方便",[23,146756,146757],{"start":200},[26,146758,146759,146760],{},"bootstrap ",[2339,146761,146762],{},"栅格系统原理",[3514,146764],{"style":128036,"src":146765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[23,146767,146768],{"start":211},[26,146769,146770],{},[2339,146771,146772],{},"栅格选项参数",[3514,146774],{"style":128036,"src":146775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[19,146777,146778],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[19,146780,16635],{},[36,146782,146783],{"className":128180,"code":146694,"language":128182,"meta":41,"style":41},[43,146784,146785,146791,146801],{"__ignoreMap":41},[46,146786,146787,146789],{"class":48,"line":49},[46,146788,128471],{"class":169},[46,146790,17573],{"class":56},[46,146792,146793,146795,146797,146799],{"class":48,"line":60},[46,146794,72870],{"class":180},[46,146796,53404],{"class":56},[46,146798,59386],{"class":180},[46,146800,3345],{"class":56},[46,146802,146803],{"class":48,"line":200},[46,146804,3616],{"class":56},[19,146806,137223],{},[3514,146808],{"style":128036,"src":146809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[19,146811,146812],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[19,146814,146815],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[19,146817,146818],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[19,146820,146821],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[19,146823,146824],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[19,146826,146827],{},"汇总展示说明：",[36,146829,146830],{"className":128927,"code":132284,"language":128929,"meta":41,"style":41},[43,146831,146832,146836,146850,146854],{"__ignoreMap":41},[46,146833,146834],{"class":48,"line":49},[46,146835,132291],{"class":2253},[46,146837,146838,146840,146842,146844,146846,146848],{"class":48,"line":60},[46,146839,821],{"class":56},[46,146841,53578],{"class":1361},[46,146843,55451],{"class":169},[46,146845,79],{"class":56},[46,146847,132304],{"class":173},[46,146849,53274],{"class":56},[46,146851,146852],{"class":48,"line":200},[46,146853,132311],{"class":56},[46,146855,146856,146858,146860],{"class":48,"line":211},[46,146857,53752],{"class":56},[46,146859,53578],{"class":1361},[46,146861,53274],{"class":56},[3514,146863],{"style":128036,"src":146864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[19,146866,146867],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[36,146869,146870],{"className":128927,"code":132284,"language":128929,"meta":41,"style":41},[43,146871,146872,146876,146890,146894],{"__ignoreMap":41},[46,146873,146874],{"class":48,"line":49},[46,146875,132291],{"class":2253},[46,146877,146878,146880,146882,146884,146886,146888],{"class":48,"line":60},[46,146879,821],{"class":56},[46,146881,53578],{"class":1361},[46,146883,55451],{"class":169},[46,146885,79],{"class":56},[46,146887,132304],{"class":173},[46,146889,53274],{"class":56},[46,146891,146892],{"class":48,"line":200},[46,146893,132311],{"class":56},[46,146895,146896,146898,146900],{"class":48,"line":211},[46,146897,53752],{"class":56},[46,146899,53578],{"class":1361},[46,146901,53274],{"class":56},[23,146903,146904],{"start":222},[26,146905,146906],{},[2339,146907,146908],{},"列嵌套",[3514,146910],{"style":128036,"src":146911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[19,146913,146914],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[19,146916,146917],{},"没加row内部这样：",[3514,146919],{"style":128036,"src":146920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[19,146922,146923],{},"加上row之后内部为：",[3514,146925],{"style":128036,"src":146926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[23,146928,146929],{"start":636},[26,146930,146931],{},[2339,146932,146933],{},"列偏移",[3514,146935],{"style":128036,"src":146936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[19,146938,146939],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[19,146941,146942],{},"要加偏移量，即偏移份数",[19,146944,146945],{},"偏移的份数=12-两个盒子的份数",[23,146947,146948],{"start":641},[26,146949,146950],{},[2339,146951,146952],{},"列排序",[3514,146954],{"style":128036,"src":146955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[19,146957,146958],{},"pull拉左；push推右",[23,146960,146961],{"start":653},[26,146962,146963],{},[2339,146964,146965],{},"响应式工具",[3514,146967],{"style":128036,"src":146968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[19,146970,146971],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[479,146973,146975],{"id":146974},"_2143-响应式小项目","21.4.3 响应式小项目",[19,146977,146978],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[19,146980,146981],{},"ul {",[19,146983,146984],{},"list-style: none;",[19,146986,146987],{},"margin:0;",[19,146989,146990],{},"padding:0; }",[3514,146992],{"style":128036,"src":146993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[3514,146995],{"style":128036,"src":146996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[19,146998,146999],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[19,147001,70854],{},[36,147003,147004],{"className":128180,"code":140850,"language":128182,"meta":41,"style":41},[43,147005,147006,147012,147022],{"__ignoreMap":41},[46,147007,147008,147010],{"class":48,"line":49},[46,147009,132028],{"class":169},[46,147011,17573],{"class":56},[46,147013,147014,147016,147018,147020],{"class":48,"line":60},[46,147015,132660],{"class":180},[46,147017,53404],{"class":56},[46,147019,108],{"class":180},[46,147021,3345],{"class":56},[46,147023,147024],{"class":48,"line":200},[46,147025,3616],{"class":56},[19,147027,72418],{},[36,147029,147030],{"className":128180,"code":140850,"language":128182,"meta":41,"style":41},[43,147031,147032,147038,147048],{"__ignoreMap":41},[46,147033,147034,147036],{"class":48,"line":49},[46,147035,132028],{"class":169},[46,147037,17573],{"class":56},[46,147039,147040,147042,147044,147046],{"class":48,"line":60},[46,147041,132660],{"class":180},[46,147043,53404],{"class":56},[46,147045,108],{"class":180},[46,147047,3345],{"class":56},[46,147049,147050],{"class":48,"line":200},[46,147051,3616],{"class":56},[14,147053,147055],{"id":147054},"_215-swiper-插件使用","21.5 swiper 插件使用",[3191,147057,147058,147061,147064],{},[26,147059,147060],{},"下载需要的css和js文件html页面中 引入相关文件",[26,147062,147063],{},"官网找到类似案例，复制html结构，css样式 js 语法",[26,147065,147066],{},"根据需求定制修改模块",[3514,147068],{"style":128036,"src":147069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[19,147071,147072],{},"解压后将这两部分放到项目中",[3514,147074],{"style":128036,"src":147075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[19,147077,147078],{},"这个插件可以帮助我们实现轮播图效果",[19,147080,147081],{},"用法：",[3514,147083],{"style":128036,"src":147084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[19,147086,147087],{},"找到自己喜欢的",[3514,147089],{"style":128036,"src":147090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[19,147092,147093],{},"右键，查看网页源代码",[3514,147095],{"style":128036,"src":147096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[19,147098,147099],{},"复制人家的结构内容",[19,147101,147102],{},"然后去看API文档：",[3514,147104],{"style":128036,"src":147105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[19,147107,147108],{},"可以看看如何修改样式",[19,147110,147111],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[2098,147113,147114],{},"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":41,"searchDepth":60,"depth":60,"links":147116},[147117,147122,147126,147131,147136],{"id":145917,"depth":60,"text":145918,"children":147118},[147119,147120,147121],{"id":145921,"depth":200,"text":145922},{"id":145931,"depth":200,"text":145932},{"id":146026,"depth":200,"text":146027},{"id":146041,"depth":60,"text":146042,"children":147123},[147124,147125],{"id":146063,"depth":200,"text":146064},{"id":146079,"depth":200,"text":146080},{"id":146154,"depth":60,"text":146155,"children":147127},[147128,147129,147130],{"id":146167,"depth":200,"text":146168},{"id":146391,"depth":200,"text":146392},{"id":146398,"depth":200,"text":146399},{"id":146539,"depth":60,"text":146540,"children":147132},[147133,147134,147135],{"id":146566,"depth":200,"text":146567},{"id":146629,"depth":200,"text":146630},{"id":146974,"depth":200,"text":146975},{"id":147054,"depth":60,"text":147055},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":145909,"description":25378},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":147143,"title":147144,"body":147145,"description":25378,"extension":2125,"meta":147365,"navigation":615,"path":147366,"seo":147367,"stem":147368,"__hash__":147369},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":147146,"toc":147361},[147147,147150,147154,147157,147172,147177,147180,147185,147220,147225,147237,147242,147255,147260,147277,147282,147302,147307,147325,147328,147331,147334,147337,147341,147344,147347,147350,147353,147356,147359],[10,147148,147144],{"id":147149},"_22-代码提交与新型相对单位",[14,147151,147153],{"id":147152},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[19,147155,147156],{},"法1：",[23,147158,147159,147166,147169],{},[26,147160,147161,147162],{},"登录网站注册：",[2426,147163,147164],{"href":147164,"rel":147165},"https:\u002F\u002Fgitee.com\u002F",[25862],[26,147167,147168],{},"码云创建新的仓库",[26,147170,147171],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[3191,147173,147174],{},[26,147175,147176],{},"在网站根目录右键-- Git Bash Here",[3514,147178],{"style":128036,"src":147179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[3191,147181,147182],{},[26,147183,147184],{},"如果是第一次利用git提交，请配置好全局选项",[36,147186,147188],{"className":118924,"code":147187,"language":118926,"meta":41,"style":41},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[43,147189,147190,147206],{"__ignoreMap":41},[46,147191,147192,147195,147197,147200,147203],{"class":48,"line":49},[46,147193,147194],{"class":169},"git",[46,147196,121347],{"class":173},[46,147198,147199],{"class":180}," --global",[46,147201,147202],{"class":173}," user.name",[46,147204,147205],{"class":173}," \"你的名字\"\n",[46,147207,147208,147210,147212,147214,147217],{"class":48,"line":60},[46,147209,147194],{"class":169},[46,147211,121347],{"class":173},[46,147213,147199],{"class":180},[46,147215,147216],{"class":173}," user.email",[46,147218,147219],{"class":173}," \"你的邮箱\"\n",[3191,147221,147222],{},[26,147223,147224],{},"初始化仓库",[36,147226,147228],{"className":118924,"code":147227,"language":118926,"meta":41,"style":41},"git init\n",[43,147229,147230],{"__ignoreMap":41},[46,147231,147232,147234],{"class":48,"line":49},[46,147233,147194],{"class":169},[46,147235,147236],{"class":173}," init\n",[3191,147238,147239],{},[26,147240,147241],{},"把本地文件放到暂存区",[36,147243,147245],{"className":118924,"code":147244,"language":118926,"meta":41,"style":41},"git add .\n",[43,147246,147247],{"__ignoreMap":41},[46,147248,147249,147251,147253],{"class":48,"line":49},[46,147250,147194],{"class":169},[46,147252,7223],{"class":173},[46,147254,30729],{"class":173},[3191,147256,147257],{},[26,147258,147259],{},"把本地文件放到本地仓库里面",[36,147261,147263],{"className":118924,"code":147262,"language":118926,"meta":41,"style":41},"git commit -m \"first commit\"\n",[43,147264,147265],{"__ignoreMap":41},[46,147266,147267,147269,147272,147274],{"class":48,"line":49},[46,147268,147194],{"class":169},[46,147270,147271],{"class":173}," commit",[46,147273,102826],{"class":180},[46,147275,147276],{"class":173}," \"first commit\"\n",[3191,147278,147279],{},[26,147280,147281],{},"链接远程仓库",[36,147283,147285],{"className":118924,"code":147284,"language":118926,"meta":41,"style":41},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[43,147286,147287],{"__ignoreMap":41},[46,147288,147289,147291,147294,147296,147299],{"class":48,"line":49},[46,147290,147194],{"class":169},[46,147292,147293],{"class":173}," remote",[46,147295,7223],{"class":173},[46,147297,147298],{"class":173}," origin",[46,147300,147301],{"class":173}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[3191,147303,147304],{},[26,147305,147306],{},"把本地仓库的文件推送到远程仓库 push",[36,147308,147310],{"className":118924,"code":147309,"language":118926,"meta":41,"style":41},"git push -u origin master\n",[43,147311,147312],{"__ignoreMap":41},[46,147313,147314,147316,147318,147320,147322],{"class":48,"line":49},[46,147315,147194],{"class":169},[46,147317,31004],{"class":173},[46,147319,30279],{"class":180},[46,147321,147298],{"class":173},[46,147323,147324],{"class":173}," master\n",[3514,147326],{"style":128036,"src":147327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[19,147329,147330],{},"上方方法暂未实现，后边学完git后在整",[19,147332,147333],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[3514,147335],{"style":128036,"src":147336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,147338,147340],{"id":147339},"_222-新型相对单位","22.2 新型相对单位",[3514,147342],{"style":128036,"src":147343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[3514,147345],{"style":128036,"src":147346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[19,147348,147349],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[19,147351,147352],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[3514,147354],{"style":128036,"src":147355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[19,147357,147358],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[2098,147360,25955],{},{"title":41,"searchDepth":60,"depth":60,"links":147362},[147363,147364],{"id":147152,"depth":60,"text":147153},{"id":147339,"depth":60,"text":147340},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":147144,"description":25378},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":147371,"title":147372,"body":147373,"description":147377,"extension":2125,"meta":147378,"navigation":615,"path":147379,"seo":147380,"stem":147381,"__hash__":147382},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":147374,"toc":147375},[],{"title":41,"searchDepth":60,"depth":60,"links":147376},[],"自己正经开始学编程的第一门语言！",{"category":94802},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":147372,"description":147377},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":147384,"title":147385,"body":147386,"description":25378,"extension":2125,"meta":148533,"navigation":615,"path":148534,"seo":148535,"stem":148536,"__hash__":148537},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":147387,"toc":148509},[147388,147391,147395,147398,147401,147426,147429,147435,147439,147442,147469,147472,147512,147515,147527,147530,147536,147540,147544,147571,147588,147595,147599,147602,147628,147631,147635,147638,147678,147681,147698,147704,147708,147713,147757,147760,147778,147781,147849,147853,147860,147863,147878,147881,147890,147893,147904,147907,147916,147919,147936,147939,147954,147958,147962,147965,147967,147987,147991,147994,147997,148008,148011,148017,148021,148027,148054,148057,148069,148072,148083,148086,148092,148096,148102,148152,148155,148197,148200,148233,148236,148270,148274,148277,148297,148300,148336,148339,148352,148356,148360,148366,148369,148382,148386,148389,148395,148398,148402,148405,148408,148457,148461,148477,148483,148490,148496,148506],[10,147389,147385],{"id":147390},"_1-python环境与第一个程序",[14,147392,147394],{"id":147393},"_11-什么是python","1.1 什么是Python",[19,147396,147397],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[19,147399,147400],{},"理解 Python 时抓住三个关键词：",[23,147402,147403,147406,147409],{},[26,147404,147405],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[26,147407,147408],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[26,147410,147411,147412,2400,147415,2400,147418,2400,147421,2400,147423,365],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[43,147413,147414],{},"os",[43,147416,147417],{},"sys",[43,147419,147420],{},"json",[43,147422,59825],{},[43,147424,147425],{},"datetime",[19,147427,147428],{},"Python 程序的运行链路：",[36,147430,147433],{"className":147431,"code":147432,"language":571,"meta":41},[569],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[43,147434,147432],{"__ignoreMap":41},[14,147436,147438],{"id":147437},"_12-python解释器","1.2 Python解释器",[19,147440,147441],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[36,147443,147445],{"className":160,"code":147444,"language":162,"meta":41,"style":41},"python --version\npython3 --version\npython\npython3\n",[43,147446,147447,147453,147459,147464],{"__ignoreMap":41},[46,147448,147449,147451],{"class":48,"line":49},[46,147450,40],{"class":169},[46,147452,28284],{"class":180},[46,147454,147455,147457],{"class":48,"line":60},[46,147456,102823],{"class":169},[46,147458,28284],{"class":180},[46,147460,147461],{"class":48,"line":200},[46,147462,147463],{"class":169},"python\n",[46,147465,147466],{"class":48,"line":211},[46,147467,147468],{"class":169},"python3\n",[19,147470,147471],{},"进入交互模式后，可以直接输入表达式：",[36,147473,147475],{"className":38,"code":147474,"language":40,"meta":41,"style":41},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[43,147476,147477,147488,147493,147507],{"__ignoreMap":41},[46,147478,147479,147482,147484,147486],{"class":48,"line":49},[46,147480,147481],{"class":52},">>>",[46,147483,27110],{"class":180},[46,147485,47537],{"class":52},[46,147487,49691],{"class":180},[46,147489,147490],{"class":48,"line":60},[46,147491,147492],{"class":180},"3\n",[46,147494,147495,147497,147500,147502,147505],{"class":48,"line":200},[46,147496,147481],{"class":52},[46,147498,147499],{"class":180}," print",[46,147501,1152],{"class":56},[46,147503,147504],{"class":173},"\"hello python\"",[46,147506,459],{"class":56},[46,147508,147509],{"class":48,"line":211},[46,147510,147511],{"class":56},"hello python\n",[19,147513,147514],{},"退出交互模式：",[36,147516,147518],{"className":38,"code":147517,"language":40,"meta":41,"style":41},"exit()\n",[43,147519,147520],{"__ignoreMap":41},[46,147521,147522,147525],{"class":48,"line":49},[46,147523,147524],{"class":180},"exit",[46,147526,4006],{"class":56},[19,147528,147529],{},"或使用快捷键：",[36,147531,147534],{"className":147532,"code":147533,"language":571,"meta":41},[569],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[43,147535,147533],{"__ignoreMap":41},[14,147537,147539],{"id":147538},"_13-安装python","1.3 安装Python",[479,147541,147543],{"id":147542},"_131-windows安装","1.3.1 Windows安装",[23,147545,147546,147553,147556,147562,147568],{},[26,147547,147548,147549],{},"打开 Python 官网：",[2426,147550,147551],{"href":147551,"rel":147552},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[25862],[26,147554,147555],{},"下载 Windows Installer。",[26,147557,147558,147559,365],{},"安装时勾选 ",[43,147560,147561],{},"Add Python to PATH",[26,147563,147564,147565,365],{},"点击 ",[43,147566,147567],{},"Install Now",[26,147569,147570],{},"安装完成后打开命令提示符验证：",[36,147572,147574],{"className":160,"code":147573,"language":162,"meta":41,"style":41},"python --version\npip --version\n",[43,147575,147576,147582],{"__ignoreMap":41},[46,147577,147578,147580],{"class":48,"line":49},[46,147579,40],{"class":169},[46,147581,28284],{"class":180},[46,147583,147584,147586],{"class":48,"line":60},[46,147585,250],{"class":169},[46,147587,28284],{"class":180},[19,147589,147590,147591,147594],{},"如果提示 ",[43,147592,147593],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[479,147596,147598],{"id":147597},"_132-macos安装","1.3.2 macOS安装",[19,147600,147601],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[36,147603,147605],{"className":160,"code":147604,"language":162,"meta":41,"style":41},"brew install python\npython3 --version\npip3 --version\n",[43,147606,147607,147616,147622],{"__ignoreMap":41},[46,147608,147609,147612,147614],{"class":48,"line":49},[46,147610,147611],{"class":169},"brew",[46,147613,177],{"class":173},[46,147615,125946],{"class":173},[46,147617,147618,147620],{"class":48,"line":60},[46,147619,102823],{"class":169},[46,147621,28284],{"class":180},[46,147623,147624,147626],{"class":48,"line":200},[46,147625,121328],{"class":169},[46,147627,28284],{"class":180},[19,147629,147630],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[479,147632,147634],{"id":147633},"_133-linux安装","1.3.3 Linux安装",[19,147636,147637],{},"Ubuntu\u002FDebian：",[36,147639,147641],{"className":160,"code":147640,"language":162,"meta":41,"style":41},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[43,147642,147643,147651,147666,147672],{"__ignoreMap":41},[46,147644,147645,147647,147649],{"class":48,"line":49},[46,147646,170],{"class":169},[46,147648,118945],{"class":173},[46,147650,28233],{"class":173},[46,147652,147653,147655,147657,147659,147661,147663],{"class":48,"line":60},[46,147654,170],{"class":169},[46,147656,118945],{"class":173},[46,147658,177],{"class":173},[46,147660,106291],{"class":173},[46,147662,102754],{"class":173},[46,147664,147665],{"class":173}," python3-venv\n",[46,147667,147668,147670],{"class":48,"line":200},[46,147669,102823],{"class":169},[46,147671,28284],{"class":180},[46,147673,147674,147676],{"class":48,"line":211},[46,147675,121328],{"class":169},[46,147677,28284],{"class":180},[19,147679,147680],{},"Fedora：",[36,147682,147684],{"className":160,"code":147683,"language":162,"meta":41,"style":41},"sudo dnf install python3 python3-pip\n",[43,147685,147686],{"__ignoreMap":41},[46,147687,147688,147690,147692,147694,147696],{"class":48,"line":49},[46,147689,170],{"class":169},[46,147691,174],{"class":173},[46,147693,177],{"class":173},[46,147695,106291],{"class":173},[46,147697,121393],{"class":173},[19,147699,147700,147701,147703],{},"Linux 上通常使用 ",[43,147702,102823],{}," 命令，避免和系统旧版本 Python 冲突。",[14,147705,147707],{"id":147706},"_14-pip包管理器","1.4 pip包管理器",[19,147709,147710,147712],{},[43,147711,250],{}," 用来安装第三方库。",[36,147714,147716],{"className":160,"code":147715,"language":162,"meta":41,"style":41},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[43,147717,147718,147727,147736,147744,147750],{"__ignoreMap":41},[46,147719,147720,147722,147724],{"class":48,"line":49},[46,147721,250],{"class":169},[46,147723,177],{"class":173},[46,147725,147726],{"class":173}," requests\n",[46,147728,147729,147731,147734],{"class":48,"line":60},[46,147730,250],{"class":169},[46,147732,147733],{"class":173}," uninstall",[46,147735,147726],{"class":173},[46,147737,147738,147740,147742],{"class":48,"line":200},[46,147739,250],{"class":169},[46,147741,119202],{"class":173},[46,147743,147726],{"class":173},[46,147745,147746,147748],{"class":48,"line":211},[46,147747,250],{"class":169},[46,147749,120583],{"class":173},[46,147751,147752,147754],{"class":48,"line":222},[46,147753,250],{"class":169},[46,147755,147756],{"class":173}," freeze\n",[19,147758,147759],{},"国内网络较慢时可以临时使用镜像：",[36,147761,147763],{"className":160,"code":147762,"language":162,"meta":41,"style":41},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[43,147764,147765],{"__ignoreMap":41},[46,147766,147767,147769,147771,147774,147776],{"class":48,"line":49},[46,147768,250],{"class":169},[46,147770,177],{"class":173},[46,147772,147773],{"class":173}," requests",[46,147775,28419],{"class":180},[46,147777,121356],{"class":173},[19,147779,147780],{},"常见第三方库：",[97,147782,147783,147792],{},[100,147784,147785],{},[103,147786,147787,147790],{},[106,147788,147789],{},"库",[106,147791,104588],{},[120,147793,147794,147802,147809,147817,147825,147833,147841],{},[103,147795,147796,147799],{},[125,147797,147798],{},"requests",[125,147800,147801],{},"网络请求",[103,147803,147804,147806],{},[125,147805,102587],{},[125,147807,147808],{},"数值计算",[103,147810,147811,147814],{},[125,147812,147813],{},"pandas",[125,147815,147816],{},"表格数据处理",[103,147818,147819,147822],{},[125,147820,147821],{},"matplotlib",[125,147823,147824],{},"绘图",[103,147826,147827,147830],{},[125,147828,147829],{},"pyecharts",[125,147831,147832],{},"ECharts 图表",[103,147834,147835,147838],{},[125,147836,147837],{},"flask",[125,147839,147840],{},"Web 后端",[103,147842,147843,147846],{},[125,147844,147845],{},"pytest",[125,147847,147848],{},"自动化测试",[14,147850,147852],{"id":147851},"_15-虚拟环境","1.5 虚拟环境",[19,147854,147855,147856,147859],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[43,147857,147858],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[19,147861,147862],{},"创建虚拟环境：",[36,147864,147866],{"className":160,"code":147865,"language":162,"meta":41,"style":41},"python -m venv .venv\n",[43,147867,147868],{"__ignoreMap":41},[46,147869,147870,147872,147874,147876],{"class":48,"line":49},[46,147871,40],{"class":169},[46,147873,102826],{"class":180},[46,147875,102829],{"class":173},[46,147877,102832],{"class":173},[19,147879,147880],{},"Windows 激活：",[36,147882,147884],{"className":160,"code":147883,"language":162,"meta":41,"style":41},".venv\\Scripts\\activate\n",[43,147885,147886],{"__ignoreMap":41},[46,147887,147888],{"class":48,"line":49},[46,147889,147883],{"class":169},[19,147891,147892],{},"macOS\u002FLinux 激活：",[36,147894,147896],{"className":160,"code":147895,"language":162,"meta":41,"style":41},"source .venv\u002Fbin\u002Factivate\n",[43,147897,147898],{"__ignoreMap":41},[46,147899,147900,147902],{"class":48,"line":49},[46,147901,102837],{"class":180},[46,147903,102840],{"class":173},[19,147905,147906],{},"退出虚拟环境：",[36,147908,147910],{"className":160,"code":147909,"language":162,"meta":41,"style":41},"deactivate\n",[43,147911,147912],{"__ignoreMap":41},[46,147913,147914],{"class":48,"line":49},[46,147915,147909],{"class":169},[19,147917,147918],{},"保存依赖：",[36,147920,147922],{"className":160,"code":147921,"language":162,"meta":41,"style":41},"pip freeze > requirements.txt\n",[43,147923,147924],{"__ignoreMap":41},[46,147925,147926,147928,147931,147933],{"class":48,"line":49},[46,147927,250],{"class":169},[46,147929,147930],{"class":173}," freeze",[46,147932,28213],{"class":52},[46,147934,147935],{"class":173}," requirements.txt\n",[19,147937,147938],{},"安装依赖：",[36,147940,147942],{"className":160,"code":147941,"language":162,"meta":41,"style":41},"pip install -r requirements.txt\n",[43,147943,147944],{"__ignoreMap":41},[46,147945,147946,147948,147950,147952],{"class":48,"line":49},[46,147947,250],{"class":169},[46,147949,177],{"class":173},[46,147951,121267],{"class":180},[46,147953,147935],{"class":173},[14,147955,147957],{"id":147956},"_16-开发工具","1.6 开发工具",[479,147959,147961],{"id":147960},"_161-pycharm","1.6.1 PyCharm",[19,147963,147964],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[19,147966,123690],{},[23,147968,147969,147972,147975,147981,147984],{},[26,147970,147971],{},"New Project：创建项目。",[26,147973,147974],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[26,147976,147977,147978,127611],{},"New Python File：创建 ",[43,147979,147980],{},".py",[26,147982,147983],{},"Run：运行当前文件。",[26,147985,147986],{},"Debug：断点调试。",[479,147988,147990],{"id":147989},"_162-vs-code","1.6.2 VS Code",[19,147992,147993],{},"VS Code 轻量，适合后续多语言开发。",[19,147995,147996],{},"建议安装插件：",[23,147998,147999,148002,148005],{},[26,148000,148001],{},"Python。",[26,148003,148004],{},"Pylance。",[26,148006,148007],{},"Jupyter。",[19,148009,148010],{},"选择解释器：",[36,148012,148015],{"className":148013,"code":148014,"language":571,"meta":41},[569],"Ctrl + Shift + P -> Python: Select Interpreter\n",[43,148016,148014],{"__ignoreMap":41},[14,148018,148020],{"id":148019},"_17-第一个python程序","1.7 第一个Python程序",[19,148022,148023,148024,26615],{},"创建文件 ",[43,148025,148026],{},"hello.py",[36,148028,148030],{"className":38,"code":148029,"language":40,"meta":41,"style":41},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[43,148031,148032,148043],{"__ignoreMap":41},[46,148033,148034,148036,148038,148041],{"class":48,"line":49},[46,148035,32398],{"class":180},[46,148037,1152],{"class":56},[46,148039,148040],{"class":173},"\"Hello World\"",[46,148042,459],{"class":56},[46,148044,148045,148047,148049,148052],{"class":48,"line":60},[46,148046,32398],{"class":180},[46,148048,1152],{"class":56},[46,148050,148051],{"class":173},"\"你好，Python\"",[46,148053,459],{"class":56},[19,148055,148056],{},"在终端运行：",[36,148058,148060],{"className":160,"code":148059,"language":162,"meta":41,"style":41},"python hello.py\n",[43,148061,148062],{"__ignoreMap":41},[46,148063,148064,148066],{"class":48,"line":49},[46,148065,40],{"class":169},[46,148067,148068],{"class":173}," hello.py\n",[19,148070,148071],{},"或：",[36,148073,148075],{"className":160,"code":148074,"language":162,"meta":41,"style":41},"python3 hello.py\n",[43,148076,148077],{"__ignoreMap":41},[46,148078,148079,148081],{"class":48,"line":49},[46,148080,102823],{"class":169},[46,148082,148068],{"class":173},[19,148084,148085],{},"输出：",[36,148087,148090],{"className":148088,"code":148089,"language":571,"meta":41},[569],"Hello World\n你好，Python\n",[43,148091,148089],{"__ignoreMap":41},[14,148093,148095],{"id":148094},"_18-print函数","1.8 print函数",[19,148097,148098,148101],{},[43,148099,148100],{},"print()"," 用来输出内容。",[36,148103,148105],{"className":38,"code":148104,"language":40,"meta":41,"style":41},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[43,148106,148107,148117,148127,148137],{"__ignoreMap":41},[46,148108,148109,148111,148113,148115],{"class":48,"line":49},[46,148110,32398],{"class":180},[46,148112,1152],{"class":56},[46,148114,7857],{"class":173},[46,148116,459],{"class":56},[46,148118,148119,148121,148123,148125],{"class":48,"line":60},[46,148120,32398],{"class":180},[46,148122,1152],{"class":56},[46,148124,1155],{"class":180},[46,148126,459],{"class":56},[46,148128,148129,148131,148133,148135],{"class":48,"line":200},[46,148130,32398],{"class":180},[46,148132,1152],{"class":56},[46,148134,2244],{"class":180},[46,148136,459],{"class":56},[46,148138,148139,148141,148143,148146,148148,148150],{"class":48,"line":211},[46,148140,32398],{"class":180},[46,148142,1152],{"class":56},[46,148144,148145],{"class":173},"\"年龄:\"",[46,148147,448],{"class":56},[46,148149,2836],{"class":180},[46,148151,459],{"class":56},[19,148153,148154],{},"多个内容用逗号隔开，默认中间加空格：",[36,148156,148158],{"className":38,"code":148157,"language":40,"meta":41,"style":41},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[43,148159,148160,148170,148180],{"__ignoreMap":41},[46,148161,148162,148165,148167],{"class":48,"line":49},[46,148163,148164],{"class":56},"name ",[46,148166,79],{"class":52},[46,148168,148169],{"class":173}," \"张三\"\n",[46,148171,148172,148175,148177],{"class":48,"line":60},[46,148173,148174],{"class":56},"age ",[46,148176,79],{"class":52},[46,148178,148179],{"class":180}," 18\n",[46,148181,148182,148184,148186,148189,148192,148194],{"class":48,"line":200},[46,148183,32398],{"class":180},[46,148185,1152],{"class":56},[46,148187,148188],{"class":173},"\"姓名:\"",[46,148190,148191],{"class":56},", name, ",[46,148193,148145],{"class":173},[46,148195,148196],{"class":56},", age)\n",[19,148198,148199],{},"修改分隔符：",[36,148201,148203],{"className":38,"code":148202,"language":40,"meta":41,"style":41},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[43,148204,148205],{"__ignoreMap":41},[46,148206,148207,148209,148211,148214,148216,148218,148220,148222,148224,148227,148229,148231],{"class":48,"line":49},[46,148208,32398],{"class":180},[46,148210,1152],{"class":56},[46,148212,148213],{"class":173},"\"2024\"",[46,148215,448],{"class":56},[46,148217,56281],{"class":173},[46,148219,448],{"class":56},[46,148221,56281],{"class":173},[46,148223,448],{"class":56},[46,148225,148226],{"class":439},"sep",[46,148228,79],{"class":52},[46,148230,34457],{"class":173},[46,148232,459],{"class":56},[19,148234,148235],{},"修改结尾符：",[36,148237,148239],{"className":38,"code":148238,"language":40,"meta":41,"style":41},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[43,148240,148241,148259],{"__ignoreMap":41},[46,148242,148243,148245,148247,148249,148251,148253,148255,148257],{"class":48,"line":49},[46,148244,32398],{"class":180},[46,148246,1152],{"class":56},[46,148248,7857],{"class":173},[46,148250,448],{"class":56},[46,148252,47772],{"class":439},[46,148254,79],{"class":52},[46,148256,6376],{"class":173},[46,148258,459],{"class":56},[46,148260,148261,148263,148265,148268],{"class":48,"line":60},[46,148262,32398],{"class":180},[46,148264,1152],{"class":56},[46,148266,148267],{"class":173},"\"python\"",[46,148269,459],{"class":56},[14,148271,148273],{"id":148272},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[19,148275,148276],{},"交互运行适合临时验证：",[36,148278,148280],{"className":38,"code":148279,"language":40,"meta":41,"style":41},">>> 10 * 3\n30\n",[43,148281,148282,148292],{"__ignoreMap":41},[46,148283,148284,148286,148288,148290],{"class":48,"line":49},[46,148285,147481],{"class":52},[46,148287,4068],{"class":180},[46,148289,8531],{"class":52},[46,148291,121664],{"class":180},[46,148293,148294],{"class":48,"line":60},[46,148295,148296],{"class":180},"30\n",[19,148298,148299],{},"脚本运行适合保存程序：",[36,148301,148303],{"className":38,"code":148302,"language":40,"meta":41,"style":41},"price = 8\ncount = 5\nprint(price * count)\n",[43,148304,148305,148315,148324],{"__ignoreMap":41},[46,148306,148307,148310,148312],{"class":48,"line":49},[46,148308,148309],{"class":56},"price ",[46,148311,79],{"class":52},[46,148313,148314],{"class":180}," 8\n",[46,148316,148317,148320,148322],{"class":48,"line":60},[46,148318,148319],{"class":56},"count ",[46,148321,79],{"class":52},[46,148323,56392],{"class":180},[46,148325,148326,148328,148331,148333],{"class":48,"line":200},[46,148327,32398],{"class":180},[46,148329,148330],{"class":56},"(price ",[46,148332,2642],{"class":52},[46,148334,148335],{"class":56}," count)\n",[19,148337,148338],{},"实际学习中推荐：",[23,148340,148341,148344,148349],{},[26,148342,148343],{},"临时试一个语法，用交互模式。",[26,148345,148346,148347,127611],{},"写完整练习，用 ",[43,148348,147980],{},[26,148350,148351],{},"写项目，用独立目录和虚拟环境。",[14,148353,148355],{"id":148354},"_110-常见错误","1.10 常见错误",[479,148357,148359],{"id":148358},"_1101-命令找不到","1.10.1 命令找不到",[36,148361,148364],{"className":148362,"code":148363,"language":571,"meta":41},[569],"python: command not found\n",[43,148365,148363],{"__ignoreMap":41},[19,148367,148368],{},"原因：",[23,148370,148371,148374,148377],{},[26,148372,148373],{},"没安装 Python。",[26,148375,148376],{},"PATH 没配置。",[26,148378,148379,148380,365],{},"Linux\u002FmacOS 应该使用 ",[43,148381,102823],{},[479,148383,148385],{"id":148384},"_1102-文件名冲突","1.10.2 文件名冲突",[19,148387,148388],{},"不要把文件命名为：",[36,148390,148393],{"className":148391,"code":148392,"language":571,"meta":41},[569],"random.py\njson.py\ntime.py\nrequests.py\n",[43,148394,148392],{"__ignoreMap":41},[19,148396,148397],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[479,148399,148401],{"id":148400},"_1103-中文乱码","1.10.3 中文乱码",[19,148403,148404],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[19,148406,148407],{},"如果读写文件出现乱码，要明确指定编码：",[36,148409,148411],{"className":38,"code":148410,"language":40,"meta":41,"style":41},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[43,148412,148413,148447],{"__ignoreMap":41},[46,148414,148415,148417,148420,148422,148425,148427,148430,148432,148435,148437,148440,148442,148444],{"class":48,"line":49},[46,148416,392],{"class":52},[46,148418,148419],{"class":180}," open",[46,148421,1152],{"class":56},[46,148423,148424],{"class":173},"\"data.txt\"",[46,148426,448],{"class":56},[46,148428,148429],{"class":173},"\"r\"",[46,148431,448],{"class":56},[46,148433,148434],{"class":439},"encoding",[46,148436,79],{"class":52},[46,148438,148439],{"class":173},"\"utf-8\"",[46,148441,15716],{"class":56},[46,148443,398],{"class":52},[46,148445,148446],{"class":56}," f:\n",[46,148448,148449,148452,148454],{"class":48,"line":60},[46,148450,148451],{"class":56},"    content ",[46,148453,79],{"class":52},[46,148455,148456],{"class":56}," f.read()\n",[14,148458,148460],{"id":148459},"_111-本章练习","1.11 本章练习",[23,148462,148463,148466,148472],{},[26,148464,148465],{},"安装 Python，并在终端输出版本号。",[26,148467,148468,148469,148471],{},"新建 ",[43,148470,148026],{},"，输出自己的姓名、年龄、学习目标。",[26,148473,106254,148474,148476],{},[43,148475,148100],{}," 输出下面格式：",[36,148478,148481],{"className":148479,"code":148480,"language":571,"meta":41},[569],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[43,148482,148480],{"__ignoreMap":41},[23,148484,148485],{"start":211},[26,148486,106254,148487,148489],{},[43,148488,148226],{}," 输出日期：",[36,148491,148494],{"className":148492,"code":148493,"language":571,"meta":41},[569],"2024-10-10\n",[43,148495,148493],{"__ignoreMap":41},[23,148497,148498],{"start":222},[26,148499,106254,148500,148502,148503,148505],{},[43,148501,47772],{}," 让两次 ",[43,148504,148100],{}," 输出在同一行。",[2098,148507,148508],{},"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":41,"searchDepth":60,"depth":60,"links":148510},[148511,148512,148513,148518,148519,148520,148524,148525,148526,148527,148532],{"id":147393,"depth":60,"text":147394},{"id":147437,"depth":60,"text":147438},{"id":147538,"depth":60,"text":147539,"children":148514},[148515,148516,148517],{"id":147542,"depth":200,"text":147543},{"id":147597,"depth":200,"text":147598},{"id":147633,"depth":200,"text":147634},{"id":147706,"depth":60,"text":147707},{"id":147851,"depth":60,"text":147852},{"id":147956,"depth":60,"text":147957,"children":148521},[148522,148523],{"id":147960,"depth":200,"text":147961},{"id":147989,"depth":200,"text":147990},{"id":148019,"depth":60,"text":148020},{"id":148094,"depth":60,"text":148095},{"id":148272,"depth":60,"text":148273},{"id":148354,"depth":60,"text":148355,"children":148528},[148529,148530,148531],{"id":148358,"depth":200,"text":148359},{"id":148384,"depth":200,"text":148385},{"id":148400,"depth":200,"text":148401},{"id":148459,"depth":60,"text":148460},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":147385,"description":25378},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":148539,"title":148540,"body":148541,"description":25378,"extension":2125,"meta":150945,"navigation":615,"path":150946,"seo":150947,"stem":150948,"__hash__":150949},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":148542,"toc":150930},[148543,148546,148550,148553,148556,148573,148576,148618,148621,148625,148628,148631,148668,148671,148705,148708,148800,148804,148818,148821,148848,148851,148855,148958,148965,148968,148985,148989,148996,149185,149188,149261,149265,149268,149352,149355,149387,149391,149595,149598,149602,149608,149710,149713,149969,149973,149976,149979,149993,149995,150181,150185,150547,150553,150557,150560,150684,150687,150866,150869,150873,150906,150910,150927],[10,148544,148540],{"id":148545},"_10-json与pyecharts折线图",[14,148547,148549],{"id":148548},"_101-数据可视化","10.1 数据可视化",[19,148551,148552],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[19,148554,148555],{},"常见图表：",[23,148557,148558,148561,148564,148567,148570],{},[26,148559,148560],{},"折线图：看趋势。",[26,148562,148563],{},"柱状图：看分类对比。",[26,148565,148566],{},"饼图：看占比。",[26,148568,148569],{},"地图：看地域分布。",[26,148571,148572],{},"散点图：看两个变量之间的关系。",[19,148574,148575],{},"Python 可视化常用库：",[97,148577,148578,148586],{},[100,148579,148580],{},[103,148581,148582,148584],{},[106,148583,147789],{},[106,148585,25741],{},[120,148587,148588,148595,148603,148610],{},[103,148589,148590,148592],{},[125,148591,147821],{},[125,148593,148594],{},"基础、经典、可定制",[103,148596,148597,148600],{},[125,148598,148599],{},"seaborn",[125,148601,148602],{},"统计图表更美观",[103,148604,148605,148607],{},[125,148606,147829],{},[125,148608,148609],{},"生成交互式网页图表",[103,148611,148612,148615],{},[125,148613,148614],{},"plotly",[125,148616,148617],{},"交互图表能力强",[19,148619,148620],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,148622,148624],{"id":148623},"_102-json回顾","10.2 JSON回顾",[19,148626,148627],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[19,148629,148630],{},"Python 字典：",[36,148632,148634],{"className":38,"code":148633,"language":40,"meta":41,"style":41},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[43,148635,148636,148644,148655,148664],{"__ignoreMap":41},[46,148637,148638,148640,148642],{"class":48,"line":49},[46,148639,103565],{"class":56},[46,148641,79],{"class":52},[46,148643,17573],{"class":56},[46,148645,148646,148649,148651,148653],{"class":48,"line":60},[46,148647,148648],{"class":173},"    \"name\"",[46,148650,53404],{"class":56},[46,148652,71234],{"class":173},[46,148654,33443],{"class":56},[46,148656,148657,148660,148662],{"class":48,"line":200},[46,148658,148659],{"class":173},"    \"value\"",[46,148661,53404],{"class":56},[46,148663,99419],{"class":180},[46,148665,148666],{"class":48,"line":211},[46,148667,3616],{"class":56},[19,148669,148670],{},"JSON 字符串：",[36,148672,148675],{"className":148673,"code":148674,"language":147420,"meta":41,"style":41},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[43,148676,148677,148681,148692,148701],{"__ignoreMap":41},[46,148678,148679],{"class":48,"line":49},[46,148680,3597],{"class":56},[46,148682,148683,148686,148688,148690],{"class":48,"line":60},[46,148684,148685],{"class":180},"  \"name\"",[46,148687,53404],{"class":56},[46,148689,71234],{"class":173},[46,148691,33443],{"class":56},[46,148693,148694,148697,148699],{"class":48,"line":200},[46,148695,148696],{"class":180},"  \"value\"",[46,148698,53404],{"class":56},[46,148700,99419],{"class":180},[46,148702,148703],{"class":48,"line":211},[46,148704,3616],{"class":56},[19,148706,148707],{},"Python 与 JSON 的转换：",[36,148709,148711],{"className":38,"code":148710,"language":40,"meta":41,"style":41},"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",[43,148712,148713,148720,148724,148749,148753,148772,148779,148783,148793],{"__ignoreMap":41},[46,148714,148715,148717],{"class":48,"line":49},[46,148716,53],{"class":52},[46,148718,148719],{"class":56}," json\n",[46,148721,148722],{"class":48,"line":60},[46,148723,616],{"emptyLinePlaceholder":615},[46,148725,148726,148728,148730,148732,148734,148736,148738,148740,148743,148745,148747],{"class":48,"line":200},[46,148727,103565],{"class":56},[46,148729,79],{"class":52},[46,148731,6465],{"class":56},[46,148733,64644],{"class":173},[46,148735,53404],{"class":56},[46,148737,71234],{"class":173},[46,148739,448],{"class":56},[46,148741,148742],{"class":173},"\"value\"",[46,148744,53404],{"class":56},[46,148746,1155],{"class":180},[46,148748,3616],{"class":56},[46,148750,148751],{"class":48,"line":211},[46,148752,616],{"emptyLinePlaceholder":615},[46,148754,148755,148758,148760,148763,148766,148768,148770],{"class":48,"line":222},[46,148756,148757],{"class":56},"json_text ",[46,148759,79],{"class":52},[46,148761,148762],{"class":56}," json.dumps(data, ",[46,148764,148765],{"class":439},"ensure_ascii",[46,148767,79],{"class":52},[46,148769,35960],{"class":180},[46,148771,459],{"class":56},[46,148773,148774,148776],{"class":48,"line":636},[46,148775,32398],{"class":180},[46,148777,148778],{"class":56},"(json_text)\n",[46,148780,148781],{"class":48,"line":641},[46,148782,616],{"emptyLinePlaceholder":615},[46,148784,148785,148788,148790],{"class":48,"line":653},[46,148786,148787],{"class":56},"new_data ",[46,148789,79],{"class":52},[46,148791,148792],{"class":56}," json.loads(json_text)\n",[46,148794,148795,148797],{"class":48,"line":659},[46,148796,32398],{"class":180},[46,148798,148799],{"class":56},"(new_data)\n",[14,148801,148803],{"id":148802},"_103-安装pyecharts","10.3 安装pyecharts",[36,148805,148807],{"className":160,"code":148806,"language":162,"meta":41,"style":41},"pip install pyecharts\n",[43,148808,148809],{"__ignoreMap":41},[46,148810,148811,148813,148815],{"class":48,"line":49},[46,148812,250],{"class":169},[46,148814,177],{"class":173},[46,148816,148817],{"class":173}," pyecharts\n",[19,148819,148820],{},"验证：",[36,148822,148824],{"className":38,"code":148823,"language":40,"meta":41,"style":41},"import pyecharts\n\nprint(pyecharts.__version__)\n",[43,148825,148826,148832,148836],{"__ignoreMap":41},[46,148827,148828,148830],{"class":48,"line":49},[46,148829,53],{"class":52},[46,148831,148817],{"class":56},[46,148833,148834],{"class":48,"line":60},[46,148835,616],{"emptyLinePlaceholder":615},[46,148837,148838,148840,148843,148846],{"class":48,"line":200},[46,148839,32398],{"class":180},[46,148841,148842],{"class":56},"(pyecharts.",[46,148844,148845],{"class":180},"__version__",[46,148847,459],{"class":56},[19,148849,148850],{},"如果使用虚拟环境，要先激活环境再安装。",[14,148852,148854],{"id":148853},"_104-第一个折线图","10.4 第一个折线图",[36,148856,148858],{"className":38,"code":148857,"language":40,"meta":41,"style":41},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[43,148859,148860,148872,148876,148886,148916,148948],{"__ignoreMap":41},[46,148861,148862,148864,148867,148869],{"class":48,"line":49},[46,148863,957],{"class":52},[46,148865,148866],{"class":56}," pyecharts.charts ",[46,148868,53],{"class":52},[46,148870,148871],{"class":56}," Line\n",[46,148873,148874],{"class":48,"line":60},[46,148875,616],{"emptyLinePlaceholder":615},[46,148877,148878,148881,148883],{"class":48,"line":200},[46,148879,148880],{"class":56},"line ",[46,148882,79],{"class":52},[46,148884,148885],{"class":56}," Line()\n",[46,148887,148888,148891,148894,148896,148899,148901,148904,148906,148909,148911,148914],{"class":48,"line":211},[46,148889,148890],{"class":56},"line.add_xaxis([",[46,148892,148893],{"class":173},"\"周一\"",[46,148895,448],{"class":56},[46,148897,148898],{"class":173},"\"周二\"",[46,148900,448],{"class":56},[46,148902,148903],{"class":173},"\"周三\"",[46,148905,448],{"class":56},[46,148907,148908],{"class":173},"\"周四\"",[46,148910,448],{"class":56},[46,148912,148913],{"class":173},"\"周五\"",[46,148915,6673],{"class":56},[46,148917,148918,148921,148924,148926,148928,148930,148932,148934,148936,148938,148941,148943,148946],{"class":48,"line":222},[46,148919,148920],{"class":56},"line.add_yaxis(",[46,148922,148923],{"class":173},"\"销售额\"",[46,148925,79483],{"class":56},[46,148927,1155],{"class":180},[46,148929,448],{"class":56},[46,148931,3003],{"class":180},[46,148933,448],{"class":56},[46,148935,3048],{"class":180},[46,148937,448],{"class":56},[46,148939,148940],{"class":180},"150",[46,148942,448],{"class":56},[46,148944,148945],{"class":180},"180",[46,148947,6673],{"class":56},[46,148949,148950,148953,148956],{"class":48,"line":636},[46,148951,148952],{"class":56},"line.render(",[46,148954,148955],{"class":173},"\"line.html\"",[46,148957,459],{"class":56},[19,148959,148960,148961,148964],{},"运行后会生成 ",[43,148962,148963],{},"line.html","，用浏览器打开即可看到图表。",[19,148966,148967],{},"核心步骤：",[23,148969,148970,148973,148976,148979,148982],{},[26,148971,148972],{},"导入图表类。",[26,148974,148975],{},"创建图表对象。",[26,148977,148978],{},"添加 x 轴数据。",[26,148980,148981],{},"添加 y 轴数据。",[26,148983,148984],{},"渲染为 HTML。",[14,148986,148988],{"id":148987},"_105-全局配置","10.5 全局配置",[19,148990,148991,148992,148995],{},"常用配置在 ",[43,148993,148994],{},"pyecharts.options"," 中。",[36,148997,148999],{"className":38,"code":148998,"language":40,"meta":41,"style":41},"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",[43,149000,149001,149018,149028,149032,149040,149064,149092,149097,149116,149135,149153,149173,149177],{"__ignoreMap":41},[46,149002,149003,149005,149008,149010,149013,149015],{"class":48,"line":49},[46,149004,957],{"class":52},[46,149006,149007],{"class":56}," pyecharts ",[46,149009,53],{"class":52},[46,149011,149012],{"class":56}," options ",[46,149014,398],{"class":52},[46,149016,149017],{"class":56}," opts\n",[46,149019,149020,149022,149024,149026],{"class":48,"line":60},[46,149021,957],{"class":52},[46,149023,148866],{"class":56},[46,149025,53],{"class":52},[46,149027,148871],{"class":56},[46,149029,149030],{"class":48,"line":200},[46,149031,616],{"emptyLinePlaceholder":615},[46,149033,149034,149036,149038],{"class":48,"line":211},[46,149035,148880],{"class":56},[46,149037,79],{"class":52},[46,149039,148885],{"class":56},[46,149041,149042,149044,149046,149048,149050,149052,149054,149056,149058,149060,149062],{"class":48,"line":222},[46,149043,148890],{"class":56},[46,149045,148893],{"class":173},[46,149047,448],{"class":56},[46,149049,148898],{"class":173},[46,149051,448],{"class":56},[46,149053,148903],{"class":173},[46,149055,448],{"class":56},[46,149057,148908],{"class":173},[46,149059,448],{"class":56},[46,149061,148913],{"class":173},[46,149063,6673],{"class":56},[46,149065,149066,149068,149070,149072,149074,149076,149078,149080,149082,149084,149086,149088,149090],{"class":48,"line":636},[46,149067,148920],{"class":56},[46,149069,148923],{"class":173},[46,149071,79483],{"class":56},[46,149073,1155],{"class":180},[46,149075,448],{"class":56},[46,149077,3003],{"class":180},[46,149079,448],{"class":56},[46,149081,3048],{"class":180},[46,149083,448],{"class":56},[46,149085,148940],{"class":180},[46,149087,448],{"class":56},[46,149089,148945],{"class":180},[46,149091,6673],{"class":56},[46,149093,149094],{"class":48,"line":641},[46,149095,149096],{"class":56},"line.set_global_opts(\n",[46,149098,149099,149102,149104,149107,149109,149111,149114],{"class":48,"line":653},[46,149100,149101],{"class":439},"    title_opts",[46,149103,79],{"class":52},[46,149105,149106],{"class":56},"opts.TitleOpts(",[46,149108,53374],{"class":439},[46,149110,79],{"class":52},[46,149112,149113],{"class":173},"\"一周销售额\"",[46,149115,40019],{"class":56},[46,149117,149118,149121,149123,149126,149128,149130,149133],{"class":48,"line":659},[46,149119,149120],{"class":439},"    xaxis_opts",[46,149122,79],{"class":52},[46,149124,149125],{"class":56},"opts.AxisOpts(",[46,149127,1653],{"class":439},[46,149129,79],{"class":52},[46,149131,149132],{"class":173},"\"日期\"",[46,149134,40019],{"class":56},[46,149136,149137,149140,149142,149144,149146,149148,149151],{"class":48,"line":665},[46,149138,149139],{"class":439},"    yaxis_opts",[46,149141,79],{"class":52},[46,149143,149125],{"class":56},[46,149145,1653],{"class":439},[46,149147,79],{"class":52},[46,149149,149150],{"class":173},"\"金额\"",[46,149152,40019],{"class":56},[46,149154,149155,149158,149160,149163,149166,149168,149171],{"class":48,"line":670},[46,149156,149157],{"class":439},"    tooltip_opts",[46,149159,79],{"class":52},[46,149161,149162],{"class":56},"opts.TooltipOpts(",[46,149164,149165],{"class":439},"trigger",[46,149167,79],{"class":52},[46,149169,149170],{"class":173},"\"axis\"",[46,149172,40019],{"class":56},[46,149174,149175],{"class":48,"line":676},[46,149176,459],{"class":56},[46,149178,149179,149181,149183],{"class":48,"line":682},[46,149180,148952],{"class":56},[46,149182,148955],{"class":173},[46,149184,459],{"class":56},[19,149186,149187],{},"常见全局配置：",[97,149189,149190,149199],{},[100,149191,149192],{},[103,149193,149194,149197],{},[106,149195,149196],{},"配置",[106,149198,104588],{},[120,149200,149201,149211,149221,149231,149241,149251],{},[103,149202,149203,149208],{},[125,149204,149205],{},[43,149206,149207],{},"TitleOpts",[125,149209,149210],{},"标题",[103,149212,149213,149218],{},[125,149214,149215],{},[43,149216,149217],{},"LegendOpts",[125,149219,149220],{},"图例",[103,149222,149223,149228],{},[125,149224,149225],{},[43,149226,149227],{},"TooltipOpts",[125,149229,149230],{},"提示框",[103,149232,149233,149238],{},[125,149234,149235],{},[43,149236,149237],{},"AxisOpts",[125,149239,149240],{},"坐标轴",[103,149242,149243,149248],{},[125,149244,149245],{},[43,149246,149247],{},"VisualMapOpts",[125,149249,149250],{},"视觉映射",[103,149252,149253,149258],{},[125,149254,149255],{},[43,149256,149257],{},"DataZoomOpts",[125,149259,149260],{},"区域缩放",[14,149262,149264],{"id":149263},"_106-系列配置","10.6 系列配置",[19,149266,149267],{},"系列配置作用于某一组数据。",[36,149269,149271],{"className":38,"code":149270,"language":40,"meta":41,"style":41},"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",[43,149272,149273,149278,149289,149318,149329,149348],{"__ignoreMap":41},[46,149274,149275],{"class":48,"line":49},[46,149276,149277],{"class":56},"line.add_yaxis(\n",[46,149279,149280,149283,149285,149287],{"class":48,"line":60},[46,149281,149282],{"class":439},"    series_name",[46,149284,79],{"class":52},[46,149286,148923],{"class":173},[46,149288,33443],{"class":56},[46,149290,149291,149294,149296,149298,149300,149302,149304,149306,149308,149310,149312,149314,149316],{"class":48,"line":200},[46,149292,149293],{"class":439},"    y_axis",[46,149295,79],{"class":52},[46,149297,3076],{"class":56},[46,149299,1155],{"class":180},[46,149301,448],{"class":56},[46,149303,3003],{"class":180},[46,149305,448],{"class":56},[46,149307,3048],{"class":180},[46,149309,448],{"class":56},[46,149311,148940],{"class":180},[46,149313,448],{"class":56},[46,149315,148945],{"class":180},[46,149317,89799],{"class":56},[46,149319,149320,149323,149325,149327],{"class":48,"line":211},[46,149321,149322],{"class":439},"    is_smooth",[46,149324,79],{"class":52},[46,149326,33453],{"class":180},[46,149328,33443],{"class":56},[46,149330,149331,149334,149336,149339,149342,149344,149346],{"class":48,"line":222},[46,149332,149333],{"class":439},"    label_opts",[46,149335,79],{"class":52},[46,149337,149338],{"class":56},"opts.LabelOpts(",[46,149340,149341],{"class":439},"is_show",[46,149343,79],{"class":52},[46,149345,33453],{"class":180},[46,149347,40019],{"class":56},[46,149349,149350],{"class":48,"line":636},[46,149351,459],{"class":56},[19,149353,149354],{},"常用参数：",[23,149356,149357,149363,149369,149375,149381],{},[26,149358,149359,149362],{},[43,149360,149361],{},"series_name","：系列名称。",[26,149364,149365,149368],{},[43,149366,149367],{},"y_axis","：y 轴数据。",[26,149370,149371,149374],{},[43,149372,149373],{},"is_smooth","：是否平滑曲线。",[26,149376,149377,149380],{},[43,149378,149379],{},"label_opts","：标签配置。",[26,149382,149383,149386],{},[43,149384,149385],{},"symbol_size","：标记点大小。",[14,149388,149390],{"id":149389},"_107-多条折线","10.7 多条折线",[36,149392,149394],{"className":38,"code":149393,"language":40,"meta":41,"style":41},"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",[43,149395,149396,149410,149420,149424,149453,149457,149465,149470,149508,149545,149549,149566,149582,149586],{"__ignoreMap":41},[46,149397,149398,149400,149402,149404,149406,149408],{"class":48,"line":49},[46,149399,957],{"class":52},[46,149401,149007],{"class":56},[46,149403,53],{"class":52},[46,149405,149012],{"class":56},[46,149407,398],{"class":52},[46,149409,149017],{"class":56},[46,149411,149412,149414,149416,149418],{"class":48,"line":60},[46,149413,957],{"class":52},[46,149415,148866],{"class":56},[46,149417,53],{"class":52},[46,149419,148871],{"class":56},[46,149421,149422],{"class":48,"line":200},[46,149423,616],{"emptyLinePlaceholder":615},[46,149425,149426,149429,149431,149433,149435,149437,149439,149441,149443,149445,149447,149449,149451],{"class":48,"line":211},[46,149427,149428],{"class":56},"dates ",[46,149430,79],{"class":52},[46,149432,54193],{"class":56},[46,149434,148893],{"class":173},[46,149436,448],{"class":56},[46,149438,148898],{"class":173},[46,149440,448],{"class":56},[46,149442,148903],{"class":173},[46,149444,448],{"class":56},[46,149446,148908],{"class":173},[46,149448,448],{"class":56},[46,149450,148913],{"class":173},[46,149452,35220],{"class":56},[46,149454,149455],{"class":48,"line":222},[46,149456,616],{"emptyLinePlaceholder":615},[46,149458,149459,149461,149463],{"class":48,"line":636},[46,149460,148880],{"class":56},[46,149462,79],{"class":52},[46,149464,148885],{"class":56},[46,149466,149467],{"class":48,"line":641},[46,149468,149469],{"class":56},"line.add_xaxis(dates)\n",[46,149471,149472,149474,149477,149479,149481,149483,149486,149488,149490,149492,149494,149496,149498,149500,149502,149504,149506],{"class":48,"line":653},[46,149473,148920],{"class":56},[46,149475,149476],{"class":173},"\"线上销售\"",[46,149478,79483],{"class":56},[46,149480,1155],{"class":180},[46,149482,448],{"class":56},[46,149484,149485],{"class":180},"130",[46,149487,448],{"class":56},[46,149489,3003],{"class":180},[46,149491,448],{"class":56},[46,149493,23049],{"class":180},[46,149495,448],{"class":56},[46,149497,3762],{"class":180},[46,149499,113830],{"class":56},[46,149501,149373],{"class":439},[46,149503,79],{"class":52},[46,149505,33453],{"class":180},[46,149507,459],{"class":56},[46,149509,149510,149512,149515,149517,149519,149521,149523,149525,149527,149529,149531,149533,149535,149537,149539,149541,149543],{"class":48,"line":659},[46,149511,148920],{"class":56},[46,149513,149514],{"class":173},"\"线下销售\"",[46,149516,79483],{"class":56},[46,149518,2798],{"class":180},[46,149520,448],{"class":56},[46,149522,3048],{"class":180},[46,149524,448],{"class":56},[46,149526,1155],{"class":180},[46,149528,448],{"class":56},[46,149530,3003],{"class":180},[46,149532,448],{"class":56},[46,149534,148940],{"class":180},[46,149536,113830],{"class":56},[46,149538,149373],{"class":439},[46,149540,79],{"class":52},[46,149542,33453],{"class":180},[46,149544,459],{"class":56},[46,149546,149547],{"class":48,"line":665},[46,149548,149096],{"class":56},[46,149550,149551,149553,149555,149557,149559,149561,149564],{"class":48,"line":670},[46,149552,149101],{"class":439},[46,149554,79],{"class":52},[46,149556,149106],{"class":56},[46,149558,53374],{"class":439},[46,149560,79],{"class":52},[46,149562,149563],{"class":173},"\"线上线下销售趋势\"",[46,149565,40019],{"class":56},[46,149567,149568,149570,149572,149574,149576,149578,149580],{"class":48,"line":676},[46,149569,149157],{"class":439},[46,149571,79],{"class":52},[46,149573,149162],{"class":56},[46,149575,149165],{"class":439},[46,149577,79],{"class":52},[46,149579,149170],{"class":173},[46,149581,40019],{"class":56},[46,149583,149584],{"class":48,"line":682},[46,149585,459],{"class":56},[46,149587,149588,149590,149593],{"class":48,"line":688},[46,149589,148952],{"class":56},[46,149591,149592],{"class":173},"\"sales.html\"",[46,149594,459],{"class":56},[19,149596,149597],{},"多条折线适合比较不同指标或不同地区。",[14,149599,149601],{"id":149600},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[19,149603,149604,149605,26615],{},"假设 ",[43,149606,149607],{},"sales.json",[36,149609,149611],{"className":148673,"code":149610,"language":147420,"meta":41,"style":41},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[43,149612,149613,149618,149650,149678,149706],{"__ignoreMap":41},[46,149614,149615],{"class":48,"line":49},[46,149616,149617],{"class":56},"[\n",[46,149619,149620,149623,149626,149628,149630,149632,149635,149637,149639,149641,149644,149646,149648],{"class":48,"line":60},[46,149621,149622],{"class":56},"  {",[46,149624,149625],{"class":180},"\"date\"",[46,149627,53404],{"class":56},[46,149629,148893],{"class":173},[46,149631,448],{"class":56},[46,149633,149634],{"class":180},"\"online\"",[46,149636,53404],{"class":56},[46,149638,1155],{"class":180},[46,149640,448],{"class":56},[46,149642,149643],{"class":180},"\"offline\"",[46,149645,53404],{"class":56},[46,149647,2798],{"class":180},[46,149649,6946],{"class":56},[46,149651,149652,149654,149656,149658,149660,149662,149664,149666,149668,149670,149672,149674,149676],{"class":48,"line":200},[46,149653,149622],{"class":56},[46,149655,149625],{"class":180},[46,149657,53404],{"class":56},[46,149659,148898],{"class":173},[46,149661,448],{"class":56},[46,149663,149634],{"class":180},[46,149665,53404],{"class":56},[46,149667,149485],{"class":180},[46,149669,448],{"class":56},[46,149671,149643],{"class":180},[46,149673,53404],{"class":56},[46,149675,3048],{"class":180},[46,149677,6946],{"class":56},[46,149679,149680,149682,149684,149686,149688,149690,149692,149694,149696,149698,149700,149702,149704],{"class":48,"line":211},[46,149681,149622],{"class":56},[46,149683,149625],{"class":180},[46,149685,53404],{"class":56},[46,149687,148903],{"class":173},[46,149689,448],{"class":56},[46,149691,149634],{"class":180},[46,149693,53404],{"class":56},[46,149695,3003],{"class":180},[46,149697,448],{"class":56},[46,149699,149643],{"class":180},[46,149701,53404],{"class":56},[46,149703,1155],{"class":180},[46,149705,3616],{"class":56},[46,149707,149708],{"class":48,"line":222},[46,149709,35220],{"class":56},[19,149711,149712],{},"读取并绘图：",[36,149714,149716],{"className":38,"code":149715,"language":40,"meta":41,"style":41},"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",[43,149717,149718,149724,149738,149748,149752,149784,149797,149801,149809,149818,149827,149831,149843,149852,149861,149870,149874,149882,149886,149903,149920,149924,149941,149957,149961],{"__ignoreMap":41},[46,149719,149720,149722],{"class":48,"line":49},[46,149721,53],{"class":52},[46,149723,148719],{"class":56},[46,149725,149726,149728,149730,149732,149734,149736],{"class":48,"line":60},[46,149727,957],{"class":52},[46,149729,149007],{"class":56},[46,149731,53],{"class":52},[46,149733,149012],{"class":56},[46,149735,398],{"class":52},[46,149737,149017],{"class":56},[46,149739,149740,149742,149744,149746],{"class":48,"line":200},[46,149741,957],{"class":52},[46,149743,148866],{"class":56},[46,149745,53],{"class":52},[46,149747,148871],{"class":56},[46,149749,149750],{"class":48,"line":211},[46,149751,616],{"emptyLinePlaceholder":615},[46,149753,149754,149756,149758,149760,149763,149765,149767,149769,149771,149773,149775,149777,149779,149782],{"class":48,"line":222},[46,149755,392],{"class":52},[46,149757,148419],{"class":180},[46,149759,1152],{"class":56},[46,149761,149762],{"class":173},"\"sales.json\"",[46,149764,448],{"class":56},[46,149766,148429],{"class":173},[46,149768,448],{"class":56},[46,149770,148434],{"class":439},[46,149772,79],{"class":52},[46,149774,148439],{"class":173},[46,149776,15716],{"class":56},[46,149778,398],{"class":52},[46,149780,149781],{"class":439}," file",[46,149783,760],{"class":56},[46,149785,149786,149788,149790,149793,149795],{"class":48,"line":636},[46,149787,781],{"class":56},[46,149789,79],{"class":52},[46,149791,149792],{"class":56}," json.load(",[46,149794,47325],{"class":439},[46,149796,459],{"class":56},[46,149798,149799],{"class":48,"line":641},[46,149800,616],{"emptyLinePlaceholder":615},[46,149802,149803,149805,149807],{"class":48,"line":653},[46,149804,149428],{"class":56},[46,149806,79],{"class":52},[46,149808,53805],{"class":56},[46,149810,149811,149814,149816],{"class":48,"line":659},[46,149812,149813],{"class":56},"online_sales ",[46,149815,79],{"class":52},[46,149817,53805],{"class":56},[46,149819,149820,149823,149825],{"class":48,"line":665},[46,149821,149822],{"class":56},"offline_sales ",[46,149824,79],{"class":52},[46,149826,53805],{"class":56},[46,149828,149829],{"class":48,"line":670},[46,149830,616],{"emptyLinePlaceholder":615},[46,149832,149833,149835,149838,149840],{"class":48,"line":676},[46,149834,1713],{"class":52},[46,149836,149837],{"class":56}," item ",[46,149839,1146],{"class":52},[46,149841,149842],{"class":56}," data:\n",[46,149844,149845,149848,149850],{"class":48,"line":682},[46,149846,149847],{"class":56},"    dates.append(item[",[46,149849,149625],{"class":173},[46,149851,6673],{"class":56},[46,149853,149854,149857,149859],{"class":48,"line":688},[46,149855,149856],{"class":56},"    online_sales.append(item[",[46,149858,149634],{"class":173},[46,149860,6673],{"class":56},[46,149862,149863,149866,149868],{"class":48,"line":693},[46,149864,149865],{"class":56},"    offline_sales.append(item[",[46,149867,149643],{"class":173},[46,149869,6673],{"class":56},[46,149871,149872],{"class":48,"line":699},[46,149873,616],{"emptyLinePlaceholder":615},[46,149875,149876,149878,149880],{"class":48,"line":705},[46,149877,148880],{"class":56},[46,149879,79],{"class":52},[46,149881,148885],{"class":56},[46,149883,149884],{"class":48,"line":711},[46,149885,149469],{"class":56},[46,149887,149888,149890,149892,149895,149897,149899,149901],{"class":48,"line":717},[46,149889,148920],{"class":56},[46,149891,149476],{"class":173},[46,149893,149894],{"class":56},", online_sales, ",[46,149896,149373],{"class":439},[46,149898,79],{"class":52},[46,149900,33453],{"class":180},[46,149902,459],{"class":56},[46,149904,149905,149907,149909,149912,149914,149916,149918],{"class":48,"line":723},[46,149906,148920],{"class":56},[46,149908,149514],{"class":173},[46,149910,149911],{"class":56},", offline_sales, ",[46,149913,149373],{"class":439},[46,149915,79],{"class":52},[46,149917,33453],{"class":180},[46,149919,459],{"class":56},[46,149921,149922],{"class":48,"line":729},[46,149923,149096],{"class":56},[46,149925,149926,149928,149930,149932,149934,149936,149939],{"class":48,"line":735},[46,149927,149101],{"class":439},[46,149929,79],{"class":52},[46,149931,149106],{"class":56},[46,149933,53374],{"class":439},[46,149935,79],{"class":52},[46,149937,149938],{"class":173},"\"销售趋势\"",[46,149940,40019],{"class":56},[46,149942,149943,149945,149947,149949,149951,149953,149955],{"class":48,"line":740},[46,149944,149157],{"class":439},[46,149946,79],{"class":52},[46,149948,149162],{"class":56},[46,149950,149165],{"class":439},[46,149952,79],{"class":52},[46,149954,149170],{"class":173},[46,149956,40019],{"class":56},[46,149958,149959],{"class":48,"line":745},[46,149960,459],{"class":56},[46,149962,149963,149965,149967],{"class":48,"line":763},[46,149964,148952],{"class":56},[46,149966,149592],{"class":173},[46,149968,459],{"class":56},[14,149970,149972],{"id":149971},"_109-数据清洗","10.9 数据清洗",[19,149974,149975],{},"真实数据经常不整齐，需要清洗。",[19,149977,149978],{},"常见问题：",[23,149980,149981,149984,149987,149990],{},[26,149982,149983],{},"数字是字符串。",[26,149985,149986],{},"字段缺失。",[26,149988,149989],{},"空值。",[26,149991,149992],{},"日期格式不统一。",[19,149994,17136],{},[36,149996,149998],{"className":38,"code":149997,"language":40,"meta":41,"style":41},"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",[43,149999,150000,150009,150032,150052,150073,150077,150081,150089,150098,150102,150113,150127,150136,150141,150145,150153,150163,150167,150174],{"__ignoreMap":41},[46,150001,150002,150005,150007],{"class":48,"line":49},[46,150003,150004],{"class":56},"raw_data ",[46,150006,79],{"class":52},[46,150008,57412],{"class":56},[46,150010,150011,150014,150016,150018,150020,150022,150025,150027,150030],{"class":48,"line":60},[46,150012,150013],{"class":56},"    {",[46,150015,149625],{"class":173},[46,150017,53404],{"class":56},[46,150019,148893],{"class":173},[46,150021,448],{"class":56},[46,150023,150024],{"class":173},"\"sales\"",[46,150026,53404],{"class":56},[46,150028,150029],{"class":173},"\"100\"",[46,150031,6946],{"class":56},[46,150033,150034,150036,150038,150040,150042,150044,150046,150048,150050],{"class":48,"line":200},[46,150035,150013],{"class":56},[46,150037,149625],{"class":173},[46,150039,53404],{"class":56},[46,150041,148898],{"class":173},[46,150043,448],{"class":56},[46,150045,150024],{"class":173},[46,150047,53404],{"class":56},[46,150049,9665],{"class":173},[46,150051,6946],{"class":56},[46,150053,150054,150056,150058,150060,150062,150064,150066,150068,150071],{"class":48,"line":211},[46,150055,150013],{"class":56},[46,150057,149625],{"class":173},[46,150059,53404],{"class":56},[46,150061,148903],{"class":173},[46,150063,448],{"class":56},[46,150065,150024],{"class":173},[46,150067,53404],{"class":56},[46,150069,150070],{"class":173},"\"120\"",[46,150072,6946],{"class":56},[46,150074,150075],{"class":48,"line":222},[46,150076,35220],{"class":56},[46,150078,150079],{"class":48,"line":636},[46,150080,616],{"emptyLinePlaceholder":615},[46,150082,150083,150085,150087],{"class":48,"line":641},[46,150084,149428],{"class":56},[46,150086,79],{"class":52},[46,150088,53805],{"class":56},[46,150090,150091,150094,150096],{"class":48,"line":653},[46,150092,150093],{"class":56},"sales ",[46,150095,79],{"class":52},[46,150097,53805],{"class":56},[46,150099,150100],{"class":48,"line":659},[46,150101,616],{"emptyLinePlaceholder":615},[46,150103,150104,150106,150108,150110],{"class":48,"line":665},[46,150105,1713],{"class":52},[46,150107,149837],{"class":56},[46,150109,1146],{"class":52},[46,150111,150112],{"class":56}," raw_data:\n",[46,150114,150115,150118,150120,150123,150125],{"class":48,"line":670},[46,150116,150117],{"class":56},"    value ",[46,150119,79],{"class":52},[46,150121,150122],{"class":56}," item.get(",[46,150124,150024],{"class":173},[46,150126,459],{"class":56},[46,150128,150129,150131,150133],{"class":48,"line":676},[46,150130,5121],{"class":52},[46,150132,40902],{"class":52},[46,150134,150135],{"class":56}," value:\n",[46,150137,150138],{"class":48,"line":682},[46,150139,150140],{"class":52},"        continue\n",[46,150142,150143],{"class":48,"line":688},[46,150144,616],{"emptyLinePlaceholder":615},[46,150146,150147,150149,150151],{"class":48,"line":693},[46,150148,149847],{"class":56},[46,150150,149625],{"class":173},[46,150152,6673],{"class":56},[46,150154,150155,150158,150160],{"class":48,"line":699},[46,150156,150157],{"class":56},"    sales.append(",[46,150159,2201],{"class":180},[46,150161,150162],{"class":56},"(value))\n",[46,150164,150165],{"class":48,"line":705},[46,150166,616],{"emptyLinePlaceholder":615},[46,150168,150169,150171],{"class":48,"line":711},[46,150170,32398],{"class":180},[46,150172,150173],{"class":56},"(dates)\n",[46,150175,150176,150178],{"class":48,"line":717},[46,150177,32398],{"class":180},[46,150179,150180],{"class":56},"(sales)\n",[14,150182,150184],{"id":150183},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[36,150186,150188],{"className":38,"code":150187,"language":40,"meta":41,"style":41},"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",[43,150189,150190,150204,150214,150218,150226,150247,150269,150291,150313,150335,150339,150343,150365,150386,150390,150398,150402,150406,150416,150425,150435,150451,150455,150459,150476,150492,150508,150524,150534,150538],{"__ignoreMap":41},[46,150191,150192,150194,150196,150198,150200,150202],{"class":48,"line":49},[46,150193,957],{"class":52},[46,150195,149007],{"class":56},[46,150197,53],{"class":52},[46,150199,149012],{"class":56},[46,150201,398],{"class":52},[46,150203,149017],{"class":56},[46,150205,150206,150208,150210,150212],{"class":48,"line":60},[46,150207,957],{"class":52},[46,150209,148866],{"class":56},[46,150211,53],{"class":52},[46,150213,148871],{"class":56},[46,150215,150216],{"class":48,"line":200},[46,150217,616],{"emptyLinePlaceholder":615},[46,150219,150220,150222,150224],{"class":48,"line":211},[46,150221,150093],{"class":56},[46,150223,79],{"class":52},[46,150225,57412],{"class":56},[46,150227,150228,150230,150232,150234,150237,150239,150241,150243,150245],{"class":48,"line":222},[46,150229,150013],{"class":56},[46,150231,149625],{"class":173},[46,150233,53404],{"class":56},[46,150235,150236],{"class":173},"\"2024-10-01\"",[46,150238,448],{"class":56},[46,150240,86047],{"class":173},[46,150242,53404],{"class":56},[46,150244,93986],{"class":180},[46,150246,6946],{"class":56},[46,150248,150249,150251,150253,150255,150258,150260,150262,150264,150267],{"class":48,"line":636},[46,150250,150013],{"class":56},[46,150252,149625],{"class":173},[46,150254,53404],{"class":56},[46,150256,150257],{"class":173},"\"2024-10-02\"",[46,150259,448],{"class":56},[46,150261,86047],{"class":173},[46,150263,53404],{"class":56},[46,150265,150266],{"class":180},"1800",[46,150268,6946],{"class":56},[46,150270,150271,150273,150275,150277,150280,150282,150284,150286,150289],{"class":48,"line":641},[46,150272,150013],{"class":56},[46,150274,149625],{"class":173},[46,150276,53404],{"class":56},[46,150278,150279],{"class":173},"\"2024-10-03\"",[46,150281,448],{"class":56},[46,150283,86047],{"class":173},[46,150285,53404],{"class":56},[46,150287,150288],{"class":180},"1500",[46,150290,6946],{"class":56},[46,150292,150293,150295,150297,150299,150302,150304,150306,150308,150311],{"class":48,"line":653},[46,150294,150013],{"class":56},[46,150296,149625],{"class":173},[46,150298,53404],{"class":56},[46,150300,150301],{"class":173},"\"2024-10-04\"",[46,150303,448],{"class":56},[46,150305,86047],{"class":173},[46,150307,53404],{"class":56},[46,150309,150310],{"class":180},"2100",[46,150312,6946],{"class":56},[46,150314,150315,150317,150319,150321,150324,150326,150328,150330,150333],{"class":48,"line":659},[46,150316,150013],{"class":56},[46,150318,149625],{"class":173},[46,150320,53404],{"class":56},[46,150322,150323],{"class":173},"\"2024-10-05\"",[46,150325,448],{"class":56},[46,150327,86047],{"class":173},[46,150329,53404],{"class":56},[46,150331,150332],{"class":180},"2600",[46,150334,6946],{"class":56},[46,150336,150337],{"class":48,"line":665},[46,150338,35220],{"class":56},[46,150340,150341],{"class":48,"line":670},[46,150342,616],{"emptyLinePlaceholder":615},[46,150344,150345,150347,150349,150352,150354,150356,150358,150360,150362],{"class":48,"line":676},[46,150346,149428],{"class":56},[46,150348,79],{"class":52},[46,150350,150351],{"class":56}," [item[",[46,150353,149625],{"class":173},[46,150355,6460],{"class":56},[46,150357,1713],{"class":52},[46,150359,149837],{"class":56},[46,150361,1146],{"class":52},[46,150363,150364],{"class":56}," sales]\n",[46,150366,150367,150370,150372,150374,150376,150378,150380,150382,150384],{"class":48,"line":682},[46,150368,150369],{"class":56},"amounts ",[46,150371,79],{"class":52},[46,150373,150351],{"class":56},[46,150375,86047],{"class":173},[46,150377,6460],{"class":56},[46,150379,1713],{"class":52},[46,150381,149837],{"class":56},[46,150383,1146],{"class":52},[46,150385,150364],{"class":56},[46,150387,150388],{"class":48,"line":688},[46,150389,616],{"emptyLinePlaceholder":615},[46,150391,150392,150394,150396],{"class":48,"line":693},[46,150393,148880],{"class":56},[46,150395,79],{"class":52},[46,150397,148885],{"class":56},[46,150399,150400],{"class":48,"line":699},[46,150401,149469],{"class":56},[46,150403,150404],{"class":48,"line":705},[46,150405,149277],{"class":56},[46,150407,150408,150410,150412,150414],{"class":48,"line":711},[46,150409,149282],{"class":439},[46,150411,79],{"class":52},[46,150413,148923],{"class":173},[46,150415,33443],{"class":56},[46,150417,150418,150420,150422],{"class":48,"line":717},[46,150419,149293],{"class":439},[46,150421,79],{"class":52},[46,150423,150424],{"class":56},"amounts,\n",[46,150426,150427,150429,150431,150433],{"class":48,"line":723},[46,150428,149322],{"class":439},[46,150430,79],{"class":52},[46,150432,33453],{"class":180},[46,150434,33443],{"class":56},[46,150436,150437,150439,150441,150443,150445,150447,150449],{"class":48,"line":729},[46,150438,149333],{"class":439},[46,150440,79],{"class":52},[46,150442,149338],{"class":56},[46,150444,149341],{"class":439},[46,150446,79],{"class":52},[46,150448,33453],{"class":180},[46,150450,40019],{"class":56},[46,150452,150453],{"class":48,"line":735},[46,150454,459],{"class":56},[46,150456,150457],{"class":48,"line":740},[46,150458,149096],{"class":56},[46,150460,150461,150463,150465,150467,150469,150471,150474],{"class":48,"line":745},[46,150462,149101],{"class":439},[46,150464,79],{"class":52},[46,150466,149106],{"class":56},[46,150468,53374],{"class":439},[46,150470,79],{"class":52},[46,150472,150473],{"class":173},"\"每日销售额\"",[46,150475,40019],{"class":56},[46,150477,150478,150480,150482,150484,150486,150488,150490],{"class":48,"line":763},[46,150479,149120],{"class":439},[46,150481,79],{"class":52},[46,150483,149125],{"class":56},[46,150485,1653],{"class":439},[46,150487,79],{"class":52},[46,150489,149132],{"class":173},[46,150491,40019],{"class":56},[46,150493,150494,150496,150498,150500,150502,150504,150506],{"class":48,"line":778},[46,150495,149139],{"class":439},[46,150497,79],{"class":52},[46,150499,149125],{"class":56},[46,150501,1653],{"class":439},[46,150503,79],{"class":52},[46,150505,149150],{"class":173},[46,150507,40019],{"class":56},[46,150509,150510,150512,150514,150516,150518,150520,150522],{"class":48,"line":789},[46,150511,149157],{"class":439},[46,150513,79],{"class":52},[46,150515,149162],{"class":56},[46,150517,149165],{"class":439},[46,150519,79],{"class":52},[46,150521,149170],{"class":173},[46,150523,40019],{"class":56},[46,150525,150526,150529,150531],{"class":48,"line":794},[46,150527,150528],{"class":439},"    datazoom_opts",[46,150530,79],{"class":52},[46,150532,150533],{"class":56},"[opts.DataZoomOpts()],\n",[46,150535,150536],{"class":48,"line":806},[46,150537,459],{"class":56},[46,150539,150540,150542,150545],{"class":48,"line":829},[46,150541,148952],{"class":56},[46,150543,150544],{"class":173},"\"daily_sales.html\"",[46,150546,459],{"class":56},[19,150548,150549,150552],{},[43,150550,150551],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,150554,150556],{"id":150555},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[19,150558,150559],{},"如果数据结构如下：",[36,150561,150563],{"className":38,"code":150562,"language":40,"meta":41,"style":41},"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",[43,150564,150565,150573,150581,150603,150624,150629,150636,150656,150676,150680],{"__ignoreMap":41},[46,150566,150567,150569,150571],{"class":48,"line":49},[46,150568,103565],{"class":56},[46,150570,79],{"class":52},[46,150572,17573],{"class":56},[46,150574,150575,150578],{"class":48,"line":60},[46,150576,150577],{"class":173},"    \"北京\"",[46,150579,150580],{"class":56},": [\n",[46,150582,150583,150585,150587,150589,150592,150594,150597,150599,150601],{"class":48,"line":200},[46,150584,6933],{"class":56},[46,150586,149625],{"class":173},[46,150588,53404],{"class":56},[46,150590,150591],{"class":173},"\"2024-01-01\"",[46,150593,448],{"class":56},[46,150595,150596],{"class":173},"\"confirm\"",[46,150598,53404],{"class":56},[46,150600,2633],{"class":180},[46,150602,6946],{"class":56},[46,150604,150605,150607,150609,150611,150614,150616,150618,150620,150622],{"class":48,"line":211},[46,150606,6933],{"class":56},[46,150608,149625],{"class":173},[46,150610,53404],{"class":56},[46,150612,150613],{"class":173},"\"2024-01-02\"",[46,150615,448],{"class":56},[46,150617,150596],{"class":173},[46,150619,53404],{"class":56},[46,150621,2685],{"class":180},[46,150623,6946],{"class":56},[46,150625,150626],{"class":48,"line":222},[46,150627,150628],{"class":56},"    ],\n",[46,150630,150631,150634],{"class":48,"line":636},[46,150632,150633],{"class":173},"    \"上海\"",[46,150635,150580],{"class":56},[46,150637,150638,150640,150642,150644,150646,150648,150650,150652,150654],{"class":48,"line":641},[46,150639,6933],{"class":56},[46,150641,149625],{"class":173},[46,150643,53404],{"class":56},[46,150645,150591],{"class":173},[46,150647,448],{"class":56},[46,150649,150596],{"class":173},[46,150651,53404],{"class":56},[46,150653,2582],{"class":180},[46,150655,6946],{"class":56},[46,150657,150658,150660,150662,150664,150666,150668,150670,150672,150674],{"class":48,"line":653},[46,150659,6933],{"class":56},[46,150661,149625],{"class":173},[46,150663,53404],{"class":56},[46,150665,150613],{"class":173},[46,150667,448],{"class":56},[46,150669,150596],{"class":173},[46,150671,53404],{"class":56},[46,150673,2710],{"class":180},[46,150675,6946],{"class":56},[46,150677,150678],{"class":48,"line":659},[46,150679,150628],{"class":56},[46,150681,150682],{"class":48,"line":665},[46,150683,3616],{"class":56},[19,150685,150686],{},"绘制多地区趋势：",[36,150688,150690],{"className":38,"code":150689,"language":40,"meta":41,"style":41},"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",[43,150691,150692,150706,150716,150720,150745,150749,150757,150761,150765,150777,150799,150812,150816,150820,150837,150853,150857],{"__ignoreMap":41},[46,150693,150694,150696,150698,150700,150702,150704],{"class":48,"line":49},[46,150695,957],{"class":52},[46,150697,149007],{"class":56},[46,150699,53],{"class":52},[46,150701,149012],{"class":56},[46,150703,398],{"class":52},[46,150705,149017],{"class":56},[46,150707,150708,150710,150712,150714],{"class":48,"line":60},[46,150709,957],{"class":52},[46,150711,148866],{"class":56},[46,150713,53],{"class":52},[46,150715,148871],{"class":56},[46,150717,150718],{"class":48,"line":200},[46,150719,616],{"emptyLinePlaceholder":615},[46,150721,150722,150724,150726,150728,150730,150732,150734,150736,150738,150741,150743],{"class":48,"line":211},[46,150723,149428],{"class":56},[46,150725,79],{"class":52},[46,150727,150351],{"class":56},[46,150729,149625],{"class":173},[46,150731,6460],{"class":56},[46,150733,1713],{"class":52},[46,150735,149837],{"class":56},[46,150737,1146],{"class":52},[46,150739,150740],{"class":56}," data[",[46,150742,71234],{"class":173},[46,150744,79492],{"class":56},[46,150746,150747],{"class":48,"line":222},[46,150748,616],{"emptyLinePlaceholder":615},[46,150750,150751,150753,150755],{"class":48,"line":636},[46,150752,148880],{"class":56},[46,150754,79],{"class":52},[46,150756,148885],{"class":56},[46,150758,150759],{"class":48,"line":641},[46,150760,149469],{"class":56},[46,150762,150763],{"class":48,"line":653},[46,150764,616],{"emptyLinePlaceholder":615},[46,150766,150767,150769,150772,150774],{"class":48,"line":659},[46,150768,1713],{"class":52},[46,150770,150771],{"class":56}," city, records ",[46,150773,1146],{"class":52},[46,150775,150776],{"class":56}," data.items():\n",[46,150778,150779,150782,150784,150786,150788,150790,150792,150794,150796],{"class":48,"line":665},[46,150780,150781],{"class":56},"    values ",[46,150783,79],{"class":52},[46,150785,150351],{"class":56},[46,150787,150596],{"class":173},[46,150789,6460],{"class":56},[46,150791,1713],{"class":52},[46,150793,149837],{"class":56},[46,150795,1146],{"class":52},[46,150797,150798],{"class":56}," records]\n",[46,150800,150801,150804,150806,150808,150810],{"class":48,"line":670},[46,150802,150803],{"class":56},"    line.add_yaxis(city, values, ",[46,150805,149373],{"class":439},[46,150807,79],{"class":52},[46,150809,33453],{"class":180},[46,150811,459],{"class":56},[46,150813,150814],{"class":48,"line":676},[46,150815,616],{"emptyLinePlaceholder":615},[46,150817,150818],{"class":48,"line":682},[46,150819,149096],{"class":56},[46,150821,150822,150824,150826,150828,150830,150832,150835],{"class":48,"line":688},[46,150823,149101],{"class":439},[46,150825,79],{"class":52},[46,150827,149106],{"class":56},[46,150829,53374],{"class":439},[46,150831,79],{"class":52},[46,150833,150834],{"class":173},"\"多地区趋势图\"",[46,150836,40019],{"class":56},[46,150838,150839,150841,150843,150845,150847,150849,150851],{"class":48,"line":693},[46,150840,149157],{"class":439},[46,150842,79],{"class":52},[46,150844,149162],{"class":56},[46,150846,149165],{"class":439},[46,150848,79],{"class":52},[46,150850,149170],{"class":173},[46,150852,40019],{"class":56},[46,150854,150855],{"class":48,"line":699},[46,150856,459],{"class":56},[46,150858,150859,150861,150864],{"class":48,"line":705},[46,150860,148952],{"class":56},[46,150862,150863],{"class":173},"\"trend.html\"",[46,150865,459],{"class":56},[19,150867,150868],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,150870,150872],{"id":150871},"_1012-易错点","10.12 易错点",[23,150874,150875,150881,150887,150897,150903],{},[26,150876,150877,150880],{},[43,150878,150879],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[26,150882,150883,150886],{},[43,150884,150885],{},"render()"," 生成的是 HTML，不是图片。",[26,150888,150889,150890,150893,150894,365],{},"JSON 字符串用 ",[43,150891,150892],{},"json.loads()","，JSON 文件用 ",[43,150895,150896],{},"json.load()",[26,150898,150899,150900,365],{},"中文 JSON 保存时加 ",[43,150901,150902],{},"ensure_ascii=False",[26,150904,150905],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,150907,150909],{"id":150908},"_1013-本章练习","10.13 本章练习",[23,150911,150912,150915,150918,150921,150924],{},[26,150913,150914],{},"安装 pyecharts 并生成第一个折线图。",[26,150916,150917],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[26,150919,150920],{},"绘制两条折线，对比线上和线下销售额。",[26,150922,150923],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[26,150925,150926],{},"对含有空值的销售数据进行清洗后再绘图。",[2098,150928,150929],{},"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":41,"searchDepth":60,"depth":60,"links":150931},[150932,150933,150934,150935,150936,150937,150938,150939,150940,150941,150942,150943,150944],{"id":148548,"depth":60,"text":148549},{"id":148623,"depth":60,"text":148624},{"id":148802,"depth":60,"text":148803},{"id":148853,"depth":60,"text":148854},{"id":148987,"depth":60,"text":148988},{"id":149263,"depth":60,"text":149264},{"id":149389,"depth":60,"text":149390},{"id":149600,"depth":60,"text":149601},{"id":149971,"depth":60,"text":149972},{"id":150183,"depth":60,"text":150184},{"id":150555,"depth":60,"text":150556},{"id":150871,"depth":60,"text":150872},{"id":150908,"depth":60,"text":150909},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":148540,"description":25378},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":150951,"title":150952,"body":150953,"description":25378,"extension":2125,"meta":153313,"navigation":615,"path":153314,"seo":153315,"stem":153316,"__hash__":153317},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":150954,"toc":153290},[150955,150958,150962,150965,150968,151044,151047,151138,151141,151145,151148,151192,151205,151209,151212,151279,151282,151286,151289,151373,151381,151385,151390,151531,151534,151545,151551,151557,151671,151675,151678,151681,151934,151937,151941,151944,152048,152051,152055,152206,152210,152217,152330,152334,152337,152443,152446,152450,152453,152484,152487,152592,152595,152599,152603,152613,152681,152685,152692,152756,152759,152763,152769,152865,152874,152878,153202,153211,153215,153243,153247,153287],[10,150956,150952],{"id":150957},"_11-面向对象基础",[14,150959,150961],{"id":150960},"_111-什么是面向对象","11.1 什么是面向对象",[19,150963,150964],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[19,150966,150967],{},"面向过程：",[36,150969,150971],{"className":38,"code":150970,"language":40,"meta":41,"style":41},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[43,150972,150973,150982,150990,150994,151004,151035,151039],{"__ignoreMap":41},[46,150974,150975,150977,150979],{"class":48,"line":49},[46,150976,148164],{"class":56},[46,150978,79],{"class":52},[46,150980,150981],{"class":173}," \"小明\"\n",[46,150983,150984,150986,150988],{"class":48,"line":60},[46,150985,148174],{"class":56},[46,150987,79],{"class":52},[46,150989,148179],{"class":180},[46,150991,150992],{"class":48,"line":200},[46,150993,616],{"emptyLinePlaceholder":615},[46,150995,150996,150998,151001],{"class":48,"line":211},[46,150997,748],{"class":52},[46,150999,151000],{"class":169}," introduce",[46,151002,151003],{"class":56},"(name, age):\n",[46,151005,151006,151008,151010,151012,151015,151017,151019,151021,151024,151026,151028,151030,151033],{"class":48,"line":222},[46,151007,1227],{"class":180},[46,151009,1152],{"class":56},[46,151011,2247],{"class":52},[46,151013,151014],{"class":173},"\"我叫",[46,151016,3082],{"class":180},[46,151018,1653],{"class":56},[46,151020,3131],{"class":180},[46,151022,151023],{"class":173},"，今年",[46,151025,3082],{"class":180},[46,151027,72186],{"class":56},[46,151029,3131],{"class":180},[46,151031,151032],{"class":173},"岁\"",[46,151034,459],{"class":56},[46,151036,151037],{"class":48,"line":636},[46,151038,616],{"emptyLinePlaceholder":615},[46,151040,151041],{"class":48,"line":641},[46,151042,151043],{"class":56},"introduce(name, age)\n",[19,151045,151046],{},"面向对象：",[36,151048,151050],{"className":38,"code":151049,"language":40,"meta":41,"style":41},"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",[43,151051,151052,151060,151068,151097,151101,151105,151115,151124,151133],{"__ignoreMap":41},[46,151053,151054,151056,151058],{"class":48,"line":49},[46,151055,16696],{"class":52},[46,151057,9911],{"class":169},[46,151059,760],{"class":56},[46,151061,151062,151064,151066],{"class":48,"line":60},[46,151063,32781],{"class":52},[46,151065,151000],{"class":169},[46,151067,32787],{"class":56},[46,151069,151070,151072,151074,151076,151078,151081,151083,151085,151087,151089,151091,151093,151095],{"class":48,"line":200},[46,151071,34425],{"class":180},[46,151073,1152],{"class":56},[46,151075,2247],{"class":52},[46,151077,151014],{"class":173},[46,151079,151080],{"class":180},"{self",[46,151082,82265],{"class":56},[46,151084,3131],{"class":180},[46,151086,151023],{"class":173},[46,151088,151080],{"class":180},[46,151090,82277],{"class":56},[46,151092,3131],{"class":180},[46,151094,151032],{"class":173},[46,151096,459],{"class":56},[46,151098,151099],{"class":48,"line":211},[46,151100,616],{"emptyLinePlaceholder":615},[46,151102,151103],{"class":48,"line":222},[46,151104,616],{"emptyLinePlaceholder":615},[46,151106,151107,151110,151112],{"class":48,"line":636},[46,151108,151109],{"class":56},"student ",[46,151111,79],{"class":52},[46,151113,151114],{"class":56}," Student()\n",[46,151116,151117,151120,151122],{"class":48,"line":641},[46,151118,151119],{"class":56},"student.name ",[46,151121,79],{"class":52},[46,151123,150981],{"class":173},[46,151125,151126,151129,151131],{"class":48,"line":653},[46,151127,151128],{"class":56},"student.age ",[46,151130,79],{"class":52},[46,151132,148179],{"class":180},[46,151134,151135],{"class":48,"line":659},[46,151136,151137],{"class":56},"student.introduce()\n",[19,151139,151140],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,151142,151144],{"id":151143},"_112-类和对象","11.2 类和对象",[19,151146,151147],{},"类是模板，对象是根据模板创建出来的具体实例。",[36,151149,151151],{"className":38,"code":151150,"language":40,"meta":41,"style":41},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[43,151152,151153,151161,151166,151170,151174,151183],{"__ignoreMap":41},[46,151154,151155,151157,151159],{"class":48,"line":49},[46,151156,16696],{"class":52},[46,151158,9911],{"class":169},[46,151160,760],{"class":56},[46,151162,151163],{"class":48,"line":60},[46,151164,151165],{"class":52},"    pass\n",[46,151167,151168],{"class":48,"line":200},[46,151169,616],{"emptyLinePlaceholder":615},[46,151171,151172],{"class":48,"line":211},[46,151173,616],{"emptyLinePlaceholder":615},[46,151175,151176,151179,151181],{"class":48,"line":222},[46,151177,151178],{"class":56},"student1 ",[46,151180,79],{"class":52},[46,151182,151114],{"class":56},[46,151184,151185,151188,151190],{"class":48,"line":636},[46,151186,151187],{"class":56},"student2 ",[46,151189,79],{"class":52},[46,151191,151114],{"class":56},[19,151193,151194,151197,151198,1700,151201,151204],{},[43,151195,151196],{},"Student"," 是类，",[43,151199,151200],{},"student1",[43,151202,151203],{},"student2"," 是对象。",[14,151206,151208],{"id":151207},"_113-属性","11.3 属性",[19,151210,151211],{},"属性是对象保存的数据。",[36,151213,151215],{"className":38,"code":151214,"language":40,"meta":41,"style":41},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[43,151216,151217,151225,151229,151233,151237,151245,151253,151261,151265,151272],{"__ignoreMap":41},[46,151218,151219,151221,151223],{"class":48,"line":49},[46,151220,16696],{"class":52},[46,151222,9911],{"class":169},[46,151224,760],{"class":56},[46,151226,151227],{"class":48,"line":60},[46,151228,151165],{"class":52},[46,151230,151231],{"class":48,"line":200},[46,151232,616],{"emptyLinePlaceholder":615},[46,151234,151235],{"class":48,"line":211},[46,151236,616],{"emptyLinePlaceholder":615},[46,151238,151239,151241,151243],{"class":48,"line":222},[46,151240,151109],{"class":56},[46,151242,79],{"class":52},[46,151244,151114],{"class":56},[46,151246,151247,151249,151251],{"class":48,"line":636},[46,151248,151119],{"class":56},[46,151250,79],{"class":52},[46,151252,150981],{"class":173},[46,151254,151255,151257,151259],{"class":48,"line":641},[46,151256,151128],{"class":56},[46,151258,79],{"class":52},[46,151260,148179],{"class":180},[46,151262,151263],{"class":48,"line":653},[46,151264,616],{"emptyLinePlaceholder":615},[46,151266,151267,151269],{"class":48,"line":659},[46,151268,32398],{"class":180},[46,151270,151271],{"class":56},"(student.name)\n",[46,151273,151274,151276],{"class":48,"line":665},[46,151275,32398],{"class":180},[46,151277,151278],{"class":56},"(student.age)\n",[19,151280,151281],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,151283,151285],{"id":151284},"_114-方法","11.4 方法",[19,151287,151288],{},"类中的函数叫方法。",[36,151290,151291],{"className":38,"code":151049,"language":40,"meta":41,"style":41},[43,151292,151293,151301,151309,151337,151341,151345,151353,151361,151369],{"__ignoreMap":41},[46,151294,151295,151297,151299],{"class":48,"line":49},[46,151296,16696],{"class":52},[46,151298,9911],{"class":169},[46,151300,760],{"class":56},[46,151302,151303,151305,151307],{"class":48,"line":60},[46,151304,32781],{"class":52},[46,151306,151000],{"class":169},[46,151308,32787],{"class":56},[46,151310,151311,151313,151315,151317,151319,151321,151323,151325,151327,151329,151331,151333,151335],{"class":48,"line":200},[46,151312,34425],{"class":180},[46,151314,1152],{"class":56},[46,151316,2247],{"class":52},[46,151318,151014],{"class":173},[46,151320,151080],{"class":180},[46,151322,82265],{"class":56},[46,151324,3131],{"class":180},[46,151326,151023],{"class":173},[46,151328,151080],{"class":180},[46,151330,82277],{"class":56},[46,151332,3131],{"class":180},[46,151334,151032],{"class":173},[46,151336,459],{"class":56},[46,151338,151339],{"class":48,"line":211},[46,151340,616],{"emptyLinePlaceholder":615},[46,151342,151343],{"class":48,"line":222},[46,151344,616],{"emptyLinePlaceholder":615},[46,151346,151347,151349,151351],{"class":48,"line":636},[46,151348,151109],{"class":56},[46,151350,79],{"class":52},[46,151352,151114],{"class":56},[46,151354,151355,151357,151359],{"class":48,"line":641},[46,151356,151119],{"class":56},[46,151358,79],{"class":52},[46,151360,150981],{"class":173},[46,151362,151363,151365,151367],{"class":48,"line":653},[46,151364,151128],{"class":56},[46,151366,79],{"class":52},[46,151368,148179],{"class":180},[46,151370,151371],{"class":48,"line":659},[46,151372,151137],{"class":56},[19,151374,151375,151377,151378,151380],{},[43,151376,32803],{}," 表示当前对象。调用方法时不需要手动传入 ",[43,151379,32803],{},"，Python 会自动传。",[14,151382,151384],{"id":151383},"_115-构造方法__init__","11.5 构造方法__init__",[19,151386,151387,151389],{},[43,151388,32809],{}," 在对象创建时自动执行，用于初始化属性。",[36,151391,151393],{"className":38,"code":151392,"language":40,"meta":41,"style":41},"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",[43,151394,151395,151403,151412,151424,151436,151447,151451,151459,151497,151501,151505,151527],{"__ignoreMap":41},[46,151396,151397,151399,151401],{"class":48,"line":49},[46,151398,16696],{"class":52},[46,151400,9911],{"class":169},[46,151402,760],{"class":56},[46,151404,151405,151407,151409],{"class":48,"line":60},[46,151406,32781],{"class":52},[46,151408,32784],{"class":180},[46,151410,151411],{"class":56},"(self, name, age, score):\n",[46,151413,151414,151416,151419,151421],{"class":48,"line":200},[46,151415,32825],{"class":180},[46,151417,151418],{"class":56},".name ",[46,151420,79],{"class":52},[46,151422,151423],{"class":56}," name\n",[46,151425,151426,151428,151431,151433],{"class":48,"line":211},[46,151427,32825],{"class":180},[46,151429,151430],{"class":56},".age ",[46,151432,79],{"class":52},[46,151434,151435],{"class":56}," age\n",[46,151437,151438,151440,151443,151445],{"class":48,"line":222},[46,151439,32825],{"class":180},[46,151441,151442],{"class":56},".score ",[46,151444,79],{"class":52},[46,151446,3630],{"class":56},[46,151448,151449],{"class":48,"line":636},[46,151450,616],{"emptyLinePlaceholder":615},[46,151452,151453,151455,151457],{"class":48,"line":641},[46,151454,32781],{"class":52},[46,151456,151000],{"class":169},[46,151458,32787],{"class":56},[46,151460,151461,151463,151465,151467,151469,151471,151473,151475,151477,151479,151481,151483,151486,151488,151491,151493,151495],{"class":48,"line":653},[46,151462,34425],{"class":180},[46,151464,1152],{"class":56},[46,151466,2247],{"class":52},[46,151468,151014],{"class":173},[46,151470,151080],{"class":180},[46,151472,82265],{"class":56},[46,151474,3131],{"class":180},[46,151476,151023],{"class":173},[46,151478,151080],{"class":180},[46,151480,82277],{"class":56},[46,151482,3131],{"class":180},[46,151484,151485],{"class":173},"岁，成绩",[46,151487,151080],{"class":180},[46,151489,151490],{"class":56},".score",[46,151492,3131],{"class":180},[46,151494,2439],{"class":173},[46,151496,459],{"class":56},[46,151498,151499],{"class":48,"line":659},[46,151500,616],{"emptyLinePlaceholder":615},[46,151502,151503],{"class":48,"line":665},[46,151504,616],{"emptyLinePlaceholder":615},[46,151506,151507,151509,151511,151514,151517,151519,151521,151523,151525],{"class":48,"line":670},[46,151508,151109],{"class":56},[46,151510,79],{"class":52},[46,151512,151513],{"class":56}," Student(",[46,151515,151516],{"class":173},"\"小明\"",[46,151518,448],{"class":56},[46,151520,2836],{"class":180},[46,151522,448],{"class":56},[46,151524,3173],{"class":180},[46,151526,459],{"class":56},[46,151528,151529],{"class":48,"line":676},[46,151530,151137],{"class":56},[19,151532,151533],{},"构造方法的好处：",[23,151535,151536,151539,151542],{},[26,151537,151538],{},"创建对象时必须提供必要数据。",[26,151540,151541],{},"属性初始化集中，不容易漏。",[26,151543,151544],{},"对象状态更完整。",[14,151546,151548,151549],{"id":151547},"_116-str","11.6 ",[2339,151550,3354],{},[19,151552,151553,151554,365],{},"直接打印对象时，默认输出不直观。可以定义 ",[43,151555,151556],{},"__str__",[36,151558,151560],{"className":38,"code":151559,"language":40,"meta":41,"style":41},"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",[43,151561,151562,151570,151579,151589,151599,151603,151612,151640,151644,151648,151664],{"__ignoreMap":41},[46,151563,151564,151566,151568],{"class":48,"line":49},[46,151565,16696],{"class":52},[46,151567,9911],{"class":169},[46,151569,760],{"class":56},[46,151571,151572,151574,151576],{"class":48,"line":60},[46,151573,32781],{"class":52},[46,151575,32784],{"class":180},[46,151577,151578],{"class":56},"(self, name, age):\n",[46,151580,151581,151583,151585,151587],{"class":48,"line":200},[46,151582,32825],{"class":180},[46,151584,151418],{"class":56},[46,151586,79],{"class":52},[46,151588,151423],{"class":56},[46,151590,151591,151593,151595,151597],{"class":48,"line":211},[46,151592,32825],{"class":180},[46,151594,151430],{"class":56},[46,151596,79],{"class":52},[46,151598,151435],{"class":56},[46,151600,151601],{"class":48,"line":222},[46,151602,616],{"emptyLinePlaceholder":615},[46,151604,151605,151607,151610],{"class":48,"line":636},[46,151606,32781],{"class":52},[46,151608,151609],{"class":180}," __str__",[46,151611,32787],{"class":56},[46,151613,151614,151616,151619,151622,151624,151626,151628,151631,151633,151635,151637],{"class":48,"line":641},[46,151615,16754],{"class":52},[46,151617,151618],{"class":52}," f",[46,151620,151621],{"class":173},"\"Student(name=",[46,151623,151080],{"class":180},[46,151625,82265],{"class":56},[46,151627,3131],{"class":180},[46,151629,151630],{"class":173},", age=",[46,151632,151080],{"class":180},[46,151634,82277],{"class":56},[46,151636,3131],{"class":180},[46,151638,151639],{"class":173},")\"\n",[46,151641,151642],{"class":48,"line":653},[46,151643,616],{"emptyLinePlaceholder":615},[46,151645,151646],{"class":48,"line":659},[46,151647,616],{"emptyLinePlaceholder":615},[46,151649,151650,151652,151654,151656,151658,151660,151662],{"class":48,"line":665},[46,151651,151109],{"class":56},[46,151653,79],{"class":52},[46,151655,151513],{"class":56},[46,151657,151516],{"class":173},[46,151659,448],{"class":56},[46,151661,2836],{"class":180},[46,151663,459],{"class":56},[46,151665,151666,151668],{"class":48,"line":670},[46,151667,32398],{"class":180},[46,151669,151670],{"class":56},"(student)\n",[14,151672,151674],{"id":151673},"_117-封装","11.7 封装",[19,151676,151677],{},"封装就是把数据和方法放到类中，并控制访问方式。",[19,151679,151680],{},"Python 中以双下划线开头的属性通常视为私有属性。",[36,151682,151684],{"className":38,"code":151683,"language":40,"meta":41,"style":41},"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",[43,151685,151686,151695,151704,151716,151728,151732,151741,151750,151754,151764,151777,151788,151793,151804,151808,151817,151829,151840,151844,151857,151868,151872,151883,151887,151891,151909,151918,151927],{"__ignoreMap":41},[46,151687,151688,151690,151693],{"class":48,"line":49},[46,151689,16696],{"class":52},[46,151691,151692],{"class":169}," Account",[46,151694,760],{"class":56},[46,151696,151697,151699,151701],{"class":48,"line":60},[46,151698,32781],{"class":52},[46,151700,32784],{"class":180},[46,151702,151703],{"class":56},"(self, owner, balance):\n",[46,151705,151706,151708,151711,151713],{"class":48,"line":200},[46,151707,32825],{"class":180},[46,151709,151710],{"class":56},".owner ",[46,151712,79],{"class":52},[46,151714,151715],{"class":56}," owner\n",[46,151717,151718,151720,151723,151725],{"class":48,"line":211},[46,151719,32825],{"class":180},[46,151721,151722],{"class":56},".__balance ",[46,151724,79],{"class":52},[46,151726,151727],{"class":56}," balance\n",[46,151729,151730],{"class":48,"line":222},[46,151731,616],{"emptyLinePlaceholder":615},[46,151733,151734,151736,151739],{"class":48,"line":636},[46,151735,32781],{"class":52},[46,151737,151738],{"class":169}," get_balance",[46,151740,32787],{"class":56},[46,151742,151743,151745,151747],{"class":48,"line":641},[46,151744,16754],{"class":52},[46,151746,40845],{"class":180},[46,151748,151749],{"class":56},".__balance\n",[46,151751,151752],{"class":48,"line":653},[46,151753,616],{"emptyLinePlaceholder":615},[46,151755,151756,151758,151761],{"class":48,"line":659},[46,151757,32781],{"class":52},[46,151759,151760],{"class":169}," deposit",[46,151762,151763],{"class":56},"(self, money):\n",[46,151765,151766,151768,151771,151773,151775],{"class":48,"line":665},[46,151767,4525],{"class":52},[46,151769,151770],{"class":56}," money ",[46,151772,3639],{"class":52},[46,151774,887],{"class":180},[46,151776,760],{"class":56},[46,151778,151779,151781,151783,151786],{"class":48,"line":670},[46,151780,36622],{"class":180},[46,151782,1152],{"class":56},[46,151784,151785],{"class":173},"\"存款金额必须大于0\"",[46,151787,459],{"class":56},[46,151789,151790],{"class":48,"line":676},[46,151791,151792],{"class":52},"            return\n",[46,151794,151795,151797,151799,151801],{"class":48,"line":682},[46,151796,32825],{"class":180},[46,151798,151722],{"class":56},[46,151800,11481],{"class":52},[46,151802,151803],{"class":56}," money\n",[46,151805,151806],{"class":48,"line":688},[46,151807,616],{"emptyLinePlaceholder":615},[46,151809,151810,151812,151815],{"class":48,"line":693},[46,151811,32781],{"class":52},[46,151813,151814],{"class":169}," withdraw",[46,151816,151763],{"class":56},[46,151818,151819,151821,151823,151825,151827],{"class":48,"line":699},[46,151820,4525],{"class":52},[46,151822,151770],{"class":56},[46,151824,3639],{"class":52},[46,151826,887],{"class":180},[46,151828,760],{"class":56},[46,151830,151831,151833,151835,151838],{"class":48,"line":705},[46,151832,36622],{"class":180},[46,151834,1152],{"class":56},[46,151836,151837],{"class":173},"\"取款金额必须大于0\"",[46,151839,459],{"class":56},[46,151841,151842],{"class":48,"line":711},[46,151843,151792],{"class":52},[46,151845,151846,151848,151850,151852,151854],{"class":48,"line":717},[46,151847,4525],{"class":52},[46,151849,151770],{"class":56},[46,151851,884],{"class":52},[46,151853,40845],{"class":180},[46,151855,151856],{"class":56},".__balance:\n",[46,151858,151859,151861,151863,151866],{"class":48,"line":723},[46,151860,36622],{"class":180},[46,151862,1152],{"class":56},[46,151864,151865],{"class":173},"\"余额不足\"",[46,151867,459],{"class":56},[46,151869,151870],{"class":48,"line":729},[46,151871,151792],{"class":52},[46,151873,151874,151876,151878,151881],{"class":48,"line":735},[46,151875,32825],{"class":180},[46,151877,151722],{"class":56},[46,151879,151880],{"class":52},"-=",[46,151882,151803],{"class":56},[46,151884,151885],{"class":48,"line":740},[46,151886,616],{"emptyLinePlaceholder":615},[46,151888,151889],{"class":48,"line":745},[46,151890,616],{"emptyLinePlaceholder":615},[46,151892,151893,151896,151898,151901,151903,151905,151907],{"class":48,"line":763},[46,151894,151895],{"class":56},"account ",[46,151897,79],{"class":52},[46,151899,151900],{"class":56}," Account(",[46,151902,151516],{"class":173},[46,151904,448],{"class":56},[46,151906,8423],{"class":180},[46,151908,459],{"class":56},[46,151910,151911,151914,151916],{"class":48,"line":778},[46,151912,151913],{"class":56},"account.deposit(",[46,151915,3762],{"class":180},[46,151917,459],{"class":56},[46,151919,151920,151923,151925],{"class":48,"line":789},[46,151921,151922],{"class":56},"account.withdraw(",[46,151924,1155],{"class":180},[46,151926,459],{"class":56},[46,151928,151929,151931],{"class":48,"line":794},[46,151930,32398],{"class":180},[46,151932,151933],{"class":56},"(account.get_balance())\n",[19,151935,151936],{},"封装的意义是避免外部随意修改内部状态。",[14,151938,151940],{"id":151939},"_118-继承","11.8 继承",[19,151942,151943],{},"继承可以让子类复用父类的属性和方法。",[36,151945,151947],{"className":38,"code":151946,"language":40,"meta":41,"style":41},"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",[43,151948,151949,151958,151967,151978,151982,151986,152000,152009,152020,152024,152028,152038,152043],{"__ignoreMap":41},[46,151950,151951,151953,151956],{"class":48,"line":49},[46,151952,16696],{"class":52},[46,151954,151955],{"class":169}," Animal",[46,151957,760],{"class":56},[46,151959,151960,151962,151965],{"class":48,"line":60},[46,151961,32781],{"class":52},[46,151963,151964],{"class":169}," eat",[46,151966,32787],{"class":56},[46,151968,151969,151971,151973,151976],{"class":48,"line":200},[46,151970,34425],{"class":180},[46,151972,1152],{"class":56},[46,151974,151975],{"class":173},"\"吃东西\"",[46,151977,459],{"class":56},[46,151979,151980],{"class":48,"line":211},[46,151981,616],{"emptyLinePlaceholder":615},[46,151983,151984],{"class":48,"line":222},[46,151985,616],{"emptyLinePlaceholder":615},[46,151987,151988,151990,151993,151995,151998],{"class":48,"line":636},[46,151989,16696],{"class":52},[46,151991,151992],{"class":169}," Dog",[46,151994,1152],{"class":56},[46,151996,151997],{"class":169},"Animal",[46,151999,1158],{"class":56},[46,152001,152002,152004,152007],{"class":48,"line":641},[46,152003,32781],{"class":52},[46,152005,152006],{"class":169}," bark",[46,152008,32787],{"class":56},[46,152010,152011,152013,152015,152018],{"class":48,"line":653},[46,152012,34425],{"class":180},[46,152014,1152],{"class":56},[46,152016,152017],{"class":173},"\"汪汪\"",[46,152019,459],{"class":56},[46,152021,152022],{"class":48,"line":659},[46,152023,616],{"emptyLinePlaceholder":615},[46,152025,152026],{"class":48,"line":665},[46,152027,616],{"emptyLinePlaceholder":615},[46,152029,152030,152033,152035],{"class":48,"line":670},[46,152031,152032],{"class":56},"dog ",[46,152034,79],{"class":52},[46,152036,152037],{"class":56}," Dog()\n",[46,152039,152040],{"class":48,"line":676},[46,152041,152042],{"class":56},"dog.eat()\n",[46,152044,152045],{"class":48,"line":682},[46,152046,152047],{"class":56},"dog.bark()\n",[19,152049,152050],{},"子类可以扩展新方法，也可以重写父类方法。",[14,152052,152054],{"id":152053},"_119-方法重写","11.9 方法重写",[36,152056,152058],{"className":38,"code":152057,"language":40,"meta":41,"style":41},"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",[43,152059,152060,152068,152077,152088,152092,152096,152108,152116,152126,152130,152134,152147,152155,152166,152170,152174,152182,152192,152196,152201],{"__ignoreMap":41},[46,152061,152062,152064,152066],{"class":48,"line":49},[46,152063,16696],{"class":52},[46,152065,151955],{"class":169},[46,152067,760],{"class":56},[46,152069,152070,152072,152075],{"class":48,"line":60},[46,152071,32781],{"class":52},[46,152073,152074],{"class":169}," speak",[46,152076,32787],{"class":56},[46,152078,152079,152081,152083,152086],{"class":48,"line":200},[46,152080,34425],{"class":180},[46,152082,1152],{"class":56},[46,152084,152085],{"class":173},"\"动物叫\"",[46,152087,459],{"class":56},[46,152089,152090],{"class":48,"line":211},[46,152091,616],{"emptyLinePlaceholder":615},[46,152093,152094],{"class":48,"line":222},[46,152095,616],{"emptyLinePlaceholder":615},[46,152097,152098,152100,152102,152104,152106],{"class":48,"line":636},[46,152099,16696],{"class":52},[46,152101,151992],{"class":169},[46,152103,1152],{"class":56},[46,152105,151997],{"class":169},[46,152107,1158],{"class":56},[46,152109,152110,152112,152114],{"class":48,"line":641},[46,152111,32781],{"class":52},[46,152113,152074],{"class":169},[46,152115,32787],{"class":56},[46,152117,152118,152120,152122,152124],{"class":48,"line":653},[46,152119,34425],{"class":180},[46,152121,1152],{"class":56},[46,152123,152017],{"class":173},[46,152125,459],{"class":56},[46,152127,152128],{"class":48,"line":659},[46,152129,616],{"emptyLinePlaceholder":615},[46,152131,152132],{"class":48,"line":665},[46,152133,616],{"emptyLinePlaceholder":615},[46,152135,152136,152138,152141,152143,152145],{"class":48,"line":670},[46,152137,16696],{"class":52},[46,152139,152140],{"class":169}," Cat",[46,152142,1152],{"class":56},[46,152144,151997],{"class":169},[46,152146,1158],{"class":56},[46,152148,152149,152151,152153],{"class":48,"line":676},[46,152150,32781],{"class":52},[46,152152,152074],{"class":169},[46,152154,32787],{"class":56},[46,152156,152157,152159,152161,152164],{"class":48,"line":682},[46,152158,34425],{"class":180},[46,152160,1152],{"class":56},[46,152162,152163],{"class":173},"\"喵喵\"",[46,152165,459],{"class":56},[46,152167,152168],{"class":48,"line":688},[46,152169,616],{"emptyLinePlaceholder":615},[46,152171,152172],{"class":48,"line":693},[46,152173,616],{"emptyLinePlaceholder":615},[46,152175,152176,152178,152180],{"class":48,"line":699},[46,152177,152032],{"class":56},[46,152179,79],{"class":52},[46,152181,152037],{"class":56},[46,152183,152184,152187,152189],{"class":48,"line":705},[46,152185,152186],{"class":56},"cat ",[46,152188,79],{"class":52},[46,152190,152191],{"class":56}," Cat()\n",[46,152193,152194],{"class":48,"line":711},[46,152195,616],{"emptyLinePlaceholder":615},[46,152197,152198],{"class":48,"line":717},[46,152199,152200],{"class":56},"dog.speak()\n",[46,152202,152203],{"class":48,"line":723},[46,152204,152205],{"class":56},"cat.speak()\n",[14,152207,152209],{"id":152208},"_1110-super","11.10 super",[19,152211,152212,152213,152216],{},"子类可以通过 ",[43,152214,152215],{},"super()"," 调用父类方法。",[36,152218,152220],{"className":38,"code":152219,"language":40,"meta":41,"style":41},"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",[43,152221,152222,152230,152239,152249,152253,152257,152269,152278,152289,152299,152303,152307,152323],{"__ignoreMap":41},[46,152223,152224,152226,152228],{"class":48,"line":49},[46,152225,16696],{"class":52},[46,152227,17570],{"class":169},[46,152229,760],{"class":56},[46,152231,152232,152234,152236],{"class":48,"line":60},[46,152233,32781],{"class":52},[46,152235,32784],{"class":180},[46,152237,152238],{"class":56},"(self, name):\n",[46,152240,152241,152243,152245,152247],{"class":48,"line":200},[46,152242,32825],{"class":180},[46,152244,151418],{"class":56},[46,152246,79],{"class":52},[46,152248,151423],{"class":56},[46,152250,152251],{"class":48,"line":211},[46,152252,616],{"emptyLinePlaceholder":615},[46,152254,152255],{"class":48,"line":222},[46,152256,616],{"emptyLinePlaceholder":615},[46,152258,152259,152261,152263,152265,152267],{"class":48,"line":636},[46,152260,16696],{"class":52},[46,152262,9911],{"class":169},[46,152264,1152],{"class":56},[46,152266,21047],{"class":169},[46,152268,1158],{"class":56},[46,152270,152271,152273,152275],{"class":48,"line":641},[46,152272,32781],{"class":52},[46,152274,32784],{"class":180},[46,152276,152277],{"class":56},"(self, name, score):\n",[46,152279,152280,152282,152284,152286],{"class":48,"line":653},[46,152281,32797],{"class":180},[46,152283,19262],{"class":56},[46,152285,32809],{"class":180},[46,152287,152288],{"class":56},"(name)\n",[46,152290,152291,152293,152295,152297],{"class":48,"line":659},[46,152292,32825],{"class":180},[46,152294,151442],{"class":56},[46,152296,79],{"class":52},[46,152298,3630],{"class":56},[46,152300,152301],{"class":48,"line":665},[46,152302,616],{"emptyLinePlaceholder":615},[46,152304,152305],{"class":48,"line":670},[46,152306,616],{"emptyLinePlaceholder":615},[46,152308,152309,152311,152313,152315,152317,152319,152321],{"class":48,"line":676},[46,152310,151109],{"class":56},[46,152312,79],{"class":52},[46,152314,151513],{"class":56},[46,152316,151516],{"class":173},[46,152318,448],{"class":56},[46,152320,3173],{"class":180},[46,152322,459],{"class":56},[46,152324,152325,152327],{"class":48,"line":682},[46,152326,32398],{"class":180},[46,152328,152329],{"class":56},"(student.name, student.score)\n",[14,152331,152333],{"id":152332},"_1111-多态","11.11 多态",[19,152335,152336],{},"多态指不同对象响应同一个方法，表现出不同结果。",[36,152338,152340],{"className":38,"code":152339,"language":40,"meta":41,"style":41},"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",[43,152341,152342,152350,152358,152368,152372,152376,152384,152392,152402,152406,152410,152420,152425,152429,152433,152438],{"__ignoreMap":41},[46,152343,152344,152346,152348],{"class":48,"line":49},[46,152345,16696],{"class":52},[46,152347,151992],{"class":169},[46,152349,760],{"class":56},[46,152351,152352,152354,152356],{"class":48,"line":60},[46,152353,32781],{"class":52},[46,152355,152074],{"class":169},[46,152357,32787],{"class":56},[46,152359,152360,152362,152364,152366],{"class":48,"line":200},[46,152361,34425],{"class":180},[46,152363,1152],{"class":56},[46,152365,152017],{"class":173},[46,152367,459],{"class":56},[46,152369,152370],{"class":48,"line":211},[46,152371,616],{"emptyLinePlaceholder":615},[46,152373,152374],{"class":48,"line":222},[46,152375,616],{"emptyLinePlaceholder":615},[46,152377,152378,152380,152382],{"class":48,"line":636},[46,152379,16696],{"class":52},[46,152381,152140],{"class":169},[46,152383,760],{"class":56},[46,152385,152386,152388,152390],{"class":48,"line":641},[46,152387,32781],{"class":52},[46,152389,152074],{"class":169},[46,152391,32787],{"class":56},[46,152393,152394,152396,152398,152400],{"class":48,"line":653},[46,152395,34425],{"class":180},[46,152397,1152],{"class":56},[46,152399,152163],{"class":173},[46,152401,459],{"class":56},[46,152403,152404],{"class":48,"line":659},[46,152405,616],{"emptyLinePlaceholder":615},[46,152407,152408],{"class":48,"line":665},[46,152409,616],{"emptyLinePlaceholder":615},[46,152411,152412,152414,152417],{"class":48,"line":670},[46,152413,748],{"class":52},[46,152415,152416],{"class":169}," make_sound",[46,152418,152419],{"class":56},"(animal):\n",[46,152421,152422],{"class":48,"line":676},[46,152423,152424],{"class":56},"    animal.speak()\n",[46,152426,152427],{"class":48,"line":682},[46,152428,616],{"emptyLinePlaceholder":615},[46,152430,152431],{"class":48,"line":688},[46,152432,616],{"emptyLinePlaceholder":615},[46,152434,152435],{"class":48,"line":693},[46,152436,152437],{"class":56},"make_sound(Dog())\n",[46,152439,152440],{"class":48,"line":699},[46,152441,152442],{"class":56},"make_sound(Cat())\n",[19,152444,152445],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,152447,152449],{"id":152448},"_1112-类属性和实例属性","11.12 类属性和实例属性",[19,152451,152452],{},"实例属性属于对象：",[36,152454,152456],{"className":38,"code":152455,"language":40,"meta":41,"style":41},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[43,152457,152458,152466,152474],{"__ignoreMap":41},[46,152459,152460,152462,152464],{"class":48,"line":49},[46,152461,16696],{"class":52},[46,152463,9911],{"class":169},[46,152465,760],{"class":56},[46,152467,152468,152470,152472],{"class":48,"line":60},[46,152469,32781],{"class":52},[46,152471,32784],{"class":180},[46,152473,152238],{"class":56},[46,152475,152476,152478,152480,152482],{"class":48,"line":200},[46,152477,32825],{"class":180},[46,152479,151418],{"class":56},[46,152481,79],{"class":52},[46,152483,151423],{"class":56},[19,152485,152486],{},"类属性属于类，所有对象共享：",[36,152488,152490],{"className":38,"code":152489,"language":40,"meta":41,"style":41},"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",[43,152491,152492,152500,152510,152514,152522,152532,152536,152540,152553,152567,152571,152578,152585],{"__ignoreMap":41},[46,152493,152494,152496,152498],{"class":48,"line":49},[46,152495,16696],{"class":52},[46,152497,9911],{"class":169},[46,152499,760],{"class":56},[46,152501,152502,152505,152507],{"class":48,"line":60},[46,152503,152504],{"class":56},"    school ",[46,152506,79],{"class":52},[46,152508,152509],{"class":173}," \"黑马学校\"\n",[46,152511,152512],{"class":48,"line":200},[46,152513,616],{"emptyLinePlaceholder":615},[46,152515,152516,152518,152520],{"class":48,"line":211},[46,152517,32781],{"class":52},[46,152519,32784],{"class":180},[46,152521,152238],{"class":56},[46,152523,152524,152526,152528,152530],{"class":48,"line":222},[46,152525,32825],{"class":180},[46,152527,151418],{"class":56},[46,152529,79],{"class":52},[46,152531,151423],{"class":56},[46,152533,152534],{"class":48,"line":636},[46,152535,616],{"emptyLinePlaceholder":615},[46,152537,152538],{"class":48,"line":641},[46,152539,616],{"emptyLinePlaceholder":615},[46,152541,152542,152545,152547,152549,152551],{"class":48,"line":653},[46,152543,152544],{"class":56},"s1 ",[46,152546,79],{"class":52},[46,152548,151513],{"class":56},[46,152550,151516],{"class":173},[46,152552,459],{"class":56},[46,152554,152555,152558,152560,152562,152565],{"class":48,"line":659},[46,152556,152557],{"class":56},"s2 ",[46,152559,79],{"class":52},[46,152561,151513],{"class":56},[46,152563,152564],{"class":173},"\"小红\"",[46,152566,459],{"class":56},[46,152568,152569],{"class":48,"line":665},[46,152570,616],{"emptyLinePlaceholder":615},[46,152572,152573,152575],{"class":48,"line":670},[46,152574,32398],{"class":180},[46,152576,152577],{"class":56},"(s1.school)\n",[46,152579,152580,152582],{"class":48,"line":676},[46,152581,32398],{"class":180},[46,152583,152584],{"class":56},"(s2.school)\n",[46,152586,152587,152589],{"class":48,"line":682},[46,152588,32398],{"class":180},[46,152590,152591],{"class":56},"(Student.school)\n",[19,152593,152594],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,152596,152598],{"id":152597},"_1113-类方法和静态方法","11.13 类方法和静态方法",[479,152600,152602],{"id":152601},"_11131-类方法","11.13.1 类方法",[19,152604,152605,152606,152609,152610,365],{},"类方法使用 ",[43,152607,152608],{},"@classmethod","，第一个参数通常是 ",[43,152611,152612],{},"cls",[36,152614,152616],{"className":38,"code":152615,"language":40,"meta":41,"style":41},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[43,152617,152618,152626,152634,152638,152646,152656,152666,152670,152674],{"__ignoreMap":41},[46,152619,152620,152622,152624],{"class":48,"line":49},[46,152621,16696],{"class":52},[46,152623,9911],{"class":169},[46,152625,760],{"class":56},[46,152627,152628,152630,152632],{"class":48,"line":60},[46,152629,152504],{"class":56},[46,152631,79],{"class":52},[46,152633,152509],{"class":173},[46,152635,152636],{"class":48,"line":200},[46,152637,616],{"emptyLinePlaceholder":615},[46,152639,152640,152643],{"class":48,"line":211},[46,152641,152642],{"class":169},"    @",[46,152644,152645],{"class":180},"classmethod\n",[46,152647,152648,152650,152653],{"class":48,"line":222},[46,152649,32781],{"class":52},[46,152651,152652],{"class":169}," get_school",[46,152654,152655],{"class":56},"(cls):\n",[46,152657,152658,152660,152663],{"class":48,"line":636},[46,152659,16754],{"class":52},[46,152661,152662],{"class":180}," cls",[46,152664,152665],{"class":56},".school\n",[46,152667,152668],{"class":48,"line":641},[46,152669,616],{"emptyLinePlaceholder":615},[46,152671,152672],{"class":48,"line":653},[46,152673,616],{"emptyLinePlaceholder":615},[46,152675,152676,152678],{"class":48,"line":659},[46,152677,32398],{"class":180},[46,152679,152680],{"class":56},"(Student.get_school())\n",[479,152682,152684],{"id":152683},"_11132-静态方法","11.13.2 静态方法",[19,152686,152687,152688,152691],{},"静态方法使用 ",[43,152689,152690],{},"@staticmethod","，不需要访问实例和类。",[36,152693,152695],{"className":38,"code":152694,"language":40,"meta":41,"style":41},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[43,152696,152697,152706,152713,152722,152733,152737,152741],{"__ignoreMap":41},[46,152698,152699,152701,152704],{"class":48,"line":49},[46,152700,16696],{"class":52},[46,152702,152703],{"class":169}," MathUtils",[46,152705,760],{"class":56},[46,152707,152708,152710],{"class":48,"line":60},[46,152709,152642],{"class":169},[46,152711,152712],{"class":180},"staticmethod\n",[46,152714,152715,152717,152719],{"class":48,"line":200},[46,152716,32781],{"class":52},[46,152718,7223],{"class":169},[46,152720,152721],{"class":56},"(a, b):\n",[46,152723,152724,152726,152728,152730],{"class":48,"line":211},[46,152725,16754],{"class":52},[46,152727,12873],{"class":56},[46,152729,2668],{"class":52},[46,152731,152732],{"class":56}," b\n",[46,152734,152735],{"class":48,"line":222},[46,152736,616],{"emptyLinePlaceholder":615},[46,152738,152739],{"class":48,"line":636},[46,152740,616],{"emptyLinePlaceholder":615},[46,152742,152743,152745,152748,152750,152752,152754],{"class":48,"line":641},[46,152744,32398],{"class":180},[46,152746,152747],{"class":56},"(MathUtils.add(",[46,152749,2405],{"class":180},[46,152751,448],{"class":56},[46,152753,2272],{"class":180},[46,152755,32479],{"class":56},[19,152757,152758],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,152760,152762],{"id":152761},"_1114-dataclass","11.14 dataclass",[19,152764,152765,152768],{},[43,152766,152767],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[36,152770,152772],{"className":38,"code":152771,"language":40,"meta":41,"style":41},"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",[43,152773,152774,152786,152790,152794,152799,152807,152815,152823,152831,152835,152839,152859],{"__ignoreMap":41},[46,152775,152776,152778,152781,152783],{"class":48,"line":49},[46,152777,957],{"class":52},[46,152779,152780],{"class":56}," dataclasses ",[46,152782,53],{"class":52},[46,152784,152785],{"class":56}," dataclass\n",[46,152787,152788],{"class":48,"line":60},[46,152789,616],{"emptyLinePlaceholder":615},[46,152791,152792],{"class":48,"line":200},[46,152793,616],{"emptyLinePlaceholder":615},[46,152795,152796],{"class":48,"line":211},[46,152797,152798],{"class":169},"@dataclass\n",[46,152800,152801,152803,152805],{"class":48,"line":222},[46,152802,16696],{"class":52},[46,152804,9911],{"class":169},[46,152806,760],{"class":56},[46,152808,152809,152812],{"class":48,"line":636},[46,152810,152811],{"class":56},"    name: ",[46,152813,152814],{"class":180},"str\n",[46,152816,152817,152820],{"class":48,"line":641},[46,152818,152819],{"class":56},"    age: ",[46,152821,152822],{"class":180},"int\n",[46,152824,152825,152828],{"class":48,"line":653},[46,152826,152827],{"class":56},"    score: ",[46,152829,152830],{"class":180},"float\n",[46,152832,152833],{"class":48,"line":659},[46,152834,616],{"emptyLinePlaceholder":615},[46,152836,152837],{"class":48,"line":665},[46,152838,616],{"emptyLinePlaceholder":615},[46,152840,152841,152843,152845,152847,152849,152851,152853,152855,152857],{"class":48,"line":670},[46,152842,151109],{"class":56},[46,152844,79],{"class":52},[46,152846,151513],{"class":56},[46,152848,151516],{"class":173},[46,152850,448],{"class":56},[46,152852,2836],{"class":180},[46,152854,448],{"class":56},[46,152856,3173],{"class":180},[46,152858,459],{"class":56},[46,152860,152861,152863],{"class":48,"line":676},[46,152862,32398],{"class":180},[46,152864,151670],{"class":56},[19,152866,152867,152868,2400,152870,152873],{},"它会自动生成 ",[43,152869,32809],{},[43,152871,152872],{},"__repr__"," 等方法。适合数据模型类。",[14,152875,152877],{"id":152876},"_1115-小案例学生类","11.15 小案例：学生类",[36,152879,152881],{"className":38,"code":152880,"language":40,"meta":41,"style":41},"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",[43,152882,152883,152891,152900,152912,152922,152932,152942,152946,152955,152968,152972,152981,152987,152999,153011,153023,153035,153039,153043,153049,153059,153068,153078,153086,153094,153103,153107,153111,153119,153155,153159,153163,153188,153195],{"__ignoreMap":41},[46,152884,152885,152887,152889],{"class":48,"line":49},[46,152886,16696],{"class":52},[46,152888,9911],{"class":169},[46,152890,760],{"class":56},[46,152892,152893,152895,152897],{"class":48,"line":60},[46,152894,32781],{"class":52},[46,152896,32784],{"class":180},[46,152898,152899],{"class":56},"(self, student_id, name, age, score):\n",[46,152901,152902,152904,152907,152909],{"class":48,"line":200},[46,152903,32825],{"class":180},[46,152905,152906],{"class":56},".student_id ",[46,152908,79],{"class":52},[46,152910,152911],{"class":56}," student_id\n",[46,152913,152914,152916,152918,152920],{"class":48,"line":211},[46,152915,32825],{"class":180},[46,152917,151418],{"class":56},[46,152919,79],{"class":52},[46,152921,151423],{"class":56},[46,152923,152924,152926,152928,152930],{"class":48,"line":222},[46,152925,32825],{"class":180},[46,152927,151430],{"class":56},[46,152929,79],{"class":52},[46,152931,151435],{"class":56},[46,152933,152934,152936,152938,152940],{"class":48,"line":636},[46,152935,32825],{"class":180},[46,152937,151442],{"class":56},[46,152939,79],{"class":52},[46,152941,3630],{"class":56},[46,152943,152944],{"class":48,"line":641},[46,152945,616],{"emptyLinePlaceholder":615},[46,152947,152948,152950,152953],{"class":48,"line":653},[46,152949,32781],{"class":52},[46,152951,152952],{"class":169}," is_passed",[46,152954,32787],{"class":56},[46,152956,152957,152959,152961,152963,152965],{"class":48,"line":659},[46,152958,16754],{"class":52},[46,152960,40845],{"class":180},[46,152962,151442],{"class":56},[46,152964,3750],{"class":52},[46,152966,152967],{"class":180}," 60\n",[46,152969,152970],{"class":48,"line":665},[46,152971,616],{"emptyLinePlaceholder":615},[46,152973,152974,152976,152979],{"class":48,"line":670},[46,152975,32781],{"class":52},[46,152977,152978],{"class":169}," to_dict",[46,152980,32787],{"class":56},[46,152982,152983,152985],{"class":48,"line":676},[46,152984,16754],{"class":52},[46,152986,17573],{"class":56},[46,152988,152989,152992,152994,152996],{"class":48,"line":682},[46,152990,152991],{"class":173},"            \"student_id\"",[46,152993,53404],{"class":56},[46,152995,32803],{"class":180},[46,152997,152998],{"class":56},".student_id,\n",[46,153000,153001,153004,153006,153008],{"class":48,"line":688},[46,153002,153003],{"class":173},"            \"name\"",[46,153005,53404],{"class":56},[46,153007,32803],{"class":180},[46,153009,153010],{"class":56},".name,\n",[46,153012,153013,153016,153018,153020],{"class":48,"line":693},[46,153014,153015],{"class":173},"            \"age\"",[46,153017,53404],{"class":56},[46,153019,32803],{"class":180},[46,153021,153022],{"class":56},".age,\n",[46,153024,153025,153028,153030,153032],{"class":48,"line":699},[46,153026,153027],{"class":173},"            \"score\"",[46,153029,53404],{"class":56},[46,153031,32803],{"class":180},[46,153033,153034],{"class":56},".score,\n",[46,153036,153037],{"class":48,"line":705},[46,153038,4557],{"class":56},[46,153040,153041],{"class":48,"line":711},[46,153042,616],{"emptyLinePlaceholder":615},[46,153044,153045,153047],{"class":48,"line":717},[46,153046,152642],{"class":169},[46,153048,152645],{"class":180},[46,153050,153051,153053,153056],{"class":48,"line":723},[46,153052,32781],{"class":52},[46,153054,153055],{"class":169}," from_dict",[46,153057,153058],{"class":56},"(cls, data):\n",[46,153060,153061,153063,153065],{"class":48,"line":729},[46,153062,16754],{"class":52},[46,153064,152662],{"class":180},[46,153066,153067],{"class":56},"(\n",[46,153069,153070,153073,153076],{"class":48,"line":735},[46,153071,153072],{"class":56},"            data[",[46,153074,153075],{"class":173},"\"student_id\"",[46,153077,89799],{"class":56},[46,153079,153080,153082,153084],{"class":48,"line":740},[46,153081,153072],{"class":56},[46,153083,64644],{"class":173},[46,153085,89799],{"class":56},[46,153087,153088,153090,153092],{"class":48,"line":745},[46,153089,153072],{"class":56},[46,153091,71089],{"class":173},[46,153093,89799],{"class":56},[46,153095,153096,153098,153101],{"class":48,"line":763},[46,153097,153072],{"class":56},[46,153099,153100],{"class":173},"\"score\"",[46,153102,89799],{"class":56},[46,153104,153105],{"class":48,"line":778},[46,153106,40098],{"class":56},[46,153108,153109],{"class":48,"line":789},[46,153110,616],{"emptyLinePlaceholder":615},[46,153112,153113,153115,153117],{"class":48,"line":794},[46,153114,32781],{"class":52},[46,153116,151609],{"class":180},[46,153118,32787],{"class":56},[46,153120,153121,153123,153125,153127,153129,153132,153134,153137,153139,153141,153143,153145,153147,153149,153151,153153],{"class":48,"line":806},[46,153122,16754],{"class":52},[46,153124,151618],{"class":52},[46,153126,2439],{"class":173},[46,153128,151080],{"class":180},[46,153130,153131],{"class":56},".student_id",[46,153133,3131],{"class":180},[46,153135,153136],{"class":180}," {self",[46,153138,82265],{"class":56},[46,153140,3131],{"class":180},[46,153142,153136],{"class":180},[46,153144,82277],{"class":56},[46,153146,3131],{"class":180},[46,153148,153136],{"class":180},[46,153150,151490],{"class":56},[46,153152,3131],{"class":180},[46,153154,27125],{"class":173},[46,153156,153157],{"class":48,"line":829},[46,153158,616],{"emptyLinePlaceholder":615},[46,153160,153161],{"class":48,"line":840},[46,153162,616],{"emptyLinePlaceholder":615},[46,153164,153165,153167,153169,153171,153174,153176,153178,153180,153182,153184,153186],{"class":48,"line":846},[46,153166,151109],{"class":56},[46,153168,79],{"class":52},[46,153170,151513],{"class":56},[46,153172,153173],{"class":173},"\"001\"",[46,153175,448],{"class":56},[46,153177,151516],{"class":173},[46,153179,448],{"class":56},[46,153181,2836],{"class":180},[46,153183,448],{"class":56},[46,153185,3173],{"class":180},[46,153187,459],{"class":56},[46,153189,153190,153192],{"class":48,"line":852},[46,153191,32398],{"class":180},[46,153193,153194],{"class":56},"(student.is_passed())\n",[46,153196,153197,153199],{"class":48,"line":857},[46,153198,32398],{"class":180},[46,153200,153201],{"class":56},"(student.to_dict())\n",[19,153203,153204,1700,153207,153210],{},[43,153205,153206],{},"to_dict()",[43,153208,153209],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,153212,153214],{"id":153213},"_1116-易错点","11.16 易错点",[23,153216,153217,153223,153229,153234,153237,153240],{},[26,153218,153219,153220,365],{},"类名推荐使用大驼峰，如 ",[43,153221,153222],{},"StudentManager",[26,153224,153225,153226,153228],{},"方法第一个参数必须写 ",[43,153227,32803],{},"，调用时不用传。",[26,153230,153231,153233],{},[43,153232,32809],{}," 不是普通方法，它在创建对象时自动执行。",[26,153235,153236],{},"私有属性不是绝对安全，只是约定和名称改写。",[26,153238,153239],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[26,153241,153242],{},"类中方法太多时，说明职责可能过重。",[14,153244,153246],{"id":153245},"_1117-本章练习","11.17 本章练习",[23,153248,153249,153255,153261,153266,153279],{},[26,153250,153251,153252,153254],{},"定义 ",[43,153253,151196],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[26,153256,153251,153257,153260],{},[43,153258,153259],{},"Account"," 类，实现存款、取款、查询余额。",[26,153262,153251,153263,153265],{},[43,153264,19227],{}," 类，计算圆的周长和面积。",[26,153267,153251,153268,2400,153271,153274,153275,153278],{},[43,153269,153270],{},"Dog",[43,153272,153273],{},"Cat"," 类，并用同一个函数调用它们的 ",[43,153276,153277],{},"speak()"," 方法。",[26,153280,106254,153281,153283,153284,365],{},[43,153282,152767],{}," 定义一个商品类 ",[43,153285,153286],{},"Product",[2098,153288,153289],{},"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":41,"searchDepth":60,"depth":60,"links":153291},[153292,153293,153294,153295,153296,153297,153299,153300,153301,153302,153303,153304,153305,153309,153310,153311,153312],{"id":150960,"depth":60,"text":150961},{"id":151143,"depth":60,"text":151144},{"id":151207,"depth":60,"text":151208},{"id":151284,"depth":60,"text":151285},{"id":151383,"depth":60,"text":151384},{"id":151547,"depth":60,"text":153298},"11.6 str",{"id":151673,"depth":60,"text":151674},{"id":151939,"depth":60,"text":151940},{"id":152053,"depth":60,"text":152054},{"id":152208,"depth":60,"text":152209},{"id":152332,"depth":60,"text":152333},{"id":152448,"depth":60,"text":152449},{"id":152597,"depth":60,"text":152598,"children":153306},[153307,153308],{"id":152601,"depth":200,"text":152602},{"id":152683,"depth":200,"text":152684},{"id":152761,"depth":60,"text":152762},{"id":152876,"depth":60,"text":152877},{"id":153213,"depth":60,"text":153214},{"id":153245,"depth":60,"text":153246},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":150952,"description":25378},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":153319,"title":153320,"body":153321,"description":25378,"extension":2125,"meta":156634,"navigation":615,"path":156635,"seo":156636,"stem":156637,"__hash__":156638},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":153322,"toc":156610},[153323,153326,153330,153333,153336,153365,153368,153376,153380,153384,153387,153410,153413,153419,153423,154869,154872,154893,154897,154900,154912,154915,155099,155102,155228,155231,155235,155239,155375,155379,155465,155469,155551,155555,155592,155596,155785,155789,155792,156022,156026,156029,156210,156213,156217,156220,156226,156229,156255,156259,156262,156276,156279,156304,156307,156321,156324,156341,156344,156361,156364,156381,156385,156411,156415,156438,156442,156445,156447,156453,156455,156476,156479,156485,156491,156495,156498,156574,156577,156581,156607],[10,153324,153320],{"id":153325},"_12-综合案例与复习路线",[14,153327,153329],{"id":153328},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[19,153331,153332],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[19,153334,153335],{},"一个合格的入门综合项目最好覆盖：",[23,153337,153338,153341,153344,153347,153350,153353,153356,153359,153362],{},[26,153339,153340],{},"输入输出。",[26,153342,153343],{},"判断和循环。",[26,153345,153346],{},"函数拆分。",[26,153348,153349],{},"列表、字典等容器。",[26,153351,153352],{},"文件持久化。",[26,153354,153355],{},"异常处理。",[26,153357,153358],{},"模块拆分。",[26,153360,153361],{},"可选：面向对象。",[26,153363,153364],{},"可选：数据可视化。",[19,153366,153367],{},"本章整理两个方向：",[23,153369,153370,153373],{},[26,153371,153372],{},"学生管理系统。",[26,153374,153375],{},"销售数据统计和可视化。",[14,153377,153379],{"id":153378},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[479,153381,153383],{"id":153382},"_1221-需求","12.2.1 需求",[19,153385,153386],{},"实现一个命令行学生管理系统：",[23,153388,153389,153392,153395,153398,153401,153404,153407],{},[26,153390,153391],{},"添加学生。",[26,153393,153394],{},"删除学生。",[26,153396,153397],{},"修改学生。",[26,153399,153400],{},"查询学生。",[26,153402,153403],{},"显示所有学生。",[26,153405,153406],{},"保存到 JSON 文件。",[26,153408,153409],{},"程序启动时自动读取 JSON 文件。",[19,153411,153412],{},"学生字段：",[36,153414,153417],{"className":153415,"code":153416,"language":571,"meta":41},[569],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[43,153418,153416],{"__ignoreMap":41},[14,153420,153422],{"id":153421},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[36,153424,153426],{"className":38,"code":153425,"language":40,"meta":41,"style":41},"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",[43,153427,153428,153434,153444,153448,153462,153466,153470,153479,153491,153497,153501,153507,153538,153548,153555,153566,153572,153576,153580,153590,153621,153647,153651,153655,153664,153675,153686,153697,153708,153719,153730,153741,153745,153749,153759,153771,153787,153794,153801,153805,153809,153819,153827,153834,153847,153857,153868,153872,153876,153885,153893,153899,153911,153919,153930,153934,153938,153947,153963,153967,153974,153985,153990,153994,154010,154025,154040,154044,154049,154057,154065,154073,154081,154085,154090,154101,154105,154109,154118,154133,154143,154147,154159,154170,154174,154178,154183,154187,154198,154202,154206,154215,154230,154238,154242,154254,154264,154268,154272,154287,154300,154313,154317,154330,154342,154354,154358,154362,154373,154377,154381,154390,154405,154413,154417,154429,154439,154443,154447,154452,154456,154460,154470,154476,154498,154517,154536,154555,154560,154564,154568,154577,154585,154596,154600,154604,154630,154640,154645,154649,154653,154661,154671,154675,154683,154688,154704,154708,154722,154727,154741,154746,154759,154764,154777,154782,154795,154800,154813,154824,154828,154834,154845,154849,154853,154865],{"__ignoreMap":41},[46,153429,153430,153432],{"class":48,"line":49},[46,153431,53],{"class":52},[46,153433,148719],{"class":56},[46,153435,153436,153438,153440,153442],{"class":48,"line":60},[46,153437,957],{"class":52},[46,153439,960],{"class":56},[46,153441,53],{"class":52},[46,153443,965],{"class":56},[46,153445,153446],{"class":48,"line":200},[46,153447,616],{"emptyLinePlaceholder":615},[46,153449,153450,153453,153455,153457,153460],{"class":48,"line":211},[46,153451,153452],{"class":180},"DATA_FILE",[46,153454,647],{"class":52},[46,153456,1204],{"class":56},[46,153458,153459],{"class":173},"\"students.json\"",[46,153461,459],{"class":56},[46,153463,153464],{"class":48,"line":222},[46,153465,616],{"emptyLinePlaceholder":615},[46,153467,153468],{"class":48,"line":636},[46,153469,616],{"emptyLinePlaceholder":615},[46,153471,153472,153474,153477],{"class":48,"line":641},[46,153473,748],{"class":52},[46,153475,153476],{"class":169}," load_students",[46,153478,33928],{"class":56},[46,153480,153481,153483,153485,153488],{"class":48,"line":653},[46,153482,5121],{"class":52},[46,153484,40902],{"class":52},[46,153486,153487],{"class":180}," DATA_FILE",[46,153489,153490],{"class":56},".exists():\n",[46,153492,153493,153495],{"class":48,"line":659},[46,153494,16754],{"class":52},[46,153496,53805],{"class":56},[46,153498,153499],{"class":48,"line":665},[46,153500,616],{"emptyLinePlaceholder":615},[46,153502,153503,153505],{"class":48,"line":670},[46,153504,127412],{"class":52},[46,153506,760],{"class":56},[46,153508,153509,153512,153514,153516,153518,153520,153522,153524,153526,153528,153530,153532,153534,153536],{"class":48,"line":676},[46,153510,153511],{"class":52},"        with",[46,153513,148419],{"class":180},[46,153515,1152],{"class":56},[46,153517,153452],{"class":180},[46,153519,448],{"class":56},[46,153521,148429],{"class":173},[46,153523,448],{"class":56},[46,153525,148434],{"class":439},[46,153527,79],{"class":52},[46,153529,148439],{"class":173},[46,153531,15716],{"class":56},[46,153533,398],{"class":52},[46,153535,149781],{"class":439},[46,153537,760],{"class":56},[46,153539,153540,153542,153544,153546],{"class":48,"line":682},[46,153541,17733],{"class":52},[46,153543,149792],{"class":56},[46,153545,47325],{"class":439},[46,153547,459],{"class":56},[46,153549,153550,153552],{"class":48,"line":688},[46,153551,127440],{"class":52},[46,153553,153554],{"class":56}," json.JSONDecodeError:\n",[46,153556,153557,153559,153561,153564],{"class":48,"line":693},[46,153558,34425],{"class":180},[46,153560,1152],{"class":56},[46,153562,153563],{"class":173},"\"数据文件格式错误，已使用空数据启动\"",[46,153565,459],{"class":56},[46,153567,153568,153570],{"class":48,"line":699},[46,153569,16754],{"class":52},[46,153571,53805],{"class":56},[46,153573,153574],{"class":48,"line":705},[46,153575,616],{"emptyLinePlaceholder":615},[46,153577,153578],{"class":48,"line":711},[46,153579,616],{"emptyLinePlaceholder":615},[46,153581,153582,153584,153587],{"class":48,"line":717},[46,153583,748],{"class":52},[46,153585,153586],{"class":169}," save_students",[46,153588,153589],{"class":56},"(students):\n",[46,153591,153592,153594,153596,153598,153600,153602,153605,153607,153609,153611,153613,153615,153617,153619],{"class":48,"line":723},[46,153593,797],{"class":52},[46,153595,148419],{"class":180},[46,153597,1152],{"class":56},[46,153599,153452],{"class":180},[46,153601,448],{"class":56},[46,153603,153604],{"class":173},"\"w\"",[46,153606,448],{"class":56},[46,153608,148434],{"class":439},[46,153610,79],{"class":52},[46,153612,148439],{"class":173},[46,153614,15716],{"class":56},[46,153616,398],{"class":52},[46,153618,149781],{"class":439},[46,153620,760],{"class":56},[46,153622,153623,153626,153628,153630,153632,153634,153636,153638,153641,153643,153645],{"class":48,"line":729},[46,153624,153625],{"class":56},"        json.dump(students, ",[46,153627,47325],{"class":439},[46,153629,448],{"class":56},[46,153631,148765],{"class":439},[46,153633,79],{"class":52},[46,153635,35960],{"class":180},[46,153637,448],{"class":56},[46,153639,153640],{"class":439},"indent",[46,153642,79],{"class":52},[46,153644,2272],{"class":180},[46,153646,459],{"class":56},[46,153648,153649],{"class":48,"line":735},[46,153650,616],{"emptyLinePlaceholder":615},[46,153652,153653],{"class":48,"line":740},[46,153654,616],{"emptyLinePlaceholder":615},[46,153656,153657,153659,153662],{"class":48,"line":745},[46,153658,748],{"class":52},[46,153660,153661],{"class":169}," show_menu",[46,153663,33928],{"class":56},[46,153665,153666,153668,153670,153673],{"class":48,"line":763},[46,153667,1227],{"class":180},[46,153669,1152],{"class":56},[46,153671,153672],{"class":173},"\"====== 学生管理系统 ======\"",[46,153674,459],{"class":56},[46,153676,153677,153679,153681,153684],{"class":48,"line":778},[46,153678,1227],{"class":180},[46,153680,1152],{"class":56},[46,153682,153683],{"class":173},"\"1. 添加学生\"",[46,153685,459],{"class":56},[46,153687,153688,153690,153692,153695],{"class":48,"line":789},[46,153689,1227],{"class":180},[46,153691,1152],{"class":56},[46,153693,153694],{"class":173},"\"2. 删除学生\"",[46,153696,459],{"class":56},[46,153698,153699,153701,153703,153706],{"class":48,"line":794},[46,153700,1227],{"class":180},[46,153702,1152],{"class":56},[46,153704,153705],{"class":173},"\"3. 修改学生\"",[46,153707,459],{"class":56},[46,153709,153710,153712,153714,153717],{"class":48,"line":806},[46,153711,1227],{"class":180},[46,153713,1152],{"class":56},[46,153715,153716],{"class":173},"\"4. 查询学生\"",[46,153718,459],{"class":56},[46,153720,153721,153723,153725,153728],{"class":48,"line":829},[46,153722,1227],{"class":180},[46,153724,1152],{"class":56},[46,153726,153727],{"class":173},"\"5. 显示所有学生\"",[46,153729,459],{"class":56},[46,153731,153732,153734,153736,153739],{"class":48,"line":840},[46,153733,1227],{"class":180},[46,153735,1152],{"class":56},[46,153737,153738],{"class":173},"\"0. 退出系统\"",[46,153740,459],{"class":56},[46,153742,153743],{"class":48,"line":846},[46,153744,616],{"emptyLinePlaceholder":615},[46,153746,153747],{"class":48,"line":852},[46,153748,616],{"emptyLinePlaceholder":615},[46,153750,153751,153753,153756],{"class":48,"line":857},[46,153752,748],{"class":52},[46,153754,153755],{"class":169}," find_student",[46,153757,153758],{"class":56},"(students, student_id):\n",[46,153760,153761,153763,153766,153768],{"class":48,"line":875},[46,153762,1140],{"class":52},[46,153764,153765],{"class":56}," student ",[46,153767,1146],{"class":52},[46,153769,153770],{"class":56}," students:\n",[46,153772,153773,153775,153778,153780,153782,153784],{"class":48,"line":892},[46,153774,4525],{"class":52},[46,153776,153777],{"class":56}," student[",[46,153779,153075],{"class":173},[46,153781,6460],{"class":56},[46,153783,4970],{"class":52},[46,153785,153786],{"class":56}," student_id:\n",[46,153788,153789,153791],{"class":48,"line":898},[46,153790,17733],{"class":52},[46,153792,153793],{"class":56}," student\n",[46,153795,153796,153798],{"class":48,"line":903},[46,153797,6108],{"class":52},[46,153799,153800],{"class":180}," None\n",[46,153802,153803],{"class":48,"line":908},[46,153804,616],{"emptyLinePlaceholder":615},[46,153806,153807],{"class":48,"line":925},[46,153808,616],{"emptyLinePlaceholder":615},[46,153810,153811,153813,153816],{"class":48,"line":1238},[46,153812,748],{"class":52},[46,153814,153815],{"class":169}," input_int",[46,153817,153818],{"class":56},"(prompt):\n",[46,153820,153821,153823,153825],{"class":48,"line":1251},[46,153822,406],{"class":52},[46,153824,97255],{"class":180},[46,153826,760],{"class":56},[46,153828,153829,153832],{"class":48,"line":1256},[46,153830,153831],{"class":52},"        try",[46,153833,760],{"class":56},[46,153835,153836,153838,153840,153842,153844],{"class":48,"line":1261},[46,153837,17733],{"class":52},[46,153839,4411],{"class":180},[46,153841,1152],{"class":56},[46,153843,55786],{"class":180},[46,153845,153846],{"class":56},"(prompt))\n",[46,153848,153849,153852,153855],{"class":48,"line":1274},[46,153850,153851],{"class":52},"        except",[46,153853,153854],{"class":180}," ValueError",[46,153856,760],{"class":56},[46,153858,153859,153861,153863,153866],{"class":48,"line":10061},[46,153860,36622],{"class":180},[46,153862,1152],{"class":56},[46,153864,153865],{"class":173},"\"请输入整数\"",[46,153867,459],{"class":56},[46,153869,153870],{"class":48,"line":11720},[46,153871,616],{"emptyLinePlaceholder":615},[46,153873,153874],{"class":48,"line":11745},[46,153875,616],{"emptyLinePlaceholder":615},[46,153877,153878,153880,153883],{"class":48,"line":11768},[46,153879,748],{"class":52},[46,153881,153882],{"class":169}," input_float",[46,153884,153818],{"class":56},[46,153886,153887,153889,153891],{"class":48,"line":11792},[46,153888,406],{"class":52},[46,153890,97255],{"class":180},[46,153892,760],{"class":56},[46,153894,153895,153897],{"class":48,"line":11797},[46,153896,153831],{"class":52},[46,153898,760],{"class":56},[46,153900,153901,153903,153905,153907,153909],{"class":48,"line":11802},[46,153902,17733],{"class":52},[46,153904,111425],{"class":180},[46,153906,1152],{"class":56},[46,153908,55786],{"class":180},[46,153910,153846],{"class":56},[46,153912,153913,153915,153917],{"class":48,"line":11807},[46,153914,153851],{"class":52},[46,153916,153854],{"class":180},[46,153918,760],{"class":56},[46,153920,153921,153923,153925,153928],{"class":48,"line":11816},[46,153922,36622],{"class":180},[46,153924,1152],{"class":56},[46,153926,153927],{"class":173},"\"请输入数字\"",[46,153929,459],{"class":56},[46,153931,153932],{"class":48,"line":11821},[46,153933,616],{"emptyLinePlaceholder":615},[46,153935,153936],{"class":48,"line":11827},[46,153937,616],{"emptyLinePlaceholder":615},[46,153939,153940,153942,153945],{"class":48,"line":11848},[46,153941,748],{"class":52},[46,153943,153944],{"class":169}," add_student",[46,153946,153589],{"class":56},[46,153948,153949,153952,153954,153956,153958,153961],{"class":48,"line":11854},[46,153950,153951],{"class":56},"    student_id ",[46,153953,79],{"class":52},[46,153955,62570],{"class":180},[46,153957,1152],{"class":56},[46,153959,153960],{"class":173},"\"请输入学号:\"",[46,153962,459],{"class":56},[46,153964,153965],{"class":48,"line":11868},[46,153966,616],{"emptyLinePlaceholder":615},[46,153968,153969,153971],{"class":48,"line":11874},[46,153970,5121],{"class":52},[46,153972,153973],{"class":56}," find_student(students, student_id):\n",[46,153975,153976,153978,153980,153983],{"class":48,"line":11901},[46,153977,34425],{"class":180},[46,153979,1152],{"class":56},[46,153981,153982],{"class":173},"\"学号已存在\"",[46,153984,459],{"class":56},[46,153986,153987],{"class":48,"line":11910},[46,153988,153989],{"class":52},"        return\n",[46,153991,153992],{"class":48,"line":11916},[46,153993,616],{"emptyLinePlaceholder":615},[46,153995,153996,153999,154001,154003,154005,154008],{"class":48,"line":11924},[46,153997,153998],{"class":56},"    name ",[46,154000,79],{"class":52},[46,154002,62570],{"class":180},[46,154004,1152],{"class":56},[46,154006,154007],{"class":173},"\"请输入姓名:\"",[46,154009,459],{"class":56},[46,154011,154012,154015,154017,154020,154023],{"class":48,"line":11929},[46,154013,154014],{"class":56},"    age ",[46,154016,79],{"class":52},[46,154018,154019],{"class":56}," input_int(",[46,154021,154022],{"class":173},"\"请输入年龄:\"",[46,154024,459],{"class":56},[46,154026,154027,154030,154032,154035,154038],{"class":48,"line":18605},[46,154028,154029],{"class":56},"    score ",[46,154031,79],{"class":52},[46,154033,154034],{"class":56}," input_float(",[46,154036,154037],{"class":173},"\"请输入成绩:\"",[46,154039,459],{"class":56},[46,154041,154042],{"class":48,"line":18611},[46,154043,616],{"emptyLinePlaceholder":615},[46,154045,154046],{"class":48,"line":18634},[46,154047,154048],{"class":56},"    students.append({\n",[46,154050,154051,154054],{"class":48,"line":18640},[46,154052,154053],{"class":173},"        \"student_id\"",[46,154055,154056],{"class":56},": student_id,\n",[46,154058,154059,154062],{"class":48,"line":18663},[46,154060,154061],{"class":173},"        \"name\"",[46,154063,154064],{"class":56},": name,\n",[46,154066,154067,154070],{"class":48,"line":18677},[46,154068,154069],{"class":173},"        \"age\"",[46,154071,154072],{"class":56},": age,\n",[46,154074,154075,154078],{"class":48,"line":18697},[46,154076,154077],{"class":173},"        \"score\"",[46,154079,154080],{"class":56},": score,\n",[46,154082,154083],{"class":48,"line":18703},[46,154084,35434],{"class":56},[46,154086,154087],{"class":48,"line":18714},[46,154088,154089],{"class":56},"    save_students(students)\n",[46,154091,154092,154094,154096,154099],{"class":48,"line":18737},[46,154093,1227],{"class":180},[46,154095,1152],{"class":56},[46,154097,154098],{"class":173},"\"添加成功\"",[46,154100,459],{"class":56},[46,154102,154103],{"class":48,"line":18759},[46,154104,616],{"emptyLinePlaceholder":615},[46,154106,154107],{"class":48,"line":18764},[46,154108,616],{"emptyLinePlaceholder":615},[46,154110,154111,154113,154116],{"class":48,"line":18770},[46,154112,748],{"class":52},[46,154114,154115],{"class":169}," delete_student",[46,154117,153589],{"class":56},[46,154119,154120,154122,154124,154126,154128,154131],{"class":48,"line":18784},[46,154121,153951],{"class":56},[46,154123,79],{"class":52},[46,154125,62570],{"class":180},[46,154127,1152],{"class":56},[46,154129,154130],{"class":173},"\"请输入要删除的学号:\"",[46,154132,459],{"class":56},[46,154134,154135,154138,154140],{"class":48,"line":18797},[46,154136,154137],{"class":56},"    student ",[46,154139,79],{"class":52},[46,154141,154142],{"class":56}," find_student(students, student_id)\n",[46,154144,154145],{"class":48,"line":18802},[46,154146,616],{"emptyLinePlaceholder":615},[46,154148,154149,154151,154153,154155,154157],{"class":48,"line":18816},[46,154150,5121],{"class":52},[46,154152,153765],{"class":56},[46,154154,40899],{"class":52},[46,154156,40905],{"class":180},[46,154158,760],{"class":56},[46,154160,154161,154163,154165,154168],{"class":48,"line":18821},[46,154162,34425],{"class":180},[46,154164,1152],{"class":56},[46,154166,154167],{"class":173},"\"学生不存在\"",[46,154169,459],{"class":56},[46,154171,154172],{"class":48,"line":18827},[46,154173,153989],{"class":52},[46,154175,154176],{"class":48,"line":18832},[46,154177,616],{"emptyLinePlaceholder":615},[46,154179,154180],{"class":48,"line":18846},[46,154181,154182],{"class":56},"    students.remove(student)\n",[46,154184,154185],{"class":48,"line":18851},[46,154186,154089],{"class":56},[46,154188,154189,154191,154193,154196],{"class":48,"line":18856},[46,154190,1227],{"class":180},[46,154192,1152],{"class":56},[46,154194,154195],{"class":173},"\"删除成功\"",[46,154197,459],{"class":56},[46,154199,154200],{"class":48,"line":18870},[46,154201,616],{"emptyLinePlaceholder":615},[46,154203,154204],{"class":48,"line":18882},[46,154205,616],{"emptyLinePlaceholder":615},[46,154207,154208,154210,154213],{"class":48,"line":18887},[46,154209,748],{"class":52},[46,154211,154212],{"class":169}," update_student",[46,154214,153589],{"class":56},[46,154216,154217,154219,154221,154223,154225,154228],{"class":48,"line":18900},[46,154218,153951],{"class":56},[46,154220,79],{"class":52},[46,154222,62570],{"class":180},[46,154224,1152],{"class":56},[46,154226,154227],{"class":173},"\"请输入要修改的学号:\"",[46,154229,459],{"class":56},[46,154231,154232,154234,154236],{"class":48,"line":18905},[46,154233,154137],{"class":56},[46,154235,79],{"class":52},[46,154237,154142],{"class":56},[46,154239,154240],{"class":48,"line":18910},[46,154241,616],{"emptyLinePlaceholder":615},[46,154243,154244,154246,154248,154250,154252],{"class":48,"line":18915},[46,154245,5121],{"class":52},[46,154247,153765],{"class":56},[46,154249,40899],{"class":52},[46,154251,40905],{"class":180},[46,154253,760],{"class":56},[46,154255,154256,154258,154260,154262],{"class":48,"line":18928},[46,154257,34425],{"class":180},[46,154259,1152],{"class":56},[46,154261,154167],{"class":173},[46,154263,459],{"class":56},[46,154265,154266],{"class":48,"line":18933},[46,154267,153989],{"class":52},[46,154269,154270],{"class":48,"line":34607},[46,154271,616],{"emptyLinePlaceholder":615},[46,154273,154274,154276,154278,154280,154282,154285],{"class":48,"line":34613},[46,154275,153998],{"class":56},[46,154277,79],{"class":52},[46,154279,62570],{"class":180},[46,154281,1152],{"class":56},[46,154283,154284],{"class":173},"\"请输入新姓名:\"",[46,154286,459],{"class":56},[46,154288,154289,154291,154293,154295,154298],{"class":48,"line":34619},[46,154290,154014],{"class":56},[46,154292,79],{"class":52},[46,154294,154019],{"class":56},[46,154296,154297],{"class":173},"\"请输入新年龄:\"",[46,154299,459],{"class":56},[46,154301,154302,154304,154306,154308,154311],{"class":48,"line":34625},[46,154303,154029],{"class":56},[46,154305,79],{"class":52},[46,154307,154034],{"class":56},[46,154309,154310],{"class":173},"\"请输入新成绩:\"",[46,154312,459],{"class":56},[46,154314,154315],{"class":48,"line":34631},[46,154316,616],{"emptyLinePlaceholder":615},[46,154318,154319,154322,154324,154326,154328],{"class":48,"line":34642},[46,154320,154321],{"class":56},"    student[",[46,154323,64644],{"class":173},[46,154325,6460],{"class":56},[46,154327,79],{"class":52},[46,154329,151423],{"class":56},[46,154331,154332,154334,154336,154338,154340],{"class":48,"line":34648},[46,154333,154321],{"class":56},[46,154335,71089],{"class":173},[46,154337,6460],{"class":56},[46,154339,79],{"class":52},[46,154341,151435],{"class":56},[46,154343,154344,154346,154348,154350,154352],{"class":48,"line":34668},[46,154345,154321],{"class":56},[46,154347,153100],{"class":173},[46,154349,6460],{"class":56},[46,154351,79],{"class":52},[46,154353,3630],{"class":56},[46,154355,154356],{"class":48,"line":34674},[46,154357,616],{"emptyLinePlaceholder":615},[46,154359,154360],{"class":48,"line":34685},[46,154361,154089],{"class":56},[46,154363,154364,154366,154368,154371],{"class":48,"line":34691},[46,154365,1227],{"class":180},[46,154367,1152],{"class":56},[46,154369,154370],{"class":173},"\"修改成功\"",[46,154372,459],{"class":56},[46,154374,154375],{"class":48,"line":34697},[46,154376,616],{"emptyLinePlaceholder":615},[46,154378,154379],{"class":48,"line":34703},[46,154380,616],{"emptyLinePlaceholder":615},[46,154382,154383,154385,154388],{"class":48,"line":34709},[46,154384,748],{"class":52},[46,154386,154387],{"class":169}," query_student",[46,154389,153589],{"class":56},[46,154391,154392,154394,154396,154398,154400,154403],{"class":48,"line":34715},[46,154393,153951],{"class":56},[46,154395,79],{"class":52},[46,154397,62570],{"class":180},[46,154399,1152],{"class":56},[46,154401,154402],{"class":173},"\"请输入要查询的学号:\"",[46,154404,459],{"class":56},[46,154406,154407,154409,154411],{"class":48,"line":34721},[46,154408,154137],{"class":56},[46,154410,79],{"class":52},[46,154412,154142],{"class":56},[46,154414,154415],{"class":48,"line":34727},[46,154416,616],{"emptyLinePlaceholder":615},[46,154418,154419,154421,154423,154425,154427],{"class":48,"line":34747},[46,154420,5121],{"class":52},[46,154422,153765],{"class":56},[46,154424,40899],{"class":52},[46,154426,40905],{"class":180},[46,154428,760],{"class":56},[46,154430,154431,154433,154435,154437],{"class":48,"line":34753},[46,154432,34425],{"class":180},[46,154434,1152],{"class":56},[46,154436,154167],{"class":173},[46,154438,459],{"class":56},[46,154440,154441],{"class":48,"line":34769},[46,154442,153989],{"class":52},[46,154444,154445],{"class":48,"line":34775},[46,154446,616],{"emptyLinePlaceholder":615},[46,154448,154449],{"class":48,"line":34789},[46,154450,154451],{"class":56},"    print_student(student)\n",[46,154453,154454],{"class":48,"line":34795},[46,154455,616],{"emptyLinePlaceholder":615},[46,154457,154458],{"class":48,"line":34810},[46,154459,616],{"emptyLinePlaceholder":615},[46,154461,154462,154464,154467],{"class":48,"line":34816},[46,154463,748],{"class":52},[46,154465,154466],{"class":169}," print_student",[46,154468,154469],{"class":56},"(student):\n",[46,154471,154472,154474],{"class":48,"line":34825},[46,154473,1227],{"class":180},[46,154475,153067],{"class":56},[46,154477,154478,154481,154483,154485,154488,154491,154493,154496],{"class":48,"line":34831},[46,154479,154480],{"class":52},"        f",[46,154482,2439],{"class":173},[46,154484,3082],{"class":180},[46,154486,154487],{"class":56},"student[",[46,154489,154490],{"class":173},"'student_id'",[46,154492,3125],{"class":56},[46,154494,154495],{"class":180},"}\\t",[46,154497,27125],{"class":173},[46,154499,154500,154502,154504,154506,154508,154511,154513,154515],{"class":48,"line":34840},[46,154501,154480],{"class":52},[46,154503,2439],{"class":173},[46,154505,3082],{"class":180},[46,154507,154487],{"class":56},[46,154509,154510],{"class":173},"'name'",[46,154512,3125],{"class":56},[46,154514,154495],{"class":180},[46,154516,27125],{"class":173},[46,154518,154519,154521,154523,154525,154527,154530,154532,154534],{"class":48,"line":34846},[46,154520,154480],{"class":52},[46,154522,2439],{"class":173},[46,154524,3082],{"class":180},[46,154526,154487],{"class":56},[46,154528,154529],{"class":173},"'age'",[46,154531,3125],{"class":56},[46,154533,154495],{"class":180},[46,154535,27125],{"class":173},[46,154537,154538,154540,154542,154544,154546,154549,154551,154553],{"class":48,"line":34852},[46,154539,154480],{"class":52},[46,154541,2439],{"class":173},[46,154543,3082],{"class":180},[46,154545,154487],{"class":56},[46,154547,154548],{"class":173},"'score'",[46,154550,3125],{"class":56},[46,154552,3131],{"class":180},[46,154554,27125],{"class":173},[46,154556,154557],{"class":48,"line":34861},[46,154558,154559],{"class":56},"    )\n",[46,154561,154562],{"class":48,"line":34867},[46,154563,616],{"emptyLinePlaceholder":615},[46,154565,154566],{"class":48,"line":34878},[46,154567,616],{"emptyLinePlaceholder":615},[46,154569,154570,154572,154575],{"class":48,"line":34884},[46,154571,748],{"class":52},[46,154573,154574],{"class":169}," show_all_students",[46,154576,153589],{"class":56},[46,154578,154579,154581,154583],{"class":48,"line":34903},[46,154580,5121],{"class":52},[46,154582,40902],{"class":52},[46,154584,153770],{"class":56},[46,154586,154587,154589,154591,154594],{"class":48,"line":34909},[46,154588,34425],{"class":180},[46,154590,1152],{"class":56},[46,154592,154593],{"class":173},"\"暂无学生\"",[46,154595,459],{"class":56},[46,154597,154598],{"class":48,"line":34920},[46,154599,153989],{"class":52},[46,154601,154602],{"class":48,"line":34926},[46,154603,616],{"emptyLinePlaceholder":615},[46,154605,154606,154608,154610,154613,154615,154618,154620,154623,154625,154628],{"class":48,"line":34946},[46,154607,1227],{"class":180},[46,154609,1152],{"class":56},[46,154611,154612],{"class":173},"\"学号",[46,154614,3285],{"class":180},[46,154616,154617],{"class":173},"姓名",[46,154619,3285],{"class":180},[46,154621,154622],{"class":173},"年龄",[46,154624,3285],{"class":180},[46,154626,154627],{"class":173},"成绩\"",[46,154629,459],{"class":56},[46,154631,154632,154634,154636,154638],{"class":48,"line":34962},[46,154633,1140],{"class":52},[46,154635,153765],{"class":56},[46,154637,1146],{"class":52},[46,154639,153770],{"class":56},[46,154641,154642],{"class":48,"line":34968},[46,154643,154644],{"class":56},"        print_student(student)\n",[46,154646,154647],{"class":48,"line":34982},[46,154648,616],{"emptyLinePlaceholder":615},[46,154650,154651],{"class":48,"line":34988},[46,154652,616],{"emptyLinePlaceholder":615},[46,154654,154655,154657,154659],{"class":48,"line":34994},[46,154656,748],{"class":52},[46,154658,751],{"class":169},[46,154660,33928],{"class":56},[46,154662,154663,154666,154668],{"class":48,"line":35005},[46,154664,154665],{"class":56},"    students ",[46,154667,79],{"class":52},[46,154669,154670],{"class":56}," load_students()\n",[46,154672,154673],{"class":48,"line":35011},[46,154674,616],{"emptyLinePlaceholder":615},[46,154676,154677,154679,154681],{"class":48,"line":35017},[46,154678,406],{"class":52},[46,154680,97255],{"class":180},[46,154682,760],{"class":56},[46,154684,154685],{"class":48,"line":35027},[46,154686,154687],{"class":56},"        show_menu()\n",[46,154689,154690,154693,154695,154697,154699,154702],{"class":48,"line":35033},[46,154691,154692],{"class":56},"        choice ",[46,154694,79],{"class":52},[46,154696,62570],{"class":180},[46,154698,1152],{"class":56},[46,154700,154701],{"class":173},"\"请输入操作:\"",[46,154703,459],{"class":56},[46,154705,154706],{"class":48,"line":35044},[46,154707,616],{"emptyLinePlaceholder":615},[46,154709,154710,154712,154715,154717,154720],{"class":48,"line":35050},[46,154711,4525],{"class":52},[46,154713,154714],{"class":56}," choice ",[46,154716,4970],{"class":52},[46,154718,154719],{"class":173}," \"1\"",[46,154721,760],{"class":56},[46,154723,154724],{"class":48,"line":35060},[46,154725,154726],{"class":56},"            add_student(students)\n",[46,154728,154729,154732,154734,154736,154739],{"class":48,"line":35065},[46,154730,154731],{"class":52},"        elif",[46,154733,154714],{"class":56},[46,154735,4970],{"class":52},[46,154737,154738],{"class":173}," \"2\"",[46,154740,760],{"class":56},[46,154742,154743],{"class":48,"line":35071},[46,154744,154745],{"class":56},"            delete_student(students)\n",[46,154747,154748,154750,154752,154754,154757],{"class":48,"line":35120},[46,154749,154731],{"class":52},[46,154751,154714],{"class":56},[46,154753,4970],{"class":52},[46,154755,154756],{"class":173}," \"3\"",[46,154758,760],{"class":56},[46,154760,154761],{"class":48,"line":35167},[46,154762,154763],{"class":56},"            update_student(students)\n",[46,154765,154766,154768,154770,154772,154775],{"class":48,"line":35172},[46,154767,154731],{"class":52},[46,154769,154714],{"class":56},[46,154771,4970],{"class":52},[46,154773,154774],{"class":173}," \"4\"",[46,154776,760],{"class":56},[46,154778,154779],{"class":48,"line":35178},[46,154780,154781],{"class":56},"            query_student(students)\n",[46,154783,154784,154786,154788,154790,154793],{"class":48,"line":35197},[46,154785,154731],{"class":52},[46,154787,154714],{"class":56},[46,154789,4970],{"class":52},[46,154791,154792],{"class":173}," \"5\"",[46,154794,760],{"class":56},[46,154796,154797],{"class":48,"line":35203},[46,154798,154799],{"class":56},"            show_all_students(students)\n",[46,154801,154802,154804,154806,154808,154811],{"class":48,"line":35223},[46,154803,154731],{"class":52},[46,154805,154714],{"class":56},[46,154807,4970],{"class":52},[46,154809,154810],{"class":173}," \"0\"",[46,154812,760],{"class":56},[46,154814,154815,154817,154819,154822],{"class":48,"line":35229},[46,154816,36622],{"class":180},[46,154818,1152],{"class":56},[46,154820,154821],{"class":173},"\"退出系统\"",[46,154823,459],{"class":56},[46,154825,154826],{"class":48,"line":35235},[46,154827,116726],{"class":52},[46,154829,154830,154832],{"class":48,"line":35245},[46,154831,4562],{"class":52},[46,154833,760],{"class":56},[46,154835,154836,154838,154840,154843],{"class":48,"line":35250},[46,154837,36622],{"class":180},[46,154839,1152],{"class":56},[46,154841,154842],{"class":173},"\"输入错误\"",[46,154844,459],{"class":56},[46,154846,154847],{"class":48,"line":35256},[46,154848,616],{"emptyLinePlaceholder":615},[46,154850,154851],{"class":48,"line":35272},[46,154852,616],{"emptyLinePlaceholder":615},[46,154854,154855,154857,154859,154861,154863],{"class":48,"line":35317},[46,154856,911],{"class":52},[46,154858,914],{"class":180},[46,154860,917],{"class":52},[46,154862,920],{"class":173},[46,154864,760],{"class":56},[46,154866,154867],{"class":48,"line":35323},[46,154868,928],{"class":56},[19,154870,154871],{},"这个项目串联了：",[23,154873,154874,154877,154880,154883,154886,154888],{},[26,154875,154876],{},"菜单循环。",[26,154878,154879],{},"函数封装。",[26,154881,154882],{},"列表字典。",[26,154884,154885],{},"JSON 读写。",[26,154887,153355],{},[26,154889,154890,365],{},[43,154891,154892],{},"if __name__ == \"__main__\"",[14,154894,154896],{"id":154895},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[19,154898,154899],{},"可以进一步拆成两个类：",[23,154901,154902,154907],{},[26,154903,154904,154906],{},[43,154905,151196],{},"：表示单个学生。",[26,154908,154909,154911],{},[43,154910,153222],{},"：负责学生增删改查和文件保存。",[19,154913,154914],{},"示意代码：",[36,154916,154918],{"className":38,"code":154917,"language":40,"meta":41,"style":41},"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",[43,154919,154920,154930,154934,154938,154942,154950,154957,154963,154969,154975,154979,154987,154993,155003,155013,155023,155033,155037,155041,155047,155055,155063,155071,155079,155087,155095],{"__ignoreMap":41},[46,154921,154922,154924,154926,154928],{"class":48,"line":49},[46,154923,957],{"class":52},[46,154925,152780],{"class":56},[46,154927,53],{"class":52},[46,154929,152785],{"class":56},[46,154931,154932],{"class":48,"line":60},[46,154933,616],{"emptyLinePlaceholder":615},[46,154935,154936],{"class":48,"line":200},[46,154937,616],{"emptyLinePlaceholder":615},[46,154939,154940],{"class":48,"line":211},[46,154941,152798],{"class":169},[46,154943,154944,154946,154948],{"class":48,"line":222},[46,154945,16696],{"class":52},[46,154947,9911],{"class":169},[46,154949,760],{"class":56},[46,154951,154952,154955],{"class":48,"line":636},[46,154953,154954],{"class":56},"    student_id: ",[46,154956,152814],{"class":180},[46,154958,154959,154961],{"class":48,"line":641},[46,154960,152811],{"class":56},[46,154962,152814],{"class":180},[46,154964,154965,154967],{"class":48,"line":653},[46,154966,152819],{"class":56},[46,154968,152822],{"class":180},[46,154970,154971,154973],{"class":48,"line":659},[46,154972,152827],{"class":56},[46,154974,152830],{"class":180},[46,154976,154977],{"class":48,"line":665},[46,154978,616],{"emptyLinePlaceholder":615},[46,154980,154981,154983,154985],{"class":48,"line":670},[46,154982,32781],{"class":52},[46,154984,152978],{"class":169},[46,154986,32787],{"class":56},[46,154988,154989,154991],{"class":48,"line":676},[46,154990,16754],{"class":52},[46,154992,17573],{"class":56},[46,154994,154995,154997,154999,155001],{"class":48,"line":682},[46,154996,152991],{"class":173},[46,154998,53404],{"class":56},[46,155000,32803],{"class":180},[46,155002,152998],{"class":56},[46,155004,155005,155007,155009,155011],{"class":48,"line":688},[46,155006,153003],{"class":173},[46,155008,53404],{"class":56},[46,155010,32803],{"class":180},[46,155012,153010],{"class":56},[46,155014,155015,155017,155019,155021],{"class":48,"line":693},[46,155016,153015],{"class":173},[46,155018,53404],{"class":56},[46,155020,32803],{"class":180},[46,155022,153022],{"class":56},[46,155024,155025,155027,155029,155031],{"class":48,"line":699},[46,155026,153027],{"class":173},[46,155028,53404],{"class":56},[46,155030,32803],{"class":180},[46,155032,153034],{"class":56},[46,155034,155035],{"class":48,"line":705},[46,155036,4557],{"class":56},[46,155038,155039],{"class":48,"line":711},[46,155040,616],{"emptyLinePlaceholder":615},[46,155042,155043,155045],{"class":48,"line":717},[46,155044,152642],{"class":169},[46,155046,152645],{"class":180},[46,155048,155049,155051,155053],{"class":48,"line":723},[46,155050,32781],{"class":52},[46,155052,153055],{"class":169},[46,155054,153058],{"class":56},[46,155056,155057,155059,155061],{"class":48,"line":729},[46,155058,16754],{"class":52},[46,155060,152662],{"class":180},[46,155062,153067],{"class":56},[46,155064,155065,155067,155069],{"class":48,"line":735},[46,155066,153072],{"class":56},[46,155068,153075],{"class":173},[46,155070,89799],{"class":56},[46,155072,155073,155075,155077],{"class":48,"line":740},[46,155074,153072],{"class":56},[46,155076,64644],{"class":173},[46,155078,89799],{"class":56},[46,155080,155081,155083,155085],{"class":48,"line":745},[46,155082,153072],{"class":56},[46,155084,71089],{"class":173},[46,155086,89799],{"class":56},[46,155088,155089,155091,155093],{"class":48,"line":763},[46,155090,153072],{"class":56},[46,155092,153100],{"class":173},[46,155094,89799],{"class":56},[46,155096,155097],{"class":48,"line":778},[46,155098,40098],{"class":56},[19,155100,155101],{},"管理器示意：",[36,155103,155105],{"className":38,"code":155104,"language":40,"meta":41,"style":41},"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",[43,155106,155107,155116,155124,155135,155139,155149,155162,155173,155180,155186,155190,155199,155208,155214,155221],{"__ignoreMap":41},[46,155108,155109,155111,155114],{"class":48,"line":49},[46,155110,16696],{"class":52},[46,155112,155113],{"class":169}," StudentManager",[46,155115,760],{"class":56},[46,155117,155118,155120,155122],{"class":48,"line":60},[46,155119,32781],{"class":52},[46,155121,32784],{"class":180},[46,155123,32787],{"class":56},[46,155125,155126,155128,155131,155133],{"class":48,"line":200},[46,155127,32825],{"class":180},[46,155129,155130],{"class":56},".students ",[46,155132,79],{"class":52},[46,155134,53805],{"class":56},[46,155136,155137],{"class":48,"line":211},[46,155138,616],{"emptyLinePlaceholder":615},[46,155140,155141,155143,155146],{"class":48,"line":222},[46,155142,32781],{"class":52},[46,155144,155145],{"class":169}," find_by_id",[46,155147,155148],{"class":56},"(self, student_id):\n",[46,155150,155151,155153,155155,155157,155159],{"class":48,"line":636},[46,155152,5422],{"class":52},[46,155154,153765],{"class":56},[46,155156,1146],{"class":52},[46,155158,40845],{"class":180},[46,155160,155161],{"class":56},".students:\n",[46,155163,155164,155166,155169,155171],{"class":48,"line":641},[46,155165,878],{"class":52},[46,155167,155168],{"class":56}," student.student_id ",[46,155170,4970],{"class":52},[46,155172,153786],{"class":56},[46,155174,155175,155178],{"class":48,"line":653},[46,155176,155177],{"class":52},"                return",[46,155179,153793],{"class":56},[46,155181,155182,155184],{"class":48,"line":659},[46,155183,16754],{"class":52},[46,155185,153800],{"class":180},[46,155187,155188],{"class":48,"line":665},[46,155189,616],{"emptyLinePlaceholder":615},[46,155191,155192,155194,155196],{"class":48,"line":670},[46,155193,32781],{"class":52},[46,155195,7223],{"class":169},[46,155197,155198],{"class":56},"(self, student):\n",[46,155200,155201,155203,155205],{"class":48,"line":676},[46,155202,4525],{"class":52},[46,155204,40845],{"class":180},[46,155206,155207],{"class":56},".find_by_id(student.student_id):\n",[46,155209,155210,155212],{"class":48,"line":682},[46,155211,17733],{"class":52},[46,155213,127435],{"class":180},[46,155215,155216,155218],{"class":48,"line":688},[46,155217,32825],{"class":180},[46,155219,155220],{"class":56},".students.append(student)\n",[46,155222,155223,155225],{"class":48,"line":693},[46,155224,16754],{"class":52},[46,155226,155227],{"class":180}," True\n",[19,155229,155230],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,155232,155234],{"id":155233},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[479,155236,155238],{"id":155237},"_1251-数据结构","12.5.1 数据结构",[36,155240,155242],{"className":38,"code":155241,"language":40,"meta":41,"style":41},"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",[43,155243,155244,155252,155283,155313,155342,155371],{"__ignoreMap":41},[46,155245,155246,155248,155250],{"class":48,"line":49},[46,155247,150093],{"class":56},[46,155249,79],{"class":52},[46,155251,57412],{"class":56},[46,155253,155254,155256,155258,155260,155262,155264,155267,155269,155272,155274,155276,155278,155281],{"class":48,"line":60},[46,155255,150013],{"class":56},[46,155257,149625],{"class":173},[46,155259,53404],{"class":56},[46,155261,150236],{"class":173},[46,155263,448],{"class":56},[46,155265,155266],{"class":173},"\"category\"",[46,155268,53404],{"class":56},[46,155270,155271],{"class":173},"\"手机\"",[46,155273,448],{"class":56},[46,155275,86047],{"class":173},[46,155277,53404],{"class":56},[46,155279,155280],{"class":180},"12000",[46,155282,6946],{"class":56},[46,155284,155285,155287,155289,155291,155293,155295,155297,155299,155302,155304,155306,155308,155311],{"class":48,"line":200},[46,155286,150013],{"class":56},[46,155288,149625],{"class":173},[46,155290,53404],{"class":56},[46,155292,150236],{"class":173},[46,155294,448],{"class":56},[46,155296,155266],{"class":173},[46,155298,53404],{"class":56},[46,155300,155301],{"class":173},"\"电脑\"",[46,155303,448],{"class":56},[46,155305,86047],{"class":173},[46,155307,53404],{"class":56},[46,155309,155310],{"class":180},"18000",[46,155312,6946],{"class":56},[46,155314,155315,155317,155319,155321,155323,155325,155327,155329,155331,155333,155335,155337,155340],{"class":48,"line":211},[46,155316,150013],{"class":56},[46,155318,149625],{"class":173},[46,155320,53404],{"class":56},[46,155322,150257],{"class":173},[46,155324,448],{"class":56},[46,155326,155266],{"class":173},[46,155328,53404],{"class":56},[46,155330,155271],{"class":173},[46,155332,448],{"class":56},[46,155334,86047],{"class":173},[46,155336,53404],{"class":56},[46,155338,155339],{"class":180},"15000",[46,155341,6946],{"class":56},[46,155343,155344,155346,155348,155350,155352,155354,155356,155358,155360,155362,155364,155366,155369],{"class":48,"line":222},[46,155345,150013],{"class":56},[46,155347,149625],{"class":173},[46,155349,53404],{"class":56},[46,155351,150257],{"class":173},[46,155353,448],{"class":56},[46,155355,155266],{"class":173},[46,155357,53404],{"class":56},[46,155359,155301],{"class":173},[46,155361,448],{"class":56},[46,155363,86047],{"class":173},[46,155365,53404],{"class":56},[46,155367,155368],{"class":180},"16000",[46,155370,6946],{"class":56},[46,155372,155373],{"class":48,"line":636},[46,155374,35220],{"class":56},[479,155376,155378],{"id":155377},"_1252-按日期统计","12.5.2 按日期统计",[36,155380,155382],{"className":38,"code":155381,"language":40,"meta":41,"style":41},"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",[43,155383,155384,155393,155397,155408,155422,155435,155454,155458],{"__ignoreMap":41},[46,155385,155386,155389,155391],{"class":48,"line":49},[46,155387,155388],{"class":56},"daily_total ",[46,155390,79],{"class":52},[46,155392,89831],{"class":56},[46,155394,155395],{"class":48,"line":60},[46,155396,616],{"emptyLinePlaceholder":615},[46,155398,155399,155401,155403,155405],{"class":48,"line":200},[46,155400,1713],{"class":52},[46,155402,149837],{"class":56},[46,155404,1146],{"class":52},[46,155406,155407],{"class":56}," sales:\n",[46,155409,155410,155413,155415,155418,155420],{"class":48,"line":211},[46,155411,155412],{"class":56},"    date ",[46,155414,79],{"class":52},[46,155416,155417],{"class":56}," item[",[46,155419,149625],{"class":173},[46,155421,35220],{"class":56},[46,155423,155424,155427,155429,155431,155433],{"class":48,"line":222},[46,155425,155426],{"class":56},"    amount ",[46,155428,79],{"class":52},[46,155430,155417],{"class":56},[46,155432,86047],{"class":173},[46,155434,35220],{"class":56},[46,155436,155437,155440,155442,155445,155447,155449,155451],{"class":48,"line":636},[46,155438,155439],{"class":56},"    daily_total[date] ",[46,155441,79],{"class":52},[46,155443,155444],{"class":56}," daily_total.get(date, ",[46,155446,2379],{"class":180},[46,155448,15716],{"class":56},[46,155450,2668],{"class":52},[46,155452,155453],{"class":56}," amount\n",[46,155455,155456],{"class":48,"line":641},[46,155457,616],{"emptyLinePlaceholder":615},[46,155459,155460,155462],{"class":48,"line":653},[46,155461,32398],{"class":180},[46,155463,155464],{"class":56},"(daily_total)\n",[479,155466,155468],{"id":155467},"_1253-按类别统计","12.5.3 按类别统计",[36,155470,155472],{"className":38,"code":155471,"language":40,"meta":41,"style":41},"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",[43,155473,155474,155483,155487,155497,155510,155522,155540,155544],{"__ignoreMap":41},[46,155475,155476,155479,155481],{"class":48,"line":49},[46,155477,155478],{"class":56},"category_total ",[46,155480,79],{"class":52},[46,155482,89831],{"class":56},[46,155484,155485],{"class":48,"line":60},[46,155486,616],{"emptyLinePlaceholder":615},[46,155488,155489,155491,155493,155495],{"class":48,"line":200},[46,155490,1713],{"class":52},[46,155492,149837],{"class":56},[46,155494,1146],{"class":52},[46,155496,155407],{"class":56},[46,155498,155499,155502,155504,155506,155508],{"class":48,"line":211},[46,155500,155501],{"class":56},"    category ",[46,155503,79],{"class":52},[46,155505,155417],{"class":56},[46,155507,155266],{"class":173},[46,155509,35220],{"class":56},[46,155511,155512,155514,155516,155518,155520],{"class":48,"line":222},[46,155513,155426],{"class":56},[46,155515,79],{"class":52},[46,155517,155417],{"class":56},[46,155519,86047],{"class":173},[46,155521,35220],{"class":56},[46,155523,155524,155527,155529,155532,155534,155536,155538],{"class":48,"line":636},[46,155525,155526],{"class":56},"    category_total[category] ",[46,155528,79],{"class":52},[46,155530,155531],{"class":56}," category_total.get(category, ",[46,155533,2379],{"class":180},[46,155535,15716],{"class":56},[46,155537,2668],{"class":52},[46,155539,155453],{"class":56},[46,155541,155542],{"class":48,"line":641},[46,155543,616],{"emptyLinePlaceholder":615},[46,155545,155546,155548],{"class":48,"line":653},[46,155547,32398],{"class":180},[46,155549,155550],{"class":56},"(category_total)\n",[479,155552,155554],{"id":155553},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[36,155556,155558],{"className":38,"code":155557,"language":40,"meta":41,"style":41},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[43,155559,155560,155585],{"__ignoreMap":41},[46,155561,155562,155565,155567,155569,155572,155575,155578,155581,155583],{"class":48,"line":49},[46,155563,155564],{"class":56},"top_date, top_amount ",[46,155566,79],{"class":52},[46,155568,7964],{"class":180},[46,155570,155571],{"class":56},"(daily_total.items(), ",[46,155573,155574],{"class":439},"key",[46,155576,155577],{"class":52},"=lambda",[46,155579,155580],{"class":56}," item: item[",[46,155582,2405],{"class":180},[46,155584,6673],{"class":56},[46,155586,155587,155589],{"class":48,"line":60},[46,155588,32398],{"class":180},[46,155590,155591],{"class":56},"(top_date, top_amount)\n",[14,155593,155595],{"id":155594},"_126-绘制柱状图","12.6 绘制柱状图",[36,155597,155599],{"className":38,"code":155598,"language":40,"meta":41,"style":41},"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",[43,155600,155601,155615,155626,155630,155638,155650,155662,155673,155677,155681,155691,155702,155716,155721,155738,155755,155771,155775],{"__ignoreMap":41},[46,155602,155603,155605,155607,155609,155611,155613],{"class":48,"line":49},[46,155604,957],{"class":52},[46,155606,149007],{"class":56},[46,155608,53],{"class":52},[46,155610,149012],{"class":56},[46,155612,398],{"class":52},[46,155614,149017],{"class":56},[46,155616,155617,155619,155621,155623],{"class":48,"line":60},[46,155618,957],{"class":52},[46,155620,148866],{"class":56},[46,155622,53],{"class":52},[46,155624,155625],{"class":56}," Bar\n",[46,155627,155628],{"class":48,"line":200},[46,155629,616],{"emptyLinePlaceholder":615},[46,155631,155632,155634,155636],{"class":48,"line":211},[46,155633,155478],{"class":56},[46,155635,79],{"class":52},[46,155637,17573],{"class":56},[46,155639,155640,155643,155645,155648],{"class":48,"line":222},[46,155641,155642],{"class":173},"    \"手机\"",[46,155644,53404],{"class":56},[46,155646,155647],{"class":180},"27000",[46,155649,33443],{"class":56},[46,155651,155652,155655,155657,155660],{"class":48,"line":636},[46,155653,155654],{"class":173},"    \"电脑\"",[46,155656,53404],{"class":56},[46,155658,155659],{"class":180},"34000",[46,155661,33443],{"class":56},[46,155663,155664,155667,155669,155671],{"class":48,"line":641},[46,155665,155666],{"class":173},"    \"耳机\"",[46,155668,53404],{"class":56},[46,155670,126027],{"class":180},[46,155672,33443],{"class":56},[46,155674,155675],{"class":48,"line":653},[46,155676,3616],{"class":56},[46,155678,155679],{"class":48,"line":659},[46,155680,616],{"emptyLinePlaceholder":615},[46,155682,155683,155686,155688],{"class":48,"line":665},[46,155684,155685],{"class":56},"bar ",[46,155687,79],{"class":52},[46,155689,155690],{"class":56}," Bar()\n",[46,155692,155693,155696,155699],{"class":48,"line":670},[46,155694,155695],{"class":56},"bar.add_xaxis(",[46,155697,155698],{"class":180},"list",[46,155700,155701],{"class":56},"(category_total.keys()))\n",[46,155703,155704,155707,155709,155711,155713],{"class":48,"line":676},[46,155705,155706],{"class":56},"bar.add_yaxis(",[46,155708,148923],{"class":173},[46,155710,448],{"class":56},[46,155712,155698],{"class":180},[46,155714,155715],{"class":56},"(category_total.values()))\n",[46,155717,155718],{"class":48,"line":682},[46,155719,155720],{"class":56},"bar.set_global_opts(\n",[46,155722,155723,155725,155727,155729,155731,155733,155736],{"class":48,"line":688},[46,155724,149101],{"class":439},[46,155726,79],{"class":52},[46,155728,149106],{"class":56},[46,155730,53374],{"class":439},[46,155732,79],{"class":52},[46,155734,155735],{"class":173},"\"品类销售额\"",[46,155737,40019],{"class":56},[46,155739,155740,155742,155744,155746,155748,155750,155753],{"class":48,"line":693},[46,155741,149120],{"class":439},[46,155743,79],{"class":52},[46,155745,149125],{"class":56},[46,155747,1653],{"class":439},[46,155749,79],{"class":52},[46,155751,155752],{"class":173},"\"品类\"",[46,155754,40019],{"class":56},[46,155756,155757,155759,155761,155763,155765,155767,155769],{"class":48,"line":699},[46,155758,149139],{"class":439},[46,155760,79],{"class":52},[46,155762,149125],{"class":56},[46,155764,1653],{"class":439},[46,155766,79],{"class":52},[46,155768,148923],{"class":173},[46,155770,40019],{"class":56},[46,155772,155773],{"class":48,"line":705},[46,155774,459],{"class":56},[46,155776,155777,155780,155783],{"class":48,"line":711},[46,155778,155779],{"class":56},"bar.render(",[46,155781,155782],{"class":173},"\"category_sales.html\"",[46,155784,459],{"class":56},[14,155786,155788],{"id":155787},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[19,155790,155791],{},"时间线适合展示不同日期、月份、年份的数据变化。",[36,155793,155795],{"className":38,"code":155794,"language":40,"meta":41,"style":41},"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",[43,155796,155797,155811,155822,155826,155834,155858,155881,155906,155910,155914,155924,155928,155939,155948,155958,155972,156003,156008,156012],{"__ignoreMap":41},[46,155798,155799,155801,155803,155805,155807,155809],{"class":48,"line":49},[46,155800,957],{"class":52},[46,155802,149007],{"class":56},[46,155804,53],{"class":52},[46,155806,149012],{"class":56},[46,155808,398],{"class":52},[46,155810,149017],{"class":56},[46,155812,155813,155815,155817,155819],{"class":48,"line":60},[46,155814,957],{"class":52},[46,155816,148866],{"class":56},[46,155818,53],{"class":52},[46,155820,155821],{"class":56}," Bar, Timeline\n",[46,155823,155824],{"class":48,"line":200},[46,155825,616],{"emptyLinePlaceholder":615},[46,155827,155828,155830,155832],{"class":48,"line":211},[46,155829,103565],{"class":56},[46,155831,79],{"class":52},[46,155833,17573],{"class":56},[46,155835,155836,155839,155842,155844,155846,155848,155850,155852,155854,155856],{"class":48,"line":222},[46,155837,155838],{"class":173},"    \"2024-10-01\"",[46,155840,155841],{"class":56},": {",[46,155843,155271],{"class":173},[46,155845,53404],{"class":56},[46,155847,155280],{"class":180},[46,155849,448],{"class":56},[46,155851,155301],{"class":173},[46,155853,53404],{"class":56},[46,155855,155310],{"class":180},[46,155857,6946],{"class":56},[46,155859,155860,155863,155865,155867,155869,155871,155873,155875,155877,155879],{"class":48,"line":636},[46,155861,155862],{"class":173},"    \"2024-10-02\"",[46,155864,155841],{"class":56},[46,155866,155271],{"class":173},[46,155868,53404],{"class":56},[46,155870,155339],{"class":180},[46,155872,448],{"class":56},[46,155874,155301],{"class":173},[46,155876,53404],{"class":56},[46,155878,155368],{"class":180},[46,155880,6946],{"class":56},[46,155882,155883,155886,155888,155890,155892,155895,155897,155899,155901,155904],{"class":48,"line":641},[46,155884,155885],{"class":173},"    \"2024-10-03\"",[46,155887,155841],{"class":56},[46,155889,155271],{"class":173},[46,155891,53404],{"class":56},[46,155893,155894],{"class":180},"17000",[46,155896,448],{"class":56},[46,155898,155301],{"class":173},[46,155900,53404],{"class":56},[46,155902,155903],{"class":180},"19000",[46,155905,6946],{"class":56},[46,155907,155908],{"class":48,"line":653},[46,155909,3616],{"class":56},[46,155911,155912],{"class":48,"line":659},[46,155913,616],{"emptyLinePlaceholder":615},[46,155915,155916,155919,155921],{"class":48,"line":665},[46,155917,155918],{"class":56},"timeline ",[46,155920,79],{"class":52},[46,155922,155923],{"class":56}," Timeline()\n",[46,155925,155926],{"class":48,"line":670},[46,155927,616],{"emptyLinePlaceholder":615},[46,155929,155930,155932,155935,155937],{"class":48,"line":676},[46,155931,1713],{"class":52},[46,155933,155934],{"class":56}," date, category_data ",[46,155936,1146],{"class":52},[46,155938,150776],{"class":56},[46,155940,155941,155944,155946],{"class":48,"line":682},[46,155942,155943],{"class":56},"    bar ",[46,155945,79],{"class":52},[46,155947,155690],{"class":56},[46,155949,155950,155953,155955],{"class":48,"line":688},[46,155951,155952],{"class":56},"    bar.add_xaxis(",[46,155954,155698],{"class":180},[46,155956,155957],{"class":56},"(category_data.keys()))\n",[46,155959,155960,155963,155965,155967,155969],{"class":48,"line":693},[46,155961,155962],{"class":56},"    bar.add_yaxis(",[46,155964,148923],{"class":173},[46,155966,448],{"class":56},[46,155968,155698],{"class":180},[46,155970,155971],{"class":56},"(category_data.values()))\n",[46,155973,155974,155977,155980,155982,155984,155986,155988,155990,155992,155994,155996,155998,156001],{"class":48,"line":699},[46,155975,155976],{"class":56},"    bar.set_global_opts(",[46,155978,155979],{"class":439},"title_opts",[46,155981,79],{"class":52},[46,155983,149106],{"class":56},[46,155985,53374],{"class":439},[46,155987,79],{"class":52},[46,155989,2247],{"class":52},[46,155991,2439],{"class":173},[46,155993,3082],{"class":180},[46,155995,75891],{"class":56},[46,155997,3131],{"class":180},[46,155999,156000],{"class":173},"销售额\"",[46,156002,32479],{"class":56},[46,156004,156005],{"class":48,"line":705},[46,156006,156007],{"class":56},"    timeline.add(bar, date)\n",[46,156009,156010],{"class":48,"line":711},[46,156011,616],{"emptyLinePlaceholder":615},[46,156013,156014,156017,156020],{"class":48,"line":717},[46,156015,156016],{"class":56},"timeline.render(",[46,156018,156019],{"class":173},"\"timeline_sales.html\"",[46,156021,459],{"class":56},[14,156023,156025],{"id":156024},"_128-绘制地图","12.8 绘制地图",[19,156027,156028],{},"地图适合展示地区数据。",[36,156030,156032],{"className":38,"code":156031,"language":40,"meta":41,"style":41},"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",[43,156033,156034,156048,156059,156063,156071,156084,156096,156109,156122,156126,156130,156140,156155,156160,156177,156196,156200],{"__ignoreMap":41},[46,156035,156036,156038,156040,156042,156044,156046],{"class":48,"line":49},[46,156037,957],{"class":52},[46,156039,149007],{"class":56},[46,156041,53],{"class":52},[46,156043,149012],{"class":56},[46,156045,398],{"class":52},[46,156047,149017],{"class":56},[46,156049,156050,156052,156054,156056],{"class":48,"line":60},[46,156051,957],{"class":52},[46,156053,148866],{"class":56},[46,156055,53],{"class":52},[46,156057,156058],{"class":56}," Map\n",[46,156060,156061],{"class":48,"line":200},[46,156062,616],{"emptyLinePlaceholder":615},[46,156064,156065,156067,156069],{"class":48,"line":211},[46,156066,103565],{"class":56},[46,156068,79],{"class":52},[46,156070,57412],{"class":56},[46,156072,156073,156076,156078,156080,156082],{"class":48,"line":222},[46,156074,156075],{"class":56},"    (",[46,156077,71234],{"class":173},[46,156079,448],{"class":56},[46,156081,3003],{"class":180},[46,156083,40019],{"class":56},[46,156085,156086,156088,156090,156092,156094],{"class":48,"line":636},[46,156087,156075],{"class":56},[46,156089,71254],{"class":173},[46,156091,448],{"class":56},[46,156093,148940],{"class":180},[46,156095,40019],{"class":56},[46,156097,156098,156100,156103,156105,156107],{"class":48,"line":641},[46,156099,156075],{"class":56},[46,156101,156102],{"class":173},"\"广东\"",[46,156104,448],{"class":56},[46,156106,3762],{"class":180},[46,156108,40019],{"class":56},[46,156110,156111,156113,156116,156118,156120],{"class":48,"line":653},[46,156112,156075],{"class":56},[46,156114,156115],{"class":173},"\"浙江\"",[46,156117,448],{"class":56},[46,156119,148945],{"class":180},[46,156121,40019],{"class":56},[46,156123,156124],{"class":48,"line":659},[46,156125,35220],{"class":56},[46,156127,156128],{"class":48,"line":665},[46,156129,616],{"emptyLinePlaceholder":615},[46,156131,156132,156135,156137],{"class":48,"line":670},[46,156133,156134],{"class":56},"map_chart ",[46,156136,79],{"class":52},[46,156138,156139],{"class":56}," Map()\n",[46,156141,156142,156145,156147,156150,156153],{"class":48,"line":676},[46,156143,156144],{"class":56},"map_chart.add(",[46,156146,148923],{"class":173},[46,156148,156149],{"class":56},", data, ",[46,156151,156152],{"class":173},"\"china\"",[46,156154,459],{"class":56},[46,156156,156157],{"class":48,"line":682},[46,156158,156159],{"class":56},"map_chart.set_global_opts(\n",[46,156161,156162,156164,156166,156168,156170,156172,156175],{"class":48,"line":688},[46,156163,149101],{"class":439},[46,156165,79],{"class":52},[46,156167,149106],{"class":56},[46,156169,53374],{"class":439},[46,156171,79],{"class":52},[46,156173,156174],{"class":173},"\"地区销售额\"",[46,156176,40019],{"class":56},[46,156178,156179,156182,156184,156187,156190,156192,156194],{"class":48,"line":693},[46,156180,156181],{"class":439},"    visualmap_opts",[46,156183,79],{"class":52},[46,156185,156186],{"class":56},"opts.VisualMapOpts(",[46,156188,156189],{"class":439},"max_",[46,156191,79],{"class":52},[46,156193,3762],{"class":180},[46,156195,40019],{"class":56},[46,156197,156198],{"class":48,"line":699},[46,156199,459],{"class":56},[46,156201,156202,156205,156208],{"class":48,"line":705},[46,156203,156204],{"class":56},"map_chart.render(",[46,156206,156207],{"class":173},"\"map_sales.html\"",[46,156209,459],{"class":56},[19,156211,156212],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,156214,156216],{"id":156215},"_129-项目拆分建议","12.9 项目拆分建议",[19,156218,156219],{},"当代码超过一个文件时，可以这样组织：",[36,156221,156224],{"className":156222,"code":156223,"language":571,"meta":41},[569],"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",[43,156225,156223],{"__ignoreMap":41},[19,156227,156228],{},"职责：",[23,156230,156231,156237,156243,156249],{},[26,156232,156233,156236],{},[43,156234,156235],{},"main.py","：程序入口。",[26,156238,156239,156242],{},[43,156240,156241],{},"file_utils.py","：读写 JSON。",[26,156244,156245,156248],{},[43,156246,156247],{},"sales_service.py","：统计销售数据。",[26,156250,156251,156254],{},[43,156252,156253],{},"chart_builder.py","：生成图表。",[14,156256,156258],{"id":156257},"_1210-python基础复习清单","12.10 Python基础复习清单",[19,156260,156261],{},"语法基础：",[23,156263,156264,156267,156270,156273],{},[26,156265,156266],{},"会写变量、注释、输入输出。",[26,156268,156269],{},"会使用 int、float、str、bool。",[26,156271,156272],{},"会做类型转换。",[26,156274,156275],{},"会使用 f-string 格式化输出。",[19,156277,156278],{},"流程控制：",[23,156280,156281,156287,156293,156301],{},[26,156282,156283,156284,365],{},"会写 ",[43,156285,156286],{},"if elif else",[26,156288,156283,156289,1700,156291,365],{},[43,156290,1329],{},[43,156292,1713],{},[26,156294,156295,156296,1700,156298,365],{},"理解 ",[43,156297,4083],{},[43,156299,156300],{},"continue",[26,156302,156303],{},"能写嵌套循环。",[19,156305,156306],{},"函数：",[23,156308,156309,156312,156315,156318],{},[26,156310,156311],{},"会定义和调用函数。",[26,156313,156314],{},"理解参数和返回值。",[26,156316,156317],{},"知道局部变量和全局变量。",[26,156319,156320],{},"会使用默认参数、关键字参数、不定长参数。",[19,156322,156323],{},"容器：",[23,156325,156326,156329,156332,156335,156338],{},[26,156327,156328],{},"会使用列表增删改查。",[26,156330,156331],{},"会遍历列表、字典。",[26,156333,156334],{},"会使用切片。",[26,156336,156337],{},"会用集合去重。",[26,156339,156340],{},"会处理列表嵌套字典。",[19,156342,156343],{},"文件和模块：",[23,156345,156346,156349,156352,156355,156358],{},[26,156347,156348],{},"会读写文本文件。",[26,156350,156351],{},"会读写 JSON。",[26,156353,156354],{},"会捕获常见异常。",[26,156356,156357],{},"会导入模块和第三方包。",[26,156359,156360],{},"会创建简单包结构。",[19,156362,156363],{},"项目能力：",[23,156365,156366,156369,156372,156375,156378],{},[26,156367,156368],{},"能把代码拆成函数。",[26,156370,156371],{},"能把数据保存到文件。",[26,156373,156374],{},"能处理用户输入错误。",[26,156376,156377],{},"能写一个完整菜单程序。",[26,156379,156380],{},"能用 pyecharts 生成图表。",[14,156382,156384],{"id":156383},"_1211-推荐练习顺序","12.11 推荐练习顺序",[23,156386,156387,156390,156393,156396,156399,156402,156405,156408],{},[26,156388,156389],{},"猜数字游戏。",[26,156391,156392],{},"ATM 菜单程序。",[26,156394,156395],{},"学生成绩统计。",[26,156397,156398],{},"学生管理系统函数版。",[26,156400,156401],{},"学生管理系统文件持久化版。",[26,156403,156404],{},"学生管理系统面向对象版。",[26,156406,156407],{},"销售数据统计。",[26,156409,156410],{},"销售数据可视化。",[14,156412,156414],{"id":156413},"_1212-常见学习误区","12.12 常见学习误区",[23,156416,156417,156420,156423,156426,156429,156432,156435],{},[26,156418,156419],{},"只看视频不敲代码。",[26,156421,156422],{},"一报错就复制错误去搜，不先读报错位置。",[26,156424,156425],{},"变量名随便写，后续自己看不懂。",[26,156427,156428],{},"所有代码都写在一个文件一个函数里。",[26,156430,156431],{},"不保存练习代码，复习时没有材料。",[26,156433,156434],{},"还没掌握列表字典就急着学框架。",[26,156436,156437],{},"不会读官方文档，只依赖教程。",[14,156439,156441],{"id":156440},"_1213-如何读报错","12.13 如何读报错",[19,156443,156444],{},"报错通常从下往上看最后几行。",[19,156446,17136],{},[36,156448,156451],{"className":156449,"code":156450,"language":571,"meta":41},[569],"ValueError: invalid literal for int() with base 10: 'abc'\n",[43,156452,156450],{"__ignoreMap":41},[19,156454,26596],{},[23,156456,156457,156463,156473],{},[26,156458,156459,156460,365],{},"异常类型是 ",[43,156461,156462],{},"ValueError",[26,156464,109230,156465,156468,156469,156472],{},[43,156466,156467],{},"int()"," 无法把 ",[43,156470,156471],{},"'abc'"," 转成整数。",[26,156474,156475],{},"应该检查输入内容或增加异常处理。",[19,156477,156478],{},"再看文件名和行号：",[36,156480,156483],{"className":156481,"code":156482,"language":571,"meta":41},[569],"File \"main.py\", line 10, in \u003Cmodule>\n",[43,156484,156482],{"__ignoreMap":41},[19,156486,156487,156488,156490],{},"表示错误发生在 ",[43,156489,156235],{}," 第 10 行。",[14,156492,156494],{"id":156493},"_1214-后续学习方向","12.14 后续学习方向",[19,156496,156497],{},"Python 基础完成后，可以按兴趣选择方向：",[23,156499,156500,156512,156521,156533,156544,156553,156563],{},[26,156501,156502,156503,2400,156506,2400,156509,365],{},"自动化办公：",[43,156504,156505],{},"openpyxl",[43,156507,156508],{},"python-docx",[43,156510,156511],{},"pdfplumber",[26,156513,156514,156515,2400,156517,2400,156519,365],{},"数据分析：",[43,156516,102587],{},[43,156518,147813],{},[43,156520,147821],{},[26,156522,156523,156524,2400,156527,2400,156530,365],{},"Web 后端：",[43,156525,156526],{},"Flask",[43,156528,156529],{},"FastAPI",[43,156531,156532],{},"Django",[26,156534,156535,156536,2400,156538,2400,156541,365],{},"爬虫：",[43,156537,147798],{},[43,156539,156540],{},"BeautifulSoup",[43,156542,156543],{},"Scrapy",[26,156545,156546,156547,2400,156549,156552],{},"测试开发：",[43,156548,147845],{},[43,156550,156551],{},"selenium","、接口测试。",[26,156554,156555,156556,2400,156558,2400,156560,365],{},"人工智能：",[43,156557,102587],{},[43,156559,147813],{},[43,156561,156562],{},"pytorch",[26,156564,156565,156566,2400,156568,2400,156571,365],{},"运维脚本：",[43,156567,147414],{},[43,156569,156570],{},"subprocess",[43,156572,156573],{},"paramiko",[19,156575,156576],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,156578,156580],{"id":156579},"_1215-结课练习","12.15 结课练习",[23,156582,156583,156586,156589,156592,156595,156598,156601,156604],{},[26,156584,156585],{},"完成函数版学生管理系统。",[26,156587,156588],{},"给学生管理系统增加 JSON 持久化。",[26,156590,156591],{},"给学生管理系统增加异常处理。",[26,156593,156594],{},"把学生管理系统改成面向对象版。",[26,156596,156597],{},"使用 pyecharts 绘制学生成绩柱状图。",[26,156599,156600],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[26,156602,156603],{},"按品类统计销售额并绘制柱状图。",[26,156605,156606],{},"写一份自己的 Python 学习路线图。",[2098,156608,156609],{},"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":41,"searchDepth":60,"depth":60,"links":156611},[156612,156613,156616,156617,156618,156624,156625,156626,156627,156628,156629,156630,156631,156632,156633],{"id":153328,"depth":60,"text":153329},{"id":153378,"depth":60,"text":153379,"children":156614},[156615],{"id":153382,"depth":200,"text":153383},{"id":153421,"depth":60,"text":153422},{"id":154895,"depth":60,"text":154896},{"id":155233,"depth":60,"text":155234,"children":156619},[156620,156621,156622,156623],{"id":155237,"depth":200,"text":155238},{"id":155377,"depth":200,"text":155378},{"id":155467,"depth":200,"text":155468},{"id":155553,"depth":200,"text":155554},{"id":155594,"depth":60,"text":155595},{"id":155787,"depth":60,"text":155788},{"id":156024,"depth":60,"text":156025},{"id":156215,"depth":60,"text":156216},{"id":156257,"depth":60,"text":156258},{"id":156383,"depth":60,"text":156384},{"id":156413,"depth":60,"text":156414},{"id":156440,"depth":60,"text":156441},{"id":156493,"depth":60,"text":156494},{"id":156579,"depth":60,"text":156580},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":153320,"description":25378},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":156640,"title":156641,"body":156642,"description":25378,"extension":2125,"meta":159111,"navigation":615,"path":159112,"seo":159113,"stem":159114,"__hash__":159115},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":156643,"toc":159086},[156644,156647,156651,156654,156657,156677,156680,156703,156706,156709,156731,156734,156756,156760,156763,156803,156806,156927,156931,156934,156974,156977,157001,157004,157008,157011,157025,157058,157061,157096,157099,157122,157125,157158,157161,157163,157169,157244,157247,157253,157270,157310,157314,157317,157363,157365,157403,157406,157441,157444,157479,157482,157514,157517,157536,157540,157544,157657,157659,157734,157738,157784,157787,157813,157822,157826,157829,157892,157900,157928,157932,157972,158037,158041,158044,158083,158086,158131,158134,158195,158199,158226,158229,158257,158260,158264,158268,158333,158336,158374,158377,158409,158413,158512,158516,158519,158592,158595,158643,158647,158653,158693,158696,158743,158746,158795,158799,158801,158815,158817,158998,159002,159029,159049,159056,159060,159077,159083],[10,156645,156641],{"id":156646},"_2-基础语法变量与字符串",[14,156648,156650],{"id":156649},"_21-注释","2.1 注释",[19,156652,156653],{},"注释是给人看的说明文字，不会被 Python 执行。",[19,156655,156656],{},"单行注释：",[36,156658,156660],{"className":38,"code":156659,"language":40,"meta":41,"style":41},"# 这是单行注释\nprint(\"hello\")\n",[43,156661,156662,156667],{"__ignoreMap":41},[46,156663,156664],{"class":48,"line":49},[46,156665,156666],{"class":2253},"# 这是单行注释\n",[46,156668,156669,156671,156673,156675],{"class":48,"line":60},[46,156670,32398],{"class":180},[46,156672,1152],{"class":56},[46,156674,7857],{"class":173},[46,156676,459],{"class":56},[19,156678,156679],{},"多行说明常用三引号：",[36,156681,156683],{"className":38,"code":156682,"language":40,"meta":41,"style":41},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[43,156684,156685,156689,156694,156699],{"__ignoreMap":41},[46,156686,156687],{"class":48,"line":49},[46,156688,732],{"class":173},[46,156690,156691],{"class":48,"line":60},[46,156692,156693],{"class":173},"这是多行说明。\n",[46,156695,156696],{"class":48,"line":200},[46,156697,156698],{"class":173},"常用于文件顶部说明、函数说明等。\n",[46,156700,156701],{"class":48,"line":211},[46,156702,732],{"class":173},[19,156704,156705],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[19,156707,156708],{},"不好：",[36,156710,156712],{"className":38,"code":156711,"language":40,"meta":41,"style":41},"# age 加 1\nage = age + 1\n",[43,156713,156714,156719],{"__ignoreMap":41},[46,156715,156716],{"class":48,"line":49},[46,156717,156718],{"class":2253},"# age 加 1\n",[46,156720,156721,156723,156725,156727,156729],{"class":48,"line":60},[46,156722,148174],{"class":56},[46,156724,79],{"class":52},[46,156726,17708],{"class":56},[46,156728,2668],{"class":52},[46,156730,57664],{"class":180},[19,156732,156733],{},"较好：",[36,156735,156737],{"className":38,"code":156736,"language":40,"meta":41,"style":41},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[43,156738,156739,156744],{"__ignoreMap":41},[46,156740,156741],{"class":48,"line":49},[46,156742,156743],{"class":2253},"# 用户过完生日后，年龄增加一岁\n",[46,156745,156746,156748,156750,156752,156754],{"class":48,"line":60},[46,156747,148174],{"class":56},[46,156749,79],{"class":52},[46,156751,17708],{"class":56},[46,156753,2668],{"class":52},[46,156755,57664],{"class":180},[14,156757,156759],{"id":156758},"_22-字面量","2.2 字面量",[19,156761,156762],{},"字面量就是代码中直接写出来的数据。",[36,156764,156766],{"className":38,"code":156765,"language":40,"meta":41,"style":41},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[43,156767,156768,156775,156782,156789,156796],{"__ignoreMap":41},[46,156769,156770,156772],{"class":48,"line":49},[46,156771,1155],{"class":180},[46,156773,156774],{"class":2253},"          # 整数\n",[46,156776,156777,156779],{"class":48,"line":60},[46,156778,2244],{"class":180},[46,156780,156781],{"class":2253},"         # 小数\n",[46,156783,156784,156786],{"class":48,"line":200},[46,156785,7857],{"class":173},[46,156787,156788],{"class":2253},"      # 字符串\n",[46,156790,156791,156793],{"class":48,"line":211},[46,156792,33453],{"class":180},[46,156794,156795],{"class":2253},"         # 布尔值\n",[46,156797,156798,156800],{"class":48,"line":222},[46,156799,757],{"class":180},[46,156801,156802],{"class":2253},"         # 空值\n",[19,156804,156805],{},"常见字面量类型：",[97,156807,156808,156818],{},[100,156809,156810],{},[103,156811,156812,156814,156816],{},[106,156813,25738],{},[106,156815,29481],{},[106,156817,27861],{},[120,156819,156820,156831,156842,156853,156865,156877,156889,156902,156914],{},[103,156821,156822,156824,156828],{},[125,156823,2201],{},[125,156825,156826],{},[43,156827,1155],{},[125,156829,156830],{},"整数",[103,156832,156833,156835,156839],{},[125,156834,2236],{},[125,156836,156837],{},[43,156838,2244],{},[125,156840,156841],{},"浮点数",[103,156843,156844,156846,156850],{},[125,156845,3354],{},[125,156847,156848],{},[43,156849,7857],{},[125,156851,156852],{},"字符串",[103,156854,156855,156857,156863],{},[125,156856,3406],{},[125,156858,156859,2400,156861],{},[43,156860,33453],{},[43,156862,35960],{},[125,156864,67980],{},[103,156866,156867,156870,156874],{},[125,156868,156869],{},"NoneType",[125,156871,156872],{},[43,156873,757],{},[125,156875,156876],{},"空值",[103,156878,156879,156881,156886],{},[125,156880,155698],{},[125,156882,156883],{},[43,156884,156885],{},"[1, 2, 3]",[125,156887,156888],{},"列表",[103,156890,156891,156894,156899],{},[125,156892,156893],{},"tuple",[125,156895,156896],{},[43,156897,156898],{},"(1, 2, 3)",[125,156900,156901],{},"元组",[103,156903,156904,156906,156911],{},[125,156905,116174],{},[125,156907,156908],{},[43,156909,156910],{},"{\"name\": \"张三\"}",[125,156912,156913],{},"字典",[103,156915,156916,156919,156924],{},[125,156917,156918],{},"set",[125,156920,156921],{},[43,156922,156923],{},"{1, 2, 3}",[125,156925,156926],{},"集合",[14,156928,156930],{"id":156929},"_23-变量","2.3 变量",[19,156932,156933],{},"变量是保存数据的名字。",[36,156935,156937],{"className":38,"code":156936,"language":40,"meta":41,"style":41},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[43,156938,156939,156947,156955,156965],{"__ignoreMap":41},[46,156940,156941,156943,156945],{"class":48,"line":49},[46,156942,148164],{"class":56},[46,156944,79],{"class":52},[46,156946,150981],{"class":173},[46,156948,156949,156951,156953],{"class":48,"line":60},[46,156950,148174],{"class":56},[46,156952,79],{"class":52},[46,156954,148179],{"class":180},[46,156956,156957,156960,156962],{"class":48,"line":200},[46,156958,156959],{"class":56},"height ",[46,156961,79],{"class":52},[46,156963,156964],{"class":180}," 1.75\n",[46,156966,156967,156970,156972],{"class":48,"line":211},[46,156968,156969],{"class":56},"is_student ",[46,156971,79],{"class":52},[46,156973,155227],{"class":180},[19,156975,156976],{},"Python 的变量不需要提前声明类型：",[36,156978,156980],{"className":38,"code":156979,"language":40,"meta":41,"style":41},"score = 100\nscore = \"满分\"\n",[43,156981,156982,156992],{"__ignoreMap":41},[46,156983,156984,156987,156989],{"class":48,"line":49},[46,156985,156986],{"class":56},"score ",[46,156988,79],{"class":52},[46,156990,156991],{"class":180}," 100\n",[46,156993,156994,156996,156998],{"class":48,"line":60},[46,156995,156986],{"class":56},[46,156997,79],{"class":52},[46,156999,157000],{"class":173}," \"满分\"\n",[19,157002,157003],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,157005,157007],{"id":157006},"_24-变量命名规则","2.4 变量命名规则",[19,157009,157010],{},"硬性规则：",[23,157012,157013,157016,157019,157022],{},[26,157014,157015],{},"只能由字母、数字、下划线组成。",[26,157017,157018],{},"不能以数字开头。",[26,157020,157021],{},"不能使用 Python 关键字。",[26,157023,157024],{},"区分大小写。",[36,157026,157028],{"className":38,"code":157027,"language":40,"meta":41,"style":41},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[43,157029,157030,157039,157048],{"__ignoreMap":41},[46,157031,157032,157035,157037],{"class":48,"line":49},[46,157033,157034],{"class":56},"user_name ",[46,157036,79],{"class":52},[46,157038,148169],{"class":173},[46,157040,157041,157044,157046],{"class":48,"line":60},[46,157042,157043],{"class":56},"age2 ",[46,157045,79],{"class":52},[46,157047,148179],{"class":180},[46,157049,157050,157053,157055],{"class":48,"line":200},[46,157051,157052],{"class":56},"_token ",[46,157054,79],{"class":52},[46,157056,157057],{"class":173}," \"abc\"\n",[19,157059,157060],{},"错误写法：",[36,157062,157064],{"className":38,"code":157063,"language":40,"meta":41,"style":41},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[43,157065,157066,157075,157087],{"__ignoreMap":41},[46,157067,157068,157071,157073],{"class":48,"line":49},[46,157069,157070],{"class":79368},"2age",[46,157072,647],{"class":52},[46,157074,148179],{"class":180},[46,157076,157077,157079,157081,157083,157085],{"class":48,"line":60},[46,157078,133212],{"class":56},[46,157080,534],{"class":52},[46,157082,148164],{"class":56},[46,157084,79],{"class":52},[46,157086,148169],{"class":173},[46,157088,157089,157091,157093],{"class":48,"line":200},[46,157090,16696],{"class":52},[46,157092,647],{"class":52},[46,157094,157095],{"class":173}," \"一班\"\n",[19,157097,157098],{},"查看关键字：",[36,157100,157102],{"className":38,"code":157101,"language":40,"meta":41,"style":41},"import keyword\n\nprint(keyword.kwlist)\n",[43,157103,157104,157111,157115],{"__ignoreMap":41},[46,157105,157106,157108],{"class":48,"line":49},[46,157107,53],{"class":52},[46,157109,157110],{"class":56}," keyword\n",[46,157112,157113],{"class":48,"line":60},[46,157114,616],{"emptyLinePlaceholder":615},[46,157116,157117,157119],{"class":48,"line":200},[46,157118,32398],{"class":180},[46,157120,157121],{"class":56},"(keyword.kwlist)\n",[19,157123,157124],{},"推荐命名风格：",[36,157126,157128],{"className":38,"code":157127,"language":40,"meta":41,"style":41},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[43,157129,157130,157139,157149],{"__ignoreMap":41},[46,157131,157132,157135,157137],{"class":48,"line":49},[46,157133,157134],{"class":56},"student_name ",[46,157136,79],{"class":52},[46,157138,150981],{"class":173},[46,157140,157141,157144,157146],{"class":48,"line":60},[46,157142,157143],{"class":56},"total_price ",[46,157145,79],{"class":52},[46,157147,157148],{"class":180}," 99.8\n",[46,157150,157151,157154,157156],{"class":48,"line":200},[46,157152,157153],{"class":56},"is_finished ",[46,157155,79],{"class":52},[46,157157,127435],{"class":180},[19,157159,157160],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,157162,52700],{"id":52699},[19,157164,106254,157165,157168],{},[43,157166,157167],{},"type()"," 查看数据类型：",[36,157170,157172],{"className":38,"code":157171,"language":40,"meta":41,"style":41},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[43,157173,157174,157188,157202,157216,157230],{"__ignoreMap":41},[46,157175,157176,157178,157180,157182,157184,157186],{"class":48,"line":49},[46,157177,32398],{"class":180},[46,157179,1152],{"class":56},[46,157181,104997],{"class":180},[46,157183,1152],{"class":56},[46,157185,1155],{"class":180},[46,157187,32479],{"class":56},[46,157189,157190,157192,157194,157196,157198,157200],{"class":48,"line":60},[46,157191,32398],{"class":180},[46,157193,1152],{"class":56},[46,157195,104997],{"class":180},[46,157197,1152],{"class":56},[46,157199,2244],{"class":180},[46,157201,32479],{"class":56},[46,157203,157204,157206,157208,157210,157212,157214],{"class":48,"line":200},[46,157205,32398],{"class":180},[46,157207,1152],{"class":56},[46,157209,104997],{"class":180},[46,157211,1152],{"class":56},[46,157213,7857],{"class":173},[46,157215,32479],{"class":56},[46,157217,157218,157220,157222,157224,157226,157228],{"class":48,"line":211},[46,157219,32398],{"class":180},[46,157221,1152],{"class":56},[46,157223,104997],{"class":180},[46,157225,1152],{"class":56},[46,157227,33453],{"class":180},[46,157229,32479],{"class":56},[46,157231,157232,157234,157236,157238,157240,157242],{"class":48,"line":222},[46,157233,32398],{"class":180},[46,157235,1152],{"class":56},[46,157237,104997],{"class":180},[46,157239,1152],{"class":56},[46,157241,757],{"class":180},[46,157243,32479],{"class":56},[19,157245,157246],{},"输出类似：",[36,157248,157251],{"className":157249,"code":157250,"language":571,"meta":41},[569],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[43,157252,157250],{"__ignoreMap":41},[19,157254,11029,157255,109168,157257,157259,157260,157262,157263,23501,157265,157262,157267,157269],{},[43,157256,3406],{},[43,157258,2201],{}," 的子类，",[43,157261,33453],{}," 可以当作 ",[43,157264,2405],{},[43,157266,35960],{},[43,157268,2379],{},"，但业务代码中不要滥用。",[36,157271,157273],{"className":38,"code":157272,"language":40,"meta":41,"style":41},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[43,157274,157275,157293],{"__ignoreMap":41},[46,157276,157277,157279,157281,157283,157285,157287,157290],{"class":48,"line":49},[46,157278,32398],{"class":180},[46,157280,1152],{"class":56},[46,157282,33453],{"class":180},[46,157284,47537],{"class":52},[46,157286,27110],{"class":180},[46,157288,157289],{"class":56},")   ",[46,157291,157292],{"class":2253},"# 2\n",[46,157294,157295,157297,157299,157301,157303,157305,157307],{"class":48,"line":60},[46,157296,32398],{"class":180},[46,157298,1152],{"class":56},[46,157300,35960],{"class":180},[46,157302,47537],{"class":52},[46,157304,27110],{"class":180},[46,157306,47779],{"class":56},[46,157308,157309],{"class":2253},"# 1\n",[14,157311,157313],{"id":157312},"_26-类型转换","2.6 类型转换",[19,157315,157316],{},"常用转换函数：",[36,157318,157320],{"className":38,"code":157319,"language":40,"meta":41,"style":41},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[43,157321,157322,157332,157343,157353],{"__ignoreMap":41},[46,157323,157324,157326,157328,157330],{"class":48,"line":49},[46,157325,2201],{"class":180},[46,157327,1152],{"class":56},[46,157329,56281],{"class":173},[46,157331,459],{"class":56},[46,157333,157334,157336,157338,157341],{"class":48,"line":60},[46,157335,2236],{"class":180},[46,157337,1152],{"class":56},[46,157339,157340],{"class":173},"\"3.14\"",[46,157342,459],{"class":56},[46,157344,157345,157347,157349,157351],{"class":48,"line":200},[46,157346,3354],{"class":180},[46,157348,1152],{"class":56},[46,157350,1155],{"class":180},[46,157352,459],{"class":56},[46,157354,157355,157357,157359,157361],{"class":48,"line":211},[46,157356,3406],{"class":180},[46,157358,1152],{"class":56},[46,157360,2405],{"class":180},[46,157362,459],{"class":56},[19,157364,17136],{},[36,157366,157368],{"className":38,"code":157367,"language":40,"meta":41,"style":41},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[43,157369,157370,157379,157390],{"__ignoreMap":41},[46,157371,157372,157374,157376],{"class":48,"line":49},[46,157373,148174],{"class":56},[46,157375,79],{"class":52},[46,157377,157378],{"class":173}," \"18\"\n",[46,157380,157381,157383,157385,157387],{"class":48,"line":60},[46,157382,148174],{"class":56},[46,157384,79],{"class":52},[46,157386,4411],{"class":180},[46,157388,157389],{"class":56},"(age)\n",[46,157391,157392,157394,157397,157399,157401],{"class":48,"line":200},[46,157393,32398],{"class":180},[46,157395,157396],{"class":56},"(age ",[46,157398,2668],{"class":52},[46,157400,27110],{"class":180},[46,157402,459],{"class":56},[19,157404,157405],{},"输入得到的内容永远是字符串：",[36,157407,157409],{"className":38,"code":157408,"language":40,"meta":41,"style":41},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[43,157410,157411,157427],{"__ignoreMap":41},[46,157412,157413,157416,157418,157420,157422,157425],{"class":48,"line":49},[46,157414,157415],{"class":56},"num ",[46,157417,79],{"class":52},[46,157419,62570],{"class":180},[46,157421,1152],{"class":56},[46,157423,157424],{"class":173},"\"请输入数字:\"",[46,157426,459],{"class":56},[46,157428,157429,157431,157433,157435,157438],{"class":48,"line":60},[46,157430,32398],{"class":180},[46,157432,1152],{"class":56},[46,157434,104997],{"class":180},[46,157436,157437],{"class":56},"(num))  ",[46,157439,157440],{"class":2253},"# str\n",[19,157442,157443],{},"如果要做数学运算，必须转换：",[36,157445,157447],{"className":38,"code":157446,"language":40,"meta":41,"style":41},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[43,157448,157449,157467],{"__ignoreMap":41},[46,157450,157451,157453,157455,157457,157459,157461,157463,157465],{"class":48,"line":49},[46,157452,157415],{"class":56},[46,157454,79],{"class":52},[46,157456,4411],{"class":180},[46,157458,1152],{"class":56},[46,157460,55786],{"class":180},[46,157462,1152],{"class":56},[46,157464,157424],{"class":173},[46,157466,32479],{"class":56},[46,157468,157469,157471,157473,157475,157477],{"class":48,"line":60},[46,157470,32398],{"class":180},[46,157472,47590],{"class":56},[46,157474,2668],{"class":52},[46,157476,4068],{"class":180},[46,157478,459],{"class":56},[19,157480,157481],{},"常见错误：",[36,157483,157485],{"className":38,"code":157484,"language":40,"meta":41,"style":41},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[43,157486,157487,157500],{"__ignoreMap":41},[46,157488,157489,157491,157493,157495,157497],{"class":48,"line":49},[46,157490,2201],{"class":180},[46,157492,1152],{"class":56},[46,157494,157340],{"class":173},[46,157496,157289],{"class":56},[46,157498,157499],{"class":2253},"# 错误\n",[46,157501,157502,157504,157506,157509,157512],{"class":48,"line":60},[46,157503,2201],{"class":180},[46,157505,1152],{"class":56},[46,157507,157508],{"class":173},"\"abc\"",[46,157510,157511],{"class":56},")    ",[46,157513,157499],{"class":2253},[19,157515,157516],{},"正确写法：",[36,157518,157520],{"className":38,"code":157519,"language":40,"meta":41,"style":41},"num = float(\"3.14\")\n",[43,157521,157522],{"__ignoreMap":41},[46,157523,157524,157526,157528,157530,157532,157534],{"class":48,"line":49},[46,157525,157415],{"class":56},[46,157527,79],{"class":52},[46,157529,111425],{"class":180},[46,157531,1152],{"class":56},[46,157533,157340],{"class":173},[46,157535,459],{"class":56},[14,157537,157539],{"id":157538},"_27-运算符","2.7 运算符",[479,157541,157543],{"id":157542},"_271-算术运算符","2.7.1 算术运算符",[97,157545,157546,157557],{},[100,157547,157548],{},[103,157549,157550,157553,157555],{},[106,157551,157552],{},"运算符",[106,157554,27861],{},[106,157556,29481],{},[120,157558,157559,157573,157587,157601,157615,157629,157643],{},[103,157560,157561,157565,157568],{},[125,157562,157563],{},[43,157564,2668],{},[125,157566,157567],{},"加法",[125,157569,157570],{},[43,157571,157572],{},"1 + 2",[103,157574,157575,157579,157582],{},[125,157576,157577],{},[43,157578,534],{},[125,157580,157581],{},"减法",[125,157583,157584],{},[43,157585,157586],{},"5 - 3",[103,157588,157589,157593,157596],{},[125,157590,157591],{},[43,157592,2642],{},[125,157594,157595],{},"乘法",[125,157597,157598],{},[43,157599,157600],{},"2 * 3",[103,157602,157603,157607,157610],{},[125,157604,157605],{},[43,157606,2770],{},[125,157608,157609],{},"除法，结果是浮点数",[125,157611,157612],{},[43,157613,157614],{},"5 \u002F 2",[103,157616,157617,157621,157624],{},[125,157618,157619],{},[43,157620,35303],{},[125,157622,157623],{},"整除",[125,157625,157626],{},[43,157627,157628],{},"5 \u002F\u002F 2",[103,157630,157631,157635,157638],{},[125,157632,157633],{},[43,157634,2515],{},[125,157636,157637],{},"取余",[125,157639,157640],{},[43,157641,157642],{},"5 % 2",[103,157644,157645,157649,157652],{},[125,157646,157647],{},[43,157648,12665],{},[125,157650,157651],{},"幂运算",[125,157653,157654],{},[43,157655,157656],{},"2 ** 3",[19,157658,17136],{},[36,157660,157662],{"className":38,"code":157661,"language":40,"meta":41,"style":41},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[43,157663,157664,157682,157699,157716],{"__ignoreMap":41},[46,157665,157666,157668,157670,157672,157675,157677,157679],{"class":48,"line":49},[46,157667,32398],{"class":180},[46,157669,1152],{"class":56},[46,157671,2506],{"class":180},[46,157673,157674],{"class":52}," \u002F",[46,157676,16757],{"class":180},[46,157678,157289],{"class":56},[46,157680,157681],{"class":2253},"# 2.5\n",[46,157683,157684,157686,157688,157690,157693,157695,157697],{"class":48,"line":60},[46,157685,32398],{"class":180},[46,157687,1152],{"class":56},[46,157689,2506],{"class":180},[46,157691,157692],{"class":52}," \u002F\u002F",[46,157694,16757],{"class":180},[46,157696,47779],{"class":56},[46,157698,157292],{"class":2253},[46,157700,157701,157703,157705,157707,157710,157712,157714],{"class":48,"line":200},[46,157702,32398],{"class":180},[46,157704,1152],{"class":56},[46,157706,2506],{"class":180},[46,157708,157709],{"class":52}," %",[46,157711,16757],{"class":180},[46,157713,157289],{"class":56},[46,157715,157309],{"class":2253},[46,157717,157718,157720,157722,157724,157727,157729,157731],{"class":48,"line":211},[46,157719,32398],{"class":180},[46,157721,1152],{"class":56},[46,157723,2272],{"class":180},[46,157725,157726],{"class":52}," **",[46,157728,80035],{"class":180},[46,157730,47779],{"class":56},[46,157732,157733],{"class":2253},"# 8\n",[479,157735,157737],{"id":157736},"_272-赋值运算符","2.7.2 赋值运算符",[36,157739,157741],{"className":38,"code":157740,"language":40,"meta":41,"style":41},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[43,157742,157743,157751,157759,157767,157775],{"__ignoreMap":41},[46,157744,157745,157747,157749],{"class":48,"line":49},[46,157746,157415],{"class":56},[46,157748,79],{"class":52},[46,157750,60393],{"class":180},[46,157752,157753,157755,157757],{"class":48,"line":60},[46,157754,157415],{"class":56},[46,157756,11481],{"class":52},[46,157758,56392],{"class":180},[46,157760,157761,157763,157765],{"class":48,"line":200},[46,157762,157415],{"class":56},[46,157764,151880],{"class":52},[46,157766,49691],{"class":180},[46,157768,157769,157771,157773],{"class":48,"line":211},[46,157770,157415],{"class":56},[46,157772,138776],{"class":52},[46,157774,121664],{"class":180},[46,157776,157777,157779,157782],{"class":48,"line":222},[46,157778,157415],{"class":56},[46,157780,157781],{"class":52},"\u002F=",[46,157783,49691],{"class":180},[19,157785,157786],{},"等价关系：",[36,157788,157790],{"className":38,"code":157789,"language":40,"meta":41,"style":41},"num += 1\nnum = num + 1\n",[43,157791,157792,157800],{"__ignoreMap":41},[46,157793,157794,157796,157798],{"class":48,"line":49},[46,157795,157415],{"class":56},[46,157797,11481],{"class":52},[46,157799,57664],{"class":180},[46,157801,157802,157804,157806,157809,157811],{"class":48,"line":60},[46,157803,157415],{"class":56},[46,157805,79],{"class":52},[46,157807,157808],{"class":56}," num ",[46,157810,2668],{"class":52},[46,157812,57664],{"class":180},[19,157814,157815,157816,1700,157819,365],{},"Python 没有 ",[43,157817,157818],{},"num++",[43,157820,157821],{},"num--",[479,157823,157825],{"id":157824},"_273-比较运算符","2.7.3 比较运算符",[19,157827,157828],{},"比较运算结果是布尔值。",[36,157830,157832],{"className":38,"code":157831,"language":40,"meta":41,"style":41},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[43,157833,157834,157848,157863,157877],{"__ignoreMap":41},[46,157835,157836,157838,157840,157842,157844,157846],{"class":48,"line":49},[46,157837,32398],{"class":180},[46,157839,1152],{"class":56},[46,157841,2633],{"class":180},[46,157843,28213],{"class":52},[46,157845,4178],{"class":180},[46,157847,459],{"class":56},[46,157849,157850,157852,157854,157856,157859,157861],{"class":48,"line":60},[46,157851,32398],{"class":180},[46,157853,1152],{"class":56},[46,157855,2633],{"class":180},[46,157857,157858],{"class":52}," >=",[46,157860,4068],{"class":180},[46,157862,459],{"class":56},[46,157864,157865,157867,157869,157871,157873,157875],{"class":48,"line":200},[46,157866,32398],{"class":180},[46,157868,1152],{"class":56},[46,157870,2633],{"class":180},[46,157872,917],{"class":52},[46,157874,4113],{"class":180},[46,157876,459],{"class":56},[46,157878,157879,157881,157883,157885,157888,157890],{"class":48,"line":211},[46,157880,32398],{"class":180},[46,157882,1152],{"class":56},[46,157884,2633],{"class":180},[46,157886,157887],{"class":52}," !=",[46,157889,4113],{"class":180},[46,157891,459],{"class":56},[19,157893,157894,157895,157897,157898,365],{},"注意：判断相等用 ",[43,157896,4970],{},"，赋值用 ",[43,157899,79],{},[36,157901,157903],{"className":38,"code":157902,"language":40,"meta":41,"style":41},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[43,157904,157905,157917],{"__ignoreMap":41},[46,157906,157907,157909,157911,157914],{"class":48,"line":49},[46,157908,148174],{"class":56},[46,157910,79],{"class":52},[46,157912,157913],{"class":180}," 18",[46,157915,157916],{"class":2253},"       # 赋值\n",[46,157918,157919,157921,157923,157925],{"class":48,"line":60},[46,157920,148174],{"class":56},[46,157922,4970],{"class":52},[46,157924,157913],{"class":180},[46,157926,157927],{"class":2253},"      # 判断是否相等\n",[479,157929,157931],{"id":157930},"_274-逻辑运算符","2.7.4 逻辑运算符",[97,157933,157934,157942],{},[100,157935,157936],{},[103,157937,157938,157940],{},[106,157939,157552],{},[106,157941,27861],{},[120,157943,157944,157953,157962],{},[103,157945,157946,157950],{},[125,157947,157948],{},[43,157949,815],{},[125,157951,157952],{},"并且",[103,157954,157955,157959],{},[125,157956,157957],{},[43,157958,116718],{},[125,157960,157961],{},"或者",[103,157963,157964,157969],{},[125,157965,157966],{},[43,157967,157968],{},"not",[125,157970,157971],{},"取反",[36,157973,157975],{"className":38,"code":157974,"language":40,"meta":41,"style":41},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[43,157976,157977,157985,157994,157998,158013,158027],{"__ignoreMap":41},[46,157978,157979,157981,157983],{"class":48,"line":49},[46,157980,148174],{"class":56},[46,157982,79],{"class":52},[46,157984,90028],{"class":180},[46,157986,157987,157990,157992],{"class":48,"line":60},[46,157988,157989],{"class":56},"has_ticket ",[46,157991,79],{"class":52},[46,157993,155227],{"class":180},[46,157995,157996],{"class":48,"line":200},[46,157997,616],{"emptyLinePlaceholder":615},[46,157999,158000,158002,158004,158006,158008,158010],{"class":48,"line":211},[46,158001,32398],{"class":180},[46,158003,157396],{"class":56},[46,158005,3750],{"class":52},[46,158007,157913],{"class":180},[46,158009,122057],{"class":52},[46,158011,158012],{"class":56}," has_ticket)\n",[46,158014,158015,158017,158019,158021,158023,158025],{"class":48,"line":222},[46,158016,32398],{"class":180},[46,158018,157396],{"class":56},[46,158020,821],{"class":52},[46,158022,157913],{"class":180},[46,158024,115829],{"class":52},[46,158026,158012],{"class":56},[46,158028,158029,158031,158033,158035],{"class":48,"line":636},[46,158030,32398],{"class":180},[46,158032,1152],{"class":56},[46,158034,157968],{"class":52},[46,158036,158012],{"class":56},[14,158038,158040],{"id":158039},"_28-字符串定义","2.8 字符串定义",[19,158042,158043],{},"三种常见写法：",[36,158045,158047],{"className":38,"code":158046,"language":40,"meta":41,"style":41},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[43,158048,158049,158059,158068,158078],{"__ignoreMap":41},[46,158050,158051,158054,158056],{"class":48,"line":49},[46,158052,158053],{"class":56},"name1 ",[46,158055,79],{"class":52},[46,158057,158058],{"class":173}," '小明'\n",[46,158060,158061,158064,158066],{"class":48,"line":60},[46,158062,158063],{"class":56},"name2 ",[46,158065,79],{"class":52},[46,158067,150981],{"class":173},[46,158069,158070,158073,158075],{"class":48,"line":200},[46,158071,158072],{"class":56},"text ",[46,158074,79],{"class":52},[46,158076,158077],{"class":173}," \"\"\"这是多行字符串\n",[46,158079,158080],{"class":48,"line":211},[46,158081,158082],{"class":173},"可以换行\"\"\"\n",[19,158084,158085],{},"字符串中包含引号：",[36,158087,158089],{"className":38,"code":158088,"language":40,"meta":41,"style":41},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[43,158090,158091,158101,158111],{"__ignoreMap":41},[46,158092,158093,158096,158098],{"class":48,"line":49},[46,158094,158095],{"class":56},"msg ",[46,158097,79],{"class":52},[46,158099,158100],{"class":173}," \"他说:'你好'\"\n",[46,158102,158103,158106,158108],{"class":48,"line":60},[46,158104,158105],{"class":56},"msg2 ",[46,158107,79],{"class":52},[46,158109,158110],{"class":173}," '他说:\"你好\"'\n",[46,158112,158113,158116,158118,158121,158124,158127,158129],{"class":48,"line":200},[46,158114,158115],{"class":56},"msg3 ",[46,158117,79],{"class":52},[46,158119,158120],{"class":173}," \"他说:",[46,158122,158123],{"class":180},"\\\"",[46,158125,158126],{"class":173},"你好",[46,158128,158123],{"class":180},[46,158130,27125],{"class":173},[19,158132,158133],{},"常见转义字符：",[97,158135,158136,158145],{},[100,158137,158138],{},[103,158139,158140,158143],{},[106,158141,158142],{},"写法",[106,158144,102659],{},[120,158146,158147,158157,158166,158176,158185],{},[103,158148,158149,158154],{},[125,158150,158151],{},[43,158152,158153],{},"\\n",[125,158155,158156],{},"换行",[103,158158,158159,158163],{},[125,158160,158161],{},[43,158162,3285],{},[125,158164,158165],{},"制表符",[103,158167,158168,158173],{},[125,158169,158170],{},[43,158171,158172],{},"\\\\",[125,158174,158175],{},"反斜杠",[103,158177,158178,158182],{},[125,158179,158180],{},[43,158181,158123],{},[125,158183,158184],{},"双引号",[103,158186,158187,158192],{},[125,158188,158189],{},[43,158190,158191],{},"\\'",[125,158193,158194],{},"单引号",[14,158196,158198],{"id":158197},"_29-字符串拼接","2.9 字符串拼接",[36,158200,158202],{"className":38,"code":158201,"language":40,"meta":41,"style":41},"name = \"小明\"\nprint(\"你好，\" + name)\n",[43,158203,158204,158212],{"__ignoreMap":41},[46,158205,158206,158208,158210],{"class":48,"line":49},[46,158207,148164],{"class":56},[46,158209,79],{"class":52},[46,158211,150981],{"class":173},[46,158213,158214,158216,158218,158221,158223],{"class":48,"line":60},[46,158215,32398],{"class":180},[46,158217,1152],{"class":56},[46,158219,158220],{"class":173},"\"你好，\"",[46,158222,47537],{"class":52},[46,158224,158225],{"class":56}," name)\n",[19,158227,158228],{},"字符串只能和字符串拼接：",[36,158230,158232],{"className":38,"code":158231,"language":40,"meta":41,"style":41},"age = 18\nprint(\"年龄:\" + str(age))\n",[43,158233,158234,158242],{"__ignoreMap":41},[46,158235,158236,158238,158240],{"class":48,"line":49},[46,158237,148174],{"class":56},[46,158239,79],{"class":52},[46,158241,148179],{"class":180},[46,158243,158244,158246,158248,158250,158252,158254],{"class":48,"line":60},[46,158245,32398],{"class":180},[46,158247,1152],{"class":56},[46,158249,148145],{"class":173},[46,158251,47537],{"class":52},[46,158253,75884],{"class":180},[46,158255,158256],{"class":56},"(age))\n",[19,158258,158259],{},"更推荐使用格式化字符串。",[14,158261,158263],{"id":158262},"_210-字符串格式化","2.10 字符串格式化",[479,158265,158267],{"id":158266},"_2101-百分号格式化","2.10.1 百分号格式化",[36,158269,158271],{"className":38,"code":158270,"language":40,"meta":41,"style":41},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[43,158272,158273,158281,158289,158298,158302],{"__ignoreMap":41},[46,158274,158275,158277,158279],{"class":48,"line":49},[46,158276,148164],{"class":56},[46,158278,79],{"class":52},[46,158280,150981],{"class":173},[46,158282,158283,158285,158287],{"class":48,"line":60},[46,158284,148174],{"class":56},[46,158286,79],{"class":52},[46,158288,148179],{"class":180},[46,158290,158291,158293,158295],{"class":48,"line":200},[46,158292,156986],{"class":56},[46,158294,79],{"class":52},[46,158296,158297],{"class":180}," 95.5\n",[46,158299,158300],{"class":48,"line":211},[46,158301,616],{"emptyLinePlaceholder":615},[46,158303,158304,158306,158308,158311,158314,158317,158320,158323,158326,158328,158330],{"class":48,"line":222},[46,158305,32398],{"class":180},[46,158307,1152],{"class":56},[46,158309,158310],{"class":173},"\"姓名:",[46,158312,158313],{"class":180},"%s",[46,158315,158316],{"class":173}," 年龄:",[46,158318,158319],{"class":180},"%d",[46,158321,158322],{"class":173}," 分数:",[46,158324,158325],{"class":180},"%.1f",[46,158327,2439],{"class":173},[46,158329,157709],{"class":52},[46,158331,158332],{"class":56}," (name, age, score))\n",[19,158334,158335],{},"常用占位符：",[97,158337,158338,158347],{},[100,158339,158340],{},[103,158341,158342,158345],{},[106,158343,158344],{},"占位符",[106,158346,27861],{},[120,158348,158349,158357,158365],{},[103,158350,158351,158355],{},[125,158352,158353],{},[43,158354,158313],{},[125,158356,156852],{},[103,158358,158359,158363],{},[125,158360,158361],{},[43,158362,158319],{},[125,158364,156830],{},[103,158366,158367,158372],{},[125,158368,158369],{},[43,158370,158371],{},"%f",[125,158373,156841],{},[19,158375,158376],{},"精度控制：",[36,158378,158380],{"className":38,"code":158379,"language":40,"meta":41,"style":41},"price = 12.3456\nprint(\"%.2f\" % price)\n",[43,158381,158382,158391],{"__ignoreMap":41},[46,158383,158384,158386,158388],{"class":48,"line":49},[46,158385,148309],{"class":56},[46,158387,79],{"class":52},[46,158389,158390],{"class":180}," 12.3456\n",[46,158392,158393,158395,158397,158399,158402,158404,158406],{"class":48,"line":60},[46,158394,32398],{"class":180},[46,158396,1152],{"class":56},[46,158398,2439],{"class":173},[46,158400,158401],{"class":180},"%.2f",[46,158403,2439],{"class":173},[46,158405,157709],{"class":52},[46,158407,158408],{"class":56}," price)\n",[479,158410,158412],{"id":158411},"_2102-format方法","2.10.2 format方法",[36,158414,158416],{"className":38,"code":158415,"language":40,"meta":41,"style":41},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[43,158417,158418,158426,158434,158438,158457,158477],{"__ignoreMap":41},[46,158419,158420,158422,158424],{"class":48,"line":49},[46,158421,148164],{"class":56},[46,158423,79],{"class":52},[46,158425,150981],{"class":173},[46,158427,158428,158430,158432],{"class":48,"line":60},[46,158429,148174],{"class":56},[46,158431,79],{"class":52},[46,158433,148179],{"class":180},[46,158435,158436],{"class":48,"line":200},[46,158437,616],{"emptyLinePlaceholder":615},[46,158439,158440,158442,158444,158446,158448,158450,158452,158454],{"class":48,"line":211},[46,158441,32398],{"class":180},[46,158443,1152],{"class":56},[46,158445,158310],{"class":173},[46,158447,34433],{"class":180},[46,158449,158316],{"class":173},[46,158451,34433],{"class":180},[46,158453,2439],{"class":173},[46,158455,158456],{"class":56},".format(name, age))\n",[46,158458,158459,158461,158463,158465,158468,158470,158473,158475],{"class":48,"line":222},[46,158460,32398],{"class":180},[46,158462,1152],{"class":56},[46,158464,158310],{"class":173},[46,158466,158467],{"class":180},"{0}",[46,158469,158316],{"class":173},[46,158471,158472],{"class":180},"{1}",[46,158474,2439],{"class":173},[46,158476,158456],{"class":56},[46,158478,158479,158481,158483,158485,158488,158490,158493,158495,158498,158500,158502,158505,158507,158509],{"class":48,"line":636},[46,158480,32398],{"class":180},[46,158482,1152],{"class":56},[46,158484,158310],{"class":173},[46,158486,158487],{"class":180},"{name}",[46,158489,158316],{"class":173},[46,158491,158492],{"class":180},"{age}",[46,158494,2439],{"class":173},[46,158496,158497],{"class":56},".format(",[46,158499,1653],{"class":439},[46,158501,79],{"class":52},[46,158503,158504],{"class":56},"name, ",[46,158506,72186],{"class":439},[46,158508,79],{"class":52},[46,158510,158511],{"class":56},"age))\n",[479,158513,158515],{"id":158514},"_2103-f-string","2.10.3 f-string",[19,158517,158518],{},"推荐写法：",[36,158520,158522],{"className":38,"code":158521,"language":40,"meta":41,"style":41},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[43,158523,158524,158532,158540,158548,158552],{"__ignoreMap":41},[46,158525,158526,158528,158530],{"class":48,"line":49},[46,158527,148164],{"class":56},[46,158529,79],{"class":52},[46,158531,150981],{"class":173},[46,158533,158534,158536,158538],{"class":48,"line":60},[46,158535,148174],{"class":56},[46,158537,79],{"class":52},[46,158539,148179],{"class":180},[46,158541,158542,158544,158546],{"class":48,"line":200},[46,158543,156986],{"class":56},[46,158545,79],{"class":52},[46,158547,158297],{"class":180},[46,158549,158550],{"class":48,"line":211},[46,158551,616],{"emptyLinePlaceholder":615},[46,158553,158554,158556,158558,158560,158562,158564,158566,158568,158570,158572,158574,158576,158578,158580,158583,158586,158588,158590],{"class":48,"line":222},[46,158555,32398],{"class":180},[46,158557,1152],{"class":56},[46,158559,2247],{"class":52},[46,158561,158310],{"class":173},[46,158563,3082],{"class":180},[46,158565,1653],{"class":56},[46,158567,3131],{"class":180},[46,158569,158316],{"class":173},[46,158571,3082],{"class":180},[46,158573,72186],{"class":56},[46,158575,3131],{"class":180},[46,158577,158322],{"class":173},[46,158579,3082],{"class":180},[46,158581,158582],{"class":56},"score",[46,158584,158585],{"class":52},":.1f",[46,158587,3131],{"class":180},[46,158589,2439],{"class":173},[46,158591,459],{"class":56},[19,158593,158594],{},"表达式也可以放进去：",[36,158596,158598],{"className":38,"code":158597,"language":40,"meta":41,"style":41},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[43,158599,158600,158608,158616],{"__ignoreMap":41},[46,158601,158602,158604,158606],{"class":48,"line":49},[46,158603,148309],{"class":56},[46,158605,79],{"class":52},[46,158607,148314],{"class":180},[46,158609,158610,158612,158614],{"class":48,"line":60},[46,158611,148319],{"class":56},[46,158613,79],{"class":52},[46,158615,56392],{"class":180},[46,158617,158618,158620,158622,158624,158627,158629,158631,158633,158636,158638,158641],{"class":48,"line":200},[46,158619,32398],{"class":180},[46,158621,1152],{"class":56},[46,158623,2247],{"class":52},[46,158625,158626],{"class":173},"\"总价:",[46,158628,3082],{"class":180},[46,158630,148309],{"class":56},[46,158632,2642],{"class":52},[46,158634,158635],{"class":56}," count",[46,158637,3131],{"class":180},[46,158639,158640],{"class":173},"元\"",[46,158642,459],{"class":56},[14,158644,158646],{"id":158645},"_211-input输入","2.11 input输入",[19,158648,158649,158652],{},[43,158650,158651],{},"input()"," 会暂停程序，等待用户输入。",[36,158654,158656],{"className":38,"code":158655,"language":40,"meta":41,"style":41},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[43,158657,158658,158672],{"__ignoreMap":41},[46,158659,158660,158662,158664,158666,158668,158670],{"class":48,"line":49},[46,158661,148164],{"class":56},[46,158663,79],{"class":52},[46,158665,62570],{"class":180},[46,158667,1152],{"class":56},[46,158669,154007],{"class":173},[46,158671,459],{"class":56},[46,158673,158674,158676,158678,158680,158683,158685,158687,158689,158691],{"class":48,"line":60},[46,158675,32398],{"class":180},[46,158677,1152],{"class":56},[46,158679,2247],{"class":52},[46,158681,158682],{"class":173},"\"你好，",[46,158684,3082],{"class":180},[46,158686,1653],{"class":56},[46,158688,3131],{"class":180},[46,158690,2439],{"class":173},[46,158692,459],{"class":56},[19,158694,158695],{},"输入整数：",[36,158697,158699],{"className":38,"code":158698,"language":40,"meta":41,"style":41},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[43,158700,158701,158719],{"__ignoreMap":41},[46,158702,158703,158705,158707,158709,158711,158713,158715,158717],{"class":48,"line":49},[46,158704,148174],{"class":56},[46,158706,79],{"class":52},[46,158708,4411],{"class":180},[46,158710,1152],{"class":56},[46,158712,55786],{"class":180},[46,158714,1152],{"class":56},[46,158716,154022],{"class":173},[46,158718,32479],{"class":56},[46,158720,158721,158723,158725,158727,158730,158732,158734,158736,158739,158741],{"class":48,"line":60},[46,158722,32398],{"class":180},[46,158724,1152],{"class":56},[46,158726,2247],{"class":52},[46,158728,158729],{"class":173},"\"明年你",[46,158731,3082],{"class":180},[46,158733,148174],{"class":56},[46,158735,2668],{"class":52},[46,158737,158738],{"class":180}," 1}",[46,158740,151032],{"class":173},[46,158742,459],{"class":56},[19,158744,158745],{},"输入小数：",[36,158747,158749],{"className":38,"code":158748,"language":40,"meta":41,"style":41},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[43,158750,158751,158770],{"__ignoreMap":41},[46,158752,158753,158755,158757,158759,158761,158763,158765,158768],{"class":48,"line":49},[46,158754,156959],{"class":56},[46,158756,79],{"class":52},[46,158758,111425],{"class":180},[46,158760,1152],{"class":56},[46,158762,55786],{"class":180},[46,158764,1152],{"class":56},[46,158766,158767],{"class":173},"\"请输入身高:\"",[46,158769,32479],{"class":56},[46,158771,158772,158774,158776,158778,158781,158783,158785,158788,158790,158793],{"class":48,"line":60},[46,158773,32398],{"class":180},[46,158775,1152],{"class":56},[46,158777,2247],{"class":52},[46,158779,158780],{"class":173},"\"身高:",[46,158782,3082],{"class":180},[46,158784,440],{"class":56},[46,158786,158787],{"class":52},":.2f",[46,158789,3131],{"class":180},[46,158791,158792],{"class":173},"米\"",[46,158794,459],{"class":56},[14,158796,158798],{"id":158797},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[19,158800,124920],{},[23,158802,158803,158806,158809,158812],{},[26,158804,158805],{},"输入商品单价。",[26,158807,158808],{},"输入购买数量。",[26,158810,158811],{},"输入折扣，例如 0.8 表示八折。",[26,158813,158814],{},"输出最终金额，保留两位小数。",[19,158816,12039],{},[36,158818,158820],{"className":38,"code":158819,"language":40,"meta":41,"style":41},"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",[43,158821,158822,158841,158860,158880,158884,158904,158908,158931,158952,158974],{"__ignoreMap":41},[46,158823,158824,158826,158828,158830,158832,158834,158836,158839],{"class":48,"line":49},[46,158825,148309],{"class":56},[46,158827,79],{"class":52},[46,158829,111425],{"class":180},[46,158831,1152],{"class":56},[46,158833,55786],{"class":180},[46,158835,1152],{"class":56},[46,158837,158838],{"class":173},"\"请输入商品单价:\"",[46,158840,32479],{"class":56},[46,158842,158843,158845,158847,158849,158851,158853,158855,158858],{"class":48,"line":60},[46,158844,148319],{"class":56},[46,158846,79],{"class":52},[46,158848,4411],{"class":180},[46,158850,1152],{"class":56},[46,158852,55786],{"class":180},[46,158854,1152],{"class":56},[46,158856,158857],{"class":173},"\"请输入购买数量:\"",[46,158859,32479],{"class":56},[46,158861,158862,158865,158867,158869,158871,158873,158875,158878],{"class":48,"line":200},[46,158863,158864],{"class":56},"discount ",[46,158866,79],{"class":52},[46,158868,111425],{"class":180},[46,158870,1152],{"class":56},[46,158872,55786],{"class":180},[46,158874,1152],{"class":56},[46,158876,158877],{"class":173},"\"请输入折扣:\"",[46,158879,32479],{"class":56},[46,158881,158882],{"class":48,"line":211},[46,158883,616],{"emptyLinePlaceholder":615},[46,158885,158886,158889,158891,158894,158896,158899,158901],{"class":48,"line":222},[46,158887,158888],{"class":56},"total ",[46,158890,79],{"class":52},[46,158892,158893],{"class":56}," price ",[46,158895,2642],{"class":52},[46,158897,158898],{"class":56}," count ",[46,158900,2642],{"class":52},[46,158902,158903],{"class":56}," discount\n",[46,158905,158906],{"class":48,"line":636},[46,158907,616],{"emptyLinePlaceholder":615},[46,158909,158910,158912,158914,158916,158919,158921,158923,158925,158927,158929],{"class":48,"line":641},[46,158911,32398],{"class":180},[46,158913,1152],{"class":56},[46,158915,2247],{"class":52},[46,158917,158918],{"class":173},"\"商品单价:",[46,158920,3082],{"class":180},[46,158922,81779],{"class":56},[46,158924,158787],{"class":52},[46,158926,3131],{"class":180},[46,158928,2439],{"class":173},[46,158930,459],{"class":56},[46,158932,158933,158935,158937,158939,158942,158944,158946,158948,158950],{"class":48,"line":653},[46,158934,32398],{"class":180},[46,158936,1152],{"class":56},[46,158938,2247],{"class":52},[46,158940,158941],{"class":173},"\"购买数量:",[46,158943,3082],{"class":180},[46,158945,86397],{"class":56},[46,158947,3131],{"class":180},[46,158949,2439],{"class":173},[46,158951,459],{"class":56},[46,158953,158954,158956,158958,158960,158963,158965,158968,158970,158972],{"class":48,"line":659},[46,158955,32398],{"class":180},[46,158957,1152],{"class":56},[46,158959,2247],{"class":52},[46,158961,158962],{"class":173},"\"折扣:",[46,158964,3082],{"class":180},[46,158966,158967],{"class":56},"discount",[46,158969,3131],{"class":180},[46,158971,2439],{"class":173},[46,158973,459],{"class":56},[46,158975,158976,158978,158980,158982,158985,158987,158990,158992,158994,158996],{"class":48,"line":665},[46,158977,32398],{"class":180},[46,158979,1152],{"class":56},[46,158981,2247],{"class":52},[46,158983,158984],{"class":173},"\"应付金额:",[46,158986,3082],{"class":180},[46,158988,158989],{"class":56},"total",[46,158991,158787],{"class":52},[46,158993,3131],{"class":180},[46,158995,158640],{"class":173},[46,158997,459],{"class":56},[14,158999,159001],{"id":159000},"_213-易错点","2.13 易错点",[23,159003,159004,159009,159015,159023,159026],{},[26,159005,159006,159008],{},[43,159007,158651],{}," 的结果是字符串，做运算前要转换。",[26,159010,159011,159012,365],{},"字符串拼接时，数字要先 ",[43,159013,159014],{},"str()",[26,159016,159017,159019,159020,159022],{},[43,159018,79],{}," 是赋值，",[43,159021,4970],{}," 是比较。",[26,159024,159025],{},"Python 没有自增自减运算符。",[26,159027,159028],{},"浮点数计算可能有精度误差：",[36,159030,159032],{"className":38,"code":159031,"language":40,"meta":41,"style":41},"print(0.1 + 0.2)\n",[43,159033,159034],{"__ignoreMap":41},[46,159035,159036,159038,159040,159042,159044,159047],{"class":48,"line":49},[46,159037,32398],{"class":180},[46,159039,1152],{"class":56},[46,159041,88173],{"class":180},[46,159043,47537],{"class":52},[46,159045,159046],{"class":180}," 0.2",[46,159048,459],{"class":56},[19,159050,159051,159052,159055],{},"金额计算如果要求严格，可以后续学习 ",[43,159053,159054],{},"decimal"," 模块。",[14,159057,159059],{"id":159058},"_214-本章练习","2.14 本章练习",[23,159061,159062,159065,159068,159071,159074],{},[26,159063,159064],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[26,159066,159067],{},"输入圆的半径，计算面积，保留两位小数。",[26,159069,159070],{},"输入工资和奖金，计算总收入。",[26,159072,159073],{},"输入摄氏温度，转换为华氏温度。",[26,159075,159076],{},"写一个 BMI 计算程序：",[36,159078,159081],{"className":159079,"code":159080,"language":571,"meta":41},[569],"BMI = 体重kg \u002F 身高m ** 2\n",[43,159082,159080],{"__ignoreMap":41},[2098,159084,159085],{},"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":41,"searchDepth":60,"depth":60,"links":159087},[159088,159089,159090,159091,159092,159093,159094,159100,159101,159102,159107,159108,159109,159110],{"id":156649,"depth":60,"text":156650},{"id":156758,"depth":60,"text":156759},{"id":156929,"depth":60,"text":156930},{"id":157006,"depth":60,"text":157007},{"id":52699,"depth":60,"text":52700},{"id":157312,"depth":60,"text":157313},{"id":157538,"depth":60,"text":157539,"children":159095},[159096,159097,159098,159099],{"id":157542,"depth":200,"text":157543},{"id":157736,"depth":200,"text":157737},{"id":157824,"depth":200,"text":157825},{"id":157930,"depth":200,"text":157931},{"id":158039,"depth":60,"text":158040},{"id":158197,"depth":60,"text":158198},{"id":158262,"depth":60,"text":158263,"children":159103},[159104,159105,159106],{"id":158266,"depth":200,"text":158267},{"id":158411,"depth":200,"text":158412},{"id":158514,"depth":200,"text":158515},{"id":158645,"depth":60,"text":158646},{"id":158797,"depth":60,"text":158798},{"id":159000,"depth":60,"text":159001},{"id":159058,"depth":60,"text":159059},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":156641,"description":25378},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":159117,"title":159118,"body":159119,"description":25378,"extension":2125,"meta":160755,"navigation":615,"path":160756,"seo":160757,"stem":160758,"__hash__":160759},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":159120,"toc":160736},[159121,159124,159128,159131,159146,159149,159177,159181,159231,159233,159249,159252,159278,159281,159285,159352,159355,159371,159375,159378,159496,159499,159506,159555,159561,159565,159568,159681,159684,159688,159692,159695,159745,159749,159752,159802,159806,159809,159847,159851,159854,159900,159903,159938,159942,159947,159950,159996,159998,160065,160069,160075,160186,160195,160199,160201,160212,160214,160380,160384,160386,160400,160402,160616,160620,160639,160656,160659,160705,160709,160733],[10,159122,159118],{"id":159123},"_3-判断语句",[14,159125,159127],{"id":159126},"_31-布尔值","3.1 布尔值",[19,159129,159130],{},"判断语句依赖布尔值：",[36,159132,159134],{"className":38,"code":159133,"language":40,"meta":41,"style":41},"True\nFalse\n",[43,159135,159136,159141],{"__ignoreMap":41},[46,159137,159138],{"class":48,"line":49},[46,159139,159140],{"class":180},"True\n",[46,159142,159143],{"class":48,"line":60},[46,159144,159145],{"class":180},"False\n",[19,159147,159148],{},"比较表达式会产生布尔值：",[36,159150,159152],{"className":38,"code":159151,"language":40,"meta":41,"style":41},"age = 18\nprint(age >= 18)  # True\n",[43,159153,159154,159162],{"__ignoreMap":41},[46,159155,159156,159158,159160],{"class":48,"line":49},[46,159157,148174],{"class":56},[46,159159,79],{"class":52},[46,159161,148179],{"class":180},[46,159163,159164,159166,159168,159170,159172,159174],{"class":48,"line":60},[46,159165,32398],{"class":180},[46,159167,157396],{"class":56},[46,159169,3750],{"class":52},[46,159171,157913],{"class":180},[46,159173,47779],{"class":56},[46,159175,159176],{"class":2253},"# True\n",[14,159178,159180],{"id":159179},"_32-if基础语法","3.2 if基础语法",[36,159182,159184],{"className":38,"code":159183,"language":40,"meta":41,"style":41},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[43,159185,159186,159204,159208,159220],{"__ignoreMap":41},[46,159187,159188,159190,159192,159194,159196,159198,159200,159202],{"class":48,"line":49},[46,159189,148174],{"class":56},[46,159191,79],{"class":52},[46,159193,4411],{"class":180},[46,159195,1152],{"class":56},[46,159197,55786],{"class":180},[46,159199,1152],{"class":56},[46,159201,154022],{"class":173},[46,159203,32479],{"class":56},[46,159205,159206],{"class":48,"line":60},[46,159207,616],{"emptyLinePlaceholder":615},[46,159209,159210,159212,159214,159216,159218],{"class":48,"line":200},[46,159211,911],{"class":52},[46,159213,17708],{"class":56},[46,159215,3750],{"class":52},[46,159217,157913],{"class":180},[46,159219,760],{"class":56},[46,159221,159222,159224,159226,159229],{"class":48,"line":211},[46,159223,1227],{"class":180},[46,159225,1152],{"class":56},[46,159227,159228],{"class":173},"\"可以进入网吧\"",[46,159230,459],{"class":56},[19,159232,11029],{},[23,159234,159235,159240,159243,159246],{},[26,159236,159237,159239],{},[43,159238,911],{}," 后面是条件表达式。",[26,159241,159242],{},"条件后面必须写冒号。",[26,159244,159245],{},"条件成立时执行缩进代码块。",[26,159247,159248],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[19,159250,159251],{},"错误示例：",[36,159253,159255],{"className":38,"code":159254,"language":40,"meta":41,"style":41},"if age >= 18\n    print(\"可以进入\")\n",[43,159256,159257,159267],{"__ignoreMap":41},[46,159258,159259,159261,159263,159265],{"class":48,"line":49},[46,159260,911],{"class":52},[46,159262,17708],{"class":56},[46,159264,3750],{"class":52},[46,159266,148179],{"class":180},[46,159268,159269,159271,159273,159276],{"class":48,"line":60},[46,159270,1227],{"class":180},[46,159272,1152],{"class":56},[46,159274,159275],{"class":173},"\"可以进入\"",[46,159277,459],{"class":56},[19,159279,159280],{},"缺少冒号。",[14,159282,159284],{"id":159283},"_33-if-else","3.3 if else",[36,159286,159288],{"className":38,"code":159287,"language":40,"meta":41,"style":41},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[43,159289,159290,159308,159312,159324,159335,159341],{"__ignoreMap":41},[46,159291,159292,159294,159296,159298,159300,159302,159304,159306],{"class":48,"line":49},[46,159293,148174],{"class":56},[46,159295,79],{"class":52},[46,159297,4411],{"class":180},[46,159299,1152],{"class":56},[46,159301,55786],{"class":180},[46,159303,1152],{"class":56},[46,159305,154022],{"class":173},[46,159307,32479],{"class":56},[46,159309,159310],{"class":48,"line":60},[46,159311,616],{"emptyLinePlaceholder":615},[46,159313,159314,159316,159318,159320,159322],{"class":48,"line":200},[46,159315,911],{"class":52},[46,159317,17708],{"class":56},[46,159319,3750],{"class":52},[46,159321,157913],{"class":180},[46,159323,760],{"class":56},[46,159325,159326,159328,159330,159333],{"class":48,"line":211},[46,159327,1227],{"class":180},[46,159329,1152],{"class":56},[46,159331,159332],{"class":173},"\"成年人\"",[46,159334,459],{"class":56},[46,159336,159337,159339],{"class":48,"line":222},[46,159338,3741],{"class":52},[46,159340,760],{"class":56},[46,159342,159343,159345,159347,159350],{"class":48,"line":636},[46,159344,1227],{"class":180},[46,159346,1152],{"class":56},[46,159348,159349],{"class":173},"\"未成年人\"",[46,159351,459],{"class":56},[19,159353,159354],{},"执行逻辑：",[23,159356,159357,159363,159368],{},[26,159358,159359,159360,159362],{},"条件成立，执行 ",[43,159361,911],{}," 代码块。",[26,159364,159365,159366,159362],{},"条件不成立，执行 ",[43,159367,3741],{},[26,159369,159370],{},"两个代码块只会执行其中一个。",[14,159372,159374],{"id":159373},"_34-if-elif-else","3.4 if elif else",[19,159376,159377],{},"多条件判断：",[36,159379,159381],{"className":38,"code":159380,"language":40,"meta":41,"style":41},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[43,159382,159383,159401,159405,159419,159430,159444,159455,159468,159479,159485],{"__ignoreMap":41},[46,159384,159385,159387,159389,159391,159393,159395,159397,159399],{"class":48,"line":49},[46,159386,156986],{"class":56},[46,159388,79],{"class":52},[46,159390,4411],{"class":180},[46,159392,1152],{"class":56},[46,159394,55786],{"class":180},[46,159396,1152],{"class":56},[46,159398,154037],{"class":173},[46,159400,32479],{"class":56},[46,159402,159403],{"class":48,"line":60},[46,159404,616],{"emptyLinePlaceholder":615},[46,159406,159407,159409,159412,159414,159417],{"class":48,"line":200},[46,159408,911],{"class":52},[46,159410,159411],{"class":56}," score ",[46,159413,3750],{"class":52},[46,159415,159416],{"class":180}," 90",[46,159418,760],{"class":56},[46,159420,159421,159423,159425,159428],{"class":48,"line":211},[46,159422,1227],{"class":180},[46,159424,1152],{"class":56},[46,159426,159427],{"class":173},"\"优秀\"",[46,159429,459],{"class":56},[46,159431,159432,159435,159437,159439,159442],{"class":48,"line":222},[46,159433,159434],{"class":52},"elif",[46,159436,159411],{"class":56},[46,159438,3750],{"class":52},[46,159440,159441],{"class":180}," 80",[46,159443,760],{"class":56},[46,159445,159446,159448,159450,159453],{"class":48,"line":636},[46,159447,1227],{"class":180},[46,159449,1152],{"class":56},[46,159451,159452],{"class":173},"\"良好\"",[46,159454,459],{"class":56},[46,159456,159457,159459,159461,159463,159466],{"class":48,"line":641},[46,159458,159434],{"class":52},[46,159460,159411],{"class":56},[46,159462,3750],{"class":52},[46,159464,159465],{"class":180}," 60",[46,159467,760],{"class":56},[46,159469,159470,159472,159474,159477],{"class":48,"line":653},[46,159471,1227],{"class":180},[46,159473,1152],{"class":56},[46,159475,159476],{"class":173},"\"及格\"",[46,159478,459],{"class":56},[46,159480,159481,159483],{"class":48,"line":659},[46,159482,3741],{"class":52},[46,159484,760],{"class":56},[46,159486,159487,159489,159491,159494],{"class":48,"line":665},[46,159488,1227],{"class":180},[46,159490,1152],{"class":56},[46,159492,159493],{"class":173},"\"不及格\"",[46,159495,459],{"class":56},[19,159497,159498],{},"注意判断顺序很重要。",[19,159500,159501,159502,159505],{},"如果把 ",[43,159503,159504],{},"score >= 60"," 放在最前面：",[36,159507,159509],{"className":38,"code":159508,"language":40,"meta":41,"style":41},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[43,159510,159511,159523,159533,159545],{"__ignoreMap":41},[46,159512,159513,159515,159517,159519,159521],{"class":48,"line":49},[46,159514,911],{"class":52},[46,159516,159411],{"class":56},[46,159518,3750],{"class":52},[46,159520,159465],{"class":180},[46,159522,760],{"class":56},[46,159524,159525,159527,159529,159531],{"class":48,"line":60},[46,159526,1227],{"class":180},[46,159528,1152],{"class":56},[46,159530,159476],{"class":173},[46,159532,459],{"class":56},[46,159534,159535,159537,159539,159541,159543],{"class":48,"line":200},[46,159536,159434],{"class":52},[46,159538,159411],{"class":56},[46,159540,3750],{"class":52},[46,159542,159416],{"class":180},[46,159544,760],{"class":56},[46,159546,159547,159549,159551,159553],{"class":48,"line":211},[46,159548,1227],{"class":180},[46,159550,1152],{"class":56},[46,159552,159427],{"class":173},[46,159554,459],{"class":56},[19,159556,159557,159558,159560],{},"成绩 95 会先满足 ",[43,159559,159504],{},"，后面的优秀分支就不会执行。",[14,159562,159564],{"id":159563},"_35-判断语句嵌套","3.5 判断语句嵌套",[19,159566,159567],{},"嵌套判断就是在一个判断内部再写判断。",[36,159569,159571],{"className":38,"code":159570,"language":40,"meta":41,"style":41},"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",[43,159572,159573,159591,159606,159610,159622,159636,159646,159653,159664,159670],{"__ignoreMap":41},[46,159574,159575,159577,159579,159581,159583,159585,159587,159589],{"class":48,"line":49},[46,159576,148174],{"class":56},[46,159578,79],{"class":52},[46,159580,4411],{"class":180},[46,159582,1152],{"class":56},[46,159584,55786],{"class":180},[46,159586,1152],{"class":56},[46,159588,154022],{"class":173},[46,159590,32479],{"class":56},[46,159592,159593,159595,159597,159599,159601,159604],{"class":48,"line":60},[46,159594,157989],{"class":56},[46,159596,79],{"class":52},[46,159598,62570],{"class":180},[46,159600,1152],{"class":56},[46,159602,159603],{"class":173},"\"是否有票(y\u002Fn):\"",[46,159605,459],{"class":56},[46,159607,159608],{"class":48,"line":200},[46,159609,616],{"emptyLinePlaceholder":615},[46,159611,159612,159614,159616,159618,159620],{"class":48,"line":211},[46,159613,911],{"class":52},[46,159615,17708],{"class":56},[46,159617,3750],{"class":52},[46,159619,157913],{"class":180},[46,159621,760],{"class":56},[46,159623,159624,159626,159629,159631,159634],{"class":48,"line":222},[46,159625,5121],{"class":52},[46,159627,159628],{"class":56}," has_ticket ",[46,159630,4970],{"class":52},[46,159632,159633],{"class":173}," \"y\"",[46,159635,760],{"class":56},[46,159637,159638,159640,159642,159644],{"class":48,"line":636},[46,159639,34425],{"class":180},[46,159641,1152],{"class":56},[46,159643,159275],{"class":173},[46,159645,459],{"class":56},[46,159647,159648,159651],{"class":48,"line":641},[46,159649,159650],{"class":52},"    else",[46,159652,760],{"class":56},[46,159654,159655,159657,159659,159662],{"class":48,"line":653},[46,159656,34425],{"class":180},[46,159658,1152],{"class":56},[46,159660,159661],{"class":173},"\"请先买票\"",[46,159663,459],{"class":56},[46,159665,159666,159668],{"class":48,"line":659},[46,159667,3741],{"class":52},[46,159669,760],{"class":56},[46,159671,159672,159674,159676,159679],{"class":48,"line":665},[46,159673,1227],{"class":180},[46,159675,1152],{"class":56},[46,159677,159678],{"class":173},"\"未成年人禁止进入\"",[46,159680,459],{"class":56},[19,159682,159683],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,159685,159687],{"id":159686},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[479,159689,159691],{"id":159690},"_361-and","3.6.1 and",[19,159693,159694],{},"两个条件都成立才成立。",[36,159696,159698],{"className":38,"code":159697,"language":40,"meta":41,"style":41},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[43,159699,159700,159708,159716,159720,159735],{"__ignoreMap":41},[46,159701,159702,159704,159706],{"class":48,"line":49},[46,159703,148174],{"class":56},[46,159705,79],{"class":52},[46,159707,90028],{"class":180},[46,159709,159710,159712,159714],{"class":48,"line":60},[46,159711,157989],{"class":56},[46,159713,79],{"class":52},[46,159715,155227],{"class":180},[46,159717,159718],{"class":48,"line":200},[46,159719,616],{"emptyLinePlaceholder":615},[46,159721,159722,159724,159726,159728,159730,159732],{"class":48,"line":211},[46,159723,911],{"class":52},[46,159725,17708],{"class":56},[46,159727,3750],{"class":52},[46,159729,157913],{"class":180},[46,159731,122057],{"class":52},[46,159733,159734],{"class":56}," has_ticket:\n",[46,159736,159737,159739,159741,159743],{"class":48,"line":222},[46,159738,1227],{"class":180},[46,159740,1152],{"class":56},[46,159742,159275],{"class":173},[46,159744,459],{"class":56},[479,159746,159748],{"id":159747},"_362-or","3.6.2 or",[19,159750,159751],{},"只要一个条件成立就成立。",[36,159753,159755],{"className":38,"code":159754,"language":40,"meta":41,"style":41},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[43,159756,159757,159766,159775,159779,159791],{"__ignoreMap":41},[46,159758,159759,159762,159764],{"class":48,"line":49},[46,159760,159761],{"class":56},"is_vip ",[46,159763,79],{"class":52},[46,159765,127435],{"class":180},[46,159767,159768,159771,159773],{"class":48,"line":60},[46,159769,159770],{"class":56},"coupon ",[46,159772,79],{"class":52},[46,159774,155227],{"class":180},[46,159776,159777],{"class":48,"line":200},[46,159778,616],{"emptyLinePlaceholder":615},[46,159780,159781,159783,159786,159788],{"class":48,"line":211},[46,159782,911],{"class":52},[46,159784,159785],{"class":56}," is_vip ",[46,159787,116718],{"class":52},[46,159789,159790],{"class":56}," coupon:\n",[46,159792,159793,159795,159797,159800],{"class":48,"line":222},[46,159794,1227],{"class":180},[46,159796,1152],{"class":56},[46,159798,159799],{"class":173},"\"可以享受优惠\"",[46,159801,459],{"class":56},[479,159803,159805],{"id":159804},"_363-not","3.6.3 not",[19,159807,159808],{},"取反。",[36,159810,159812],{"className":38,"code":159811,"language":40,"meta":41,"style":41},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[43,159813,159814,159823,159827,159836],{"__ignoreMap":41},[46,159815,159816,159819,159821],{"class":48,"line":49},[46,159817,159818],{"class":56},"is_closed ",[46,159820,79],{"class":52},[46,159822,127435],{"class":180},[46,159824,159825],{"class":48,"line":60},[46,159826,616],{"emptyLinePlaceholder":615},[46,159828,159829,159831,159833],{"class":48,"line":200},[46,159830,911],{"class":52},[46,159832,40902],{"class":52},[46,159834,159835],{"class":56}," is_closed:\n",[46,159837,159838,159840,159842,159845],{"class":48,"line":211},[46,159839,1227],{"class":180},[46,159841,1152],{"class":56},[46,159843,159844],{"class":173},"\"店铺营业中\"",[46,159846,459],{"class":56},[14,159848,159850],{"id":159849},"_37-链式比较","3.7 链式比较",[19,159852,159853],{},"Python 支持链式比较：",[36,159855,159857],{"className":38,"code":159856,"language":40,"meta":41,"style":41},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[43,159858,159859,159868,159872,159889],{"__ignoreMap":41},[46,159860,159861,159863,159865],{"class":48,"line":49},[46,159862,156986],{"class":56},[46,159864,79],{"class":52},[46,159866,159867],{"class":180}," 85\n",[46,159869,159870],{"class":48,"line":60},[46,159871,616],{"emptyLinePlaceholder":615},[46,159873,159874,159876,159878,159881,159883,159885,159887],{"class":48,"line":200},[46,159875,911],{"class":52},[46,159877,887],{"class":180},[46,159879,159880],{"class":52}," \u003C=",[46,159882,159411],{"class":56},[46,159884,3639],{"class":52},[46,159886,7767],{"class":180},[46,159888,760],{"class":56},[46,159890,159891,159893,159895,159898],{"class":48,"line":211},[46,159892,1227],{"class":180},[46,159894,1152],{"class":56},[46,159896,159897],{"class":173},"\"成绩合法\"",[46,159899,459],{"class":56},[19,159901,159902],{},"等价于：",[36,159904,159906],{"className":38,"code":159905,"language":40,"meta":41,"style":41},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[43,159907,159908,159928],{"__ignoreMap":41},[46,159909,159910,159912,159914,159916,159918,159920,159922,159924,159926],{"class":48,"line":49},[46,159911,911],{"class":52},[46,159913,159411],{"class":56},[46,159915,3750],{"class":52},[46,159917,887],{"class":180},[46,159919,122057],{"class":52},[46,159921,159411],{"class":56},[46,159923,3639],{"class":52},[46,159925,7767],{"class":180},[46,159927,760],{"class":56},[46,159929,159930,159932,159934,159936],{"class":48,"line":60},[46,159931,1227],{"class":180},[46,159933,1152],{"class":56},[46,159935,159897],{"class":173},[46,159937,459],{"class":56},[14,159939,159941],{"id":159940},"_38-真值和假值","3.8 真值和假值",[19,159943,118095,159944,159946],{},[43,159945,911],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[19,159948,159949],{},"假值：",[36,159951,159953],{"className":38,"code":159952,"language":40,"meta":41,"style":41},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[43,159954,159955,159959,159964,159968,159972,159977,159981,159985,159990],{"__ignoreMap":41},[46,159956,159957],{"class":48,"line":49},[46,159958,159145],{"class":180},[46,159960,159961],{"class":48,"line":60},[46,159962,159963],{"class":180},"None\n",[46,159965,159966],{"class":48,"line":200},[46,159967,5105],{"class":180},[46,159969,159970],{"class":48,"line":211},[46,159971,34317],{"class":180},[46,159973,159974],{"class":48,"line":222},[46,159975,159976],{"class":173},"\"\"\n",[46,159978,159979],{"class":48,"line":636},[46,159980,34332],{"class":56},[46,159982,159983],{"class":48,"line":641},[46,159984,4006],{"class":56},[46,159986,159987],{"class":48,"line":653},[46,159988,159989],{"class":56},"{}\n",[46,159991,159992,159994],{"class":48,"line":659},[46,159993,156918],{"class":180},[46,159995,4006],{"class":56},[19,159997,17136],{},[36,159999,160001],{"className":38,"code":160000,"language":40,"meta":41,"style":41},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[43,160002,160003,160017,160021,160028,160048,160054],{"__ignoreMap":41},[46,160004,160005,160007,160009,160011,160013,160015],{"class":48,"line":49},[46,160006,148164],{"class":56},[46,160008,79],{"class":52},[46,160010,62570],{"class":180},[46,160012,1152],{"class":56},[46,160014,154007],{"class":173},[46,160016,459],{"class":56},[46,160018,160019],{"class":48,"line":60},[46,160020,616],{"emptyLinePlaceholder":615},[46,160022,160023,160025],{"class":48,"line":200},[46,160024,911],{"class":52},[46,160026,160027],{"class":56}," name:\n",[46,160029,160030,160032,160034,160036,160038,160040,160042,160044,160046],{"class":48,"line":211},[46,160031,1227],{"class":180},[46,160033,1152],{"class":56},[46,160035,2247],{"class":52},[46,160037,158682],{"class":173},[46,160039,3082],{"class":180},[46,160041,1653],{"class":56},[46,160043,3131],{"class":180},[46,160045,2439],{"class":173},[46,160047,459],{"class":56},[46,160049,160050,160052],{"class":48,"line":222},[46,160051,3741],{"class":52},[46,160053,760],{"class":56},[46,160055,160056,160058,160060,160063],{"class":48,"line":636},[46,160057,1227],{"class":180},[46,160059,1152],{"class":56},[46,160061,160062],{"class":173},"\"姓名不能为空\"",[46,160064,459],{"class":56},[14,160066,160068],{"id":160067},"_39-match语句","3.9 match语句",[19,160070,160071,160072,160074],{},"Python 3.10 开始支持 ",[43,160073,73230],{},"。它适合处理固定选项。",[36,160076,160078],{"className":38,"code":160077,"language":40,"meta":41,"style":41},"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",[43,160079,160080,160096,160100,160107,160117,160128,160137,160148,160157,160168,160175],{"__ignoreMap":41},[46,160081,160082,160085,160087,160089,160091,160094],{"class":48,"line":49},[46,160083,160084],{"class":56},"command ",[46,160086,79],{"class":52},[46,160088,62570],{"class":180},[46,160090,1152],{"class":56},[46,160092,160093],{"class":173},"\"请输入命令:\"",[46,160095,459],{"class":56},[46,160097,160098],{"class":48,"line":60},[46,160099,616],{"emptyLinePlaceholder":615},[46,160101,160102,160104],{"class":48,"line":200},[46,160103,73230],{"class":52},[46,160105,160106],{"class":56}," command:\n",[46,160108,160109,160112,160115],{"class":48,"line":211},[46,160110,160111],{"class":52},"    case",[46,160113,160114],{"class":173}," \"start\"",[46,160116,760],{"class":56},[46,160118,160119,160121,160123,160126],{"class":48,"line":222},[46,160120,34425],{"class":180},[46,160122,1152],{"class":56},[46,160124,160125],{"class":173},"\"启动\"",[46,160127,459],{"class":56},[46,160129,160130,160132,160135],{"class":48,"line":636},[46,160131,160111],{"class":52},[46,160133,160134],{"class":173}," \"stop\"",[46,160136,760],{"class":56},[46,160138,160139,160141,160143,160146],{"class":48,"line":641},[46,160140,34425],{"class":180},[46,160142,1152],{"class":56},[46,160144,160145],{"class":173},"\"停止\"",[46,160147,459],{"class":56},[46,160149,160150,160152,160155],{"class":48,"line":653},[46,160151,160111],{"class":52},[46,160153,160154],{"class":173}," \"restart\"",[46,160156,760],{"class":56},[46,160158,160159,160161,160163,160166],{"class":48,"line":659},[46,160160,34425],{"class":180},[46,160162,1152],{"class":56},[46,160164,160165],{"class":173},"\"重启\"",[46,160167,459],{"class":56},[46,160169,160170,160172],{"class":48,"line":665},[46,160171,160111],{"class":52},[46,160173,160174],{"class":56}," _:\n",[46,160176,160177,160179,160181,160184],{"class":48,"line":670},[46,160178,34425],{"class":180},[46,160180,1152],{"class":56},[46,160182,160183],{"class":173},"\"未知命令\"",[46,160185,459],{"class":56},[19,160187,160188,160189,160191,160192,160194],{},"入门阶段掌握 ",[43,160190,156286],{}," 更重要，",[43,160193,73230],{}," 可以作为补充。",[14,160196,160198],{"id":160197},"_310-小案例成绩等级","3.10 小案例：成绩等级",[19,160200,124920],{},[23,160202,160203,160206,160209],{},[26,160204,160205],{},"输入成绩。",[26,160207,160208],{},"判断成绩是否合法。",[26,160210,160211],{},"输出等级。",[19,160213,12039],{},[36,160215,160217],{"className":38,"code":160216,"language":40,"meta":41,"style":41},"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",[43,160218,160219,160237,160241,160259,160270,160282,160293,160305,160316,160329,160340,160352,160363,160369],{"__ignoreMap":41},[46,160220,160221,160223,160225,160227,160229,160231,160233,160235],{"class":48,"line":49},[46,160222,156986],{"class":56},[46,160224,79],{"class":52},[46,160226,111425],{"class":180},[46,160228,1152],{"class":56},[46,160230,55786],{"class":180},[46,160232,1152],{"class":56},[46,160234,154037],{"class":173},[46,160236,32479],{"class":56},[46,160238,160239],{"class":48,"line":60},[46,160240,616],{"emptyLinePlaceholder":615},[46,160242,160243,160245,160247,160249,160251,160253,160255,160257],{"class":48,"line":200},[46,160244,911],{"class":52},[46,160246,40902],{"class":52},[46,160248,887],{"class":180},[46,160250,159880],{"class":52},[46,160252,159411],{"class":56},[46,160254,3639],{"class":52},[46,160256,7767],{"class":180},[46,160258,760],{"class":56},[46,160260,160261,160263,160265,160268],{"class":48,"line":211},[46,160262,1227],{"class":180},[46,160264,1152],{"class":56},[46,160266,160267],{"class":173},"\"成绩不合法\"",[46,160269,459],{"class":56},[46,160271,160272,160274,160276,160278,160280],{"class":48,"line":222},[46,160273,159434],{"class":52},[46,160275,159411],{"class":56},[46,160277,3750],{"class":52},[46,160279,159416],{"class":180},[46,160281,760],{"class":56},[46,160283,160284,160286,160288,160291],{"class":48,"line":636},[46,160285,1227],{"class":180},[46,160287,1152],{"class":56},[46,160289,160290],{"class":173},"\"等级:A\"",[46,160292,459],{"class":56},[46,160294,160295,160297,160299,160301,160303],{"class":48,"line":641},[46,160296,159434],{"class":52},[46,160298,159411],{"class":56},[46,160300,3750],{"class":52},[46,160302,159441],{"class":180},[46,160304,760],{"class":56},[46,160306,160307,160309,160311,160314],{"class":48,"line":653},[46,160308,1227],{"class":180},[46,160310,1152],{"class":56},[46,160312,160313],{"class":173},"\"等级:B\"",[46,160315,459],{"class":56},[46,160317,160318,160320,160322,160324,160327],{"class":48,"line":659},[46,160319,159434],{"class":52},[46,160321,159411],{"class":56},[46,160323,3750],{"class":52},[46,160325,160326],{"class":180}," 70",[46,160328,760],{"class":56},[46,160330,160331,160333,160335,160338],{"class":48,"line":665},[46,160332,1227],{"class":180},[46,160334,1152],{"class":56},[46,160336,160337],{"class":173},"\"等级:C\"",[46,160339,459],{"class":56},[46,160341,160342,160344,160346,160348,160350],{"class":48,"line":670},[46,160343,159434],{"class":52},[46,160345,159411],{"class":56},[46,160347,3750],{"class":52},[46,160349,159465],{"class":180},[46,160351,760],{"class":56},[46,160353,160354,160356,160358,160361],{"class":48,"line":676},[46,160355,1227],{"class":180},[46,160357,1152],{"class":56},[46,160359,160360],{"class":173},"\"等级:D\"",[46,160362,459],{"class":56},[46,160364,160365,160367],{"class":48,"line":682},[46,160366,3741],{"class":52},[46,160368,760],{"class":56},[46,160370,160371,160373,160375,160378],{"class":48,"line":688},[46,160372,1227],{"class":180},[46,160374,1152],{"class":56},[46,160376,160377],{"class":173},"\"等级:E\"",[46,160379,459],{"class":56},[14,160381,160383],{"id":160382},"_311-小案例会员折扣","3.11 小案例：会员折扣",[19,160385,124920],{},[23,160387,160388,160391,160394,160397],{},[26,160389,160390],{},"输入消费金额。",[26,160392,160393],{},"输入会员等级，普通、银卡、金卡。",[26,160395,160396],{},"普通不打折，银卡 9 折，金卡 8 折。",[26,160398,160399],{},"满 500 再减 50。",[19,160401,12039],{},[36,160403,160405],{"className":38,"code":160404,"language":40,"meta":41,"style":41},"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",[43,160406,160407,160427,160443,160447,160455,160459,160473,160483,160496,160505,160518,160526,160532,160543,160547,160561,160565,160579,160589,160593],{"__ignoreMap":41},[46,160408,160409,160412,160414,160416,160418,160420,160422,160425],{"class":48,"line":49},[46,160410,160411],{"class":56},"amount ",[46,160413,79],{"class":52},[46,160415,111425],{"class":180},[46,160417,1152],{"class":56},[46,160419,55786],{"class":180},[46,160421,1152],{"class":56},[46,160423,160424],{"class":173},"\"请输入消费金额:\"",[46,160426,32479],{"class":56},[46,160428,160429,160432,160434,160436,160438,160441],{"class":48,"line":60},[46,160430,160431],{"class":56},"level ",[46,160433,79],{"class":52},[46,160435,62570],{"class":180},[46,160437,1152],{"class":56},[46,160439,160440],{"class":173},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[46,160442,459],{"class":56},[46,160444,160445],{"class":48,"line":200},[46,160446,616],{"emptyLinePlaceholder":615},[46,160448,160449,160451,160453],{"class":48,"line":211},[46,160450,158864],{"class":56},[46,160452,79],{"class":52},[46,160454,57664],{"class":180},[46,160456,160457],{"class":48,"line":222},[46,160458,616],{"emptyLinePlaceholder":615},[46,160460,160461,160463,160466,160468,160471],{"class":48,"line":636},[46,160462,911],{"class":52},[46,160464,160465],{"class":56}," level ",[46,160467,4970],{"class":52},[46,160469,160470],{"class":173}," \"银卡\"",[46,160472,760],{"class":56},[46,160474,160475,160478,160480],{"class":48,"line":641},[46,160476,160477],{"class":56},"    discount ",[46,160479,79],{"class":52},[46,160481,160482],{"class":180}," 0.9\n",[46,160484,160485,160487,160489,160491,160494],{"class":48,"line":653},[46,160486,159434],{"class":52},[46,160488,160465],{"class":56},[46,160490,4970],{"class":52},[46,160492,160493],{"class":173}," \"金卡\"",[46,160495,760],{"class":56},[46,160497,160498,160500,160502],{"class":48,"line":659},[46,160499,160477],{"class":56},[46,160501,79],{"class":52},[46,160503,160504],{"class":180}," 0.8\n",[46,160506,160507,160509,160511,160513,160516],{"class":48,"line":665},[46,160508,159434],{"class":52},[46,160510,160465],{"class":56},[46,160512,4970],{"class":52},[46,160514,160515],{"class":173}," \"普通\"",[46,160517,760],{"class":56},[46,160519,160520,160522,160524],{"class":48,"line":670},[46,160521,160477],{"class":56},[46,160523,79],{"class":52},[46,160525,57664],{"class":180},[46,160527,160528,160530],{"class":48,"line":676},[46,160529,3741],{"class":52},[46,160531,760],{"class":56},[46,160533,160534,160536,160538,160541],{"class":48,"line":682},[46,160535,1227],{"class":180},[46,160537,1152],{"class":56},[46,160539,160540],{"class":173},"\"会员等级输入错误，按普通会员计算\"",[46,160542,459],{"class":56},[46,160544,160545],{"class":48,"line":688},[46,160546,616],{"emptyLinePlaceholder":615},[46,160548,160549,160552,160554,160557,160559],{"class":48,"line":693},[46,160550,160551],{"class":56},"pay ",[46,160553,79],{"class":52},[46,160555,160556],{"class":56}," amount ",[46,160558,2642],{"class":52},[46,160560,158903],{"class":56},[46,160562,160563],{"class":48,"line":699},[46,160564,616],{"emptyLinePlaceholder":615},[46,160566,160567,160569,160572,160574,160577],{"class":48,"line":705},[46,160568,911],{"class":52},[46,160570,160571],{"class":56}," pay ",[46,160573,3750],{"class":52},[46,160575,160576],{"class":180}," 500",[46,160578,760],{"class":56},[46,160580,160581,160584,160586],{"class":48,"line":711},[46,160582,160583],{"class":56},"    pay ",[46,160585,151880],{"class":52},[46,160587,160588],{"class":180}," 50\n",[46,160590,160591],{"class":48,"line":717},[46,160592,616],{"emptyLinePlaceholder":615},[46,160594,160595,160597,160599,160601,160603,160605,160608,160610,160612,160614],{"class":48,"line":723},[46,160596,32398],{"class":180},[46,160598,1152],{"class":56},[46,160600,2247],{"class":52},[46,160602,158984],{"class":173},[46,160604,3082],{"class":180},[46,160606,160607],{"class":56},"pay",[46,160609,158787],{"class":52},[46,160611,3131],{"class":180},[46,160613,158640],{"class":173},[46,160615,459],{"class":56},[14,160617,160619],{"id":160618},"_312-易错点","3.12 易错点",[23,160621,160622,160625,160628,160631,160636],{},[26,160623,160624],{},"冒号不能漏。",[26,160626,160627],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[26,160629,160630],{},"多分支判断要注意顺序。",[26,160632,160633,160634,365],{},"判断相等用 ",[43,160635,4970],{},[26,160637,160638],{},"字符串比较区分大小写：",[36,160640,160642],{"className":38,"code":160641,"language":40,"meta":41,"style":41},"\"Y\" == \"y\"  # False\n",[43,160643,160644],{"__ignoreMap":41},[46,160645,160646,160649,160651,160653],{"class":48,"line":49},[46,160647,160648],{"class":173},"\"Y\"",[46,160650,917],{"class":52},[46,160652,159633],{"class":173},[46,160654,160655],{"class":2253},"  # False\n",[19,160657,160658],{},"可转换后再判断：",[36,160660,160662],{"className":38,"code":160661,"language":40,"meta":41,"style":41},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[43,160663,160664,160681,160694],{"__ignoreMap":41},[46,160665,160666,160669,160671,160673,160675,160678],{"class":48,"line":49},[46,160667,160668],{"class":56},"answer ",[46,160670,79],{"class":52},[46,160672,62570],{"class":180},[46,160674,1152],{"class":56},[46,160676,160677],{"class":173},"\"是否继续(y\u002Fn):\"",[46,160679,160680],{"class":56},").lower()\n",[46,160682,160683,160685,160688,160690,160692],{"class":48,"line":60},[46,160684,911],{"class":52},[46,160686,160687],{"class":56}," answer ",[46,160689,4970],{"class":52},[46,160691,159633],{"class":173},[46,160693,760],{"class":56},[46,160695,160696,160698,160700,160703],{"class":48,"line":200},[46,160697,1227],{"class":180},[46,160699,1152],{"class":56},[46,160701,160702],{"class":173},"\"继续\"",[46,160704,459],{"class":56},[14,160706,160708],{"id":160707},"_313-本章练习","3.13 本章练习",[23,160710,160711,160714,160717,160720,160730],{},[26,160712,160713],{},"输入年龄，判断是否成年。",[26,160715,160716],{},"输入年份，判断是否为闰年。",[26,160718,160719],{},"输入三个数字，输出最大值。",[26,160721,160722,160723,160726,160727,160729],{},"写登录判断：用户名是 ",[43,160724,160725],{},"admin"," 且密码是 ",[43,160728,17085],{}," 才登录成功。",[26,160731,160732],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[2098,160734,160735],{},"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":41,"searchDepth":60,"depth":60,"links":160737},[160738,160739,160740,160741,160742,160743,160748,160749,160750,160751,160752,160753,160754],{"id":159126,"depth":60,"text":159127},{"id":159179,"depth":60,"text":159180},{"id":159283,"depth":60,"text":159284},{"id":159373,"depth":60,"text":159374},{"id":159563,"depth":60,"text":159564},{"id":159686,"depth":60,"text":159687,"children":160744},[160745,160746,160747],{"id":159690,"depth":200,"text":159691},{"id":159747,"depth":200,"text":159748},{"id":159804,"depth":200,"text":159805},{"id":159849,"depth":60,"text":159850},{"id":159940,"depth":60,"text":159941},{"id":160067,"depth":60,"text":160068},{"id":160197,"depth":60,"text":160198},{"id":160382,"depth":60,"text":160383},{"id":160618,"depth":60,"text":160619},{"id":160707,"depth":60,"text":160708},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":159118,"description":25378},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":160761,"title":160762,"body":160763,"description":25378,"extension":2125,"meta":162532,"navigation":615,"path":162533,"seo":162534,"stem":162535,"__hash__":162536},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":160764,"toc":162512},[160765,160768,160772,160778,160781,160798,160802,160804,160821,160823,160868,160870,160887,160891,160894,160960,160963,160981,160985,161146,161155,161159,161163,161168,161215,161217,161223,161227,161232,161279,161281,161287,161291,161296,161332,161335,161382,161386,161392,161450,161455,161486,161491,161495,161550,161553,161625,161628,161687,161691,161694,161769,161772,161776,161882,161885,161911,161915,161927,161996,161999,162091,162095,162097,162108,162110,162240,162244,162446,162454,162458,162488,162492,162509],[10,160766,160762],{"id":160767},"_4-循环语句",[14,160769,160771],{"id":160770},"_41-为什么需要循环","4.1 为什么需要循环",[19,160773,160774,160775,160777],{},"如果要输出 1 到 100，不应该写 100 行 ",[43,160776,148100],{},"，而应该用循环。",[19,160779,160780],{},"循环适合处理重复任务：",[23,160782,160783,160786,160789,160792,160795],{},[26,160784,160785],{},"重复输出。",[26,160787,160788],{},"重复输入。",[26,160790,160791],{},"遍历数据。",[26,160793,160794],{},"持续执行菜单。",[26,160796,160797],{},"批量处理文件或数据。",[14,160799,160801],{"id":160800},"_42-while循环","4.2 while循环",[19,160803,7197],{},[36,160805,160807],{"className":38,"code":160806,"language":40,"meta":41,"style":41},"while 条件:\n    循环体\n",[43,160808,160809,160816],{"__ignoreMap":41},[46,160810,160811,160813],{"class":48,"line":49},[46,160812,1329],{"class":52},[46,160814,160815],{"class":56}," 条件:\n",[46,160817,160818],{"class":48,"line":60},[46,160819,160820],{"class":56},"    循环体\n",[19,160822,17136],{},[36,160824,160826],{"className":38,"code":160825,"language":40,"meta":41,"style":41},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[43,160827,160828,160836,160840,160852,160859],{"__ignoreMap":41},[46,160829,160830,160832,160834],{"class":48,"line":49},[46,160831,102109],{"class":56},[46,160833,79],{"class":52},[46,160835,57664],{"class":180},[46,160837,160838],{"class":48,"line":60},[46,160839,616],{"emptyLinePlaceholder":615},[46,160841,160842,160844,160846,160848,160850],{"class":48,"line":200},[46,160843,1329],{"class":52},[46,160845,11442],{"class":56},[46,160847,3639],{"class":52},[46,160849,4178],{"class":180},[46,160851,760],{"class":56},[46,160853,160854,160856],{"class":48,"line":211},[46,160855,1227],{"class":180},[46,160857,160858],{"class":56},"(i)\n",[46,160860,160861,160864,160866],{"class":48,"line":222},[46,160862,160863],{"class":56},"    i ",[46,160865,11481],{"class":52},[46,160867,57664],{"class":180},[19,160869,82893],{},[23,160871,160872,160878,160881,160884],{},[26,160873,160874,160875,365],{},"判断条件 ",[43,160876,160877],{},"i \u003C= 5",[26,160879,160880],{},"条件成立，执行循环体。",[26,160882,160883],{},"执行完后回到条件判断。",[26,160885,160886],{},"条件不成立，退出循环。",[14,160888,160890],{"id":160889},"_43-while累加","4.3 while累加",[19,160892,160893],{},"计算 1 到 100 的和：",[36,160895,160897],{"className":38,"code":160896,"language":40,"meta":41,"style":41},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[43,160898,160899,160907,160915,160919,160931,160941,160949,160953],{"__ignoreMap":41},[46,160900,160901,160903,160905],{"class":48,"line":49},[46,160902,102109],{"class":56},[46,160904,79],{"class":52},[46,160906,57664],{"class":180},[46,160908,160909,160911,160913],{"class":48,"line":60},[46,160910,158888],{"class":56},[46,160912,79],{"class":52},[46,160914,49301],{"class":180},[46,160916,160917],{"class":48,"line":200},[46,160918,616],{"emptyLinePlaceholder":615},[46,160920,160921,160923,160925,160927,160929],{"class":48,"line":211},[46,160922,1329],{"class":52},[46,160924,11442],{"class":56},[46,160926,3639],{"class":52},[46,160928,7767],{"class":180},[46,160930,760],{"class":56},[46,160932,160933,160936,160938],{"class":48,"line":222},[46,160934,160935],{"class":56},"    total ",[46,160937,11481],{"class":52},[46,160939,160940],{"class":56}," i\n",[46,160942,160943,160945,160947],{"class":48,"line":636},[46,160944,160863],{"class":56},[46,160946,11481],{"class":52},[46,160948,57664],{"class":180},[46,160950,160951],{"class":48,"line":641},[46,160952,616],{"emptyLinePlaceholder":615},[46,160954,160955,160957],{"class":48,"line":653},[46,160956,32398],{"class":180},[46,160958,160959],{"class":56},"(total)\n",[19,160961,160962],{},"核心思想：",[23,160964,160965,160970,160975],{},[26,160966,160967,160969],{},[43,160968,2628],{}," 控制循环次数。",[26,160971,160972,160974],{},[43,160973,158989],{}," 保存累加结果。",[26,160976,160977,160978,160980],{},"每轮循环都要更新 ",[43,160979,2628],{},"，否则可能死循环。",[14,160982,160984],{"id":160983},"_44-while猜数字","4.4 while猜数字",[36,160986,160988],{"className":38,"code":160987,"language":40,"meta":41,"style":41},"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",[43,160989,160990,160996,161000,161017,161025,161029,161037,161057,161066,161070,161082,161093,161103,161114,161120,161142],{"__ignoreMap":41},[46,160991,160992,160994],{"class":48,"line":49},[46,160993,53],{"class":52},[46,160995,47299],{"class":56},[46,160997,160998],{"class":48,"line":60},[46,160999,616],{"emptyLinePlaceholder":615},[46,161001,161002,161004,161006,161009,161011,161013,161015],{"class":48,"line":200},[46,161003,160668],{"class":56},[46,161005,79],{"class":52},[46,161007,161008],{"class":56}," random.randint(",[46,161010,2405],{"class":180},[46,161012,448],{"class":56},[46,161014,1155],{"class":180},[46,161016,459],{"class":56},[46,161018,161019,161021,161023],{"class":48,"line":211},[46,161020,148319],{"class":56},[46,161022,79],{"class":52},[46,161024,49301],{"class":180},[46,161026,161027],{"class":48,"line":222},[46,161028,616],{"emptyLinePlaceholder":615},[46,161030,161031,161033,161035],{"class":48,"line":636},[46,161032,1329],{"class":52},[46,161034,97255],{"class":180},[46,161036,760],{"class":56},[46,161038,161039,161042,161044,161046,161048,161050,161052,161055],{"class":48,"line":641},[46,161040,161041],{"class":56},"    guess ",[46,161043,79],{"class":52},[46,161045,4411],{"class":180},[46,161047,1152],{"class":56},[46,161049,55786],{"class":180},[46,161051,1152],{"class":56},[46,161053,161054],{"class":173},"\"请输入1到100之间的数字:\"",[46,161056,32479],{"class":56},[46,161058,161059,161062,161064],{"class":48,"line":653},[46,161060,161061],{"class":56},"    count ",[46,161063,11481],{"class":52},[46,161065,57664],{"class":180},[46,161067,161068],{"class":48,"line":659},[46,161069,616],{"emptyLinePlaceholder":615},[46,161071,161072,161074,161077,161079],{"class":48,"line":665},[46,161073,5121],{"class":52},[46,161075,161076],{"class":56}," guess ",[46,161078,884],{"class":52},[46,161080,161081],{"class":56}," answer:\n",[46,161083,161084,161086,161088,161091],{"class":48,"line":670},[46,161085,34425],{"class":180},[46,161087,1152],{"class":56},[46,161089,161090],{"class":173},"\"猜大了\"",[46,161092,459],{"class":56},[46,161094,161095,161097,161099,161101],{"class":48,"line":676},[46,161096,41265],{"class":52},[46,161098,161076],{"class":56},[46,161100,821],{"class":52},[46,161102,161081],{"class":56},[46,161104,161105,161107,161109,161112],{"class":48,"line":682},[46,161106,34425],{"class":180},[46,161108,1152],{"class":56},[46,161110,161111],{"class":173},"\"猜小了\"",[46,161113,459],{"class":56},[46,161115,161116,161118],{"class":48,"line":688},[46,161117,159650],{"class":52},[46,161119,760],{"class":56},[46,161121,161122,161124,161126,161128,161131,161133,161135,161137,161140],{"class":48,"line":693},[46,161123,34425],{"class":180},[46,161125,1152],{"class":56},[46,161127,2247],{"class":52},[46,161129,161130],{"class":173},"\"猜对了，一共猜了",[46,161132,3082],{"class":180},[46,161134,86397],{"class":56},[46,161136,3131],{"class":180},[46,161138,161139],{"class":173},"次\"",[46,161141,459],{"class":56},[46,161143,161144],{"class":48,"line":699},[46,161145,33604],{"class":52},[19,161147,161148,161151,161152,161154],{},[43,161149,161150],{},"while True"," 表示无限循环，通常配合 ",[43,161153,4083],{}," 使用。",[14,161156,161158],{"id":161157},"_45-break和continue","4.5 break和continue",[479,161160,161162],{"id":161161},"_451-break","4.5.1 break",[19,161164,161165,161167],{},[43,161166,4083],{}," 直接结束整个循环。",[36,161169,161171],{"className":38,"code":161170,"language":40,"meta":41,"style":41},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[43,161172,161173,161193,161205,161209],{"__ignoreMap":41},[46,161174,161175,161177,161179,161181,161183,161185,161187,161189,161191],{"class":48,"line":49},[46,161176,1713],{"class":52},[46,161178,11442],{"class":56},[46,161180,1146],{"class":52},[46,161182,1149],{"class":180},[46,161184,1152],{"class":56},[46,161186,2405],{"class":180},[46,161188,448],{"class":56},[46,161190,2531],{"class":180},[46,161192,1158],{"class":56},[46,161194,161195,161197,161199,161201,161203],{"class":48,"line":60},[46,161196,5121],{"class":52},[46,161198,11442],{"class":56},[46,161200,4970],{"class":52},[46,161202,80035],{"class":180},[46,161204,760],{"class":56},[46,161206,161207],{"class":48,"line":200},[46,161208,33604],{"class":52},[46,161210,161211,161213],{"class":48,"line":211},[46,161212,1227],{"class":180},[46,161214,160858],{"class":56},[19,161216,148085],{},[36,161218,161221],{"className":161219,"code":161220,"language":571,"meta":41},[569],"1\n2\n",[43,161222,161220],{"__ignoreMap":41},[479,161224,161226],{"id":161225},"_452-continue","4.5.2 continue",[19,161228,161229,161231],{},[43,161230,156300],{}," 跳过本轮剩余代码，进入下一轮循环。",[36,161233,161235],{"className":38,"code":161234,"language":40,"meta":41,"style":41},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[43,161236,161237,161257,161269,161273],{"__ignoreMap":41},[46,161238,161239,161241,161243,161245,161247,161249,161251,161253,161255],{"class":48,"line":49},[46,161240,1713],{"class":52},[46,161242,11442],{"class":56},[46,161244,1146],{"class":52},[46,161246,1149],{"class":180},[46,161248,1152],{"class":56},[46,161250,2405],{"class":180},[46,161252,448],{"class":56},[46,161254,2531],{"class":180},[46,161256,1158],{"class":56},[46,161258,161259,161261,161263,161265,161267],{"class":48,"line":60},[46,161260,5121],{"class":52},[46,161262,11442],{"class":56},[46,161264,4970],{"class":52},[46,161266,80035],{"class":180},[46,161268,760],{"class":56},[46,161270,161271],{"class":48,"line":200},[46,161272,150140],{"class":52},[46,161274,161275,161277],{"class":48,"line":211},[46,161276,1227],{"class":180},[46,161278,160858],{"class":56},[19,161280,148085],{},[36,161282,161285],{"className":161283,"code":161284,"language":571,"meta":41},[569],"1\n2\n4\n5\n",[43,161286,161284],{"__ignoreMap":41},[14,161288,161290],{"id":161289},"_46-for循环","4.6 for循环",[19,161292,161293,161295],{},[43,161294,1713],{}," 常用于遍历序列。",[36,161297,161299],{"className":38,"code":161298,"language":40,"meta":41,"style":41},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[43,161300,161301,161310,161314,161325],{"__ignoreMap":41},[46,161302,161303,161305,161307],{"class":48,"line":49},[46,161304,148164],{"class":56},[46,161306,79],{"class":52},[46,161308,161309],{"class":173}," \"python\"\n",[46,161311,161312],{"class":48,"line":60},[46,161313,616],{"emptyLinePlaceholder":615},[46,161315,161316,161318,161321,161323],{"class":48,"line":200},[46,161317,1713],{"class":52},[46,161319,161320],{"class":56}," ch ",[46,161322,1146],{"class":52},[46,161324,160027],{"class":56},[46,161326,161327,161329],{"class":48,"line":211},[46,161328,1227],{"class":180},[46,161330,161331],{"class":56},"(ch)\n",[19,161333,161334],{},"遍历列表：",[36,161336,161338],{"className":38,"code":161337,"language":40,"meta":41,"style":41},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[43,161339,161340,161362,161366,161376],{"__ignoreMap":41},[46,161341,161342,161345,161347,161349,161351,161353,161355,161357,161360],{"class":48,"line":49},[46,161343,161344],{"class":56},"students ",[46,161346,79],{"class":52},[46,161348,54193],{"class":56},[46,161350,151516],{"class":173},[46,161352,448],{"class":56},[46,161354,152564],{"class":173},[46,161356,448],{"class":56},[46,161358,161359],{"class":173},"\"小刚\"",[46,161361,35220],{"class":56},[46,161363,161364],{"class":48,"line":60},[46,161365,616],{"emptyLinePlaceholder":615},[46,161367,161368,161370,161372,161374],{"class":48,"line":200},[46,161369,1713],{"class":52},[46,161371,153765],{"class":56},[46,161373,1146],{"class":52},[46,161375,153770],{"class":56},[46,161377,161378,161380],{"class":48,"line":211},[46,161379,1227],{"class":180},[46,161381,151670],{"class":56},[14,161383,161385],{"id":161384},"_47-range函数","4.7 range函数",[19,161387,161388,161391],{},[43,161389,161390],{},"range()"," 用于生成整数序列。",[36,161393,161395],{"className":38,"code":161394,"language":40,"meta":41,"style":41},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[43,161396,161397,161411,161429],{"__ignoreMap":41},[46,161398,161399,161401,161403,161405,161408],{"class":48,"line":49},[46,161400,35389],{"class":180},[46,161402,1152],{"class":56},[46,161404,2506],{"class":180},[46,161406,161407],{"class":56},")          ",[46,161409,161410],{"class":2253},"# 0,1,2,3,4\n",[46,161412,161413,161415,161417,161419,161421,161423,161426],{"class":48,"line":60},[46,161414,35389],{"class":180},[46,161416,1152],{"class":56},[46,161418,2405],{"class":180},[46,161420,448],{"class":56},[46,161422,2506],{"class":180},[46,161424,161425],{"class":56},")       ",[46,161427,161428],{"class":2253},"# 1,2,3,4\n",[46,161430,161431,161433,161435,161437,161439,161441,161443,161445,161447],{"class":48,"line":200},[46,161432,35389],{"class":180},[46,161434,1152],{"class":56},[46,161436,2405],{"class":180},[46,161438,448],{"class":56},[46,161440,2633],{"class":180},[46,161442,448],{"class":56},[46,161444,2272],{"class":180},[46,161446,157289],{"class":56},[46,161448,161449],{"class":2253},"# 1,3,5,7,9\n",[19,161451,161452,161453,26615],{},"配合 ",[43,161454,1713],{},[36,161456,161458],{"className":38,"code":161457,"language":40,"meta":41,"style":41},"for i in range(1, 6):\n    print(i)\n",[43,161459,161460,161480],{"__ignoreMap":41},[46,161461,161462,161464,161466,161468,161470,161472,161474,161476,161478],{"class":48,"line":49},[46,161463,1713],{"class":52},[46,161465,11442],{"class":56},[46,161467,1146],{"class":52},[46,161469,1149],{"class":180},[46,161471,1152],{"class":56},[46,161473,2405],{"class":180},[46,161475,448],{"class":56},[46,161477,2531],{"class":180},[46,161479,1158],{"class":56},[46,161481,161482,161484],{"class":48,"line":60},[46,161483,1227],{"class":180},[46,161485,160858],{"class":56},[19,161487,11029,161488,161490],{},[43,161489,35389],{}," 的结束值不包含在内。",[14,161492,161494],{"id":161493},"_48-for循环求和","4.8 for循环求和",[36,161496,161498],{"className":38,"code":161497,"language":40,"meta":41,"style":41},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[43,161499,161500,161508,161512,161532,161540,161544],{"__ignoreMap":41},[46,161501,161502,161504,161506],{"class":48,"line":49},[46,161503,158888],{"class":56},[46,161505,79],{"class":52},[46,161507,49301],{"class":180},[46,161509,161510],{"class":48,"line":60},[46,161511,616],{"emptyLinePlaceholder":615},[46,161513,161514,161516,161518,161520,161522,161524,161526,161528,161530],{"class":48,"line":200},[46,161515,1713],{"class":52},[46,161517,11442],{"class":56},[46,161519,1146],{"class":52},[46,161521,1149],{"class":180},[46,161523,1152],{"class":56},[46,161525,2405],{"class":180},[46,161527,448],{"class":56},[46,161529,2524],{"class":180},[46,161531,1158],{"class":56},[46,161533,161534,161536,161538],{"class":48,"line":211},[46,161535,160935],{"class":56},[46,161537,11481],{"class":52},[46,161539,160940],{"class":56},[46,161541,161542],{"class":48,"line":222},[46,161543,616],{"emptyLinePlaceholder":615},[46,161545,161546,161548],{"class":48,"line":636},[46,161547,32398],{"class":180},[46,161549,160959],{"class":56},[19,161551,161552],{},"求偶数和：",[36,161554,161556],{"className":38,"code":161555,"language":40,"meta":41,"style":41},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[43,161557,161558,161566,161570,161590,161606,161615,161619],{"__ignoreMap":41},[46,161559,161560,161562,161564],{"class":48,"line":49},[46,161561,158888],{"class":56},[46,161563,79],{"class":52},[46,161565,49301],{"class":180},[46,161567,161568],{"class":48,"line":60},[46,161569,616],{"emptyLinePlaceholder":615},[46,161571,161572,161574,161576,161578,161580,161582,161584,161586,161588],{"class":48,"line":200},[46,161573,1713],{"class":52},[46,161575,11442],{"class":56},[46,161577,1146],{"class":52},[46,161579,1149],{"class":180},[46,161581,1152],{"class":56},[46,161583,2405],{"class":180},[46,161585,448],{"class":56},[46,161587,2524],{"class":180},[46,161589,1158],{"class":56},[46,161591,161592,161594,161596,161598,161600,161602,161604],{"class":48,"line":211},[46,161593,5121],{"class":52},[46,161595,11442],{"class":56},[46,161597,2515],{"class":52},[46,161599,16757],{"class":180},[46,161601,917],{"class":52},[46,161603,887],{"class":180},[46,161605,760],{"class":56},[46,161607,161608,161611,161613],{"class":48,"line":222},[46,161609,161610],{"class":56},"        total ",[46,161612,11481],{"class":52},[46,161614,160940],{"class":56},[46,161616,161617],{"class":48,"line":636},[46,161618,616],{"emptyLinePlaceholder":615},[46,161620,161621,161623],{"class":48,"line":641},[46,161622,32398],{"class":180},[46,161624,160959],{"class":56},[19,161626,161627],{},"也可以：",[36,161629,161631],{"className":38,"code":161630,"language":40,"meta":41,"style":41},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[43,161632,161633,161641,161645,161669,161677,161681],{"__ignoreMap":41},[46,161634,161635,161637,161639],{"class":48,"line":49},[46,161636,158888],{"class":56},[46,161638,79],{"class":52},[46,161640,49301],{"class":180},[46,161642,161643],{"class":48,"line":60},[46,161644,616],{"emptyLinePlaceholder":615},[46,161646,161647,161649,161651,161653,161655,161657,161659,161661,161663,161665,161667],{"class":48,"line":200},[46,161648,1713],{"class":52},[46,161650,11442],{"class":56},[46,161652,1146],{"class":52},[46,161654,1149],{"class":180},[46,161656,1152],{"class":56},[46,161658,2272],{"class":180},[46,161660,448],{"class":56},[46,161662,2524],{"class":180},[46,161664,448],{"class":56},[46,161666,2272],{"class":180},[46,161668,1158],{"class":56},[46,161670,161671,161673,161675],{"class":48,"line":211},[46,161672,160935],{"class":56},[46,161674,11481],{"class":52},[46,161676,160940],{"class":56},[46,161678,161679],{"class":48,"line":222},[46,161680,616],{"emptyLinePlaceholder":615},[46,161682,161683,161685],{"class":48,"line":636},[46,161684,32398],{"class":180},[46,161686,160959],{"class":56},[14,161688,161690],{"id":161689},"_49-循环嵌套","4.9 循环嵌套",[19,161692,161693],{},"嵌套循环就是循环里面再写循环。",[36,161695,161697],{"className":38,"code":161696,"language":40,"meta":41,"style":41},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[43,161698,161699,161719,161739],{"__ignoreMap":41},[46,161700,161701,161703,161705,161707,161709,161711,161713,161715,161717],{"class":48,"line":49},[46,161702,1713],{"class":52},[46,161704,11442],{"class":56},[46,161706,1146],{"class":52},[46,161708,1149],{"class":180},[46,161710,1152],{"class":56},[46,161712,2405],{"class":180},[46,161714,448],{"class":56},[46,161716,2481],{"class":180},[46,161718,1158],{"class":56},[46,161720,161721,161723,161725,161727,161729,161731,161733,161735,161737],{"class":48,"line":60},[46,161722,1140],{"class":52},[46,161724,11504],{"class":56},[46,161726,1146],{"class":52},[46,161728,1149],{"class":180},[46,161730,1152],{"class":56},[46,161732,2405],{"class":180},[46,161734,448],{"class":56},[46,161736,2481],{"class":180},[46,161738,1158],{"class":56},[46,161740,161741,161743,161745,161747,161750,161752,161754,161756,161759,161761,161763,161765,161767],{"class":48,"line":200},[46,161742,34425],{"class":180},[46,161744,1152],{"class":56},[46,161746,2247],{"class":52},[46,161748,161749],{"class":173},"\"i=",[46,161751,3082],{"class":180},[46,161753,2628],{"class":56},[46,161755,3131],{"class":180},[46,161757,161758],{"class":173},", j=",[46,161760,3082],{"class":180},[46,161762,2654],{"class":56},[46,161764,3131],{"class":180},[46,161766,2439],{"class":173},[46,161768,459],{"class":56},[19,161770,161771],{},"外层循环执行一次，内层循环执行完整一轮。",[14,161773,161775],{"id":161774},"_410-九九乘法表","4.10 九九乘法表",[36,161777,161779],{"className":38,"code":161778,"language":40,"meta":41,"style":41},"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",[43,161780,161781,161801,161824,161876],{"__ignoreMap":41},[46,161782,161783,161785,161787,161789,161791,161793,161795,161797,161799],{"class":48,"line":49},[46,161784,1713],{"class":52},[46,161786,11442],{"class":56},[46,161788,1146],{"class":52},[46,161790,1149],{"class":180},[46,161792,1152],{"class":56},[46,161794,2405],{"class":180},[46,161796,448],{"class":56},[46,161798,2633],{"class":180},[46,161800,1158],{"class":56},[46,161802,161803,161805,161807,161809,161811,161813,161815,161818,161820,161822],{"class":48,"line":60},[46,161804,1140],{"class":52},[46,161806,11504],{"class":56},[46,161808,1146],{"class":52},[46,161810,1149],{"class":180},[46,161812,1152],{"class":56},[46,161814,2405],{"class":180},[46,161816,161817],{"class":56},", i ",[46,161819,2668],{"class":52},[46,161821,27110],{"class":180},[46,161823,1158],{"class":56},[46,161825,161826,161828,161830,161832,161834,161836,161838,161840,161842,161844,161846,161848,161850,161852,161854,161856,161858,161860,161862,161864,161866,161868,161870,161872,161874],{"class":48,"line":200},[46,161827,34425],{"class":180},[46,161829,1152],{"class":56},[46,161831,2247],{"class":52},[46,161833,2439],{"class":173},[46,161835,3082],{"class":180},[46,161837,2654],{"class":56},[46,161839,3131],{"class":180},[46,161841,2642],{"class":173},[46,161843,3082],{"class":180},[46,161845,2628],{"class":56},[46,161847,3131],{"class":180},[46,161849,79],{"class":173},[46,161851,3082],{"class":180},[46,161853,102109],{"class":56},[46,161855,2642],{"class":52},[46,161857,5429],{"class":56},[46,161859,3131],{"class":180},[46,161861,2439],{"class":173},[46,161863,448],{"class":56},[46,161865,47772],{"class":439},[46,161867,79],{"class":52},[46,161869,2439],{"class":173},[46,161871,3285],{"class":180},[46,161873,2439],{"class":173},[46,161875,459],{"class":56},[46,161877,161878,161880],{"class":48,"line":211},[46,161879,1227],{"class":180},[46,161881,4006],{"class":56},[19,161883,161884],{},"关键点：",[23,161886,161887,161893,161899,161905],{},[26,161888,161889,161890,161892],{},"外层 ",[43,161891,2628],{}," 控制行。",[26,161894,161895,161896,161898],{},"内层 ",[43,161897,2654],{}," 控制列。",[26,161900,161901,161902,161904],{},"每行结束后用 ",[43,161903,148100],{}," 换行。",[26,161906,161907,161910],{},[43,161908,161909],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,161912,161914],{"id":161913},"_411-循环else","4.11 循环else",[19,161916,161917,161918,161920,161921,161923,161924,161926],{},"Python 的循环可以带 ",[43,161919,3741],{},"。当循环正常结束时执行 ",[43,161922,3741],{},"，如果被 ",[43,161925,4083],{}," 打断，则不执行。",[36,161928,161930],{"className":38,"code":161929,"language":40,"meta":41,"style":41},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[43,161931,161932,161952,161964,161975,161979,161985],{"__ignoreMap":41},[46,161933,161934,161936,161938,161940,161942,161944,161946,161948,161950],{"class":48,"line":49},[46,161935,1713],{"class":52},[46,161937,11442],{"class":56},[46,161939,1146],{"class":52},[46,161941,1149],{"class":180},[46,161943,1152],{"class":56},[46,161945,2405],{"class":180},[46,161947,448],{"class":56},[46,161949,2531],{"class":180},[46,161951,1158],{"class":56},[46,161953,161954,161956,161958,161960,161962],{"class":48,"line":60},[46,161955,5121],{"class":52},[46,161957,11442],{"class":56},[46,161959,4970],{"class":52},[46,161961,4068],{"class":180},[46,161963,760],{"class":56},[46,161965,161966,161968,161970,161973],{"class":48,"line":200},[46,161967,34425],{"class":180},[46,161969,1152],{"class":56},[46,161971,161972],{"class":173},"\"找到了\"",[46,161974,459],{"class":56},[46,161976,161977],{"class":48,"line":211},[46,161978,33604],{"class":52},[46,161980,161981,161983],{"class":48,"line":222},[46,161982,3741],{"class":52},[46,161984,760],{"class":56},[46,161986,161987,161989,161991,161994],{"class":48,"line":636},[46,161988,1227],{"class":180},[46,161990,1152],{"class":56},[46,161992,161993],{"class":173},"\"没找到\"",[46,161995,459],{"class":56},[19,161997,161998],{},"常用于搜索。",[36,162000,162002],{"className":38,"code":162001,"language":40,"meta":41,"style":41},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[43,162003,162004,162025,162034,162038,162050,162061,162071,162075,162081],{"__ignoreMap":41},[46,162005,162006,162009,162011,162013,162015,162017,162019,162021,162023],{"class":48,"line":49},[46,162007,162008],{"class":56},"names ",[46,162010,79],{"class":52},[46,162012,54193],{"class":56},[46,162014,151516],{"class":173},[46,162016,448],{"class":56},[46,162018,152564],{"class":173},[46,162020,448],{"class":56},[46,162022,161359],{"class":173},[46,162024,35220],{"class":56},[46,162026,162027,162029,162031],{"class":48,"line":60},[46,162028,113206],{"class":56},[46,162030,79],{"class":52},[46,162032,162033],{"class":173}," \"小李\"\n",[46,162035,162036],{"class":48,"line":200},[46,162037,616],{"emptyLinePlaceholder":615},[46,162039,162040,162042,162045,162047],{"class":48,"line":211},[46,162041,1713],{"class":52},[46,162043,162044],{"class":56}," name ",[46,162046,1146],{"class":52},[46,162048,162049],{"class":56}," names:\n",[46,162051,162052,162054,162056,162058],{"class":48,"line":222},[46,162053,5121],{"class":52},[46,162055,162044],{"class":56},[46,162057,4970],{"class":52},[46,162059,162060],{"class":56}," target:\n",[46,162062,162063,162065,162067,162069],{"class":48,"line":636},[46,162064,34425],{"class":180},[46,162066,1152],{"class":56},[46,162068,161972],{"class":173},[46,162070,459],{"class":56},[46,162072,162073],{"class":48,"line":641},[46,162074,33604],{"class":52},[46,162076,162077,162079],{"class":48,"line":653},[46,162078,3741],{"class":52},[46,162080,760],{"class":56},[46,162082,162083,162085,162087,162089],{"class":48,"line":659},[46,162084,1227],{"class":180},[46,162086,1152],{"class":56},[46,162088,161993],{"class":173},[46,162090,459],{"class":56},[14,162092,162094],{"id":162093},"_412-小案例登录重试","4.12 小案例：登录重试",[19,162096,124920],{},[23,162098,162099,162102,162105],{},[26,162100,162101],{},"用户最多输入 3 次密码。",[26,162103,162104],{},"密码正确则登录成功。",[26,162106,162107],{},"3 次都错误则锁定账号。",[19,162109,12039],{},[36,162111,162113],{"className":38,"code":162112,"language":40,"meta":41,"style":41},"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",[43,162114,162115,162125,162129,162145,162161,162165,162177,162188,162192,162198,162223,162229],{"__ignoreMap":41},[46,162116,162117,162120,162122],{"class":48,"line":49},[46,162118,162119],{"class":56},"password ",[46,162121,79],{"class":52},[46,162123,162124],{"class":173}," \"123456\"\n",[46,162126,162127],{"class":48,"line":60},[46,162128,616],{"emptyLinePlaceholder":615},[46,162130,162131,162133,162135,162137,162139,162141,162143],{"class":48,"line":200},[46,162132,1713],{"class":52},[46,162134,11442],{"class":56},[46,162136,1146],{"class":52},[46,162138,1149],{"class":180},[46,162140,1152],{"class":56},[46,162142,2266],{"class":180},[46,162144,1158],{"class":56},[46,162146,162147,162150,162152,162154,162156,162159],{"class":48,"line":211},[46,162148,162149],{"class":56},"    user_password ",[46,162151,79],{"class":52},[46,162153,62570],{"class":180},[46,162155,1152],{"class":56},[46,162157,162158],{"class":173},"\"请输入密码:\"",[46,162160,459],{"class":56},[46,162162,162163],{"class":48,"line":222},[46,162164,616],{"emptyLinePlaceholder":615},[46,162166,162167,162169,162172,162174],{"class":48,"line":636},[46,162168,5121],{"class":52},[46,162170,162171],{"class":56}," user_password ",[46,162173,4970],{"class":52},[46,162175,162176],{"class":56}," password:\n",[46,162178,162179,162181,162183,162186],{"class":48,"line":641},[46,162180,34425],{"class":180},[46,162182,1152],{"class":56},[46,162184,162185],{"class":173},"\"登录成功\"",[46,162187,459],{"class":56},[46,162189,162190],{"class":48,"line":653},[46,162191,33604],{"class":52},[46,162193,162194,162196],{"class":48,"line":659},[46,162195,159650],{"class":52},[46,162197,760],{"class":56},[46,162199,162200,162202,162204,162206,162209,162212,162214,162216,162218,162221],{"class":48,"line":665},[46,162201,34425],{"class":180},[46,162203,1152],{"class":56},[46,162205,2247],{"class":52},[46,162207,162208],{"class":173},"\"密码错误，还剩",[46,162210,162211],{"class":180},"{2",[46,162213,54238],{"class":52},[46,162215,5052],{"class":56},[46,162217,3131],{"class":180},[46,162219,162220],{"class":173},"次机会\"",[46,162222,459],{"class":56},[46,162224,162225,162227],{"class":48,"line":670},[46,162226,3741],{"class":52},[46,162228,760],{"class":56},[46,162230,162231,162233,162235,162238],{"class":48,"line":676},[46,162232,1227],{"class":180},[46,162234,1152],{"class":56},[46,162236,162237],{"class":173},"\"账号已锁定\"",[46,162239,459],{"class":56},[14,162241,162243],{"id":162242},"_413-小案例菜单程序","4.13 小案例：菜单程序",[36,162245,162247],{"className":38,"code":162246,"language":40,"meta":41,"style":41},"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",[43,162248,162249,162257,162268,162279,162290,162301,162312,162316,162331,162335,162347,162358,162370,162381,162393,162404,162416,162426,162430,162436],{"__ignoreMap":41},[46,162250,162251,162253,162255],{"class":48,"line":49},[46,162252,1329],{"class":52},[46,162254,97255],{"class":180},[46,162256,760],{"class":56},[46,162258,162259,162261,162263,162266],{"class":48,"line":60},[46,162260,1227],{"class":180},[46,162262,1152],{"class":56},[46,162264,162265],{"class":173},"\"====== 菜单 ======\"",[46,162267,459],{"class":56},[46,162269,162270,162272,162274,162277],{"class":48,"line":200},[46,162271,1227],{"class":180},[46,162273,1152],{"class":56},[46,162275,162276],{"class":173},"\"1. 查询余额\"",[46,162278,459],{"class":56},[46,162280,162281,162283,162285,162288],{"class":48,"line":211},[46,162282,1227],{"class":180},[46,162284,1152],{"class":56},[46,162286,162287],{"class":173},"\"2. 存款\"",[46,162289,459],{"class":56},[46,162291,162292,162294,162296,162299],{"class":48,"line":222},[46,162293,1227],{"class":180},[46,162295,1152],{"class":56},[46,162297,162298],{"class":173},"\"3. 取款\"",[46,162300,459],{"class":56},[46,162302,162303,162305,162307,162310],{"class":48,"line":636},[46,162304,1227],{"class":180},[46,162306,1152],{"class":56},[46,162308,162309],{"class":173},"\"0. 退出\"",[46,162311,459],{"class":56},[46,162313,162314],{"class":48,"line":641},[46,162315,616],{"emptyLinePlaceholder":615},[46,162317,162318,162321,162323,162325,162327,162329],{"class":48,"line":653},[46,162319,162320],{"class":56},"    choice ",[46,162322,79],{"class":52},[46,162324,62570],{"class":180},[46,162326,1152],{"class":56},[46,162328,154701],{"class":173},[46,162330,459],{"class":56},[46,162332,162333],{"class":48,"line":659},[46,162334,616],{"emptyLinePlaceholder":615},[46,162336,162337,162339,162341,162343,162345],{"class":48,"line":665},[46,162338,5121],{"class":52},[46,162340,154714],{"class":56},[46,162342,4970],{"class":52},[46,162344,154719],{"class":173},[46,162346,760],{"class":56},[46,162348,162349,162351,162353,162356],{"class":48,"line":670},[46,162350,34425],{"class":180},[46,162352,1152],{"class":56},[46,162354,162355],{"class":173},"\"余额为1000元\"",[46,162357,459],{"class":56},[46,162359,162360,162362,162364,162366,162368],{"class":48,"line":676},[46,162361,41265],{"class":52},[46,162363,154714],{"class":56},[46,162365,4970],{"class":52},[46,162367,154738],{"class":173},[46,162369,760],{"class":56},[46,162371,162372,162374,162376,162379],{"class":48,"line":682},[46,162373,34425],{"class":180},[46,162375,1152],{"class":56},[46,162377,162378],{"class":173},"\"存款功能\"",[46,162380,459],{"class":56},[46,162382,162383,162385,162387,162389,162391],{"class":48,"line":688},[46,162384,41265],{"class":52},[46,162386,154714],{"class":56},[46,162388,4970],{"class":52},[46,162390,154756],{"class":173},[46,162392,760],{"class":56},[46,162394,162395,162397,162399,162402],{"class":48,"line":693},[46,162396,34425],{"class":180},[46,162398,1152],{"class":56},[46,162400,162401],{"class":173},"\"取款功能\"",[46,162403,459],{"class":56},[46,162405,162406,162408,162410,162412,162414],{"class":48,"line":699},[46,162407,41265],{"class":52},[46,162409,154714],{"class":56},[46,162411,4970],{"class":52},[46,162413,154810],{"class":173},[46,162415,760],{"class":56},[46,162417,162418,162420,162422,162424],{"class":48,"line":705},[46,162419,34425],{"class":180},[46,162421,1152],{"class":56},[46,162423,154821],{"class":173},[46,162425,459],{"class":56},[46,162427,162428],{"class":48,"line":711},[46,162429,33604],{"class":52},[46,162431,162432,162434],{"class":48,"line":717},[46,162433,159650],{"class":52},[46,162435,760],{"class":56},[46,162437,162438,162440,162442,162444],{"class":48,"line":723},[46,162439,34425],{"class":180},[46,162441,1152],{"class":56},[46,162443,154842],{"class":173},[46,162445,459],{"class":56},[19,162447,162448,162449,162451,162452,365],{},"菜单类程序通常使用 ",[43,162450,161150],{},"，用户选择退出时 ",[43,162453,4083],{},[14,162455,162457],{"id":162456},"_414-易错点","4.14 易错点",[23,162459,162460,162465,162471,162479,162485],{},[26,162461,162462,162464],{},[43,162463,1329],{}," 循环必须更新控制变量。",[26,162466,162467,162470],{},[43,162468,162469],{},"range(1, 10)"," 不包含 10。",[26,162472,162473,162475,162476,162478],{},[43,162474,4083],{}," 结束整个循环，",[43,162477,156300],{}," 只跳过本轮。",[26,162480,162481,162482,162484],{},"嵌套循环中，",[43,162483,4083],{}," 只跳出当前所在的一层循环。",[26,162486,162487],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,162489,162491],{"id":162490},"_415-本章练习","4.15 本章练习",[23,162493,162494,162497,162500,162503,162506],{},[26,162495,162496],{},"输出 1 到 100。",[26,162498,162499],{},"计算 1 到 100 的偶数和。",[26,162501,162502],{},"输出 100 以内能被 3 和 5 同时整除的数。",[26,162504,162505],{},"编写猜数字游戏，限制最多猜 7 次。",[26,162507,162508],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[2098,162510,162511],{},"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":41,"searchDepth":60,"depth":60,"links":162513},[162514,162515,162516,162517,162518,162522,162523,162524,162525,162526,162527,162528,162529,162530,162531],{"id":160770,"depth":60,"text":160771},{"id":160800,"depth":60,"text":160801},{"id":160889,"depth":60,"text":160890},{"id":160983,"depth":60,"text":160984},{"id":161157,"depth":60,"text":161158,"children":162519},[162520,162521],{"id":161161,"depth":200,"text":161162},{"id":161225,"depth":200,"text":161226},{"id":161289,"depth":60,"text":161290},{"id":161384,"depth":60,"text":161385},{"id":161493,"depth":60,"text":161494},{"id":161689,"depth":60,"text":161690},{"id":161774,"depth":60,"text":161775},{"id":161913,"depth":60,"text":161914},{"id":162093,"depth":60,"text":162094},{"id":162242,"depth":60,"text":162243},{"id":162456,"depth":60,"text":162457},{"id":162490,"depth":60,"text":162491},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":160762,"description":25378},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":162538,"title":162539,"body":162540,"description":25378,"extension":2125,"meta":164545,"navigation":615,"path":164546,"seo":164547,"stem":164548,"__hash__":164549},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":162541,"toc":164525},[162542,162545,162549,162552,162555,162569,162572,162586,162590,162592,162611,162613,162660,162662,162676,162680,162754,162757,162761,162764,162823,162831,162834,162887,162890,162894,162899,162954,162962,163012,163016,163021,163029,163128,163134,163138,163143,163146,163157,163198,163211,163215,163218,163254,163257,163270,163273,163333,163337,163341,163344,163395,163399,163402,163449,163455,163521,163524,163528,163531,163647,163650,163654,163657,163763,163767,163770,163808,163811,163853,163856,163916,163919,163923,164387,164390,164394,164421,164427,164488,164492,164522],[10,162543,162539],{"id":162544},"_5-函数基础",[14,162546,162548],{"id":162547},"_51-为什么需要函数","5.1 为什么需要函数",[19,162550,162551],{},"函数用于封装一段可以重复使用的代码。",[19,162553,162554],{},"不使用函数的问题：",[23,162556,162557,162560,162563,162566],{},[26,162558,162559],{},"重复代码多。",[26,162561,162562],{},"修改逻辑时容易漏改。",[26,162564,162565],{},"主流程不清晰。",[26,162567,162568],{},"程序越写越长，难以维护。",[19,162570,162571],{},"使用函数后的好处：",[23,162573,162574,162577,162580,162583],{},[26,162575,162576],{},"提高复用性。",[26,162578,162579],{},"提高可读性。",[26,162581,162582],{},"便于调试。",[26,162584,162585],{},"便于分工。",[14,162587,162589],{"id":162588},"_52-函数定义","5.2 函数定义",[19,162591,7197],{},[36,162593,162595],{"className":38,"code":162594,"language":40,"meta":41,"style":41},"def 函数名():\n    函数体\n",[43,162596,162597,162606],{"__ignoreMap":41},[46,162598,162599,162601,162604],{"class":48,"line":49},[46,162600,748],{"class":52},[46,162602,162603],{"class":169}," 函数名",[46,162605,33928],{"class":56},[46,162607,162608],{"class":48,"line":60},[46,162609,162610],{"class":56},"    函数体\n",[19,162612,17136],{},[36,162614,162616],{"className":38,"code":162615,"language":40,"meta":41,"style":41},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[43,162617,162618,162627,162637,162647,162651,162655],{"__ignoreMap":41},[46,162619,162620,162622,162625],{"class":48,"line":49},[46,162621,748],{"class":52},[46,162623,162624],{"class":169}," say_hello",[46,162626,33928],{"class":56},[46,162628,162629,162631,162633,162635],{"class":48,"line":60},[46,162630,1227],{"class":180},[46,162632,1152],{"class":56},[46,162634,7857],{"class":173},[46,162636,459],{"class":56},[46,162638,162639,162641,162643,162645],{"class":48,"line":200},[46,162640,1227],{"class":180},[46,162642,1152],{"class":56},[46,162644,148267],{"class":173},[46,162646,459],{"class":56},[46,162648,162649],{"class":48,"line":211},[46,162650,616],{"emptyLinePlaceholder":615},[46,162652,162653],{"class":48,"line":222},[46,162654,616],{"emptyLinePlaceholder":615},[46,162656,162657],{"class":48,"line":636},[46,162658,162659],{"class":56},"say_hello()\n",[19,162661,11029],{},[23,162663,162664,162667,162670,162673],{},[26,162665,162666],{},"函数必须先定义，再调用。",[26,162668,162669],{},"函数名遵循变量命名规则。",[26,162671,162672],{},"函数体需要缩进。",[26,162674,162675],{},"函数不调用就不会执行。",[14,162677,162679],{"id":162678},"_53-函数调用","5.3 函数调用",[36,162681,162683],{"className":38,"code":162682,"language":40,"meta":41,"style":41},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[43,162684,162685,162694,162705,162716,162727,162737,162741,162745,162750],{"__ignoreMap":41},[46,162686,162687,162689,162692],{"class":48,"line":49},[46,162688,748],{"class":52},[46,162690,162691],{"class":169}," print_menu",[46,162693,33928],{"class":56},[46,162695,162696,162698,162700,162703],{"class":48,"line":60},[46,162697,1227],{"class":180},[46,162699,1152],{"class":56},[46,162701,162702],{"class":173},"\"1. 查询\"",[46,162704,459],{"class":56},[46,162706,162707,162709,162711,162714],{"class":48,"line":200},[46,162708,1227],{"class":180},[46,162710,1152],{"class":56},[46,162712,162713],{"class":173},"\"2. 添加\"",[46,162715,459],{"class":56},[46,162717,162718,162720,162722,162725],{"class":48,"line":211},[46,162719,1227],{"class":180},[46,162721,1152],{"class":56},[46,162723,162724],{"class":173},"\"3. 删除\"",[46,162726,459],{"class":56},[46,162728,162729,162731,162733,162735],{"class":48,"line":222},[46,162730,1227],{"class":180},[46,162732,1152],{"class":56},[46,162734,162309],{"class":173},[46,162736,459],{"class":56},[46,162738,162739],{"class":48,"line":636},[46,162740,616],{"emptyLinePlaceholder":615},[46,162742,162743],{"class":48,"line":641},[46,162744,616],{"emptyLinePlaceholder":615},[46,162746,162747],{"class":48,"line":653},[46,162748,162749],{"class":56},"print_menu()\n",[46,162751,162752],{"class":48,"line":659},[46,162753,162749],{"class":56},[19,162755,162756],{},"函数可以多次调用，每次调用都会执行函数体。",[14,162758,162760],{"id":162759},"_54-参数","5.4 参数",[19,162762,162763],{},"参数用于向函数传递数据。",[36,162765,162767],{"className":38,"code":162766,"language":40,"meta":41,"style":41},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[43,162768,162769,162778,162798,162802,162806,162815],{"__ignoreMap":41},[46,162770,162771,162773,162775],{"class":48,"line":49},[46,162772,748],{"class":52},[46,162774,162624],{"class":169},[46,162776,162777],{"class":56},"(name):\n",[46,162779,162780,162782,162784,162786,162788,162790,162792,162794,162796],{"class":48,"line":60},[46,162781,1227],{"class":180},[46,162783,1152],{"class":56},[46,162785,2247],{"class":52},[46,162787,158682],{"class":173},[46,162789,3082],{"class":180},[46,162791,1653],{"class":56},[46,162793,3131],{"class":180},[46,162795,2439],{"class":173},[46,162797,459],{"class":56},[46,162799,162800],{"class":48,"line":200},[46,162801,616],{"emptyLinePlaceholder":615},[46,162803,162804],{"class":48,"line":211},[46,162805,616],{"emptyLinePlaceholder":615},[46,162807,162808,162811,162813],{"class":48,"line":222},[46,162809,162810],{"class":56},"say_hello(",[46,162812,151516],{"class":173},[46,162814,459],{"class":56},[46,162816,162817,162819,162821],{"class":48,"line":636},[46,162818,162810],{"class":56},[46,162820,152564],{"class":173},[46,162822,459],{"class":56},[19,162824,162825,162827,162828,162830],{},[43,162826,1653],{}," 是形参，",[43,162829,151516],{}," 是实参。",[19,162832,162833],{},"多个参数：",[36,162835,162837],{"className":38,"code":162836,"language":40,"meta":41,"style":41},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[43,162838,162839,162847,162860,162866,162870,162874],{"__ignoreMap":41},[46,162840,162841,162843,162845],{"class":48,"line":49},[46,162842,748],{"class":52},[46,162844,7223],{"class":169},[46,162846,152721],{"class":56},[46,162848,162849,162852,162854,162856,162858],{"class":48,"line":60},[46,162850,162851],{"class":56},"    result ",[46,162853,79],{"class":52},[46,162855,12873],{"class":56},[46,162857,2668],{"class":52},[46,162859,152732],{"class":56},[46,162861,162862,162864],{"class":48,"line":200},[46,162863,1227],{"class":180},[46,162865,78550],{"class":56},[46,162867,162868],{"class":48,"line":211},[46,162869,616],{"emptyLinePlaceholder":615},[46,162871,162872],{"class":48,"line":222},[46,162873,616],{"emptyLinePlaceholder":615},[46,162875,162876,162879,162881,162883,162885],{"class":48,"line":636},[46,162877,162878],{"class":56},"add(",[46,162880,2633],{"class":180},[46,162882,448],{"class":56},[46,162884,2886],{"class":180},[46,162886,459],{"class":56},[19,162888,162889],{},"调用时参数数量必须匹配。",[14,162891,162893],{"id":162892},"_55-返回值","5.5 返回值",[19,162895,162896,162898],{},[43,162897,19047],{}," 用于把函数内部的结果返回给调用者。",[36,162900,162902],{"className":38,"code":162901,"language":40,"meta":41,"style":41},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[43,162903,162904,162912,162922,162926,162930,162948],{"__ignoreMap":41},[46,162905,162906,162908,162910],{"class":48,"line":49},[46,162907,748],{"class":52},[46,162909,7223],{"class":169},[46,162911,152721],{"class":56},[46,162913,162914,162916,162918,162920],{"class":48,"line":60},[46,162915,6108],{"class":52},[46,162917,12873],{"class":56},[46,162919,2668],{"class":52},[46,162921,152732],{"class":56},[46,162923,162924],{"class":48,"line":200},[46,162925,616],{"emptyLinePlaceholder":615},[46,162927,162928],{"class":48,"line":211},[46,162929,616],{"emptyLinePlaceholder":615},[46,162931,162932,162935,162937,162940,162942,162944,162946],{"class":48,"line":222},[46,162933,162934],{"class":56},"result ",[46,162936,79],{"class":52},[46,162938,162939],{"class":56}," add(",[46,162941,2633],{"class":180},[46,162943,448],{"class":56},[46,162945,2886],{"class":180},[46,162947,459],{"class":56},[46,162949,162950,162952],{"class":48,"line":636},[46,162951,32398],{"class":180},[46,162953,78550],{"class":56},[19,162955,162956,162957,162959,162960,365],{},"如果函数没有写 ",[43,162958,19047],{},"，默认返回 ",[43,162961,757],{},[36,162963,162965],{"className":38,"code":162964,"language":40,"meta":41,"style":41},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[43,162966,162967,162975,162985,162989,162993,163002],{"__ignoreMap":41},[46,162968,162969,162971,162973],{"class":48,"line":49},[46,162970,748],{"class":52},[46,162972,162624],{"class":169},[46,162974,33928],{"class":56},[46,162976,162977,162979,162981,162983],{"class":48,"line":60},[46,162978,1227],{"class":180},[46,162980,1152],{"class":56},[46,162982,7857],{"class":173},[46,162984,459],{"class":56},[46,162986,162987],{"class":48,"line":200},[46,162988,616],{"emptyLinePlaceholder":615},[46,162990,162991],{"class":48,"line":211},[46,162992,616],{"emptyLinePlaceholder":615},[46,162994,162995,162997,162999],{"class":48,"line":222},[46,162996,162934],{"class":56},[46,162998,79],{"class":52},[46,163000,163001],{"class":56}," say_hello()\n",[46,163003,163004,163006,163009],{"class":48,"line":636},[46,163005,32398],{"class":180},[46,163007,163008],{"class":56},"(result)  ",[46,163010,163011],{"class":2253},"# None\n",[14,163013,163015],{"id":163014},"_56-return的作用","5.6 return的作用",[19,163017,163018,163020],{},[43,163019,19047],{}," 有两个作用：",[23,163022,163023,163026],{},[26,163024,163025],{},"返回结果。",[26,163027,163028],{},"结束函数。",[36,163030,163032],{"className":38,"code":163031,"language":40,"meta":41,"style":41},"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",[43,163033,163034,163044,163056,163063,163067,163079,163086,163090,163097,163101,163105,163116],{"__ignoreMap":41},[46,163035,163036,163038,163041],{"class":48,"line":49},[46,163037,748],{"class":52},[46,163039,163040],{"class":169}," check_age",[46,163042,163043],{"class":56},"(age):\n",[46,163045,163046,163048,163050,163052,163054],{"class":48,"line":60},[46,163047,5121],{"class":52},[46,163049,17708],{"class":56},[46,163051,821],{"class":52},[46,163053,887],{"class":180},[46,163055,760],{"class":56},[46,163057,163058,163060],{"class":48,"line":200},[46,163059,16754],{"class":52},[46,163061,163062],{"class":173}," \"年龄不合法\"\n",[46,163064,163065],{"class":48,"line":211},[46,163066,616],{"emptyLinePlaceholder":615},[46,163068,163069,163071,163073,163075,163077],{"class":48,"line":222},[46,163070,5121],{"class":52},[46,163072,17708],{"class":56},[46,163074,3750],{"class":52},[46,163076,157913],{"class":180},[46,163078,760],{"class":56},[46,163080,163081,163083],{"class":48,"line":636},[46,163082,16754],{"class":52},[46,163084,163085],{"class":173}," \"成年人\"\n",[46,163087,163088],{"class":48,"line":641},[46,163089,616],{"emptyLinePlaceholder":615},[46,163091,163092,163094],{"class":48,"line":653},[46,163093,6108],{"class":52},[46,163095,163096],{"class":173}," \"未成年人\"\n",[46,163098,163099],{"class":48,"line":659},[46,163100,616],{"emptyLinePlaceholder":615},[46,163102,163103],{"class":48,"line":665},[46,163104,616],{"emptyLinePlaceholder":615},[46,163106,163107,163109,163112,163114],{"class":48,"line":670},[46,163108,32398],{"class":180},[46,163110,163111],{"class":56},"(check_age(",[46,163113,2886],{"class":180},[46,163115,32479],{"class":56},[46,163117,163118,163120,163122,163124,163126],{"class":48,"line":676},[46,163119,32398],{"class":180},[46,163121,163111],{"class":56},[46,163123,534],{"class":52},[46,163125,2405],{"class":180},[46,163127,32479],{"class":56},[19,163129,163130,163131,163133],{},"函数执行到 ",[43,163132,19047],{}," 后，后面的代码不会继续执行。",[14,163135,163137],{"id":163136},"_57-none","5.7 None",[19,163139,163140,163142],{},[43,163141,757],{}," 表示空值或没有结果。",[19,163144,163145],{},"常见使用场景：",[23,163147,163148,163151,163154],{},[26,163149,163150],{},"函数没有返回值。",[26,163152,163153],{},"变量暂时没有具体值。",[26,163155,163156],{},"表示查询不到结果。",[36,163158,163160],{"className":38,"code":163159,"language":40,"meta":41,"style":41},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[43,163161,163162,163170,163174,163187],{"__ignoreMap":41},[46,163163,163164,163166,163168],{"class":48,"line":49},[46,163165,162934],{"class":56},[46,163167,79],{"class":52},[46,163169,153800],{"class":180},[46,163171,163172],{"class":48,"line":60},[46,163173,616],{"emptyLinePlaceholder":615},[46,163175,163176,163178,163181,163183,163185],{"class":48,"line":200},[46,163177,911],{"class":52},[46,163179,163180],{"class":56}," result ",[46,163182,40899],{"class":52},[46,163184,40905],{"class":180},[46,163186,760],{"class":56},[46,163188,163189,163191,163193,163196],{"class":48,"line":211},[46,163190,1227],{"class":180},[46,163192,1152],{"class":56},[46,163194,163195],{"class":173},"\"没有数据\"",[46,163197,459],{"class":56},[19,163199,163200,163201,163203,163204,163207,163208,365],{},"判断 ",[43,163202,757],{}," 推荐使用 ",[43,163205,163206],{},"is None","，不要写成 ",[43,163209,163210],{},"== None",[14,163212,163214],{"id":163213},"_58-函数文档字符串","5.8 函数文档字符串",[19,163216,163217],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[36,163219,163221],{"className":38,"code":163220,"language":40,"meta":41,"style":41},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[43,163222,163223,163233,163238],{"__ignoreMap":41},[46,163224,163225,163227,163230],{"class":48,"line":49},[46,163226,748],{"class":52},[46,163228,163229],{"class":169}," calculate_bmi",[46,163231,163232],{"class":56},"(weight, height):\n",[46,163234,163235],{"class":48,"line":60},[46,163236,163237],{"class":173},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[46,163239,163240,163242,163245,163247,163250,163252],{"class":48,"line":200},[46,163241,6108],{"class":52},[46,163243,163244],{"class":56}," weight ",[46,163246,2770],{"class":52},[46,163248,163249],{"class":56}," height ",[46,163251,12665],{"class":52},[46,163253,49691],{"class":180},[19,163255,163256],{},"查看说明：",[36,163258,163260],{"className":38,"code":163259,"language":40,"meta":41,"style":41},"help(calculate_bmi)\n",[43,163261,163262],{"__ignoreMap":41},[46,163263,163264,163267],{"class":48,"line":49},[46,163265,163266],{"class":180},"help",[46,163268,163269],{"class":56},"(calculate_bmi)\n",[19,163271,163272],{},"较完整的写法：",[36,163274,163276],{"className":38,"code":163275,"language":40,"meta":41,"style":41},"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",[43,163277,163278,163286,163291,163296,163300,163305,163310,163315,163319],{"__ignoreMap":41},[46,163279,163280,163282,163284],{"class":48,"line":49},[46,163281,748],{"class":52},[46,163283,163229],{"class":169},[46,163285,163232],{"class":56},[46,163287,163288],{"class":48,"line":60},[46,163289,163290],{"class":173},"    \"\"\"\n",[46,163292,163293],{"class":48,"line":200},[46,163294,163295],{"class":173},"    计算BMI。\n",[46,163297,163298],{"class":48,"line":211},[46,163299,616],{"emptyLinePlaceholder":615},[46,163301,163302],{"class":48,"line":222},[46,163303,163304],{"class":173},"    :param weight: 体重，单位kg\n",[46,163306,163307],{"class":48,"line":636},[46,163308,163309],{"class":173},"    :param height: 身高，单位m\n",[46,163311,163312],{"class":48,"line":641},[46,163313,163314],{"class":173},"    :return: BMI数值\n",[46,163316,163317],{"class":48,"line":653},[46,163318,163290],{"class":173},[46,163320,163321,163323,163325,163327,163329,163331],{"class":48,"line":659},[46,163322,6108],{"class":52},[46,163324,163244],{"class":56},[46,163326,2770],{"class":52},[46,163328,163249],{"class":56},[46,163330,12665],{"class":52},[46,163332,49691],{"class":180},[14,163334,163336],{"id":163335},"_59-变量作用域","5.9 变量作用域",[479,163338,163340],{"id":163339},"_591-局部变量","5.9.1 局部变量",[19,163342,163343],{},"在函数内部定义的变量，只能在函数内部使用。",[36,163345,163347],{"className":38,"code":163346,"language":40,"meta":41,"style":41},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[43,163348,163349,163358,163366,163372,163376,163380,163385],{"__ignoreMap":41},[46,163350,163351,163353,163356],{"class":48,"line":49},[46,163352,748],{"class":52},[46,163354,163355],{"class":169}," test",[46,163357,33928],{"class":56},[46,163359,163360,163362,163364],{"class":48,"line":60},[46,163361,47564],{"class":56},[46,163363,79],{"class":52},[46,163365,60393],{"class":180},[46,163367,163368,163370],{"class":48,"line":200},[46,163369,1227],{"class":180},[46,163371,2210],{"class":56},[46,163373,163374],{"class":48,"line":211},[46,163375,616],{"emptyLinePlaceholder":615},[46,163377,163378],{"class":48,"line":222},[46,163379,616],{"emptyLinePlaceholder":615},[46,163381,163382],{"class":48,"line":636},[46,163383,163384],{"class":56},"test()\n",[46,163386,163387,163389,163392],{"class":48,"line":641},[46,163388,32398],{"class":180},[46,163390,163391],{"class":56},"(num)  ",[46,163393,163394],{"class":2253},"# 报错\n",[479,163396,163398],{"id":163397},"_592-全局变量","5.9.2 全局变量",[19,163400,163401],{},"在函数外部定义的变量，可以在函数内部读取。",[36,163403,163405],{"className":38,"code":163404,"language":40,"meta":41,"style":41},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[43,163406,163407,163415,163419,163423,163431,163437,163441,163445],{"__ignoreMap":41},[46,163408,163409,163411,163413],{"class":48,"line":49},[46,163410,148164],{"class":56},[46,163412,79],{"class":52},[46,163414,150981],{"class":173},[46,163416,163417],{"class":48,"line":60},[46,163418,616],{"emptyLinePlaceholder":615},[46,163420,163421],{"class":48,"line":200},[46,163422,616],{"emptyLinePlaceholder":615},[46,163424,163425,163427,163429],{"class":48,"line":211},[46,163426,748],{"class":52},[46,163428,162624],{"class":169},[46,163430,33928],{"class":56},[46,163432,163433,163435],{"class":48,"line":222},[46,163434,1227],{"class":180},[46,163436,152288],{"class":56},[46,163438,163439],{"class":48,"line":636},[46,163440,616],{"emptyLinePlaceholder":615},[46,163442,163443],{"class":48,"line":641},[46,163444,616],{"emptyLinePlaceholder":615},[46,163446,163447],{"class":48,"line":653},[46,163448,162659],{"class":56},[19,163450,163451,163452,365],{},"如果要在函数内部修改全局变量，需要 ",[43,163453,163454],{},"global",[36,163456,163458],{"className":38,"code":163457,"language":40,"meta":41,"style":41},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[43,163459,163460,163468,163472,163476,163485,163493,163501,163505,163509,163514],{"__ignoreMap":41},[46,163461,163462,163464,163466],{"class":48,"line":49},[46,163463,148319],{"class":56},[46,163465,79],{"class":52},[46,163467,49301],{"class":180},[46,163469,163470],{"class":48,"line":60},[46,163471,616],{"emptyLinePlaceholder":615},[46,163473,163474],{"class":48,"line":200},[46,163475,616],{"emptyLinePlaceholder":615},[46,163477,163478,163480,163483],{"class":48,"line":211},[46,163479,748],{"class":52},[46,163481,163482],{"class":169}," add_count",[46,163484,33928],{"class":56},[46,163486,163487,163490],{"class":48,"line":222},[46,163488,163489],{"class":52},"    global",[46,163491,163492],{"class":56}," count\n",[46,163494,163495,163497,163499],{"class":48,"line":636},[46,163496,161061],{"class":56},[46,163498,11481],{"class":52},[46,163500,57664],{"class":180},[46,163502,163503],{"class":48,"line":641},[46,163504,616],{"emptyLinePlaceholder":615},[46,163506,163507],{"class":48,"line":653},[46,163508,616],{"emptyLinePlaceholder":615},[46,163510,163511],{"class":48,"line":659},[46,163512,163513],{"class":56},"add_count()\n",[46,163515,163516,163518],{"class":48,"line":665},[46,163517,32398],{"class":180},[46,163519,163520],{"class":56},"(count)\n",[19,163522,163523],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,163525,163527],{"id":163526},"_510-函数嵌套调用","5.10 函数嵌套调用",[19,163529,163530],{},"一个函数中可以调用另一个函数。",[36,163532,163534],{"className":38,"code":163533,"language":40,"meta":41,"style":41},"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",[43,163535,163536,163545,163559,163563,163567,163576,163581,163601,163622,163626,163630,163634],{"__ignoreMap":41},[46,163537,163538,163540,163543],{"class":48,"line":49},[46,163539,748],{"class":52},[46,163541,163542],{"class":169}," print_line",[46,163544,33928],{"class":56},[46,163546,163547,163549,163551,163553,163555,163557],{"class":48,"line":60},[46,163548,1227],{"class":180},[46,163550,1152],{"class":56},[46,163552,34457],{"class":173},[46,163554,8531],{"class":52},[46,163556,80630],{"class":180},[46,163558,459],{"class":56},[46,163560,163561],{"class":48,"line":200},[46,163562,616],{"emptyLinePlaceholder":615},[46,163564,163565],{"class":48,"line":211},[46,163566,616],{"emptyLinePlaceholder":615},[46,163568,163569,163571,163574],{"class":48,"line":222},[46,163570,748],{"class":52},[46,163572,163573],{"class":169}," print_info",[46,163575,151003],{"class":56},[46,163577,163578],{"class":48,"line":636},[46,163579,163580],{"class":56},"    print_line()\n",[46,163582,163583,163585,163587,163589,163591,163593,163595,163597,163599],{"class":48,"line":641},[46,163584,1227],{"class":180},[46,163586,1152],{"class":56},[46,163588,2247],{"class":52},[46,163590,158310],{"class":173},[46,163592,3082],{"class":180},[46,163594,1653],{"class":56},[46,163596,3131],{"class":180},[46,163598,2439],{"class":173},[46,163600,459],{"class":56},[46,163602,163603,163605,163607,163609,163612,163614,163616,163618,163620],{"class":48,"line":653},[46,163604,1227],{"class":180},[46,163606,1152],{"class":56},[46,163608,2247],{"class":52},[46,163610,163611],{"class":173},"\"年龄:",[46,163613,3082],{"class":180},[46,163615,72186],{"class":56},[46,163617,3131],{"class":180},[46,163619,2439],{"class":173},[46,163621,459],{"class":56},[46,163623,163624],{"class":48,"line":659},[46,163625,163580],{"class":56},[46,163627,163628],{"class":48,"line":665},[46,163629,616],{"emptyLinePlaceholder":615},[46,163631,163632],{"class":48,"line":670},[46,163633,616],{"emptyLinePlaceholder":615},[46,163635,163636,163639,163641,163643,163645],{"class":48,"line":676},[46,163637,163638],{"class":56},"print_info(",[46,163640,151516],{"class":173},[46,163642,448],{"class":56},[46,163644,2836],{"class":180},[46,163646,459],{"class":56},[19,163648,163649],{},"这种方式可以把小功能组合成大功能。",[14,163651,163653],{"id":163652},"_511-参数检查","5.11 参数检查",[19,163655,163656],{},"函数内部可以检查参数是否合法。",[36,163658,163660],{"className":38,"code":163659,"language":40,"meta":41,"style":41},"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",[43,163661,163662,163671,163683,163689,163699,163703,163707,163724,163728,163740,163751,163757],{"__ignoreMap":41},[46,163663,163664,163666,163669],{"class":48,"line":49},[46,163665,748],{"class":52},[46,163667,163668],{"class":169}," divide",[46,163670,152721],{"class":56},[46,163672,163673,163675,163677,163679,163681],{"class":48,"line":60},[46,163674,5121],{"class":52},[46,163676,12886],{"class":56},[46,163678,4970],{"class":52},[46,163680,887],{"class":180},[46,163682,760],{"class":56},[46,163684,163685,163687],{"class":48,"line":200},[46,163686,16754],{"class":52},[46,163688,153800],{"class":180},[46,163690,163691,163693,163695,163697],{"class":48,"line":211},[46,163692,6108],{"class":52},[46,163694,12873],{"class":56},[46,163696,2770],{"class":52},[46,163698,152732],{"class":56},[46,163700,163701],{"class":48,"line":222},[46,163702,616],{"emptyLinePlaceholder":615},[46,163704,163705],{"class":48,"line":636},[46,163706,616],{"emptyLinePlaceholder":615},[46,163708,163709,163711,163713,163716,163718,163720,163722],{"class":48,"line":641},[46,163710,162934],{"class":56},[46,163712,79],{"class":52},[46,163714,163715],{"class":56}," divide(",[46,163717,2633],{"class":180},[46,163719,448],{"class":56},[46,163721,2379],{"class":180},[46,163723,459],{"class":56},[46,163725,163726],{"class":48,"line":653},[46,163727,616],{"emptyLinePlaceholder":615},[46,163729,163730,163732,163734,163736,163738],{"class":48,"line":659},[46,163731,911],{"class":52},[46,163733,163180],{"class":56},[46,163735,40899],{"class":52},[46,163737,40905],{"class":180},[46,163739,760],{"class":56},[46,163741,163742,163744,163746,163749],{"class":48,"line":665},[46,163743,1227],{"class":180},[46,163745,1152],{"class":56},[46,163747,163748],{"class":173},"\"除数不能为0\"",[46,163750,459],{"class":56},[46,163752,163753,163755],{"class":48,"line":670},[46,163754,3741],{"class":52},[46,163756,760],{"class":56},[46,163758,163759,163761],{"class":48,"line":676},[46,163760,1227],{"class":180},[46,163762,78550],{"class":56},[14,163764,163766],{"id":163765},"_512-类型提示","5.12 类型提示",[19,163768,163769],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[36,163771,163773],{"className":38,"code":163772,"language":40,"meta":41,"style":41},"def add(a: int, b: int) -> int:\n    return a + b\n",[43,163774,163775,163798],{"__ignoreMap":41},[46,163776,163777,163779,163781,163784,163786,163789,163791,163794,163796],{"class":48,"line":49},[46,163778,748],{"class":52},[46,163780,7223],{"class":169},[46,163782,163783],{"class":56},"(a: ",[46,163785,2201],{"class":180},[46,163787,163788],{"class":56},", b: ",[46,163790,2201],{"class":180},[46,163792,163793],{"class":56},") -> ",[46,163795,2201],{"class":180},[46,163797,760],{"class":56},[46,163799,163800,163802,163804,163806],{"class":48,"line":60},[46,163801,6108],{"class":52},[46,163803,12873],{"class":56},[46,163805,2668],{"class":52},[46,163807,152732],{"class":56},[19,163809,163810],{},"字符串参数：",[36,163812,163814],{"className":38,"code":163813,"language":40,"meta":41,"style":41},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[43,163815,163816,163833],{"__ignoreMap":41},[46,163817,163818,163820,163822,163825,163827,163829,163831],{"class":48,"line":49},[46,163819,748],{"class":52},[46,163821,162624],{"class":169},[46,163823,163824],{"class":56},"(name: ",[46,163826,3354],{"class":180},[46,163828,163793],{"class":56},[46,163830,757],{"class":180},[46,163832,760],{"class":56},[46,163834,163835,163837,163839,163841,163843,163845,163847,163849,163851],{"class":48,"line":60},[46,163836,1227],{"class":180},[46,163838,1152],{"class":56},[46,163840,2247],{"class":52},[46,163842,158682],{"class":173},[46,163844,3082],{"class":180},[46,163846,1653],{"class":56},[46,163848,3131],{"class":180},[46,163850,2439],{"class":173},[46,163852,459],{"class":56},[19,163854,163855],{},"列表参数：",[36,163857,163859],{"className":38,"code":163858,"language":40,"meta":41,"style":41},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[43,163860,163861,163880,163888,163900,163909],{"__ignoreMap":41},[46,163862,163863,163865,163868,163871,163873,163876,163878],{"class":48,"line":49},[46,163864,748],{"class":52},[46,163866,163867],{"class":169}," get_total",[46,163869,163870],{"class":56},"(numbers: list[",[46,163872,2201],{"class":180},[46,163874,163875],{"class":56},"]) -> ",[46,163877,2201],{"class":180},[46,163879,760],{"class":56},[46,163881,163882,163884,163886],{"class":48,"line":60},[46,163883,160935],{"class":56},[46,163885,79],{"class":52},[46,163887,49301],{"class":180},[46,163889,163890,163892,163895,163897],{"class":48,"line":200},[46,163891,1140],{"class":52},[46,163893,163894],{"class":56}," number ",[46,163896,1146],{"class":52},[46,163898,163899],{"class":56}," numbers:\n",[46,163901,163902,163904,163906],{"class":48,"line":211},[46,163903,161610],{"class":56},[46,163905,11481],{"class":52},[46,163907,163908],{"class":56}," number\n",[46,163910,163911,163913],{"class":48,"line":222},[46,163912,6108],{"class":52},[46,163914,163915],{"class":56}," total\n",[19,163917,163918],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,163920,163922],{"id":163921},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[36,163924,163926],{"className":38,"code":163925,"language":40,"meta":41,"style":41},"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",[43,163927,163928,163938,163942,163946,163954,163965,163975,163985,163995,164005,164009,164013,164022,164044,164048,164052,164061,164067,164087,164099,164110,164114,164123,164134,164139,164143,164147,164156,164162,164181,164193,164203,164207,164218,164228,164232,164240,164251,164255,164259,164263,164271,164276,164290,164294,164306,164311,164323,164328,164340,164345,164357,164367,164371,164377],{"__ignoreMap":41},[46,163929,163930,163933,163935],{"class":48,"line":49},[46,163931,163932],{"class":56},"balance ",[46,163934,79],{"class":52},[46,163936,163937],{"class":180}," 1000\n",[46,163939,163940],{"class":48,"line":60},[46,163941,616],{"emptyLinePlaceholder":615},[46,163943,163944],{"class":48,"line":200},[46,163945,616],{"emptyLinePlaceholder":615},[46,163947,163948,163950,163952],{"class":48,"line":211},[46,163949,748],{"class":52},[46,163951,153661],{"class":169},[46,163953,33928],{"class":56},[46,163955,163956,163958,163960,163963],{"class":48,"line":222},[46,163957,1227],{"class":180},[46,163959,1152],{"class":56},[46,163961,163962],{"class":173},"\"====== ATM ======\"",[46,163964,459],{"class":56},[46,163966,163967,163969,163971,163973],{"class":48,"line":636},[46,163968,1227],{"class":180},[46,163970,1152],{"class":56},[46,163972,162276],{"class":173},[46,163974,459],{"class":56},[46,163976,163977,163979,163981,163983],{"class":48,"line":641},[46,163978,1227],{"class":180},[46,163980,1152],{"class":56},[46,163982,162287],{"class":173},[46,163984,459],{"class":56},[46,163986,163987,163989,163991,163993],{"class":48,"line":653},[46,163988,1227],{"class":180},[46,163990,1152],{"class":56},[46,163992,162298],{"class":173},[46,163994,459],{"class":56},[46,163996,163997,163999,164001,164003],{"class":48,"line":659},[46,163998,1227],{"class":180},[46,164000,1152],{"class":56},[46,164002,162309],{"class":173},[46,164004,459],{"class":56},[46,164006,164007],{"class":48,"line":665},[46,164008,616],{"emptyLinePlaceholder":615},[46,164010,164011],{"class":48,"line":670},[46,164012,616],{"emptyLinePlaceholder":615},[46,164014,164015,164017,164020],{"class":48,"line":676},[46,164016,748],{"class":52},[46,164018,164019],{"class":169}," show_balance",[46,164021,33928],{"class":56},[46,164023,164024,164026,164028,164030,164033,164035,164038,164040,164042],{"class":48,"line":682},[46,164025,1227],{"class":180},[46,164027,1152],{"class":56},[46,164029,2247],{"class":52},[46,164031,164032],{"class":173},"\"当前余额:",[46,164034,3082],{"class":180},[46,164036,164037],{"class":56},"balance",[46,164039,3131],{"class":180},[46,164041,158640],{"class":173},[46,164043,459],{"class":56},[46,164045,164046],{"class":48,"line":688},[46,164047,616],{"emptyLinePlaceholder":615},[46,164049,164050],{"class":48,"line":693},[46,164051,616],{"emptyLinePlaceholder":615},[46,164053,164054,164056,164059],{"class":48,"line":699},[46,164055,748],{"class":52},[46,164057,164058],{"class":169}," save_money",[46,164060,33928],{"class":56},[46,164062,164063,164065],{"class":48,"line":705},[46,164064,163489],{"class":52},[46,164066,151727],{"class":56},[46,164068,164069,164072,164074,164076,164078,164080,164082,164085],{"class":48,"line":711},[46,164070,164071],{"class":56},"    money ",[46,164073,79],{"class":52},[46,164075,111425],{"class":180},[46,164077,1152],{"class":56},[46,164079,55786],{"class":180},[46,164081,1152],{"class":56},[46,164083,164084],{"class":173},"\"请输入存款金额:\"",[46,164086,32479],{"class":56},[46,164088,164089,164091,164093,164095,164097],{"class":48,"line":717},[46,164090,5121],{"class":52},[46,164092,151770],{"class":56},[46,164094,3639],{"class":52},[46,164096,887],{"class":180},[46,164098,760],{"class":56},[46,164100,164101,164103,164105,164108],{"class":48,"line":723},[46,164102,34425],{"class":180},[46,164104,1152],{"class":56},[46,164106,164107],{"class":173},"\"金额必须大于0\"",[46,164109,459],{"class":56},[46,164111,164112],{"class":48,"line":729},[46,164113,153989],{"class":52},[46,164115,164116,164119,164121],{"class":48,"line":735},[46,164117,164118],{"class":56},"    balance ",[46,164120,11481],{"class":52},[46,164122,151803],{"class":56},[46,164124,164125,164127,164129,164132],{"class":48,"line":740},[46,164126,1227],{"class":180},[46,164128,1152],{"class":56},[46,164130,164131],{"class":173},"\"存款成功\"",[46,164133,459],{"class":56},[46,164135,164136],{"class":48,"line":745},[46,164137,164138],{"class":56},"    show_balance()\n",[46,164140,164141],{"class":48,"line":763},[46,164142,616],{"emptyLinePlaceholder":615},[46,164144,164145],{"class":48,"line":778},[46,164146,616],{"emptyLinePlaceholder":615},[46,164148,164149,164151,164154],{"class":48,"line":789},[46,164150,748],{"class":52},[46,164152,164153],{"class":169}," withdraw_money",[46,164155,33928],{"class":56},[46,164157,164158,164160],{"class":48,"line":794},[46,164159,163489],{"class":52},[46,164161,151727],{"class":56},[46,164163,164164,164166,164168,164170,164172,164174,164176,164179],{"class":48,"line":806},[46,164165,164071],{"class":56},[46,164167,79],{"class":52},[46,164169,111425],{"class":180},[46,164171,1152],{"class":56},[46,164173,55786],{"class":180},[46,164175,1152],{"class":56},[46,164177,164178],{"class":173},"\"请输入取款金额:\"",[46,164180,32479],{"class":56},[46,164182,164183,164185,164187,164189,164191],{"class":48,"line":829},[46,164184,5121],{"class":52},[46,164186,151770],{"class":56},[46,164188,3639],{"class":52},[46,164190,887],{"class":180},[46,164192,760],{"class":56},[46,164194,164195,164197,164199,164201],{"class":48,"line":840},[46,164196,34425],{"class":180},[46,164198,1152],{"class":56},[46,164200,164107],{"class":173},[46,164202,459],{"class":56},[46,164204,164205],{"class":48,"line":846},[46,164206,153989],{"class":52},[46,164208,164209,164211,164213,164215],{"class":48,"line":852},[46,164210,5121],{"class":52},[46,164212,151770],{"class":56},[46,164214,884],{"class":52},[46,164216,164217],{"class":56}," balance:\n",[46,164219,164220,164222,164224,164226],{"class":48,"line":857},[46,164221,34425],{"class":180},[46,164223,1152],{"class":56},[46,164225,151865],{"class":173},[46,164227,459],{"class":56},[46,164229,164230],{"class":48,"line":875},[46,164231,153989],{"class":52},[46,164233,164234,164236,164238],{"class":48,"line":892},[46,164235,164118],{"class":56},[46,164237,151880],{"class":52},[46,164239,151803],{"class":56},[46,164241,164242,164244,164246,164249],{"class":48,"line":898},[46,164243,1227],{"class":180},[46,164245,1152],{"class":56},[46,164247,164248],{"class":173},"\"取款成功\"",[46,164250,459],{"class":56},[46,164252,164253],{"class":48,"line":903},[46,164254,164138],{"class":56},[46,164256,164257],{"class":48,"line":908},[46,164258,616],{"emptyLinePlaceholder":615},[46,164260,164261],{"class":48,"line":925},[46,164262,616],{"emptyLinePlaceholder":615},[46,164264,164265,164267,164269],{"class":48,"line":1238},[46,164266,1329],{"class":52},[46,164268,97255],{"class":180},[46,164270,760],{"class":56},[46,164272,164273],{"class":48,"line":1251},[46,164274,164275],{"class":56},"    show_menu()\n",[46,164277,164278,164280,164282,164284,164286,164288],{"class":48,"line":1256},[46,164279,162320],{"class":56},[46,164281,79],{"class":52},[46,164283,62570],{"class":180},[46,164285,1152],{"class":56},[46,164287,154701],{"class":173},[46,164289,459],{"class":56},[46,164291,164292],{"class":48,"line":1261},[46,164293,616],{"emptyLinePlaceholder":615},[46,164295,164296,164298,164300,164302,164304],{"class":48,"line":1274},[46,164297,5121],{"class":52},[46,164299,154714],{"class":56},[46,164301,4970],{"class":52},[46,164303,154719],{"class":173},[46,164305,760],{"class":56},[46,164307,164308],{"class":48,"line":10061},[46,164309,164310],{"class":56},"        show_balance()\n",[46,164312,164313,164315,164317,164319,164321],{"class":48,"line":11720},[46,164314,41265],{"class":52},[46,164316,154714],{"class":56},[46,164318,4970],{"class":52},[46,164320,154738],{"class":173},[46,164322,760],{"class":56},[46,164324,164325],{"class":48,"line":11745},[46,164326,164327],{"class":56},"        save_money()\n",[46,164329,164330,164332,164334,164336,164338],{"class":48,"line":11768},[46,164331,41265],{"class":52},[46,164333,154714],{"class":56},[46,164335,4970],{"class":52},[46,164337,154756],{"class":173},[46,164339,760],{"class":56},[46,164341,164342],{"class":48,"line":11792},[46,164343,164344],{"class":56},"        withdraw_money()\n",[46,164346,164347,164349,164351,164353,164355],{"class":48,"line":11797},[46,164348,41265],{"class":52},[46,164350,154714],{"class":56},[46,164352,4970],{"class":52},[46,164354,154810],{"class":173},[46,164356,760],{"class":56},[46,164358,164359,164361,164363,164365],{"class":48,"line":11802},[46,164360,34425],{"class":180},[46,164362,1152],{"class":56},[46,164364,154821],{"class":173},[46,164366,459],{"class":56},[46,164368,164369],{"class":48,"line":11807},[46,164370,33604],{"class":52},[46,164372,164373,164375],{"class":48,"line":11816},[46,164374,159650],{"class":52},[46,164376,760],{"class":56},[46,164378,164379,164381,164383,164385],{"class":48,"line":11821},[46,164380,34425],{"class":180},[46,164382,1152],{"class":56},[46,164384,154842],{"class":173},[46,164386,459],{"class":56},[19,164388,164389],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,164391,164393],{"id":164392},"_514-易错点","5.14 易错点",[23,164395,164396,164399,164402,164407,164412,164415],{},[26,164397,164398],{},"函数定义后必须调用才会执行。",[26,164400,164401],{},"函数名后面有括号才是调用。",[26,164403,164404,164406],{},[43,164405,19047],{}," 后面的代码不会执行。",[26,164408,164409,164410,365],{},"没有返回值的函数默认返回 ",[43,164411,757],{},[26,164413,164414],{},"局部变量不能在函数外部访问。",[26,164416,164417,164418,164420],{},"不要滥用 ",[43,164419,163454],{},"，更好的方式是让函数返回新值。",[19,164422,164423,164424,164426],{},"例如不用 ",[43,164425,163454],{}," 改写存款：",[36,164428,164430],{"className":38,"code":164429,"language":40,"meta":41,"style":41},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[43,164431,164432,164441,164452,164456,164460,164468,164481],{"__ignoreMap":41},[46,164433,164434,164436,164438],{"class":48,"line":49},[46,164435,748],{"class":52},[46,164437,164058],{"class":169},[46,164439,164440],{"class":56},"(balance, money):\n",[46,164442,164443,164445,164448,164450],{"class":48,"line":60},[46,164444,6108],{"class":52},[46,164446,164447],{"class":56}," balance ",[46,164449,2668],{"class":52},[46,164451,151803],{"class":56},[46,164453,164454],{"class":48,"line":200},[46,164455,616],{"emptyLinePlaceholder":615},[46,164457,164458],{"class":48,"line":211},[46,164459,616],{"emptyLinePlaceholder":615},[46,164461,164462,164464,164466],{"class":48,"line":222},[46,164463,163932],{"class":56},[46,164465,79],{"class":52},[46,164467,163937],{"class":180},[46,164469,164470,164472,164474,164477,164479],{"class":48,"line":636},[46,164471,163932],{"class":56},[46,164473,79],{"class":52},[46,164475,164476],{"class":56}," save_money(balance, ",[46,164478,3762],{"class":180},[46,164480,459],{"class":56},[46,164482,164483,164485],{"class":48,"line":641},[46,164484,32398],{"class":180},[46,164486,164487],{"class":56},"(balance)\n",[14,164489,164491],{"id":164490},"_515-本章练习","5.15 本章练习",[23,164493,164494,164501,164507,164513,164519],{},[26,164495,164496,164497,164500],{},"定义函数 ",[43,164498,164499],{},"print_student(name, age)","，输出学生信息。",[26,164502,164496,164503,164506],{},[43,164504,164505],{},"get_max(a, b, c)","，返回三个数中的最大值。",[26,164508,164496,164509,164512],{},[43,164510,164511],{},"is_even(num)","，判断一个数是否为偶数。",[26,164514,164496,164515,164518],{},[43,164516,164517],{},"calculate_bmi(weight, height)","，返回 BMI。",[26,164520,164521],{},"把第 4 章的菜单程序拆分成多个函数。",[2098,164523,164524],{},"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":41,"searchDepth":60,"depth":60,"links":164526},[164527,164528,164529,164530,164531,164532,164533,164534,164535,164539,164540,164541,164542,164543,164544],{"id":162547,"depth":60,"text":162548},{"id":162588,"depth":60,"text":162589},{"id":162678,"depth":60,"text":162679},{"id":162759,"depth":60,"text":162760},{"id":162892,"depth":60,"text":162893},{"id":163014,"depth":60,"text":163015},{"id":163136,"depth":60,"text":163137},{"id":163213,"depth":60,"text":163214},{"id":163335,"depth":60,"text":163336,"children":164536},[164537,164538],{"id":163339,"depth":200,"text":163340},{"id":163397,"depth":200,"text":163398},{"id":163526,"depth":60,"text":163527},{"id":163652,"depth":60,"text":163653},{"id":163765,"depth":60,"text":163766},{"id":163921,"depth":60,"text":163922},{"id":164392,"depth":60,"text":164393},{"id":164490,"depth":60,"text":164491},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":162539,"description":25378},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":164551,"title":164552,"body":164553,"description":25378,"extension":2125,"meta":167597,"navigation":615,"path":167598,"seo":167599,"stem":167600,"__hash__":167601},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":164554,"toc":167578},[164555,164558,164562,164565,164568,164672,164675,164679,164682,164762,164765,164769,164772,164832,164835,164871,164874,164889,164893,164966,164969,165024,165027,165097,165100,165184,165194,165252,165256,165301,165304,165330,165333,165439,165443,165446,165488,165491,165555,165558,165562,165565,165626,165629,165659,165662,165700,165704,165707,165716,165719,165843,165846,165887,165891,165894,165905,165945,165948,165963,165968,165971,166038,166041,166131,166135,166138,166186,166189,166216,166218,166248,166251,166271,166274,166305,166308,166341,166345,166348,166372,166375,166399,166402,166426,166430,166433,166563,166566,166646,166649,166724,166728,166731,166781,166784,166826,166829,166853,166855,166879,166882,166937,166940,167006,167010,167013,167016,167054,167057,167110,167113,167159,167162,167195,167198,167202,167521,167525,167554,167558,167575],[10,164556,164552],{"id":164557},"_6-数据容器",[14,164559,164561],{"id":164560},"_61-什么是数据容器","6.1 什么是数据容器",[19,164563,164564],{},"数据容器用于一次保存多个数据。",[19,164566,164567],{},"常见容器：",[97,164569,164570,164587],{},[100,164571,164572],{},[103,164573,164574,164576,164579,164582,164585],{},[106,164575,27763],{},[106,164577,164578],{},"是否有序",[106,164580,164581],{},"是否可变",[106,164583,164584],{},"是否允许重复",[106,164586,29481],{},[120,164588,164589,164607,164623,164638,164655],{},[103,164590,164591,164594,164597,164600,164603],{},[125,164592,164593],{},"list列表",[125,164595,164596],{},"有序",[125,164598,164599],{},"可变",[125,164601,164602],{},"允许",[125,164604,164605],{},[43,164606,156885],{},[103,164608,164609,164612,164614,164617,164619],{},[125,164610,164611],{},"tuple元组",[125,164613,164596],{},[125,164615,164616],{},"不可变",[125,164618,164602],{},[125,164620,164621],{},[43,164622,156898],{},[103,164624,164625,164628,164630,164632,164634],{},[125,164626,164627],{},"str字符串",[125,164629,164596],{},[125,164631,164616],{},[125,164633,164602],{},[125,164635,164636],{},[43,164637,157508],{},[103,164639,164640,164643,164646,164648,164651],{},[125,164641,164642],{},"set集合",[125,164644,164645],{},"无序",[125,164647,164599],{},[125,164649,164650],{},"不允许",[125,164652,164653],{},[43,164654,156923],{},[103,164656,164657,164660,164662,164664,164667],{},[125,164658,164659],{},"dict字典",[125,164661,164596],{},[125,164663,164599],{},[125,164665,164666],{},"key不允许重复",[125,164668,164669],{},[43,164670,164671],{},"{\"name\": \"小明\"}",[19,164673,164674],{},"Python 3.7 之后，字典保持插入顺序。",[14,164676,164678],{"id":164677},"_62-列表list","6.2 列表list",[19,164680,164681],{},"列表用于保存一组有顺序的数据。",[36,164683,164685],{"className":38,"code":164684,"language":40,"meta":41,"style":41},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[43,164686,164687,164707,164732,164753],{"__ignoreMap":41},[46,164688,164689,164691,164693,164695,164697,164699,164701,164703,164705],{"class":48,"line":49},[46,164690,162008],{"class":56},[46,164692,79],{"class":52},[46,164694,54193],{"class":56},[46,164696,151516],{"class":173},[46,164698,448],{"class":56},[46,164700,152564],{"class":173},[46,164702,448],{"class":56},[46,164704,161359],{"class":173},[46,164706,35220],{"class":56},[46,164708,164709,164712,164714,164716,164718,164720,164722,164724,164726,164728,164730],{"class":48,"line":60},[46,164710,164711],{"class":56},"numbers ",[46,164713,79],{"class":52},[46,164715,54193],{"class":56},[46,164717,2405],{"class":180},[46,164719,448],{"class":56},[46,164721,2272],{"class":180},[46,164723,448],{"class":56},[46,164725,2266],{"class":180},[46,164727,448],{"class":56},[46,164729,2481],{"class":180},[46,164731,35220],{"class":56},[46,164733,164734,164737,164739,164741,164743,164745,164747,164749,164751],{"class":48,"line":200},[46,164735,164736],{"class":56},"mixed ",[46,164738,79],{"class":52},[46,164740,54193],{"class":56},[46,164742,151516],{"class":173},[46,164744,448],{"class":56},[46,164746,2836],{"class":180},[46,164748,448],{"class":56},[46,164750,33453],{"class":180},[46,164752,35220],{"class":56},[46,164754,164755,164758,164760],{"class":48,"line":211},[46,164756,164757],{"class":56},"empty ",[46,164759,79],{"class":52},[46,164761,53805],{"class":56},[19,164763,164764],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,164766,164768],{"id":164767},"_63-列表索引","6.3 列表索引",[19,164770,164771],{},"正向索引从 0 开始：",[36,164773,164775],{"className":38,"code":164774,"language":40,"meta":41,"style":41},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[43,164776,164777,164797,164801,164812,164822],{"__ignoreMap":41},[46,164778,164779,164781,164783,164785,164787,164789,164791,164793,164795],{"class":48,"line":49},[46,164780,162008],{"class":56},[46,164782,79],{"class":52},[46,164784,54193],{"class":56},[46,164786,151516],{"class":173},[46,164788,448],{"class":56},[46,164790,152564],{"class":173},[46,164792,448],{"class":56},[46,164794,161359],{"class":173},[46,164796,35220],{"class":56},[46,164798,164799],{"class":48,"line":60},[46,164800,616],{"emptyLinePlaceholder":615},[46,164802,164803,164805,164808,164810],{"class":48,"line":200},[46,164804,32398],{"class":180},[46,164806,164807],{"class":56},"(names[",[46,164809,2379],{"class":180},[46,164811,6673],{"class":56},[46,164813,164814,164816,164818,164820],{"class":48,"line":211},[46,164815,32398],{"class":180},[46,164817,164807],{"class":56},[46,164819,2405],{"class":180},[46,164821,6673],{"class":56},[46,164823,164824,164826,164828,164830],{"class":48,"line":222},[46,164825,32398],{"class":180},[46,164827,164807],{"class":56},[46,164829,2272],{"class":180},[46,164831,6673],{"class":56},[19,164833,164834],{},"反向索引从 -1 开始：",[36,164836,164838],{"className":38,"code":164837,"language":40,"meta":41,"style":41},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[43,164839,164840,164856],{"__ignoreMap":41},[46,164841,164842,164844,164846,164848,164850,164853],{"class":48,"line":49},[46,164843,32398],{"class":180},[46,164845,164807],{"class":56},[46,164847,534],{"class":52},[46,164849,2405],{"class":180},[46,164851,164852],{"class":56},"])  ",[46,164854,164855],{"class":2253},"# 小刚\n",[46,164857,164858,164860,164862,164864,164866,164868],{"class":48,"line":60},[46,164859,32398],{"class":180},[46,164861,164807],{"class":56},[46,164863,534],{"class":52},[46,164865,2272],{"class":180},[46,164867,164852],{"class":56},[46,164869,164870],{"class":2253},"# 小红\n",[19,164872,164873],{},"索引越界会报错：",[36,164875,164877],{"className":38,"code":164876,"language":40,"meta":41,"style":41},"print(names[3])\n",[43,164878,164879],{"__ignoreMap":41},[46,164880,164881,164883,164885,164887],{"class":48,"line":49},[46,164882,32398],{"class":180},[46,164884,164807],{"class":56},[46,164886,2266],{"class":180},[46,164888,6673],{"class":56},[14,164890,164892],{"id":164891},"_64-列表常用方法","6.4 列表常用方法",[36,164894,164896],{"className":38,"code":164895,"language":40,"meta":41,"style":41},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[43,164897,164898,164914,164918,164927,164941,164955,164959],{"__ignoreMap":41},[46,164899,164900,164902,164904,164906,164908,164910,164912],{"class":48,"line":49},[46,164901,162008],{"class":56},[46,164903,79],{"class":52},[46,164905,54193],{"class":56},[46,164907,151516],{"class":173},[46,164909,448],{"class":56},[46,164911,152564],{"class":173},[46,164913,35220],{"class":56},[46,164915,164916],{"class":48,"line":60},[46,164917,616],{"emptyLinePlaceholder":615},[46,164919,164920,164923,164925],{"class":48,"line":200},[46,164921,164922],{"class":56},"names.append(",[46,164924,161359],{"class":173},[46,164926,459],{"class":56},[46,164928,164929,164932,164934,164936,164939],{"class":48,"line":211},[46,164930,164931],{"class":56},"names.insert(",[46,164933,2405],{"class":180},[46,164935,448],{"class":56},[46,164937,164938],{"class":173},"\"小李\"",[46,164940,459],{"class":56},[46,164942,164943,164946,164948,164950,164953],{"class":48,"line":222},[46,164944,164945],{"class":56},"names.extend([",[46,164947,10687],{"class":173},[46,164949,448],{"class":56},[46,164951,164952],{"class":173},"\"小赵\"",[46,164954,6673],{"class":56},[46,164956,164957],{"class":48,"line":636},[46,164958,616],{"emptyLinePlaceholder":615},[46,164960,164961,164963],{"class":48,"line":641},[46,164962,32398],{"class":180},[46,164964,164965],{"class":56},"(names)\n",[19,164967,164968],{},"删除元素：",[36,164970,164972],{"className":38,"code":164971,"language":40,"meta":41,"style":41},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[43,164973,164974,164983,164993,165007,165019],{"__ignoreMap":41},[46,164975,164976,164979,164981],{"class":48,"line":49},[46,164977,164978],{"class":56},"names.remove(",[46,164980,152564],{"class":173},[46,164982,459],{"class":56},[46,164984,164985,164988,164990],{"class":48,"line":60},[46,164986,164987],{"class":56},"last ",[46,164989,79],{"class":52},[46,164991,164992],{"class":56}," names.pop()\n",[46,164994,164995,164998,165000,165003,165005],{"class":48,"line":200},[46,164996,164997],{"class":56},"first ",[46,164999,79],{"class":52},[46,165001,165002],{"class":56}," names.pop(",[46,165004,2379],{"class":180},[46,165006,459],{"class":56},[46,165008,165009,165012,165015,165017],{"class":48,"line":211},[46,165010,165011],{"class":52},"del",[46,165013,165014],{"class":56}," names[",[46,165016,2379],{"class":180},[46,165018,35220],{"class":56},[46,165020,165021],{"class":48,"line":222},[46,165022,165023],{"class":56},"names.clear()\n",[19,165025,165026],{},"查询和统计：",[36,165028,165030],{"className":38,"code":165029,"language":40,"meta":41,"style":41},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[43,165031,165032,165060,165064,165075,165086],{"__ignoreMap":41},[46,165033,165034,165036,165038,165040,165042,165044,165046,165048,165050,165052,165054,165056,165058],{"class":48,"line":49},[46,165035,164711],{"class":56},[46,165037,79],{"class":52},[46,165039,54193],{"class":56},[46,165041,2405],{"class":180},[46,165043,448],{"class":56},[46,165045,2272],{"class":180},[46,165047,448],{"class":56},[46,165049,2266],{"class":180},[46,165051,448],{"class":56},[46,165053,2272],{"class":180},[46,165055,448],{"class":56},[46,165057,2481],{"class":180},[46,165059,35220],{"class":56},[46,165061,165062],{"class":48,"line":60},[46,165063,616],{"emptyLinePlaceholder":615},[46,165065,165066,165068,165071,165073],{"class":48,"line":200},[46,165067,32398],{"class":180},[46,165069,165070],{"class":56},"(numbers.index(",[46,165072,2266],{"class":180},[46,165074,32479],{"class":56},[46,165076,165077,165079,165082,165084],{"class":48,"line":211},[46,165078,32398],{"class":180},[46,165080,165081],{"class":56},"(numbers.count(",[46,165083,2272],{"class":180},[46,165085,32479],{"class":56},[46,165087,165088,165090,165092,165094],{"class":48,"line":222},[46,165089,32398],{"class":180},[46,165091,1152],{"class":56},[46,165093,9371],{"class":180},[46,165095,165096],{"class":56},"(numbers))\n",[19,165098,165099],{},"排序：",[36,165101,165103],{"className":38,"code":165102,"language":40,"meta":41,"style":41},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[43,165104,165105,165129,165133,165138,165145,165149,165163,165169,165173,165178],{"__ignoreMap":41},[46,165106,165107,165109,165111,165113,165115,165117,165119,165121,165123,165125,165127],{"class":48,"line":49},[46,165108,164711],{"class":56},[46,165110,79],{"class":52},[46,165112,54193],{"class":56},[46,165114,2266],{"class":180},[46,165116,448],{"class":56},[46,165118,2405],{"class":180},[46,165120,448],{"class":56},[46,165122,2506],{"class":180},[46,165124,448],{"class":56},[46,165126,2272],{"class":180},[46,165128,35220],{"class":56},[46,165130,165131],{"class":48,"line":60},[46,165132,616],{"emptyLinePlaceholder":615},[46,165134,165135],{"class":48,"line":200},[46,165136,165137],{"class":56},"numbers.sort()\n",[46,165139,165140,165142],{"class":48,"line":211},[46,165141,32398],{"class":180},[46,165143,165144],{"class":56},"(numbers)\n",[46,165146,165147],{"class":48,"line":222},[46,165148,616],{"emptyLinePlaceholder":615},[46,165150,165151,165154,165157,165159,165161],{"class":48,"line":636},[46,165152,165153],{"class":56},"numbers.sort(",[46,165155,165156],{"class":439},"reverse",[46,165158,79],{"class":52},[46,165160,33453],{"class":180},[46,165162,459],{"class":56},[46,165164,165165,165167],{"class":48,"line":641},[46,165166,32398],{"class":180},[46,165168,165144],{"class":56},[46,165170,165171],{"class":48,"line":653},[46,165172,616],{"emptyLinePlaceholder":615},[46,165174,165175],{"class":48,"line":659},[46,165176,165177],{"class":56},"numbers.reverse()\n",[46,165179,165180,165182],{"class":48,"line":665},[46,165181,32398],{"class":180},[46,165183,165144],{"class":56},[19,165185,165186,165189,165190,165193],{},[43,165187,165188],{},"sort()"," 会修改原列表，",[43,165191,165192],{},"sorted()"," 返回新列表。",[36,165195,165197],{"className":38,"code":165196,"language":40,"meta":41,"style":41},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[43,165198,165199,165223,165235,165239,165245],{"__ignoreMap":41},[46,165200,165201,165203,165205,165207,165209,165211,165213,165215,165217,165219,165221],{"class":48,"line":49},[46,165202,164711],{"class":56},[46,165204,79],{"class":52},[46,165206,54193],{"class":56},[46,165208,2266],{"class":180},[46,165210,448],{"class":56},[46,165212,2405],{"class":180},[46,165214,448],{"class":56},[46,165216,2506],{"class":180},[46,165218,448],{"class":56},[46,165220,2272],{"class":180},[46,165222,35220],{"class":56},[46,165224,165225,165228,165230,165233],{"class":48,"line":60},[46,165226,165227],{"class":56},"new_numbers ",[46,165229,79],{"class":52},[46,165231,165232],{"class":180}," sorted",[46,165234,165144],{"class":56},[46,165236,165237],{"class":48,"line":200},[46,165238,616],{"emptyLinePlaceholder":615},[46,165240,165241,165243],{"class":48,"line":211},[46,165242,32398],{"class":180},[46,165244,165144],{"class":56},[46,165246,165247,165249],{"class":48,"line":222},[46,165248,32398],{"class":180},[46,165250,165251],{"class":56},"(new_numbers)\n",[14,165253,165255],{"id":165254},"_65-列表遍历","6.5 列表遍历",[36,165257,165259],{"className":38,"code":165258,"language":40,"meta":41,"style":41},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[43,165260,165261,165281,165285,165295],{"__ignoreMap":41},[46,165262,165263,165265,165267,165269,165271,165273,165275,165277,165279],{"class":48,"line":49},[46,165264,162008],{"class":56},[46,165266,79],{"class":52},[46,165268,54193],{"class":56},[46,165270,151516],{"class":173},[46,165272,448],{"class":56},[46,165274,152564],{"class":173},[46,165276,448],{"class":56},[46,165278,161359],{"class":173},[46,165280,35220],{"class":56},[46,165282,165283],{"class":48,"line":60},[46,165284,616],{"emptyLinePlaceholder":615},[46,165286,165287,165289,165291,165293],{"class":48,"line":200},[46,165288,1713],{"class":52},[46,165290,162044],{"class":56},[46,165292,1146],{"class":52},[46,165294,162049],{"class":56},[46,165296,165297,165299],{"class":48,"line":211},[46,165298,1227],{"class":180},[46,165300,152288],{"class":56},[19,165302,165303],{},"需要索引时：",[36,165305,165307],{"className":38,"code":165306,"language":40,"meta":41,"style":41},"for index, name in enumerate(names):\n    print(index, name)\n",[43,165308,165309,165323],{"__ignoreMap":41},[46,165310,165311,165313,165316,165318,165320],{"class":48,"line":49},[46,165312,1713],{"class":52},[46,165314,165315],{"class":56}," index, name ",[46,165317,1146],{"class":52},[46,165319,33583],{"class":180},[46,165321,165322],{"class":56},"(names):\n",[46,165324,165325,165327],{"class":48,"line":60},[46,165326,1227],{"class":180},[46,165328,165329],{"class":56},"(index, name)\n",[19,165331,165332],{},"统计总分：",[36,165334,165336],{"className":38,"code":165335,"language":40,"meta":41,"style":41},"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",[43,165337,165338,165363,165371,165375,165386,165394,165398,165415],{"__ignoreMap":41},[46,165339,165340,165343,165345,165347,165349,165351,165353,165355,165357,165359,165361],{"class":48,"line":49},[46,165341,165342],{"class":56},"scores ",[46,165344,79],{"class":52},[46,165346,54193],{"class":56},[46,165348,3048],{"class":180},[46,165350,448],{"class":56},[46,165352,2922],{"class":180},[46,165354,448],{"class":56},[46,165356,2442],{"class":180},[46,165358,448],{"class":56},[46,165360,2747],{"class":180},[46,165362,35220],{"class":56},[46,165364,165365,165367,165369],{"class":48,"line":60},[46,165366,158888],{"class":56},[46,165368,79],{"class":52},[46,165370,49301],{"class":180},[46,165372,165373],{"class":48,"line":200},[46,165374,616],{"emptyLinePlaceholder":615},[46,165376,165377,165379,165381,165383],{"class":48,"line":211},[46,165378,1713],{"class":52},[46,165380,159411],{"class":56},[46,165382,1146],{"class":52},[46,165384,165385],{"class":56}," scores:\n",[46,165387,165388,165390,165392],{"class":48,"line":222},[46,165389,160935],{"class":56},[46,165391,11481],{"class":52},[46,165393,3630],{"class":56},[46,165395,165396],{"class":48,"line":636},[46,165397,616],{"emptyLinePlaceholder":615},[46,165399,165400,165403,165405,165408,165410,165412],{"class":48,"line":641},[46,165401,165402],{"class":56},"avg ",[46,165404,79],{"class":52},[46,165406,165407],{"class":56}," total ",[46,165409,2770],{"class":52},[46,165411,9344],{"class":180},[46,165413,165414],{"class":56},"(scores)\n",[46,165416,165417,165419,165421,165423,165426,165428,165431,165433,165435,165437],{"class":48,"line":653},[46,165418,32398],{"class":180},[46,165420,1152],{"class":56},[46,165422,2247],{"class":52},[46,165424,165425],{"class":173},"\"平均分:",[46,165427,3082],{"class":180},[46,165429,165430],{"class":56},"avg",[46,165432,158787],{"class":52},[46,165434,3131],{"class":180},[46,165436,2439],{"class":173},[46,165438,459],{"class":56},[14,165440,165442],{"id":165441},"_66-元组tuple","6.6 元组tuple",[19,165444,165445],{},"元组和列表类似，但不可修改。",[36,165447,165449],{"className":38,"code":165448,"language":40,"meta":41,"style":41},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[43,165450,165451,165468],{"__ignoreMap":41},[46,165452,165453,165456,165458,165460,165462,165464,165466],{"class":48,"line":49},[46,165454,165455],{"class":56},"point ",[46,165457,79],{"class":52},[46,165459,3702],{"class":56},[46,165461,2633],{"class":180},[46,165463,448],{"class":56},[46,165465,2886],{"class":180},[46,165467,459],{"class":56},[46,165469,165470,165472,165474,165476,165478,165480,165482,165484,165486],{"class":48,"line":60},[46,165471,117942],{"class":56},[46,165473,79],{"class":52},[46,165475,3702],{"class":56},[46,165477,151516],{"class":173},[46,165479,448],{"class":56},[46,165481,2836],{"class":180},[46,165483,448],{"class":56},[46,165485,71234],{"class":173},[46,165487,459],{"class":56},[19,165489,165490],{},"单元素元组必须加逗号：",[36,165492,165494],{"className":38,"code":165493,"language":40,"meta":41,"style":41},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[43,165495,165496,165510,165523,165527,165541],{"__ignoreMap":41},[46,165497,165498,165501,165503,165505,165507],{"class":48,"line":49},[46,165499,165500],{"class":56},"t1 ",[46,165502,79],{"class":52},[46,165504,3702],{"class":56},[46,165506,2633],{"class":180},[46,165508,165509],{"class":56},",)\n",[46,165511,165512,165515,165517,165519,165521],{"class":48,"line":60},[46,165513,165514],{"class":56},"t2 ",[46,165516,79],{"class":52},[46,165518,3702],{"class":56},[46,165520,2633],{"class":180},[46,165522,459],{"class":56},[46,165524,165525],{"class":48,"line":200},[46,165526,616],{"emptyLinePlaceholder":615},[46,165528,165529,165531,165533,165535,165538],{"class":48,"line":211},[46,165530,32398],{"class":180},[46,165532,1152],{"class":56},[46,165534,104997],{"class":180},[46,165536,165537],{"class":56},"(t1))  ",[46,165539,165540],{"class":2253},"# tuple\n",[46,165542,165543,165545,165547,165549,165552],{"class":48,"line":222},[46,165544,32398],{"class":180},[46,165546,1152],{"class":56},[46,165548,104997],{"class":180},[46,165550,165551],{"class":56},"(t2))  ",[46,165553,165554],{"class":2253},"# int\n",[19,165556,165557],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,165559,165561],{"id":165560},"_67-字符串str","6.7 字符串str",[19,165563,165564],{},"字符串也是序列，可以索引、切片和遍历。",[36,165566,165568],{"className":38,"code":165567,"language":40,"meta":41,"style":41},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[43,165569,165570,165578,165582,165593,165605,165609,165620],{"__ignoreMap":41},[46,165571,165572,165574,165576],{"class":48,"line":49},[46,165573,158072],{"class":56},[46,165575,79],{"class":52},[46,165577,161309],{"class":173},[46,165579,165580],{"class":48,"line":60},[46,165581,616],{"emptyLinePlaceholder":615},[46,165583,165584,165586,165589,165591],{"class":48,"line":200},[46,165585,32398],{"class":180},[46,165587,165588],{"class":56},"(text[",[46,165590,2379],{"class":180},[46,165592,6673],{"class":56},[46,165594,165595,165597,165599,165601,165603],{"class":48,"line":211},[46,165596,32398],{"class":180},[46,165598,165588],{"class":56},[46,165600,534],{"class":52},[46,165602,2405],{"class":180},[46,165604,6673],{"class":56},[46,165606,165607],{"class":48,"line":222},[46,165608,616],{"emptyLinePlaceholder":615},[46,165610,165611,165613,165615,165617],{"class":48,"line":636},[46,165612,1713],{"class":52},[46,165614,161320],{"class":56},[46,165616,1146],{"class":52},[46,165618,165619],{"class":56}," text:\n",[46,165621,165622,165624],{"class":48,"line":641},[46,165623,1227],{"class":180},[46,165625,161331],{"class":56},[19,165627,165628],{},"字符串不可变：",[36,165630,165632],{"className":38,"code":165631,"language":40,"meta":41,"style":41},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[43,165633,165634,165642],{"__ignoreMap":41},[46,165635,165636,165638,165640],{"class":48,"line":49},[46,165637,158072],{"class":56},[46,165639,79],{"class":52},[46,165641,161309],{"class":173},[46,165643,165644,165647,165649,165651,165653,165656],{"class":48,"line":60},[46,165645,165646],{"class":56},"text[",[46,165648,2379],{"class":180},[46,165650,6460],{"class":56},[46,165652,79],{"class":52},[46,165654,165655],{"class":173}," \"P\"",[46,165657,165658],{"class":2253},"  # 报错\n",[19,165660,165661],{},"如果要得到新字符串：",[36,165663,165665],{"className":38,"code":165664,"language":40,"meta":41,"style":41},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[43,165666,165667,165675,165693],{"__ignoreMap":41},[46,165668,165669,165671,165673],{"class":48,"line":49},[46,165670,158072],{"class":56},[46,165672,79],{"class":52},[46,165674,161309],{"class":173},[46,165676,165677,165679,165681,165683,165685,165688,165690],{"class":48,"line":60},[46,165678,158072],{"class":56},[46,165680,79],{"class":52},[46,165682,165655],{"class":173},[46,165684,47537],{"class":52},[46,165686,165687],{"class":56}," text[",[46,165689,2405],{"class":180},[46,165691,165692],{"class":56},":]\n",[46,165694,165695,165697],{"class":48,"line":200},[46,165696,32398],{"class":180},[46,165698,165699],{"class":56},"(text)\n",[14,165701,165703],{"id":165702},"_68-切片","6.8 切片",[19,165705,165706],{},"切片用于从序列中取一部分。",[36,165708,165710],{"className":38,"code":165709,"language":40,"meta":41,"style":41},"序列[开始:结束:步长]\n",[43,165711,165712],{"__ignoreMap":41},[46,165713,165714],{"class":48,"line":49},[46,165715,165709],{"class":56},[19,165717,165718],{},"结束位置不包含。",[36,165720,165722],{"className":38,"code":165721,"language":40,"meta":41,"style":41},"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",[43,165723,165724,165761,165765,165784,165799,165813,165827],{"__ignoreMap":41},[46,165725,165726,165729,165731,165733,165735,165737,165739,165741,165743,165745,165747,165749,165751,165753,165755,165757,165759],{"class":48,"line":49},[46,165727,165728],{"class":56},"nums ",[46,165730,79],{"class":52},[46,165732,54193],{"class":56},[46,165734,2379],{"class":180},[46,165736,448],{"class":56},[46,165738,2405],{"class":180},[46,165740,448],{"class":56},[46,165742,2272],{"class":180},[46,165744,448],{"class":56},[46,165746,2266],{"class":180},[46,165748,448],{"class":56},[46,165750,2481],{"class":180},[46,165752,448],{"class":56},[46,165754,2506],{"class":180},[46,165756,448],{"class":56},[46,165758,2531],{"class":180},[46,165760,35220],{"class":56},[46,165762,165763],{"class":48,"line":60},[46,165764,616],{"emptyLinePlaceholder":615},[46,165766,165767,165769,165772,165774,165776,165778,165781],{"class":48,"line":200},[46,165768,32398],{"class":180},[46,165770,165771],{"class":56},"(nums[",[46,165773,2405],{"class":180},[46,165775,3045],{"class":56},[46,165777,2481],{"class":180},[46,165779,165780],{"class":56},"])    ",[46,165782,165783],{"class":2253},"# [1, 2, 3]\n",[46,165785,165786,165788,165791,165793,165796],{"class":48,"line":211},[46,165787,32398],{"class":180},[46,165789,165790],{"class":56},"(nums[:",[46,165792,2266],{"class":180},[46,165794,165795],{"class":56},"])     ",[46,165797,165798],{"class":2253},"# [0, 1, 2]\n",[46,165800,165801,165803,165805,165807,165810],{"class":48,"line":222},[46,165802,32398],{"class":180},[46,165804,165771],{"class":56},[46,165806,2266],{"class":180},[46,165808,165809],{"class":56},":])     ",[46,165811,165812],{"class":2253},"# [3, 4, 5, 6]\n",[46,165814,165815,165817,165820,165822,165824],{"class":48,"line":636},[46,165816,32398],{"class":180},[46,165818,165819],{"class":56},"(nums[::",[46,165821,2272],{"class":180},[46,165823,165780],{"class":56},[46,165825,165826],{"class":2253},"# [0, 2, 4, 6]\n",[46,165828,165829,165831,165833,165835,165837,165840],{"class":48,"line":641},[46,165830,32398],{"class":180},[46,165832,165819],{"class":56},[46,165834,534],{"class":52},[46,165836,2405],{"class":180},[46,165838,165839],{"class":56},"])   ",[46,165841,165842],{"class":2253},"# 反转\n",[19,165844,165845],{},"字符串切片：",[36,165847,165849],{"className":38,"code":165848,"language":40,"meta":41,"style":41},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[43,165850,165851,165860,165874],{"__ignoreMap":41},[46,165852,165853,165855,165857],{"class":48,"line":49},[46,165854,158072],{"class":56},[46,165856,79],{"class":52},[46,165858,165859],{"class":173}," \"abcdef\"\n",[46,165861,165862,165864,165866,165868,165870,165872],{"class":48,"line":60},[46,165863,32398],{"class":180},[46,165865,165588],{"class":56},[46,165867,2405],{"class":180},[46,165869,3045],{"class":56},[46,165871,2481],{"class":180},[46,165873,6673],{"class":56},[46,165875,165876,165878,165881,165883,165885],{"class":48,"line":200},[46,165877,32398],{"class":180},[46,165879,165880],{"class":56},"(text[::",[46,165882,534],{"class":52},[46,165884,2405],{"class":180},[46,165886,6673],{"class":56},[14,165888,165890],{"id":165889},"_69-集合set","6.9 集合set",[19,165892,165893],{},"集合特点：",[23,165895,165896,165899,165902],{},[26,165897,165898],{},"无序。",[26,165900,165901],{},"元素不重复。",[26,165903,165904],{},"可以做交集、并集、差集。",[36,165906,165908],{"className":38,"code":165907,"language":40,"meta":41,"style":41},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[43,165909,165910,165938],{"__ignoreMap":41},[46,165911,165912,165914,165916,165918,165920,165922,165924,165926,165928,165930,165932,165934,165936],{"class":48,"line":49},[46,165913,165728],{"class":56},[46,165915,79],{"class":52},[46,165917,6465],{"class":56},[46,165919,2405],{"class":180},[46,165921,448],{"class":56},[46,165923,2272],{"class":180},[46,165925,448],{"class":56},[46,165927,2266],{"class":180},[46,165929,448],{"class":56},[46,165931,2266],{"class":180},[46,165933,448],{"class":56},[46,165935,2481],{"class":180},[46,165937,3616],{"class":56},[46,165939,165940,165942],{"class":48,"line":60},[46,165941,32398],{"class":180},[46,165943,165944],{"class":56},"(nums)\n",[19,165946,165947],{},"创建空集合：",[36,165949,165951],{"className":38,"code":165950,"language":40,"meta":41,"style":41},"s = set()\n",[43,165952,165953],{"__ignoreMap":41},[46,165954,165955,165957,165959,165961],{"class":48,"line":49},[46,165956,12583],{"class":56},[46,165958,79],{"class":52},[46,165960,121350],{"class":180},[46,165962,4006],{"class":56},[19,165964,11029,165965,165967],{},[43,165966,34433],{}," 是空字典，不是空集合。",[19,165969,165970],{},"集合常用操作：",[36,165972,165974],{"className":38,"code":165973,"language":40,"meta":41,"style":41},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[43,165975,165976,165996,166000,166009,166018,166027],{"__ignoreMap":41},[46,165977,165978,165980,165982,165984,165986,165988,165990,165992,165994],{"class":48,"line":49},[46,165979,12583],{"class":56},[46,165981,79],{"class":52},[46,165983,6465],{"class":56},[46,165985,2405],{"class":180},[46,165987,448],{"class":56},[46,165989,2272],{"class":180},[46,165991,448],{"class":56},[46,165993,2266],{"class":180},[46,165995,3616],{"class":56},[46,165997,165998],{"class":48,"line":60},[46,165999,616],{"emptyLinePlaceholder":615},[46,166001,166002,166005,166007],{"class":48,"line":200},[46,166003,166004],{"class":56},"s.add(",[46,166006,2481],{"class":180},[46,166008,459],{"class":56},[46,166010,166011,166014,166016],{"class":48,"line":211},[46,166012,166013],{"class":56},"s.remove(",[46,166015,2272],{"class":180},[46,166017,459],{"class":56},[46,166019,166020,166023,166025],{"class":48,"line":222},[46,166021,166022],{"class":56},"s.discard(",[46,166024,2633],{"class":180},[46,166026,459],{"class":56},[46,166028,166029,166031,166033,166035],{"class":48,"line":636},[46,166030,32398],{"class":180},[46,166032,1152],{"class":56},[46,166034,9371],{"class":180},[46,166036,166037],{"class":56},"(s))\n",[19,166039,166040],{},"交并差：",[36,166042,166044],{"className":38,"code":166043,"language":40,"meta":41,"style":41},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[43,166045,166046,166066,166086,166090,166105,166118],{"__ignoreMap":41},[46,166047,166048,166050,166052,166054,166056,166058,166060,166062,166064],{"class":48,"line":49},[46,166049,12923],{"class":56},[46,166051,79],{"class":52},[46,166053,6465],{"class":56},[46,166055,2405],{"class":180},[46,166057,448],{"class":56},[46,166059,2272],{"class":180},[46,166061,448],{"class":56},[46,166063,2266],{"class":180},[46,166065,3616],{"class":56},[46,166067,166068,166070,166072,166074,166076,166078,166080,166082,166084],{"class":48,"line":60},[46,166069,12949],{"class":56},[46,166071,79],{"class":52},[46,166073,6465],{"class":56},[46,166075,2266],{"class":180},[46,166077,448],{"class":56},[46,166079,2481],{"class":180},[46,166081,448],{"class":56},[46,166083,2506],{"class":180},[46,166085,3616],{"class":56},[46,166087,166088],{"class":48,"line":200},[46,166089,616],{"emptyLinePlaceholder":615},[46,166091,166092,166094,166097,166099,166102],{"class":48,"line":211},[46,166093,32398],{"class":180},[46,166095,166096],{"class":56},"(a ",[46,166098,2540],{"class":52},[46,166100,166101],{"class":56}," b)  ",[46,166103,166104],{"class":2253},"# 交集\n",[46,166106,166107,166109,166111,166113,166115],{"class":48,"line":222},[46,166108,32398],{"class":180},[46,166110,166096],{"class":56},[46,166112,3106],{"class":52},[46,166114,166101],{"class":56},[46,166116,166117],{"class":2253},"# 并集\n",[46,166119,166120,166122,166124,166126,166128],{"class":48,"line":636},[46,166121,32398],{"class":180},[46,166123,166096],{"class":56},[46,166125,534],{"class":52},[46,166127,166101],{"class":56},[46,166129,166130],{"class":2253},"# 差集\n",[14,166132,166134],{"id":166133},"_610-字典dict","6.10 字典dict",[19,166136,166137],{},"字典通过 key-value 保存数据。",[36,166139,166141],{"className":38,"code":166140,"language":40,"meta":41,"style":41},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[43,166142,166143,166151,166161,166172,166182],{"__ignoreMap":41},[46,166144,166145,166147,166149],{"class":48,"line":49},[46,166146,151109],{"class":56},[46,166148,79],{"class":52},[46,166150,17573],{"class":56},[46,166152,166153,166155,166157,166159],{"class":48,"line":60},[46,166154,148648],{"class":173},[46,166156,53404],{"class":56},[46,166158,151516],{"class":173},[46,166160,33443],{"class":56},[46,166162,166163,166166,166168,166170],{"class":48,"line":200},[46,166164,166165],{"class":173},"    \"age\"",[46,166167,53404],{"class":56},[46,166169,2836],{"class":180},[46,166171,33443],{"class":56},[46,166173,166174,166177,166179],{"class":48,"line":211},[46,166175,166176],{"class":173},"    \"score\"",[46,166178,53404],{"class":56},[46,166180,166181],{"class":180},"95\n",[46,166183,166184],{"class":48,"line":222},[46,166185,3616],{"class":56},[19,166187,166188],{},"获取值：",[36,166190,166192],{"className":38,"code":166191,"language":40,"meta":41,"style":41},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[43,166193,166194,166205],{"__ignoreMap":41},[46,166195,166196,166198,166201,166203],{"class":48,"line":49},[46,166197,32398],{"class":180},[46,166199,166200],{"class":56},"(student[",[46,166202,64644],{"class":173},[46,166204,6673],{"class":56},[46,166206,166207,166209,166212,166214],{"class":48,"line":60},[46,166208,32398],{"class":180},[46,166210,166211],{"class":56},"(student.get(",[46,166213,64644],{"class":173},[46,166215,32479],{"class":56},[19,166217,17389],{},[36,166219,166221],{"className":38,"code":166220,"language":40,"meta":41,"style":41},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[43,166222,166223,166236],{"__ignoreMap":41},[46,166224,166225,166227,166230,166233],{"class":48,"line":49},[46,166226,154487],{"class":56},[46,166228,166229],{"class":173},"\"address\"",[46,166231,166232],{"class":56},"]     ",[46,166234,166235],{"class":2253},"# key不存在会报错\n",[46,166237,166238,166241,166243,166245],{"class":48,"line":60},[46,166239,166240],{"class":56},"student.get(",[46,166242,166229],{"class":173},[46,166244,15716],{"class":56},[46,166246,166247],{"class":2253},"# key不存在返回None\n",[19,166249,166250],{},"设置默认值：",[36,166252,166254],{"className":38,"code":166253,"language":40,"meta":41,"style":41},"print(student.get(\"address\", \"未知\"))\n",[43,166255,166256],{"__ignoreMap":41},[46,166257,166258,166260,166262,166264,166266,166269],{"class":48,"line":49},[46,166259,32398],{"class":180},[46,166261,166211],{"class":56},[46,166263,166229],{"class":173},[46,166265,448],{"class":56},[46,166267,166268],{"class":173},"\"未知\"",[46,166270,32479],{"class":56},[19,166272,166273],{},"新增和修改：",[36,166275,166277],{"className":38,"code":166276,"language":40,"meta":41,"style":41},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[43,166278,166279,166292],{"__ignoreMap":41},[46,166280,166281,166283,166285,166287,166289],{"class":48,"line":49},[46,166282,154487],{"class":56},[46,166284,71089],{"class":173},[46,166286,6460],{"class":56},[46,166288,79],{"class":52},[46,166290,166291],{"class":180}," 19\n",[46,166293,166294,166296,166298,166300,166302],{"class":48,"line":60},[46,166295,154487],{"class":56},[46,166297,166229],{"class":173},[46,166299,6460],{"class":56},[46,166301,79],{"class":52},[46,166303,166304],{"class":173}," \"北京\"\n",[19,166306,166307],{},"删除：",[36,166309,166311],{"className":38,"code":166310,"language":40,"meta":41,"style":41},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[43,166312,166313,166326,166336],{"__ignoreMap":41},[46,166314,166315,166317,166319,166322,166324],{"class":48,"line":49},[46,166316,156986],{"class":56},[46,166318,79],{"class":52},[46,166320,166321],{"class":56}," student.pop(",[46,166323,153100],{"class":173},[46,166325,459],{"class":56},[46,166327,166328,166330,166332,166334],{"class":48,"line":60},[46,166329,165011],{"class":52},[46,166331,153777],{"class":56},[46,166333,71089],{"class":173},[46,166335,35220],{"class":56},[46,166337,166338],{"class":48,"line":200},[46,166339,166340],{"class":56},"student.clear()\n",[14,166342,166344],{"id":166343},"_611-字典遍历","6.11 字典遍历",[19,166346,166347],{},"遍历 key：",[36,166349,166351],{"className":38,"code":166350,"language":40,"meta":41,"style":41},"for key in student:\n    print(key, student[key])\n",[43,166352,166353,166365],{"__ignoreMap":41},[46,166354,166355,166357,166360,166362],{"class":48,"line":49},[46,166356,1713],{"class":52},[46,166358,166359],{"class":56}," key ",[46,166361,1146],{"class":52},[46,166363,166364],{"class":56}," student:\n",[46,166366,166367,166369],{"class":48,"line":60},[46,166368,1227],{"class":180},[46,166370,166371],{"class":56},"(key, student[key])\n",[19,166373,166374],{},"遍历 value：",[36,166376,166378],{"className":38,"code":166377,"language":40,"meta":41,"style":41},"for value in student.values():\n    print(value)\n",[43,166379,166380,166392],{"__ignoreMap":41},[46,166381,166382,166384,166387,166389],{"class":48,"line":49},[46,166383,1713],{"class":52},[46,166385,166386],{"class":56}," value ",[46,166388,1146],{"class":52},[46,166390,166391],{"class":56}," student.values():\n",[46,166393,166394,166396],{"class":48,"line":60},[46,166395,1227],{"class":180},[46,166397,166398],{"class":56},"(value)\n",[19,166400,166401],{},"遍历 key 和 value：",[36,166403,166405],{"className":38,"code":166404,"language":40,"meta":41,"style":41},"for key, value in student.items():\n    print(key, value)\n",[43,166406,166407,166419],{"__ignoreMap":41},[46,166408,166409,166411,166414,166416],{"class":48,"line":49},[46,166410,1713],{"class":52},[46,166412,166413],{"class":56}," key, value ",[46,166415,1146],{"class":52},[46,166417,166418],{"class":56}," student.items():\n",[46,166420,166421,166423],{"class":48,"line":60},[46,166422,1227],{"class":180},[46,166424,166425],{"class":56},"(key, value)\n",[14,166427,166429],{"id":166428},"_612-嵌套容器","6.12 嵌套容器",[19,166431,166432],{},"列表中保存字典，是项目中最常见的结构之一。",[36,166434,166436],{"className":38,"code":166435,"language":40,"meta":41,"style":41},"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",[43,166437,166438,166446,166474,166502,166530,166534,166538,166548],{"__ignoreMap":41},[46,166439,166440,166442,166444],{"class":48,"line":49},[46,166441,161344],{"class":56},[46,166443,79],{"class":52},[46,166445,57412],{"class":56},[46,166447,166448,166450,166452,166454,166456,166458,166460,166462,166464,166466,166468,166470,166472],{"class":48,"line":60},[46,166449,150013],{"class":56},[46,166451,64644],{"class":173},[46,166453,53404],{"class":56},[46,166455,151516],{"class":173},[46,166457,448],{"class":56},[46,166459,71089],{"class":173},[46,166461,53404],{"class":56},[46,166463,2836],{"class":180},[46,166465,448],{"class":56},[46,166467,153100],{"class":173},[46,166469,53404],{"class":56},[46,166471,3173],{"class":180},[46,166473,6946],{"class":56},[46,166475,166476,166478,166480,166482,166484,166486,166488,166490,166492,166494,166496,166498,166500],{"class":48,"line":200},[46,166477,150013],{"class":56},[46,166479,64644],{"class":173},[46,166481,53404],{"class":56},[46,166483,152564],{"class":173},[46,166485,448],{"class":56},[46,166487,71089],{"class":173},[46,166489,53404],{"class":56},[46,166491,2811],{"class":180},[46,166493,448],{"class":56},[46,166495,153100],{"class":173},[46,166497,53404],{"class":56},[46,166499,2997],{"class":180},[46,166501,6946],{"class":56},[46,166503,166504,166506,166508,166510,166512,166514,166516,166518,166520,166522,166524,166526,166528],{"class":48,"line":211},[46,166505,150013],{"class":56},[46,166507,64644],{"class":173},[46,166509,53404],{"class":56},[46,166511,161359],{"class":173},[46,166513,448],{"class":56},[46,166515,71089],{"class":173},[46,166517,53404],{"class":56},[46,166519,2861],{"class":180},[46,166521,448],{"class":56},[46,166523,153100],{"class":173},[46,166525,53404],{"class":56},[46,166527,2593],{"class":180},[46,166529,6946],{"class":56},[46,166531,166532],{"class":48,"line":222},[46,166533,35220],{"class":56},[46,166535,166536],{"class":48,"line":636},[46,166537,616],{"emptyLinePlaceholder":615},[46,166539,166540,166542,166544,166546],{"class":48,"line":641},[46,166541,1713],{"class":52},[46,166543,153765],{"class":56},[46,166545,1146],{"class":52},[46,166547,153770],{"class":56},[46,166549,166550,166552,166554,166556,166559,166561],{"class":48,"line":653},[46,166551,1227],{"class":180},[46,166553,166200],{"class":56},[46,166555,64644],{"class":173},[46,166557,166558],{"class":56},"], student[",[46,166560,153100],{"class":173},[46,166562,6673],{"class":56},[19,166564,166565],{},"统计平均分：",[36,166567,166569],{"className":38,"code":166568,"language":40,"meta":41,"style":41},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[43,166570,166571,166579,166583,166593,166605,166609,166624],{"__ignoreMap":41},[46,166572,166573,166575,166577],{"class":48,"line":49},[46,166574,158888],{"class":56},[46,166576,79],{"class":52},[46,166578,49301],{"class":180},[46,166580,166581],{"class":48,"line":60},[46,166582,616],{"emptyLinePlaceholder":615},[46,166584,166585,166587,166589,166591],{"class":48,"line":200},[46,166586,1713],{"class":52},[46,166588,153765],{"class":56},[46,166590,1146],{"class":52},[46,166592,153770],{"class":56},[46,166594,166595,166597,166599,166601,166603],{"class":48,"line":211},[46,166596,160935],{"class":56},[46,166598,11481],{"class":52},[46,166600,153777],{"class":56},[46,166602,153100],{"class":173},[46,166604,35220],{"class":56},[46,166606,166607],{"class":48,"line":222},[46,166608,616],{"emptyLinePlaceholder":615},[46,166610,166611,166613,166615,166617,166619,166621],{"class":48,"line":636},[46,166612,165402],{"class":56},[46,166614,79],{"class":52},[46,166616,165407],{"class":56},[46,166618,2770],{"class":52},[46,166620,9344],{"class":180},[46,166622,166623],{"class":56},"(students)\n",[46,166625,166626,166628,166630,166632,166634,166636,166638,166640,166642,166644],{"class":48,"line":641},[46,166627,32398],{"class":180},[46,166629,1152],{"class":56},[46,166631,2247],{"class":52},[46,166633,165425],{"class":173},[46,166635,3082],{"class":180},[46,166637,165430],{"class":56},[46,166639,158787],{"class":52},[46,166641,3131],{"class":180},[46,166643,2439],{"class":173},[46,166645,459],{"class":56},[19,166647,166648],{},"查找学生：",[36,166650,166652],{"className":38,"code":166651,"language":40,"meta":41,"style":41},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[43,166653,166654,166669,166673,166683,166697,166703,166707,166713],{"__ignoreMap":41},[46,166655,166656,166658,166660,166662,166664,166667],{"class":48,"line":49},[46,166657,113206],{"class":56},[46,166659,79],{"class":52},[46,166661,62570],{"class":180},[46,166663,1152],{"class":56},[46,166665,166666],{"class":173},"\"请输入学生姓名:\"",[46,166668,459],{"class":56},[46,166670,166671],{"class":48,"line":60},[46,166672,616],{"emptyLinePlaceholder":615},[46,166674,166675,166677,166679,166681],{"class":48,"line":200},[46,166676,1713],{"class":52},[46,166678,153765],{"class":56},[46,166680,1146],{"class":52},[46,166682,153770],{"class":56},[46,166684,166685,166687,166689,166691,166693,166695],{"class":48,"line":211},[46,166686,5121],{"class":52},[46,166688,153777],{"class":56},[46,166690,64644],{"class":173},[46,166692,6460],{"class":56},[46,166694,4970],{"class":52},[46,166696,162060],{"class":56},[46,166698,166699,166701],{"class":48,"line":222},[46,166700,34425],{"class":180},[46,166702,151670],{"class":56},[46,166704,166705],{"class":48,"line":636},[46,166706,33604],{"class":52},[46,166708,166709,166711],{"class":48,"line":641},[46,166710,3741],{"class":52},[46,166712,760],{"class":56},[46,166714,166715,166717,166719,166722],{"class":48,"line":653},[46,166716,1227],{"class":180},[46,166718,1152],{"class":56},[46,166720,166721],{"class":173},"\"没有找到\"",[46,166723,459],{"class":56},[14,166725,166727],{"id":166726},"_613-容器通用操作","6.13 容器通用操作",[19,166729,166730],{},"长度：",[36,166732,166734],{"className":38,"code":166733,"language":40,"meta":41,"style":41},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[43,166735,166736,166755,166765],{"__ignoreMap":41},[46,166737,166738,166740,166743,166745,166747,166749,166751,166753],{"class":48,"line":49},[46,166739,9371],{"class":180},[46,166741,166742],{"class":56},"([",[46,166744,2405],{"class":180},[46,166746,448],{"class":56},[46,166748,2272],{"class":180},[46,166750,448],{"class":56},[46,166752,2266],{"class":180},[46,166754,6673],{"class":56},[46,166756,166757,166759,166761,166763],{"class":48,"line":60},[46,166758,9371],{"class":180},[46,166760,1152],{"class":56},[46,166762,157508],{"class":173},[46,166764,459],{"class":56},[46,166766,166767,166769,166772,166774,166776,166778],{"class":48,"line":200},[46,166768,9371],{"class":180},[46,166770,166771],{"class":56},"({",[46,166773,64644],{"class":173},[46,166775,53404],{"class":56},[46,166777,151516],{"class":173},[46,166779,166780],{"class":56},"})\n",[19,166782,166783],{},"最大最小：",[36,166785,166787],{"className":38,"code":166786,"language":40,"meta":41,"style":41},"max([1, 2, 3])\nmin([1, 2, 3])\n",[43,166788,166789,166807],{"__ignoreMap":41},[46,166790,166791,166793,166795,166797,166799,166801,166803,166805],{"class":48,"line":49},[46,166792,8028],{"class":180},[46,166794,166742],{"class":56},[46,166796,2405],{"class":180},[46,166798,448],{"class":56},[46,166800,2272],{"class":180},[46,166802,448],{"class":56},[46,166804,2266],{"class":180},[46,166806,6673],{"class":56},[46,166808,166809,166812,166814,166816,166818,166820,166822,166824],{"class":48,"line":60},[46,166810,166811],{"class":180},"min",[46,166813,166742],{"class":56},[46,166815,2405],{"class":180},[46,166817,448],{"class":56},[46,166819,2272],{"class":180},[46,166821,448],{"class":56},[46,166823,2266],{"class":180},[46,166825,6673],{"class":56},[19,166827,166828],{},"求和：",[36,166830,166832],{"className":38,"code":166831,"language":40,"meta":41,"style":41},"sum([1, 2, 3])\n",[43,166833,166834],{"__ignoreMap":41},[46,166835,166836,166839,166841,166843,166845,166847,166849,166851],{"class":48,"line":49},[46,166837,166838],{"class":180},"sum",[46,166840,166742],{"class":56},[46,166842,2405],{"class":180},[46,166844,448],{"class":56},[46,166846,2272],{"class":180},[46,166848,448],{"class":56},[46,166850,2266],{"class":180},[46,166852,6673],{"class":56},[19,166854,165099],{},[36,166856,166858],{"className":38,"code":166857,"language":40,"meta":41,"style":41},"sorted([3, 1, 2])\n",[43,166859,166860],{"__ignoreMap":41},[46,166861,166862,166865,166867,166869,166871,166873,166875,166877],{"class":48,"line":49},[46,166863,166864],{"class":180},"sorted",[46,166866,166742],{"class":56},[46,166868,2266],{"class":180},[46,166870,448],{"class":56},[46,166872,2405],{"class":180},[46,166874,448],{"class":56},[46,166876,2272],{"class":180},[46,166878,6673],{"class":56},[19,166880,166881],{},"类型转换：",[36,166883,166885],{"className":38,"code":166884,"language":40,"meta":41,"style":41},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[43,166886,166887,166897,166915],{"__ignoreMap":41},[46,166888,166889,166891,166893,166895],{"class":48,"line":49},[46,166890,155698],{"class":180},[46,166892,1152],{"class":56},[46,166894,157508],{"class":173},[46,166896,459],{"class":56},[46,166898,166899,166901,166903,166905,166907,166909,166911,166913],{"class":48,"line":60},[46,166900,156893],{"class":180},[46,166902,166742],{"class":56},[46,166904,2405],{"class":180},[46,166906,448],{"class":56},[46,166908,2272],{"class":180},[46,166910,448],{"class":56},[46,166912,2266],{"class":180},[46,166914,6673],{"class":56},[46,166916,166917,166919,166921,166923,166925,166927,166929,166931,166933,166935],{"class":48,"line":200},[46,166918,156918],{"class":180},[46,166920,166742],{"class":56},[46,166922,2405],{"class":180},[46,166924,448],{"class":56},[46,166926,2405],{"class":180},[46,166928,448],{"class":56},[46,166930,2272],{"class":180},[46,166932,448],{"class":56},[46,166934,2266],{"class":180},[46,166936,6673],{"class":56},[19,166938,166939],{},"成员判断：",[36,166941,166943],{"className":38,"code":166942,"language":40,"meta":41,"style":41},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[43,166944,166945,166962,166986],{"__ignoreMap":41},[46,166946,166947,166949,166951,166954,166957,166960],{"class":48,"line":49},[46,166948,32398],{"class":180},[46,166950,1152],{"class":56},[46,166952,166953],{"class":173},"\"a\"",[46,166955,166956],{"class":52}," in",[46,166958,166959],{"class":173}," \"abc\"",[46,166961,459],{"class":56},[46,166963,166964,166966,166968,166970,166972,166974,166976,166978,166980,166982,166984],{"class":48,"line":60},[46,166965,32398],{"class":180},[46,166967,1152],{"class":56},[46,166969,2405],{"class":180},[46,166971,166956],{"class":52},[46,166973,54193],{"class":56},[46,166975,2405],{"class":180},[46,166977,448],{"class":56},[46,166979,2272],{"class":180},[46,166981,448],{"class":56},[46,166983,2266],{"class":180},[46,166985,6673],{"class":56},[46,166987,166988,166990,166992,166994,166996,166998,167000,167002,167004],{"class":48,"line":200},[46,166989,32398],{"class":180},[46,166991,1152],{"class":56},[46,166993,64644],{"class":173},[46,166995,166956],{"class":52},[46,166997,6465],{"class":56},[46,166999,64644],{"class":173},[46,167001,53404],{"class":56},[46,167003,151516],{"class":173},[46,167005,166780],{"class":56},[14,167007,167009],{"id":167008},"_614-推导式","6.14 推导式",[19,167011,167012],{},"推导式用于快速生成容器。",[19,167014,167015],{},"列表推导式：",[36,167017,167019],{"className":38,"code":167018,"language":40,"meta":41,"style":41},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[43,167020,167021,167048],{"__ignoreMap":41},[46,167022,167023,167025,167027,167030,167032,167034,167036,167038,167040,167042,167044,167046],{"class":48,"line":49},[46,167024,165728],{"class":56},[46,167026,79],{"class":52},[46,167028,167029],{"class":56}," [i ",[46,167031,1713],{"class":52},[46,167033,11442],{"class":56},[46,167035,1146],{"class":52},[46,167037,1149],{"class":180},[46,167039,1152],{"class":56},[46,167041,2405],{"class":180},[46,167043,448],{"class":56},[46,167045,2531],{"class":180},[46,167047,99261],{"class":56},[46,167049,167050,167052],{"class":48,"line":60},[46,167051,32398],{"class":180},[46,167053,165944],{"class":56},[19,167055,167056],{},"带条件：",[36,167058,167060],{"className":38,"code":167059,"language":40,"meta":41,"style":41},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[43,167061,167062,167103],{"__ignoreMap":41},[46,167063,167064,167067,167069,167071,167073,167075,167077,167079,167081,167083,167085,167087,167089,167091,167093,167095,167097,167099,167101],{"class":48,"line":49},[46,167065,167066],{"class":56},"even_nums ",[46,167068,79],{"class":52},[46,167070,167029],{"class":56},[46,167072,1713],{"class":52},[46,167074,11442],{"class":56},[46,167076,1146],{"class":52},[46,167078,1149],{"class":180},[46,167080,1152],{"class":56},[46,167082,2405],{"class":180},[46,167084,448],{"class":56},[46,167086,2524],{"class":180},[46,167088,15716],{"class":56},[46,167090,911],{"class":52},[46,167092,11442],{"class":56},[46,167094,2515],{"class":52},[46,167096,16757],{"class":180},[46,167098,917],{"class":52},[46,167100,887],{"class":180},[46,167102,35220],{"class":56},[46,167104,167105,167107],{"class":48,"line":60},[46,167106,32398],{"class":180},[46,167108,167109],{"class":56},"(even_nums)\n",[19,167111,167112],{},"字典推导式：",[36,167114,167116],{"className":38,"code":167115,"language":40,"meta":41,"style":41},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[43,167117,167118,167152],{"__ignoreMap":41},[46,167119,167120,167123,167125,167128,167130,167132,167135,167137,167139,167141,167143,167145,167147,167149],{"class":48,"line":49},[46,167121,167122],{"class":56},"squares ",[46,167124,79],{"class":52},[46,167126,167127],{"class":56}," {i: i ",[46,167129,12665],{"class":52},[46,167131,16757],{"class":180},[46,167133,167134],{"class":52}," for",[46,167136,11442],{"class":56},[46,167138,1146],{"class":52},[46,167140,1149],{"class":180},[46,167142,1152],{"class":56},[46,167144,2405],{"class":180},[46,167146,448],{"class":56},[46,167148,2531],{"class":180},[46,167150,167151],{"class":56},")}\n",[46,167153,167154,167156],{"class":48,"line":60},[46,167155,32398],{"class":180},[46,167157,167158],{"class":56},"(squares)\n",[19,167160,167161],{},"集合推导式：",[36,167163,167165],{"className":38,"code":167164,"language":40,"meta":41,"style":41},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[43,167166,167167,167188],{"__ignoreMap":41},[46,167168,167169,167172,167174,167177,167179,167181,167183,167186],{"class":48,"line":49},[46,167170,167171],{"class":56},"chars ",[46,167173,79],{"class":52},[46,167175,167176],{"class":56}," {ch ",[46,167178,1713],{"class":52},[46,167180,161320],{"class":56},[46,167182,1146],{"class":52},[46,167184,167185],{"class":173}," \"hello\"",[46,167187,3616],{"class":56},[46,167189,167190,167192],{"class":48,"line":60},[46,167191,32398],{"class":180},[46,167193,167194],{"class":56},"(chars)\n",[19,167196,167197],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,167199,167201],{"id":167200},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[36,167203,167205],{"className":38,"code":167204,"language":40,"meta":41,"style":41},"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",[43,167206,167207,167215,167235,167255,167275,167295,167299,167303,167311,167325,167334,167338,167348,167360,167364,167384,167393,167397,167413,167418,167422,167436,167440,167462,167498],{"__ignoreMap":41},[46,167208,167209,167211,167213],{"class":48,"line":49},[46,167210,161344],{"class":56},[46,167212,79],{"class":52},[46,167214,57412],{"class":56},[46,167216,167217,167219,167221,167223,167225,167227,167229,167231,167233],{"class":48,"line":60},[46,167218,150013],{"class":56},[46,167220,64644],{"class":173},[46,167222,53404],{"class":56},[46,167224,151516],{"class":173},[46,167226,448],{"class":56},[46,167228,153100],{"class":173},[46,167230,53404],{"class":56},[46,167232,3173],{"class":180},[46,167234,6946],{"class":56},[46,167236,167237,167239,167241,167243,167245,167247,167249,167251,167253],{"class":48,"line":200},[46,167238,150013],{"class":56},[46,167240,64644],{"class":173},[46,167242,53404],{"class":56},[46,167244,152564],{"class":173},[46,167246,448],{"class":56},[46,167248,153100],{"class":173},[46,167250,53404],{"class":56},[46,167252,2997],{"class":180},[46,167254,6946],{"class":56},[46,167256,167257,167259,167261,167263,167265,167267,167269,167271,167273],{"class":48,"line":211},[46,167258,150013],{"class":56},[46,167260,64644],{"class":173},[46,167262,53404],{"class":56},[46,167264,161359],{"class":173},[46,167266,448],{"class":56},[46,167268,153100],{"class":173},[46,167270,53404],{"class":56},[46,167272,2593],{"class":180},[46,167274,6946],{"class":56},[46,167276,167277,167279,167281,167283,167285,167287,167289,167291,167293],{"class":48,"line":222},[46,167278,150013],{"class":56},[46,167280,64644],{"class":173},[46,167282,53404],{"class":56},[46,167284,164938],{"class":173},[46,167286,448],{"class":56},[46,167288,153100],{"class":173},[46,167290,53404],{"class":56},[46,167292,3068],{"class":180},[46,167294,6946],{"class":56},[46,167296,167297],{"class":48,"line":636},[46,167298,35220],{"class":56},[46,167300,167301],{"class":48,"line":641},[46,167302,616],{"emptyLinePlaceholder":615},[46,167304,167305,167307,167309],{"class":48,"line":653},[46,167306,158888],{"class":56},[46,167308,79],{"class":52},[46,167310,49301],{"class":180},[46,167312,167313,167316,167318,167321,167323],{"class":48,"line":659},[46,167314,167315],{"class":56},"max_student ",[46,167317,79],{"class":52},[46,167319,167320],{"class":56}," students[",[46,167322,2379],{"class":180},[46,167324,35220],{"class":56},[46,167326,167327,167330,167332],{"class":48,"line":665},[46,167328,167329],{"class":56},"passed ",[46,167331,79],{"class":52},[46,167333,53805],{"class":56},[46,167335,167336],{"class":48,"line":670},[46,167337,616],{"emptyLinePlaceholder":615},[46,167339,167340,167342,167344,167346],{"class":48,"line":676},[46,167341,1713],{"class":52},[46,167343,153765],{"class":56},[46,167345,1146],{"class":52},[46,167347,153770],{"class":56},[46,167349,167350,167352,167354,167356,167358],{"class":48,"line":682},[46,167351,160935],{"class":56},[46,167353,11481],{"class":52},[46,167355,153777],{"class":56},[46,167357,153100],{"class":173},[46,167359,35220],{"class":56},[46,167361,167362],{"class":48,"line":688},[46,167363,616],{"emptyLinePlaceholder":615},[46,167365,167366,167368,167370,167372,167374,167376,167379,167381],{"class":48,"line":693},[46,167367,5121],{"class":52},[46,167369,153777],{"class":56},[46,167371,153100],{"class":173},[46,167373,6460],{"class":56},[46,167375,884],{"class":52},[46,167377,167378],{"class":56}," max_student[",[46,167380,153100],{"class":173},[46,167382,167383],{"class":56},"]:\n",[46,167385,167386,167389,167391],{"class":48,"line":699},[46,167387,167388],{"class":56},"        max_student ",[46,167390,79],{"class":52},[46,167392,153793],{"class":56},[46,167394,167395],{"class":48,"line":705},[46,167396,616],{"emptyLinePlaceholder":615},[46,167398,167399,167401,167403,167405,167407,167409,167411],{"class":48,"line":711},[46,167400,5121],{"class":52},[46,167402,153777],{"class":56},[46,167404,153100],{"class":173},[46,167406,6460],{"class":56},[46,167408,3750],{"class":52},[46,167410,159465],{"class":180},[46,167412,760],{"class":56},[46,167414,167415],{"class":48,"line":717},[46,167416,167417],{"class":56},"        passed.append(student)\n",[46,167419,167420],{"class":48,"line":723},[46,167421,616],{"emptyLinePlaceholder":615},[46,167423,167424,167426,167428,167430,167432,167434],{"class":48,"line":729},[46,167425,165402],{"class":56},[46,167427,79],{"class":52},[46,167429,165407],{"class":56},[46,167431,2770],{"class":52},[46,167433,9344],{"class":180},[46,167435,166623],{"class":56},[46,167437,167438],{"class":48,"line":735},[46,167439,616],{"emptyLinePlaceholder":615},[46,167441,167442,167444,167446,167448,167450,167452,167454,167456,167458,167460],{"class":48,"line":740},[46,167443,32398],{"class":180},[46,167445,1152],{"class":56},[46,167447,2247],{"class":52},[46,167449,165425],{"class":173},[46,167451,3082],{"class":180},[46,167453,165430],{"class":56},[46,167455,158787],{"class":52},[46,167457,3131],{"class":180},[46,167459,2439],{"class":173},[46,167461,459],{"class":56},[46,167463,167464,167466,167468,167470,167473,167475,167478,167480,167482,167484,167486,167488,167490,167492,167494,167496],{"class":48,"line":745},[46,167465,32398],{"class":180},[46,167467,1152],{"class":56},[46,167469,2247],{"class":52},[46,167471,167472],{"class":173},"\"最高分学生:",[46,167474,3082],{"class":180},[46,167476,167477],{"class":56},"max_student[",[46,167479,154510],{"class":173},[46,167481,3125],{"class":56},[46,167483,3131],{"class":180},[46,167485,6465],{"class":180},[46,167487,167477],{"class":56},[46,167489,154548],{"class":173},[46,167491,3125],{"class":56},[46,167493,3131],{"class":180},[46,167495,2439],{"class":173},[46,167497,459],{"class":56},[46,167499,167500,167502,167504,167506,167509,167512,167515,167517,167519],{"class":48,"line":763},[46,167501,32398],{"class":180},[46,167503,1152],{"class":56},[46,167505,2247],{"class":52},[46,167507,167508],{"class":173},"\"及格人数:",[46,167510,167511],{"class":180},"{len",[46,167513,167514],{"class":56},"(passed)",[46,167516,3131],{"class":180},[46,167518,2439],{"class":173},[46,167520,459],{"class":56},[14,167522,167524],{"id":167523},"_616-易错点","6.16 易错点",[23,167526,167527,167530,167533,167536,167542,167551],{},[26,167528,167529],{},"列表可变，元组和字符串不可变。",[26,167531,167532],{},"切片结束位置不包含。",[26,167534,167535],{},"字典通过 key 取值，不是通过索引。",[26,167537,167538,167539,365],{},"空集合要用 ",[43,167540,167541],{},"set()",[26,167543,106254,167544,167547,167548,365],{},[43,167545,167546],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[43,167549,167550],{},"get()",[26,167552,167553],{},"嵌套容器要先看清楚每一层是什么类型。",[14,167555,167557],{"id":167556},"_617-本章练习","6.17 本章练习",[23,167559,167560,167563,167566,167569,167572],{},[26,167561,167562],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[26,167564,167565],{},"输入一句话，统计每个字符出现次数。",[26,167567,167568],{},"使用集合去除列表中的重复元素。",[26,167570,167571],{},"使用字典保存一个学生的信息，并实现修改成绩。",[26,167573,167574],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[2098,167576,167577],{},"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":41,"searchDepth":60,"depth":60,"links":167579},[167580,167581,167582,167583,167584,167585,167586,167587,167588,167589,167590,167591,167592,167593,167594,167595,167596],{"id":164560,"depth":60,"text":164561},{"id":164677,"depth":60,"text":164678},{"id":164767,"depth":60,"text":164768},{"id":164891,"depth":60,"text":164892},{"id":165254,"depth":60,"text":165255},{"id":165441,"depth":60,"text":165442},{"id":165560,"depth":60,"text":165561},{"id":165702,"depth":60,"text":165703},{"id":165889,"depth":60,"text":165890},{"id":166133,"depth":60,"text":166134},{"id":166343,"depth":60,"text":166344},{"id":166428,"depth":60,"text":166429},{"id":166726,"depth":60,"text":166727},{"id":167008,"depth":60,"text":167009},{"id":167200,"depth":60,"text":167201},{"id":167523,"depth":60,"text":167524},{"id":167556,"depth":60,"text":167557},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":164552,"description":25378},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":167603,"title":167604,"body":167605,"description":25378,"extension":2125,"meta":169777,"navigation":615,"path":169778,"seo":169779,"stem":169780,"__hash__":169781},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":167606,"toc":169752},[167607,167610,167614,167617,167697,167700,167721,167724,167728,167731,167793,167796,167813,167817,167820,167865,167867,167875,167879,167882,167964,167967,167970,167995,167998,168021,168025,168028,168030,168092,168095,168097,168148,168152,168156,168162,168267,168271,168277,168348,168352,168355,168423,168426,168506,168510,168516,168552,168555,168558,168668,168674,168678,168681,168753,168756,168760,168764,168769,168831,168835,168840,168908,168912,168917,169033,169037,169040,169120,169123,169127,169130,169234,169236,169251,169254,169258,169396,169404,169408,169410,169421,169423,169681,169685,169717,169721,169749],[10,167608,167604],{"id":167609},"_7-函数进阶",[14,167611,167613],{"id":167612},"_71-多返回值","7.1 多返回值",[19,167615,167616],{},"Python 函数可以返回多个值，本质上返回的是元组。",[36,167618,167620],{"className":38,"code":167619,"language":40,"meta":41,"style":41},"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",[43,167621,167622,167631,167639,167647,167656,167663,167667,167671,167680,167686],{"__ignoreMap":41},[46,167623,167624,167626,167629],{"class":48,"line":49},[46,167625,748],{"class":52},[46,167627,167628],{"class":169}," get_info",[46,167630,33928],{"class":56},[46,167632,167633,167635,167637],{"class":48,"line":60},[46,167634,153998],{"class":56},[46,167636,79],{"class":52},[46,167638,150981],{"class":173},[46,167640,167641,167643,167645],{"class":48,"line":200},[46,167642,154014],{"class":56},[46,167644,79],{"class":52},[46,167646,148179],{"class":180},[46,167648,167649,167651,167653],{"class":48,"line":211},[46,167650,154029],{"class":56},[46,167652,79],{"class":52},[46,167654,167655],{"class":180}," 95\n",[46,167657,167658,167660],{"class":48,"line":222},[46,167659,6108],{"class":52},[46,167661,167662],{"class":56}," name, age, score\n",[46,167664,167665],{"class":48,"line":636},[46,167666,616],{"emptyLinePlaceholder":615},[46,167668,167669],{"class":48,"line":641},[46,167670,616],{"emptyLinePlaceholder":615},[46,167672,167673,167675,167677],{"class":48,"line":653},[46,167674,162934],{"class":56},[46,167676,79],{"class":52},[46,167678,167679],{"class":56}," get_info()\n",[46,167681,167682,167684],{"class":48,"line":659},[46,167683,32398],{"class":180},[46,167685,78550],{"class":56},[46,167687,167688,167690,167692,167694],{"class":48,"line":665},[46,167689,32398],{"class":180},[46,167691,1152],{"class":56},[46,167693,104997],{"class":180},[46,167695,167696],{"class":56},"(result))\n",[19,167698,167699],{},"可以直接解包：",[36,167701,167703],{"className":38,"code":167702,"language":40,"meta":41,"style":41},"name, age, score = get_info()\nprint(name, age, score)\n",[43,167704,167705,167714],{"__ignoreMap":41},[46,167706,167707,167710,167712],{"class":48,"line":49},[46,167708,167709],{"class":56},"name, age, score ",[46,167711,79],{"class":52},[46,167713,167679],{"class":56},[46,167715,167716,167718],{"class":48,"line":60},[46,167717,32398],{"class":180},[46,167719,167720],{"class":56},"(name, age, score)\n",[19,167722,167723],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,167725,167727],{"id":167726},"_72-位置参数","7.2 位置参数",[19,167729,167730],{},"位置参数按顺序传递。",[36,167732,167734],{"className":38,"code":167733,"language":40,"meta":41,"style":41},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[43,167735,167736,167744,167772,167776,167780],{"__ignoreMap":41},[46,167737,167738,167740,167742],{"class":48,"line":49},[46,167739,748],{"class":52},[46,167741,151000],{"class":169},[46,167743,151003],{"class":56},[46,167745,167746,167748,167750,167752,167754,167756,167758,167760,167762,167764,167766,167768,167770],{"class":48,"line":60},[46,167747,1227],{"class":180},[46,167749,1152],{"class":56},[46,167751,2247],{"class":52},[46,167753,151014],{"class":173},[46,167755,3082],{"class":180},[46,167757,1653],{"class":56},[46,167759,3131],{"class":180},[46,167761,151023],{"class":173},[46,167763,3082],{"class":180},[46,167765,72186],{"class":56},[46,167767,3131],{"class":180},[46,167769,151032],{"class":173},[46,167771,459],{"class":56},[46,167773,167774],{"class":48,"line":200},[46,167775,616],{"emptyLinePlaceholder":615},[46,167777,167778],{"class":48,"line":211},[46,167779,616],{"emptyLinePlaceholder":615},[46,167781,167782,167785,167787,167789,167791],{"class":48,"line":222},[46,167783,167784],{"class":56},"introduce(",[46,167786,151516],{"class":173},[46,167788,448],{"class":56},[46,167790,2836],{"class":180},[46,167792,459],{"class":56},[19,167794,167795],{},"顺序错了就会得到错误含义：",[36,167797,167799],{"className":38,"code":167798,"language":40,"meta":41,"style":41},"introduce(18, \"小明\")\n",[43,167800,167801],{"__ignoreMap":41},[46,167802,167803,167805,167807,167809,167811],{"class":48,"line":49},[46,167804,167784],{"class":56},[46,167806,2836],{"class":180},[46,167808,448],{"class":56},[46,167810,151516],{"class":173},[46,167812,459],{"class":56},[14,167814,167816],{"id":167815},"_73-关键字参数","7.3 关键字参数",[19,167818,167819],{},"关键字参数按参数名传递。",[36,167821,167823],{"className":38,"code":167822,"language":40,"meta":41,"style":41},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[43,167824,167825,167845],{"__ignoreMap":41},[46,167826,167827,167829,167831,167833,167835,167837,167839,167841,167843],{"class":48,"line":49},[46,167828,167784],{"class":56},[46,167830,1653],{"class":439},[46,167832,79],{"class":52},[46,167834,151516],{"class":173},[46,167836,448],{"class":56},[46,167838,72186],{"class":439},[46,167840,79],{"class":52},[46,167842,2836],{"class":180},[46,167844,459],{"class":56},[46,167846,167847,167849,167851,167853,167855,167857,167859,167861,167863],{"class":48,"line":60},[46,167848,167784],{"class":56},[46,167850,72186],{"class":439},[46,167852,79],{"class":52},[46,167854,2836],{"class":180},[46,167856,448],{"class":56},[46,167858,1653],{"class":439},[46,167860,79],{"class":52},[46,167862,151516],{"class":173},[46,167864,459],{"class":56},[19,167866,119562],{},[23,167868,167869,167872],{},[26,167870,167871],{},"顺序不容易错。",[26,167873,167874],{},"调用时可读性更强。",[14,167876,167878],{"id":167877},"_74-默认参数","7.4 默认参数",[19,167880,167881],{},"默认参数给参数设置默认值。",[36,167883,167885],{"className":38,"code":167884,"language":40,"meta":41,"style":41},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[43,167886,167887,167903,167933,167937,167941,167951],{"__ignoreMap":41},[46,167888,167889,167891,167893,167896,167898,167901],{"class":48,"line":49},[46,167890,748],{"class":52},[46,167892,123721],{"class":169},[46,167894,167895],{"class":56},"(host, port",[46,167897,79],{"class":52},[46,167899,167900],{"class":180},"3306",[46,167902,1158],{"class":56},[46,167904,167905,167907,167909,167911,167914,167916,167918,167920,167922,167924,167927,167929,167931],{"class":48,"line":60},[46,167906,1227],{"class":180},[46,167908,1152],{"class":56},[46,167910,2247],{"class":52},[46,167912,167913],{"class":173},"\"连接",[46,167915,3082],{"class":180},[46,167917,29384],{"class":56},[46,167919,3131],{"class":180},[46,167921,3045],{"class":173},[46,167923,3082],{"class":180},[46,167925,167926],{"class":56},"port",[46,167928,3131],{"class":180},[46,167930,2439],{"class":173},[46,167932,459],{"class":56},[46,167934,167935],{"class":48,"line":200},[46,167936,616],{"emptyLinePlaceholder":615},[46,167938,167939],{"class":48,"line":211},[46,167940,616],{"emptyLinePlaceholder":615},[46,167942,167943,167946,167949],{"class":48,"line":222},[46,167944,167945],{"class":56},"connect(",[46,167947,167948],{"class":173},"\"localhost\"",[46,167950,459],{"class":56},[46,167952,167953,167955,167957,167959,167962],{"class":48,"line":636},[46,167954,167945],{"class":56},[46,167956,167948],{"class":173},[46,167958,448],{"class":56},[46,167960,167961],{"class":180},"6379",[46,167963,459],{"class":56},[19,167965,167966],{},"注意：默认参数必须放在非默认参数后面。",[19,167968,167969],{},"错误：",[36,167971,167973],{"className":38,"code":167972,"language":40,"meta":41,"style":41},"def connect(port=3306, host):\n    pass\n",[43,167974,167975,167991],{"__ignoreMap":41},[46,167976,167977,167979,167981,167984,167986,167988],{"class":48,"line":49},[46,167978,748],{"class":52},[46,167980,123721],{"class":169},[46,167982,167983],{"class":56},"(port",[46,167985,79],{"class":52},[46,167987,167900],{"class":180},[46,167989,167990],{"class":56},", host):\n",[46,167992,167993],{"class":48,"line":60},[46,167994,151165],{"class":52},[19,167996,167997],{},"正确：",[36,167999,168001],{"className":38,"code":168000,"language":40,"meta":41,"style":41},"def connect(host, port=3306):\n    pass\n",[43,168002,168003,168017],{"__ignoreMap":41},[46,168004,168005,168007,168009,168011,168013,168015],{"class":48,"line":49},[46,168006,748],{"class":52},[46,168008,123721],{"class":169},[46,168010,167895],{"class":56},[46,168012,79],{"class":52},[46,168014,167900],{"class":180},[46,168016,1158],{"class":56},[46,168018,168019],{"class":48,"line":60},[46,168020,151165],{"class":52},[14,168022,168024],{"id":168023},"_75-默认参数的坑","7.5 默认参数的坑",[19,168026,168027],{},"不要使用可变对象作为默认参数。",[19,168029,159251],{},[36,168031,168033],{"className":38,"code":168032,"language":40,"meta":41,"style":41},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[43,168034,168035,168050,168055,168062,168066,168070,168081],{"__ignoreMap":41},[46,168036,168037,168039,168042,168045,168047],{"class":48,"line":49},[46,168038,748],{"class":52},[46,168040,168041],{"class":169}," add_item",[46,168043,168044],{"class":56},"(item, items",[46,168046,79],{"class":52},[46,168048,168049],{"class":56},"[]):\n",[46,168051,168052],{"class":48,"line":60},[46,168053,168054],{"class":56},"    items.append(item)\n",[46,168056,168057,168059],{"class":48,"line":200},[46,168058,6108],{"class":52},[46,168060,168061],{"class":56}," items\n",[46,168063,168064],{"class":48,"line":211},[46,168065,616],{"emptyLinePlaceholder":615},[46,168067,168068],{"class":48,"line":222},[46,168069,616],{"emptyLinePlaceholder":615},[46,168071,168072,168074,168077,168079],{"class":48,"line":636},[46,168073,32398],{"class":180},[46,168075,168076],{"class":56},"(add_item(",[46,168078,166953],{"class":173},[46,168080,32479],{"class":56},[46,168082,168083,168085,168087,168090],{"class":48,"line":641},[46,168084,32398],{"class":180},[46,168086,168076],{"class":56},[46,168088,168089],{"class":173},"\"b\"",[46,168091,32479],{"class":56},[19,168093,168094],{},"第二次调用会复用第一次的列表。",[19,168096,157516],{},[36,168098,168100],{"className":38,"code":168099,"language":40,"meta":41,"style":41},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[43,168101,168102,168116,168129,168138,168142],{"__ignoreMap":41},[46,168103,168104,168106,168108,168110,168112,168114],{"class":48,"line":49},[46,168105,748],{"class":52},[46,168107,168041],{"class":169},[46,168109,168044],{"class":56},[46,168111,79],{"class":52},[46,168113,757],{"class":180},[46,168115,1158],{"class":56},[46,168117,168118,168120,168123,168125,168127],{"class":48,"line":60},[46,168119,5121],{"class":52},[46,168121,168122],{"class":56}," items ",[46,168124,40899],{"class":52},[46,168126,40905],{"class":180},[46,168128,760],{"class":56},[46,168130,168131,168134,168136],{"class":48,"line":200},[46,168132,168133],{"class":56},"        items ",[46,168135,79],{"class":52},[46,168137,53805],{"class":56},[46,168139,168140],{"class":48,"line":211},[46,168141,168054],{"class":56},[46,168143,168144,168146],{"class":48,"line":222},[46,168145,6108],{"class":52},[46,168147,168061],{"class":56},[14,168149,168151],{"id":168150},"_76-不定长参数","7.6 不定长参数",[479,168153,168155],{"id":168154},"_761-args","7.6.1 *args",[19,168157,168158,168161],{},[43,168159,168160],{},"*args"," 接收任意数量的位置参数，得到元组。",[36,168163,168165],{"className":38,"code":168164,"language":40,"meta":41,"style":41},"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",[43,168166,168167,168180,168188,168199,168208,168214,168218,168222,168241],{"__ignoreMap":41},[46,168168,168169,168171,168173,168175,168177],{"class":48,"line":49},[46,168170,748],{"class":52},[46,168172,7223],{"class":169},[46,168174,1152],{"class":56},[46,168176,2642],{"class":52},[46,168178,168179],{"class":56},"args):\n",[46,168181,168182,168184,168186],{"class":48,"line":60},[46,168183,160935],{"class":56},[46,168185,79],{"class":52},[46,168187,49301],{"class":180},[46,168189,168190,168192,168194,168196],{"class":48,"line":200},[46,168191,1140],{"class":52},[46,168193,157808],{"class":56},[46,168195,1146],{"class":52},[46,168197,168198],{"class":56}," args:\n",[46,168200,168201,168203,168205],{"class":48,"line":211},[46,168202,161610],{"class":56},[46,168204,11481],{"class":52},[46,168206,168207],{"class":56}," num\n",[46,168209,168210,168212],{"class":48,"line":222},[46,168211,6108],{"class":52},[46,168213,163915],{"class":56},[46,168215,168216],{"class":48,"line":636},[46,168217,616],{"emptyLinePlaceholder":615},[46,168219,168220],{"class":48,"line":641},[46,168221,616],{"emptyLinePlaceholder":615},[46,168223,168224,168226,168229,168231,168233,168235,168237,168239],{"class":48,"line":653},[46,168225,32398],{"class":180},[46,168227,168228],{"class":56},"(add(",[46,168230,2405],{"class":180},[46,168232,448],{"class":56},[46,168234,2272],{"class":180},[46,168236,448],{"class":56},[46,168238,2266],{"class":180},[46,168240,32479],{"class":56},[46,168242,168243,168245,168247,168249,168251,168253,168255,168257,168259,168261,168263,168265],{"class":48,"line":659},[46,168244,32398],{"class":180},[46,168246,168228],{"class":56},[46,168248,2405],{"class":180},[46,168250,448],{"class":56},[46,168252,2272],{"class":180},[46,168254,448],{"class":56},[46,168256,2266],{"class":180},[46,168258,448],{"class":56},[46,168260,2481],{"class":180},[46,168262,448],{"class":56},[46,168264,2506],{"class":180},[46,168266,32479],{"class":56},[479,168268,168270],{"id":168269},"_762-kwargs","7.6.2 **kwargs",[19,168272,168273,168276],{},[43,168274,168275],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[36,168278,168280],{"className":38,"code":168279,"language":40,"meta":41,"style":41},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[43,168281,168282,168295,168306,168312,168316,168320],{"__ignoreMap":41},[46,168283,168284,168286,168288,168290,168292],{"class":48,"line":49},[46,168285,748],{"class":52},[46,168287,163573],{"class":169},[46,168289,1152],{"class":56},[46,168291,12665],{"class":52},[46,168293,168294],{"class":56},"kwargs):\n",[46,168296,168297,168299,168301,168303],{"class":48,"line":60},[46,168298,1140],{"class":52},[46,168300,166413],{"class":56},[46,168302,1146],{"class":52},[46,168304,168305],{"class":56}," kwargs.items():\n",[46,168307,168308,168310],{"class":48,"line":200},[46,168309,34425],{"class":180},[46,168311,166425],{"class":56},[46,168313,168314],{"class":48,"line":211},[46,168315,616],{"emptyLinePlaceholder":615},[46,168317,168318],{"class":48,"line":222},[46,168319,616],{"emptyLinePlaceholder":615},[46,168321,168322,168324,168326,168328,168330,168332,168334,168336,168338,168340,168342,168344,168346],{"class":48,"line":636},[46,168323,163638],{"class":56},[46,168325,1653],{"class":439},[46,168327,79],{"class":52},[46,168329,151516],{"class":173},[46,168331,448],{"class":56},[46,168333,72186],{"class":439},[46,168335,79],{"class":52},[46,168337,2836],{"class":180},[46,168339,448],{"class":56},[46,168341,72237],{"class":439},[46,168343,79],{"class":52},[46,168345,71234],{"class":173},[46,168347,459],{"class":56},[14,168349,168351],{"id":168350},"_77-参数解包","7.7 参数解包",[19,168353,168354],{},"列表或元组解包为位置参数：",[36,168356,168358],{"className":38,"code":168357,"language":40,"meta":41,"style":41},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[43,168359,168360,168369,168384,168388,168392,168412],{"__ignoreMap":41},[46,168361,168362,168364,168366],{"class":48,"line":49},[46,168363,748],{"class":52},[46,168365,7223],{"class":169},[46,168367,168368],{"class":56},"(a, b, c):\n",[46,168370,168371,168373,168375,168377,168379,168381],{"class":48,"line":60},[46,168372,6108],{"class":52},[46,168374,12873],{"class":56},[46,168376,2668],{"class":52},[46,168378,12886],{"class":56},[46,168380,2668],{"class":52},[46,168382,168383],{"class":56}," c\n",[46,168385,168386],{"class":48,"line":200},[46,168387,616],{"emptyLinePlaceholder":615},[46,168389,168390],{"class":48,"line":211},[46,168391,616],{"emptyLinePlaceholder":615},[46,168393,168394,168396,168398,168400,168402,168404,168406,168408,168410],{"class":48,"line":222},[46,168395,165728],{"class":56},[46,168397,79],{"class":52},[46,168399,54193],{"class":56},[46,168401,2405],{"class":180},[46,168403,448],{"class":56},[46,168405,2272],{"class":180},[46,168407,448],{"class":56},[46,168409,2266],{"class":180},[46,168411,35220],{"class":56},[46,168413,168414,168416,168418,168420],{"class":48,"line":636},[46,168415,32398],{"class":180},[46,168417,168228],{"class":56},[46,168419,2642],{"class":52},[46,168421,168422],{"class":56},"nums))\n",[19,168424,168425],{},"字典解包为关键字参数：",[36,168427,168429],{"className":38,"code":168428,"language":40,"meta":41,"style":41},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[43,168430,168431,168439,168465,168469,168473,168497],{"__ignoreMap":41},[46,168432,168433,168435,168437],{"class":48,"line":49},[46,168434,748],{"class":52},[46,168436,151000],{"class":169},[46,168438,151003],{"class":56},[46,168440,168441,168443,168445,168447,168449,168451,168453,168455,168457,168459,168461,168463],{"class":48,"line":60},[46,168442,1227],{"class":180},[46,168444,1152],{"class":56},[46,168446,2247],{"class":52},[46,168448,2439],{"class":173},[46,168450,3082],{"class":180},[46,168452,1653],{"class":56},[46,168454,3131],{"class":180},[46,168456,6465],{"class":180},[46,168458,72186],{"class":56},[46,168460,3131],{"class":180},[46,168462,2439],{"class":173},[46,168464,459],{"class":56},[46,168466,168467],{"class":48,"line":200},[46,168468,616],{"emptyLinePlaceholder":615},[46,168470,168471],{"class":48,"line":211},[46,168472,616],{"emptyLinePlaceholder":615},[46,168474,168475,168477,168479,168481,168483,168485,168487,168489,168491,168493,168495],{"class":48,"line":222},[46,168476,117942],{"class":56},[46,168478,79],{"class":52},[46,168480,6465],{"class":56},[46,168482,64644],{"class":173},[46,168484,53404],{"class":56},[46,168486,151516],{"class":173},[46,168488,448],{"class":56},[46,168490,71089],{"class":173},[46,168492,53404],{"class":56},[46,168494,2836],{"class":180},[46,168496,3616],{"class":56},[46,168498,168499,168501,168503],{"class":48,"line":636},[46,168500,167784],{"class":56},[46,168502,12665],{"class":52},[46,168504,168505],{"class":56},"info)\n",[14,168507,168509],{"id":168508},"_78-匿名函数lambda","7.8 匿名函数lambda",[19,168511,168512,168515],{},[43,168513,168514],{},"lambda"," 用于定义简单匿名函数。",[36,168517,168519],{"className":38,"code":168518,"language":40,"meta":41,"style":41},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[43,168520,168521,168538],{"__ignoreMap":41},[46,168522,168523,168526,168528,168531,168534,168536],{"class":48,"line":49},[46,168524,168525],{"class":56},"add ",[46,168527,79],{"class":52},[46,168529,168530],{"class":52}," lambda",[46,168532,168533],{"class":56}," a, b: a ",[46,168535,2668],{"class":52},[46,168537,152732],{"class":56},[46,168539,168540,168542,168544,168546,168548,168550],{"class":48,"line":60},[46,168541,32398],{"class":180},[46,168543,168228],{"class":56},[46,168545,2405],{"class":180},[46,168547,448],{"class":56},[46,168549,2272],{"class":180},[46,168551,32479],{"class":56},[19,168553,168554],{},"常和排序、过滤等函数一起使用。",[19,168556,168557],{},"按分数排序：",[36,168559,168561],{"className":38,"code":168560,"language":40,"meta":41,"style":41},"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",[43,168562,168563,168571,168591,168611,168631,168635,168639,168662],{"__ignoreMap":41},[46,168564,168565,168567,168569],{"class":48,"line":49},[46,168566,161344],{"class":56},[46,168568,79],{"class":52},[46,168570,57412],{"class":56},[46,168572,168573,168575,168577,168579,168581,168583,168585,168587,168589],{"class":48,"line":60},[46,168574,150013],{"class":56},[46,168576,64644],{"class":173},[46,168578,53404],{"class":56},[46,168580,151516],{"class":173},[46,168582,448],{"class":56},[46,168584,153100],{"class":173},[46,168586,53404],{"class":56},[46,168588,3173],{"class":180},[46,168590,6946],{"class":56},[46,168592,168593,168595,168597,168599,168601,168603,168605,168607,168609],{"class":48,"line":200},[46,168594,150013],{"class":56},[46,168596,64644],{"class":173},[46,168598,53404],{"class":56},[46,168600,152564],{"class":173},[46,168602,448],{"class":56},[46,168604,153100],{"class":173},[46,168606,53404],{"class":56},[46,168608,2997],{"class":180},[46,168610,6946],{"class":56},[46,168612,168613,168615,168617,168619,168621,168623,168625,168627,168629],{"class":48,"line":211},[46,168614,150013],{"class":56},[46,168616,64644],{"class":173},[46,168618,53404],{"class":56},[46,168620,161359],{"class":173},[46,168622,448],{"class":56},[46,168624,153100],{"class":173},[46,168626,53404],{"class":56},[46,168628,2593],{"class":180},[46,168630,6946],{"class":56},[46,168632,168633],{"class":48,"line":222},[46,168634,35220],{"class":56},[46,168636,168637],{"class":48,"line":636},[46,168638,616],{"emptyLinePlaceholder":615},[46,168640,168641,168644,168646,168648,168650,168652,168654,168656,168658,168660],{"class":48,"line":641},[46,168642,168643],{"class":56},"students.sort(",[46,168645,155574],{"class":439},[46,168647,155577],{"class":52},[46,168649,155580],{"class":56},[46,168651,153100],{"class":173},[46,168653,113830],{"class":56},[46,168655,165156],{"class":439},[46,168657,79],{"class":52},[46,168659,33453],{"class":180},[46,168661,459],{"class":56},[46,168663,168664,168666],{"class":48,"line":653},[46,168665,32398],{"class":180},[46,168667,166623],{"class":56},[19,168669,168670,168671,168673],{},"如果逻辑复杂，不要硬写 ",[43,168672,168514],{},"，定义普通函数更清晰。",[14,168675,168677],{"id":168676},"_79-函数作为参数","7.9 函数作为参数",[19,168679,168680],{},"函数可以作为参数传给另一个函数。",[36,168682,168684],{"className":38,"code":168683,"language":40,"meta":41,"style":41},"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",[43,168685,168686,168694,168704,168708,168712,168722,168729,168733,168737],{"__ignoreMap":41},[46,168687,168688,168690,168692],{"class":48,"line":49},[46,168689,748],{"class":52},[46,168691,7223],{"class":169},[46,168693,152721],{"class":56},[46,168695,168696,168698,168700,168702],{"class":48,"line":60},[46,168697,6108],{"class":52},[46,168699,12873],{"class":56},[46,168701,2668],{"class":52},[46,168703,152732],{"class":56},[46,168705,168706],{"class":48,"line":200},[46,168707,616],{"emptyLinePlaceholder":615},[46,168709,168710],{"class":48,"line":211},[46,168711,616],{"emptyLinePlaceholder":615},[46,168713,168714,168716,168719],{"class":48,"line":222},[46,168715,748],{"class":52},[46,168717,168718],{"class":169}," calculate",[46,168720,168721],{"class":56},"(a, b, func):\n",[46,168723,168724,168726],{"class":48,"line":636},[46,168725,6108],{"class":52},[46,168727,168728],{"class":56}," func(a, b)\n",[46,168730,168731],{"class":48,"line":641},[46,168732,616],{"emptyLinePlaceholder":615},[46,168734,168735],{"class":48,"line":653},[46,168736,616],{"emptyLinePlaceholder":615},[46,168738,168739,168741,168744,168746,168748,168750],{"class":48,"line":659},[46,168740,32398],{"class":180},[46,168742,168743],{"class":56},"(calculate(",[46,168745,2633],{"class":180},[46,168747,448],{"class":56},[46,168749,2886],{"class":180},[46,168751,168752],{"class":56},", add))\n",[19,168754,168755],{},"这种思想在排序、回调、框架中经常出现。",[14,168757,168759],{"id":168758},"_710-mapfiltersorted","7.10 map、filter、sorted",[479,168761,168763],{"id":168762},"_7101-map","7.10.1 map",[19,168765,168766,168768],{},[43,168767,76009],{}," 对每个元素执行函数。",[36,168770,168772],{"className":38,"code":168771,"language":40,"meta":41,"style":41},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[43,168773,168774,168798,168821],{"__ignoreMap":41},[46,168775,168776,168778,168780,168782,168784,168786,168788,168790,168792,168794,168796],{"class":48,"line":49},[46,168777,165728],{"class":56},[46,168779,79],{"class":52},[46,168781,54193],{"class":56},[46,168783,2405],{"class":180},[46,168785,448],{"class":56},[46,168787,2272],{"class":180},[46,168789,448],{"class":56},[46,168791,2266],{"class":180},[46,168793,448],{"class":56},[46,168795,2481],{"class":180},[46,168797,35220],{"class":56},[46,168799,168800,168802,168804,168807,168809,168811,168814,168816,168818],{"class":48,"line":60},[46,168801,162934],{"class":56},[46,168803,79],{"class":52},[46,168805,168806],{"class":180}," map",[46,168808,1152],{"class":56},[46,168810,168514],{"class":52},[46,168812,168813],{"class":56}," x: x ",[46,168815,2642],{"class":52},[46,168817,16757],{"class":180},[46,168819,168820],{"class":56},", nums)\n",[46,168822,168823,168825,168827,168829],{"class":48,"line":200},[46,168824,32398],{"class":180},[46,168826,1152],{"class":56},[46,168828,155698],{"class":180},[46,168830,167696],{"class":56},[479,168832,168834],{"id":168833},"_7102-filter","7.10.2 filter",[19,168836,168837,168839],{},[43,168838,82015],{}," 保留满足条件的元素。",[36,168841,168843],{"className":38,"code":168842,"language":40,"meta":41,"style":41},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[43,168844,168845,168873,168898],{"__ignoreMap":41},[46,168846,168847,168849,168851,168853,168855,168857,168859,168861,168863,168865,168867,168869,168871],{"class":48,"line":49},[46,168848,165728],{"class":56},[46,168850,79],{"class":52},[46,168852,54193],{"class":56},[46,168854,2405],{"class":180},[46,168856,448],{"class":56},[46,168858,2272],{"class":180},[46,168860,448],{"class":56},[46,168862,2266],{"class":180},[46,168864,448],{"class":56},[46,168866,2481],{"class":180},[46,168868,448],{"class":56},[46,168870,2506],{"class":180},[46,168872,35220],{"class":56},[46,168874,168875,168877,168879,168882,168884,168886,168888,168890,168892,168894,168896],{"class":48,"line":60},[46,168876,162934],{"class":56},[46,168878,79],{"class":52},[46,168880,168881],{"class":180}," filter",[46,168883,1152],{"class":56},[46,168885,168514],{"class":52},[46,168887,168813],{"class":56},[46,168889,2515],{"class":52},[46,168891,16757],{"class":180},[46,168893,917],{"class":52},[46,168895,887],{"class":180},[46,168897,168820],{"class":56},[46,168899,168900,168902,168904,168906],{"class":48,"line":200},[46,168901,32398],{"class":180},[46,168903,1152],{"class":56},[46,168905,155698],{"class":180},[46,168907,167696],{"class":56},[479,168909,168911],{"id":168910},"_7103-sorted","7.10.3 sorted",[19,168913,168914,168916],{},[43,168915,166864],{}," 返回排序后的新列表。",[36,168918,168920],{"className":38,"code":168919,"language":40,"meta":41,"style":41},"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",[43,168921,168922,168930,168950,168970,168990,168994,168998,169027],{"__ignoreMap":41},[46,168923,168924,168926,168928],{"class":48,"line":49},[46,168925,161344],{"class":56},[46,168927,79],{"class":52},[46,168929,57412],{"class":56},[46,168931,168932,168934,168936,168938,168940,168942,168944,168946,168948],{"class":48,"line":60},[46,168933,150013],{"class":56},[46,168935,64644],{"class":173},[46,168937,53404],{"class":56},[46,168939,151516],{"class":173},[46,168941,448],{"class":56},[46,168943,153100],{"class":173},[46,168945,53404],{"class":56},[46,168947,3173],{"class":180},[46,168949,6946],{"class":56},[46,168951,168952,168954,168956,168958,168960,168962,168964,168966,168968],{"class":48,"line":200},[46,168953,150013],{"class":56},[46,168955,64644],{"class":173},[46,168957,53404],{"class":56},[46,168959,152564],{"class":173},[46,168961,448],{"class":56},[46,168963,153100],{"class":173},[46,168965,53404],{"class":56},[46,168967,2997],{"class":180},[46,168969,6946],{"class":56},[46,168971,168972,168974,168976,168978,168980,168982,168984,168986,168988],{"class":48,"line":211},[46,168973,150013],{"class":56},[46,168975,64644],{"class":173},[46,168977,53404],{"class":56},[46,168979,161359],{"class":173},[46,168981,448],{"class":56},[46,168983,153100],{"class":173},[46,168985,53404],{"class":56},[46,168987,2593],{"class":180},[46,168989,6946],{"class":56},[46,168991,168992],{"class":48,"line":222},[46,168993,35220],{"class":56},[46,168995,168996],{"class":48,"line":636},[46,168997,616],{"emptyLinePlaceholder":615},[46,168999,169000,169002,169004,169006,169009,169011,169013,169015,169017,169019,169021,169023,169025],{"class":48,"line":641},[46,169001,162934],{"class":56},[46,169003,79],{"class":52},[46,169005,165232],{"class":180},[46,169007,169008],{"class":56},"(students, ",[46,169010,155574],{"class":439},[46,169012,155577],{"class":52},[46,169014,155580],{"class":56},[46,169016,153100],{"class":173},[46,169018,113830],{"class":56},[46,169020,165156],{"class":439},[46,169022,79],{"class":52},[46,169024,33453],{"class":180},[46,169026,459],{"class":56},[46,169028,169029,169031],{"class":48,"line":653},[46,169030,32398],{"class":180},[46,169032,78550],{"class":56},[14,169034,169036],{"id":169035},"_711-闭包入门","7.11 闭包入门",[19,169038,169039],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[36,169041,169043],{"className":38,"code":169042,"language":40,"meta":41,"style":41},"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",[43,169044,169045,169055,169065,169076,169080,169087,169091,169095,169109],{"__ignoreMap":41},[46,169046,169047,169049,169052],{"class":48,"line":49},[46,169048,748],{"class":52},[46,169050,169051],{"class":169}," outer",[46,169053,169054],{"class":56},"(base):\n",[46,169056,169057,169059,169062],{"class":48,"line":60},[46,169058,32781],{"class":52},[46,169060,169061],{"class":169}," inner",[46,169063,169064],{"class":56},"(num):\n",[46,169066,169067,169069,169072,169074],{"class":48,"line":200},[46,169068,16754],{"class":52},[46,169070,169071],{"class":56}," base ",[46,169073,2668],{"class":52},[46,169075,168207],{"class":56},[46,169077,169078],{"class":48,"line":211},[46,169079,616],{"emptyLinePlaceholder":615},[46,169081,169082,169084],{"class":48,"line":222},[46,169083,6108],{"class":52},[46,169085,169086],{"class":56}," inner\n",[46,169088,169089],{"class":48,"line":636},[46,169090,616],{"emptyLinePlaceholder":615},[46,169092,169093],{"class":48,"line":641},[46,169094,616],{"emptyLinePlaceholder":615},[46,169096,169097,169100,169102,169105,169107],{"class":48,"line":653},[46,169098,169099],{"class":56},"add_10 ",[46,169101,79],{"class":52},[46,169103,169104],{"class":56}," outer(",[46,169106,2633],{"class":180},[46,169108,459],{"class":56},[46,169110,169111,169113,169116,169118],{"class":48,"line":659},[46,169112,32398],{"class":180},[46,169114,169115],{"class":56},"(add_10(",[46,169117,2506],{"class":180},[46,169119,32479],{"class":56},[19,169121,169122],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,169124,169126],{"id":169125},"_712-装饰器入门","7.12 装饰器入门",[19,169128,169129],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[36,169131,169133],{"className":38,"code":169132,"language":40,"meta":41,"style":41},"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",[43,169134,169135,169144,169153,169164,169169,169180,169184,169191,169195,169199,169204,169212,169222,169226,169230],{"__ignoreMap":41},[46,169136,169137,169139,169141],{"class":48,"line":49},[46,169138,748],{"class":52},[46,169140,89154],{"class":169},[46,169142,169143],{"class":56},"(func):\n",[46,169145,169146,169148,169151],{"class":48,"line":60},[46,169147,32781],{"class":52},[46,169149,169150],{"class":169}," wrapper",[46,169152,33928],{"class":56},[46,169154,169155,169157,169159,169162],{"class":48,"line":200},[46,169156,34425],{"class":180},[46,169158,1152],{"class":56},[46,169160,169161],{"class":173},"\"函数开始执行\"",[46,169163,459],{"class":56},[46,169165,169166],{"class":48,"line":211},[46,169167,169168],{"class":56},"        func()\n",[46,169170,169171,169173,169175,169178],{"class":48,"line":222},[46,169172,34425],{"class":180},[46,169174,1152],{"class":56},[46,169176,169177],{"class":173},"\"函数执行结束\"",[46,169179,459],{"class":56},[46,169181,169182],{"class":48,"line":636},[46,169183,616],{"emptyLinePlaceholder":615},[46,169185,169186,169188],{"class":48,"line":641},[46,169187,6108],{"class":52},[46,169189,169190],{"class":56}," wrapper\n",[46,169192,169193],{"class":48,"line":653},[46,169194,616],{"emptyLinePlaceholder":615},[46,169196,169197],{"class":48,"line":659},[46,169198,616],{"emptyLinePlaceholder":615},[46,169200,169201],{"class":48,"line":665},[46,169202,169203],{"class":169},"@log\n",[46,169205,169206,169208,169210],{"class":48,"line":670},[46,169207,748],{"class":52},[46,169209,162624],{"class":169},[46,169211,33928],{"class":56},[46,169213,169214,169216,169218,169220],{"class":48,"line":676},[46,169215,1227],{"class":180},[46,169217,1152],{"class":56},[46,169219,7857],{"class":173},[46,169221,459],{"class":56},[46,169223,169224],{"class":48,"line":682},[46,169225,616],{"emptyLinePlaceholder":615},[46,169227,169228],{"class":48,"line":688},[46,169229,616],{"emptyLinePlaceholder":615},[46,169231,169232],{"class":48,"line":693},[46,169233,162659],{"class":56},[19,169235,159902],{},[36,169237,169239],{"className":38,"code":169238,"language":40,"meta":41,"style":41},"say_hello = log(say_hello)\n",[43,169240,169241],{"__ignoreMap":41},[46,169242,169243,169246,169248],{"class":48,"line":49},[46,169244,169245],{"class":56},"say_hello ",[46,169247,79],{"class":52},[46,169249,169250],{"class":56}," log(say_hello)\n",[19,169252,169253],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,169255,169257],{"id":169256},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[36,169259,169261],{"className":38,"code":169260,"language":40,"meta":41,"style":41},"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",[43,169262,169263,169271,169288,169298,169317,169327,169334,169338,169344,169348,169352,169356,169364,169374,169378,169382],{"__ignoreMap":41},[46,169264,169265,169267,169269],{"class":48,"line":49},[46,169266,748],{"class":52},[46,169268,89154],{"class":169},[46,169270,169143],{"class":56},[46,169272,169273,169275,169277,169279,169281,169284,169286],{"class":48,"line":60},[46,169274,32781],{"class":52},[46,169276,169150],{"class":169},[46,169278,1152],{"class":56},[46,169280,2642],{"class":52},[46,169282,169283],{"class":56},"args, ",[46,169285,12665],{"class":52},[46,169287,168294],{"class":56},[46,169289,169290,169292,169294,169296],{"class":48,"line":200},[46,169291,34425],{"class":180},[46,169293,1152],{"class":56},[46,169295,169161],{"class":173},[46,169297,459],{"class":56},[46,169299,169300,169303,169305,169308,169310,169312,169314],{"class":48,"line":211},[46,169301,169302],{"class":56},"        result ",[46,169304,79],{"class":52},[46,169306,169307],{"class":56}," func(",[46,169309,2642],{"class":52},[46,169311,169283],{"class":56},[46,169313,12665],{"class":52},[46,169315,169316],{"class":56},"kwargs)\n",[46,169318,169319,169321,169323,169325],{"class":48,"line":222},[46,169320,34425],{"class":180},[46,169322,1152],{"class":56},[46,169324,169177],{"class":173},[46,169326,459],{"class":56},[46,169328,169329,169331],{"class":48,"line":636},[46,169330,16754],{"class":52},[46,169332,169333],{"class":56}," result\n",[46,169335,169336],{"class":48,"line":641},[46,169337,616],{"emptyLinePlaceholder":615},[46,169339,169340,169342],{"class":48,"line":653},[46,169341,6108],{"class":52},[46,169343,169190],{"class":56},[46,169345,169346],{"class":48,"line":659},[46,169347,616],{"emptyLinePlaceholder":615},[46,169349,169350],{"class":48,"line":665},[46,169351,616],{"emptyLinePlaceholder":615},[46,169353,169354],{"class":48,"line":670},[46,169355,169203],{"class":169},[46,169357,169358,169360,169362],{"class":48,"line":676},[46,169359,748],{"class":52},[46,169361,7223],{"class":169},[46,169363,152721],{"class":56},[46,169365,169366,169368,169370,169372],{"class":48,"line":682},[46,169367,6108],{"class":52},[46,169369,12873],{"class":56},[46,169371,2668],{"class":52},[46,169373,152732],{"class":56},[46,169375,169376],{"class":48,"line":688},[46,169377,616],{"emptyLinePlaceholder":615},[46,169379,169380],{"class":48,"line":693},[46,169381,616],{"emptyLinePlaceholder":615},[46,169383,169384,169386,169388,169390,169392,169394],{"class":48,"line":699},[46,169385,32398],{"class":180},[46,169387,168228],{"class":56},[46,169389,2633],{"class":180},[46,169391,448],{"class":56},[46,169393,2886],{"class":180},[46,169395,32479],{"class":56},[19,169397,169398,169399,1700,169401,169403],{},"这个写法使用 ",[43,169400,168160],{},[43,169402,168275],{}," 接收原函数的所有参数。",[14,169405,169407],{"id":169406},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[19,169409,124920],{},[23,169411,169412,169415,169418],{},[26,169413,169414],{},"给定一组学生数据。",[26,169416,169417],{},"封装函数，根据传入规则筛选学生。",[26,169419,169420],{},"筛选及格、优秀、未成年学生。",[19,169422,12039],{},[36,169424,169426],{"className":38,"code":169425,"language":40,"meta":41,"style":41},"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",[43,169427,169428,169436,169464,169492,169520,169524,169528,169532,169542,169550,169560,169567,169572,169578,169582,169586,169610,169633,169656,169660,169667,169674],{"__ignoreMap":41},[46,169429,169430,169432,169434],{"class":48,"line":49},[46,169431,161344],{"class":56},[46,169433,79],{"class":52},[46,169435,57412],{"class":56},[46,169437,169438,169440,169442,169444,169446,169448,169450,169452,169454,169456,169458,169460,169462],{"class":48,"line":60},[46,169439,150013],{"class":56},[46,169441,64644],{"class":173},[46,169443,53404],{"class":56},[46,169445,151516],{"class":173},[46,169447,448],{"class":56},[46,169449,71089],{"class":173},[46,169451,53404],{"class":56},[46,169453,2836],{"class":180},[46,169455,448],{"class":56},[46,169457,153100],{"class":173},[46,169459,53404],{"class":56},[46,169461,3173],{"class":180},[46,169463,6946],{"class":56},[46,169465,169466,169468,169470,169472,169474,169476,169478,169480,169482,169484,169486,169488,169490],{"class":48,"line":200},[46,169467,150013],{"class":56},[46,169469,64644],{"class":173},[46,169471,53404],{"class":56},[46,169473,152564],{"class":173},[46,169475,448],{"class":56},[46,169477,71089],{"class":173},[46,169479,53404],{"class":56},[46,169481,2811],{"class":180},[46,169483,448],{"class":56},[46,169485,153100],{"class":173},[46,169487,53404],{"class":56},[46,169489,2997],{"class":180},[46,169491,6946],{"class":56},[46,169493,169494,169496,169498,169500,169502,169504,169506,169508,169510,169512,169514,169516,169518],{"class":48,"line":211},[46,169495,150013],{"class":56},[46,169497,64644],{"class":173},[46,169499,53404],{"class":56},[46,169501,161359],{"class":173},[46,169503,448],{"class":56},[46,169505,71089],{"class":173},[46,169507,53404],{"class":56},[46,169509,2861],{"class":180},[46,169511,448],{"class":56},[46,169513,153100],{"class":173},[46,169515,53404],{"class":56},[46,169517,3068],{"class":180},[46,169519,6946],{"class":56},[46,169521,169522],{"class":48,"line":222},[46,169523,35220],{"class":56},[46,169525,169526],{"class":48,"line":636},[46,169527,616],{"emptyLinePlaceholder":615},[46,169529,169530],{"class":48,"line":641},[46,169531,616],{"emptyLinePlaceholder":615},[46,169533,169534,169536,169539],{"class":48,"line":653},[46,169535,748],{"class":52},[46,169537,169538],{"class":169}," filter_students",[46,169540,169541],{"class":56},"(students, condition):\n",[46,169543,169544,169546,169548],{"class":48,"line":659},[46,169545,162851],{"class":56},[46,169547,79],{"class":52},[46,169549,53805],{"class":56},[46,169551,169552,169554,169556,169558],{"class":48,"line":665},[46,169553,1140],{"class":52},[46,169555,153765],{"class":56},[46,169557,1146],{"class":52},[46,169559,153770],{"class":56},[46,169561,169562,169564],{"class":48,"line":670},[46,169563,4525],{"class":52},[46,169565,169566],{"class":56}," condition(student):\n",[46,169568,169569],{"class":48,"line":676},[46,169570,169571],{"class":56},"            result.append(student)\n",[46,169573,169574,169576],{"class":48,"line":682},[46,169575,6108],{"class":52},[46,169577,169333],{"class":56},[46,169579,169580],{"class":48,"line":688},[46,169581,616],{"emptyLinePlaceholder":615},[46,169583,169584],{"class":48,"line":693},[46,169585,616],{"emptyLinePlaceholder":615},[46,169587,169588,169590,169592,169595,169597,169600,169602,169604,169606,169608],{"class":48,"line":699},[46,169589,167329],{"class":56},[46,169591,79],{"class":52},[46,169593,169594],{"class":56}," filter_students(students, ",[46,169596,168514],{"class":52},[46,169598,169599],{"class":56}," s: s[",[46,169601,153100],{"class":173},[46,169603,6460],{"class":56},[46,169605,3750],{"class":52},[46,169607,159465],{"class":180},[46,169609,459],{"class":56},[46,169611,169612,169615,169617,169619,169621,169623,169625,169627,169629,169631],{"class":48,"line":705},[46,169613,169614],{"class":56},"excellent ",[46,169616,79],{"class":52},[46,169618,169594],{"class":56},[46,169620,168514],{"class":52},[46,169622,169599],{"class":56},[46,169624,153100],{"class":173},[46,169626,6460],{"class":56},[46,169628,3750],{"class":52},[46,169630,159416],{"class":180},[46,169632,459],{"class":56},[46,169634,169635,169638,169640,169642,169644,169646,169648,169650,169652,169654],{"class":48,"line":711},[46,169636,169637],{"class":56},"under_age ",[46,169639,79],{"class":52},[46,169641,169594],{"class":56},[46,169643,168514],{"class":52},[46,169645,169599],{"class":56},[46,169647,71089],{"class":173},[46,169649,6460],{"class":56},[46,169651,821],{"class":52},[46,169653,157913],{"class":180},[46,169655,459],{"class":56},[46,169657,169658],{"class":48,"line":717},[46,169659,616],{"emptyLinePlaceholder":615},[46,169661,169662,169664],{"class":48,"line":723},[46,169663,32398],{"class":180},[46,169665,169666],{"class":56},"(passed)\n",[46,169668,169669,169671],{"class":48,"line":729},[46,169670,32398],{"class":180},[46,169672,169673],{"class":56},"(excellent)\n",[46,169675,169676,169678],{"class":48,"line":735},[46,169677,32398],{"class":180},[46,169679,169680],{"class":56},"(under_age)\n",[14,169682,169684],{"id":169683},"_715-易错点","7.15 易错点",[23,169686,169687,169690,169698,169703,169714],{},[26,169688,169689],{},"默认参数不要写可变对象。",[26,169691,169692,169694,169695,169697],{},[43,169693,168160],{}," 是元组，",[43,169696,168275],{}," 是字典。",[26,169699,169700,169702],{},[43,169701,168514],{}," 只适合简单表达式。",[26,169704,169705,1700,169707,169709,169710,169713],{},[43,169706,76009],{},[43,169708,82015],{}," 的结果是迭代器，常用 ",[43,169711,169712],{},"list()"," 转换查看。",[26,169715,169716],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,169718,169720],{"id":169719},"_716-本章练习","7.16 本章练习",[23,169722,169723,169730,169736,169741,169746],{},[26,169724,169725,169726,169729],{},"写函数 ",[43,169727,169728],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[26,169731,169725,169732,169735],{},[43,169733,169734],{},"print_user(**kwargs)","，输出用户所有字段。",[26,169737,106254,169738,169740],{},[43,169739,168514],{}," 对学生列表按年龄排序。",[26,169742,106254,169743,169745],{},[43,169744,82015],{}," 找出成绩不及格的学生。",[26,169747,169748],{},"写一个装饰器，统计函数执行前后的提示信息。",[2098,169750,169751],{},"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":41,"searchDepth":60,"depth":60,"links":169753},[169754,169755,169756,169757,169758,169759,169763,169764,169765,169766,169771,169772,169773,169774,169775,169776],{"id":167612,"depth":60,"text":167613},{"id":167726,"depth":60,"text":167727},{"id":167815,"depth":60,"text":167816},{"id":167877,"depth":60,"text":167878},{"id":168023,"depth":60,"text":168024},{"id":168150,"depth":60,"text":168151,"children":169760},[169761,169762],{"id":168154,"depth":200,"text":168155},{"id":168269,"depth":200,"text":168270},{"id":168350,"depth":60,"text":168351},{"id":168508,"depth":60,"text":168509},{"id":168676,"depth":60,"text":168677},{"id":168758,"depth":60,"text":168759,"children":169767},[169768,169769,169770],{"id":168762,"depth":200,"text":168763},{"id":168833,"depth":200,"text":168834},{"id":168910,"depth":200,"text":168911},{"id":169035,"depth":60,"text":169036},{"id":169125,"depth":60,"text":169126},{"id":169256,"depth":60,"text":169257},{"id":169406,"depth":60,"text":169407},{"id":169683,"depth":60,"text":169684},{"id":169719,"depth":60,"text":169720},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":167604,"description":25378},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":169783,"title":169784,"body":169785,"description":25378,"extension":2125,"meta":172304,"navigation":615,"path":172305,"seo":172306,"stem":172307,"__hash__":172308},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":169786,"toc":172279},[169787,169790,169794,169797,169800,169831,169835,169839,169842,169869,169873,169876,169927,169930,169945,169948,169983,169987,169989,170013,170016,170076,170080,170084,170087,170144,170147,170167,170171,170174,170237,170241,170244,170300,170307,170331,170335,170338,170401,170405,170410,170461,170464,170468,170473,170540,170543,170625,170629,170634,170685,170688,170692,170695,170698,170706,170709,170755,170758,170804,170808,170814,170858,170861,170907,170910,170950,170953,171014,171018,171021,171111,171114,171256,171259,171326,171330,171333,171336,171477,171480,171558,171561,171737,171741,171743,171754,171756,171955,171959,172203,172207,172241,172245,172276],[10,169788,169784],{"id":169789},"_8-文件操作",[14,169791,169793],{"id":169792},"_81-文件操作的意义","8.1 文件操作的意义",[19,169795,169796],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[19,169798,169799],{},"常见文件类型：",[23,169801,169802,169808,169814,169820,169826],{},[26,169803,169804,169807],{},[43,169805,169806],{},".txt","：普通文本。",[26,169809,169810,169813],{},[43,169811,169812],{},".csv","：表格文本。",[26,169815,169816,169819],{},[43,169817,169818],{},".json","：结构化数据。",[26,169821,169822,169825],{},[43,169823,169824],{},".log","：日志文件。",[26,169827,169828,169830],{},[43,169829,147980],{},"：Python 源代码。",[14,169832,169834],{"id":169833},"_82-路径","8.2 路径",[479,169836,169838],{"id":169837},"_821-相对路径","8.2.1 相对路径",[19,169840,169841],{},"相对当前运行目录：",[36,169843,169845],{"className":38,"code":169844,"language":40,"meta":41,"style":41},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[43,169846,169847],{"__ignoreMap":41},[46,169848,169849,169851,169853,169855,169857,169859,169861,169863,169865,169867],{"class":48,"line":49},[46,169850,88878],{"class":180},[46,169852,1152],{"class":56},[46,169854,148424],{"class":173},[46,169856,448],{"class":56},[46,169858,148429],{"class":173},[46,169860,448],{"class":56},[46,169862,148434],{"class":439},[46,169864,79],{"class":52},[46,169866,148439],{"class":173},[46,169868,459],{"class":56},[479,169870,169872],{"id":169871},"_822-绝对路径","8.2.2 绝对路径",[19,169874,169875],{},"从根目录或盘符开始：",[36,169877,169879],{"className":38,"code":169878,"language":40,"meta":41,"style":41},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[43,169880,169881,169904],{"__ignoreMap":41},[46,169882,169883,169885,169887,169890,169892,169894,169896,169898,169900,169902],{"class":48,"line":49},[46,169884,88878],{"class":180},[46,169886,1152],{"class":56},[46,169888,169889],{"class":173},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[46,169891,448],{"class":56},[46,169893,148429],{"class":173},[46,169895,448],{"class":56},[46,169897,148434],{"class":439},[46,169899,79],{"class":52},[46,169901,148439],{"class":173},[46,169903,459],{"class":56},[46,169905,169906,169908,169910,169913,169915,169917,169919,169921,169923,169925],{"class":48,"line":60},[46,169907,88878],{"class":180},[46,169909,1152],{"class":56},[46,169911,169912],{"class":173},"\"D:\u002Fdata\u002Fdata.txt\"",[46,169914,448],{"class":56},[46,169916,148429],{"class":173},[46,169918,448],{"class":56},[46,169920,148434],{"class":439},[46,169922,79],{"class":52},[46,169924,148439],{"class":173},[46,169926,459],{"class":56},[19,169928,169929],{},"Windows 路径建议写成：",[36,169931,169933],{"className":38,"code":169932,"language":40,"meta":41,"style":41},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[43,169934,169935],{"__ignoreMap":41},[46,169936,169937,169940,169942],{"class":48,"line":49},[46,169938,169939],{"class":56},"path ",[46,169941,79],{"class":52},[46,169943,169944],{"class":173}," \"D:\u002Fdata\u002Fdata.txt\"\n",[19,169946,169947],{},"或原始字符串：",[36,169949,169951],{"className":38,"code":169950,"language":40,"meta":41,"style":41},"path = r\"D:\\data\\data.txt\"\n",[43,169952,169953],{"__ignoreMap":41},[46,169954,169955,169957,169959,169961,169963,169966,169969,169972,169974,169976,169978,169981],{"class":48,"line":49},[46,169956,169939],{"class":56},[46,169958,79],{"class":52},[46,169960,19122],{"class":52},[46,169962,2439],{"class":173},[46,169964,169965],{"class":49945},"D:",[46,169967,169968],{"class":180},"\\d",[46,169970,169971],{"class":49945},"ata",[46,169973,169968],{"class":180},[46,169975,169971],{"class":49945},[46,169977,2744],{"class":180},[46,169979,169980],{"class":49945},"txt",[46,169982,27125],{"class":173},[14,169984,169986],{"id":169985},"_83-open函数","8.3 open函数",[19,169988,7197],{},[36,169990,169992],{"className":38,"code":169991,"language":40,"meta":41,"style":41},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[43,169993,169994],{"__ignoreMap":41},[46,169995,169996,169998,170000,170002,170005,170007,170009,170011],{"class":48,"line":49},[46,169997,47325],{"class":439},[46,169999,647],{"class":52},[46,170001,148419],{"class":180},[46,170003,170004],{"class":56},"(文件路径, 打开模式, ",[46,170006,148434],{"class":439},[46,170008,79],{"class":52},[46,170010,148439],{"class":173},[46,170012,459],{"class":56},[19,170014,170015],{},"常见模式：",[97,170017,170018,170027],{},[100,170019,170020],{},[103,170021,170022,170025],{},[106,170023,170024],{},"模式",[106,170026,27861],{},[120,170028,170029,170038,170047,170056,170066],{},[103,170030,170031,170035],{},[125,170032,170033],{},[43,170034,2856],{},[125,170036,170037],{},"只读，文件不存在会报错",[103,170039,170040,170044],{},[125,170041,170042],{},[43,170043,2981],{},[125,170045,170046],{},"只写，文件不存在会创建，存在会清空",[103,170048,170049,170053],{},[125,170050,170051],{},[43,170052,2426],{},[125,170054,170055],{},"追加，文件不存在会创建",[103,170057,170058,170063],{},[125,170059,170060],{},[43,170061,170062],{},"rb",[125,170064,170065],{},"二进制只读",[103,170067,170068,170073],{},[125,170069,170070],{},[43,170071,170072],{},"wb",[125,170074,170075],{},"二进制只写",[14,170077,170079],{"id":170078},"_84-读取文件","8.4 读取文件",[479,170081,170083],{"id":170082},"_841-read","8.4.1 read",[19,170085,170086],{},"一次读取全部内容：",[36,170088,170090],{"className":38,"code":170089,"language":40,"meta":41,"style":41},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[43,170091,170092,170118,170130,170137],{"__ignoreMap":41},[46,170093,170094,170096,170098,170100,170102,170104,170106,170108,170110,170112,170114,170116],{"class":48,"line":49},[46,170095,47325],{"class":439},[46,170097,647],{"class":52},[46,170099,148419],{"class":180},[46,170101,1152],{"class":56},[46,170103,148424],{"class":173},[46,170105,448],{"class":56},[46,170107,148429],{"class":173},[46,170109,448],{"class":56},[46,170111,148434],{"class":439},[46,170113,79],{"class":52},[46,170115,148439],{"class":173},[46,170117,459],{"class":56},[46,170119,170120,170123,170125,170127],{"class":48,"line":60},[46,170121,170122],{"class":56},"content ",[46,170124,79],{"class":52},[46,170126,149781],{"class":439},[46,170128,170129],{"class":56},".read()\n",[46,170131,170132,170134],{"class":48,"line":200},[46,170133,32398],{"class":180},[46,170135,170136],{"class":56},"(content)\n",[46,170138,170139,170141],{"class":48,"line":211},[46,170140,47325],{"class":439},[46,170142,170143],{"class":56},".close()\n",[19,170145,170146],{},"可以指定读取字符数：",[36,170148,170150],{"className":38,"code":170149,"language":40,"meta":41,"style":41},"content = file.read(10)\n",[43,170151,170152],{"__ignoreMap":41},[46,170153,170154,170156,170158,170160,170163,170165],{"class":48,"line":49},[46,170155,170122],{"class":56},[46,170157,79],{"class":52},[46,170159,149781],{"class":439},[46,170161,170162],{"class":56},".read(",[46,170164,2633],{"class":180},[46,170166,459],{"class":56},[479,170168,170170],{"id":170169},"_842-readline","8.4.2 readline",[19,170172,170173],{},"一次读取一行：",[36,170175,170177],{"className":38,"code":170176,"language":40,"meta":41,"style":41},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[43,170178,170179,170205,170209,170220,170227,170231],{"__ignoreMap":41},[46,170180,170181,170183,170185,170187,170189,170191,170193,170195,170197,170199,170201,170203],{"class":48,"line":49},[46,170182,47325],{"class":439},[46,170184,647],{"class":52},[46,170186,148419],{"class":180},[46,170188,1152],{"class":56},[46,170190,148424],{"class":173},[46,170192,448],{"class":56},[46,170194,148429],{"class":173},[46,170196,448],{"class":56},[46,170198,148434],{"class":439},[46,170200,79],{"class":52},[46,170202,148439],{"class":173},[46,170204,459],{"class":56},[46,170206,170207],{"class":48,"line":60},[46,170208,616],{"emptyLinePlaceholder":615},[46,170210,170211,170213,170215,170217],{"class":48,"line":200},[46,170212,148880],{"class":56},[46,170214,79],{"class":52},[46,170216,149781],{"class":439},[46,170218,170219],{"class":56},".readline()\n",[46,170221,170222,170224],{"class":48,"line":211},[46,170223,32398],{"class":180},[46,170225,170226],{"class":56},"(line)\n",[46,170228,170229],{"class":48,"line":222},[46,170230,616],{"emptyLinePlaceholder":615},[46,170232,170233,170235],{"class":48,"line":636},[46,170234,47325],{"class":439},[46,170236,170143],{"class":56},[479,170238,170240],{"id":170239},"_843-readlines","8.4.3 readlines",[19,170242,170243],{},"读取所有行，返回列表：",[36,170245,170247],{"className":38,"code":170246,"language":40,"meta":41,"style":41},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[43,170248,170249,170275,170287,170294],{"__ignoreMap":41},[46,170250,170251,170253,170255,170257,170259,170261,170263,170265,170267,170269,170271,170273],{"class":48,"line":49},[46,170252,47325],{"class":439},[46,170254,647],{"class":52},[46,170256,148419],{"class":180},[46,170258,1152],{"class":56},[46,170260,148424],{"class":173},[46,170262,448],{"class":56},[46,170264,148429],{"class":173},[46,170266,448],{"class":56},[46,170268,148434],{"class":439},[46,170270,79],{"class":52},[46,170272,148439],{"class":173},[46,170274,459],{"class":56},[46,170276,170277,170280,170282,170284],{"class":48,"line":60},[46,170278,170279],{"class":56},"lines ",[46,170281,79],{"class":52},[46,170283,149781],{"class":439},[46,170285,170286],{"class":56},".readlines()\n",[46,170288,170289,170291],{"class":48,"line":200},[46,170290,32398],{"class":180},[46,170292,170293],{"class":56},"(lines)\n",[46,170295,170296,170298],{"class":48,"line":211},[46,170297,47325],{"class":439},[46,170299,170143],{"class":56},[19,170301,170302,170303,170306],{},"每一行通常带有换行符，可以用 ",[43,170304,170305],{},"strip()"," 去掉：",[36,170308,170310],{"className":38,"code":170309,"language":40,"meta":41,"style":41},"for line in lines:\n    print(line.strip())\n",[43,170311,170312,170324],{"__ignoreMap":41},[46,170313,170314,170316,170319,170321],{"class":48,"line":49},[46,170315,1713],{"class":52},[46,170317,170318],{"class":56}," line ",[46,170320,1146],{"class":52},[46,170322,170323],{"class":56}," lines:\n",[46,170325,170326,170328],{"class":48,"line":60},[46,170327,1227],{"class":180},[46,170329,170330],{"class":56},"(line.strip())\n",[479,170332,170334],{"id":170333},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[19,170336,170337],{},"推荐读取大文件时使用：",[36,170339,170341],{"className":38,"code":170340,"language":40,"meta":41,"style":41},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[43,170342,170343,170369,170373,170385,170391,170395],{"__ignoreMap":41},[46,170344,170345,170347,170349,170351,170353,170355,170357,170359,170361,170363,170365,170367],{"class":48,"line":49},[46,170346,47325],{"class":439},[46,170348,647],{"class":52},[46,170350,148419],{"class":180},[46,170352,1152],{"class":56},[46,170354,148424],{"class":173},[46,170356,448],{"class":56},[46,170358,148429],{"class":173},[46,170360,448],{"class":56},[46,170362,148434],{"class":439},[46,170364,79],{"class":52},[46,170366,148439],{"class":173},[46,170368,459],{"class":56},[46,170370,170371],{"class":48,"line":60},[46,170372,616],{"emptyLinePlaceholder":615},[46,170374,170375,170377,170379,170381,170383],{"class":48,"line":200},[46,170376,1713],{"class":52},[46,170378,170318],{"class":56},[46,170380,1146],{"class":52},[46,170382,149781],{"class":439},[46,170384,760],{"class":56},[46,170386,170387,170389],{"class":48,"line":211},[46,170388,1227],{"class":180},[46,170390,170330],{"class":56},[46,170392,170393],{"class":48,"line":222},[46,170394,616],{"emptyLinePlaceholder":615},[46,170396,170397,170399],{"class":48,"line":636},[46,170398,47325],{"class":439},[46,170400,170143],{"class":56},[14,170402,170404],{"id":170403},"_85-with语句","8.5 with语句",[19,170406,170407,170409],{},[43,170408,392],{}," 会自动关闭文件，推荐使用。",[36,170411,170413],{"className":38,"code":170412,"language":40,"meta":41,"style":41},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[43,170414,170415,170445,170455],{"__ignoreMap":41},[46,170416,170417,170419,170421,170423,170425,170427,170429,170431,170433,170435,170437,170439,170441,170443],{"class":48,"line":49},[46,170418,392],{"class":52},[46,170420,148419],{"class":180},[46,170422,1152],{"class":56},[46,170424,148424],{"class":173},[46,170426,448],{"class":56},[46,170428,148429],{"class":173},[46,170430,448],{"class":56},[46,170432,148434],{"class":439},[46,170434,79],{"class":52},[46,170436,148439],{"class":173},[46,170438,15716],{"class":56},[46,170440,398],{"class":52},[46,170442,149781],{"class":439},[46,170444,760],{"class":56},[46,170446,170447,170449,170451,170453],{"class":48,"line":60},[46,170448,148451],{"class":56},[46,170450,79],{"class":52},[46,170452,149781],{"class":439},[46,170454,170129],{"class":56},[46,170456,170457,170459],{"class":48,"line":200},[46,170458,1227],{"class":180},[46,170460,170136],{"class":56},[19,170462,170463],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,170465,170467],{"id":170466},"_86-写入文件","8.6 写入文件",[19,170469,170470,170472],{},[43,170471,2981],{}," 模式会清空原文件。",[36,170474,170476],{"className":38,"code":170475,"language":40,"meta":41,"style":41},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[43,170477,170478,170508,170525],{"__ignoreMap":41},[46,170479,170480,170482,170484,170486,170488,170490,170492,170494,170496,170498,170500,170502,170504,170506],{"class":48,"line":49},[46,170481,392],{"class":52},[46,170483,148419],{"class":180},[46,170485,1152],{"class":56},[46,170487,148424],{"class":173},[46,170489,448],{"class":56},[46,170491,153604],{"class":173},[46,170493,448],{"class":56},[46,170495,148434],{"class":439},[46,170497,79],{"class":52},[46,170499,148439],{"class":173},[46,170501,15716],{"class":56},[46,170503,398],{"class":52},[46,170505,149781],{"class":439},[46,170507,760],{"class":56},[46,170509,170510,170513,170516,170519,170521,170523],{"class":48,"line":60},[46,170511,170512],{"class":439},"    file",[46,170514,170515],{"class":56},".write(",[46,170517,170518],{"class":173},"\"hello",[46,170520,158153],{"class":180},[46,170522,2439],{"class":173},[46,170524,459],{"class":56},[46,170526,170527,170529,170531,170534,170536,170538],{"class":48,"line":200},[46,170528,170512],{"class":439},[46,170530,170515],{"class":56},[46,170532,170533],{"class":173},"\"python",[46,170535,158153],{"class":180},[46,170537,2439],{"class":173},[46,170539,459],{"class":56},[19,170541,170542],{},"写入多行：",[36,170544,170546],{"className":38,"code":170545,"language":40,"meta":41,"style":41},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[43,170547,170548,170583,170587,170618],{"__ignoreMap":41},[46,170549,170550,170552,170554,170556,170559,170561,170563,170565,170568,170570,170572,170574,170577,170579,170581],{"class":48,"line":49},[46,170551,170279],{"class":56},[46,170553,79],{"class":52},[46,170555,54193],{"class":56},[46,170557,170558],{"class":173},"\"小明,18",[46,170560,158153],{"class":180},[46,170562,2439],{"class":173},[46,170564,448],{"class":56},[46,170566,170567],{"class":173},"\"小红,17",[46,170569,158153],{"class":180},[46,170571,2439],{"class":173},[46,170573,448],{"class":56},[46,170575,170576],{"class":173},"\"小刚,19",[46,170578,158153],{"class":180},[46,170580,2439],{"class":173},[46,170582,35220],{"class":56},[46,170584,170585],{"class":48,"line":60},[46,170586,616],{"emptyLinePlaceholder":615},[46,170588,170589,170591,170593,170595,170598,170600,170602,170604,170606,170608,170610,170612,170614,170616],{"class":48,"line":200},[46,170590,392],{"class":52},[46,170592,148419],{"class":180},[46,170594,1152],{"class":56},[46,170596,170597],{"class":173},"\"students.txt\"",[46,170599,448],{"class":56},[46,170601,153604],{"class":173},[46,170603,448],{"class":56},[46,170605,148434],{"class":439},[46,170607,79],{"class":52},[46,170609,148439],{"class":173},[46,170611,15716],{"class":56},[46,170613,398],{"class":52},[46,170615,149781],{"class":439},[46,170617,760],{"class":56},[46,170619,170620,170622],{"class":48,"line":211},[46,170621,170512],{"class":439},[46,170623,170624],{"class":56},".writelines(lines)\n",[14,170626,170628],{"id":170627},"_87-追加文件","8.7 追加文件",[19,170630,170631,170633],{},[43,170632,2426],{}," 模式不会清空原内容，而是在末尾追加。",[36,170635,170637],{"className":38,"code":170636,"language":40,"meta":41,"style":41},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[43,170638,170639,170670],{"__ignoreMap":41},[46,170640,170641,170643,170645,170647,170650,170652,170654,170656,170658,170660,170662,170664,170666,170668],{"class":48,"line":49},[46,170642,392],{"class":52},[46,170644,148419],{"class":180},[46,170646,1152],{"class":56},[46,170648,170649],{"class":173},"\"log.txt\"",[46,170651,448],{"class":56},[46,170653,166953],{"class":173},[46,170655,448],{"class":56},[46,170657,148434],{"class":439},[46,170659,79],{"class":52},[46,170661,148439],{"class":173},[46,170663,15716],{"class":56},[46,170665,398],{"class":52},[46,170667,149781],{"class":439},[46,170669,760],{"class":56},[46,170671,170672,170674,170676,170679,170681,170683],{"class":48,"line":60},[46,170673,170512],{"class":439},[46,170675,170515],{"class":56},[46,170677,170678],{"class":173},"\"程序启动",[46,170680,158153],{"class":180},[46,170682,2439],{"class":173},[46,170684,459],{"class":56},[19,170686,170687],{},"日志类文件常用追加模式。",[14,170689,170691],{"id":170690},"_88-文件编码","8.8 文件编码",[19,170693,170694],{},"编码决定文字如何保存为字节。",[19,170696,170697],{},"常见编码：",[23,170699,170700,170703],{},[26,170701,170702],{},"UTF-8：推荐。",[26,170704,170705],{},"GBK：部分 Windows 中文文件常见。",[19,170707,170708],{},"读取文件乱码时，可以尝试：",[36,170710,170712],{"className":38,"code":170711,"language":40,"meta":41,"style":41},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[43,170713,170714,170745],{"__ignoreMap":41},[46,170715,170716,170718,170720,170722,170724,170726,170728,170730,170732,170734,170737,170739,170741,170743],{"class":48,"line":49},[46,170717,392],{"class":52},[46,170719,148419],{"class":180},[46,170721,1152],{"class":56},[46,170723,148424],{"class":173},[46,170725,448],{"class":56},[46,170727,148429],{"class":173},[46,170729,448],{"class":56},[46,170731,148434],{"class":439},[46,170733,79],{"class":52},[46,170735,170736],{"class":173},"\"gbk\"",[46,170738,15716],{"class":56},[46,170740,398],{"class":52},[46,170742,149781],{"class":439},[46,170744,760],{"class":56},[46,170746,170747,170749,170751,170753],{"class":48,"line":60},[46,170748,148451],{"class":56},[46,170750,79],{"class":52},[46,170752,149781],{"class":439},[46,170754,170129],{"class":56},[19,170756,170757],{},"写文件时建议统一 UTF-8：",[36,170759,170761],{"className":38,"code":170760,"language":40,"meta":41,"style":41},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[43,170762,170763,170793],{"__ignoreMap":41},[46,170764,170765,170767,170769,170771,170773,170775,170777,170779,170781,170783,170785,170787,170789,170791],{"class":48,"line":49},[46,170766,392],{"class":52},[46,170768,148419],{"class":180},[46,170770,1152],{"class":56},[46,170772,148424],{"class":173},[46,170774,448],{"class":56},[46,170776,153604],{"class":173},[46,170778,448],{"class":56},[46,170780,148434],{"class":439},[46,170782,79],{"class":52},[46,170784,148439],{"class":173},[46,170786,15716],{"class":56},[46,170788,398],{"class":52},[46,170790,149781],{"class":439},[46,170792,760],{"class":56},[46,170794,170795,170797,170799,170802],{"class":48,"line":60},[46,170796,170512],{"class":439},[46,170798,170515],{"class":56},[46,170800,170801],{"class":173},"\"中文内容\"",[46,170803,459],{"class":56},[14,170805,170807],{"id":170806},"_89-pathlib","8.9 pathlib",[19,170809,170810,170813],{},[43,170811,170812],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[36,170815,170817],{"className":38,"code":170816,"language":40,"meta":41,"style":41},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[43,170818,170819,170829,170833,170851],{"__ignoreMap":41},[46,170820,170821,170823,170825,170827],{"class":48,"line":49},[46,170822,957],{"class":52},[46,170824,960],{"class":56},[46,170826,53],{"class":52},[46,170828,965],{"class":56},[46,170830,170831],{"class":48,"line":60},[46,170832,616],{"emptyLinePlaceholder":615},[46,170834,170835,170837,170839,170841,170844,170846,170848],{"class":48,"line":200},[46,170836,169939],{"class":56},[46,170838,79],{"class":52},[46,170840,1204],{"class":56},[46,170842,170843],{"class":173},"\"data\"",[46,170845,15716],{"class":56},[46,170847,2770],{"class":52},[46,170849,170850],{"class":173}," \"students.txt\"\n",[46,170852,170853,170855],{"class":48,"line":211},[46,170854,32398],{"class":180},[46,170856,170857],{"class":56},"(path)\n",[19,170859,170860],{},"创建目录：",[36,170862,170864],{"className":38,"code":170863,"language":40,"meta":41,"style":41},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[43,170865,170866,170876,170880,170893],{"__ignoreMap":41},[46,170867,170868,170870,170872,170874],{"class":48,"line":49},[46,170869,957],{"class":52},[46,170871,960],{"class":56},[46,170873,53],{"class":52},[46,170875,965],{"class":56},[46,170877,170878],{"class":48,"line":60},[46,170879,616],{"emptyLinePlaceholder":615},[46,170881,170882,170885,170887,170889,170891],{"class":48,"line":200},[46,170883,170884],{"class":56},"data_dir ",[46,170886,79],{"class":52},[46,170888,1204],{"class":56},[46,170890,170843],{"class":173},[46,170892,459],{"class":56},[46,170894,170895,170898,170901,170903,170905],{"class":48,"line":211},[46,170896,170897],{"class":56},"data_dir.mkdir(",[46,170899,170900],{"class":439},"exist_ok",[46,170902,79],{"class":52},[46,170904,33453],{"class":180},[46,170906,459],{"class":56},[19,170908,170909],{},"判断文件是否存在：",[36,170911,170913],{"className":38,"code":170912,"language":40,"meta":41,"style":41},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[43,170914,170915,170928,170932,170939],{"__ignoreMap":41},[46,170916,170917,170919,170921,170923,170926],{"class":48,"line":49},[46,170918,169939],{"class":56},[46,170920,79],{"class":52},[46,170922,1204],{"class":56},[46,170924,170925],{"class":173},"\"data\u002Fstudents.txt\"",[46,170927,459],{"class":56},[46,170929,170930],{"class":48,"line":60},[46,170931,616],{"emptyLinePlaceholder":615},[46,170933,170934,170936],{"class":48,"line":200},[46,170935,911],{"class":52},[46,170937,170938],{"class":56}," path.exists():\n",[46,170940,170941,170943,170945,170948],{"class":48,"line":211},[46,170942,1227],{"class":180},[46,170944,1152],{"class":56},[46,170946,170947],{"class":173},"\"文件存在\"",[46,170949,459],{"class":56},[19,170951,170952],{},"读写文本：",[36,170954,170956],{"className":38,"code":170955,"language":40,"meta":41,"style":41},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[43,170957,170958,170970,170974,170991,171008],{"__ignoreMap":41},[46,170959,170960,170962,170964,170966,170968],{"class":48,"line":49},[46,170961,169939],{"class":56},[46,170963,79],{"class":52},[46,170965,1204],{"class":56},[46,170967,148424],{"class":173},[46,170969,459],{"class":56},[46,170971,170972],{"class":48,"line":60},[46,170973,616],{"emptyLinePlaceholder":615},[46,170975,170976,170979,170981,170983,170985,170987,170989],{"class":48,"line":200},[46,170977,170978],{"class":56},"path.write_text(",[46,170980,147504],{"class":173},[46,170982,448],{"class":56},[46,170984,148434],{"class":439},[46,170986,79],{"class":52},[46,170988,148439],{"class":173},[46,170990,459],{"class":56},[46,170992,170993,170995,170997,171000,171002,171004,171006],{"class":48,"line":211},[46,170994,170122],{"class":56},[46,170996,79],{"class":52},[46,170998,170999],{"class":56}," path.read_text(",[46,171001,148434],{"class":439},[46,171003,79],{"class":52},[46,171005,148439],{"class":173},[46,171007,459],{"class":56},[46,171009,171010,171012],{"class":48,"line":222},[46,171011,32398],{"class":180},[46,171013,170136],{"class":56},[14,171015,171017],{"id":171016},"_810-json文件","8.10 JSON文件",[19,171019,171020],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[36,171022,171024],{"className":38,"code":171023,"language":40,"meta":41,"style":41},"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",[43,171025,171026,171032,171036,171044,171054,171064,171072,171076,171080,171105],{"__ignoreMap":41},[46,171027,171028,171030],{"class":48,"line":49},[46,171029,53],{"class":52},[46,171031,148719],{"class":56},[46,171033,171034],{"class":48,"line":60},[46,171035,616],{"emptyLinePlaceholder":615},[46,171037,171038,171040,171042],{"class":48,"line":200},[46,171039,151109],{"class":56},[46,171041,79],{"class":52},[46,171043,17573],{"class":56},[46,171045,171046,171048,171050,171052],{"class":48,"line":211},[46,171047,148648],{"class":173},[46,171049,53404],{"class":56},[46,171051,151516],{"class":173},[46,171053,33443],{"class":56},[46,171055,171056,171058,171060,171062],{"class":48,"line":222},[46,171057,166165],{"class":173},[46,171059,53404],{"class":56},[46,171061,2836],{"class":180},[46,171063,33443],{"class":56},[46,171065,171066,171068,171070],{"class":48,"line":636},[46,171067,166176],{"class":173},[46,171069,53404],{"class":56},[46,171071,166181],{"class":180},[46,171073,171074],{"class":48,"line":641},[46,171075,3616],{"class":56},[46,171077,171078],{"class":48,"line":653},[46,171079,616],{"emptyLinePlaceholder":615},[46,171081,171082,171084,171086,171089,171091,171093,171095,171097,171099,171101,171103],{"class":48,"line":659},[46,171083,158072],{"class":56},[46,171085,79],{"class":52},[46,171087,171088],{"class":56}," json.dumps(student, ",[46,171090,148765],{"class":439},[46,171092,79],{"class":52},[46,171094,35960],{"class":180},[46,171096,448],{"class":56},[46,171098,153640],{"class":439},[46,171100,79],{"class":52},[46,171102,2272],{"class":180},[46,171104,459],{"class":56},[46,171106,171107,171109],{"class":48,"line":665},[46,171108,32398],{"class":180},[46,171110,165699],{"class":56},[19,171112,171113],{},"写入 JSON 文件：",[36,171115,171117],{"className":38,"code":171116,"language":40,"meta":41,"style":41},"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",[43,171118,171119,171125,171129,171137,171165,171193,171197,171201,171231],{"__ignoreMap":41},[46,171120,171121,171123],{"class":48,"line":49},[46,171122,53],{"class":52},[46,171124,148719],{"class":56},[46,171126,171127],{"class":48,"line":60},[46,171128,616],{"emptyLinePlaceholder":615},[46,171130,171131,171133,171135],{"class":48,"line":200},[46,171132,161344],{"class":56},[46,171134,79],{"class":52},[46,171136,57412],{"class":56},[46,171138,171139,171141,171143,171145,171147,171149,171151,171153,171155,171157,171159,171161,171163],{"class":48,"line":211},[46,171140,150013],{"class":56},[46,171142,64644],{"class":173},[46,171144,53404],{"class":56},[46,171146,151516],{"class":173},[46,171148,448],{"class":56},[46,171150,71089],{"class":173},[46,171152,53404],{"class":56},[46,171154,2836],{"class":180},[46,171156,448],{"class":56},[46,171158,153100],{"class":173},[46,171160,53404],{"class":56},[46,171162,3173],{"class":180},[46,171164,6946],{"class":56},[46,171166,171167,171169,171171,171173,171175,171177,171179,171181,171183,171185,171187,171189,171191],{"class":48,"line":222},[46,171168,150013],{"class":56},[46,171170,64644],{"class":173},[46,171172,53404],{"class":56},[46,171174,152564],{"class":173},[46,171176,448],{"class":56},[46,171178,71089],{"class":173},[46,171180,53404],{"class":56},[46,171182,2811],{"class":180},[46,171184,448],{"class":56},[46,171186,153100],{"class":173},[46,171188,53404],{"class":56},[46,171190,2997],{"class":180},[46,171192,6946],{"class":56},[46,171194,171195],{"class":48,"line":636},[46,171196,35220],{"class":56},[46,171198,171199],{"class":48,"line":641},[46,171200,616],{"emptyLinePlaceholder":615},[46,171202,171203,171205,171207,171209,171211,171213,171215,171217,171219,171221,171223,171225,171227,171229],{"class":48,"line":653},[46,171204,392],{"class":52},[46,171206,148419],{"class":180},[46,171208,1152],{"class":56},[46,171210,153459],{"class":173},[46,171212,448],{"class":56},[46,171214,153604],{"class":173},[46,171216,448],{"class":56},[46,171218,148434],{"class":439},[46,171220,79],{"class":52},[46,171222,148439],{"class":173},[46,171224,15716],{"class":56},[46,171226,398],{"class":52},[46,171228,149781],{"class":439},[46,171230,760],{"class":56},[46,171232,171233,171236,171238,171240,171242,171244,171246,171248,171250,171252,171254],{"class":48,"line":659},[46,171234,171235],{"class":56},"    json.dump(students, ",[46,171237,47325],{"class":439},[46,171239,448],{"class":56},[46,171241,148765],{"class":439},[46,171243,79],{"class":52},[46,171245,35960],{"class":180},[46,171247,448],{"class":56},[46,171249,153640],{"class":439},[46,171251,79],{"class":52},[46,171253,2272],{"class":180},[46,171255,459],{"class":56},[19,171257,171258],{},"读取 JSON 文件：",[36,171260,171262],{"className":38,"code":171261,"language":40,"meta":41,"style":41},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[43,171263,171264,171270,171274,171304,171316,171320],{"__ignoreMap":41},[46,171265,171266,171268],{"class":48,"line":49},[46,171267,53],{"class":52},[46,171269,148719],{"class":56},[46,171271,171272],{"class":48,"line":60},[46,171273,616],{"emptyLinePlaceholder":615},[46,171275,171276,171278,171280,171282,171284,171286,171288,171290,171292,171294,171296,171298,171300,171302],{"class":48,"line":200},[46,171277,392],{"class":52},[46,171279,148419],{"class":180},[46,171281,1152],{"class":56},[46,171283,153459],{"class":173},[46,171285,448],{"class":56},[46,171287,148429],{"class":173},[46,171289,448],{"class":56},[46,171291,148434],{"class":439},[46,171293,79],{"class":52},[46,171295,148439],{"class":173},[46,171297,15716],{"class":56},[46,171299,398],{"class":52},[46,171301,149781],{"class":439},[46,171303,760],{"class":56},[46,171305,171306,171308,171310,171312,171314],{"class":48,"line":211},[46,171307,154665],{"class":56},[46,171309,79],{"class":52},[46,171311,149792],{"class":56},[46,171313,47325],{"class":439},[46,171315,459],{"class":56},[46,171317,171318],{"class":48,"line":222},[46,171319,616],{"emptyLinePlaceholder":615},[46,171321,171322,171324],{"class":48,"line":636},[46,171323,32398],{"class":180},[46,171325,166623],{"class":56},[14,171327,171329],{"id":171328},"_811-csv文件","8.11 CSV文件",[19,171331,171332],{},"CSV 是逗号分隔值，常用于表格数据。",[19,171334,171335],{},"写入 CSV：",[36,171337,171339],{"className":38,"code":171338,"language":40,"meta":41,"style":41},"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",[43,171340,171341,171348,171352,171360,171378,171394,171410,171414,171418,171458,171472],{"__ignoreMap":41},[46,171342,171343,171345],{"class":48,"line":49},[46,171344,53],{"class":52},[46,171346,171347],{"class":56}," csv\n",[46,171349,171350],{"class":48,"line":60},[46,171351,616],{"emptyLinePlaceholder":615},[46,171353,171354,171356,171358],{"class":48,"line":200},[46,171355,161344],{"class":56},[46,171357,79],{"class":52},[46,171359,57412],{"class":56},[46,171361,171362,171365,171367,171369,171371,171373,171376],{"class":48,"line":211},[46,171363,171364],{"class":56},"    [",[46,171366,75064],{"class":173},[46,171368,448],{"class":56},[46,171370,75097],{"class":173},[46,171372,448],{"class":56},[46,171374,171375],{"class":173},"\"成绩\"",[46,171377,89799],{"class":56},[46,171379,171380,171382,171384,171386,171388,171390,171392],{"class":48,"line":222},[46,171381,171364],{"class":56},[46,171383,151516],{"class":173},[46,171385,448],{"class":56},[46,171387,2836],{"class":180},[46,171389,448],{"class":56},[46,171391,3173],{"class":180},[46,171393,89799],{"class":56},[46,171395,171396,171398,171400,171402,171404,171406,171408],{"class":48,"line":636},[46,171397,171364],{"class":56},[46,171399,152564],{"class":173},[46,171401,448],{"class":56},[46,171403,2811],{"class":180},[46,171405,448],{"class":56},[46,171407,2997],{"class":180},[46,171409,89799],{"class":56},[46,171411,171412],{"class":48,"line":641},[46,171413,35220],{"class":56},[46,171415,171416],{"class":48,"line":653},[46,171417,616],{"emptyLinePlaceholder":615},[46,171419,171420,171422,171424,171426,171429,171431,171433,171435,171437,171439,171441,171443,171446,171448,171450,171452,171454,171456],{"class":48,"line":659},[46,171421,392],{"class":52},[46,171423,148419],{"class":180},[46,171425,1152],{"class":56},[46,171427,171428],{"class":173},"\"students.csv\"",[46,171430,448],{"class":56},[46,171432,153604],{"class":173},[46,171434,448],{"class":56},[46,171436,148434],{"class":439},[46,171438,79],{"class":52},[46,171440,148439],{"class":173},[46,171442,448],{"class":56},[46,171444,171445],{"class":439},"newline",[46,171447,79],{"class":52},[46,171449,9665],{"class":173},[46,171451,15716],{"class":56},[46,171453,398],{"class":52},[46,171455,149781],{"class":439},[46,171457,760],{"class":56},[46,171459,171460,171463,171465,171468,171470],{"class":48,"line":665},[46,171461,171462],{"class":56},"    writer ",[46,171464,79],{"class":52},[46,171466,171467],{"class":56}," csv.writer(",[46,171469,47325],{"class":439},[46,171471,459],{"class":56},[46,171473,171474],{"class":48,"line":670},[46,171475,171476],{"class":56},"    writer.writerows(students)\n",[19,171478,171479],{},"读取 CSV：",[36,171481,171483],{"className":38,"code":171482,"language":40,"meta":41,"style":41},"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",[43,171484,171485,171491,171495,171525,171539,171551],{"__ignoreMap":41},[46,171486,171487,171489],{"class":48,"line":49},[46,171488,53],{"class":52},[46,171490,171347],{"class":56},[46,171492,171493],{"class":48,"line":60},[46,171494,616],{"emptyLinePlaceholder":615},[46,171496,171497,171499,171501,171503,171505,171507,171509,171511,171513,171515,171517,171519,171521,171523],{"class":48,"line":200},[46,171498,392],{"class":52},[46,171500,148419],{"class":180},[46,171502,1152],{"class":56},[46,171504,171428],{"class":173},[46,171506,448],{"class":56},[46,171508,148429],{"class":173},[46,171510,448],{"class":56},[46,171512,148434],{"class":439},[46,171514,79],{"class":52},[46,171516,148439],{"class":173},[46,171518,15716],{"class":56},[46,171520,398],{"class":52},[46,171522,149781],{"class":439},[46,171524,760],{"class":56},[46,171526,171527,171530,171532,171535,171537],{"class":48,"line":211},[46,171528,171529],{"class":56},"    reader ",[46,171531,79],{"class":52},[46,171533,171534],{"class":56}," csv.reader(",[46,171536,47325],{"class":439},[46,171538,459],{"class":56},[46,171540,171541,171543,171546,171548],{"class":48,"line":222},[46,171542,1140],{"class":52},[46,171544,171545],{"class":56}," row ",[46,171547,1146],{"class":52},[46,171549,171550],{"class":56}," reader:\n",[46,171552,171553,171555],{"class":48,"line":636},[46,171554,34425],{"class":180},[46,171556,171557],{"class":56},"(row)\n",[19,171559,171560],{},"使用字典写入：",[36,171562,171564],{"className":38,"code":171563,"language":40,"meta":41,"style":41},"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",[43,171565,171566,171572,171576,171584,171612,171640,171644,171648,171686,171707,171728,171733],{"__ignoreMap":41},[46,171567,171568,171570],{"class":48,"line":49},[46,171569,53],{"class":52},[46,171571,171347],{"class":56},[46,171573,171574],{"class":48,"line":60},[46,171575,616],{"emptyLinePlaceholder":615},[46,171577,171578,171580,171582],{"class":48,"line":200},[46,171579,161344],{"class":56},[46,171581,79],{"class":52},[46,171583,57412],{"class":56},[46,171585,171586,171588,171590,171592,171594,171596,171598,171600,171602,171604,171606,171608,171610],{"class":48,"line":211},[46,171587,150013],{"class":56},[46,171589,64644],{"class":173},[46,171591,53404],{"class":56},[46,171593,151516],{"class":173},[46,171595,448],{"class":56},[46,171597,71089],{"class":173},[46,171599,53404],{"class":56},[46,171601,2836],{"class":180},[46,171603,448],{"class":56},[46,171605,153100],{"class":173},[46,171607,53404],{"class":56},[46,171609,3173],{"class":180},[46,171611,6946],{"class":56},[46,171613,171614,171616,171618,171620,171622,171624,171626,171628,171630,171632,171634,171636,171638],{"class":48,"line":222},[46,171615,150013],{"class":56},[46,171617,64644],{"class":173},[46,171619,53404],{"class":56},[46,171621,152564],{"class":173},[46,171623,448],{"class":56},[46,171625,71089],{"class":173},[46,171627,53404],{"class":56},[46,171629,2811],{"class":180},[46,171631,448],{"class":56},[46,171633,153100],{"class":173},[46,171635,53404],{"class":56},[46,171637,2997],{"class":180},[46,171639,6946],{"class":56},[46,171641,171642],{"class":48,"line":636},[46,171643,35220],{"class":56},[46,171645,171646],{"class":48,"line":641},[46,171647,616],{"emptyLinePlaceholder":615},[46,171649,171650,171652,171654,171656,171658,171660,171662,171664,171666,171668,171670,171672,171674,171676,171678,171680,171682,171684],{"class":48,"line":653},[46,171651,392],{"class":52},[46,171653,148419],{"class":180},[46,171655,1152],{"class":56},[46,171657,171428],{"class":173},[46,171659,448],{"class":56},[46,171661,153604],{"class":173},[46,171663,448],{"class":56},[46,171665,148434],{"class":439},[46,171667,79],{"class":52},[46,171669,148439],{"class":173},[46,171671,448],{"class":56},[46,171673,171445],{"class":439},[46,171675,79],{"class":52},[46,171677,9665],{"class":173},[46,171679,15716],{"class":56},[46,171681,398],{"class":52},[46,171683,149781],{"class":439},[46,171685,760],{"class":56},[46,171687,171688,171691,171693,171695,171697,171699,171701,171703,171705],{"class":48,"line":659},[46,171689,171690],{"class":56},"    fieldnames ",[46,171692,79],{"class":52},[46,171694,54193],{"class":56},[46,171696,64644],{"class":173},[46,171698,448],{"class":56},[46,171700,71089],{"class":173},[46,171702,448],{"class":56},[46,171704,153100],{"class":173},[46,171706,35220],{"class":56},[46,171708,171709,171711,171713,171716,171718,171720,171723,171725],{"class":48,"line":665},[46,171710,171462],{"class":56},[46,171712,79],{"class":52},[46,171714,171715],{"class":56}," csv.DictWriter(",[46,171717,47325],{"class":439},[46,171719,448],{"class":56},[46,171721,171722],{"class":439},"fieldnames",[46,171724,79],{"class":52},[46,171726,171727],{"class":56},"fieldnames)\n",[46,171729,171730],{"class":48,"line":670},[46,171731,171732],{"class":56},"    writer.writeheader()\n",[46,171734,171735],{"class":48,"line":676},[46,171736,171476],{"class":56},[14,171738,171740],{"id":171739},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[19,171742,124920],{},[23,171744,171745,171748,171751],{},[26,171746,171747],{},"读取文本文件。",[26,171749,171750],{},"统计每个单词出现次数。",[26,171752,171753],{},"输出出现次数最多的前 10 个单词。",[19,171755,12039],{},[36,171757,171759],{"className":38,"code":171758,"language":40,"meta":41,"style":41},"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",[43,171760,171761,171771,171775,171788,171804,171808,171818,171827,171831,171843,171863,171872,171876,171894,171898,171928,171932,171948],{"__ignoreMap":41},[46,171762,171763,171765,171767,171769],{"class":48,"line":49},[46,171764,957],{"class":52},[46,171766,960],{"class":56},[46,171768,53],{"class":52},[46,171770,965],{"class":56},[46,171772,171773],{"class":48,"line":60},[46,171774,616],{"emptyLinePlaceholder":615},[46,171776,171777,171779,171781,171783,171786],{"class":48,"line":200},[46,171778,169939],{"class":56},[46,171780,79],{"class":52},[46,171782,1204],{"class":56},[46,171784,171785],{"class":173},"\"article.txt\"",[46,171787,459],{"class":56},[46,171789,171790,171792,171794,171796,171798,171800,171802],{"class":48,"line":211},[46,171791,170122],{"class":56},[46,171793,79],{"class":52},[46,171795,170999],{"class":56},[46,171797,148434],{"class":439},[46,171799,79],{"class":52},[46,171801,148439],{"class":173},[46,171803,459],{"class":56},[46,171805,171806],{"class":48,"line":222},[46,171807,616],{"emptyLinePlaceholder":615},[46,171809,171810,171813,171815],{"class":48,"line":636},[46,171811,171812],{"class":56},"words ",[46,171814,79],{"class":52},[46,171816,171817],{"class":56}," content.lower().split()\n",[46,171819,171820,171823,171825],{"class":48,"line":641},[46,171821,171822],{"class":56},"counter ",[46,171824,79],{"class":52},[46,171826,89831],{"class":56},[46,171828,171829],{"class":48,"line":653},[46,171830,616],{"emptyLinePlaceholder":615},[46,171832,171833,171835,171838,171840],{"class":48,"line":659},[46,171834,1713],{"class":52},[46,171836,171837],{"class":56}," word ",[46,171839,1146],{"class":52},[46,171841,171842],{"class":56}," words:\n",[46,171844,171845,171848,171850,171853,171856,171858,171861],{"class":48,"line":665},[46,171846,171847],{"class":56},"    word ",[46,171849,79],{"class":52},[46,171851,171852],{"class":56}," word.strip(",[46,171854,171855],{"class":173},"\".,!?;:",[46,171857,158123],{"class":180},[46,171859,171860],{"class":173},"'()[]\"",[46,171862,459],{"class":56},[46,171864,171865,171867,171869],{"class":48,"line":670},[46,171866,5121],{"class":52},[46,171868,40902],{"class":52},[46,171870,171871],{"class":56}," word:\n",[46,171873,171874],{"class":48,"line":676},[46,171875,150140],{"class":52},[46,171877,171878,171881,171883,171886,171888,171890,171892],{"class":48,"line":682},[46,171879,171880],{"class":56},"    counter[word] ",[46,171882,79],{"class":52},[46,171884,171885],{"class":56}," counter.get(word, ",[46,171887,2379],{"class":180},[46,171889,15716],{"class":56},[46,171891,2668],{"class":52},[46,171893,57664],{"class":180},[46,171895,171896],{"class":48,"line":688},[46,171897,616],{"emptyLinePlaceholder":615},[46,171899,171900,171903,171905,171907,171910,171912,171914,171916,171918,171920,171922,171924,171926],{"class":48,"line":693},[46,171901,171902],{"class":56},"items ",[46,171904,79],{"class":52},[46,171906,165232],{"class":180},[46,171908,171909],{"class":56},"(counter.items(), ",[46,171911,155574],{"class":439},[46,171913,155577],{"class":52},[46,171915,155580],{"class":56},[46,171917,2405],{"class":180},[46,171919,113830],{"class":56},[46,171921,165156],{"class":439},[46,171923,79],{"class":52},[46,171925,33453],{"class":180},[46,171927,459],{"class":56},[46,171929,171930],{"class":48,"line":699},[46,171931,616],{"emptyLinePlaceholder":615},[46,171933,171934,171936,171939,171941,171944,171946],{"class":48,"line":705},[46,171935,1713],{"class":52},[46,171937,171938],{"class":56}," word, count ",[46,171940,1146],{"class":52},[46,171942,171943],{"class":56}," items[:",[46,171945,2633],{"class":180},[46,171947,167383],{"class":56},[46,171949,171950,171952],{"class":48,"line":711},[46,171951,1227],{"class":180},[46,171953,171954],{"class":56},"(word, count)\n",[14,171956,171958],{"id":171957},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[36,171960,171962],{"className":38,"code":171961,"language":40,"meta":41,"style":41},"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",[43,171963,171964,171970,171980,171984,171996,172000,172004,172012,172022,172028,172032,172062,172072,172076,172080,172088,172118,172142,172146,172150,172158,172187,172192],{"__ignoreMap":41},[46,171965,171966,171968],{"class":48,"line":49},[46,171967,53],{"class":52},[46,171969,148719],{"class":56},[46,171971,171972,171974,171976,171978],{"class":48,"line":60},[46,171973,957],{"class":52},[46,171975,960],{"class":56},[46,171977,53],{"class":52},[46,171979,965],{"class":56},[46,171981,171982],{"class":48,"line":200},[46,171983,616],{"emptyLinePlaceholder":615},[46,171985,171986,171988,171990,171992,171994],{"class":48,"line":211},[46,171987,153452],{"class":180},[46,171989,647],{"class":52},[46,171991,1204],{"class":56},[46,171993,153459],{"class":173},[46,171995,459],{"class":56},[46,171997,171998],{"class":48,"line":222},[46,171999,616],{"emptyLinePlaceholder":615},[46,172001,172002],{"class":48,"line":636},[46,172003,616],{"emptyLinePlaceholder":615},[46,172005,172006,172008,172010],{"class":48,"line":641},[46,172007,748],{"class":52},[46,172009,153476],{"class":169},[46,172011,33928],{"class":56},[46,172013,172014,172016,172018,172020],{"class":48,"line":653},[46,172015,5121],{"class":52},[46,172017,40902],{"class":52},[46,172019,153487],{"class":180},[46,172021,153490],{"class":56},[46,172023,172024,172026],{"class":48,"line":659},[46,172025,16754],{"class":52},[46,172027,53805],{"class":56},[46,172029,172030],{"class":48,"line":665},[46,172031,616],{"emptyLinePlaceholder":615},[46,172033,172034,172036,172038,172040,172042,172044,172046,172048,172050,172052,172054,172056,172058,172060],{"class":48,"line":670},[46,172035,797],{"class":52},[46,172037,148419],{"class":180},[46,172039,1152],{"class":56},[46,172041,153452],{"class":180},[46,172043,448],{"class":56},[46,172045,148429],{"class":173},[46,172047,448],{"class":56},[46,172049,148434],{"class":439},[46,172051,79],{"class":52},[46,172053,148439],{"class":173},[46,172055,15716],{"class":56},[46,172057,398],{"class":52},[46,172059,149781],{"class":439},[46,172061,760],{"class":56},[46,172063,172064,172066,172068,172070],{"class":48,"line":676},[46,172065,16754],{"class":52},[46,172067,149792],{"class":56},[46,172069,47325],{"class":439},[46,172071,459],{"class":56},[46,172073,172074],{"class":48,"line":682},[46,172075,616],{"emptyLinePlaceholder":615},[46,172077,172078],{"class":48,"line":688},[46,172079,616],{"emptyLinePlaceholder":615},[46,172081,172082,172084,172086],{"class":48,"line":693},[46,172083,748],{"class":52},[46,172085,153586],{"class":169},[46,172087,153589],{"class":56},[46,172089,172090,172092,172094,172096,172098,172100,172102,172104,172106,172108,172110,172112,172114,172116],{"class":48,"line":699},[46,172091,797],{"class":52},[46,172093,148419],{"class":180},[46,172095,1152],{"class":56},[46,172097,153452],{"class":180},[46,172099,448],{"class":56},[46,172101,153604],{"class":173},[46,172103,448],{"class":56},[46,172105,148434],{"class":439},[46,172107,79],{"class":52},[46,172109,148439],{"class":173},[46,172111,15716],{"class":56},[46,172113,398],{"class":52},[46,172115,149781],{"class":439},[46,172117,760],{"class":56},[46,172119,172120,172122,172124,172126,172128,172130,172132,172134,172136,172138,172140],{"class":48,"line":705},[46,172121,153625],{"class":56},[46,172123,47325],{"class":439},[46,172125,448],{"class":56},[46,172127,148765],{"class":439},[46,172129,79],{"class":52},[46,172131,35960],{"class":180},[46,172133,448],{"class":56},[46,172135,153640],{"class":439},[46,172137,79],{"class":52},[46,172139,2272],{"class":180},[46,172141,459],{"class":56},[46,172143,172144],{"class":48,"line":711},[46,172145,616],{"emptyLinePlaceholder":615},[46,172147,172148],{"class":48,"line":717},[46,172149,616],{"emptyLinePlaceholder":615},[46,172151,172152,172154,172156],{"class":48,"line":723},[46,172153,161344],{"class":56},[46,172155,79],{"class":52},[46,172157,154670],{"class":56},[46,172159,172160,172163,172165,172167,172169,172171,172173,172175,172177,172179,172181,172183,172185],{"class":48,"line":729},[46,172161,172162],{"class":56},"students.append({",[46,172164,64644],{"class":173},[46,172166,53404],{"class":56},[46,172168,151516],{"class":173},[46,172170,448],{"class":56},[46,172172,71089],{"class":173},[46,172174,53404],{"class":56},[46,172176,2836],{"class":180},[46,172178,448],{"class":56},[46,172180,153100],{"class":173},[46,172182,53404],{"class":56},[46,172184,3173],{"class":180},[46,172186,166780],{"class":56},[46,172188,172189],{"class":48,"line":735},[46,172190,172191],{"class":56},"save_students(students)\n",[46,172193,172194,172196,172198,172201],{"class":48,"line":740},[46,172195,32398],{"class":180},[46,172197,1152],{"class":56},[46,172199,172200],{"class":173},"\"保存成功\"",[46,172202,459],{"class":56},[14,172204,172206],{"id":172205},"_814-易错点","8.14 易错点",[23,172208,172209,172213,172219,172224,172231,172238],{},[26,172210,172211,170472],{},[43,172212,2981],{},[26,172214,172215,172216,365],{},"读写中文要指定 ",[43,172217,172218],{},"encoding=\"utf-8\"",[26,172220,172221,172222,365],{},"打开文件后要关闭，推荐使用 ",[43,172223,392],{},[26,172225,172226,172227,172230],{},"读取大文件不要直接 ",[43,172228,172229],{},"read()"," 全部内容。",[26,172232,172233,172234,172237],{},"Windows 写 CSV 时建议加 ",[43,172235,172236],{},"newline=\"\"","，避免空行。",[26,172239,172240],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,172242,172244],{"id":172243},"_815-本章练习","8.15 本章练习",[23,172246,172247,172254,172259,172262,172265],{},[26,172248,172249,172250,172253],{},"写入一个 ",[43,172251,172252],{},"students.txt","，每行保存一个学生姓名。",[26,172255,106243,172256,172258],{},[43,172257,172252],{}," 并输出所有学生。",[26,172260,172261],{},"把学生列表保存为 JSON 文件。",[26,172263,172264],{},"从 JSON 文件读取学生数据，计算平均分。",[26,172266,172267,172268,172271,172272,172275],{},"写一个日志函数 ",[43,172269,172270],{},"write_log(message)","，每次调用向 ",[43,172273,172274],{},"app.log"," 追加一行。",[2098,172277,172278],{},"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":41,"searchDepth":60,"depth":60,"links":172280},[172281,172282,172286,172287,172293,172294,172295,172296,172297,172298,172299,172300,172301,172302,172303],{"id":169792,"depth":60,"text":169793},{"id":169833,"depth":60,"text":169834,"children":172283},[172284,172285],{"id":169837,"depth":200,"text":169838},{"id":169871,"depth":200,"text":169872},{"id":169985,"depth":60,"text":169986},{"id":170078,"depth":60,"text":170079,"children":172288},[172289,172290,172291,172292],{"id":170082,"depth":200,"text":170083},{"id":170169,"depth":200,"text":170170},{"id":170239,"depth":200,"text":170240},{"id":170333,"depth":200,"text":170334},{"id":170403,"depth":60,"text":170404},{"id":170466,"depth":60,"text":170467},{"id":170627,"depth":60,"text":170628},{"id":170690,"depth":60,"text":170691},{"id":170806,"depth":60,"text":170807},{"id":171016,"depth":60,"text":171017},{"id":171328,"depth":60,"text":171329},{"id":171739,"depth":60,"text":171740},{"id":171957,"depth":60,"text":171958},{"id":172205,"depth":60,"text":172206},{"id":172243,"depth":60,"text":172244},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":169784,"description":25378},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":172310,"title":172311,"body":172312,"description":25378,"extension":2125,"meta":174498,"navigation":615,"path":174499,"seo":174500,"stem":174501,"__hash__":174502},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":172313,"toc":174465},[172314,172317,172321,172324,172327,172419,172421,172440,172445,172449,172452,172455,172484,172491,172494,172498,172501,172530,172532,172584,172590,172643,172647,172745,172748,172815,172819,172876,172878,172884,172888,172893,172899,172990,172995,172999,173002,173080,173083,173121,173125,173243,173246,173250,173253,173298,173301,173305,173310,173316,173366,173369,173400,173404,173408,173438,173442,173477,173481,173516,173556,173560,173576,173579,173583,173587,173666,173670,173711,173715,173770,173774,173808,173812,173842,173851,173858,173864,173921,173924,173932,173935,173939,173946,173949,173955,173958,173975,173980,173984,173990,174003,174006,174043,174046,174057,174060,174074,174077,174091,174095,174102,174135,174138,174140,174146,174149,174153,174155,174161,174166,174339,174343,174406,174410,174434,174438,174462],[10,172315,172311],{"id":172316},"_9-异常模块与包",[14,172318,172320],{"id":172319},"_91-什么是异常","9.1 什么是异常",[19,172322,172323],{},"异常是程序运行过程中出现的错误。",[19,172325,172326],{},"常见异常：",[97,172328,172329,172338],{},[100,172330,172331],{},[103,172332,172333,172336],{},[106,172334,172335],{},"异常",[106,172337,27861],{},[120,172339,172340,172350,172360,172369,172379,172389,172399,172409],{},[103,172341,172342,172347],{},[125,172343,172344],{},[43,172345,172346],{},"NameError",[125,172348,172349],{},"使用了未定义变量",[103,172351,172352,172357],{},[125,172353,172354],{},[43,172355,172356],{},"TypeError",[125,172358,172359],{},"类型不匹配",[103,172361,172362,172366],{},[125,172363,172364],{},[43,172365,156462],{},[125,172367,172368],{},"值不合法",[103,172370,172371,172376],{},[125,172372,172373],{},[43,172374,172375],{},"IndexError",[125,172377,172378],{},"列表索引越界",[103,172380,172381,172386],{},[125,172382,172383],{},[43,172384,172385],{},"KeyError",[125,172387,172388],{},"字典 key 不存在",[103,172390,172391,172396],{},[125,172392,172393],{},[43,172394,172395],{},"FileNotFoundError",[125,172397,172398],{},"文件不存在",[103,172400,172401,172406],{},[125,172402,172403],{},[43,172404,172405],{},"ZeroDivisionError",[125,172407,172408],{},"除数为 0",[103,172410,172411,172416],{},[125,172412,172413],{},[43,172414,172415],{},"ImportError",[125,172417,172418],{},"导入失败",[19,172420,17136],{},[36,172422,172424],{"className":38,"code":172423,"language":40,"meta":41,"style":41},"num = int(\"abc\")\n",[43,172425,172426],{"__ignoreMap":41},[46,172427,172428,172430,172432,172434,172436,172438],{"class":48,"line":49},[46,172429,157415],{"class":56},[46,172431,79],{"class":52},[46,172433,4411],{"class":180},[46,172435,1152],{"class":56},[46,172437,157508],{"class":173},[46,172439,459],{"class":56},[19,172441,172442,172443,365],{},"会触发 ",[43,172444,156462],{},[14,172446,172448],{"id":172447},"_92-为什么要处理异常","9.2 为什么要处理异常",[19,172450,172451],{},"如果不处理异常，程序会直接终止。",[19,172453,172454],{},"例如用户输入年龄：",[36,172456,172458],{"className":38,"code":172457,"language":40,"meta":41,"style":41},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[43,172459,172460,172478],{"__ignoreMap":41},[46,172461,172462,172464,172466,172468,172470,172472,172474,172476],{"class":48,"line":49},[46,172463,148174],{"class":56},[46,172465,79],{"class":52},[46,172467,4411],{"class":180},[46,172469,1152],{"class":56},[46,172471,55786],{"class":180},[46,172473,1152],{"class":56},[46,172475,154022],{"class":173},[46,172477,32479],{"class":56},[46,172479,172480,172482],{"class":48,"line":60},[46,172481,32398],{"class":180},[46,172483,157389],{"class":56},[19,172485,172486,172487,172490],{},"用户输入 ",[43,172488,172489],{},"abc","，程序就会报错退出。",[19,172492,172493],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,172495,172497],{"id":172496},"_93-try-except","9.3 try except",[19,172499,172500],{},"基础语法：",[36,172502,172504],{"className":38,"code":172503,"language":40,"meta":41,"style":41},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[43,172505,172506,172513,172518,172525],{"__ignoreMap":41},[46,172507,172508,172511],{"class":48,"line":49},[46,172509,172510],{"class":52},"try",[46,172512,760],{"class":56},[46,172514,172515],{"class":48,"line":60},[46,172516,172517],{"class":56},"    可能出错的代码\n",[46,172519,172520,172523],{"class":48,"line":200},[46,172521,172522],{"class":52},"except",[46,172524,760],{"class":56},[46,172526,172527],{"class":48,"line":211},[46,172528,172529],{"class":56},"    出错后的处理代码\n",[19,172531,17136],{},[36,172533,172535],{"className":38,"code":172534,"language":40,"meta":41,"style":41},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[43,172536,172537,172543,172561,172567,172573],{"__ignoreMap":41},[46,172538,172539,172541],{"class":48,"line":49},[46,172540,172510],{"class":52},[46,172542,760],{"class":56},[46,172544,172545,172547,172549,172551,172553,172555,172557,172559],{"class":48,"line":60},[46,172546,154014],{"class":56},[46,172548,79],{"class":52},[46,172550,4411],{"class":180},[46,172552,1152],{"class":56},[46,172554,55786],{"class":180},[46,172556,1152],{"class":56},[46,172558,154022],{"class":173},[46,172560,32479],{"class":56},[46,172562,172563,172565],{"class":48,"line":200},[46,172564,1227],{"class":180},[46,172566,157389],{"class":56},[46,172568,172569,172571],{"class":48,"line":211},[46,172570,172522],{"class":52},[46,172572,760],{"class":56},[46,172574,172575,172577,172579,172582],{"class":48,"line":222},[46,172576,1227],{"class":180},[46,172578,1152],{"class":56},[46,172580,172581],{"class":173},"\"年龄必须是数字\"",[46,172583,459],{"class":56},[19,172585,172586,172587,172589],{},"不建议裸写 ",[43,172588,172522],{},"，最好指定异常类型。",[36,172591,172593],{"className":38,"code":172592,"language":40,"meta":41,"style":41},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[43,172594,172595,172601,172619,172625,172633],{"__ignoreMap":41},[46,172596,172597,172599],{"class":48,"line":49},[46,172598,172510],{"class":52},[46,172600,760],{"class":56},[46,172602,172603,172605,172607,172609,172611,172613,172615,172617],{"class":48,"line":60},[46,172604,154014],{"class":56},[46,172606,79],{"class":52},[46,172608,4411],{"class":180},[46,172610,1152],{"class":56},[46,172612,55786],{"class":180},[46,172614,1152],{"class":56},[46,172616,154022],{"class":173},[46,172618,32479],{"class":56},[46,172620,172621,172623],{"class":48,"line":200},[46,172622,1227],{"class":180},[46,172624,157389],{"class":56},[46,172626,172627,172629,172631],{"class":48,"line":211},[46,172628,172522],{"class":52},[46,172630,153854],{"class":180},[46,172632,760],{"class":56},[46,172634,172635,172637,172639,172641],{"class":48,"line":222},[46,172636,1227],{"class":180},[46,172638,1152],{"class":56},[46,172640,172581],{"class":173},[46,172642,459],{"class":56},[14,172644,172646],{"id":172645},"_94-捕获多个异常","9.4 捕获多个异常",[36,172648,172650],{"className":38,"code":172649,"language":40,"meta":41,"style":41},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[43,172651,172652,172658,172679,172699,172706,172714,172725,172734],{"__ignoreMap":41},[46,172653,172654,172656],{"class":48,"line":49},[46,172655,172510],{"class":52},[46,172657,760],{"class":56},[46,172659,172660,172663,172665,172667,172669,172671,172673,172675,172677],{"class":48,"line":60},[46,172661,172662],{"class":56},"    nums ",[46,172664,79],{"class":52},[46,172666,54193],{"class":56},[46,172668,2405],{"class":180},[46,172670,448],{"class":56},[46,172672,2272],{"class":180},[46,172674,448],{"class":56},[46,172676,2266],{"class":180},[46,172678,35220],{"class":56},[46,172680,172681,172684,172686,172688,172690,172692,172694,172697],{"class":48,"line":200},[46,172682,172683],{"class":56},"    index ",[46,172685,79],{"class":52},[46,172687,4411],{"class":180},[46,172689,1152],{"class":56},[46,172691,55786],{"class":180},[46,172693,1152],{"class":56},[46,172695,172696],{"class":173},"\"请输入索引:\"",[46,172698,32479],{"class":56},[46,172700,172701,172703],{"class":48,"line":211},[46,172702,1227],{"class":180},[46,172704,172705],{"class":56},"(nums[index])\n",[46,172707,172708,172710,172712],{"class":48,"line":222},[46,172709,172522],{"class":52},[46,172711,153854],{"class":180},[46,172713,760],{"class":56},[46,172715,172716,172718,172720,172723],{"class":48,"line":636},[46,172717,1227],{"class":180},[46,172719,1152],{"class":56},[46,172721,172722],{"class":173},"\"索引必须是整数\"",[46,172724,459],{"class":56},[46,172726,172727,172729,172732],{"class":48,"line":641},[46,172728,172522],{"class":52},[46,172730,172731],{"class":180}," IndexError",[46,172733,760],{"class":56},[46,172735,172736,172738,172740,172743],{"class":48,"line":653},[46,172737,1227],{"class":180},[46,172739,1152],{"class":56},[46,172741,172742],{"class":173},"\"索引越界\"",[46,172744,459],{"class":56},[19,172746,172747],{},"多个异常使用相同处理逻辑：",[36,172749,172751],{"className":38,"code":172750,"language":40,"meta":41,"style":41},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[43,172752,172753,172759,172777,172790,172804],{"__ignoreMap":41},[46,172754,172755,172757],{"class":48,"line":49},[46,172756,172510],{"class":52},[46,172758,760],{"class":56},[46,172760,172761,172763,172765,172767,172769,172771,172773,172775],{"class":48,"line":60},[46,172762,47564],{"class":56},[46,172764,79],{"class":52},[46,172766,4411],{"class":180},[46,172768,1152],{"class":56},[46,172770,55786],{"class":180},[46,172772,1152],{"class":56},[46,172774,157424],{"class":173},[46,172776,32479],{"class":56},[46,172778,172779,172781,172783,172785,172787],{"class":48,"line":200},[46,172780,1227],{"class":180},[46,172782,1152],{"class":56},[46,172784,2633],{"class":180},[46,172786,157674],{"class":52},[46,172788,172789],{"class":56}," num)\n",[46,172791,172792,172794,172796,172798,172800,172802],{"class":48,"line":211},[46,172793,172522],{"class":52},[46,172795,3702],{"class":56},[46,172797,156462],{"class":180},[46,172799,448],{"class":56},[46,172801,172405],{"class":180},[46,172803,1158],{"class":56},[46,172805,172806,172808,172810,172813],{"class":48,"line":222},[46,172807,1227],{"class":180},[46,172809,1152],{"class":56},[46,172811,172812],{"class":173},"\"输入不合法\"",[46,172814,459],{"class":56},[14,172816,172818],{"id":172817},"_95-获取异常信息","9.5 获取异常信息",[36,172820,172822],{"className":38,"code":172821,"language":40,"meta":41,"style":41},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[43,172823,172824,172830,172844,172855],{"__ignoreMap":41},[46,172825,172826,172828],{"class":48,"line":49},[46,172827,172510],{"class":52},[46,172829,760],{"class":56},[46,172831,172832,172834,172836,172838,172840,172842],{"class":48,"line":60},[46,172833,47564],{"class":56},[46,172835,79],{"class":52},[46,172837,4411],{"class":180},[46,172839,1152],{"class":56},[46,172841,157508],{"class":173},[46,172843,459],{"class":56},[46,172845,172846,172848,172850,172852],{"class":48,"line":200},[46,172847,172522],{"class":52},[46,172849,153854],{"class":180},[46,172851,66569],{"class":52},[46,172853,172854],{"class":56}," e:\n",[46,172856,172857,172859,172861,172863,172866,172868,172870,172872,172874],{"class":48,"line":211},[46,172858,1227],{"class":180},[46,172860,1152],{"class":56},[46,172862,2247],{"class":52},[46,172864,172865],{"class":173},"\"出错了:",[46,172867,3082],{"class":180},[46,172869,2269],{"class":56},[46,172871,3131],{"class":180},[46,172873,2439],{"class":173},[46,172875,459],{"class":56},[19,172877,148085],{},[36,172879,172882],{"className":172880,"code":172881,"language":571,"meta":41},[569],"出错了:invalid literal for int() with base 10: 'abc'\n",[43,172883,172881],{"__ignoreMap":41},[14,172885,172887],{"id":172886},"_96-else和finally","9.6 else和finally",[19,172889,172890,172892],{},[43,172891,3741],{},"：没有异常时执行。",[19,172894,172895,172898],{},[43,172896,172897],{},"finally","：无论是否异常都会执行。",[36,172900,172902],{"className":38,"code":172901,"language":40,"meta":41,"style":41},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[43,172903,172904,172910,172928,172936,172946,172952,172973,172979],{"__ignoreMap":41},[46,172905,172906,172908],{"class":48,"line":49},[46,172907,172510],{"class":52},[46,172909,760],{"class":56},[46,172911,172912,172914,172916,172918,172920,172922,172924,172926],{"class":48,"line":60},[46,172913,47564],{"class":56},[46,172915,79],{"class":52},[46,172917,4411],{"class":180},[46,172919,1152],{"class":56},[46,172921,55786],{"class":180},[46,172923,1152],{"class":56},[46,172925,157424],{"class":173},[46,172927,32479],{"class":56},[46,172929,172930,172932,172934],{"class":48,"line":200},[46,172931,172522],{"class":52},[46,172933,153854],{"class":180},[46,172935,760],{"class":56},[46,172937,172938,172940,172942,172944],{"class":48,"line":211},[46,172939,1227],{"class":180},[46,172941,1152],{"class":56},[46,172943,154842],{"class":173},[46,172945,459],{"class":56},[46,172947,172948,172950],{"class":48,"line":222},[46,172949,3741],{"class":52},[46,172951,760],{"class":56},[46,172953,172954,172956,172958,172960,172963,172965,172967,172969,172971],{"class":48,"line":636},[46,172955,1227],{"class":180},[46,172957,1152],{"class":56},[46,172959,2247],{"class":52},[46,172961,172962],{"class":173},"\"输入正确:",[46,172964,3082],{"class":180},[46,172966,3709],{"class":56},[46,172968,3131],{"class":180},[46,172970,2439],{"class":173},[46,172972,459],{"class":56},[46,172974,172975,172977],{"class":48,"line":641},[46,172976,172897],{"class":52},[46,172978,760],{"class":56},[46,172980,172981,172983,172985,172988],{"class":48,"line":653},[46,172982,1227],{"class":180},[46,172984,1152],{"class":56},[46,172986,172987],{"class":173},"\"程序结束\"",[46,172989,459],{"class":56},[19,172991,172992,172994],{},[43,172993,172897],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,172996,172998],{"id":172997},"_97-抛出异常","9.7 抛出异常",[19,173000,173001],{},"程序可以主动抛出异常。",[36,173003,173005],{"className":38,"code":173004,"language":40,"meta":41,"style":41},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[43,173006,173007,173016,173028,173041,173061,173065,173069],{"__ignoreMap":41},[46,173008,173009,173011,173014],{"class":48,"line":49},[46,173010,748],{"class":52},[46,173012,173013],{"class":169}," set_age",[46,173015,163043],{"class":56},[46,173017,173018,173020,173022,173024,173026],{"class":48,"line":60},[46,173019,5121],{"class":52},[46,173021,17708],{"class":56},[46,173023,821],{"class":52},[46,173025,887],{"class":180},[46,173027,760],{"class":56},[46,173029,173030,173032,173034,173036,173039],{"class":48,"line":200},[46,173031,105322],{"class":52},[46,173033,153854],{"class":180},[46,173035,1152],{"class":56},[46,173037,173038],{"class":173},"\"年龄不能为负数\"",[46,173040,459],{"class":56},[46,173042,173043,173045,173047,173049,173051,173053,173055,173057,173059],{"class":48,"line":211},[46,173044,1227],{"class":180},[46,173046,1152],{"class":56},[46,173048,2247],{"class":52},[46,173050,163611],{"class":173},[46,173052,3082],{"class":180},[46,173054,72186],{"class":56},[46,173056,3131],{"class":180},[46,173058,2439],{"class":173},[46,173060,459],{"class":56},[46,173062,173063],{"class":48,"line":222},[46,173064,616],{"emptyLinePlaceholder":615},[46,173066,173067],{"class":48,"line":636},[46,173068,616],{"emptyLinePlaceholder":615},[46,173070,173071,173074,173076,173078],{"class":48,"line":641},[46,173072,173073],{"class":56},"set_age(",[46,173075,534],{"class":52},[46,173077,2405],{"class":180},[46,173079,459],{"class":56},[19,173081,173082],{},"调用者可以捕获：",[36,173084,173086],{"className":38,"code":173085,"language":40,"meta":41,"style":41},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[43,173087,173088,173094,173105,173115],{"__ignoreMap":41},[46,173089,173090,173092],{"class":48,"line":49},[46,173091,172510],{"class":52},[46,173093,760],{"class":56},[46,173095,173096,173099,173101,173103],{"class":48,"line":60},[46,173097,173098],{"class":56},"    set_age(",[46,173100,534],{"class":52},[46,173102,2405],{"class":180},[46,173104,459],{"class":56},[46,173106,173107,173109,173111,173113],{"class":48,"line":200},[46,173108,172522],{"class":52},[46,173110,153854],{"class":180},[46,173112,66569],{"class":52},[46,173114,172854],{"class":56},[46,173116,173117,173119],{"class":48,"line":211},[46,173118,1227],{"class":180},[46,173120,68964],{"class":56},[14,173122,173124],{"id":173123},"_98-自定义异常","9.8 自定义异常",[36,173126,173128],{"className":38,"code":173127,"language":40,"meta":41,"style":41},"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",[43,173129,173130,173144,173148,173152,173156,173164,173174,173185,173195,173199,173203,173209,173226,173237],{"__ignoreMap":41},[46,173131,173132,173134,173137,173139,173142],{"class":48,"line":49},[46,173133,16696],{"class":52},[46,173135,173136],{"class":169}," BalanceNotEnoughError",[46,173138,1152],{"class":56},[46,173140,173141],{"class":180},"Exception",[46,173143,1158],{"class":56},[46,173145,173146],{"class":48,"line":60},[46,173147,151165],{"class":52},[46,173149,173150],{"class":48,"line":200},[46,173151,616],{"emptyLinePlaceholder":615},[46,173153,173154],{"class":48,"line":211},[46,173155,616],{"emptyLinePlaceholder":615},[46,173157,173158,173160,173162],{"class":48,"line":222},[46,173159,748],{"class":52},[46,173161,151814],{"class":169},[46,173163,164440],{"class":56},[46,173165,173166,173168,173170,173172],{"class":48,"line":636},[46,173167,5121],{"class":52},[46,173169,151770],{"class":56},[46,173171,884],{"class":52},[46,173173,164217],{"class":56},[46,173175,173176,173178,173181,173183],{"class":48,"line":641},[46,173177,105322],{"class":52},[46,173179,173180],{"class":56}," BalanceNotEnoughError(",[46,173182,151865],{"class":173},[46,173184,459],{"class":56},[46,173186,173187,173189,173191,173193],{"class":48,"line":653},[46,173188,6108],{"class":52},[46,173190,164447],{"class":56},[46,173192,534],{"class":52},[46,173194,151803],{"class":56},[46,173196,173197],{"class":48,"line":659},[46,173198,616],{"emptyLinePlaceholder":615},[46,173200,173201],{"class":48,"line":665},[46,173202,616],{"emptyLinePlaceholder":615},[46,173204,173205,173207],{"class":48,"line":670},[46,173206,172510],{"class":52},[46,173208,760],{"class":56},[46,173210,173211,173213,173215,173218,173220,173222,173224],{"class":48,"line":676},[46,173212,164118],{"class":56},[46,173214,79],{"class":52},[46,173216,173217],{"class":56}," withdraw(",[46,173219,1155],{"class":180},[46,173221,448],{"class":56},[46,173223,3762],{"class":180},[46,173225,459],{"class":56},[46,173227,173228,173230,173233,173235],{"class":48,"line":682},[46,173229,172522],{"class":52},[46,173231,173232],{"class":56}," BalanceNotEnoughError ",[46,173234,398],{"class":52},[46,173236,172854],{"class":56},[46,173238,173239,173241],{"class":48,"line":688},[46,173240,1227],{"class":180},[46,173242,68964],{"class":56},[19,173244,173245],{},"入门阶段大多数情况使用内置异常即可。",[14,173247,173249],{"id":173248},"_99-traceback","9.9 traceback",[19,173251,173252],{},"调试时可以输出完整异常堆栈。",[36,173254,173256],{"className":38,"code":173255,"language":40,"meta":41,"style":41},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[43,173257,173258,173265,173269,173275,173285,173293],{"__ignoreMap":41},[46,173259,173260,173262],{"class":48,"line":49},[46,173261,53],{"class":52},[46,173263,173264],{"class":56}," traceback\n",[46,173266,173267],{"class":48,"line":60},[46,173268,616],{"emptyLinePlaceholder":615},[46,173270,173271,173273],{"class":48,"line":200},[46,173272,172510],{"class":52},[46,173274,760],{"class":56},[46,173276,173277,173279,173281,173283],{"class":48,"line":211},[46,173278,4015],{"class":180},[46,173280,1152],{"class":56},[46,173282,157508],{"class":173},[46,173284,459],{"class":56},[46,173286,173287,173289,173291],{"class":48,"line":222},[46,173288,172522],{"class":52},[46,173290,153854],{"class":180},[46,173292,760],{"class":56},[46,173294,173295],{"class":48,"line":636},[46,173296,173297],{"class":56},"    traceback.print_exc()\n",[19,173299,173300],{},"日志系统中常把异常堆栈记录到文件。",[14,173302,173304],{"id":173303},"_910-什么是模块","9.10 什么是模块",[19,173306,173307,173308,127611],{},"模块就是一个 ",[43,173309,147980],{},[19,173311,173312,173313,26615],{},"例如创建 ",[43,173314,173315],{},"my_math.py",[36,173317,173319],{"className":38,"code":173318,"language":40,"meta":41,"style":41},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[43,173320,173321,173329,173339,173343,173347,173356],{"__ignoreMap":41},[46,173322,173323,173325,173327],{"class":48,"line":49},[46,173324,748],{"class":52},[46,173326,7223],{"class":169},[46,173328,152721],{"class":56},[46,173330,173331,173333,173335,173337],{"class":48,"line":60},[46,173332,6108],{"class":52},[46,173334,12873],{"class":56},[46,173336,2668],{"class":52},[46,173338,152732],{"class":56},[46,173340,173341],{"class":48,"line":200},[46,173342,616],{"emptyLinePlaceholder":615},[46,173344,173345],{"class":48,"line":211},[46,173346,616],{"emptyLinePlaceholder":615},[46,173348,173349,173351,173354],{"class":48,"line":222},[46,173350,748],{"class":52},[46,173352,173353],{"class":169}," sub",[46,173355,152721],{"class":56},[46,173357,173358,173360,173362,173364],{"class":48,"line":636},[46,173359,6108],{"class":52},[46,173361,12873],{"class":56},[46,173363,534],{"class":52},[46,173365,152732],{"class":56},[19,173367,173368],{},"在另一个文件中导入：",[36,173370,173372],{"className":38,"code":173371,"language":40,"meta":41,"style":41},"import my_math\n\nprint(my_math.add(1, 2))\n",[43,173373,173374,173381,173385],{"__ignoreMap":41},[46,173375,173376,173378],{"class":48,"line":49},[46,173377,53],{"class":52},[46,173379,173380],{"class":56}," my_math\n",[46,173382,173383],{"class":48,"line":60},[46,173384,616],{"emptyLinePlaceholder":615},[46,173386,173387,173389,173392,173394,173396,173398],{"class":48,"line":200},[46,173388,32398],{"class":180},[46,173390,173391],{"class":56},"(my_math.add(",[46,173393,2405],{"class":180},[46,173395,448],{"class":56},[46,173397,2272],{"class":180},[46,173399,32479],{"class":56},[14,173401,173403],{"id":173402},"_911-import导入","9.11 import导入",[479,173405,173407],{"id":173406},"_9111-导入模块","9.11.1 导入模块",[36,173409,173411],{"className":38,"code":173410,"language":40,"meta":41,"style":41},"import random\n\nprint(random.randint(1, 10))\n",[43,173412,173413,173419,173423],{"__ignoreMap":41},[46,173414,173415,173417],{"class":48,"line":49},[46,173416,53],{"class":52},[46,173418,47299],{"class":56},[46,173420,173421],{"class":48,"line":60},[46,173422,616],{"emptyLinePlaceholder":615},[46,173424,173425,173427,173430,173432,173434,173436],{"class":48,"line":200},[46,173426,32398],{"class":180},[46,173428,173429],{"class":56},"(random.randint(",[46,173431,2405],{"class":180},[46,173433,448],{"class":56},[46,173435,2633],{"class":180},[46,173437,32479],{"class":56},[479,173439,173441],{"id":173440},"_9112-导入指定内容","9.11.2 导入指定内容",[36,173443,173445],{"className":38,"code":173444,"language":40,"meta":41,"style":41},"from random import randint\n\nprint(randint(1, 10))\n",[43,173446,173447,173458,173462],{"__ignoreMap":41},[46,173448,173449,173451,173453,173455],{"class":48,"line":49},[46,173450,957],{"class":52},[46,173452,59761],{"class":56},[46,173454,53],{"class":52},[46,173456,173457],{"class":56}," randint\n",[46,173459,173460],{"class":48,"line":60},[46,173461,616],{"emptyLinePlaceholder":615},[46,173463,173464,173466,173469,173471,173473,173475],{"class":48,"line":200},[46,173465,32398],{"class":180},[46,173467,173468],{"class":56},"(randint(",[46,173470,2405],{"class":180},[46,173472,448],{"class":56},[46,173474,2633],{"class":180},[46,173476,32479],{"class":56},[479,173478,173480],{"id":173479},"_9113-起别名","9.11.3 起别名",[36,173482,173484],{"className":38,"code":173483,"language":40,"meta":41,"style":41},"import random as rd\n\nprint(rd.randint(1, 10))\n",[43,173485,173486,173497,173501],{"__ignoreMap":41},[46,173487,173488,173490,173492,173494],{"class":48,"line":49},[46,173489,53],{"class":52},[46,173491,59761],{"class":56},[46,173493,398],{"class":52},[46,173495,173496],{"class":56}," rd\n",[46,173498,173499],{"class":48,"line":60},[46,173500,616],{"emptyLinePlaceholder":615},[46,173502,173503,173505,173508,173510,173512,173514],{"class":48,"line":200},[46,173504,32398],{"class":180},[46,173506,173507],{"class":56},"(rd.randint(",[46,173509,2405],{"class":180},[46,173511,448],{"class":56},[46,173513,2633],{"class":180},[46,173515,32479],{"class":56},[36,173517,173519],{"className":38,"code":173518,"language":40,"meta":41,"style":41},"from random import randint as rint\n\nprint(rint(1, 10))\n",[43,173520,173521,173537,173541],{"__ignoreMap":41},[46,173522,173523,173525,173527,173529,173532,173534],{"class":48,"line":49},[46,173524,957],{"class":52},[46,173526,59761],{"class":56},[46,173528,53],{"class":52},[46,173530,173531],{"class":56}," randint ",[46,173533,398],{"class":52},[46,173535,173536],{"class":56}," rint\n",[46,173538,173539],{"class":48,"line":60},[46,173540,616],{"emptyLinePlaceholder":615},[46,173542,173543,173545,173548,173550,173552,173554],{"class":48,"line":200},[46,173544,32398],{"class":180},[46,173546,173547],{"class":56},"(rint(",[46,173549,2405],{"class":180},[46,173551,448],{"class":56},[46,173553,2633],{"class":180},[46,173555,32479],{"class":56},[479,173557,173559],{"id":173558},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[36,173561,173563],{"className":38,"code":173562,"language":40,"meta":41,"style":41},"from random import *\n",[43,173564,173565],{"__ignoreMap":41},[46,173566,173567,173569,173571,173573],{"class":48,"line":49},[46,173568,957],{"class":52},[46,173570,59761],{"class":56},[46,173572,53],{"class":52},[46,173574,173575],{"class":52}," *\n",[19,173577,173578],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,173580,173582],{"id":173581},"_912-常用内置模块","9.12 常用内置模块",[479,173584,173586],{"id":173585},"_9121-random","9.12.1 random",[36,173588,173590],{"className":38,"code":173589,"language":40,"meta":41,"style":41},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[43,173591,173592,173598,173602,173616,173635],{"__ignoreMap":41},[46,173593,173594,173596],{"class":48,"line":49},[46,173595,53],{"class":52},[46,173597,47299],{"class":56},[46,173599,173600],{"class":48,"line":60},[46,173601,616],{"emptyLinePlaceholder":615},[46,173603,173604,173606,173608,173610,173612,173614],{"class":48,"line":200},[46,173605,32398],{"class":180},[46,173607,173429],{"class":56},[46,173609,2405],{"class":180},[46,173611,448],{"class":56},[46,173613,2633],{"class":180},[46,173615,32479],{"class":56},[46,173617,173618,173620,173623,173625,173627,173629,173631,173633],{"class":48,"line":211},[46,173619,32398],{"class":180},[46,173621,173622],{"class":56},"(random.choice([",[46,173624,151516],{"class":173},[46,173626,448],{"class":56},[46,173628,152564],{"class":173},[46,173630,448],{"class":56},[46,173632,161359],{"class":173},[46,173634,35117],{"class":56},[46,173636,173637,173639,173642,173644,173646,173648,173650,173652,173654,173656,173658,173660,173662,173664],{"class":48,"line":222},[46,173638,32398],{"class":180},[46,173640,173641],{"class":56},"(random.sample([",[46,173643,2405],{"class":180},[46,173645,448],{"class":56},[46,173647,2272],{"class":180},[46,173649,448],{"class":56},[46,173651,2266],{"class":180},[46,173653,448],{"class":56},[46,173655,2481],{"class":180},[46,173657,448],{"class":56},[46,173659,2506],{"class":180},[46,173661,113830],{"class":56},[46,173663,2272],{"class":180},[46,173665,32479],{"class":56},[479,173667,173669],{"id":173668},"_9122-time","9.12.2 time",[36,173671,173673],{"className":38,"code":173672,"language":40,"meta":41,"style":41},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[43,173674,173675,173681,173685,173692,173700],{"__ignoreMap":41},[46,173676,173677,173679],{"class":48,"line":49},[46,173678,53],{"class":52},[46,173680,610],{"class":56},[46,173682,173683],{"class":48,"line":60},[46,173684,616],{"emptyLinePlaceholder":615},[46,173686,173687,173689],{"class":48,"line":200},[46,173688,32398],{"class":180},[46,173690,173691],{"class":56},"(time.time())\n",[46,173693,173694,173696,173698],{"class":48,"line":211},[46,173695,97034],{"class":56},[46,173697,2405],{"class":180},[46,173699,459],{"class":56},[46,173701,173702,173704,173706,173709],{"class":48,"line":222},[46,173703,32398],{"class":180},[46,173705,1152],{"class":56},[46,173707,173708],{"class":173},"\"1秒后执行\"",[46,173710,459],{"class":56},[479,173712,173714],{"id":173713},"_9123-datetime","9.12.3 datetime",[36,173716,173718],{"className":38,"code":173717,"language":40,"meta":41,"style":41},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[43,173719,173720,173732,173736,173746,173753],{"__ignoreMap":41},[46,173721,173722,173724,173727,173729],{"class":48,"line":49},[46,173723,957],{"class":52},[46,173725,173726],{"class":56}," datetime ",[46,173728,53],{"class":52},[46,173730,173731],{"class":56}," datetime\n",[46,173733,173734],{"class":48,"line":60},[46,173735,616],{"emptyLinePlaceholder":615},[46,173737,173738,173741,173743],{"class":48,"line":200},[46,173739,173740],{"class":56},"now ",[46,173742,79],{"class":52},[46,173744,173745],{"class":56}," datetime.now()\n",[46,173747,173748,173750],{"class":48,"line":211},[46,173749,32398],{"class":180},[46,173751,173752],{"class":56},"(now)\n",[46,173754,173755,173757,173760,173763,173765,173768],{"class":48,"line":222},[46,173756,32398],{"class":180},[46,173758,173759],{"class":56},"(now.strftime(",[46,173761,173762],{"class":173},"\"%Y-%m-",[46,173764,158319],{"class":180},[46,173766,173767],{"class":173}," %H:%M:%S\"",[46,173769,32479],{"class":56},[479,173771,173773],{"id":173772},"_9124-os","9.12.4 os",[36,173775,173777],{"className":38,"code":173776,"language":40,"meta":41,"style":41},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[43,173778,173779,173785,173789,173796],{"__ignoreMap":41},[46,173780,173781,173783],{"class":48,"line":49},[46,173782,53],{"class":52},[46,173784,47276],{"class":56},[46,173786,173787],{"class":48,"line":60},[46,173788,616],{"emptyLinePlaceholder":615},[46,173790,173791,173793],{"class":48,"line":200},[46,173792,32398],{"class":180},[46,173794,173795],{"class":56},"(os.getcwd())\n",[46,173797,173798,173800,173803,173806],{"class":48,"line":211},[46,173799,32398],{"class":180},[46,173801,173802],{"class":56},"(os.listdir(",[46,173804,173805],{"class":173},"\".\"",[46,173807,32479],{"class":56},[479,173809,173811],{"id":173810},"_9125-sys","9.12.5 sys",[36,173813,173815],{"className":38,"code":173814,"language":40,"meta":41,"style":41},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[43,173816,173817,173824,173828,173835],{"__ignoreMap":41},[46,173818,173819,173821],{"class":48,"line":49},[46,173820,53],{"class":52},[46,173822,173823],{"class":56}," sys\n",[46,173825,173826],{"class":48,"line":60},[46,173827,616],{"emptyLinePlaceholder":615},[46,173829,173830,173832],{"class":48,"line":200},[46,173831,32398],{"class":180},[46,173833,173834],{"class":56},"(sys.version)\n",[46,173836,173837,173839],{"class":48,"line":211},[46,173838,32398],{"class":180},[46,173840,173841],{"class":56},"(sys.path)\n",[14,173843,173845,173846,173848,173849,2439],{"id":173844},"_913-if-name-main","9.13 if ",[2339,173847,1653],{}," == \"",[2339,173850,103963],{},[19,173852,173853,173854,173857],{},"模块被直接运行和被导入时，",[43,173855,173856],{},"__name__"," 的值不同。",[19,173859,173860,173861,26615],{},"创建 ",[43,173862,173863],{},"my_module.py",[36,173865,173867],{"className":38,"code":173866,"language":40,"meta":41,"style":41},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[43,173868,173869,173877,173887,173891,173895,173907],{"__ignoreMap":41},[46,173870,173871,173873,173875],{"class":48,"line":49},[46,173872,748],{"class":52},[46,173874,7223],{"class":169},[46,173876,152721],{"class":56},[46,173878,173879,173881,173883,173885],{"class":48,"line":60},[46,173880,6108],{"class":52},[46,173882,12873],{"class":56},[46,173884,2668],{"class":52},[46,173886,152732],{"class":56},[46,173888,173889],{"class":48,"line":200},[46,173890,616],{"emptyLinePlaceholder":615},[46,173892,173893],{"class":48,"line":211},[46,173894,616],{"emptyLinePlaceholder":615},[46,173896,173897,173899,173901,173903,173905],{"class":48,"line":222},[46,173898,911],{"class":52},[46,173900,914],{"class":180},[46,173902,917],{"class":52},[46,173904,920],{"class":173},[46,173906,760],{"class":56},[46,173908,173909,173911,173913,173915,173917,173919],{"class":48,"line":636},[46,173910,1227],{"class":180},[46,173912,168228],{"class":56},[46,173914,2405],{"class":180},[46,173916,448],{"class":56},[46,173918,2272],{"class":180},[46,173920,32479],{"class":56},[19,173922,173923],{},"作用：",[23,173925,173926,173929],{},[26,173927,173928],{},"直接运行该文件时，执行测试代码。",[26,173930,173931],{},"被其他文件导入时，不执行测试代码。",[19,173933,173934],{},"这是写模块时很常用的习惯。",[14,173936,173938],{"id":173937},"_914-包","9.14 包",[19,173940,173941,173942,173945],{},"包是包含 ",[43,173943,173944],{},"__init__.py"," 的目录，用于组织多个模块。",[19,173947,173948],{},"目录结构：",[36,173950,173953],{"className":173951,"code":173952,"language":571,"meta":41},[569],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[43,173954,173952],{"__ignoreMap":41},[19,173956,173957],{},"导入：",[36,173959,173961],{"className":38,"code":173960,"language":40,"meta":41,"style":41},"from utils.file_utils import read_file\n",[43,173962,173963],{"__ignoreMap":41},[46,173964,173965,173967,173970,173972],{"class":48,"line":49},[46,173966,957],{"class":52},[46,173968,173969],{"class":56}," utils.file_utils ",[46,173971,53],{"class":52},[46,173973,173974],{"class":56}," read_file\n",[19,173976,173977,173979],{},[43,173978,173944],{}," 可以为空，也可以写包初始化逻辑。",[14,173981,173983],{"id":173982},"_915-第三方包","9.15 第三方包",[19,173985,173986,173987,173989],{},"第三方包通过 ",[43,173988,250],{}," 安装。",[36,173991,173993],{"className":160,"code":173992,"language":162,"meta":41,"style":41},"pip install requests\n",[43,173994,173995],{"__ignoreMap":41},[46,173996,173997,173999,174001],{"class":48,"line":49},[46,173998,250],{"class":169},[46,174000,177],{"class":173},[46,174002,147726],{"class":173},[19,174004,174005],{},"使用：",[36,174007,174009],{"className":38,"code":174008,"language":40,"meta":41,"style":41},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[43,174010,174011,174017,174021,174036],{"__ignoreMap":41},[46,174012,174013,174015],{"class":48,"line":49},[46,174014,53],{"class":52},[46,174016,147726],{"class":56},[46,174018,174019],{"class":48,"line":60},[46,174020,616],{"emptyLinePlaceholder":615},[46,174022,174023,174026,174028,174031,174034],{"class":48,"line":200},[46,174024,174025],{"class":56},"response ",[46,174027,79],{"class":52},[46,174029,174030],{"class":56}," requests.get(",[46,174032,174033],{"class":173},"\"https:\u002F\u002Fwww.example.com\"",[46,174035,459],{"class":56},[46,174037,174038,174040],{"class":48,"line":211},[46,174039,32398],{"class":180},[46,174041,174042],{"class":56},"(response.status_code)\n",[19,174044,174045],{},"查看已安装包：",[36,174047,174049],{"className":160,"code":174048,"language":162,"meta":41,"style":41},"pip list\n",[43,174050,174051],{"__ignoreMap":41},[46,174052,174053,174055],{"class":48,"line":49},[46,174054,250],{"class":169},[46,174056,120583],{"class":173},[19,174058,174059],{},"导出项目依赖：",[36,174061,174062],{"className":160,"code":147921,"language":162,"meta":41,"style":41},[43,174063,174064],{"__ignoreMap":41},[46,174065,174066,174068,174070,174072],{"class":48,"line":49},[46,174067,250],{"class":169},[46,174069,147930],{"class":173},[46,174071,28213],{"class":52},[46,174073,147935],{"class":173},[19,174075,174076],{},"安装项目依赖：",[36,174078,174079],{"className":160,"code":147941,"language":162,"meta":41,"style":41},[43,174080,174081],{"__ignoreMap":41},[46,174082,174083,174085,174087,174089],{"class":48,"line":49},[46,174084,250],{"class":169},[46,174086,177],{"class":173},[46,174088,121267],{"class":180},[46,174090,147935],{"class":173},[14,174092,174094],{"id":174093},"_916-模块搜索路径","9.16 模块搜索路径",[19,174096,174097,174098,174101],{},"Python 导入模块时会在 ",[43,174099,174100],{},"sys.path"," 中查找。",[36,174103,174105],{"className":38,"code":174104,"language":40,"meta":41,"style":41},"import sys\n\nfor path in sys.path:\n    print(path)\n",[43,174106,174107,174113,174117,174129],{"__ignoreMap":41},[46,174108,174109,174111],{"class":48,"line":49},[46,174110,53],{"class":52},[46,174112,173823],{"class":56},[46,174114,174115],{"class":48,"line":60},[46,174116,616],{"emptyLinePlaceholder":615},[46,174118,174119,174121,174124,174126],{"class":48,"line":200},[46,174120,1713],{"class":52},[46,174122,174123],{"class":56}," path ",[46,174125,1146],{"class":52},[46,174127,174128],{"class":56}," sys.path:\n",[46,174130,174131,174133],{"class":48,"line":211},[46,174132,1227],{"class":180},[46,174134,170857],{"class":56},[19,174136,174137],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[19,174139,159251],{},[36,174141,174144],{"className":174142,"code":174143,"language":571,"meta":41},[569],"random.py\njson.py\ntime.py\n",[43,174145,174143],{"__ignoreMap":41},[19,174147,174148],{},"这些文件名可能导致导入异常。",[14,174150,174152],{"id":174151},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[19,174154,173948],{},[36,174156,174159],{"className":174157,"code":174158,"language":571,"meta":41},[569],"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",[43,174160,174158],{"__ignoreMap":41},[19,174162,174163,26615],{},[43,174164,174165],{},"utils\u002Ffile_utils.py",[36,174167,174169],{"className":38,"code":174168,"language":40,"meta":41,"style":41},"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",[43,174170,174171,174177,174187,174191,174195,174205,174215,174223,174229,174233,174260,174270,174274,174278,174288,174314],{"__ignoreMap":41},[46,174172,174173,174175],{"class":48,"line":49},[46,174174,53],{"class":52},[46,174176,148719],{"class":56},[46,174178,174179,174181,174183,174185],{"class":48,"line":60},[46,174180,957],{"class":52},[46,174182,960],{"class":56},[46,174184,53],{"class":52},[46,174186,965],{"class":56},[46,174188,174189],{"class":48,"line":200},[46,174190,616],{"emptyLinePlaceholder":615},[46,174192,174193],{"class":48,"line":211},[46,174194,616],{"emptyLinePlaceholder":615},[46,174196,174197,174199,174202],{"class":48,"line":222},[46,174198,748],{"class":52},[46,174200,174201],{"class":169}," read_json",[46,174203,174204],{"class":56},"(path):\n",[46,174206,174207,174210,174212],{"class":48,"line":636},[46,174208,174209],{"class":56},"    path ",[46,174211,79],{"class":52},[46,174213,174214],{"class":56}," Path(path)\n",[46,174216,174217,174219,174221],{"class":48,"line":641},[46,174218,5121],{"class":52},[46,174220,40902],{"class":52},[46,174222,170938],{"class":56},[46,174224,174225,174227],{"class":48,"line":653},[46,174226,16754],{"class":52},[46,174228,53805],{"class":56},[46,174230,174231],{"class":48,"line":659},[46,174232,616],{"emptyLinePlaceholder":615},[46,174234,174235,174237,174239,174242,174244,174246,174248,174250,174252,174254,174256,174258],{"class":48,"line":665},[46,174236,797],{"class":52},[46,174238,148419],{"class":180},[46,174240,174241],{"class":56},"(path, ",[46,174243,148429],{"class":173},[46,174245,448],{"class":56},[46,174247,148434],{"class":439},[46,174249,79],{"class":52},[46,174251,148439],{"class":173},[46,174253,15716],{"class":56},[46,174255,398],{"class":52},[46,174257,149781],{"class":439},[46,174259,760],{"class":56},[46,174261,174262,174264,174266,174268],{"class":48,"line":670},[46,174263,16754],{"class":52},[46,174265,149792],{"class":56},[46,174267,47325],{"class":439},[46,174269,459],{"class":56},[46,174271,174272],{"class":48,"line":676},[46,174273,616],{"emptyLinePlaceholder":615},[46,174275,174276],{"class":48,"line":682},[46,174277,616],{"emptyLinePlaceholder":615},[46,174279,174280,174282,174285],{"class":48,"line":688},[46,174281,748],{"class":52},[46,174283,174284],{"class":169}," write_json",[46,174286,174287],{"class":56},"(path, data):\n",[46,174289,174290,174292,174294,174296,174298,174300,174302,174304,174306,174308,174310,174312],{"class":48,"line":693},[46,174291,797],{"class":52},[46,174293,148419],{"class":180},[46,174295,174241],{"class":56},[46,174297,153604],{"class":173},[46,174299,448],{"class":56},[46,174301,148434],{"class":439},[46,174303,79],{"class":52},[46,174305,148439],{"class":173},[46,174307,15716],{"class":56},[46,174309,398],{"class":52},[46,174311,149781],{"class":439},[46,174313,760],{"class":56},[46,174315,174316,174319,174321,174323,174325,174327,174329,174331,174333,174335,174337],{"class":48,"line":699},[46,174317,174318],{"class":56},"        json.dump(data, ",[46,174320,47325],{"class":439},[46,174322,448],{"class":56},[46,174324,148765],{"class":439},[46,174326,79],{"class":52},[46,174328,35960],{"class":180},[46,174330,448],{"class":56},[46,174332,153640],{"class":439},[46,174334,79],{"class":52},[46,174336,2272],{"class":180},[46,174338,459],{"class":56},[19,174340,174341,26615],{},[43,174342,156235],{},[36,174344,174346],{"className":38,"code":174345,"language":40,"meta":41,"style":41},"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",[43,174347,174348,174359,174363,174376,174396],{"__ignoreMap":41},[46,174349,174350,174352,174354,174356],{"class":48,"line":49},[46,174351,957],{"class":52},[46,174353,173969],{"class":56},[46,174355,53],{"class":52},[46,174357,174358],{"class":56}," read_json, write_json\n",[46,174360,174361],{"class":48,"line":60},[46,174362,616],{"emptyLinePlaceholder":615},[46,174364,174365,174367,174369,174372,174374],{"class":48,"line":200},[46,174366,161344],{"class":56},[46,174368,79],{"class":52},[46,174370,174371],{"class":56}," read_json(",[46,174373,153459],{"class":173},[46,174375,459],{"class":56},[46,174377,174378,174380,174382,174384,174386,174388,174390,174392,174394],{"class":48,"line":211},[46,174379,172162],{"class":56},[46,174381,64644],{"class":173},[46,174383,53404],{"class":56},[46,174385,151516],{"class":173},[46,174387,448],{"class":56},[46,174389,153100],{"class":173},[46,174391,53404],{"class":56},[46,174393,3173],{"class":180},[46,174395,166780],{"class":56},[46,174397,174398,174401,174403],{"class":48,"line":222},[46,174399,174400],{"class":56},"write_json(",[46,174402,153459],{"class":173},[46,174404,174405],{"class":56},", students)\n",[14,174407,174409],{"id":174408},"_918-易错点","9.18 易错点",[23,174411,174412,174415,174420,174425,174428,174431],{},[26,174413,174414],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[26,174416,174417,174418,365],{},"能指定异常类型就不要裸写 ",[43,174419,172522],{},[26,174421,174422,174424],{},[43,174423,172897],{}," 无论是否出错都会执行。",[26,174426,174427],{},"模块文件名不要和标准库重名。",[26,174429,174430],{},"导入自己写的模块时，要注意运行目录。",[26,174432,174433],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,174435,174437],{"id":174436},"_919-本章练习","9.19 本章练习",[23,174439,174440,174443,174446,174452,174459],{},[26,174441,174442],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[26,174444,174445],{},"写函数读取文件，如果文件不存在则返回空字符串。",[26,174447,173860,174448,174451],{},[43,174449,174450],{},"math_utils.py","，实现加减乘除函数并导入使用。",[26,174453,174454,174455,174458],{},"创建一个 ",[43,174456,174457],{},"utils"," 包，把 JSON 读写函数放进去。",[26,174460,174461],{},"写一个程序，捕获除零异常和输入格式异常。",[2098,174463,174464],{},"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":41,"searchDepth":60,"depth":60,"links":174466},[174467,174468,174469,174470,174471,174472,174473,174474,174475,174476,174477,174483,174490,174492,174493,174494,174495,174496,174497],{"id":172319,"depth":60,"text":172320},{"id":172447,"depth":60,"text":172448},{"id":172496,"depth":60,"text":172497},{"id":172645,"depth":60,"text":172646},{"id":172817,"depth":60,"text":172818},{"id":172886,"depth":60,"text":172887},{"id":172997,"depth":60,"text":172998},{"id":173123,"depth":60,"text":173124},{"id":173248,"depth":60,"text":173249},{"id":173303,"depth":60,"text":173304},{"id":173402,"depth":60,"text":173403,"children":174478},[174479,174480,174481,174482],{"id":173406,"depth":200,"text":173407},{"id":173440,"depth":200,"text":173441},{"id":173479,"depth":200,"text":173480},{"id":173558,"depth":200,"text":173559},{"id":173581,"depth":60,"text":173582,"children":174484},[174485,174486,174487,174488,174489],{"id":173585,"depth":200,"text":173586},{"id":173668,"depth":200,"text":173669},{"id":173713,"depth":200,"text":173714},{"id":173772,"depth":200,"text":173773},{"id":173810,"depth":200,"text":173811},{"id":173844,"depth":60,"text":174491},"9.13 if name == \"main\"",{"id":173937,"depth":60,"text":173938},{"id":173982,"depth":60,"text":173983},{"id":174093,"depth":60,"text":174094},{"id":174151,"depth":60,"text":174152},{"id":174408,"depth":60,"text":174409},{"id":174436,"depth":60,"text":174437},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":172311,"description":25378},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":174504,"title":174505,"body":174506,"description":174669,"extension":2125,"meta":174670,"navigation":615,"path":174671,"seo":174672,"stem":174673,"__hash__":174674},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":174507,"toc":174664},[174508,174511,174514,174517,174528,174530,174604,174607,174610,174613,174616,174619,174622,174625,174628,174631,174634],[10,174509,174505],{"id":174510},"python教程",[19,174512,174513],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[19,174515,174516],{},"建议学习环境：",[23,174518,174519,174522,174525],{},[26,174520,174521],{},"Python 版本：Python 3.10 及以上。",[26,174523,174524],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[26,174526,174527],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,174529,118706],{"id":118706},[23,174531,174532,174538,174544,174550,174556,174562,174568,174574,174580,174586,174592,174598],{},[26,174533,174534],{},[2426,174535,174537],{"href":174536},".\u002Fch1-Python","Python环境与第一个程序",[26,174539,174540],{},[2426,174541,174543],{"href":174542},".\u002Fch2","基础语法、变量与字符串",[26,174545,174546],{},[2426,174547,174549],{"href":174548},".\u002Fch3","判断语句",[26,174551,174552],{},[2426,174553,174555],{"href":174554},".\u002Fch4","循环语句",[26,174557,174558],{},[2426,174559,174561],{"href":174560},".\u002Fch5","函数基础",[26,174563,174564],{},[2426,174565,174567],{"href":174566},".\u002Fch6","数据容器",[26,174569,174570],{},[2426,174571,174573],{"href":174572},".\u002Fch7","函数进阶",[26,174575,174576],{},[2426,174577,174579],{"href":174578},".\u002Fch8","文件操作",[26,174581,174582],{},[2426,174583,174585],{"href":174584},".\u002Fch9","异常、模块与包",[26,174587,174588],{},[2426,174589,174591],{"href":174590},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[26,174593,174594],{},[2426,174595,174597],{"href":174596},".\u002Fch11","面向对象基础",[26,174599,174600],{},[2426,174601,174603],{"href":174602},".\u002Fch12","综合案例与复习路线",[14,174605,174606],{"id":174606},"学习路线",[19,174608,174609],{},"第一阶段：能运行程序。",[19,174611,174612],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[19,174614,174615],{},"第二阶段：能组织数据。",[19,174617,174618],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[19,174620,174621],{},"第三阶段：能封装逻辑。",[19,174623,174624],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[19,174626,174627],{},"第四阶段：能做小项目。",[19,174629,174630],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,174632,174633],{"id":174633},"参考资料",[23,174635,174636,174643,174650,174657],{},[26,174637,174638,174639],{},"黑马程序员 Python 入门教程推荐：",[2426,174640,174641],{"href":174641,"rel":174642},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[25862],[26,174644,174645,174646],{},"Python 官方中文教程：",[2426,174647,174648],{"href":174648,"rel":174649},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[25862],[26,174651,174652,174653],{},"Python 标准库文档：",[2426,174654,174655],{"href":174655,"rel":174656},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[25862],[26,174658,174659,174660],{},"pyecharts 文档：",[2426,174661,174662],{"href":174662,"rel":174663},"https:\u002F\u002Fpyecharts.org\u002F",[25862],{"title":41,"searchDepth":60,"depth":60,"links":174665},[174666,174667,174668],{"id":118706,"depth":60,"text":118706},{"id":174606,"depth":60,"text":174606},{"id":174633,"depth":60,"text":174633},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":25380},"\u002Fwiki\u002F2024-10-10-python",{"title":174505,"description":174669},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331469698]