[{"data":1,"prerenderedAt":173337},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-05-17-mujoco-xue-xi":3,"wiki-doc-nav":495},{"id":4,"title":5,"body":6,"description":486,"extension":487,"meta":488,"navigation":490,"path":491,"seo":492,"stem":493,"__hash__":494},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":8,"toc":476},"minimark",[9,14,18,21,48,55,62,84,88,91,112,115,119,122,130,133,147,150,153,238,241,247,250,276,279,329,332,338,341,344,347,376,379,385,388,391,394,414,417,420,423,472],[10,11,13],"h1",{"id":12},"mujoco-学习","MuJoCo 学习",[15,16,17],"p",{},"初版",[15,19,20],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[22,23,24,28,31,45],"ol",{},[25,26,27],"li",{},"MuJoCo 模型文件在描述什么。",[25,29,30],{},"Python 代码怎样读取和推进仿真。",[25,32,33,37,38,37,41,44],{},[34,35,36],"code",{},"qpos","、",[34,39,40],{},"qvel",[34,42,43],{},"ctrl"," 这些数组为什么重要。",[25,46,47],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[15,49,50,51,54],{},"默认环境为 Fedora 44、Python >= 3.10、",[34,52,53],{},"mujoco>=2.3"," 官方 Python bindings。",[15,56,57,58,61],{},"注意：本文禁止使用 ",[34,59,60],{},"mujoco-py","。所有示例均使用：",[63,64,69],"pre",{"className":65,"code":66,"language":67,"meta":68,"style":68},"language-python shiki shiki-themes github-light github-dark","import mujoco\n","python","",[34,70,71],{"__ignoreMap":68},[72,73,76,80],"span",{"class":74,"line":75},"line",1,[72,77,79],{"class":78},"szBVR","import",[72,81,83],{"class":82},"sVt8B"," mujoco\n",[85,86,87],"h2",{"id":87},"适合谁阅读",[15,89,90],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[22,92,93,96,99,102],{},[25,94,95],{},"没学过 MuJoCo，只会一点 Python。",[25,97,98],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[25,100,101],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[25,103,104,105,107,108,111],{},"以前接触过 ",[34,106,60],{},"，现在想迁移到官方 ",[34,109,110],{},"mujoco"," Python bindings。",[15,113,114],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[85,116,118],{"id":117},"mujoco-到底是什么","MuJoCo 到底是什么",[15,120,121],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[63,123,128],{"className":124,"code":126,"language":127,"meta":68},[125],"language-text","你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n","text",[34,129,126],{"__ignoreMap":68},[15,131,132],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[22,134,135,138,141,144],{},[25,136,137],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[25,139,140],{},"快速测试控制算法，不必一开始就上真实机器人。",[25,142,143],{},"生成强化学习环境。",[25,145,146],{},"采集状态、动作、图像、奖励等训练数据。",[85,148,149],{"id":149},"学习前的心智模型",[15,151,152],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[154,155,156,173],"table",{},[157,158,159],"thead",{},[160,161,162,167,170],"tr",{},[163,164,166],"th",{"align":165},"left","部分",[163,168,169],{"align":165},"负责什么",[163,171,172],{"align":165},"例子",[174,175,176,188,201,214,227],"tbody",{},[160,177,178,182,185],{},[179,180,181],"td",{"align":165},"MJCF XML",[179,183,184],{"align":165},"定义世界和机器人结构",[179,186,187],{"align":165},"地面、盒子、关节、电机、摄像头",[160,189,190,195,198],{},[179,191,192],{"align":165},[34,193,194],{},"MjModel",[179,196,197],{"align":165},"编译后的静态模型",[179,199,200],{"align":165},"有几个关节、有几个电机、时间步长是多少",[160,202,203,208,211],{},[179,204,205],{"align":165},[34,206,207],{},"MjData",[179,209,210],{"align":165},"运行中的动态状态",[179,212,213],{"align":165},"当前时间、位置、速度、电机输入",[160,215,216,221,224],{},[179,217,218],{"align":165},[34,219,220],{},"mj_step",[179,222,223],{"align":165},"推进一步物理仿真",[179,225,226],{"align":165},"根据重力、力、碰撞更新状态",[160,228,229,232,235],{},[179,230,231],{"align":165},"Viewer \u002F Renderer",[179,233,234],{"align":165},"把仿真显示出来",[179,236,237],{"align":165},"打开窗口或保存图片",[15,239,240],{},"一句话总结：",[63,242,245],{"className":243,"code":244,"language":127,"meta":68},[125],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[34,246,244],{"__ignoreMap":68},[15,248,249],{},"参考来源：",[251,252,253,262,269],"ul",{},[25,254,255,256],{},"MuJoCo Python 官方文档：",[257,258,259],"a",{"href":259,"rel":260},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[261],"nofollow",[25,263,264,265],{},"MuJoCo XML Reference：",[257,266,267],{"href":267,"rel":268},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[261],[25,270,271,272],{},"MuJoCo Overview：",[257,273,274],{"href":274,"rel":275},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[261],[85,277,278],{"id":278},"章节目录",[22,280,281,287,293,299,305,311,317,323],{},[25,282,283],{},[257,284,286],{"href":285},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[25,288,289],{},[257,290,292],{"href":291},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[25,294,295],{},[257,296,298],{"href":297},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[25,300,301],{},[257,302,304],{"href":303},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[25,306,307],{},[257,308,310],{"href":309},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[25,312,313],{},[257,314,316],{"href":315},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[25,318,319],{},[257,320,322],{"href":321},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[25,324,325],{},[257,326,328],{"href":327},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[85,330,331],{"id":331},"推荐学习路线",[63,333,336],{"className":334,"code":335,"language":127,"meta":68},[125],"环境安装\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",[34,337,335],{"__ignoreMap":68},[15,339,340],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[85,342,343],{"id":343},"建议的目录结构",[15,345,346],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[63,348,352],{"className":349,"code":350,"language":351,"meta":68,"style":68},"language-bash shiki shiki-themes github-light github-dark","mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n","bash",[34,353,354,368],{"__ignoreMap":68},[72,355,356,360,364],{"class":74,"line":75},[72,357,359],{"class":358},"sScJk","mkdir",[72,361,363],{"class":362},"sj4cs"," -p",[72,365,367],{"class":366},"sZZnC"," mujoco_tutorial\n",[72,369,371,374],{"class":74,"line":370},2,[72,372,373],{"class":362},"cd",[72,375,367],{"class":366},[15,377,378],{},"每一章的代码都单独保存：",[63,380,383],{"className":381,"code":382,"language":127,"meta":68},[125],"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",[34,384,382],{"__ignoreMap":68},[15,386,387],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[85,389,390],{"id":390},"学习方法",[15,392,393],{},"每章建议按这个顺序操作：",[22,395,396,399,402,405,408,411],{},[25,397,398],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[25,400,401],{},"复制最小可运行代码，保存成指定文件。",[25,403,404],{},"运行代码，确认没有报错。",[25,406,407],{},"对照“运行结果说明”理解输出。",[25,409,410],{},"做“验证步骤”，主动改一两个参数。",[25,412,413],{},"遇到报错先看“常见错误与解决方案”。",[15,415,416],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[85,418,419],{"id":419},"全局排错顺序",[15,421,422],{},"遇到问题时，按下面顺序查：",[22,424,425,431,437,442,445,448,457,469],{},[25,426,427,428],{},"Python 环境是否激活：",[34,429,430],{},"which python",[25,432,433,434],{},"MuJoCo 是否能导入：",[34,435,436],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[25,438,439,440],{},"是否误装了 ",[34,441,60],{},[25,443,444],{},"XML 标签是否闭合、属性是否拼写正确",[25,446,447],{},"actuator 引用的 joint 名字是否存在",[25,449,450,453,454],{},[34,451,452],{},"data.ctrl"," 的长度是否等于 ",[34,455,456],{},"model.nu",[25,458,459,460,462,463,465,466],{},"修改 ",[34,461,36],{}," 或 ",[34,464,40],{}," 后是否调用了 ",[34,467,468],{},"mujoco.mj_forward",[25,470,471],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[473,474,475],"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 .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":68,"searchDepth":370,"depth":370,"links":477},[478,479,480,481,482,483,484,485],{"id":87,"depth":370,"text":87},{"id":117,"depth":370,"text":118},{"id":149,"depth":370,"text":149},{"id":278,"depth":370,"text":278},{"id":331,"depth":370,"text":331},{"id":343,"depth":370,"text":343},{"id":390,"depth":370,"text":390},{"id":419,"depth":370,"text":419},"仿真搭建。","md",{"category":489},"机器人",true,"\u002Fwiki\u002F2025-05-17-mujoco",{"title":5,"description":486},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",[496,5590,6696,8116,11105,12456,13945,15034,23796,23808,24403,24429,24553,24794,24859,24877,24890,24937,25061,25230,25429,25609,25814,25950,26045,26082,26095,26405,27146,27854,27875,28895,30525,30676,30689,30701,30999,50811,50826,50843,50876,53748,77096,93240,93261,93374,93495,94265,94928,95289,95327,95433,95533,95576,95602,95663,97317,97418,97443,97934,98434,99514,99797,100539,101041,101053,103056,104719,106219,107917,109834,111753,113775,117245,117567,118030,118779,121723,122071,122093,122449,125756,125768,126171,126194,126341,126508,126713,127014,127571,128228,130159,131757,132406,133900,135331,136566,138260,140012,142422,142538,143473,143684,144569,145804,146032,146045,147200,149612,151980,155301,157778,159422,161199,163212,166264,168444,170971,173165],{"id":497,"title":498,"body":499,"description":68,"extension":487,"meta":5585,"navigation":490,"path":5586,"seo":5587,"stem":5588,"__hash__":5589},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":500,"toc":5557},[501,504,508,511,515,526,530,535,538,541,544,547,550,578,582,585,588,591,594,646,650,668,670,684,687,695,698,1553,1560,1576,1580,1671,1675,1681,1770,1774,1812,1816,1880,1884,1888,1895,1906,1910,1915,1919,1924,1928,1933,1937,1941,1946,2216,2221,2359,2364,2620,2623,2631,2635,2640,2743,2746,3052,3061,3162,3165,3168,3171,3174,3434,3439,3579,3582,3761,3764,3892,3895,4047,4051,4056,4059,4070,4078,4081,4188,4192,4196,4201,4251,4256,4261,4285,4290,4343,4346,4351,4528,4533,4818,4823,5220,5224,5229,5286,5291,5299,5302,5442,5445,5554],[10,502,498],{"id":503},"_1基础入门",[85,505,507],{"id":506},"_11注释","1.1注释",[15,509,510],{},"\u002F\u002F或者\u002F* *\u002F",[85,512,514],{"id":513},"_12命名","1.2命名",[22,516,517,520,523],{},[25,518,519],{},"字母数字下划线",[25,521,522],{},"开头必须是字母或_",[25,524,525],{},"不能使用关键词",[85,527,529],{"id":528},"_13数据类型","1.3数据类型",[531,532,534],"h3",{"id":533},"_131整形","1.3.1整形",[15,536,537],{},"short 短整形 2",[15,539,540],{},"int 整形 4",[15,542,543],{},"long 长整形 win4 linux32位4 linux64位8",[15,545,546],{},"long long 长长整形 8",[15,548,549],{},"利用sizeof可以求数据类型占用的内存空间大小",[63,551,555],{"className":552,"code":553,"language":554,"meta":68,"style":68},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[34,556,557,571],{"__ignoreMap":68},[72,558,559,562,565,568],{"class":74,"line":75},[72,560,561],{"class":78},"sizeof",[72,563,564],{"class":82},"(",[72,566,567],{"class":78},"int",[72,569,570],{"class":82},")\n",[72,572,573,575],{"class":74,"line":370},[72,574,561],{"class":78},[72,576,577],{"class":82},"(num)\n",[531,579,581],{"id":580},"_132浮点型","1.3.2浮点型",[15,583,584],{},"float 单精度 4节 7位有效数字",[15,586,587],{},"double 双精度 8节 15-16有效数字",[15,589,590],{},"默认情况下，输出一个小数，会显示6位有效数字",[15,592,593],{},"注意点：",[63,595,597],{"className":552,"code":596,"language":554,"meta":68,"style":68},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[34,598,599,623],{"__ignoreMap":68},[72,600,601,604,607,610,613,616,619],{"class":74,"line":75},[72,602,603],{"class":78},"float",[72,605,606],{"class":82}," f1",[72,608,609],{"class":78},"=",[72,611,612],{"class":362},"3.14",[72,614,615],{"class":78},"f",[72,617,618],{"class":82},";",[72,620,622],{"class":621},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[72,624,625,627,630,632,635,638,641,643],{"class":74,"line":370},[72,626,603],{"class":78},[72,628,629],{"class":82}," f2",[72,631,609],{"class":78},[72,633,634],{"class":362},"3",[72,636,637],{"class":78},"e",[72,639,640],{"class":362},"2",[72,642,618],{"class":82},[72,644,645],{"class":621}," \u002F\u002F科学记数法\n",[531,647,649],{"id":648},"_133字符型","1.3.3字符型",[63,651,653],{"className":552,"code":652,"language":554,"meta":68,"style":68},"char ch='a'\n",[34,654,655],{"__ignoreMap":68},[72,656,657,660,663,665],{"class":74,"line":75},[72,658,659],{"class":78},"char",[72,661,662],{"class":82}," ch",[72,664,609],{"class":78},[72,666,667],{"class":366},"'a'\n",[15,669,593],{},[22,671,672,675,678,681],{},[25,673,674],{},"在显示字符型变量时，只能单引号，双引号x",[25,676,677],{},"单引号内只能一个字符，不能字符串",[25,679,680],{},"c和c++字符型变量只占用一个字符",[25,682,683],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[15,685,686],{},"ASCII码大致由以下两部分组成：",[22,688,689,692],{},[25,690,691],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[25,693,694],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[15,696,697],{},"ASCII码表格：",[154,699,700,741],{},[157,701,702],{},[160,703,704,711,716,720,725,729,733,737],{},[163,705,706,710],{},[707,708,709],"strong",{},"ASCII","值",[163,712,713],{},[707,714,715],{},"控制字符",[163,717,718,710],{},[707,719,709],{},[163,721,722],{},[707,723,724],{},"字符",[163,726,727,710],{},[707,728,709],{},[163,730,731],{},[707,732,724],{},[163,734,735,710],{},[707,736,709],{},[163,738,739],{},[707,740,724],{},[174,742,743,768,793,818,843,869,894,919,945,970,996,1022,1048,1073,1099,1125,1151,1175,1200,1225,1250,1275,1300,1325,1350,1375,1400,1426,1451,1476,1501,1527],{},[160,744,745,748,751,754,757,760,763,766],{},[179,746,747],{},"0",[179,749,750],{},"NUT",[179,752,753],{},"32",[179,755,756],{},"(space)",[179,758,759],{},"64",[179,761,762],{},"@",[179,764,765],{},"96",[179,767,37],{},[160,769,770,773,776,779,782,785,788,791],{},[179,771,772],{},"1",[179,774,775],{},"SOH",[179,777,778],{},"33",[179,780,781],{},"!",[179,783,784],{},"65",[179,786,787],{},"A",[179,789,790],{},"97",[179,792,257],{},[160,794,795,797,800,803,806,809,812,815],{},[179,796,640],{},[179,798,799],{},"STX",[179,801,802],{},"34",[179,804,805],{},"\"",[179,807,808],{},"66",[179,810,811],{},"B",[179,813,814],{},"98",[179,816,817],{},"b",[160,819,820,822,825,828,831,834,837,840],{},[179,821,634],{},[179,823,824],{},"ETX",[179,826,827],{},"35",[179,829,830],{},"#",[179,832,833],{},"67",[179,835,836],{},"C",[179,838,839],{},"99",[179,841,842],{},"c",[160,844,845,848,851,854,857,860,863,866],{},[179,846,847],{},"4",[179,849,850],{},"EOT",[179,852,853],{},"36",[179,855,856],{},"$",[179,858,859],{},"68",[179,861,862],{},"D",[179,864,865],{},"100",[179,867,868],{},"d",[160,870,871,874,877,880,883,886,889,892],{},[179,872,873],{},"5",[179,875,876],{},"ENQ",[179,878,879],{},"37",[179,881,882],{},"%",[179,884,885],{},"69",[179,887,888],{},"E",[179,890,891],{},"101",[179,893,637],{},[160,895,896,899,902,905,908,911,914,917],{},[179,897,898],{},"6",[179,900,901],{},"ACK",[179,903,904],{},"38",[179,906,907],{},"&",[179,909,910],{},"70",[179,912,913],{},"F",[179,915,916],{},"102",[179,918,615],{},[160,920,921,924,927,930,933,936,939,942],{},[179,922,923],{},"7",[179,925,926],{},"BEL",[179,928,929],{},"39",[179,931,932],{},",",[179,934,935],{},"71",[179,937,938],{},"G",[179,940,941],{},"103",[179,943,944],{},"g",[160,946,947,950,953,956,958,961,964,967],{},[179,948,949],{},"8",[179,951,952],{},"BS",[179,954,955],{},"40",[179,957,564],{},[179,959,960],{},"72",[179,962,963],{},"H",[179,965,966],{},"104",[179,968,969],{},"h",[160,971,972,975,978,981,984,987,990,993],{},[179,973,974],{},"9",[179,976,977],{},"HT",[179,979,980],{},"41",[179,982,983],{},")",[179,985,986],{},"73",[179,988,989],{},"I",[179,991,992],{},"105",[179,994,995],{},"i",[160,997,998,1001,1004,1007,1010,1013,1016,1019],{},[179,999,1000],{},"10",[179,1002,1003],{},"LF",[179,1005,1006],{},"42",[179,1008,1009],{},"*",[179,1011,1012],{},"74",[179,1014,1015],{},"J",[179,1017,1018],{},"106",[179,1020,1021],{},"j",[160,1023,1024,1027,1030,1033,1036,1039,1042,1045],{},[179,1025,1026],{},"11",[179,1028,1029],{},"VT",[179,1031,1032],{},"43",[179,1034,1035],{},"+",[179,1037,1038],{},"75",[179,1040,1041],{},"K",[179,1043,1044],{},"107",[179,1046,1047],{},"k",[160,1049,1050,1053,1056,1059,1061,1064,1067,1070],{},[179,1051,1052],{},"12",[179,1054,1055],{},"FF",[179,1057,1058],{},"44",[179,1060,932],{},[179,1062,1063],{},"76",[179,1065,1066],{},"L",[179,1068,1069],{},"108",[179,1071,1072],{},"l",[160,1074,1075,1078,1081,1084,1087,1090,1093,1096],{},[179,1076,1077],{},"13",[179,1079,1080],{},"CR",[179,1082,1083],{},"45",[179,1085,1086],{},"-",[179,1088,1089],{},"77",[179,1091,1092],{},"M",[179,1094,1095],{},"109",[179,1097,1098],{},"m",[160,1100,1101,1104,1107,1110,1113,1116,1119,1122],{},[179,1102,1103],{},"14",[179,1105,1106],{},"SO",[179,1108,1109],{},"46",[179,1111,1112],{},".",[179,1114,1115],{},"78",[179,1117,1118],{},"N",[179,1120,1121],{},"110",[179,1123,1124],{},"n",[160,1126,1127,1130,1133,1136,1139,1142,1145,1148],{},[179,1128,1129],{},"15",[179,1131,1132],{},"SI",[179,1134,1135],{},"47",[179,1137,1138],{},"\u002F",[179,1140,1141],{},"79",[179,1143,1144],{},"O",[179,1146,1147],{},"111",[179,1149,1150],{},"o",[160,1152,1153,1156,1159,1162,1164,1167,1170,1173],{},[179,1154,1155],{},"16",[179,1157,1158],{},"DLE",[179,1160,1161],{},"48",[179,1163,747],{},[179,1165,1166],{},"80",[179,1168,1169],{},"P",[179,1171,1172],{},"112",[179,1174,15],{},[160,1176,1177,1180,1183,1186,1188,1191,1194,1197],{},[179,1178,1179],{},"17",[179,1181,1182],{},"DCI",[179,1184,1185],{},"49",[179,1187,772],{},[179,1189,1190],{},"81",[179,1192,1193],{},"Q",[179,1195,1196],{},"113",[179,1198,1199],{},"q",[160,1201,1202,1205,1208,1211,1213,1216,1219,1222],{},[179,1203,1204],{},"18",[179,1206,1207],{},"DC2",[179,1209,1210],{},"50",[179,1212,640],{},[179,1214,1215],{},"82",[179,1217,1218],{},"R",[179,1220,1221],{},"114",[179,1223,1224],{},"r",[160,1226,1227,1230,1233,1236,1238,1241,1244,1247],{},[179,1228,1229],{},"19",[179,1231,1232],{},"DC3",[179,1234,1235],{},"51",[179,1237,634],{},[179,1239,1240],{},"83",[179,1242,1243],{},"S",[179,1245,1246],{},"115",[179,1248,1249],{},"s",[160,1251,1252,1255,1258,1261,1263,1266,1269,1272],{},[179,1253,1254],{},"20",[179,1256,1257],{},"DC4",[179,1259,1260],{},"52",[179,1262,847],{},[179,1264,1265],{},"84",[179,1267,1268],{},"T",[179,1270,1271],{},"116",[179,1273,1274],{},"t",[160,1276,1277,1280,1283,1286,1288,1291,1294,1297],{},[179,1278,1279],{},"21",[179,1281,1282],{},"NAK",[179,1284,1285],{},"53",[179,1287,873],{},[179,1289,1290],{},"85",[179,1292,1293],{},"U",[179,1295,1296],{},"117",[179,1298,1299],{},"u",[160,1301,1302,1305,1308,1311,1313,1316,1319,1322],{},[179,1303,1304],{},"22",[179,1306,1307],{},"SYN",[179,1309,1310],{},"54",[179,1312,898],{},[179,1314,1315],{},"86",[179,1317,1318],{},"V",[179,1320,1321],{},"118",[179,1323,1324],{},"v",[160,1326,1327,1330,1333,1336,1338,1341,1344,1347],{},[179,1328,1329],{},"23",[179,1331,1332],{},"TB",[179,1334,1335],{},"55",[179,1337,923],{},[179,1339,1340],{},"87",[179,1342,1343],{},"W",[179,1345,1346],{},"119",[179,1348,1349],{},"w",[160,1351,1352,1355,1358,1361,1363,1366,1369,1372],{},[179,1353,1354],{},"24",[179,1356,1357],{},"CAN",[179,1359,1360],{},"56",[179,1362,949],{},[179,1364,1365],{},"88",[179,1367,1368],{},"X",[179,1370,1371],{},"120",[179,1373,1374],{},"x",[160,1376,1377,1380,1383,1386,1388,1391,1394,1397],{},[179,1378,1379],{},"25",[179,1381,1382],{},"EM",[179,1384,1385],{},"57",[179,1387,974],{},[179,1389,1390],{},"89",[179,1392,1393],{},"Y",[179,1395,1396],{},"121",[179,1398,1399],{},"y",[160,1401,1402,1405,1408,1411,1414,1417,1420,1423],{},[179,1403,1404],{},"26",[179,1406,1407],{},"SUB",[179,1409,1410],{},"58",[179,1412,1413],{},":",[179,1415,1416],{},"90",[179,1418,1419],{},"Z",[179,1421,1422],{},"122",[179,1424,1425],{},"z",[160,1427,1428,1431,1434,1437,1439,1442,1445,1448],{},[179,1429,1430],{},"27",[179,1432,1433],{},"ESC",[179,1435,1436],{},"59",[179,1438,618],{},[179,1440,1441],{},"91",[179,1443,1444],{},"[",[179,1446,1447],{},"123",[179,1449,1450],{},"{",[160,1452,1453,1456,1459,1462,1465,1468,1470,1473],{},[179,1454,1455],{},"28",[179,1457,1458],{},"FS",[179,1460,1461],{},"60",[179,1463,1464],{},"\u003C",[179,1466,1467],{},"92",[179,1469,1138],{},[179,1471,1472],{},"124",[179,1474,1475],{},"|",[160,1477,1478,1481,1484,1487,1489,1492,1495,1498],{},[179,1479,1480],{},"29",[179,1482,1483],{},"GS",[179,1485,1486],{},"61",[179,1488,609],{},[179,1490,1491],{},"93",[179,1493,1494],{},"]",[179,1496,1497],{},"125",[179,1499,1500],{},"}",[160,1502,1503,1506,1509,1512,1515,1518,1521,1524],{},[179,1504,1505],{},"30",[179,1507,1508],{},"RS",[179,1510,1511],{},"62",[179,1513,1514],{},">",[179,1516,1517],{},"94",[179,1519,1520],{},"^",[179,1522,1523],{},"126",[179,1525,1526],{},"`",[160,1528,1529,1532,1535,1538,1541,1544,1547,1550],{},[179,1530,1531],{},"31",[179,1533,1534],{},"US",[179,1536,1537],{},"63",[179,1539,1540],{},"?",[179,1542,1543],{},"95",[179,1545,1546],{},"_",[179,1548,1549],{},"127",[179,1551,1552],{},"DEL",[15,1554,1555,1556,1559],{},"ASCII 码大致由以下",[707,1557,1558],{},"两部分组","成：",[251,1561,1562,1569],{},[25,1563,1564,1565,1568],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[707,1566,1567],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[25,1570,1571,1572,1575],{},"ASCII 打印字符：数字 ",[707,1573,1574],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[531,1577,1579],{"id":1578},"_134转义字符","1.3.4转义字符",[63,1581,1583],{"className":552,"code":1582,"language":554,"meta":68,"style":68},"\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",[34,1584,1585,1590,1606,1621,1627,1641,1647],{"__ignoreMap":68},[72,1586,1587],{"class":74,"line":75},[72,1588,1589],{"class":621},"\u002F\u002F换行符\n",[72,1591,1592,1595,1598,1601,1603],{"class":74,"line":370},[72,1593,1594],{"class":82},"cout ",[72,1596,1597],{"class":78},"\u003C\u003C",[72,1599,1600],{"class":366},"\"hello world\u002Fn\"",[72,1602,618],{"class":82},[72,1604,1605],{"class":621}," \u002F\u002F就等同于如下：\n",[72,1607,1609,1611,1613,1616,1618],{"class":74,"line":1608},3,[72,1610,1594],{"class":82},[72,1612,1597],{"class":78},[72,1614,1615],{"class":366},"\"hello world\"",[72,1617,1597],{"class":78},[72,1619,1620],{"class":82},"endl;\n",[72,1622,1624],{"class":74,"line":1623},4,[72,1625,1626],{"class":621},"\u002F\u002F反斜杠\n",[72,1628,1630,1632,1634,1637,1639],{"class":74,"line":1629},5,[72,1631,1594],{"class":82},[72,1633,1597],{"class":78},[72,1635,1636],{"class":366},"\"\u002F\u002F\"",[72,1638,1597],{"class":78},[72,1640,1620],{"class":82},[72,1642,1644],{"class":74,"line":1643},6,[72,1645,1646],{"class":621},"\u002F\u002F水平制表符\n",[72,1648,1650,1652,1654,1657,1660,1663,1665,1668],{"class":74,"line":1649},7,[72,1651,1594],{"class":82},[72,1653,1597],{"class":78},[72,1655,1656],{"class":366},"\"aaaa",[72,1658,1659],{"class":362},"\\t",[72,1661,1662],{"class":366},"helloworld\"",[72,1664,1597],{"class":78},[72,1666,1667],{"class":82},"endl;",[72,1669,1670],{"class":621}," \u002F\u002F输出窗口时有对齐效果\n",[531,1672,1674],{"id":1673},"_135字符串型","1.3.5字符串型",[15,1676,1677,1678,1680],{},"char 变量名",[72,1679],{},"=\"字符串值\"",[63,1682,1684],{"className":552,"code":1683,"language":554,"meta":68,"style":68},"\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",[34,1685,1686,1691,1696,1701,1706,1720,1733,1738,1744,1756],{"__ignoreMap":68},[72,1687,1688],{"class":74,"line":75},[72,1689,1690],{"class":621},"\u002F\u002Fc风格字符串\n",[72,1692,1693],{"class":74,"line":370},[72,1694,1695],{"class":621},"\u002F\u002F注意事项：\n",[72,1697,1698],{"class":74,"line":1608},[72,1699,1700],{"class":621},"\u002F\u002F1.char字符串名[]\n",[72,1702,1703],{"class":74,"line":1623},[72,1704,1705],{"class":621},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[72,1707,1708,1710,1713,1715,1717],{"class":74,"line":1629},[72,1709,659],{"class":78},[72,1711,1712],{"class":82}," str[]",[72,1714,609],{"class":78},[72,1716,1615],{"class":366},[72,1718,1719],{"class":82},";\n",[72,1721,1722,1724,1726,1729,1731],{"class":74,"line":1643},[72,1723,1594],{"class":82},[72,1725,1597],{"class":78},[72,1727,1728],{"class":82},"str",[72,1730,1597],{"class":78},[72,1732,1620],{"class":82},[72,1734,1735],{"class":74,"line":1649},[72,1736,1737],{"class":621},"\u002F\u002Fc++风格字符串\n",[72,1739,1741],{"class":74,"line":1740},8,[72,1742,1743],{"class":621},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[72,1745,1747,1750,1752,1754],{"class":74,"line":1746},9,[72,1748,1749],{"class":82},"string str2",[72,1751,609],{"class":78},[72,1753,1615],{"class":366},[72,1755,1719],{"class":82},[72,1757,1759,1761,1763,1766,1768],{"class":74,"line":1758},10,[72,1760,1594],{"class":82},[72,1762,1597],{"class":78},[72,1764,1765],{"class":82},"str2",[72,1767,1597],{"class":78},[72,1769,1620],{"class":82},[531,1771,1773],{"id":1772},"_136布尔类型bool","1.3.6布尔类型bool",[63,1775,1777],{"className":552,"code":1776,"language":554,"meta":68,"style":68},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[34,1778,1779,1794],{"__ignoreMap":68},[72,1780,1781,1784,1787,1789,1792],{"class":74,"line":75},[72,1782,1783],{"class":78},"bool",[72,1785,1786],{"class":82}," flag",[72,1788,609],{"class":78},[72,1790,1791],{"class":362},"true",[72,1793,1719],{"class":82},[72,1795,1796,1799,1802,1805,1807,1809],{"class":74,"line":370},[72,1797,1798],{"class":82},"cout",[72,1800,1801],{"class":78},"\u003C\u003Csizeof",[72,1803,1804],{"class":82},"(flag)",[72,1806,1597],{"class":78},[72,1808,1667],{"class":82},[72,1810,1811],{"class":621}," \u002F\u002F查看布尔占内存空间\n",[85,1813,1815],{"id":1814},"_14键盘输入cin","1.4键盘输入cin",[63,1817,1819],{"className":552,"code":1818,"language":554,"meta":68,"style":68},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[34,1820,1821,1834,1851,1862],{"__ignoreMap":68},[72,1822,1823,1825,1828,1830,1832],{"class":74,"line":75},[72,1824,567],{"class":78},[72,1826,1827],{"class":82}," a",[72,1829,609],{"class":78},[72,1831,747],{"class":362},[72,1833,1719],{"class":82},[72,1835,1836,1838,1840,1843,1845,1847,1849],{"class":74,"line":370},[72,1837,1798],{"class":82},[72,1839,1597],{"class":78},[72,1841,1842],{"class":366},"\"请给整型变量a赋值\"",[72,1844,1597],{"class":78},[72,1846,257],{"class":82},[72,1848,1597],{"class":78},[72,1850,1620],{"class":82},[72,1852,1853,1856,1859],{"class":74,"line":1608},[72,1854,1855],{"class":82},"cin ",[72,1857,1858],{"class":78},">>",[72,1860,1861],{"class":82}," a;\n",[72,1863,1864,1866,1868,1871,1874,1876,1878],{"class":74,"line":1623},[72,1865,1594],{"class":82},[72,1867,1597],{"class":78},[72,1869,1870],{"class":366}," \"整型变量a=\"",[72,1872,1873],{"class":78}," \u003C\u003C",[72,1875,257],{"class":82},[72,1877,1597],{"class":78},[72,1879,1620],{"class":82},[85,1881,1883],{"id":1882},"_15运算符","1.5运算符",[531,1885,1887],{"id":1886},"_151算术运算符","1.5.1算术运算符",[15,1889,1890,1894],{},[1891,1892],"img",{"alt":68,"src":1893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[22,1896,1897,1900,1903],{},[25,1898,1899],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[25,1901,1902],{},"两个小数不可以做取模运算",[25,1904,1905],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[531,1907,1909],{"id":1908},"_152赋值运算符","1.5.2赋值运算符",[15,1911,1912],{},[1891,1913],{"alt":68,"src":1914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[531,1916,1918],{"id":1917},"_153比较运算符","1.5.3比较运算符",[15,1920,1921],{},[1891,1922],{"alt":68,"src":1923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[531,1925,1927],{"id":1926},"_154逻辑运算符","1.5.4逻辑运算符",[15,1929,1930],{},[1891,1931],{"alt":68,"src":1932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[85,1934,1936],{"id":1935},"_16程序流程结构","1.6程序流程结构",[531,1938,1940],{"id":1939},"_161选择结构","1.6.1选择结构",[22,1942,1943],{},[25,1944,1945],{},"if语句\n单行、多行、多条件if语句",[63,1947,1949],{"className":552,"code":1948,"language":554,"meta":68,"style":68},"\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",[34,1950,1951,1956,1971,1976,1990,1995,2000,2009,2022,2026,2039,2044,2050,2055,2069,2074,2080,2101,2106,2120,2125,2154,2159,2176,2181,2186,2191,2205,2210],{"__ignoreMap":68},[72,1952,1953],{"class":74,"line":75},[72,1954,1955],{"class":621},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[72,1957,1958,1961,1964,1966,1969],{"class":74,"line":370},[72,1959,1960],{"class":78},"if",[72,1962,1963],{"class":82},"(score",[72,1965,1514],{"class":78},[72,1967,1968],{"class":362},"600",[72,1970,570],{"class":82},[72,1972,1973],{"class":74,"line":1608},[72,1974,1975],{"class":82},"{\n",[72,1977,1978,1981,1983,1986,1988],{"class":74,"line":1623},[72,1979,1980],{"class":82},"    cout",[72,1982,1597],{"class":78},[72,1984,1985],{"class":366},"'这是单行if语句'",[72,1987,1597],{"class":78},[72,1989,1620],{"class":82},[72,1991,1992],{"class":74,"line":1629},[72,1993,1994],{"class":82},"}\n",[72,1996,1997],{"class":74,"line":1643},[72,1998,1999],{"class":621},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[72,2001,2002,2004,2006],{"class":74,"line":1649},[72,2003,1855],{"class":82},[72,2005,1858],{"class":78},[72,2007,2008],{"class":82}," score\n",[72,2010,2011,2013,2015,2018,2020],{"class":74,"line":1740},[72,2012,1960],{"class":78},[72,2014,1963],{"class":82},[72,2016,2017],{"class":78},"\u003C=",[72,2019,1968],{"class":362},[72,2021,570],{"class":82},[72,2023,2024],{"class":74,"line":1746},[72,2025,1975],{"class":82},[72,2027,2028,2030,2032,2035,2037],{"class":74,"line":1758},[72,2029,1980],{"class":82},[72,2031,1858],{"class":78},[72,2033,2034],{"class":366},"\"小于等于600\"",[72,2036,1597],{"class":78},[72,2038,1620],{"class":82},[72,2040,2042],{"class":74,"line":2041},11,[72,2043,1994],{"class":82},[72,2045,2047],{"class":74,"line":2046},12,[72,2048,2049],{"class":78},"else\n",[72,2051,2053],{"class":74,"line":2052},13,[72,2054,1975],{"class":82},[72,2056,2058,2060,2062,2065,2067],{"class":74,"line":2057},14,[72,2059,1980],{"class":82},[72,2061,1858],{"class":78},[72,2063,2064],{"class":366},"\"大于600\"",[72,2066,1858],{"class":78},[72,2068,1620],{"class":82},[72,2070,2072],{"class":74,"line":2071},15,[72,2073,1994],{"class":82},[72,2075,2077],{"class":74,"line":2076},16,[72,2078,2079],{"class":621},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[72,2081,2083,2085,2088,2090,2092,2095,2097,2099],{"class":74,"line":2082},17,[72,2084,1960],{"class":78},[72,2086,2087],{"class":82}," (",[72,2089,747],{"class":362},[72,2091,1464],{"class":78},[72,2093,2094],{"class":82},"num",[72,2096,1464],{"class":78},[72,2098,865],{"class":362},[72,2100,570],{"class":82},[72,2102,2104],{"class":74,"line":2103},18,[72,2105,1975],{"class":82},[72,2107,2109,2111,2113,2116,2118],{"class":74,"line":2108},19,[72,2110,1980],{"class":82},[72,2112,1597],{"class":78},[72,2114,2115],{"class":366},"\"小于100\"",[72,2117,1597],{"class":78},[72,2119,1620],{"class":82},[72,2121,2123],{"class":74,"line":2122},20,[72,2124,1994],{"class":82},[72,2126,2128,2131,2134,2137,2140,2142,2145,2147,2149,2152],{"class":74,"line":2127},21,[72,2129,2130],{"class":78},"else",[72,2132,2133],{"class":78}," if",[72,2135,2136],{"class":82}," (nmu",[72,2138,2139],{"class":78},">=",[72,2141,865],{"class":362},[72,2143,2144],{"class":78},"&&",[72,2146,2094],{"class":82},[72,2148,1464],{"class":78},[72,2150,2151],{"class":362},"200",[72,2153,570],{"class":82},[72,2155,2157],{"class":74,"line":2156},22,[72,2158,1975],{"class":82},[72,2160,2162,2164,2166,2169,2171,2173],{"class":74,"line":2161},23,[72,2163,1980],{"class":82},[72,2165,1597],{"class":78},[72,2167,2168],{"class":366},"\"不小于100且小于200\"",[72,2170,1597],{"class":78},[72,2172,1667],{"class":82},[72,2174,2175],{"class":621}," \u002F\u002F可以无限else if,python中是elif：\n",[72,2177,2179],{"class":74,"line":2178},24,[72,2180,1994],{"class":82},[72,2182,2184],{"class":74,"line":2183},25,[72,2185,2049],{"class":78},[72,2187,2189],{"class":74,"line":2188},26,[72,2190,1975],{"class":82},[72,2192,2194,2196,2198,2201,2203],{"class":74,"line":2193},27,[72,2195,1980],{"class":82},[72,2197,1597],{"class":78},[72,2199,2200],{"class":366},"\"不小于200\"",[72,2202,1597],{"class":78},[72,2204,1620],{"class":82},[72,2206,2208],{"class":74,"line":2207},28,[72,2209,1994],{"class":82},[72,2211,2213],{"class":74,"line":2212},29,[72,2214,2215],{"class":621},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[22,2217,2218],{"start":370},[25,2219,2220],{},"三目运算符",[63,2222,2224],{"className":552,"code":2223,"language":554,"meta":68,"style":68},"\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",[34,2225,2226,2231,2236,2262,2284,2301,2306,2329,2344],{"__ignoreMap":68},[72,2227,2228],{"class":74,"line":75},[72,2229,2230],{"class":621},"\u002F\u002F创建三个变量a,b,c\n",[72,2232,2233],{"class":74,"line":370},[72,2234,2235],{"class":621},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[72,2237,2238,2240,2242,2244,2246,2249,2251,2253,2256,2258,2260],{"class":74,"line":1608},[72,2239,567],{"class":78},[72,2241,1827],{"class":82},[72,2243,609],{"class":78},[72,2245,1254],{"class":362},[72,2247,2248],{"class":82},",b",[72,2250,609],{"class":78},[72,2252,1000],{"class":362},[72,2254,2255],{"class":82},",c",[72,2257,609],{"class":78},[72,2259,747],{"class":362},[72,2261,1719],{"class":82},[72,2263,2264,2266,2268,2271,2273,2275,2277,2279,2281],{"class":74,"line":1623},[72,2265,842],{"class":82},[72,2267,609],{"class":78},[72,2269,2270],{"class":82},"(a",[72,2272,1514],{"class":78},[72,2274,817],{"class":82},[72,2276,1540],{"class":78},[72,2278,257],{"class":82},[72,2280,1413],{"class":78},[72,2282,2283],{"class":82},"b)\n",[72,2285,2286,2288,2290,2293,2295,2297,2299],{"class":74,"line":1629},[72,2287,1798],{"class":82},[72,2289,1597],{"class":78},[72,2291,2292],{"class":366},"\"c=\"",[72,2294,1597],{"class":78},[72,2296,842],{"class":82},[72,2298,1597],{"class":78},[72,2300,1620],{"class":82},[72,2302,2303],{"class":74,"line":1643},[72,2304,2305],{"class":621},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[72,2307,2308,2310,2312,2314,2316,2318,2320,2323,2325,2327],{"class":74,"line":1649},[72,2309,2270],{"class":82},[72,2311,1514],{"class":78},[72,2313,817],{"class":82},[72,2315,1540],{"class":78},[72,2317,257],{"class":82},[72,2319,1413],{"class":78},[72,2321,2322],{"class":82},"b)",[72,2324,609],{"class":78},[72,2326,865],{"class":362},[72,2328,1719],{"class":82},[72,2330,2331,2333,2335,2337,2339,2341],{"class":74,"line":1740},[72,2332,1798],{"class":82},[72,2334,1597],{"class":78},[72,2336,257],{"class":82},[72,2338,1597],{"class":78},[72,2340,1667],{"class":82},[72,2342,2343],{"class":621}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[72,2345,2346,2348,2350,2352,2354,2356],{"class":74,"line":1746},[72,2347,1798],{"class":82},[72,2349,1597],{"class":78},[72,2351,817],{"class":82},[72,2353,1597],{"class":78},[72,2355,1667],{"class":82},[72,2357,2358],{"class":621}," \u002F\u002F10   a>b,b还是原值\n",[22,2360,2361],{"start":1608},[25,2362,2363],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[63,2365,2367],{"className":552,"code":2366,"language":554,"meta":68,"style":68},"\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",[34,2368,2369,2374,2382,2395,2405,2409,2423,2436,2446,2454,2459,2484,2505,2527,2548,2570,2591,2611,2616],{"__ignoreMap":68},[72,2370,2371],{"class":74,"line":75},[72,2372,2373],{"class":621},"\u002F\u002F案例-电影打分\n",[72,2375,2376,2379],{"class":74,"line":370},[72,2377,2378],{"class":78},"#include",[72,2380,2381],{"class":366},"\u003Ciostream>\n",[72,2383,2384,2387,2390,2393],{"class":74,"line":1608},[72,2385,2386],{"class":78},"using",[72,2388,2389],{"class":78}," namespace",[72,2391,2392],{"class":358}," std",[72,2394,1719],{"class":82},[72,2396,2397,2399,2402],{"class":74,"line":1623},[72,2398,567],{"class":78},[72,2400,2401],{"class":358}," main",[72,2403,2404],{"class":82},"()\n",[72,2406,2407],{"class":74,"line":1629},[72,2408,1975],{"class":82},[72,2410,2411,2414,2417,2419,2421],{"class":74,"line":1643},[72,2412,2413],{"class":78},"    int",[72,2415,2416],{"class":82}," score",[72,2418,609],{"class":78},[72,2420,747],{"class":362},[72,2422,1719],{"class":82},[72,2424,2425,2427,2429,2432,2434],{"class":74,"line":1649},[72,2426,1980],{"class":82},[72,2428,1597],{"class":78},[72,2430,2431],{"class":366},"\"电影打分：\"",[72,2433,1597],{"class":78},[72,2435,1620],{"class":82},[72,2437,2438,2441,2443],{"class":74,"line":1740},[72,2439,2440],{"class":82},"    cin",[72,2442,1858],{"class":78},[72,2444,2445],{"class":82},"score;\n",[72,2447,2448,2451],{"class":74,"line":1746},[72,2449,2450],{"class":78},"    switch",[72,2452,2453],{"class":82},"(score)\n",[72,2455,2456],{"class":74,"line":1758},[72,2457,2458],{"class":82},"    {\n",[72,2460,2461,2464,2467,2470,2472,2475,2477,2479,2482],{"class":74,"line":2041},[72,2462,2463],{"class":78},"        case",[72,2465,2466],{"class":362}," 10",[72,2468,2469],{"class":82},":cout",[72,2471,1597],{"class":78},[72,2473,2474],{"class":366},"\"经典\"",[72,2476,1597],{"class":78},[72,2478,1667],{"class":82},[72,2480,2481],{"class":78},"break",[72,2483,1719],{"class":82},[72,2485,2486,2488,2491,2493,2495,2497,2499,2501,2503],{"class":74,"line":2046},[72,2487,2463],{"class":78},[72,2489,2490],{"class":362}," 9",[72,2492,2469],{"class":82},[72,2494,1597],{"class":78},[72,2496,2474],{"class":366},[72,2498,1597],{"class":78},[72,2500,1667],{"class":82},[72,2502,2481],{"class":78},[72,2504,1719],{"class":82},[72,2506,2507,2509,2512,2514,2516,2519,2521,2523,2525],{"class":74,"line":2052},[72,2508,2463],{"class":78},[72,2510,2511],{"class":362}," 8",[72,2513,2469],{"class":82},[72,2515,1597],{"class":78},[72,2517,2518],{"class":366},"\"非常好\"",[72,2520,1597],{"class":78},[72,2522,1667],{"class":82},[72,2524,2481],{"class":78},[72,2526,1719],{"class":82},[72,2528,2529,2531,2534,2536,2538,2540,2542,2544,2546],{"class":74,"line":2057},[72,2530,2463],{"class":78},[72,2532,2533],{"class":362}," 7",[72,2535,2469],{"class":82},[72,2537,1597],{"class":78},[72,2539,2518],{"class":366},[72,2541,1597],{"class":78},[72,2543,1667],{"class":82},[72,2545,2481],{"class":78},[72,2547,1719],{"class":82},[72,2549,2550,2552,2555,2557,2559,2562,2564,2566,2568],{"class":74,"line":2071},[72,2551,2463],{"class":78},[72,2553,2554],{"class":362}," 6",[72,2556,2469],{"class":82},[72,2558,1597],{"class":78},[72,2560,2561],{"class":366},"\"一般\"",[72,2563,1597],{"class":78},[72,2565,1667],{"class":82},[72,2567,2481],{"class":78},[72,2569,1719],{"class":82},[72,2571,2572,2574,2577,2579,2581,2583,2585,2587,2589],{"class":74,"line":2076},[72,2573,2463],{"class":78},[72,2575,2576],{"class":362}," 5",[72,2578,2469],{"class":82},[72,2580,1597],{"class":78},[72,2582,2561],{"class":366},[72,2584,1597],{"class":78},[72,2586,1667],{"class":82},[72,2588,2481],{"class":78},[72,2590,1719],{"class":82},[72,2592,2593,2596,2598,2600,2603,2605,2607,2609],{"class":74,"line":2082},[72,2594,2595],{"class":78},"        default",[72,2597,2469],{"class":82},[72,2599,1597],{"class":78},[72,2601,2602],{"class":366},"\"烂片\"",[72,2604,1597],{"class":78},[72,2606,1667],{"class":82},[72,2608,2481],{"class":78},[72,2610,1719],{"class":82},[72,2612,2613],{"class":74,"line":2103},[72,2614,2615],{"class":82},"    }\n",[72,2617,2618],{"class":74,"line":2108},[72,2619,1994],{"class":82},[15,2621,2622],{},"if和switch区别：",[251,2624,2625,2628],{},[25,2626,2627],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[25,2629,2630],{},"switch优点：结构清晰，执行效率高",[531,2632,2634],{"id":2633},"_162循环结构","1.6.2循环结构",[22,2636,2637],{},[25,2638,2639],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[63,2641,2643],{"className":552,"code":2642,"language":554,"meta":68,"style":68},"\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",[34,2644,2645,2650,2658,2662,2675,2689,2693,2713,2723,2727,2739],{"__ignoreMap":68},[72,2646,2647],{"class":74,"line":75},[72,2648,2649],{"class":621},"\u002F\u002F打印0-9数字\n",[72,2651,2652,2654,2656],{"class":74,"line":370},[72,2653,567],{"class":78},[72,2655,2401],{"class":358},[72,2657,2404],{"class":82},[72,2659,2660],{"class":74,"line":1608},[72,2661,1975],{"class":82},[72,2663,2664,2666,2669,2671,2673],{"class":74,"line":1623},[72,2665,2413],{"class":78},[72,2667,2668],{"class":82}," num",[72,2670,609],{"class":78},[72,2672,747],{"class":362},[72,2674,1719],{"class":82},[72,2676,2677,2680,2683,2685,2687],{"class":74,"line":1629},[72,2678,2679],{"class":78},"    while",[72,2681,2682],{"class":82},"(num",[72,2684,1464],{"class":78},[72,2686,1000],{"class":362},[72,2688,570],{"class":82},[72,2690,2691],{"class":74,"line":1643},[72,2692,2458],{"class":82},[72,2694,2695,2698,2701,2703,2705,2707,2710],{"class":74,"line":1649},[72,2696,2697],{"class":358},"       std",[72,2699,2700],{"class":82},"::cout",[72,2702,1597],{"class":78},[72,2704,2094],{"class":82},[72,2706,1597],{"class":78},[72,2708,2709],{"class":358},"std",[72,2711,2712],{"class":82},"::endl;\n",[72,2714,2715,2718,2721],{"class":74,"line":1740},[72,2716,2717],{"class":82},"        num",[72,2719,2720],{"class":78},"++",[72,2722,1719],{"class":82},[72,2724,2725],{"class":74,"line":1746},[72,2726,2615],{"class":82},[72,2728,2729,2732,2734,2737],{"class":74,"line":1758},[72,2730,2731],{"class":358},"    system",[72,2733,564],{"class":82},[72,2735,2736],{"class":366},"\"pause\"",[72,2738,570],{"class":82},[72,2740,2741],{"class":74,"line":2041},[72,2742,1994],{"class":82},[15,2744,2745],{},"注意：写好循环条件，避免死循环情况",[63,2747,2749],{"className":552,"code":2748,"language":554,"meta":68,"style":68},"\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",[34,2750,2751,2756,2763,2770,2780,2788,2792,2797,2824,2829,2834,2842,2869,2874,2879,2892,2902,2906,2916,2921,2934,2939,2953,2958,2973,2977,2990,2994,2999,3003,3017,3025,3030,3036,3042,3047],{"__ignoreMap":68},[72,2752,2753],{"class":74,"line":75},[72,2754,2755],{"class":621},"\u002F\u002F循环结构-猜数字\n",[72,2757,2758,2760],{"class":74,"line":370},[72,2759,2378],{"class":78},[72,2761,2762],{"class":366}," \u003Ciostream>\n",[72,2764,2765,2767],{"class":74,"line":1608},[72,2766,2378],{"class":78},[72,2768,2769],{"class":366}," \u003Cctime>\n",[72,2771,2772,2774,2776,2778],{"class":74,"line":1623},[72,2773,2386],{"class":78},[72,2775,2389],{"class":78},[72,2777,2392],{"class":358},[72,2779,1719],{"class":82},[72,2781,2782,2784,2786],{"class":74,"line":1629},[72,2783,567],{"class":78},[72,2785,2401],{"class":358},[72,2787,2404],{"class":82},[72,2789,2790],{"class":74,"line":1643},[72,2791,1975],{"class":82},[72,2793,2794],{"class":74,"line":1649},[72,2795,2796],{"class":621},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[72,2798,2799,2802,2805,2808,2811,2813,2816,2818,2821],{"class":74,"line":1740},[72,2800,2801],{"class":358},"    srand",[72,2803,2804],{"class":82},"((",[72,2806,2807],{"class":78},"unsigned",[72,2809,2810],{"class":78}," int",[72,2812,983],{"class":82},[72,2814,2815],{"class":358},"time",[72,2817,564],{"class":82},[72,2819,2820],{"class":362},"NULL",[72,2822,2823],{"class":82},"));\n",[72,2825,2826],{"class":74,"line":1746},[72,2827,2828],{"emptyLinePlaceholder":490},"\n",[72,2830,2831],{"class":74,"line":1758},[72,2832,2833],{"class":621},"    \u002F\u002F1.系统生成随机数\n",[72,2835,2836,2839],{"class":74,"line":2041},[72,2837,2838],{"class":621},"    \u002F\u002Frand()%100",[72,2840,2841],{"class":621}," \u002F\u002F生成0-99的随机数\n",[72,2843,2844,2846,2848,2850,2853,2856,2858,2860,2862,2864,2866],{"class":74,"line":2046},[72,2845,2413],{"class":78},[72,2847,2668],{"class":82},[72,2849,609],{"class":78},[72,2851,2852],{"class":358},"rand",[72,2854,2855],{"class":82},"()",[72,2857,882],{"class":78},[72,2859,865],{"class":362},[72,2861,1035],{"class":78},[72,2863,772],{"class":362},[72,2865,618],{"class":82},[72,2867,2868],{"class":621}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[72,2870,2871],{"class":74,"line":2052},[72,2872,2873],{"class":621},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[72,2875,2876],{"class":74,"line":2057},[72,2877,2878],{"class":621},"    \u002F\u002F2.玩家猜测\n",[72,2880,2881,2883,2886,2888,2890],{"class":74,"line":2071},[72,2882,2413],{"class":78},[72,2884,2885],{"class":82}," val",[72,2887,609],{"class":78},[72,2889,747],{"class":362},[72,2891,1719],{"class":82},[72,2893,2894,2896,2898,2900],{"class":74,"line":2076},[72,2895,2679],{"class":78},[72,2897,2087],{"class":82},[72,2899,772],{"class":362},[72,2901,570],{"class":82},[72,2903,2904],{"class":74,"line":2082},[72,2905,2458],{"class":82},[72,2907,2908,2911,2913],{"class":74,"line":2103},[72,2909,2910],{"class":82},"        cin",[72,2912,1858],{"class":78},[72,2914,2915],{"class":82},"val;\n",[72,2917,2918],{"class":74,"line":2108},[72,2919,2920],{"class":621},"        \u002F\u002F3.判断玩家猜测\n",[72,2922,2923,2926,2929,2931],{"class":74,"line":2122},[72,2924,2925],{"class":78},"        if",[72,2927,2928],{"class":82},"(val",[72,2930,1464],{"class":78},[72,2932,2933],{"class":82},"num) \n",[72,2935,2936],{"class":74,"line":2127},[72,2937,2938],{"class":82},"        {\n",[72,2940,2941,2944,2946,2949,2951],{"class":74,"line":2156},[72,2942,2943],{"class":82},"            cout",[72,2945,1597],{"class":78},[72,2947,2948],{"class":366},"\"猜小了！\"",[72,2950,1597],{"class":78},[72,2952,1620],{"class":82},[72,2954,2955],{"class":74,"line":2161},[72,2956,2957],{"class":82},"        }\n",[72,2959,2960,2963,2965,2968,2970],{"class":74,"line":2178},[72,2961,2962],{"class":78},"        else",[72,2964,2133],{"class":78},[72,2966,2967],{"class":82}," (val",[72,2969,1514],{"class":78},[72,2971,2972],{"class":82},"num)\n",[72,2974,2975],{"class":74,"line":2183},[72,2976,2938],{"class":82},[72,2978,2979,2981,2983,2986,2988],{"class":74,"line":2188},[72,2980,2943],{"class":82},[72,2982,1597],{"class":78},[72,2984,2985],{"class":366},"\"猜大了！\"",[72,2987,1597],{"class":78},[72,2989,1620],{"class":82},[72,2991,2992],{"class":74,"line":2193},[72,2993,2957],{"class":82},[72,2995,2996],{"class":74,"line":2207},[72,2997,2998],{"class":78},"        else\n",[72,3000,3001],{"class":74,"line":2212},[72,3002,2938],{"class":82},[72,3004,3006,3008,3010,3013,3015],{"class":74,"line":3005},30,[72,3007,2943],{"class":82},[72,3009,1597],{"class":78},[72,3011,3012],{"class":366},"\"猜对了！\"",[72,3014,1597],{"class":78},[72,3016,1620],{"class":82},[72,3018,3020,3023],{"class":74,"line":3019},31,[72,3021,3022],{"class":78},"            break",[72,3024,1719],{"class":82},[72,3026,3028],{"class":74,"line":3027},32,[72,3029,2957],{"class":82},[72,3031,3033],{"class":74,"line":3032},33,[72,3034,3035],{"class":621},"        \u002F\u002F猜对 退出游戏\n",[72,3037,3039],{"class":74,"line":3038},34,[72,3040,3041],{"class":621},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[72,3043,3045],{"class":74,"line":3044},35,[72,3046,2615],{"class":82},[72,3048,3050],{"class":74,"line":3049},36,[72,3051,1994],{"class":82},[22,3053,3054],{"start":370},[25,3055,3056,3057,3060],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[707,3058,3059],{},"do...while会先执行一次循环语句","，在判断循环语句",[63,3062,3064],{"className":552,"code":3063,"language":554,"meta":68,"style":68},"\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",[34,3065,3066,3071,3079,3083,3095,3103,3107,3124,3131,3135,3148,3158],{"__ignoreMap":68},[72,3067,3068],{"class":74,"line":75},[72,3069,3070],{"class":621},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[72,3072,3073,3075,3077],{"class":74,"line":370},[72,3074,567],{"class":78},[72,3076,2401],{"class":358},[72,3078,2404],{"class":82},[72,3080,3081],{"class":74,"line":1608},[72,3082,1975],{"class":82},[72,3084,3085,3087,3089,3091,3093],{"class":74,"line":1623},[72,3086,2413],{"class":78},[72,3088,2668],{"class":82},[72,3090,609],{"class":78},[72,3092,747],{"class":362},[72,3094,1719],{"class":82},[72,3096,3097,3100],{"class":74,"line":1629},[72,3098,3099],{"class":78},"    do",[72,3101,3102],{"class":82}," \n",[72,3104,3105],{"class":74,"line":1643},[72,3106,2458],{"class":82},[72,3108,3109,3112,3114,3116,3118,3120,3122],{"class":74,"line":1649},[72,3110,3111],{"class":358},"        std",[72,3113,2700],{"class":82},[72,3115,1597],{"class":78},[72,3117,2094],{"class":82},[72,3119,1597],{"class":78},[72,3121,2709],{"class":358},[72,3123,2712],{"class":82},[72,3125,3126,3128],{"class":74,"line":1740},[72,3127,2717],{"class":82},[72,3129,3130],{"class":78},"++\n",[72,3132,3133],{"class":74,"line":1746},[72,3134,2615],{"class":82},[72,3136,3137,3139,3141,3143,3145],{"class":74,"line":1758},[72,3138,2679],{"class":78},[72,3140,2682],{"class":82},[72,3142,1464],{"class":78},[72,3144,1000],{"class":362},[72,3146,3147],{"class":82},");\n",[72,3149,3150,3152,3154,3156],{"class":74,"line":2041},[72,3151,2731],{"class":358},[72,3153,564],{"class":82},[72,3155,2736],{"class":366},[72,3157,3147],{"class":82},[72,3159,3160],{"class":74,"line":2046},[72,3161,1994],{"class":82},[15,3163,3164],{},"案例-水仙花数",[15,3166,3167],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[15,3169,3170],{},"例如：1^3+5^3+3^3=153",[15,3172,3173],{},"请用do...while语句，求出所有3位数的水仙花数",[63,3175,3177],{"className":552,"code":3176,"language":554,"meta":68,"style":68},"#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",[34,3178,3179,3185,3195,3203,3207,3212,3224,3230,3234,3239,3255,3271,3287,3302,3321,3336,3384,3388,3400,3404,3412,3416,3430],{"__ignoreMap":68},[72,3180,3181,3183],{"class":74,"line":75},[72,3182,2378],{"class":78},[72,3184,2762],{"class":366},[72,3186,3187,3189,3191,3193],{"class":74,"line":370},[72,3188,2386],{"class":78},[72,3190,2389],{"class":78},[72,3192,2392],{"class":358},[72,3194,1719],{"class":82},[72,3196,3197,3199,3201],{"class":74,"line":1608},[72,3198,567],{"class":78},[72,3200,2401],{"class":358},[72,3202,2404],{"class":82},[72,3204,3205],{"class":74,"line":1623},[72,3206,1975],{"class":82},[72,3208,3209],{"class":74,"line":1629},[72,3210,3211],{"class":621},"    \u002F\u002F1.先打印所有三位数字\n",[72,3213,3214,3216,3218,3220,3222],{"class":74,"line":1643},[72,3215,2413],{"class":78},[72,3217,2668],{"class":82},[72,3219,609],{"class":78},[72,3221,865],{"class":362},[72,3223,1719],{"class":82},[72,3225,3226,3228],{"class":74,"line":1649},[72,3227,3099],{"class":78},[72,3229,3102],{"class":82},[72,3231,3232],{"class":74,"line":1740},[72,3233,2458],{"class":82},[72,3235,3236],{"class":74,"line":1746},[72,3237,3238],{"class":621},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[72,3240,3241,3244,3246,3248,3250,3252],{"class":74,"line":1758},[72,3242,3243],{"class":78},"        int",[72,3245,1827],{"class":82},[72,3247,609],{"class":78},[72,3249,747],{"class":362},[72,3251,618],{"class":82},[72,3253,3254],{"class":621}," \u002F\u002F个位\n",[72,3256,3257,3259,3262,3264,3266,3268],{"class":74,"line":2041},[72,3258,3243],{"class":78},[72,3260,3261],{"class":82}," b",[72,3263,609],{"class":78},[72,3265,747],{"class":362},[72,3267,618],{"class":82},[72,3269,3270],{"class":621}," \u002F\u002F十位\n",[72,3272,3273,3275,3278,3280,3282,3284],{"class":74,"line":2046},[72,3274,3243],{"class":78},[72,3276,3277],{"class":82}," c",[72,3279,609],{"class":78},[72,3281,747],{"class":362},[72,3283,618],{"class":82},[72,3285,3286],{"class":621}," \u002F\u002F百位\n",[72,3288,3289,3292,3294,3296,3298,3300],{"class":74,"line":2052},[72,3290,3291],{"class":82},"        a",[72,3293,609],{"class":78},[72,3295,2094],{"class":82},[72,3297,882],{"class":78},[72,3299,1000],{"class":362},[72,3301,1719],{"class":82},[72,3303,3304,3307,3309,3311,3313,3315,3317,3319],{"class":74,"line":2057},[72,3305,3306],{"class":82},"        b",[72,3308,609],{"class":78},[72,3310,2094],{"class":82},[72,3312,1138],{"class":78},[72,3314,1000],{"class":362},[72,3316,882],{"class":78},[72,3318,1000],{"class":362},[72,3320,1719],{"class":82},[72,3322,3323,3326,3328,3330,3332,3334],{"class":74,"line":2071},[72,3324,3325],{"class":82},"        c",[72,3327,609],{"class":78},[72,3329,2094],{"class":82},[72,3331,1138],{"class":78},[72,3333,865],{"class":362},[72,3335,1719],{"class":82},[72,3337,3338,3340,3342,3344,3346,3348,3350,3352,3354,3356,3358,3360,3362,3364,3366,3368,3370,3372,3375,3378,3381],{"class":74,"line":2076},[72,3339,2925],{"class":78},[72,3341,2270],{"class":82},[72,3343,1009],{"class":78},[72,3345,257],{"class":82},[72,3347,1009],{"class":78},[72,3349,257],{"class":82},[72,3351,1035],{"class":78},[72,3353,817],{"class":82},[72,3355,1009],{"class":78},[72,3357,817],{"class":82},[72,3359,1009],{"class":78},[72,3361,817],{"class":82},[72,3363,1035],{"class":78},[72,3365,842],{"class":82},[72,3367,1009],{"class":78},[72,3369,842],{"class":82},[72,3371,1009],{"class":78},[72,3373,3374],{"class":82},"c ",[72,3376,3377],{"class":78},"==",[72,3379,3380],{"class":82}," num)",[72,3382,3383],{"class":621}," \u002F\u002F如果是水仙花数，才打印\n",[72,3385,3386],{"class":74,"line":2082},[72,3387,2938],{"class":82},[72,3389,3390,3392,3394,3396,3398],{"class":74,"line":2103},[72,3391,2943],{"class":82},[72,3393,1597],{"class":78},[72,3395,2094],{"class":82},[72,3397,1597],{"class":78},[72,3399,1620],{"class":82},[72,3401,3402],{"class":74,"line":2108},[72,3403,2957],{"class":82},[72,3405,3406,3408,3410],{"class":74,"line":2122},[72,3407,2717],{"class":82},[72,3409,2720],{"class":78},[72,3411,1719],{"class":82},[72,3413,3414],{"class":74,"line":2127},[72,3415,2615],{"class":82},[72,3417,3418,3420,3423,3425,3428],{"class":74,"line":2156},[72,3419,2679],{"class":78},[72,3421,3422],{"class":82}," (num ",[72,3424,1464],{"class":78},[72,3426,3427],{"class":362}," 1000",[72,3429,3147],{"class":82},[72,3431,3432],{"class":74,"line":2161},[72,3433,1994],{"class":82},[22,3435,3436],{"start":1608},[25,3437,3438],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[63,3440,3442],{"className":552,"code":3441,"language":554,"meta":68,"style":68},"\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",[34,3443,3444,3449,3478,3482,3494,3498,3503,3514,3521,3525,3539,3543,3550,3554,3566,3575],{"__ignoreMap":68},[72,3445,3446],{"class":74,"line":75},[72,3447,3448],{"class":621},"\u002F\u002F从数字0-9打印\n",[72,3450,3451,3454,3456,3458,3461,3463,3465,3468,3470,3472,3474,3476],{"class":74,"line":370},[72,3452,3453],{"class":78},"for",[72,3455,564],{"class":82},[72,3457,567],{"class":78},[72,3459,3460],{"class":82}," i",[72,3462,609],{"class":78},[72,3464,747],{"class":362},[72,3466,3467],{"class":82},";i",[72,3469,1464],{"class":78},[72,3471,1000],{"class":362},[72,3473,3467],{"class":82},[72,3475,2720],{"class":78},[72,3477,570],{"class":82},[72,3479,3480],{"class":74,"line":1608},[72,3481,1975],{"class":82},[72,3483,3484,3486,3488,3490,3492],{"class":74,"line":1623},[72,3485,1980],{"class":82},[72,3487,1597],{"class":78},[72,3489,995],{"class":82},[72,3491,1597],{"class":78},[72,3493,1620],{"class":82},[72,3495,3496],{"class":74,"line":1629},[72,3497,1994],{"class":82},[72,3499,3500],{"class":74,"line":1643},[72,3501,3502],{"class":621},"\u002F\u002F上式可以进行拆分\n",[72,3504,3505,3507,3509,3511],{"class":74,"line":1649},[72,3506,567],{"class":78},[72,3508,3460],{"class":82},[72,3510,609],{"class":78},[72,3512,3513],{"class":362},"0\n",[72,3515,3516,3518],{"class":74,"line":1740},[72,3517,3453],{"class":78},[72,3519,3520],{"class":82},"(;;;)\n",[72,3522,3523],{"class":74,"line":1746},[72,3524,1975],{"class":82},[72,3526,3527,3530,3533,3535,3537],{"class":74,"line":1758},[72,3528,3529],{"class":78},"    if",[72,3531,3532],{"class":82},"(i",[72,3534,2139],{"class":78},[72,3536,1000],{"class":362},[72,3538,570],{"class":82},[72,3540,3541],{"class":74,"line":2041},[72,3542,2458],{"class":82},[72,3544,3545,3548],{"class":74,"line":2046},[72,3546,3547],{"class":78},"        break",[72,3549,1719],{"class":82},[72,3551,3552],{"class":74,"line":2052},[72,3553,2615],{"class":82},[72,3555,3556,3558,3560,3562,3564],{"class":74,"line":2057},[72,3557,1980],{"class":82},[72,3559,1597],{"class":78},[72,3561,995],{"class":82},[72,3563,1597],{"class":78},[72,3565,1620],{"class":82},[72,3567,3568,3571,3573],{"class":74,"line":2071},[72,3569,3570],{"class":82},"    i",[72,3572,2720],{"class":78},[72,3574,1719],{"class":82},[72,3576,3577],{"class":74,"line":2076},[72,3578,1994],{"class":82},[15,3580,3581],{},"小练习",[63,3583,3585],{"className":552,"code":3584,"language":554,"meta":68,"style":68},"#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",[34,3586,3587,3593,3603,3611,3615,3620,3625,3653,3657,3662,3667,3708,3712,3725,3729,3733,3737,3749,3753,3757],{"__ignoreMap":68},[72,3588,3589,3591],{"class":74,"line":75},[72,3590,2378],{"class":78},[72,3592,2381],{"class":366},[72,3594,3595,3597,3599,3601],{"class":74,"line":370},[72,3596,2386],{"class":78},[72,3598,2389],{"class":78},[72,3600,2392],{"class":358},[72,3602,1719],{"class":82},[72,3604,3605,3607,3609],{"class":74,"line":1608},[72,3606,567],{"class":78},[72,3608,2401],{"class":358},[72,3610,2404],{"class":82},[72,3612,3613],{"class":74,"line":1623},[72,3614,1975],{"class":82},[72,3616,3617],{"class":74,"line":1629},[72,3618,3619],{"class":621},"    \u002F\u002F敲桌子案例\n",[72,3621,3622],{"class":74,"line":1643},[72,3623,3624],{"class":621},"    \u002F\u002F1.先输出1-100的数字\n",[72,3626,3627,3630,3632,3634,3636,3638,3640,3643,3645,3647,3649,3651],{"class":74,"line":1649},[72,3628,3629],{"class":78},"    for",[72,3631,564],{"class":82},[72,3633,567],{"class":78},[72,3635,3460],{"class":82},[72,3637,609],{"class":78},[72,3639,772],{"class":362},[72,3641,3642],{"class":82},"; i",[72,3644,2017],{"class":78},[72,3646,865],{"class":362},[72,3648,3642],{"class":82},[72,3650,2720],{"class":78},[72,3652,570],{"class":82},[72,3654,3655],{"class":74,"line":1740},[72,3656,2458],{"class":82},[72,3658,3659],{"class":74,"line":1746},[72,3660,3661],{"class":621},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[72,3663,3664],{"class":74,"line":1758},[72,3665,3666],{"class":621},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[72,3668,3669,3671,3673,3675,3677,3679,3681,3684,3686,3688,3690,3692,3694,3696,3698,3700,3702,3704,3706],{"class":74,"line":2041},[72,3670,2925],{"class":78},[72,3672,3532],{"class":82},[72,3674,882],{"class":78},[72,3676,923],{"class":362},[72,3678,3377],{"class":78},[72,3680,747],{"class":362},[72,3682,3683],{"class":78}," ||",[72,3685,3460],{"class":82},[72,3687,882],{"class":78},[72,3689,1000],{"class":362},[72,3691,3377],{"class":78},[72,3693,923],{"class":362},[72,3695,3683],{"class":78},[72,3697,3460],{"class":82},[72,3699,1138],{"class":78},[72,3701,1000],{"class":362},[72,3703,3377],{"class":78},[72,3705,923],{"class":362},[72,3707,570],{"class":82},[72,3709,3710],{"class":74,"line":2046},[72,3711,2938],{"class":82},[72,3713,3714,3716,3718,3721,3723],{"class":74,"line":2052},[72,3715,2943],{"class":82},[72,3717,1597],{"class":78},[72,3719,3720],{"class":366},"\"敲桌子\"",[72,3722,1597],{"class":78},[72,3724,1620],{"class":82},[72,3726,3727],{"class":74,"line":2057},[72,3728,2957],{"class":82},[72,3730,3731],{"class":74,"line":2071},[72,3732,2998],{"class":78},[72,3734,3735],{"class":74,"line":2076},[72,3736,2938],{"class":82},[72,3738,3739,3741,3743,3745,3747],{"class":74,"line":2082},[72,3740,2943],{"class":82},[72,3742,1597],{"class":78},[72,3744,995],{"class":82},[72,3746,1597],{"class":78},[72,3748,1620],{"class":82},[72,3750,3751],{"class":74,"line":2103},[72,3752,2957],{"class":82},[72,3754,3755],{"class":74,"line":2108},[72,3756,2615],{"class":82},[72,3758,3759],{"class":74,"line":2122},[72,3760,1994],{"class":82},[15,3762,3763],{},"嵌套实现星图",[63,3765,3767],{"className":552,"code":3766,"language":554,"meta":68,"style":68},"#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",[34,3768,3769,3775,3785,3793,3797,3823,3827,3856,3860,3871,3875,3884,3888],{"__ignoreMap":68},[72,3770,3771,3773],{"class":74,"line":75},[72,3772,2378],{"class":78},[72,3774,2381],{"class":366},[72,3776,3777,3779,3781,3783],{"class":74,"line":370},[72,3778,2386],{"class":78},[72,3780,2389],{"class":78},[72,3782,2392],{"class":358},[72,3784,1719],{"class":82},[72,3786,3787,3789,3791],{"class":74,"line":1608},[72,3788,567],{"class":78},[72,3790,2401],{"class":358},[72,3792,2404],{"class":82},[72,3794,3795],{"class":74,"line":1623},[72,3796,1975],{"class":82},[72,3798,3799,3801,3803,3805,3807,3809,3811,3813,3815,3817,3819,3821],{"class":74,"line":1629},[72,3800,3629],{"class":78},[72,3802,2087],{"class":82},[72,3804,567],{"class":78},[72,3806,3460],{"class":82},[72,3808,609],{"class":78},[72,3810,747],{"class":362},[72,3812,3467],{"class":82},[72,3814,1464],{"class":78},[72,3816,1000],{"class":362},[72,3818,3467],{"class":82},[72,3820,2720],{"class":78},[72,3822,570],{"class":82},[72,3824,3825],{"class":74,"line":1643},[72,3826,2458],{"class":82},[72,3828,3829,3832,3834,3836,3839,3841,3843,3846,3848,3850,3852,3854],{"class":74,"line":1649},[72,3830,3831],{"class":78},"        for",[72,3833,2087],{"class":82},[72,3835,567],{"class":78},[72,3837,3838],{"class":82}," j",[72,3840,609],{"class":78},[72,3842,747],{"class":362},[72,3844,3845],{"class":82},";j",[72,3847,1464],{"class":78},[72,3849,1000],{"class":362},[72,3851,3845],{"class":82},[72,3853,2720],{"class":78},[72,3855,570],{"class":82},[72,3857,3858],{"class":74,"line":1740},[72,3859,2938],{"class":82},[72,3861,3862,3864,3866,3869],{"class":74,"line":1746},[72,3863,2943],{"class":82},[72,3865,1597],{"class":78},[72,3867,3868],{"class":366},"\"*\"",[72,3870,1719],{"class":82},[72,3872,3873],{"class":74,"line":1758},[72,3874,2957],{"class":82},[72,3876,3877,3880,3882],{"class":74,"line":2041},[72,3878,3879],{"class":82},"        cout",[72,3881,1597],{"class":78},[72,3883,1620],{"class":82},[72,3885,3886],{"class":74,"line":2046},[72,3887,2615],{"class":82},[72,3889,3890],{"class":74,"line":2052},[72,3891,1994],{"class":82},[15,3893,3894],{},"乘法口诀表",[63,3896,3898],{"className":552,"code":3897,"language":554,"meta":68,"style":68},"#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",[34,3899,3900,3906,3916,3924,3928,3954,3958,3983,3987,4027,4031,4039,4043],{"__ignoreMap":68},[72,3901,3902,3904],{"class":74,"line":75},[72,3903,2378],{"class":78},[72,3905,2762],{"class":366},[72,3907,3908,3910,3912,3914],{"class":74,"line":370},[72,3909,2386],{"class":78},[72,3911,2389],{"class":78},[72,3913,2392],{"class":358},[72,3915,1719],{"class":82},[72,3917,3918,3920,3922],{"class":74,"line":1608},[72,3919,567],{"class":78},[72,3921,2401],{"class":358},[72,3923,2404],{"class":82},[72,3925,3926],{"class":74,"line":1623},[72,3927,1975],{"class":82},[72,3929,3930,3932,3934,3936,3938,3940,3942,3944,3946,3948,3950,3952],{"class":74,"line":1629},[72,3931,3629],{"class":78},[72,3933,564],{"class":82},[72,3935,567],{"class":78},[72,3937,3460],{"class":82},[72,3939,609],{"class":78},[72,3941,772],{"class":362},[72,3943,3467],{"class":82},[72,3945,1464],{"class":78},[72,3947,1000],{"class":362},[72,3949,3467],{"class":82},[72,3951,2720],{"class":78},[72,3953,570],{"class":82},[72,3955,3956],{"class":74,"line":1643},[72,3957,2458],{"class":82},[72,3959,3960,3962,3964,3966,3968,3970,3972,3974,3976,3979,3981],{"class":74,"line":1649},[72,3961,3831],{"class":78},[72,3963,564],{"class":82},[72,3965,567],{"class":78},[72,3967,3838],{"class":82},[72,3969,609],{"class":78},[72,3971,772],{"class":362},[72,3973,3845],{"class":82},[72,3975,2017],{"class":78},[72,3977,3978],{"class":82},"i;j",[72,3980,2720],{"class":78},[72,3982,570],{"class":82},[72,3984,3985],{"class":74,"line":1740},[72,3986,2938],{"class":82},[72,3988,3989,3991,3993,3995,3997,3999,4001,4003,4005,4008,4010,4012,4014,4016,4018,4021,4023,4025],{"class":74,"line":1746},[72,3990,2943],{"class":82},[72,3992,1597],{"class":78},[72,3994,1021],{"class":82},[72,3996,1597],{"class":78},[72,3998,3868],{"class":366},[72,4000,1597],{"class":78},[72,4002,995],{"class":82},[72,4004,1597],{"class":78},[72,4006,4007],{"class":366},"\"=\"",[72,4009,1597],{"class":78},[72,4011,995],{"class":82},[72,4013,1009],{"class":78},[72,4015,1021],{"class":82},[72,4017,1597],{"class":78},[72,4019,4020],{"class":366},"'",[72,4022,1659],{"class":362},[72,4024,4020],{"class":366},[72,4026,1719],{"class":82},[72,4028,4029],{"class":74,"line":1758},[72,4030,2957],{"class":82},[72,4032,4033,4035,4037],{"class":74,"line":2041},[72,4034,3879],{"class":82},[72,4036,1597],{"class":78},[72,4038,1620],{"class":82},[72,4040,4041],{"class":74,"line":2046},[72,4042,2615],{"class":82},[72,4044,4045],{"class":74,"line":2052},[72,4046,1994],{"class":82},[531,4048,4050],{"id":4049},"_163跳出语句","1.6.3跳出语句",[22,4052,4053],{},[25,4054,4055],{},"break语句\n作用：用于跳出选择结构或者循环结构",[15,4057,4058],{},"break使用时机：",[251,4060,4061,4064,4067],{},[25,4062,4063],{},"出现在switch条件语句中，作用是终止case并跳出switch",[25,4065,4066],{},"出现在循环结构中，作用是跳出当前的循环结构",[25,4068,4069],{},"出现在嵌套循环中，跳出最近的内层循环语句",[22,4071,4072,4075],{"start":370},[25,4073,4074],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[25,4076,4077],{},"goto语句\n语法：goto 标记;",[15,4079,4080],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[63,4082,4084],{"className":552,"code":4083,"language":554,"meta":68,"style":68},"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",[34,4085,4086,4094,4098,4111,4121,4134,4147,4160,4168,4184],{"__ignoreMap":68},[72,4087,4088,4090,4092],{"class":74,"line":75},[72,4089,567],{"class":78},[72,4091,2401],{"class":358},[72,4093,2404],{"class":82},[72,4095,4096],{"class":74,"line":370},[72,4097,1975],{"class":82},[72,4099,4100,4102,4104,4107,4109],{"class":74,"line":1608},[72,4101,1980],{"class":82},[72,4103,1597],{"class":78},[72,4105,4106],{"class":366},"\"1\"",[72,4108,1597],{"class":78},[72,4110,1620],{"class":82},[72,4112,4113,4116,4119],{"class":74,"line":1623},[72,4114,4115],{"class":78},"    goto",[72,4117,4118],{"class":358}," FLAG",[72,4120,1719],{"class":82},[72,4122,4123,4125,4127,4130,4132],{"class":74,"line":1629},[72,4124,1980],{"class":82},[72,4126,1597],{"class":78},[72,4128,4129],{"class":366},"\"2\"",[72,4131,1597],{"class":78},[72,4133,1620],{"class":82},[72,4135,4136,4138,4140,4143,4145],{"class":74,"line":1643},[72,4137,1980],{"class":82},[72,4139,1597],{"class":78},[72,4141,4142],{"class":366},"\"3\"",[72,4144,1597],{"class":78},[72,4146,1620],{"class":82},[72,4148,4149,4151,4153,4156,4158],{"class":74,"line":1649},[72,4150,1980],{"class":82},[72,4152,1597],{"class":78},[72,4154,4155],{"class":366},"\"4\"",[72,4157,1597],{"class":78},[72,4159,1620],{"class":82},[72,4161,4162,4165],{"class":74,"line":1740},[72,4163,4164],{"class":358},"    FLAG",[72,4166,4167],{"class":82},":\n",[72,4169,4170,4172,4174,4177,4179,4181],{"class":74,"line":1746},[72,4171,1980],{"class":82},[72,4173,1597],{"class":78},[72,4175,4176],{"class":366},"\"5\"",[72,4178,1597],{"class":78},[72,4180,1667],{"class":82},[72,4182,4183],{"class":621},"\u002F\u002F跳过了2,3,4,直接到5\n",[72,4185,4186],{"class":74,"line":1758},[72,4187,1994],{"class":82},[85,4189,4191],{"id":4190},"_17数组","1.7数组",[531,4193,4195],{"id":4194},"_171一维数组","1.7.1一维数组",[22,4197,4198],{},[25,4199,4200],{},"一维数组定义方式",[154,4202,4203,4213],{},[157,4204,4205],{},[160,4206,4207,4210],{},[163,4208,4209],{},"方式",[163,4211,4212],{},"注意事项",[174,4214,4215,4229,4239],{},[160,4216,4217,4223],{},[179,4218,4219,4220,618],{},"数据类型 数组名",[72,4221,4222],{},"数组长度",[179,4224,4225,4226,4228],{},"这种方式是先定义再arr",[72,4227,995],{},"赋值",[160,4230,4231,4236],{},[179,4232,4219,4233,4235],{},[72,4234,4222],{},"={值1,值2....};",[179,4237,4238],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[160,4240,4241,4245],{},[179,4242,4219,4243,4235],{},[72,4244],{},[179,4246,4247,4248,4250],{},"int arr",[72,4249],{},";这是不正确的，按照这样的方式定义必须有初始长度",[22,4252,4253],{"start":370},[25,4254,4255],{},"一维数组数组名\n用途：",[251,4257,4258],{},[25,4259,4260],{},"1.可以统计整个数组在内存中的长度：",[63,4262,4264],{"className":552,"code":4263,"language":554,"meta":68,"style":68},"sizeof(arr);\nsizeof(arr[0]);\n",[34,4265,4266,4273],{"__ignoreMap":68},[72,4267,4268,4270],{"class":74,"line":75},[72,4269,561],{"class":78},[72,4271,4272],{"class":82},"(arr);\n",[72,4274,4275,4277,4280,4282],{"class":74,"line":370},[72,4276,561],{"class":78},[72,4278,4279],{"class":82},"(arr[",[72,4281,747],{"class":362},[72,4283,4284],{"class":82},"]);\n",[251,4286,4287],{},[25,4288,4289],{},"2.可以获取数组在内存中的首地址:",[63,4291,4293],{"className":552,"code":4292,"language":554,"meta":68,"style":68},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[34,4294,4295,4300,4313,4318],{"__ignoreMap":68},[72,4296,4297],{"class":74,"line":75},[72,4298,4299],{"class":621},"\u002F\u002F查看16进制的首地址\n",[72,4301,4302,4304,4306,4309,4311],{"class":74,"line":370},[72,4303,1798],{"class":82},[72,4305,1597],{"class":78},[72,4307,4308],{"class":82},"arr",[72,4310,1597],{"class":78},[72,4312,1620],{"class":82},[72,4314,4315],{"class":74,"line":1608},[72,4316,4317],{"class":621},"\u002F\u002F看10进制数\n",[72,4319,4320,4322,4324,4326,4328,4330,4332,4335,4337,4339,4341],{"class":74,"line":1623},[72,4321,1798],{"class":82},[72,4323,1597],{"class":78},[72,4325,564],{"class":82},[72,4327,567],{"class":78},[72,4329,983],{"class":82},[72,4331,907],{"class":78},[72,4333,4334],{"class":82},"arr[",[72,4336,747],{"class":362},[72,4338,1494],{"class":82},[72,4340,1597],{"class":78},[72,4342,1620],{"class":82},[15,4344,4345],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[251,4347,4348],{},[25,4349,4350],{},"1️⃣五只小猪称体重",[63,4352,4354],{"className":552,"code":4353,"language":554,"meta":68,"style":68},"#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",[34,4355,4356,4362,4372,4380,4384,4424,4437,4463,4467,4479,4483,4493,4497,4501,4514,4524],{"__ignoreMap":68},[72,4357,4358,4360],{"class":74,"line":75},[72,4359,2378],{"class":78},[72,4361,2381],{"class":366},[72,4363,4364,4366,4368,4370],{"class":74,"line":370},[72,4365,2386],{"class":78},[72,4367,2389],{"class":78},[72,4369,2392],{"class":358},[72,4371,1719],{"class":82},[72,4373,4374,4376,4378],{"class":74,"line":1608},[72,4375,567],{"class":78},[72,4377,2401],{"class":358},[72,4379,2404],{"class":82},[72,4381,4382],{"class":74,"line":1623},[72,4383,1975],{"class":82},[72,4385,4386,4388,4391,4393,4395,4397,4399,4402,4404,4407,4409,4411,4413,4416,4418,4421],{"class":74,"line":1629},[72,4387,2413],{"class":78},[72,4389,4390],{"class":82}," arr[",[72,4392,873],{"class":362},[72,4394,1494],{"class":82},[72,4396,609],{"class":78},[72,4398,1450],{"class":82},[72,4400,4401],{"class":362},"300",[72,4403,932],{"class":82},[72,4405,4406],{"class":362},"350",[72,4408,932],{"class":82},[72,4410,2151],{"class":362},[72,4412,932],{"class":82},[72,4414,4415],{"class":362},"400",[72,4417,932],{"class":82},[72,4419,4420],{"class":362},"250",[72,4422,4423],{"class":82},"};\n",[72,4425,4426,4428,4431,4433,4435],{"class":74,"line":1643},[72,4427,2413],{"class":78},[72,4429,4430],{"class":82}," tmp",[72,4432,609],{"class":78},[72,4434,747],{"class":362},[72,4436,1719],{"class":82},[72,4438,4439,4441,4443,4445,4447,4449,4451,4453,4455,4457,4459,4461],{"class":74,"line":1649},[72,4440,3629],{"class":78},[72,4442,2087],{"class":82},[72,4444,567],{"class":78},[72,4446,3460],{"class":82},[72,4448,609],{"class":78},[72,4450,747],{"class":362},[72,4452,3467],{"class":82},[72,4454,1464],{"class":78},[72,4456,873],{"class":362},[72,4458,3467],{"class":82},[72,4460,2720],{"class":78},[72,4462,570],{"class":82},[72,4464,4465],{"class":74,"line":1740},[72,4466,2458],{"class":82},[72,4468,4469,4471,4474,4476],{"class":74,"line":1746},[72,4470,2925],{"class":78},[72,4472,4473],{"class":82},"(tmp",[72,4475,1464],{"class":78},[72,4477,4478],{"class":82},"arr[i])\n",[72,4480,4481],{"class":74,"line":1758},[72,4482,2938],{"class":82},[72,4484,4485,4488,4490],{"class":74,"line":2041},[72,4486,4487],{"class":82},"            tmp",[72,4489,609],{"class":78},[72,4491,4492],{"class":82},"arr[i];\n",[72,4494,4495],{"class":74,"line":2046},[72,4496,2957],{"class":82},[72,4498,4499],{"class":74,"line":2052},[72,4500,2615],{"class":82},[72,4502,4503,4505,4507,4510,4512],{"class":74,"line":2057},[72,4504,1980],{"class":82},[72,4506,1597],{"class":78},[72,4508,4509],{"class":82},"tmp",[72,4511,1597],{"class":78},[72,4513,1620],{"class":82},[72,4515,4516,4519,4522],{"class":74,"line":2071},[72,4517,4518],{"class":78},"    return",[72,4520,4521],{"class":362}," 0",[72,4523,1719],{"class":82},[72,4525,4526],{"class":74,"line":2076},[72,4527,1994],{"class":82},[251,4529,4530],{},[25,4531,4532],{},"2️⃣数组元素逆置",[63,4534,4536],{"className":552,"code":4535,"language":554,"meta":68,"style":68},"\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",[34,4537,4538,4543,4549,4559,4567,4571,4606,4622,4654,4667,4672,4677,4689,4699,4709,4714,4723,4733,4738,4743,4770,4774,4790,4794,4805,4814],{"__ignoreMap":68},[72,4539,4540],{"class":74,"line":75},[72,4541,4542],{"class":621},"\u002F\u002F元素逆置\n",[72,4544,4545,4547],{"class":74,"line":370},[72,4546,2378],{"class":78},[72,4548,2381],{"class":366},[72,4550,4551,4553,4555,4557],{"class":74,"line":1608},[72,4552,2386],{"class":78},[72,4554,2389],{"class":78},[72,4556,2392],{"class":358},[72,4558,1719],{"class":82},[72,4560,4561,4563,4565],{"class":74,"line":1623},[72,4562,567],{"class":78},[72,4564,2401],{"class":358},[72,4566,2404],{"class":82},[72,4568,4569],{"class":74,"line":1629},[72,4570,1975],{"class":82},[72,4572,4573,4576,4578,4580,4582,4584,4586,4588,4590,4592,4594,4596,4598,4600,4602,4604],{"class":74,"line":1643},[72,4574,4575],{"class":78},"   int",[72,4577,4390],{"class":82},[72,4579,873],{"class":362},[72,4581,1494],{"class":82},[72,4583,609],{"class":78},[72,4585,1450],{"class":82},[72,4587,772],{"class":362},[72,4589,932],{"class":82},[72,4591,640],{"class":362},[72,4593,932],{"class":82},[72,4595,634],{"class":362},[72,4597,932],{"class":82},[72,4599,847],{"class":362},[72,4601,932],{"class":82},[72,4603,873],{"class":362},[72,4605,4423],{"class":82},[72,4607,4608,4610,4613,4615,4617,4619],{"class":74,"line":1649},[72,4609,4575],{"class":78},[72,4611,4612],{"class":82}," start",[72,4614,609],{"class":78},[72,4616,747],{"class":362},[72,4618,618],{"class":82},[72,4620,4621],{"class":621},"\u002F\u002F起始下标\n",[72,4623,4624,4626,4629,4632,4635,4638,4640,4642,4645,4647,4649,4651],{"class":74,"line":1740},[72,4625,4575],{"class":78},[72,4627,4628],{"class":82}," end",[72,4630,4631],{"class":78},"=sizeof",[72,4633,4634],{"class":82},"(arr)",[72,4636,4637],{"class":78},"\u002Fsizeof",[72,4639,4279],{"class":82},[72,4641,747],{"class":362},[72,4643,4644],{"class":82},"])",[72,4646,1086],{"class":78},[72,4648,772],{"class":362},[72,4650,618],{"class":82},[72,4652,4653],{"class":621},"\u002F\u002F结束下标\n",[72,4655,4656,4659,4662,4664],{"class":74,"line":1746},[72,4657,4658],{"class":78},"   while",[72,4660,4661],{"class":82}," (start",[72,4663,1464],{"class":78},[72,4665,4666],{"class":82},"end)\n",[72,4668,4669],{"class":74,"line":1758},[72,4670,4671],{"class":82},"   {\n",[72,4673,4674],{"class":74,"line":2041},[72,4675,4676],{"class":621},"    \u002F\u002F实现元素互换代码\n",[72,4678,4679,4681,4684,4686],{"class":74,"line":2046},[72,4680,2413],{"class":78},[72,4682,4683],{"class":82}," temp",[72,4685,609],{"class":78},[72,4687,4688],{"class":82},"arr[start];\n",[72,4690,4691,4694,4696],{"class":74,"line":2052},[72,4692,4693],{"class":82},"    arr[start]",[72,4695,609],{"class":78},[72,4697,4698],{"class":82},"arr[end];\n",[72,4700,4701,4704,4706],{"class":74,"line":2057},[72,4702,4703],{"class":82},"    arr[end]",[72,4705,609],{"class":78},[72,4707,4708],{"class":82},"temp;\n",[72,4710,4711],{"class":74,"line":2071},[72,4712,4713],{"class":621},"    \u002F\u002F下标更新\n",[72,4715,4716,4719,4721],{"class":74,"line":2076},[72,4717,4718],{"class":82},"    start",[72,4720,2720],{"class":78},[72,4722,1719],{"class":82},[72,4724,4725,4728,4731],{"class":74,"line":2082},[72,4726,4727],{"class":82},"    end",[72,4729,4730],{"class":78},"--",[72,4732,1719],{"class":82},[72,4734,4735],{"class":74,"line":2103},[72,4736,4737],{"class":82},"   }\n",[72,4739,4740],{"class":74,"line":2108},[72,4741,4742],{"class":621},"   \u002F\u002F输出逆置后的数组\n",[72,4744,4745,4748,4750,4752,4754,4756,4758,4760,4762,4764,4766,4768],{"class":74,"line":2122},[72,4746,4747],{"class":78},"   for",[72,4749,2087],{"class":82},[72,4751,567],{"class":78},[72,4753,3460],{"class":82},[72,4755,609],{"class":78},[72,4757,747],{"class":362},[72,4759,3467],{"class":82},[72,4761,1464],{"class":78},[72,4763,873],{"class":362},[72,4765,3467],{"class":82},[72,4767,2720],{"class":78},[72,4769,570],{"class":82},[72,4771,4772],{"class":74,"line":2127},[72,4773,4671],{"class":82},[72,4775,4776,4778,4780,4783,4785,4788],{"class":74,"line":2156},[72,4777,1980],{"class":82},[72,4779,1597],{"class":78},[72,4781,4782],{"class":82},"arr[i]",[72,4784,1597],{"class":78},[72,4786,4787],{"class":366},"\" \"",[72,4789,1719],{"class":82},[72,4791,4792],{"class":74,"line":2161},[72,4793,4737],{"class":82},[72,4795,4796,4799,4801,4803],{"class":74,"line":2178},[72,4797,4798],{"class":358},"   system",[72,4800,564],{"class":82},[72,4802,2736],{"class":366},[72,4804,3147],{"class":82},[72,4806,4807,4810,4812],{"class":74,"line":2183},[72,4808,4809],{"class":78},"   return",[72,4811,4521],{"class":362},[72,4813,1719],{"class":82},[72,4815,4816],{"class":74,"line":2188},[72,4817,1994],{"class":82},[251,4819,4820],{},[25,4821,4822],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[63,4824,4826],{"className":552,"code":4825,"language":554,"meta":68,"style":68},"\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",[34,4827,4828,4833,4839,4849,4857,4861,4913,4926,4952,4956,4970,4974,4979,4984,5014,5018,5023,5057,5061,5066,5086,5091,5103,5119,5134,5139,5143,5147,5160,5186,5190,5204,5208,5216],{"__ignoreMap":68},[72,4829,4830],{"class":74,"line":75},[72,4831,4832],{"class":621},"\u002F\u002F冒泡排序,升序\n",[72,4834,4835,4837],{"class":74,"line":370},[72,4836,2378],{"class":78},[72,4838,2381],{"class":366},[72,4840,4841,4843,4845,4847],{"class":74,"line":1608},[72,4842,2386],{"class":78},[72,4844,2389],{"class":78},[72,4846,2392],{"class":358},[72,4848,1719],{"class":82},[72,4850,4851,4853,4855],{"class":74,"line":1623},[72,4852,567],{"class":78},[72,4854,2401],{"class":358},[72,4856,2404],{"class":82},[72,4858,4859],{"class":74,"line":1629},[72,4860,1975],{"class":82},[72,4862,4863,4865,4867,4869,4872,4874,4877,4879,4881,4883,4885,4887,4889,4891,4893,4895,4897,4899,4901,4903,4905,4907,4909,4911],{"class":74,"line":1643},[72,4864,2413],{"class":78},[72,4866,4390],{"class":82},[72,4868,974],{"class":362},[72,4870,4871],{"class":82},"] ",[72,4873,609],{"class":78},[72,4875,4876],{"class":82}," {",[72,4878,847],{"class":362},[72,4880,932],{"class":82},[72,4882,640],{"class":362},[72,4884,932],{"class":82},[72,4886,949],{"class":362},[72,4888,932],{"class":82},[72,4890,747],{"class":362},[72,4892,932],{"class":82},[72,4894,873],{"class":362},[72,4896,932],{"class":82},[72,4898,923],{"class":362},[72,4900,932],{"class":82},[72,4902,772],{"class":362},[72,4904,932],{"class":82},[72,4906,634],{"class":362},[72,4908,932],{"class":82},[72,4910,974],{"class":362},[72,4912,4423],{"class":82},[72,4914,4915,4917,4919,4922,4924],{"class":74,"line":1649},[72,4916,1980],{"class":82},[72,4918,1597],{"class":78},[72,4920,4921],{"class":366},"\"排序前：\"",[72,4923,1597],{"class":78},[72,4925,1620],{"class":82},[72,4927,4928,4930,4932,4934,4936,4938,4940,4942,4944,4946,4948,4950],{"class":74,"line":1740},[72,4929,3629],{"class":78},[72,4931,2087],{"class":82},[72,4933,567],{"class":78},[72,4935,3460],{"class":82},[72,4937,609],{"class":78},[72,4939,747],{"class":362},[72,4941,3467],{"class":82},[72,4943,1464],{"class":78},[72,4945,974],{"class":362},[72,4947,3467],{"class":82},[72,4949,2720],{"class":78},[72,4951,570],{"class":82},[72,4953,4954],{"class":74,"line":1746},[72,4955,2458],{"class":82},[72,4957,4958,4960,4962,4964,4966,4968],{"class":74,"line":1758},[72,4959,3879],{"class":82},[72,4961,1597],{"class":78},[72,4963,4782],{"class":82},[72,4965,1597],{"class":78},[72,4967,4787],{"class":366},[72,4969,1719],{"class":82},[72,4971,4972],{"class":74,"line":2041},[72,4973,2615],{"class":82},[72,4975,4976],{"class":74,"line":2046},[72,4977,4978],{"class":621},"    \u002F\u002F开始冒泡排序\n",[72,4980,4981],{"class":74,"line":2052},[72,4982,4983],{"class":621},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[72,4985,4986,4988,4990,4992,4994,4996,4998,5000,5002,5004,5006,5008,5010,5012],{"class":74,"line":2057},[72,4987,3629],{"class":78},[72,4989,2087],{"class":82},[72,4991,567],{"class":78},[72,4993,3460],{"class":82},[72,4995,609],{"class":78},[72,4997,747],{"class":362},[72,4999,3467],{"class":82},[72,5001,1464],{"class":78},[72,5003,974],{"class":362},[72,5005,1086],{"class":78},[72,5007,772],{"class":362},[72,5009,3467],{"class":82},[72,5011,2720],{"class":78},[72,5013,570],{"class":82},[72,5015,5016],{"class":74,"line":2071},[72,5017,2458],{"class":82},[72,5019,5020],{"class":74,"line":2076},[72,5021,5022],{"class":621},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[72,5024,5025,5027,5029,5031,5033,5035,5037,5039,5041,5043,5045,5047,5049,5051,5053,5055],{"class":74,"line":2082},[72,5026,3831],{"class":78},[72,5028,2087],{"class":82},[72,5030,567],{"class":78},[72,5032,3838],{"class":82},[72,5034,609],{"class":78},[72,5036,747],{"class":362},[72,5038,3845],{"class":82},[72,5040,1464],{"class":78},[72,5042,974],{"class":362},[72,5044,1086],{"class":78},[72,5046,995],{"class":82},[72,5048,1086],{"class":78},[72,5050,772],{"class":362},[72,5052,3845],{"class":82},[72,5054,2720],{"class":78},[72,5056,570],{"class":82},[72,5058,5059],{"class":74,"line":2103},[72,5060,2938],{"class":82},[72,5062,5063],{"class":74,"line":2108},[72,5064,5065],{"class":621},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[72,5067,5068,5071,5074,5076,5079,5081,5083],{"class":74,"line":2122},[72,5069,5070],{"class":78},"            if",[72,5072,5073],{"class":82},"(arr[j]",[72,5075,1514],{"class":78},[72,5077,5078],{"class":82},"arr[j",[72,5080,1035],{"class":78},[72,5082,772],{"class":362},[72,5084,5085],{"class":82},"])\n",[72,5087,5088],{"class":74,"line":2127},[72,5089,5090],{"class":82},"            {\n",[72,5092,5093,5096,5098,5100],{"class":74,"line":2156},[72,5094,5095],{"class":78},"                int",[72,5097,4683],{"class":82},[72,5099,609],{"class":78},[72,5101,5102],{"class":82},"arr[j];\n",[72,5104,5105,5108,5110,5112,5114,5116],{"class":74,"line":2161},[72,5106,5107],{"class":82},"                arr[j]",[72,5109,609],{"class":78},[72,5111,5078],{"class":82},[72,5113,1035],{"class":78},[72,5115,772],{"class":362},[72,5117,5118],{"class":82},"];\n",[72,5120,5121,5124,5126,5128,5130,5132],{"class":74,"line":2178},[72,5122,5123],{"class":82},"                arr[j",[72,5125,1035],{"class":78},[72,5127,772],{"class":362},[72,5129,1494],{"class":82},[72,5131,609],{"class":78},[72,5133,4708],{"class":82},[72,5135,5136],{"class":74,"line":2183},[72,5137,5138],{"class":82},"            }\n",[72,5140,5141],{"class":74,"line":2188},[72,5142,2957],{"class":82},[72,5144,5145],{"class":74,"line":2193},[72,5146,2615],{"class":82},[72,5148,5149,5151,5153,5156,5158],{"class":74,"line":2207},[72,5150,1980],{"class":82},[72,5152,1597],{"class":78},[72,5154,5155],{"class":366},"\"排序后：\"",[72,5157,1597],{"class":78},[72,5159,1620],{"class":82},[72,5161,5162,5164,5166,5168,5170,5172,5174,5176,5178,5180,5182,5184],{"class":74,"line":2212},[72,5163,3629],{"class":78},[72,5165,2087],{"class":82},[72,5167,567],{"class":78},[72,5169,3460],{"class":82},[72,5171,609],{"class":78},[72,5173,747],{"class":362},[72,5175,3467],{"class":82},[72,5177,1464],{"class":78},[72,5179,974],{"class":362},[72,5181,3467],{"class":82},[72,5183,2720],{"class":78},[72,5185,570],{"class":82},[72,5187,5188],{"class":74,"line":3005},[72,5189,2458],{"class":82},[72,5191,5192,5194,5196,5198,5200,5202],{"class":74,"line":3019},[72,5193,3879],{"class":82},[72,5195,1597],{"class":78},[72,5197,4782],{"class":82},[72,5199,1597],{"class":78},[72,5201,4787],{"class":366},[72,5203,1719],{"class":82},[72,5205,5206],{"class":74,"line":3027},[72,5207,2615],{"class":82},[72,5209,5210,5212,5214],{"class":74,"line":3032},[72,5211,4518],{"class":78},[72,5213,4521],{"class":362},[72,5215,1719],{"class":82},[72,5217,5218],{"class":74,"line":3038},[72,5219,1994],{"class":82},[531,5221,5223],{"id":5222},"_172二维数组","1.7.2二维数组",[22,5225,5226],{},[25,5227,5228],{},"二维数组的四种定义方式",[154,5230,5231,5240],{},[157,5232,5233],{},[160,5234,5235,5238],{},[163,5236,5237],{},"序号",[163,5239,4209],{},[174,5241,5242,5252,5261,5270,5279],{},[160,5243,5244,5246],{},[179,5245,772],{},[179,5247,5248,5249,618],{},"数据类型 数组名[行数]",[72,5250,5251],{},"列数",[160,5253,5254,5256],{},[179,5255,640],{},[179,5257,5248,5258,5260],{},[72,5259,5251],{},"={ {数据1,数据2}，{数据3，数据4}... }",[160,5262,5263,5265],{},[179,5264,634],{},[179,5266,5248,5267,5269],{},[72,5268,5251],{},"={数据1,数据2,数据3...}",[160,5271,5272,5274],{},[179,5273,847],{},[179,5275,5276,5277,5269],{},"数据类型 数组名[]",[72,5278,5251],{},[160,5280,5281,5284],{},[179,5282,5283],{},"注意：不能只省略列数",[179,5285],{},[22,5287,5288],{"start":370},[25,5289,5290],{},"二维数组数组名",[251,5292,5293,5296],{},[25,5294,5295],{},"1.查看二维数组所占内存空间",[25,5297,5298],{},"2.获取二维数组首地址",[15,5300,5301],{},"已知二维数组，求二维数组的行数与列数",[63,5303,5305],{"className":552,"code":5304,"language":554,"meta":68,"style":68},"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",[34,5306,5307,5315,5319,5337,5341,5359,5375,5380,5405,5438],{"__ignoreMap":68},[72,5308,5309,5311,5313],{"class":74,"line":75},[72,5310,567],{"class":78},[72,5312,2401],{"class":358},[72,5314,2404],{"class":82},[72,5316,5317],{"class":74,"line":370},[72,5318,1975],{"class":82},[72,5320,5321,5323,5325,5327,5330,5332,5334],{"class":74,"line":1608},[72,5322,2413],{"class":78},[72,5324,4390],{"class":82},[72,5326,640],{"class":362},[72,5328,5329],{"class":82},"][",[72,5331,634],{"class":362},[72,5333,1494],{"class":82},[72,5335,5336],{"class":78},"=\n",[72,5338,5339],{"class":74,"line":1623},[72,5340,2458],{"class":82},[72,5342,5343,5346,5348,5350,5352,5354,5356],{"class":74,"line":1629},[72,5344,5345],{"class":82},"        {",[72,5347,772],{"class":362},[72,5349,932],{"class":82},[72,5351,640],{"class":362},[72,5353,932],{"class":82},[72,5355,634],{"class":362},[72,5357,5358],{"class":82},"},\n",[72,5360,5361,5363,5365,5367,5369,5371,5373],{"class":74,"line":1643},[72,5362,5345],{"class":82},[72,5364,847],{"class":362},[72,5366,932],{"class":82},[72,5368,873],{"class":362},[72,5370,932],{"class":82},[72,5372,898],{"class":362},[72,5374,1994],{"class":82},[72,5376,5377],{"class":74,"line":1649},[72,5378,5379],{"class":82},"    };\n",[72,5381,5382,5384,5386,5389,5391,5393,5395,5397,5399,5401,5403],{"class":74,"line":1740},[72,5383,1980],{"class":82},[72,5385,1597],{"class":78},[72,5387,5388],{"class":366},"\"二维数组的行数\"",[72,5390,1801],{"class":78},[72,5392,4634],{"class":82},[72,5394,4637],{"class":78},[72,5396,4279],{"class":82},[72,5398,747],{"class":362},[72,5400,4644],{"class":82},[72,5402,1597],{"class":78},[72,5404,1620],{"class":82},[72,5406,5407,5409,5411,5414,5416,5418,5420,5422,5424,5426,5428,5430,5432,5434,5436],{"class":74,"line":1746},[72,5408,1980],{"class":82},[72,5410,1597],{"class":78},[72,5412,5413],{"class":366},"\"二维数组的列数\"",[72,5415,1801],{"class":78},[72,5417,4279],{"class":82},[72,5419,747],{"class":362},[72,5421,4644],{"class":82},[72,5423,4637],{"class":78},[72,5425,4279],{"class":82},[72,5427,747],{"class":362},[72,5429,5329],{"class":82},[72,5431,747],{"class":362},[72,5433,4644],{"class":82},[72,5435,1597],{"class":78},[72,5437,1620],{"class":82},[72,5439,5440],{"class":74,"line":1758},[72,5441,1994],{"class":82},[15,5443,5444],{},"查看二维数组首地址",[63,5446,5448],{"className":552,"code":5447,"language":554,"meta":68,"style":68},"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",[34,5449,5450,5467,5493,5518],{"__ignoreMap":68},[72,5451,5452,5454,5456,5459,5461,5463,5465],{"class":74,"line":75},[72,5453,1798],{"class":82},[72,5455,1597],{"class":78},[72,5457,5458],{"class":366},"\"二维数组首地址：\"",[72,5460,1597],{"class":78},[72,5462,4308],{"class":82},[72,5464,1597],{"class":78},[72,5466,1620],{"class":82},[72,5468,5469,5471,5473,5476,5478,5480,5482,5485,5487,5489,5491],{"class":74,"line":370},[72,5470,1798],{"class":82},[72,5472,1597],{"class":78},[72,5474,5475],{"class":366},"\"二维数组第一行的首地址：\"",[72,5477,1597],{"class":78},[72,5479,564],{"class":82},[72,5481,567],{"class":78},[72,5483,5484],{"class":82},")arr[",[72,5486,747],{"class":362},[72,5488,1494],{"class":82},[72,5490,1597],{"class":78},[72,5492,1620],{"class":82},[72,5494,5495,5497,5499,5502,5504,5506,5508,5510,5512,5514,5516],{"class":74,"line":1608},[72,5496,1798],{"class":82},[72,5498,1597],{"class":78},[72,5500,5501],{"class":366},"\"二维数组第二行的首地址：\"",[72,5503,1597],{"class":78},[72,5505,564],{"class":82},[72,5507,567],{"class":78},[72,5509,5484],{"class":82},[72,5511,772],{"class":362},[72,5513,1494],{"class":82},[72,5515,1597],{"class":78},[72,5517,1620],{"class":82},[72,5519,5520,5522,5524,5527,5529,5531,5533,5535,5537,5539,5541,5543,5545,5547,5549,5551],{"class":74,"line":1623},[72,5521,1798],{"class":82},[72,5523,1597],{"class":78},[72,5525,5526],{"class":366},"\"二维数组第一个元素的首地址:\"",[72,5528,1597],{"class":78},[72,5530,564],{"class":82},[72,5532,567],{"class":78},[72,5534,983],{"class":82},[72,5536,907],{"class":78},[72,5538,4334],{"class":82},[72,5540,747],{"class":362},[72,5542,5329],{"class":82},[72,5544,747],{"class":362},[72,5546,1494],{"class":82},[72,5548,1597],{"class":78},[72,5550,1667],{"class":82},[72,5552,5553],{"class":621},"\u002F\u002F对于数，要加取址符\n",[473,5555,5556],{},"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":68,"searchDepth":370,"depth":370,"links":5558},[5559,5560,5561,5569,5570,5576,5581],{"id":506,"depth":370,"text":507},{"id":513,"depth":370,"text":514},{"id":528,"depth":370,"text":529,"children":5562},[5563,5564,5565,5566,5567,5568],{"id":533,"depth":1608,"text":534},{"id":580,"depth":1608,"text":581},{"id":648,"depth":1608,"text":649},{"id":1578,"depth":1608,"text":1579},{"id":1673,"depth":1608,"text":1674},{"id":1772,"depth":1608,"text":1773},{"id":1814,"depth":370,"text":1815},{"id":1882,"depth":370,"text":1883,"children":5571},[5572,5573,5574,5575],{"id":1886,"depth":1608,"text":1887},{"id":1908,"depth":1608,"text":1909},{"id":1917,"depth":1608,"text":1918},{"id":1926,"depth":1608,"text":1927},{"id":1935,"depth":370,"text":1936,"children":5577},[5578,5579,5580],{"id":1939,"depth":1608,"text":1940},{"id":2633,"depth":1608,"text":2634},{"id":4049,"depth":1608,"text":4050},{"id":4190,"depth":370,"text":4191,"children":5582},[5583,5584],{"id":4194,"depth":1608,"text":4195},{"id":5222,"depth":1608,"text":5223},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":498,"description":68},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5591,"title":5592,"body":5593,"description":68,"extension":487,"meta":6691,"navigation":490,"path":6692,"seo":6693,"stem":6694,"__hash__":6695},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5594,"toc":6683},[5595,5598,5602,5610,5616,5619,5685,5689,5692,5768,5772,5775,5778,5781,5994,5998,6003,6067,6072,6139,6144,6235,6238,6343,6347,6350,6356,6500,6504,6507,6521,6524,6569,6572,6680],[10,5596,5592],{"id":5597},"_2函数",[85,5599,5601],{"id":5600},"_21函数概述","2.1函数概述",[22,5603,5604,5607],{},[25,5605,5606],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[25,5608,5609],{},"语法：",[63,5611,5614],{"className":5612,"code":5613,"language":127,"meta":68},[125],"返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n",[34,5615,5613],{"__ignoreMap":68},[15,5617,5618],{},"小案例",[63,5620,5622],{"className":552,"code":5621,"language":554,"meta":68,"style":68},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[34,5623,5624,5629,5653,5657,5674,5681],{"__ignoreMap":68},[72,5625,5626],{"class":74,"line":75},[72,5627,5628],{"class":621},"\u002F\u002Fnum1,num2形参\n",[72,5630,5631,5633,5636,5638,5640,5644,5646,5648,5651],{"class":74,"line":370},[72,5632,567],{"class":78},[72,5634,5635],{"class":358}," add",[72,5637,564],{"class":82},[72,5639,567],{"class":78},[72,5641,5643],{"class":5642},"s4XuR"," num1",[72,5645,932],{"class":82},[72,5647,567],{"class":78},[72,5649,5650],{"class":5642}," num2",[72,5652,570],{"class":82},[72,5654,5655],{"class":74,"line":1608},[72,5656,1975],{"class":82},[72,5658,5659,5661,5664,5666,5669,5671],{"class":74,"line":1623},[72,5660,2413],{"class":78},[72,5662,5663],{"class":82}," sum",[72,5665,609],{"class":78},[72,5667,5668],{"class":82},"num1",[72,5670,1035],{"class":78},[72,5672,5673],{"class":82},"num2;\n",[72,5675,5676,5678],{"class":74,"line":1629},[72,5677,4518],{"class":78},[72,5679,5680],{"class":82}," sum;\n",[72,5682,5683],{"class":74,"line":1643},[72,5684,1994],{"class":82},[85,5686,5688],{"id":5687},"_22函数调用","2.2函数调用",[15,5690,5691],{},"调用刚刚写的求和函数",[63,5693,5695],{"className":552,"code":5694,"language":554,"meta":68,"style":68},"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",[34,5696,5697,5705,5709,5714,5726,5738,5747,5752,5764],{"__ignoreMap":68},[72,5698,5699,5701,5703],{"class":74,"line":75},[72,5700,567],{"class":78},[72,5702,2401],{"class":358},[72,5704,2404],{"class":82},[72,5706,5707],{"class":74,"line":370},[72,5708,1975],{"class":82},[72,5710,5711],{"class":74,"line":1608},[72,5712,5713],{"class":621},"    \u002F\u002Fa,b实参\n",[72,5715,5716,5718,5720,5722,5724],{"class":74,"line":1623},[72,5717,2413],{"class":78},[72,5719,1827],{"class":82},[72,5721,609],{"class":78},[72,5723,747],{"class":362},[72,5725,1719],{"class":82},[72,5727,5728,5730,5732,5734,5736],{"class":74,"line":1629},[72,5729,2413],{"class":78},[72,5731,3261],{"class":82},[72,5733,609],{"class":78},[72,5735,747],{"class":362},[72,5737,1719],{"class":82},[72,5739,5740,5742,5744],{"class":74,"line":1643},[72,5741,2440],{"class":82},[72,5743,1858],{"class":78},[72,5745,5746],{"class":82},"a,b;\n",[72,5748,5749],{"class":74,"line":1649},[72,5750,5751],{"class":621},"    \u002F\u002F调用函数时，实参值传给了形参\n",[72,5753,5754,5756,5758,5761],{"class":74,"line":1740},[72,5755,1980],{"class":82},[72,5757,1597],{"class":78},[72,5759,5760],{"class":358},"add",[72,5762,5763],{"class":82},"(a,b);\n",[72,5765,5766],{"class":74,"line":1746},[72,5767,1994],{"class":82},[85,5769,5771],{"id":5770},"_23值传递","2.3值传递",[15,5773,5774],{},"值传递就是函数调用时实参将数值传给形参",[15,5776,5777],{},"值传递时，如果形参发生任何改变，不会影响实参",[15,5779,5780],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[63,5782,5784],{"className":552,"code":5783,"language":554,"meta":68,"style":68},"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",[34,5785,5786,5808,5812,5825,5842,5860,5871,5880,5889,5902,5918,5934,5943,5947,5955,5959,5971,5983,5990],{"__ignoreMap":68},[72,5787,5788,5791,5794,5796,5798,5800,5802,5804,5806],{"class":74,"line":75},[72,5789,5790],{"class":78},"void",[72,5792,5793],{"class":358}," swap",[72,5795,564],{"class":82},[72,5797,567],{"class":78},[72,5799,5643],{"class":5642},[72,5801,932],{"class":82},[72,5803,567],{"class":78},[72,5805,5650],{"class":5642},[72,5807,570],{"class":82},[72,5809,5810],{"class":74,"line":370},[72,5811,1975],{"class":82},[72,5813,5814,5816,5818,5821,5823],{"class":74,"line":1608},[72,5815,1980],{"class":82},[72,5817,1597],{"class":78},[72,5819,5820],{"class":366},"\"交换前：\"",[72,5822,1597],{"class":78},[72,5824,1620],{"class":82},[72,5826,5827,5829,5831,5834,5836,5838,5840],{"class":74,"line":1623},[72,5828,1980],{"class":82},[72,5830,1597],{"class":78},[72,5832,5833],{"class":366},"\"num1=\"",[72,5835,1597],{"class":78},[72,5837,5668],{"class":82},[72,5839,1597],{"class":78},[72,5841,1620],{"class":82},[72,5843,5844,5846,5848,5851,5853,5856,5858],{"class":74,"line":1629},[72,5845,1980],{"class":82},[72,5847,1597],{"class":78},[72,5849,5850],{"class":366},"\"num2=\"",[72,5852,1597],{"class":78},[72,5854,5855],{"class":82},"num2",[72,5857,1597],{"class":78},[72,5859,1620],{"class":82},[72,5861,5862,5864,5866,5868],{"class":74,"line":1643},[72,5863,2413],{"class":78},[72,5865,4683],{"class":82},[72,5867,609],{"class":78},[72,5869,5870],{"class":82},"num1;\n",[72,5872,5873,5876,5878],{"class":74,"line":1649},[72,5874,5875],{"class":82},"    num1",[72,5877,609],{"class":78},[72,5879,5673],{"class":82},[72,5881,5882,5885,5887],{"class":74,"line":1740},[72,5883,5884],{"class":82},"    num2",[72,5886,609],{"class":78},[72,5888,4708],{"class":82},[72,5890,5891,5893,5895,5898,5900],{"class":74,"line":1746},[72,5892,1980],{"class":82},[72,5894,1597],{"class":78},[72,5896,5897],{"class":366},"\"交换后：\"",[72,5899,1597],{"class":78},[72,5901,1620],{"class":82},[72,5903,5904,5906,5908,5910,5912,5914,5916],{"class":74,"line":1758},[72,5905,1980],{"class":82},[72,5907,1597],{"class":78},[72,5909,5833],{"class":366},[72,5911,1597],{"class":78},[72,5913,5668],{"class":82},[72,5915,1597],{"class":78},[72,5917,1620],{"class":82},[72,5919,5920,5922,5924,5926,5928,5930,5932],{"class":74,"line":2041},[72,5921,1980],{"class":82},[72,5923,1597],{"class":78},[72,5925,5850],{"class":366},[72,5927,1597],{"class":78},[72,5929,5855],{"class":82},[72,5931,1597],{"class":78},[72,5933,1620],{"class":82},[72,5935,5936,5938,5940],{"class":74,"line":2046},[72,5937,4518],{"class":78},[72,5939,618],{"class":82},[72,5941,5942],{"class":621},"\u002F\u002F或者不写\n",[72,5944,5945],{"class":74,"line":2052},[72,5946,1994],{"class":82},[72,5948,5949,5951,5953],{"class":74,"line":2057},[72,5950,567],{"class":78},[72,5952,2401],{"class":358},[72,5954,2404],{"class":82},[72,5956,5957],{"class":74,"line":2071},[72,5958,1975],{"class":82},[72,5960,5961,5963,5965,5967,5969],{"class":74,"line":2076},[72,5962,2413],{"class":78},[72,5964,1827],{"class":82},[72,5966,609],{"class":78},[72,5968,1000],{"class":362},[72,5970,1719],{"class":82},[72,5972,5973,5975,5977,5979,5981],{"class":74,"line":2082},[72,5974,2413],{"class":78},[72,5976,3261],{"class":82},[72,5978,609],{"class":78},[72,5980,1254],{"class":362},[72,5982,1719],{"class":82},[72,5984,5985,5988],{"class":74,"line":2103},[72,5986,5987],{"class":358},"    swap",[72,5989,5763],{"class":82},[72,5991,5992],{"class":74,"line":2108},[72,5993,1994],{"class":82},[85,5995,5997],{"id":5996},"_24函数的常见形式","2.4函数的常见形式",[22,5999,6000],{},[25,6001,6002],{},"无参无返",[63,6004,6006],{"className":552,"code":6005,"language":554,"meta":68,"style":68},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[34,6007,6008,6017,6021,6034,6038,6046,6050,6055,6063],{"__ignoreMap":68},[72,6009,6010,6012,6015],{"class":74,"line":75},[72,6011,5790],{"class":78},[72,6013,6014],{"class":358}," test01",[72,6016,2404],{"class":82},[72,6018,6019],{"class":74,"line":370},[72,6020,1975],{"class":82},[72,6022,6023,6025,6027,6030,6032],{"class":74,"line":1608},[72,6024,1980],{"class":82},[72,6026,1597],{"class":78},[72,6028,6029],{"class":366},"\"你好\"",[72,6031,1597],{"class":78},[72,6033,1620],{"class":82},[72,6035,6036],{"class":74,"line":1623},[72,6037,1994],{"class":82},[72,6039,6040,6042,6044],{"class":74,"line":1629},[72,6041,567],{"class":78},[72,6043,2401],{"class":358},[72,6045,2404],{"class":82},[72,6047,6048],{"class":74,"line":1643},[72,6049,1975],{"class":82},[72,6051,6052],{"class":74,"line":1649},[72,6053,6054],{"class":621},"    \u002F\u002F函数调用\n",[72,6056,6057,6060],{"class":74,"line":1740},[72,6058,6059],{"class":358},"    test01",[72,6061,6062],{"class":82},"();\n",[72,6064,6065],{"class":74,"line":1746},[72,6066,1994],{"class":82},[22,6068,6069],{"start":370},[25,6070,6071],{},"有参无返",[63,6073,6075],{"className":552,"code":6074,"language":554,"meta":68,"style":68},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[34,6076,6077,6092,6096,6108,6112,6120,6124,6135],{"__ignoreMap":68},[72,6078,6079,6081,6084,6086,6088,6090],{"class":74,"line":75},[72,6080,5790],{"class":78},[72,6082,6083],{"class":358}," test02",[72,6085,564],{"class":82},[72,6087,567],{"class":78},[72,6089,1827],{"class":5642},[72,6091,570],{"class":82},[72,6093,6094],{"class":74,"line":370},[72,6095,1975],{"class":82},[72,6097,6098,6100,6102,6104,6106],{"class":74,"line":1608},[72,6099,1980],{"class":82},[72,6101,1597],{"class":78},[72,6103,6029],{"class":366},[72,6105,1597],{"class":78},[72,6107,1620],{"class":82},[72,6109,6110],{"class":74,"line":1623},[72,6111,1994],{"class":82},[72,6113,6114,6116,6118],{"class":74,"line":1629},[72,6115,567],{"class":78},[72,6117,2401],{"class":358},[72,6119,2404],{"class":82},[72,6121,6122],{"class":74,"line":1643},[72,6123,1975],{"class":82},[72,6125,6126,6129,6131,6133],{"class":74,"line":1649},[72,6127,6128],{"class":358},"    test02",[72,6130,564],{"class":82},[72,6132,865],{"class":362},[72,6134,3147],{"class":82},[72,6136,6137],{"class":74,"line":1740},[72,6138,1994],{"class":82},[22,6140,6141],{"start":1608},[25,6142,6143],{},"无参有返",[63,6145,6147],{"className":552,"code":6146,"language":554,"meta":68,"style":68},"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",[34,6148,6149,6158,6162,6174,6183,6187,6195,6199,6212,6231],{"__ignoreMap":68},[72,6150,6151,6153,6156],{"class":74,"line":75},[72,6152,567],{"class":78},[72,6154,6155],{"class":358}," test03",[72,6157,2404],{"class":82},[72,6159,6160],{"class":74,"line":370},[72,6161,1975],{"class":82},[72,6163,6164,6166,6168,6170,6172],{"class":74,"line":1608},[72,6165,1980],{"class":82},[72,6167,1597],{"class":78},[72,6169,6029],{"class":366},[72,6171,1597],{"class":78},[72,6173,1620],{"class":82},[72,6175,6176,6178,6181],{"class":74,"line":1623},[72,6177,4518],{"class":78},[72,6179,6180],{"class":362}," 100",[72,6182,1719],{"class":82},[72,6184,6185],{"class":74,"line":1629},[72,6186,1994],{"class":82},[72,6188,6189,6191,6193],{"class":74,"line":1643},[72,6190,567],{"class":78},[72,6192,2401],{"class":358},[72,6194,2404],{"class":82},[72,6196,6197],{"class":74,"line":1649},[72,6198,1975],{"class":82},[72,6200,6201,6203,6205,6207,6210],{"class":74,"line":1740},[72,6202,2413],{"class":78},[72,6204,5643],{"class":82},[72,6206,609],{"class":78},[72,6208,6209],{"class":358},"test03",[72,6211,6062],{"class":82},[72,6213,6214,6216,6218,6220,6222,6224,6226,6228],{"class":74,"line":1746},[72,6215,1980],{"class":82},[72,6217,1597],{"class":78},[72,6219,5833],{"class":366},[72,6221,1597],{"class":78},[72,6223,5668],{"class":82},[72,6225,1597],{"class":78},[72,6227,1667],{"class":82},[72,6229,6230],{"class":621}," \u002F\u002F100\n",[72,6232,6233],{"class":74,"line":1758},[72,6234,1994],{"class":82},[15,6236,6237],{},"4.有参有返",[63,6239,6241],{"className":552,"code":6240,"language":554,"meta":68,"style":68},"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",[34,6242,6243,6258,6262,6275,6281,6285,6294,6298,6310,6324,6339],{"__ignoreMap":68},[72,6244,6245,6247,6250,6252,6254,6256],{"class":74,"line":75},[72,6246,567],{"class":78},[72,6248,6249],{"class":358}," test04",[72,6251,564],{"class":82},[72,6253,567],{"class":78},[72,6255,1827],{"class":5642},[72,6257,570],{"class":82},[72,6259,6260],{"class":74,"line":370},[72,6261,1975],{"class":82},[72,6263,6264,6266,6268,6271,6273],{"class":74,"line":1608},[72,6265,1980],{"class":82},[72,6267,1597],{"class":78},[72,6269,6270],{"class":366},"\"hello\"",[72,6272,1597],{"class":78},[72,6274,1620],{"class":82},[72,6276,6277,6279],{"class":74,"line":1623},[72,6278,4518],{"class":78},[72,6280,1861],{"class":82},[72,6282,6283],{"class":74,"line":1629},[72,6284,1994],{"class":82},[72,6286,6287,6289,6292],{"class":74,"line":1643},[72,6288,567],{"class":78},[72,6290,6291],{"class":358}," mian",[72,6293,2404],{"class":82},[72,6295,6296],{"class":74,"line":1649},[72,6297,1975],{"class":82},[72,6299,6300,6302,6304,6306,6308],{"class":74,"line":1740},[72,6301,2413],{"class":78},[72,6303,3261],{"class":82},[72,6305,609],{"class":78},[72,6307,772],{"class":362},[72,6309,1719],{"class":82},[72,6311,6312,6314,6316,6318,6321],{"class":74,"line":1746},[72,6313,2413],{"class":78},[72,6315,3277],{"class":82},[72,6317,609],{"class":78},[72,6319,6320],{"class":358},"test04",[72,6322,6323],{"class":82},"(b);\n",[72,6325,6326,6328,6330,6332,6334,6336],{"class":74,"line":1758},[72,6327,1980],{"class":82},[72,6329,1597],{"class":78},[72,6331,842],{"class":82},[72,6333,1597],{"class":78},[72,6335,1667],{"class":82},[72,6337,6338],{"class":621}," \u002F\u002F1\n",[72,6340,6341],{"class":74,"line":2041},[72,6342,1994],{"class":82},[85,6344,6346],{"id":6345},"_25函数的声明","2.5函数的声明",[15,6348,6349],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[15,6351,6352,6353],{},"函数的",[707,6354,6355],{},"声明可以多次，但是函数的定义只能有一次",[63,6357,6359],{"className":552,"code":6358,"language":554,"meta":68,"style":68},"\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",[34,6360,6361,6366,6371,6396,6405,6409,6421,6433,6449,6453,6473,6477,6496],{"__ignoreMap":68},[72,6362,6363],{"class":74,"line":75},[72,6364,6365],{"class":621},"\u002F\u002F函数声明\n",[72,6367,6368],{"class":74,"line":370},[72,6369,6370],{"class":621},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[72,6372,6373,6375,6378,6380,6382,6384,6386,6388,6390,6393],{"class":74,"line":1608},[72,6374,567],{"class":78},[72,6376,6377],{"class":358}," max",[72,6379,564],{"class":82},[72,6381,567],{"class":78},[72,6383,1827],{"class":5642},[72,6385,932],{"class":82},[72,6387,567],{"class":78},[72,6389,3261],{"class":5642},[72,6391,6392],{"class":82},");",[72,6394,6395],{"class":621},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[72,6397,6398,6400,6402],{"class":74,"line":1623},[72,6399,567],{"class":78},[72,6401,2401],{"class":358},[72,6403,6404],{"class":82},"() \n",[72,6406,6407],{"class":74,"line":1629},[72,6408,1975],{"class":82},[72,6410,6411,6413,6415,6417,6419],{"class":74,"line":1643},[72,6412,2413],{"class":78},[72,6414,1827],{"class":82},[72,6416,609],{"class":78},[72,6418,1000],{"class":362},[72,6420,1719],{"class":82},[72,6422,6423,6425,6427,6429,6431],{"class":74,"line":1649},[72,6424,2413],{"class":78},[72,6426,3261],{"class":82},[72,6428,609],{"class":78},[72,6430,1254],{"class":362},[72,6432,1719],{"class":82},[72,6434,6435,6437,6439,6442,6445,6447],{"class":74,"line":1740},[72,6436,1980],{"class":82},[72,6438,1597],{"class":78},[72,6440,6441],{"class":358},"max",[72,6443,6444],{"class":82},"(a,b)",[72,6446,1597],{"class":78},[72,6448,1620],{"class":82},[72,6450,6451],{"class":74,"line":1746},[72,6452,1994],{"class":82},[72,6454,6455,6457,6459,6461,6463,6465,6467,6469,6471],{"class":74,"line":1758},[72,6456,567],{"class":78},[72,6458,6377],{"class":358},[72,6460,564],{"class":82},[72,6462,567],{"class":78},[72,6464,1827],{"class":5642},[72,6466,932],{"class":82},[72,6468,567],{"class":78},[72,6470,3261],{"class":5642},[72,6472,570],{"class":82},[72,6474,6475],{"class":74,"line":2041},[72,6476,1975],{"class":82},[72,6478,6479,6481,6483,6485,6487,6489,6491,6493],{"class":74,"line":2046},[72,6480,4518],{"class":78},[72,6482,1827],{"class":82},[72,6484,1514],{"class":78},[72,6486,817],{"class":82},[72,6488,1540],{"class":78},[72,6490,257],{"class":82},[72,6492,1413],{"class":78},[72,6494,6495],{"class":82},"b;\n",[72,6497,6498],{"class":74,"line":2052},[72,6499,1994],{"class":82},[85,6501,6503],{"id":6502},"_26函数的分文件编写","2.6函数的分文件编写",[15,6505,6506],{},"4个步骤：",[251,6508,6509,6512,6515,6518],{},[25,6510,6511],{},"1.创建后缀名为.h的头文件",[25,6513,6514],{},"2.创建后缀名为.cpp的源文件",[25,6516,6517],{},"3.在头文件中写函数的定义",[25,6519,6520],{},"4.在源文件中写函数的定义\n示例：",[15,6522,6523],{},"头文件：swap.h",[63,6525,6527],{"className":552,"code":6526,"language":554,"meta":68,"style":68},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[34,6528,6529,6535,6545,6549],{"__ignoreMap":68},[72,6530,6531,6533],{"class":74,"line":75},[72,6532,2378],{"class":78},[72,6534,2381],{"class":366},[72,6536,6537,6539,6541,6543],{"class":74,"line":370},[72,6538,2386],{"class":78},[72,6540,2389],{"class":78},[72,6542,2392],{"class":358},[72,6544,1719],{"class":82},[72,6546,6547],{"class":74,"line":1608},[72,6548,6365],{"class":621},[72,6550,6551,6553,6555,6557,6559,6561,6563,6565,6567],{"class":74,"line":1623},[72,6552,5790],{"class":78},[72,6554,5793],{"class":358},[72,6556,564],{"class":82},[72,6558,567],{"class":78},[72,6560,1827],{"class":5642},[72,6562,932],{"class":82},[72,6564,567],{"class":78},[72,6566,3261],{"class":5642},[72,6568,3147],{"class":82},[15,6570,6571],{},"源文件：swap.cpp",[63,6573,6575],{"className":552,"code":6574,"language":554,"meta":68,"style":68},"#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",[34,6576,6577,6584,6589,6609,6613,6624,6633,6642,6659,6676],{"__ignoreMap":68},[72,6578,6579,6581],{"class":74,"line":75},[72,6580,2378],{"class":78},[72,6582,6583],{"class":366}," \"swap.h\"\n",[72,6585,6586],{"class":74,"line":370},[72,6587,6588],{"class":621},"\u002F\u002F函数的定义\n",[72,6590,6591,6593,6595,6597,6599,6601,6603,6605,6607],{"class":74,"line":1608},[72,6592,5790],{"class":78},[72,6594,5793],{"class":358},[72,6596,564],{"class":82},[72,6598,567],{"class":78},[72,6600,1827],{"class":5642},[72,6602,932],{"class":82},[72,6604,567],{"class":78},[72,6606,3261],{"class":5642},[72,6608,570],{"class":82},[72,6610,6611],{"class":74,"line":1623},[72,6612,1975],{"class":82},[72,6614,6615,6617,6619,6621],{"class":74,"line":1629},[72,6616,2413],{"class":78},[72,6618,4683],{"class":82},[72,6620,609],{"class":78},[72,6622,6623],{"class":82},"a;\n",[72,6625,6626,6629,6631],{"class":74,"line":1643},[72,6627,6628],{"class":82},"    a",[72,6630,609],{"class":78},[72,6632,6495],{"class":82},[72,6634,6635,6638,6640],{"class":74,"line":1649},[72,6636,6637],{"class":82},"    b",[72,6639,609],{"class":78},[72,6641,4708],{"class":82},[72,6643,6644,6646,6648,6651,6653,6655,6657],{"class":74,"line":1740},[72,6645,1980],{"class":82},[72,6647,1597],{"class":78},[72,6649,6650],{"class":366},"\"a=\"",[72,6652,1597],{"class":78},[72,6654,257],{"class":82},[72,6656,1597],{"class":78},[72,6658,1620],{"class":82},[72,6660,6661,6663,6665,6668,6670,6672,6674],{"class":74,"line":1746},[72,6662,1980],{"class":82},[72,6664,1597],{"class":78},[72,6666,6667],{"class":366},"\"b=\"",[72,6669,1597],{"class":78},[72,6671,817],{"class":82},[72,6673,1597],{"class":78},[72,6675,1620],{"class":82},[72,6677,6678],{"class":74,"line":1758},[72,6679,1994],{"class":82},[473,6681,6682],{},"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":68,"searchDepth":370,"depth":370,"links":6684},[6685,6686,6687,6688,6689,6690],{"id":5600,"depth":370,"text":5601},{"id":5687,"depth":370,"text":5688},{"id":5770,"depth":370,"text":5771},{"id":5996,"depth":370,"text":5997},{"id":6345,"depth":370,"text":6346},{"id":6502,"depth":370,"text":6503},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5592,"description":68},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6697,"title":6698,"body":6699,"description":6706,"extension":487,"meta":8111,"navigation":490,"path":8112,"seo":8113,"stem":8114,"__hash__":8115},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6700,"toc":8101},[6701,6704,6707,6711,6873,6877,6880,6883,6886,6889,7029,7033,7036,7039,7042,7107,7111,7116,7183,7186,7190,7193,7204,7209,7229,7232,7237,7256,7259,7263,7282,7285,7289,7524,7528,7531,7534,7537,7699,7702,7706,7709,7715,8098],[10,6702,6698],{"id":6703},"_3指针",[15,6705,6706],{},"通过指针保存一个地址，指针就是个地址",[85,6708,6710],{"id":6709},"_31定义指针","3.1定义指针",[63,6712,6714],{"className":552,"code":6713,"language":554,"meta":68,"style":68},"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",[34,6715,6716,6724,6728,6733,6745,6750,6758,6768,6786,6806,6810,6815,6820,6825,6839,6855,6869],{"__ignoreMap":68},[72,6717,6718,6720,6722],{"class":74,"line":75},[72,6719,567],{"class":78},[72,6721,2401],{"class":358},[72,6723,2404],{"class":82},[72,6725,6726],{"class":74,"line":370},[72,6727,1975],{"class":82},[72,6729,6730],{"class":74,"line":1608},[72,6731,6732],{"class":621},"    \u002F\u002F1.定义指针\n",[72,6734,6735,6737,6739,6741,6743],{"class":74,"line":1623},[72,6736,2413],{"class":78},[72,6738,1827],{"class":82},[72,6740,609],{"class":78},[72,6742,1000],{"class":362},[72,6744,1719],{"class":82},[72,6746,6747],{"class":74,"line":1629},[72,6748,6749],{"class":621},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[72,6751,6752,6755],{"class":74,"line":1643},[72,6753,6754],{"class":78},"    int*",[72,6756,6757],{"class":82},"p;\n",[72,6759,6760,6763,6766],{"class":74,"line":1649},[72,6761,6762],{"class":82},"    p",[72,6764,6765],{"class":78},"=&",[72,6767,6623],{"class":82},[72,6769,6770,6772,6774,6777,6780,6782,6784],{"class":74,"line":1740},[72,6771,1980],{"class":82},[72,6773,1597],{"class":78},[72,6775,6776],{"class":366},"\"a的地址为：\"",[72,6778,6779],{"class":78},"\u003C\u003C&",[72,6781,257],{"class":82},[72,6783,1597],{"class":78},[72,6785,1620],{"class":82},[72,6787,6788,6790,6792,6795,6797,6799,6801,6803],{"class":74,"line":1746},[72,6789,1980],{"class":82},[72,6791,1597],{"class":78},[72,6793,6794],{"class":366},"\"指针p为：\"",[72,6796,1597],{"class":78},[72,6798,15],{"class":82},[72,6800,1597],{"class":78},[72,6802,1667],{"class":82},[72,6804,6805],{"class":621},"\u002F\u002F指针p表示的就是a的地址\n",[72,6807,6808],{"class":74,"line":1758},[72,6809,2828],{"emptyLinePlaceholder":490},[72,6811,6812],{"class":74,"line":2041},[72,6813,6814],{"class":621},"    \u002F\u002F2.使用指针\n",[72,6816,6817],{"class":74,"line":2046},[72,6818,6819],{"class":621},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[72,6821,6822],{"class":74,"line":2052},[72,6823,6824],{"class":621},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[72,6826,6827,6830,6832,6834,6837],{"class":74,"line":2057},[72,6828,6829],{"class":78},"    *",[72,6831,15],{"class":82},[72,6833,609],{"class":78},[72,6835,6836],{"class":362},"1000",[72,6838,1719],{"class":82},[72,6840,6841,6843,6846,6848,6850,6852],{"class":74,"line":2071},[72,6842,1980],{"class":82},[72,6844,6845],{"class":78},"\u003C\u003C*",[72,6847,15],{"class":82},[72,6849,1597],{"class":78},[72,6851,1667],{"class":82},[72,6853,6854],{"class":621},"\u002F\u002F1000\n",[72,6856,6857,6859,6861,6863,6865,6867],{"class":74,"line":2076},[72,6858,1980],{"class":82},[72,6860,1597],{"class":78},[72,6862,257],{"class":82},[72,6864,1597],{"class":78},[72,6866,1667],{"class":82},[72,6868,6854],{"class":621},[72,6870,6871],{"class":74,"line":2082},[72,6872,1994],{"class":82},[85,6874,6876],{"id":6875},"_32指针所占的内存空间","3.2指针所占的内存空间",[15,6878,6879],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[15,6881,6882],{},"在32位操作系统下：占用4个字节空间",[15,6884,6885],{},"在64位操作系统下：占用8个字节空间",[15,6887,6888],{},"上方是不管啥数据类型的",[63,6890,6892],{"className":552,"code":6891,"language":554,"meta":68,"style":68},"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",[34,6893,6894,6902,6906,6911,6923,6928,6933,6938,6951,6973,6999,7025],{"__ignoreMap":68},[72,6895,6896,6898,6900],{"class":74,"line":75},[72,6897,567],{"class":78},[72,6899,2401],{"class":358},[72,6901,2404],{"class":82},[72,6903,6904],{"class":74,"line":370},[72,6905,1975],{"class":82},[72,6907,6908],{"class":74,"line":1608},[72,6909,6910],{"class":621},"    \u002F\u002F指针所占内存空间\n",[72,6912,6913,6915,6917,6919,6921],{"class":74,"line":1623},[72,6914,2413],{"class":78},[72,6916,1827],{"class":82},[72,6918,609],{"class":78},[72,6920,1000],{"class":362},[72,6922,1719],{"class":82},[72,6924,6925],{"class":74,"line":1629},[72,6926,6927],{"class":621},"    \u002F\u002Fint *p;\n",[72,6929,6930],{"class":74,"line":1643},[72,6931,6932],{"class":621},"    \u002F\u002Fp=&a;\n",[72,6934,6935],{"class":74,"line":1649},[72,6936,6937],{"class":621},"    \u002F\u002F上述可以写为以下：\n",[72,6939,6940,6942,6945,6947,6949],{"class":74,"line":1740},[72,6941,2413],{"class":78},[72,6943,6944],{"class":78}," *",[72,6946,15],{"class":82},[72,6948,6765],{"class":78},[72,6950,6623],{"class":82},[72,6952,6953,6956,6958,6961,6963,6966,6968,6970],{"class":74,"line":1746},[72,6954,6955],{"class":82},"    cout ",[72,6957,1597],{"class":78},[72,6959,6960],{"class":366},"\"sizeof(int *)\"",[72,6962,1801],{"class":78},[72,6964,6965],{"class":82},"(p)",[72,6967,1597],{"class":78},[72,6969,1667],{"class":82},[72,6971,6972],{"class":621},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[72,6974,6975,6977,6979,6981,6983,6985,6987,6989,6991,6993,6996],{"class":74,"line":1758},[72,6976,6955],{"class":82},[72,6978,1597],{"class":78},[72,6980,6960],{"class":366},[72,6982,1801],{"class":78},[72,6984,564],{"class":82},[72,6986,567],{"class":78},[72,6988,6944],{"class":78},[72,6990,983],{"class":82},[72,6992,1597],{"class":78},[72,6994,6995],{"class":82},"endl",[72,6997,6998],{"class":621},"  \u002F\u002F4字节(32位的话)\n",[72,7000,7001,7003,7005,7008,7010,7012,7014,7016,7018,7020,7022],{"class":74,"line":2041},[72,7002,6955],{"class":82},[72,7004,1597],{"class":78},[72,7006,7007],{"class":366},"\"sizeof(char *)\"",[72,7009,1801],{"class":78},[72,7011,564],{"class":82},[72,7013,659],{"class":78},[72,7015,6944],{"class":78},[72,7017,983],{"class":82},[72,7019,1597],{"class":78},[72,7021,1667],{"class":82},[72,7023,7024],{"class":621}," \u002F\u002F4字节(32位的话)\n",[72,7026,7027],{"class":74,"line":2046},[72,7028,1994],{"class":82},[85,7030,7032],{"id":7031},"_33空指针","3.3空指针",[15,7034,7035],{},"空指针：指针变量指向内存中编号为0的空间",[15,7037,7038],{},"用途：初始化指针变量",[15,7040,7041],{},"注意：空指针指向的内存是不可以访问的",[63,7043,7045],{"className":552,"code":7044,"language":554,"meta":68,"style":68},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[34,7046,7047,7055,7059,7064,7078,7083,7098,7103],{"__ignoreMap":68},[72,7048,7049,7051,7053],{"class":74,"line":75},[72,7050,567],{"class":78},[72,7052,2401],{"class":358},[72,7054,2404],{"class":82},[72,7056,7057],{"class":74,"line":370},[72,7058,1975],{"class":82},[72,7060,7061],{"class":74,"line":1608},[72,7062,7063],{"class":621},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[72,7065,7066,7068,7070,7072,7074,7076],{"class":74,"line":1623},[72,7067,2413],{"class":78},[72,7069,6944],{"class":78},[72,7071,15],{"class":82},[72,7073,609],{"class":78},[72,7075,2820],{"class":362},[72,7077,1719],{"class":82},[72,7079,7080],{"class":74,"line":1629},[72,7081,7082],{"class":621},"    \u002F\u002F2.空指针不能进行访问\n",[72,7084,7085,7087,7089,7091,7093,7095],{"class":74,"line":1643},[72,7086,6829],{"class":78},[72,7088,15],{"class":82},[72,7090,609],{"class":78},[72,7092,865],{"class":362},[72,7094,618],{"class":82},[72,7096,7097],{"class":621},"\u002F\u002F直接报错，压根不能访问\n",[72,7099,7100],{"class":74,"line":1649},[72,7101,7102],{"class":621},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[72,7104,7105],{"class":74,"line":1740},[72,7106,1994],{"class":82},[85,7108,7110],{"id":7109},"_34野指针","3.4野指针",[15,7112,7113],{},[707,7114,7115],{},"指针变量指向非法的内存空间",[63,7117,7119],{"className":552,"code":7118,"language":554,"meta":68,"style":68},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[34,7120,7121,7129,7133,7162,7167,7179],{"__ignoreMap":68},[72,7122,7123,7125,7127],{"class":74,"line":75},[72,7124,567],{"class":78},[72,7126,2401],{"class":358},[72,7128,2404],{"class":82},[72,7130,7131],{"class":74,"line":370},[72,7132,1975],{"class":82},[72,7134,7135,7137,7139,7141,7143,7145,7147,7149,7151,7154,7157,7159],{"class":74,"line":1608},[72,7136,2413],{"class":78},[72,7138,6944],{"class":78},[72,7140,15],{"class":82},[72,7142,609],{"class":78},[72,7144,564],{"class":82},[72,7146,567],{"class":78},[72,7148,6944],{"class":78},[72,7150,983],{"class":82},[72,7152,7153],{"class":78},"0x",[72,7155,7156],{"class":362},"1100",[72,7158,618],{"class":82},[72,7160,7161],{"class":621}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[72,7163,7164],{"class":74,"line":1623},[72,7165,7166],{"class":621},"    \u002F\u002F访问野指针报错\n",[72,7168,7169,7171,7173,7175,7177],{"class":74,"line":1629},[72,7170,1980],{"class":82},[72,7172,6845],{"class":78},[72,7174,15],{"class":82},[72,7176,1597],{"class":78},[72,7178,1620],{"class":82},[72,7180,7181],{"class":74,"line":1643},[72,7182,1994],{"class":82},[15,7184,7185],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[85,7187,7189],{"id":7188},"_35const修饰指针","3.5const修饰指针",[15,7191,7192],{},"三种情况：",[251,7194,7195,7198,7201],{},[25,7196,7197],{},"const修饰指针 常量指针",[25,7199,7200],{},"const修饰常量 指针常量",[25,7202,7203],{},"const即修饰指针，又修饰常量",[22,7205,7206],{},[25,7207,7208],{},"常量指针",[63,7210,7212],{"className":552,"code":7211,"language":554,"meta":68,"style":68},"const int *p=&a;\n",[34,7213,7214],{"__ignoreMap":68},[72,7215,7216,7219,7221,7223,7225,7227],{"class":74,"line":75},[72,7217,7218],{"class":78},"const",[72,7220,2810],{"class":78},[72,7222,6944],{"class":78},[72,7224,15],{"class":82},[72,7226,6765],{"class":78},[72,7228,6623],{"class":82},[15,7230,7231],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[22,7233,7234],{"start":370},[25,7235,7236],{},"指针常量",[63,7238,7240],{"className":552,"code":7239,"language":554,"meta":68,"style":68},"int *const p=&a;\n",[34,7241,7242],{"__ignoreMap":68},[72,7243,7244,7246,7249,7252,7254],{"class":74,"line":75},[72,7245,567],{"class":78},[72,7247,7248],{"class":78}," *const",[72,7250,7251],{"class":82}," p",[72,7253,6765],{"class":78},[72,7255,6623],{"class":82},[15,7257,7258],{},"指针的指向不可以改，指针指向的值可以改",[22,7260,7261],{"start":1608},[25,7262,7203],{},[63,7264,7266],{"className":552,"code":7265,"language":554,"meta":68,"style":68},"const int *const p=&a;\n",[34,7267,7268],{"__ignoreMap":68},[72,7269,7270,7272,7274,7276,7278,7280],{"class":74,"line":75},[72,7271,7218],{"class":78},[72,7273,2810],{"class":78},[72,7275,7248],{"class":78},[72,7277,7251],{"class":82},[72,7279,6765],{"class":78},[72,7281,6623],{"class":82},[15,7283,7284],{},"指针的指向和指针指向的值都不可以改变",[85,7286,7288],{"id":7287},"_36指针和数组","3.6指针和数组",[63,7290,7292],{"className":552,"code":7291,"language":554,"meta":68,"style":68},"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",[34,7293,7294,7302,7306,7311,7365,7386,7402,7418,7429,7446,7451,7465,7491,7495,7507,7516,7520],{"__ignoreMap":68},[72,7295,7296,7298,7300],{"class":74,"line":75},[72,7297,567],{"class":78},[72,7299,2401],{"class":358},[72,7301,2404],{"class":82},[72,7303,7304],{"class":74,"line":370},[72,7305,1975],{"class":82},[72,7307,7308],{"class":74,"line":1608},[72,7309,7310],{"class":621},"    \u002F\u002F利用指针访问数组中的元素\n",[72,7312,7313,7315,7317,7319,7321,7323,7325,7327,7329,7331,7333,7335,7337,7339,7341,7343,7345,7347,7349,7351,7353,7355,7357,7359,7361,7363],{"class":74,"line":1623},[72,7314,2413],{"class":78},[72,7316,4390],{"class":82},[72,7318,1000],{"class":362},[72,7320,1494],{"class":82},[72,7322,609],{"class":78},[72,7324,1450],{"class":82},[72,7326,772],{"class":362},[72,7328,932],{"class":82},[72,7330,640],{"class":362},[72,7332,932],{"class":82},[72,7334,634],{"class":362},[72,7336,932],{"class":82},[72,7338,847],{"class":362},[72,7340,932],{"class":82},[72,7342,873],{"class":362},[72,7344,932],{"class":82},[72,7346,898],{"class":362},[72,7348,932],{"class":82},[72,7350,923],{"class":362},[72,7352,932],{"class":82},[72,7354,949],{"class":362},[72,7356,932],{"class":82},[72,7358,974],{"class":362},[72,7360,932],{"class":82},[72,7362,1000],{"class":362},[72,7364,4423],{"class":82},[72,7366,7367,7369,7371,7374,7376,7378,7380,7382,7384],{"class":74,"line":1629},[72,7368,1980],{"class":82},[72,7370,1597],{"class":78},[72,7372,7373],{"class":366},"\"数组的第一个元素为：\"",[72,7375,1597],{"class":78},[72,7377,4334],{"class":82},[72,7379,747],{"class":362},[72,7381,1494],{"class":82},[72,7383,1597],{"class":78},[72,7385,1620],{"class":82},[72,7387,7388,7390,7392,7394,7396,7399],{"class":74,"line":1643},[72,7389,2413],{"class":78},[72,7391,6944],{"class":78},[72,7393,15],{"class":82},[72,7395,609],{"class":78},[72,7397,7398],{"class":82},"arr;",[72,7400,7401],{"class":621},"\u002F\u002F注意数才要加取地址符号&\n",[72,7403,7404,7406,7408,7410,7412,7414,7416],{"class":74,"line":1649},[72,7405,1980],{"class":82},[72,7407,1597],{"class":78},[72,7409,7373],{"class":366},[72,7411,6845],{"class":78},[72,7413,15],{"class":82},[72,7415,1597],{"class":78},[72,7417,1620],{"class":82},[72,7419,7420,7422,7424,7426],{"class":74,"line":1740},[72,7421,6762],{"class":82},[72,7423,2720],{"class":78},[72,7425,618],{"class":82},[72,7427,7428],{"class":621}," \u002F\u002F让指针向后偏移4个字节\n",[72,7430,7431,7433,7435,7438,7440,7442,7444],{"class":74,"line":1746},[72,7432,1980],{"class":82},[72,7434,1597],{"class":78},[72,7436,7437],{"class":366},"\"数组的第二个元素为：\"",[72,7439,6845],{"class":78},[72,7441,15],{"class":82},[72,7443,1597],{"class":78},[72,7445,1620],{"class":82},[72,7447,7448],{"class":74,"line":1758},[72,7449,7450],{"class":621},"    \u002F\u002F利用指针遍历数组\n",[72,7452,7453,7455,7457,7460,7462],{"class":74,"line":2041},[72,7454,2413],{"class":78},[72,7456,6944],{"class":78},[72,7458,7459],{"class":82},"p2",[72,7461,609],{"class":78},[72,7463,7464],{"class":82},"arr;\n",[72,7466,7467,7469,7471,7473,7475,7477,7479,7481,7483,7485,7487,7489],{"class":74,"line":2046},[72,7468,3629],{"class":78},[72,7470,2087],{"class":82},[72,7472,567],{"class":78},[72,7474,3460],{"class":82},[72,7476,609],{"class":78},[72,7478,747],{"class":362},[72,7480,3467],{"class":82},[72,7482,1464],{"class":78},[72,7484,1000],{"class":362},[72,7486,3467],{"class":82},[72,7488,2720],{"class":78},[72,7490,570],{"class":82},[72,7492,7493],{"class":74,"line":2052},[72,7494,2458],{"class":82},[72,7496,7497,7499,7501,7503,7505],{"class":74,"line":2057},[72,7498,3879],{"class":82},[72,7500,6845],{"class":78},[72,7502,7459],{"class":82},[72,7504,1597],{"class":78},[72,7506,1620],{"class":82},[72,7508,7509,7512,7514],{"class":74,"line":2071},[72,7510,7511],{"class":82},"        p2",[72,7513,2720],{"class":78},[72,7515,1719],{"class":82},[72,7517,7518],{"class":74,"line":2076},[72,7519,2615],{"class":82},[72,7521,7522],{"class":74,"line":2082},[72,7523,1994],{"class":82},[85,7525,7527],{"id":7526},"_37指针和函数","3.7指针和函数",[15,7529,7530],{},"利用指针做函数参数，可以修改实参的值",[15,7532,7533],{},"值传递：只改变形参，不改变实参",[15,7535,7536],{},"地址传递：",[63,7538,7540],{"className":552,"code":7539,"language":554,"meta":68,"style":68},"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",[34,7541,7542,7567,7571,7583,7594,7604,7608,7616,7620,7632,7644,7649,7665,7680,7695],{"__ignoreMap":68},[72,7543,7544,7546,7548,7550,7552,7554,7557,7559,7561,7563,7565],{"class":74,"line":75},[72,7545,5790],{"class":78},[72,7547,5793],{"class":358},[72,7549,564],{"class":82},[72,7551,567],{"class":78},[72,7553,6944],{"class":78},[72,7555,7556],{"class":5642},"p1",[72,7558,932],{"class":82},[72,7560,567],{"class":78},[72,7562,6944],{"class":78},[72,7564,7459],{"class":5642},[72,7566,570],{"class":82},[72,7568,7569],{"class":74,"line":370},[72,7570,1975],{"class":82},[72,7572,7573,7575,7577,7580],{"class":74,"line":1608},[72,7574,2413],{"class":78},[72,7576,4683],{"class":82},[72,7578,7579],{"class":78},"=*",[72,7581,7582],{"class":82},"p1;\n",[72,7584,7585,7587,7589,7591],{"class":74,"line":1623},[72,7586,6829],{"class":78},[72,7588,7556],{"class":82},[72,7590,7579],{"class":78},[72,7592,7593],{"class":82},"p2;\n",[72,7595,7596,7598,7600,7602],{"class":74,"line":1629},[72,7597,6829],{"class":78},[72,7599,7459],{"class":82},[72,7601,609],{"class":78},[72,7603,4708],{"class":82},[72,7605,7606],{"class":74,"line":1643},[72,7607,1994],{"class":82},[72,7609,7610,7612,7614],{"class":74,"line":1649},[72,7611,567],{"class":78},[72,7613,2401],{"class":358},[72,7615,2404],{"class":82},[72,7617,7618],{"class":74,"line":1740},[72,7619,1975],{"class":82},[72,7621,7622,7624,7626,7628,7630],{"class":74,"line":1746},[72,7623,2413],{"class":78},[72,7625,1827],{"class":82},[72,7627,609],{"class":78},[72,7629,1000],{"class":362},[72,7631,1719],{"class":82},[72,7633,7634,7636,7638,7640,7642],{"class":74,"line":1758},[72,7635,2413],{"class":78},[72,7637,3261],{"class":82},[72,7639,609],{"class":78},[72,7641,1254],{"class":362},[72,7643,1719],{"class":82},[72,7645,7646],{"class":74,"line":2041},[72,7647,7648],{"class":621},"    \u002F\u002F地址传递\n",[72,7650,7651,7653,7655,7657,7660,7662],{"class":74,"line":2046},[72,7652,5987],{"class":358},[72,7654,564],{"class":82},[72,7656,907],{"class":78},[72,7658,7659],{"class":82},"a,",[72,7661,907],{"class":78},[72,7663,7664],{"class":82},"b);\n",[72,7666,7667,7669,7671,7673,7675,7677],{"class":74,"line":2052},[72,7668,1980],{"class":82},[72,7670,1597],{"class":78},[72,7672,257],{"class":82},[72,7674,1597],{"class":78},[72,7676,1667],{"class":82},[72,7678,7679],{"class":621},"\u002F\u002F20\n",[72,7681,7682,7684,7686,7688,7690,7692],{"class":74,"line":2057},[72,7683,1980],{"class":82},[72,7685,1597],{"class":78},[72,7687,817],{"class":82},[72,7689,1597],{"class":78},[72,7691,1667],{"class":82},[72,7693,7694],{"class":621},"\u002F\u002F10\n",[72,7696,7697],{"class":74,"line":2071},[72,7698,1994],{"class":82},[15,7700,7701],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[85,7703,7705],{"id":7704},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[15,7707,7708],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[15,7710,7711,7712,7714],{},"例如数组：int arr",[72,7713,1000],{},"={4,3,6,9,1,2,10,8,7,5}",[63,7716,7718],{"className":552,"code":7717,"language":554,"meta":68,"style":68},"#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",[34,7719,7720,7726,7736,7760,7764,7795,7799,7833,7837,7855,7859,7870,7885,7900,7904,7908,7912,7916,7920,7928,7932,7937,7991,8003,8015,8020,8028,8032,8037,8062,8066,8081,8090,8094],{"__ignoreMap":68},[72,7721,7722,7724],{"class":74,"line":75},[72,7723,2378],{"class":78},[72,7725,2381],{"class":366},[72,7727,7728,7730,7732,7734],{"class":74,"line":370},[72,7729,2386],{"class":78},[72,7731,2389],{"class":78},[72,7733,2392],{"class":358},[72,7735,1719],{"class":82},[72,7737,7738,7740,7743,7745,7747,7749,7751,7753,7755,7758],{"class":74,"line":1608},[72,7739,5790],{"class":78},[72,7741,7742],{"class":358}," bubbleSort",[72,7744,564],{"class":82},[72,7746,567],{"class":78},[72,7748,6944],{"class":78},[72,7750,15],{"class":5642},[72,7752,932],{"class":82},[72,7754,567],{"class":78},[72,7756,7757],{"class":5642}," len",[72,7759,570],{"class":82},[72,7761,7762],{"class":74,"line":1623},[72,7763,1975],{"class":82},[72,7765,7766,7768,7770,7772,7774,7776,7778,7780,7782,7785,7787,7789,7791,7793],{"class":74,"line":1629},[72,7767,3629],{"class":78},[72,7769,564],{"class":82},[72,7771,567],{"class":78},[72,7773,3460],{"class":82},[72,7775,609],{"class":78},[72,7777,747],{"class":362},[72,7779,3467],{"class":82},[72,7781,1464],{"class":78},[72,7783,7784],{"class":82},"len",[72,7786,1086],{"class":78},[72,7788,772],{"class":362},[72,7790,3467],{"class":82},[72,7792,2720],{"class":78},[72,7794,570],{"class":82},[72,7796,7797],{"class":74,"line":1643},[72,7798,2458],{"class":82},[72,7800,7801,7803,7805,7807,7809,7811,7813,7815,7817,7819,7821,7823,7825,7827,7829,7831],{"class":74,"line":1649},[72,7802,3831],{"class":78},[72,7804,564],{"class":82},[72,7806,567],{"class":78},[72,7808,3838],{"class":82},[72,7810,609],{"class":78},[72,7812,747],{"class":362},[72,7814,3845],{"class":82},[72,7816,1464],{"class":78},[72,7818,7784],{"class":82},[72,7820,1086],{"class":78},[72,7822,995],{"class":82},[72,7824,1086],{"class":78},[72,7826,772],{"class":362},[72,7828,3845],{"class":82},[72,7830,2720],{"class":78},[72,7832,570],{"class":82},[72,7834,7835],{"class":74,"line":1740},[72,7836,2938],{"class":82},[72,7838,7839,7841,7844,7846,7849,7851,7853],{"class":74,"line":1746},[72,7840,5070],{"class":78},[72,7842,7843],{"class":82},"(p[j]",[72,7845,1514],{"class":78},[72,7847,7848],{"class":82},"p[j",[72,7850,1035],{"class":78},[72,7852,772],{"class":362},[72,7854,5085],{"class":82},[72,7856,7857],{"class":74,"line":1758},[72,7858,5090],{"class":82},[72,7860,7861,7863,7865,7867],{"class":74,"line":2041},[72,7862,5095],{"class":78},[72,7864,4683],{"class":82},[72,7866,609],{"class":78},[72,7868,7869],{"class":82},"p[j];\n",[72,7871,7872,7875,7877,7879,7881,7883],{"class":74,"line":2046},[72,7873,7874],{"class":82},"                p[j]",[72,7876,609],{"class":78},[72,7878,7848],{"class":82},[72,7880,1035],{"class":78},[72,7882,772],{"class":362},[72,7884,5118],{"class":82},[72,7886,7887,7890,7892,7894,7896,7898],{"class":74,"line":2052},[72,7888,7889],{"class":82},"                p[j",[72,7891,1035],{"class":78},[72,7893,772],{"class":362},[72,7895,1494],{"class":82},[72,7897,609],{"class":78},[72,7899,4708],{"class":82},[72,7901,7902],{"class":74,"line":2057},[72,7903,5138],{"class":82},[72,7905,7906],{"class":74,"line":2071},[72,7907,2957],{"class":82},[72,7909,7910],{"class":74,"line":2076},[72,7911,2615],{"class":82},[72,7913,7914],{"class":74,"line":2082},[72,7915,1994],{"class":82},[72,7917,7918],{"class":74,"line":2103},[72,7919,2828],{"emptyLinePlaceholder":490},[72,7921,7922,7924,7926],{"class":74,"line":2108},[72,7923,567],{"class":78},[72,7925,2401],{"class":358},[72,7927,2404],{"class":82},[72,7929,7930],{"class":74,"line":2122},[72,7931,1975],{"class":82},[72,7933,7934],{"class":74,"line":2127},[72,7935,7936],{"class":621},"    \u002F\u002F 1.创建数组\n",[72,7938,7939,7941,7943,7945,7947,7949,7951,7953,7955,7957,7959,7961,7963,7965,7967,7969,7971,7973,7975,7977,7979,7981,7983,7985,7987,7989],{"class":74,"line":2156},[72,7940,2413],{"class":78},[72,7942,4390],{"class":82},[72,7944,1000],{"class":362},[72,7946,1494],{"class":82},[72,7948,609],{"class":78},[72,7950,1450],{"class":82},[72,7952,847],{"class":362},[72,7954,932],{"class":82},[72,7956,634],{"class":362},[72,7958,932],{"class":82},[72,7960,898],{"class":362},[72,7962,932],{"class":82},[72,7964,974],{"class":362},[72,7966,932],{"class":82},[72,7968,772],{"class":362},[72,7970,932],{"class":82},[72,7972,640],{"class":362},[72,7974,932],{"class":82},[72,7976,1000],{"class":362},[72,7978,932],{"class":82},[72,7980,949],{"class":362},[72,7982,932],{"class":82},[72,7984,923],{"class":362},[72,7986,932],{"class":82},[72,7988,873],{"class":362},[72,7990,4423],{"class":82},[72,7992,7993,7995,7997,7999,8001],{"class":74,"line":2161},[72,7994,2413],{"class":78},[72,7996,7757],{"class":82},[72,7998,609],{"class":78},[72,8000,1000],{"class":362},[72,8002,1719],{"class":82},[72,8004,8005,8007,8009,8011,8013],{"class":74,"line":2178},[72,8006,2413],{"class":78},[72,8008,6944],{"class":78},[72,8010,15],{"class":82},[72,8012,609],{"class":78},[72,8014,7464],{"class":82},[72,8016,8017],{"class":74,"line":2183},[72,8018,8019],{"class":621},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[72,8021,8022,8025],{"class":74,"line":2188},[72,8023,8024],{"class":358},"    bubbleSort",[72,8026,8027],{"class":82},"(p,len);\n",[72,8029,8030],{"class":74,"line":2193},[72,8031,2828],{"emptyLinePlaceholder":490},[72,8033,8034],{"class":74,"line":2207},[72,8035,8036],{"class":621},"    \u002F\u002F 3.打印排序后的数组\n",[72,8038,8039,8041,8043,8045,8047,8049,8051,8053,8055,8058,8060],{"class":74,"line":2212},[72,8040,3629],{"class":78},[72,8042,2087],{"class":82},[72,8044,567],{"class":78},[72,8046,3460],{"class":82},[72,8048,609],{"class":78},[72,8050,747],{"class":362},[72,8052,3642],{"class":82},[72,8054,1464],{"class":78},[72,8056,8057],{"class":82},"len; i",[72,8059,2720],{"class":78},[72,8061,570],{"class":82},[72,8063,8064],{"class":74,"line":3005},[72,8065,2458],{"class":82},[72,8067,8068,8070,8072,8074,8076,8079],{"class":74,"line":3019},[72,8069,3879],{"class":82},[72,8071,6845],{"class":78},[72,8073,15],{"class":82},[72,8075,1597],{"class":78},[72,8077,8078],{"class":366},"\"\"",[72,8080,1719],{"class":82},[72,8082,8083,8086,8088],{"class":74,"line":3027},[72,8084,8085],{"class":82},"        p",[72,8087,2720],{"class":78},[72,8089,1719],{"class":82},[72,8091,8092],{"class":74,"line":3032},[72,8093,2615],{"class":82},[72,8095,8096],{"class":74,"line":3038},[72,8097,1994],{"class":82},[473,8099,8100],{},"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":68,"searchDepth":370,"depth":370,"links":8102},[8103,8104,8105,8106,8107,8108,8109,8110],{"id":6709,"depth":370,"text":6710},{"id":6875,"depth":370,"text":6876},{"id":7031,"depth":370,"text":7032},{"id":7109,"depth":370,"text":7110},{"id":7188,"depth":370,"text":7189},{"id":7287,"depth":370,"text":7288},{"id":7526,"depth":370,"text":7527},{"id":7704,"depth":370,"text":7705},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6698,"description":6706},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":8117,"title":8118,"body":8119,"description":8126,"extension":487,"meta":11100,"navigation":490,"path":11101,"seo":11102,"stem":11103,"__hash__":11104},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":8120,"toc":11091},[8121,8124,8127,8131,8134,8137,8148,8486,8489,8493,8496,8503,8758,8762,8765,8768,8923,8927,8930,8933,9139,9143,9146,9449,9452,9460,9464,9467,9618,9620,9631,9688,9692,9697,10354,10362,10365,10459,10462,11082,11088],[10,8122,8118],{"id":8123},"_4结构体",[15,8125,8126],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[85,8128,8130],{"id":8129},"_41结构体定义与使用","4.1结构体定义与使用",[15,8132,8133],{},"语法：struct 结构体名 {结构体成员列表}；",[15,8135,8136],{},"通过结构体创建变量的方式：",[251,8138,8139,8142,8145],{},[25,8140,8141],{},"struct 结构体名 变量名",[25,8143,8144],{},"struct 结构体名 变量名={成员1值，成员2值...}",[25,8146,8147],{},"定义结构体时顺便创建变量",[63,8149,8151],{"className":552,"code":8150,"language":554,"meta":68,"style":68},"#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",[34,8152,8153,8159,8169,8176,8181,8189,8193,8198,8202,8207,8212,8217,8224,8229,8236,8240,8247,8251,8255,8259,8263,8267,8271,8277,8281,8287,8295,8303,8307,8312,8317,8328,8333,8345,8356,8367,8372,8396,8401,8407,8434,8439,8445,8457,8469,8481],{"__ignoreMap":68},[72,8154,8155,8157],{"class":74,"line":75},[72,8156,2378],{"class":78},[72,8158,2381],{"class":366},[72,8160,8161,8163,8165,8167],{"class":74,"line":370},[72,8162,2386],{"class":78},[72,8164,2389],{"class":78},[72,8166,2392],{"class":358},[72,8168,1719],{"class":82},[72,8170,8171,8173],{"class":74,"line":1608},[72,8172,2378],{"class":78},[72,8174,8175],{"class":366},"\u003Cstring>\n",[72,8177,8178],{"class":74,"line":1623},[72,8179,8180],{"class":621},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[72,8182,8183,8186],{"class":74,"line":1629},[72,8184,8185],{"class":78},"struct",[72,8187,8188],{"class":358}," Student\n",[72,8190,8191],{"class":74,"line":1643},[72,8192,1975],{"class":82},[72,8194,8195],{"class":74,"line":1649},[72,8196,8197],{"class":621},"    \u002F\u002F成员列表\n",[72,8199,8200],{"class":74,"line":1740},[72,8201,2828],{"emptyLinePlaceholder":490},[72,8203,8204],{"class":74,"line":1746},[72,8205,8206],{"class":621},"    \u002F\u002F姓名\n",[72,8208,8209],{"class":74,"line":1758},[72,8210,8211],{"class":82},"    string name;\n",[72,8213,8214],{"class":74,"line":2041},[72,8215,8216],{"class":621},"    \u002F\u002F年龄\n",[72,8218,8219,8221],{"class":74,"line":2046},[72,8220,2413],{"class":78},[72,8222,8223],{"class":82}," age;\n",[72,8225,8226],{"class":74,"line":2052},[72,8227,8228],{"class":621},"    \u002F\u002F分数\n",[72,8230,8231,8233],{"class":74,"line":2057},[72,8232,2413],{"class":78},[72,8234,8235],{"class":82}," score;\n",[72,8237,8238],{"class":74,"line":2071},[72,8239,4423],{"class":82},[72,8241,8242,8244],{"class":74,"line":2076},[72,8243,8185],{"class":78},[72,8245,8246],{"class":358}," School\n",[72,8248,8249],{"class":74,"line":2082},[72,8250,1975],{"class":82},[72,8252,8253],{"class":74,"line":2103},[72,8254,8197],{"class":621},[72,8256,8257],{"class":74,"line":2108},[72,8258,2828],{"emptyLinePlaceholder":490},[72,8260,8261],{"class":74,"line":2122},[72,8262,8206],{"class":621},[72,8264,8265],{"class":74,"line":2127},[72,8266,8211],{"class":82},[72,8268,8269],{"class":74,"line":2156},[72,8270,8216],{"class":621},[72,8272,8273,8275],{"class":74,"line":2161},[72,8274,2413],{"class":78},[72,8276,8223],{"class":82},[72,8278,8279],{"class":74,"line":2178},[72,8280,8228],{"class":621},[72,8282,8283,8285],{"class":74,"line":2183},[72,8284,2413],{"class":78},[72,8286,8235],{"class":82},[72,8288,8289,8292],{"class":74,"line":2188},[72,8290,8291],{"class":82},"} s3;",[72,8293,8294],{"class":621}," \u002F\u002F创建结构体时就创建了变量\n",[72,8296,8297,8299,8301],{"class":74,"line":2193},[72,8298,567],{"class":78},[72,8300,2401],{"class":358},[72,8302,2404],{"class":82},[72,8304,8305],{"class":74,"line":2207},[72,8306,1975],{"class":82},[72,8308,8309],{"class":74,"line":2212},[72,8310,8311],{"class":621},"    \u002F\u002F2.通过学生类型创建具体学生\n",[72,8313,8314],{"class":74,"line":3005},[72,8315,8316],{"class":621},"    \u002F\u002F2.1 struct Student s1;\n",[72,8318,8319,8322,8325],{"class":74,"line":3019},[72,8320,8321],{"class":78},"    struct",[72,8323,8324],{"class":358}," Student",[72,8326,8327],{"class":82}," s1;\n",[72,8329,8330],{"class":74,"line":3027},[72,8331,8332],{"class":621},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[72,8334,8335,8338,8340,8343],{"class":74,"line":3032},[72,8336,8337],{"class":82},"    s1.name",[72,8339,609],{"class":78},[72,8341,8342],{"class":366},"\"张三\"",[72,8344,1719],{"class":82},[72,8346,8347,8350,8352,8354],{"class":74,"line":3038},[72,8348,8349],{"class":82},"    s1.age",[72,8351,609],{"class":78},[72,8353,1204],{"class":362},[72,8355,1719],{"class":82},[72,8357,8358,8361,8363,8365],{"class":74,"line":3044},[72,8359,8360],{"class":82},"    s1.score",[72,8362,609],{"class":78},[72,8364,808],{"class":362},[72,8366,1719],{"class":82},[72,8368,8369],{"class":74,"line":3049},[72,8370,8371],{"class":621},"    \u002F\u002F输出结果\n",[72,8373,8375,8377,8379,8382,8384,8387,8389,8392,8394],{"class":74,"line":8374},37,[72,8376,1980],{"class":82},[72,8378,1597],{"class":78},[72,8380,8381],{"class":82},"s1.name",[72,8383,1597],{"class":78},[72,8385,8386],{"class":82},"s1.age",[72,8388,1597],{"class":78},[72,8390,8391],{"class":82},"s1.score",[72,8393,1597],{"class":78},[72,8395,1620],{"class":82},[72,8397,8399],{"class":74,"line":8398},38,[72,8400,2828],{"emptyLinePlaceholder":490},[72,8402,8404],{"class":74,"line":8403},39,[72,8405,8406],{"class":621},"    \u002F\u002F2.2 struct Student s2={...}\n",[72,8408,8410,8412,8414,8417,8419,8421,8424,8426,8428,8430,8432],{"class":74,"line":8409},40,[72,8411,8321],{"class":78},[72,8413,8324],{"class":358},[72,8415,8416],{"class":82}," s2",[72,8418,609],{"class":78},[72,8420,1450],{"class":82},[72,8422,8423],{"class":366},"\"王五\"",[72,8425,932],{"class":82},[72,8427,1204],{"class":362},[72,8429,932],{"class":82},[72,8431,808],{"class":362},[72,8433,4423],{"class":82},[72,8435,8437],{"class":74,"line":8436},41,[72,8438,2828],{"emptyLinePlaceholder":490},[72,8440,8442],{"class":74,"line":8441},42,[72,8443,8444],{"class":621},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[72,8446,8448,8451,8453,8455],{"class":74,"line":8447},43,[72,8449,8450],{"class":82},"    s3.name",[72,8452,609],{"class":78},[72,8454,4106],{"class":366},[72,8456,1719],{"class":82},[72,8458,8460,8463,8465,8467],{"class":74,"line":8459},44,[72,8461,8462],{"class":82},"    s3.age",[72,8464,609],{"class":78},[72,8466,1204],{"class":362},[72,8468,1719],{"class":82},[72,8470,8472,8475,8477,8479],{"class":74,"line":8471},45,[72,8473,8474],{"class":82},"    s3.score",[72,8476,609],{"class":78},[72,8478,1254],{"class":362},[72,8480,1719],{"class":82},[72,8482,8484],{"class":74,"line":8483},46,[72,8485,1994],{"class":82},[15,8487,8488],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[85,8490,8492],{"id":8491},"_42结构体数组","4.2结构体数组",[15,8494,8495],{},"将自定义的结构体放入到数组中方便维护",[15,8497,8498,8499,8502],{},"语法：struct 结构体名 数组名",[72,8500,8501],{},"元素个数","={ {}，{},...{} };",[63,8504,8506],{"className":552,"code":8505,"language":554,"meta":68,"style":68},"#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",[34,8507,8508,8514,8524,8530,8535,8541,8545,8549,8555,8561,8565,8569,8577,8581,8586,8601,8605,8621,8637,8641,8646,8662,8677,8692,8697,8723,8727,8750,8754],{"__ignoreMap":68},[72,8509,8510,8512],{"class":74,"line":75},[72,8511,2378],{"class":78},[72,8513,2381],{"class":366},[72,8515,8516,8518,8520,8522],{"class":74,"line":370},[72,8517,2386],{"class":78},[72,8519,2389],{"class":78},[72,8521,2392],{"class":358},[72,8523,1719],{"class":82},[72,8525,8526,8528],{"class":74,"line":1608},[72,8527,2378],{"class":78},[72,8529,8175],{"class":366},[72,8531,8532],{"class":74,"line":1623},[72,8533,8534],{"class":621},"\u002F\u002F1.定义结构体\n",[72,8536,8537,8539],{"class":74,"line":1629},[72,8538,8185],{"class":78},[72,8540,8188],{"class":358},[72,8542,8543],{"class":74,"line":1643},[72,8544,1975],{"class":82},[72,8546,8547],{"class":74,"line":1649},[72,8548,8211],{"class":82},[72,8550,8551,8553],{"class":74,"line":1740},[72,8552,2413],{"class":78},[72,8554,8223],{"class":82},[72,8556,8557,8559],{"class":74,"line":1746},[72,8558,2413],{"class":78},[72,8560,8235],{"class":82},[72,8562,8563],{"class":74,"line":1758},[72,8564,2828],{"emptyLinePlaceholder":490},[72,8566,8567],{"class":74,"line":2041},[72,8568,4423],{"class":82},[72,8570,8571,8573,8575],{"class":74,"line":2046},[72,8572,567],{"class":78},[72,8574,2401],{"class":358},[72,8576,2404],{"class":82},[72,8578,8579],{"class":74,"line":2052},[72,8580,1975],{"class":82},[72,8582,8583],{"class":74,"line":2057},[72,8584,8585],{"class":621},"    \u002F\u002F2.创建结构体数组\n",[72,8587,8588,8590,8592,8595,8597,8599],{"class":74,"line":2071},[72,8589,8321],{"class":78},[72,8591,8324],{"class":358},[72,8593,8594],{"class":82}," stuArray[",[72,8596,640],{"class":362},[72,8598,1494],{"class":82},[72,8600,5336],{"class":78},[72,8602,8603],{"class":74,"line":2076},[72,8604,2458],{"class":82},[72,8606,8607,8609,8611,8613,8615,8617,8619],{"class":74,"line":2082},[72,8608,5345],{"class":82},[72,8610,8342],{"class":366},[72,8612,932],{"class":82},[72,8614,1204],{"class":362},[72,8616,932],{"class":82},[72,8618,865],{"class":362},[72,8620,5358],{"class":82},[72,8622,8623,8625,8627,8629,8631,8633,8635],{"class":74,"line":2103},[72,8624,5345],{"class":82},[72,8626,4106],{"class":366},[72,8628,932],{"class":82},[72,8630,1129],{"class":362},[72,8632,932],{"class":82},[72,8634,1129],{"class":362},[72,8636,1994],{"class":82},[72,8638,8639],{"class":74,"line":2108},[72,8640,2615],{"class":82},[72,8642,8643],{"class":74,"line":2122},[72,8644,8645],{"class":621},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[72,8647,8648,8651,8653,8656,8658,8660],{"class":74,"line":2127},[72,8649,8650],{"class":82},"    stuArray[",[72,8652,772],{"class":362},[72,8654,8655],{"class":82},"].name",[72,8657,609],{"class":78},[72,8659,4129],{"class":366},[72,8661,1719],{"class":82},[72,8663,8664,8666,8668,8671,8673,8675],{"class":74,"line":2156},[72,8665,8650],{"class":82},[72,8667,772],{"class":362},[72,8669,8670],{"class":82},"].age",[72,8672,609],{"class":78},[72,8674,640],{"class":362},[72,8676,1719],{"class":82},[72,8678,8679,8681,8683,8686,8688,8690],{"class":74,"line":2161},[72,8680,8650],{"class":82},[72,8682,772],{"class":362},[72,8684,8685],{"class":82},"].score",[72,8687,609],{"class":78},[72,8689,640],{"class":362},[72,8691,1719],{"class":82},[72,8693,8694],{"class":74,"line":2178},[72,8695,8696],{"class":621},"    \u002F\u002F4.遍历结构体数组\n",[72,8698,8699,8701,8703,8705,8707,8709,8711,8713,8715,8717,8719,8721],{"class":74,"line":2183},[72,8700,3629],{"class":78},[72,8702,2087],{"class":82},[72,8704,567],{"class":78},[72,8706,3460],{"class":82},[72,8708,609],{"class":78},[72,8710,747],{"class":362},[72,8712,3467],{"class":82},[72,8714,1464],{"class":78},[72,8716,640],{"class":362},[72,8718,3467],{"class":82},[72,8720,2720],{"class":78},[72,8722,570],{"class":82},[72,8724,8725],{"class":74,"line":2188},[72,8726,2458],{"class":82},[72,8728,8729,8731,8733,8736,8738,8741,8743,8746,8748],{"class":74,"line":2193},[72,8730,3879],{"class":82},[72,8732,1597],{"class":78},[72,8734,8735],{"class":82},"stuArray[i].name",[72,8737,1597],{"class":78},[72,8739,8740],{"class":82},"stuArray[i].age",[72,8742,1597],{"class":78},[72,8744,8745],{"class":82},"stuArray[i].score",[72,8747,1597],{"class":78},[72,8749,1620],{"class":82},[72,8751,8752],{"class":74,"line":2207},[72,8753,2615],{"class":82},[72,8755,8756],{"class":74,"line":2212},[72,8757,1994],{"class":82},[85,8759,8761],{"id":8760},"_43结构体指针","4.3结构体指针",[15,8763,8764],{},"作用：通过指针访问结构体中的成员",[15,8766,8767],{},"利用操作符->可以通过结构体指针访问结构体属性",[63,8769,8771],{"className":552,"code":8770,"language":554,"meta":68,"style":68},"#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",[34,8772,8773,8779,8789,8795,8799,8805,8809,8813,8819,8825,8829,8837,8841,8846,8871,8876,8891,8896,8919],{"__ignoreMap":68},[72,8774,8775,8777],{"class":74,"line":75},[72,8776,2378],{"class":78},[72,8778,2381],{"class":366},[72,8780,8781,8783,8785,8787],{"class":74,"line":370},[72,8782,2386],{"class":78},[72,8784,2389],{"class":78},[72,8786,2392],{"class":358},[72,8788,1719],{"class":82},[72,8790,8791,8793],{"class":74,"line":1608},[72,8792,2378],{"class":78},[72,8794,8175],{"class":366},[72,8796,8797],{"class":74,"line":1623},[72,8798,8534],{"class":621},[72,8800,8801,8803],{"class":74,"line":1629},[72,8802,8185],{"class":78},[72,8804,8188],{"class":358},[72,8806,8807],{"class":74,"line":1643},[72,8808,1975],{"class":82},[72,8810,8811],{"class":74,"line":1649},[72,8812,8211],{"class":82},[72,8814,8815,8817],{"class":74,"line":1740},[72,8816,2413],{"class":78},[72,8818,8223],{"class":82},[72,8820,8821,8823],{"class":74,"line":1746},[72,8822,2413],{"class":78},[72,8824,8235],{"class":82},[72,8826,8827],{"class":74,"line":1758},[72,8828,4423],{"class":82},[72,8830,8831,8833,8835],{"class":74,"line":2041},[72,8832,567],{"class":78},[72,8834,2401],{"class":358},[72,8836,2404],{"class":82},[72,8838,8839],{"class":74,"line":2046},[72,8840,1975],{"class":82},[72,8842,8843],{"class":74,"line":2052},[72,8844,8845],{"class":621},"    \u002F\u002F创建学生结构体变量\n",[72,8847,8848,8850,8852,8855,8857,8859,8861,8863,8865,8867,8869],{"class":74,"line":2057},[72,8849,8321],{"class":78},[72,8851,8324],{"class":358},[72,8853,8854],{"class":82}," s",[72,8856,609],{"class":78},[72,8858,1450],{"class":82},[72,8860,8342],{"class":366},[72,8862,932],{"class":82},[72,8864,1204],{"class":362},[72,8866,932],{"class":82},[72,8868,2151],{"class":362},[72,8870,4423],{"class":82},[72,8872,8873],{"class":74,"line":2071},[72,8874,8875],{"class":621},"    \u002F\u002F通过指针指向结构体变量\n",[72,8877,8878,8880,8882,8884,8886,8888],{"class":74,"line":2076},[72,8879,8321],{"class":78},[72,8881,8324],{"class":358},[72,8883,6944],{"class":78},[72,8885,15],{"class":82},[72,8887,6765],{"class":78},[72,8889,8890],{"class":82},"s\n",[72,8892,8893],{"class":74,"line":2082},[72,8894,8895],{"class":621},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[72,8897,8898,8900,8902,8905,8907,8910,8912,8915,8917],{"class":74,"line":2103},[72,8899,1980],{"class":82},[72,8901,1597],{"class":78},[72,8903,8904],{"class":82},"p->name",[72,8906,1597],{"class":78},[72,8908,8909],{"class":82},"p->age",[72,8911,1597],{"class":78},[72,8913,8914],{"class":82},"p->score",[72,8916,1597],{"class":78},[72,8918,1620],{"class":82},[72,8920,8921],{"class":74,"line":2108},[72,8922,1994],{"class":82},[85,8924,8926],{"id":8925},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[15,8928,8929],{},"作用：结构体中的成员可以是另一个结构体",[15,8931,8932],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[63,8934,8936],{"className":552,"code":8935,"language":554,"meta":68,"style":68},"#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",[34,8937,8938,8944,8954,8960,8965,8973,8977,8981,8987,8993,8997,9002,9009,9013,9020,9024,9030,9035,9039,9047,9051,9056,9061,9066,9077,9089,9100,9113,9124,9135],{"__ignoreMap":68},[72,8939,8940,8942],{"class":74,"line":75},[72,8941,2378],{"class":78},[72,8943,2381],{"class":366},[72,8945,8946,8948,8950,8952],{"class":74,"line":370},[72,8947,2386],{"class":78},[72,8949,2389],{"class":78},[72,8951,2392],{"class":358},[72,8953,1719],{"class":82},[72,8955,8956,8958],{"class":74,"line":1608},[72,8957,2378],{"class":78},[72,8959,8175],{"class":366},[72,8961,8962],{"class":74,"line":1623},[72,8963,8964],{"class":621},"\u002F\u002F定义学生结构体\n",[72,8966,8967,8969,8971],{"class":74,"line":1629},[72,8968,8185],{"class":78},[72,8970,8324],{"class":358},[72,8972,3102],{"class":82},[72,8974,8975],{"class":74,"line":1643},[72,8976,1975],{"class":82},[72,8978,8979],{"class":74,"line":1649},[72,8980,8211],{"class":82},[72,8982,8983,8985],{"class":74,"line":1740},[72,8984,2413],{"class":78},[72,8986,8223],{"class":82},[72,8988,8989,8991],{"class":74,"line":1746},[72,8990,2413],{"class":78},[72,8992,8235],{"class":82},[72,8994,8995],{"class":74,"line":1758},[72,8996,1994],{"class":82},[72,8998,8999],{"class":74,"line":2041},[72,9000,9001],{"class":621},"\u002F\u002F定义老师结构体\n",[72,9003,9004,9006],{"class":74,"line":2046},[72,9005,8185],{"class":78},[72,9007,9008],{"class":358}," Teacher\n",[72,9010,9011],{"class":74,"line":2052},[72,9012,1975],{"class":82},[72,9014,9015,9017],{"class":74,"line":2057},[72,9016,2413],{"class":78},[72,9018,9019],{"class":82}," id;\n",[72,9021,9022],{"class":74,"line":2071},[72,9023,8211],{"class":82},[72,9025,9026,9028],{"class":74,"line":2076},[72,9027,2413],{"class":78},[72,9029,8223],{"class":82},[72,9031,9032],{"class":74,"line":2082},[72,9033,9034],{"class":82},"    Student stu;\n",[72,9036,9037],{"class":74,"line":2103},[72,9038,1994],{"class":82},[72,9040,9041,9043,9045],{"class":74,"line":2108},[72,9042,567],{"class":78},[72,9044,2401],{"class":358},[72,9046,6404],{"class":82},[72,9048,9049],{"class":74,"line":2122},[72,9050,1975],{"class":82},[72,9052,9053],{"class":74,"line":2127},[72,9054,9055],{"class":621},"    \u002F\u002F结构体嵌套结构体\n",[72,9057,9058],{"class":74,"line":2156},[72,9059,9060],{"class":621},"    \u002F\u002F创建老师\n",[72,9062,9063],{"class":74,"line":2161},[72,9064,9065],{"class":82},"    Teacher t;\n",[72,9067,9068,9071,9073,9075],{"class":74,"line":2178},[72,9069,9070],{"class":82},"    t.id",[72,9072,609],{"class":78},[72,9074,865],{"class":362},[72,9076,1719],{"class":82},[72,9078,9079,9082,9084,9087],{"class":74,"line":2183},[72,9080,9081],{"class":82},"    t.name",[72,9083,609],{"class":78},[72,9085,9086],{"class":366},"\"老王\"",[72,9088,1719],{"class":82},[72,9090,9091,9094,9096,9098],{"class":74,"line":2188},[72,9092,9093],{"class":82},"    t.age",[72,9095,609],{"class":78},[72,9097,1204],{"class":362},[72,9099,1719],{"class":82},[72,9101,9102,9105,9107,9110],{"class":74,"line":2193},[72,9103,9104],{"class":82},"    t.stu.name",[72,9106,609],{"class":78},[72,9108,9109],{"class":366},"\"小王\"",[72,9111,9112],{"class":82},"；\n",[72,9114,9115,9118,9120,9122],{"class":74,"line":2207},[72,9116,9117],{"class":82},"    t.stu.age",[72,9119,609],{"class":78},[72,9121,1254],{"class":362},[72,9123,1719],{"class":82},[72,9125,9126,9129,9131,9133],{"class":74,"line":2212},[72,9127,9128],{"class":82},"    t.stu.score",[72,9130,609],{"class":78},[72,9132,898],{"class":362},[72,9134,1719],{"class":82},[72,9136,9137],{"class":74,"line":3005},[72,9138,1994],{"class":82},[85,9140,9142],{"id":9141},"_45结构体做函数参数","4.5结构体做函数参数",[15,9144,9145],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[63,9147,9149],{"className":552,"code":9148,"language":554,"meta":68,"style":68},"#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",[34,9150,9151,9157,9167,9173,9179,9183,9187,9193,9199,9203,9208,9213,9230,9234,9267,9271,9276,9295,9299,9330,9334,9342,9346,9355,9367,9379,9391,9404,9412,9425,9437,9445],{"__ignoreMap":68},[72,9152,9153,9155],{"class":74,"line":75},[72,9154,2378],{"class":78},[72,9156,2381],{"class":366},[72,9158,9159,9161,9163,9165],{"class":74,"line":370},[72,9160,2386],{"class":78},[72,9162,2389],{"class":78},[72,9164,2392],{"class":358},[72,9166,1719],{"class":82},[72,9168,9169,9171],{"class":74,"line":1608},[72,9170,2378],{"class":78},[72,9172,8175],{"class":366},[72,9174,9175,9177],{"class":74,"line":1623},[72,9176,8185],{"class":78},[72,9178,8188],{"class":358},[72,9180,9181],{"class":74,"line":1629},[72,9182,1975],{"class":82},[72,9184,9185],{"class":74,"line":1643},[72,9186,8211],{"class":82},[72,9188,9189,9191],{"class":74,"line":1649},[72,9190,2413],{"class":78},[72,9192,8223],{"class":82},[72,9194,9195,9197],{"class":74,"line":1740},[72,9196,2413],{"class":78},[72,9198,8235],{"class":82},[72,9200,9201],{"class":74,"line":1746},[72,9202,4423],{"class":82},[72,9204,9205],{"class":74,"line":1758},[72,9206,9207],{"class":621},"\u002F\u002F打印学生信息的函数\n",[72,9209,9210],{"class":74,"line":2041},[72,9211,9212],{"class":621},"\u002F\u002F值传递\n",[72,9214,9215,9217,9220,9222,9224,9226,9228],{"class":74,"line":2046},[72,9216,5790],{"class":78},[72,9218,9219],{"class":358}," printStudent1",[72,9221,564],{"class":82},[72,9223,8185],{"class":78},[72,9225,8324],{"class":358},[72,9227,8854],{"class":5642},[72,9229,570],{"class":82},[72,9231,9232],{"class":74,"line":2052},[72,9233,1975],{"class":82},[72,9235,9236,9238,9240,9243,9245,9248,9250,9253,9255,9257,9259,9262,9264],{"class":74,"line":2057},[72,9237,6955],{"class":82},[72,9239,1597],{"class":78},[72,9241,9242],{"class":82}," s.name ",[72,9244,1597],{"class":78},[72,9246,9247],{"class":366}," \" \"",[72,9249,1873],{"class":78},[72,9251,9252],{"class":82}," s.age ",[72,9254,1597],{"class":78},[72,9256,9247],{"class":366},[72,9258,1873],{"class":78},[72,9260,9261],{"class":82}," s.score ",[72,9263,1597],{"class":78},[72,9265,9266],{"class":82}," endl;\n",[72,9268,9269],{"class":74,"line":2071},[72,9270,1994],{"class":82},[72,9272,9273],{"class":74,"line":2076},[72,9274,9275],{"class":621},"\u002F\u002F地址传递\n",[72,9277,9278,9280,9283,9285,9287,9289,9291,9293],{"class":74,"line":2082},[72,9279,5790],{"class":78},[72,9281,9282],{"class":358}," printStudent2",[72,9284,564],{"class":82},[72,9286,8185],{"class":78},[72,9288,8324],{"class":358},[72,9290,6944],{"class":78},[72,9292,1249],{"class":5642},[72,9294,570],{"class":82},[72,9296,9297],{"class":74,"line":2103},[72,9298,1975],{"class":82},[72,9300,9301,9303,9305,9308,9310,9312,9314,9317,9319,9321,9323,9326,9328],{"class":74,"line":2108},[72,9302,6955],{"class":82},[72,9304,1597],{"class":78},[72,9306,9307],{"class":82}," s->name ",[72,9309,1597],{"class":78},[72,9311,9247],{"class":366},[72,9313,1873],{"class":78},[72,9315,9316],{"class":82}," s->age ",[72,9318,1597],{"class":78},[72,9320,9247],{"class":366},[72,9322,1873],{"class":78},[72,9324,9325],{"class":82}," s->score ",[72,9327,1597],{"class":78},[72,9329,9266],{"class":82},[72,9331,9332],{"class":74,"line":2122},[72,9333,1994],{"class":82},[72,9335,9336,9338,9340],{"class":74,"line":2127},[72,9337,567],{"class":78},[72,9339,2401],{"class":358},[72,9341,2404],{"class":82},[72,9343,9344],{"class":74,"line":2156},[72,9345,1975],{"class":82},[72,9347,9348,9350,9352],{"class":74,"line":2161},[72,9349,8321],{"class":78},[72,9351,8324],{"class":358},[72,9353,9354],{"class":82}," s;\n",[72,9356,9357,9360,9362,9365],{"class":74,"line":2178},[72,9358,9359],{"class":82},"    s.name ",[72,9361,609],{"class":78},[72,9363,9364],{"class":366}," \"张三\"",[72,9366,1719],{"class":82},[72,9368,9369,9372,9374,9377],{"class":74,"line":2183},[72,9370,9371],{"class":82},"    s.age ",[72,9373,609],{"class":78},[72,9375,9376],{"class":362}," 20",[72,9378,1719],{"class":82},[72,9380,9381,9384,9386,9389],{"class":74,"line":2188},[72,9382,9383],{"class":82},"    s.score ",[72,9385,609],{"class":78},[72,9387,9388],{"class":362}," 85",[72,9390,1719],{"class":82},[72,9392,9393,9395,9397,9400,9402],{"class":74,"line":2193},[72,9394,1980],{"class":82},[72,9396,1597],{"class":78},[72,9398,9399],{"class":366},"\"值传递:\"",[72,9401,1597],{"class":78},[72,9403,1620],{"class":82},[72,9405,9406,9409],{"class":74,"line":2207},[72,9407,9408],{"class":358},"    printStudent1",[72,9410,9411],{"class":82},"(s);\n",[72,9413,9414,9416,9418,9421,9423],{"class":74,"line":2212},[72,9415,1980],{"class":82},[72,9417,1597],{"class":78},[72,9419,9420],{"class":366},"\"地址传递:\"",[72,9422,1597],{"class":78},[72,9424,1620],{"class":82},[72,9426,9427,9430,9432,9434],{"class":74,"line":3005},[72,9428,9429],{"class":358},"    printStudent2",[72,9431,564],{"class":82},[72,9433,907],{"class":78},[72,9435,9436],{"class":82},"s); \n",[72,9438,9439,9441,9443],{"class":74,"line":3019},[72,9440,4518],{"class":78},[72,9442,4521],{"class":362},[72,9444,1719],{"class":82},[72,9446,9447],{"class":74,"line":3027},[72,9448,1994],{"class":82},[15,9450,9451],{},"注意：",[251,9453,9454,9457],{},[25,9455,9456],{},"1.先定义结构体，不要在函数中写结构体的定义",[25,9458,9459],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[85,9461,9463],{"id":9462},"_46结构体中const使用场景","4.6结构体中const使用场景",[15,9465,9466],{},"用const防止误操作",[63,9468,9470],{"className":552,"code":9469,"language":554,"meta":68,"style":68},"#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",[34,9471,9472,9478,9488,9494,9499,9503,9507,9513,9519,9523,9539,9543,9566,9570,9578,9582,9603,9610,9614],{"__ignoreMap":68},[72,9473,9474,9476],{"class":74,"line":75},[72,9475,2378],{"class":78},[72,9477,2381],{"class":366},[72,9479,9480,9482,9484,9486],{"class":74,"line":370},[72,9481,2386],{"class":78},[72,9483,2389],{"class":78},[72,9485,2392],{"class":358},[72,9487,1719],{"class":82},[72,9489,9490,9492],{"class":74,"line":1608},[72,9491,2378],{"class":78},[72,9493,8175],{"class":366},[72,9495,9496],{"class":74,"line":1623},[72,9497,9498],{"class":82},"sctuct Student\n",[72,9500,9501],{"class":74,"line":1629},[72,9502,1975],{"class":82},[72,9504,9505],{"class":74,"line":1643},[72,9506,8211],{"class":82},[72,9508,9509,9511],{"class":74,"line":1649},[72,9510,2413],{"class":78},[72,9512,8223],{"class":82},[72,9514,9515,9517],{"class":74,"line":1740},[72,9516,2413],{"class":78},[72,9518,8235],{"class":82},[72,9520,9521],{"class":74,"line":1746},[72,9522,4423],{"class":82},[72,9524,9525,9527,9530,9532,9535,9537],{"class":74,"line":1758},[72,9526,5790],{"class":78},[72,9528,9529],{"class":358}," printStudents",[72,9531,564],{"class":82},[72,9533,9534],{"class":358},"student",[72,9536,8854],{"class":5642},[72,9538,570],{"class":82},[72,9540,9541],{"class":74,"line":2041},[72,9542,1975],{"class":82},[72,9544,9545,9547,9549,9552,9554,9557,9559,9562,9564],{"class":74,"line":2046},[72,9546,1980],{"class":82},[72,9548,1597],{"class":78},[72,9550,9551],{"class":82},"s.name",[72,9553,1597],{"class":78},[72,9555,9556],{"class":82},"s.age",[72,9558,1597],{"class":78},[72,9560,9561],{"class":82},"s.score",[72,9563,1597],{"class":78},[72,9565,1620],{"class":82},[72,9567,9568],{"class":74,"line":2052},[72,9569,1994],{"class":82},[72,9571,9572,9574,9576],{"class":74,"line":2057},[72,9573,567],{"class":78},[72,9575,2401],{"class":358},[72,9577,6404],{"class":82},[72,9579,9580],{"class":74,"line":2071},[72,9581,1975],{"class":82},[72,9583,9584,9587,9589,9591,9593,9595,9597,9599,9601],{"class":74,"line":2076},[72,9585,9586],{"class":82},"    Student s",[72,9588,609],{"class":78},[72,9590,1450],{"class":82},[72,9592,8342],{"class":366},[72,9594,932],{"class":82},[72,9596,1204],{"class":362},[72,9598,932],{"class":82},[72,9600,1204],{"class":362},[72,9602,4423],{"class":82},[72,9604,9605,9608],{"class":74,"line":2082},[72,9606,9607],{"class":358},"    printStudent",[72,9609,9411],{"class":82},[72,9611,9612],{"class":74,"line":2103},[72,9613,2828],{"emptyLinePlaceholder":490},[72,9615,9616],{"class":74,"line":2108},[72,9617,1994],{"class":82},[15,9619,9451],{},[251,9621,9622,9625,9628],{},[25,9623,9624],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[25,9626,9627],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[25,9629,9630],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[63,9632,9634],{"className":552,"code":9633,"language":554,"meta":68,"style":68},"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",[34,9635,9636,9655,9659,9664,9684],{"__ignoreMap":68},[72,9637,9638,9640,9642,9644,9646,9649,9651,9653],{"class":74,"line":75},[72,9639,5790],{"class":78},[72,9641,9529],{"class":358},[72,9643,564],{"class":82},[72,9645,7218],{"class":78},[72,9647,9648],{"class":358}," student",[72,9650,6944],{"class":78},[72,9652,1249],{"class":5642},[72,9654,570],{"class":82},[72,9656,9657],{"class":74,"line":370},[72,9658,1975],{"class":82},[72,9660,9661],{"class":74,"line":1608},[72,9662,9663],{"class":621},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[72,9665,9666,9668,9670,9672,9674,9676,9678,9680,9682],{"class":74,"line":1623},[72,9667,1980],{"class":82},[72,9669,1597],{"class":78},[72,9671,9551],{"class":82},[72,9673,1597],{"class":78},[72,9675,9556],{"class":82},[72,9677,1597],{"class":78},[72,9679,9561],{"class":82},[72,9681,1597],{"class":78},[72,9683,1620],{"class":82},[72,9685,9686],{"class":74,"line":1629},[72,9687,1994],{"class":82},[85,9689,9691],{"id":9690},"_47案例","4.7案例",[22,9693,9694],{},[25,9695,9696],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[63,9698,9700],{"className":552,"code":9699,"language":554,"meta":68,"style":68},"#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",[34,9701,9702,9708,9718,9724,9731,9735,9741,9745,9750,9756,9762,9766,9770,9776,9780,9785,9790,9803,9807,9812,9838,9842,9854,9881,9885,9897,9907,9911,9916,9945,9949,9961,9970,9997,10008,10018,10022,10026,10030,10035,10059,10063,10087,10091,10110,10136,10140,10165,10188,10212,10217,10222,10227,10236,10241,10247,10268,10274,10288,10294,10321,10330,10336,10344,10349],{"__ignoreMap":68},[72,9703,9704,9706],{"class":74,"line":75},[72,9705,2378],{"class":78},[72,9707,2381],{"class":366},[72,9709,9710,9712,9714,9716],{"class":74,"line":370},[72,9711,2386],{"class":78},[72,9713,2389],{"class":78},[72,9715,2392],{"class":358},[72,9717,1719],{"class":82},[72,9719,9720,9722],{"class":74,"line":1608},[72,9721,2378],{"class":78},[72,9723,8175],{"class":366},[72,9725,9726,9728],{"class":74,"line":1623},[72,9727,2378],{"class":78},[72,9729,9730],{"class":366},"\u003Cctime>\n",[72,9732,9733],{"class":74,"line":1629},[72,9734,8964],{"class":621},[72,9736,9737,9739],{"class":74,"line":1643},[72,9738,8185],{"class":78},[72,9740,8188],{"class":358},[72,9742,9743],{"class":74,"line":1649},[72,9744,1975],{"class":82},[72,9746,9747],{"class":74,"line":1740},[72,9748,9749],{"class":82},"    string sName;\n",[72,9751,9752,9754],{"class":74,"line":1746},[72,9753,2413],{"class":78},[72,9755,8223],{"class":82},[72,9757,9758,9760],{"class":74,"line":1758},[72,9759,2413],{"class":78},[72,9761,8235],{"class":82},[72,9763,9764],{"class":74,"line":2041},[72,9765,4423],{"class":82},[72,9767,9768],{"class":74,"line":2046},[72,9769,9001],{"class":621},[72,9771,9772,9774],{"class":74,"line":2052},[72,9773,8185],{"class":78},[72,9775,9008],{"class":358},[72,9777,9778],{"class":74,"line":2057},[72,9779,1975],{"class":82},[72,9781,9782],{"class":74,"line":2071},[72,9783,9784],{"class":82},"    string tName;\n",[72,9786,9787],{"class":74,"line":2076},[72,9788,9789],{"class":621},"    \u002F\u002F学生数组\n",[72,9791,9792,9794,9796,9799,9801],{"class":74,"line":2082},[72,9793,8321],{"class":78},[72,9795,8324],{"class":358},[72,9797,9798],{"class":82}," sArray[",[72,9800,873],{"class":362},[72,9802,5118],{"class":82},[72,9804,9805],{"class":74,"line":2103},[72,9806,4423],{"class":82},[72,9808,9809],{"class":74,"line":2108},[72,9810,9811],{"class":621},"\u002F\u002F给老师和学生赋值的函数\n",[72,9813,9814,9816,9819,9821,9823,9826,9829,9832,9834,9836],{"class":74,"line":2122},[72,9815,5790],{"class":78},[72,9817,9818],{"class":358}," allocateSpace",[72,9820,564],{"class":82},[72,9822,8185],{"class":78},[72,9824,9825],{"class":358}," Teacher",[72,9827,9828],{"class":5642}," tArray",[72,9830,9831],{"class":82},"[],",[72,9833,567],{"class":78},[72,9835,7757],{"class":5642},[72,9837,570],{"class":82},[72,9839,9840],{"class":74,"line":2127},[72,9841,1975],{"class":82},[72,9843,9844,9847,9849,9852],{"class":74,"line":2156},[72,9845,9846],{"class":82},"    string nameSeed",[72,9848,609],{"class":78},[72,9850,9851],{"class":366},"\"ABCDE\"",[72,9853,1719],{"class":82},[72,9855,9856,9858,9860,9862,9865,9867,9869,9872,9874,9877,9879],{"class":74,"line":2161},[72,9857,3629],{"class":78},[72,9859,2087],{"class":82},[72,9861,567],{"class":78},[72,9863,9864],{"class":82}," i ",[72,9866,609],{"class":78},[72,9868,4521],{"class":362},[72,9870,9871],{"class":82},"; i ",[72,9873,1464],{"class":78},[72,9875,9876],{"class":82}," len; i",[72,9878,2720],{"class":78},[72,9880,570],{"class":82},[72,9882,9883],{"class":74,"line":2178},[72,9884,2458],{"class":82},[72,9886,9887,9890,9892,9895],{"class":74,"line":2183},[72,9888,9889],{"class":82},"        tArray[i].tName ",[72,9891,609],{"class":78},[72,9893,9894],{"class":366}," \"Teacher_\"",[72,9896,1719],{"class":82},[72,9898,9899,9901,9904],{"class":74,"line":2188},[72,9900,9889],{"class":82},[72,9902,9903],{"class":78},"+=",[72,9905,9906],{"class":82},"nameSeed[i];\n",[72,9908,9909],{"class":74,"line":2193},[72,9910,2828],{"emptyLinePlaceholder":490},[72,9912,9913],{"class":74,"line":2207},[72,9914,9915],{"class":621},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[72,9917,9918,9920,9922,9924,9927,9929,9931,9934,9936,9938,9941,9943],{"class":74,"line":2212},[72,9919,3831],{"class":78},[72,9921,2087],{"class":82},[72,9923,567],{"class":78},[72,9925,9926],{"class":82}," j ",[72,9928,609],{"class":78},[72,9930,4521],{"class":362},[72,9932,9933],{"class":82},"; j ",[72,9935,1464],{"class":78},[72,9937,2576],{"class":362},[72,9939,9940],{"class":82},"; j",[72,9942,2720],{"class":78},[72,9944,570],{"class":82},[72,9946,9947],{"class":74,"line":3005},[72,9948,2938],{"class":82},[72,9950,9951,9954,9956,9959],{"class":74,"line":3019},[72,9952,9953],{"class":82},"            tArray[i].sArray[j].sName ",[72,9955,609],{"class":78},[72,9957,9958],{"class":366}," \"Student_\"",[72,9960,1719],{"class":82},[72,9962,9963,9965,9967],{"class":74,"line":3027},[72,9964,9953],{"class":82},[72,9966,9903],{"class":78},[72,9968,9969],{"class":82}," nameSeed[j];\n",[72,9971,9972,9975,9978,9980,9982,9984,9986,9988,9990,9992,9994],{"class":74,"line":3032},[72,9973,9974],{"class":78},"            int",[72,9976,9977],{"class":82}," random",[72,9979,609],{"class":78},[72,9981,2852],{"class":358},[72,9983,2855],{"class":82},[72,9985,882],{"class":78},[72,9987,1461],{"class":362},[72,9989,1035],{"class":78},[72,9991,955],{"class":362},[72,9993,618],{"class":82},[72,9995,9996],{"class":621},"\u002F\u002F40~99\n",[72,9998,9999,10002,10004,10006],{"class":74,"line":3038},[72,10000,10001],{"class":82},"            tArray[i].sArray[j].age ",[72,10003,609],{"class":78},[72,10005,9376],{"class":362},[72,10007,1719],{"class":82},[72,10009,10010,10013,10015],{"class":74,"line":3044},[72,10011,10012],{"class":82},"            tArray[i].sArray[j].score ",[72,10014,609],{"class":78},[72,10016,10017],{"class":82}," random;\n",[72,10019,10020],{"class":74,"line":3049},[72,10021,2957],{"class":82},[72,10023,10024],{"class":74,"line":8374},[72,10025,2615],{"class":82},[72,10027,10028],{"class":74,"line":8398},[72,10029,1994],{"class":82},[72,10031,10032],{"class":74,"line":8403},[72,10033,10034],{"class":621},"\u002F\u002F打印所有信息的函数\n",[72,10036,10037,10039,10042,10044,10046,10048,10050,10053,10055,10057],{"class":74,"line":8409},[72,10038,5790],{"class":78},[72,10040,10041],{"class":358}," printInfo",[72,10043,564],{"class":82},[72,10045,8185],{"class":78},[72,10047,9825],{"class":358},[72,10049,9828],{"class":5642},[72,10051,10052],{"class":82},"[], ",[72,10054,567],{"class":78},[72,10056,7757],{"class":5642},[72,10058,570],{"class":82},[72,10060,10061],{"class":74,"line":8436},[72,10062,1975],{"class":82},[72,10064,10065,10067,10069,10071,10073,10075,10077,10079,10081,10083,10085],{"class":74,"line":8441},[72,10066,3629],{"class":78},[72,10068,2087],{"class":82},[72,10070,567],{"class":78},[72,10072,9864],{"class":82},[72,10074,609],{"class":78},[72,10076,4521],{"class":362},[72,10078,9871],{"class":82},[72,10080,1464],{"class":78},[72,10082,9876],{"class":82},[72,10084,2720],{"class":78},[72,10086,570],{"class":82},[72,10088,10089],{"class":74,"line":8447},[72,10090,2458],{"class":82},[72,10092,10093,10096,10098,10101,10103,10106,10108],{"class":74,"line":8459},[72,10094,10095],{"class":82},"        cout ",[72,10097,1597],{"class":78},[72,10099,10100],{"class":366}," \"Teacher: \"",[72,10102,1873],{"class":78},[72,10104,10105],{"class":82}," tArray[i].tName ",[72,10107,1597],{"class":78},[72,10109,9266],{"class":82},[72,10111,10112,10114,10116,10118,10120,10122,10124,10126,10128,10130,10132,10134],{"class":74,"line":8471},[72,10113,3831],{"class":78},[72,10115,2087],{"class":82},[72,10117,567],{"class":78},[72,10119,9926],{"class":82},[72,10121,609],{"class":78},[72,10123,4521],{"class":362},[72,10125,9933],{"class":82},[72,10127,1464],{"class":78},[72,10129,2576],{"class":362},[72,10131,9940],{"class":82},[72,10133,2720],{"class":78},[72,10135,570],{"class":82},[72,10137,10138],{"class":74,"line":8483},[72,10139,2938],{"class":82},[72,10141,10143,10146,10148,10151,10153,10156,10158,10161,10163],{"class":74,"line":10142},47,[72,10144,10145],{"class":82},"            cout ",[72,10147,1597],{"class":78},[72,10149,10150],{"class":366}," \"",[72,10152,1659],{"class":362},[72,10154,10155],{"class":366},"Student: \"",[72,10157,1873],{"class":78},[72,10159,10160],{"class":82}," tArray[i].sArray[j].sName",[72,10162,1597],{"class":78},[72,10164,1620],{"class":82},[72,10166,10168,10170,10172,10174,10176,10179,10181,10184,10186],{"class":74,"line":10167},48,[72,10169,10145],{"class":82},[72,10171,1597],{"class":78},[72,10173,10150],{"class":366},[72,10175,1659],{"class":362},[72,10177,10178],{"class":366},"Age: \"",[72,10180,1873],{"class":78},[72,10182,10183],{"class":82}," tArray[i].sArray[j].age ",[72,10185,1597],{"class":78},[72,10187,9266],{"class":82},[72,10189,10191,10193,10195,10197,10199,10202,10204,10207,10209],{"class":74,"line":10190},49,[72,10192,10145],{"class":82},[72,10194,1597],{"class":78},[72,10196,10150],{"class":366},[72,10198,1659],{"class":362},[72,10200,10201],{"class":366},"Score: \"",[72,10203,1873],{"class":78},[72,10205,10206],{"class":82}," tArray[i].sArray[j].score ",[72,10208,1597],{"class":78},[72,10210,10211],{"class":82}," endl;   \n",[72,10213,10215],{"class":74,"line":10214},50,[72,10216,2957],{"class":82},[72,10218,10220],{"class":74,"line":10219},51,[72,10221,2615],{"class":82},[72,10223,10225],{"class":74,"line":10224},52,[72,10226,1994],{"class":82},[72,10228,10230,10232,10234],{"class":74,"line":10229},53,[72,10231,567],{"class":78},[72,10233,2401],{"class":358},[72,10235,2404],{"class":82},[72,10237,10239],{"class":74,"line":10238},54,[72,10240,1975],{"class":82},[72,10242,10244],{"class":74,"line":10243},55,[72,10245,10246],{"class":621},"    \u002F\u002F随机数种子\n",[72,10248,10250,10252,10254,10256,10258,10260,10262,10264,10266],{"class":74,"line":10249},56,[72,10251,2801],{"class":358},[72,10253,2804],{"class":82},[72,10255,2807],{"class":78},[72,10257,2810],{"class":78},[72,10259,983],{"class":82},[72,10261,2815],{"class":358},[72,10263,564],{"class":82},[72,10265,2820],{"class":362},[72,10267,2823],{"class":82},[72,10269,10271],{"class":74,"line":10270},57,[72,10272,10273],{"class":621},"    \u002F\u002F1.创建3名老师的数组\n",[72,10275,10277,10279,10281,10284,10286],{"class":74,"line":10276},58,[72,10278,8321],{"class":78},[72,10280,9825],{"class":358},[72,10282,10283],{"class":82}," tArray[",[72,10285,634],{"class":362},[72,10287,5118],{"class":82},[72,10289,10291],{"class":74,"line":10290},59,[72,10292,10293],{"class":621},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[72,10295,10297,10299,10302,10304,10307,10310,10312,10314,10317,10319],{"class":74,"line":10296},60,[72,10298,2413],{"class":78},[72,10300,10301],{"class":82}," len ",[72,10303,609],{"class":78},[72,10305,10306],{"class":78}," sizeof",[72,10308,10309],{"class":82},"(tArray) ",[72,10311,1138],{"class":78},[72,10313,10306],{"class":78},[72,10315,10316],{"class":82},"(tArray[",[72,10318,747],{"class":362},[72,10320,4284],{"class":82},[72,10322,10324,10327],{"class":74,"line":10323},61,[72,10325,10326],{"class":358},"    allocateSpace",[72,10328,10329],{"class":82},"(tArray, len);\n",[72,10331,10333],{"class":74,"line":10332},62,[72,10334,10335],{"class":621},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[72,10337,10339,10342],{"class":74,"line":10338},63,[72,10340,10341],{"class":358},"    printInfo",[72,10343,10329],{"class":82},[72,10345,10347],{"class":74,"line":10346},64,[72,10348,2828],{"emptyLinePlaceholder":490},[72,10350,10352],{"class":74,"line":10351},65,[72,10353,1994],{"class":82},[22,10355,10356],{"start":370},[25,10357,10358,10361],{},[707,10359,10360],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[15,10363,10364],{},"五名英雄信息如下：",[63,10366,10370],{"className":10367,"code":10368,"language":10369,"meta":68,"style":68},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[34,10371,10372,10390,10407,10424,10441],{"__ignoreMap":68},[72,10373,10374,10376,10379,10381,10383,10385,10388],{"class":74,"line":75},[72,10375,5345],{"class":82},[72,10377,10378],{"class":366},"\"刘备\"",[72,10380,932],{"class":82},[72,10382,1329],{"class":362},[72,10384,932],{"class":82},[72,10386,10387],{"class":366},"\"男\"",[72,10389,5358],{"class":82},[72,10391,10392,10394,10397,10399,10401,10403,10405],{"class":74,"line":370},[72,10393,5345],{"class":82},[72,10395,10396],{"class":366},"\"关羽\"",[72,10398,932],{"class":82},[72,10400,1304],{"class":362},[72,10402,932],{"class":82},[72,10404,10387],{"class":366},[72,10406,5358],{"class":82},[72,10408,10409,10411,10414,10416,10418,10420,10422],{"class":74,"line":1608},[72,10410,5345],{"class":82},[72,10412,10413],{"class":366},"\"张飞\"",[72,10415,932],{"class":82},[72,10417,1254],{"class":362},[72,10419,932],{"class":82},[72,10421,10387],{"class":366},[72,10423,5358],{"class":82},[72,10425,10426,10428,10431,10433,10435,10437,10439],{"class":74,"line":1623},[72,10427,5345],{"class":82},[72,10429,10430],{"class":366},"\"赵云\"",[72,10432,932],{"class":82},[72,10434,1279],{"class":362},[72,10436,932],{"class":82},[72,10438,10387],{"class":366},[72,10440,5358],{"class":82},[72,10442,10443,10445,10448,10450,10452,10454,10457],{"class":74,"line":1629},[72,10444,5345],{"class":82},[72,10446,10447],{"class":366},"\"貂蝉\"",[72,10449,932],{"class":82},[72,10451,1229],{"class":362},[72,10453,932],{"class":82},[72,10455,10456],{"class":366},"\"女\"",[72,10458,5358],{"class":82},[15,10460,10461],{},"代码：",[63,10463,10465],{"className":552,"code":10464,"language":554,"meta":68,"style":68},"#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",[34,10466,10467,10473,10483,10489,10496,10500,10504,10510,10515,10519,10524,10547,10551,10576,10580,10613,10618,10647,10652,10667,10693,10713,10718,10723,10727,10731,10736,10758,10762,10786,10790,10852,10856,10860,10868,10872,10877,10888,10892,10908,10924,10940,10956,10972,10976,10996,11018,11023,11036,11043,11048,11054,11059,11072,11078],{"__ignoreMap":68},[72,10468,10469,10471],{"class":74,"line":75},[72,10470,2378],{"class":78},[72,10472,2381],{"class":366},[72,10474,10475,10477,10479,10481],{"class":74,"line":370},[72,10476,2386],{"class":78},[72,10478,2389],{"class":78},[72,10480,2392],{"class":358},[72,10482,1719],{"class":82},[72,10484,10485,10487],{"class":74,"line":1608},[72,10486,2378],{"class":78},[72,10488,8175],{"class":366},[72,10490,10491,10493],{"class":74,"line":1623},[72,10492,8185],{"class":78},[72,10494,10495],{"class":358}," Sanguo\n",[72,10497,10498],{"class":74,"line":1629},[72,10499,1975],{"class":82},[72,10501,10502],{"class":74,"line":1643},[72,10503,8211],{"class":82},[72,10505,10506,10508],{"class":74,"line":1649},[72,10507,2413],{"class":78},[72,10509,8223],{"class":82},[72,10511,10512],{"class":74,"line":1740},[72,10513,10514],{"class":82},"    string gender;\n",[72,10516,10517],{"class":74,"line":1746},[72,10518,4423],{"class":82},[72,10520,10521],{"class":74,"line":1758},[72,10522,10523],{"class":621},"\u002F\u002F定义排序函数\n",[72,10525,10526,10528,10530,10532,10535,10537,10539,10541,10543,10545],{"class":74,"line":2041},[72,10527,5790],{"class":78},[72,10529,7742],{"class":358},[72,10531,564],{"class":82},[72,10533,10534],{"class":358},"Sanguo",[72,10536,6944],{"class":78},[72,10538,1249],{"class":5642},[72,10540,932],{"class":82},[72,10542,567],{"class":78},[72,10544,7757],{"class":5642},[72,10546,570],{"class":82},[72,10548,10549],{"class":74,"line":2046},[72,10550,1975],{"class":82},[72,10552,10553,10555,10557,10559,10561,10563,10565,10567,10569,10572,10574],{"class":74,"line":2052},[72,10554,3629],{"class":78},[72,10556,564],{"class":82},[72,10558,567],{"class":78},[72,10560,3460],{"class":82},[72,10562,609],{"class":78},[72,10564,747],{"class":362},[72,10566,3467],{"class":82},[72,10568,1464],{"class":78},[72,10570,10571],{"class":82},"len;i",[72,10573,2720],{"class":78},[72,10575,570],{"class":82},[72,10577,10578],{"class":74,"line":2057},[72,10579,2458],{"class":82},[72,10581,10582,10585,10587,10589,10591,10593,10595,10597,10599,10601,10603,10605,10607,10609,10611],{"class":74,"line":2071},[72,10583,10584],{"class":78},"     for",[72,10586,2087],{"class":82},[72,10588,567],{"class":78},[72,10590,3838],{"class":82},[72,10592,609],{"class":78},[72,10594,747],{"class":362},[72,10596,3845],{"class":82},[72,10598,1464],{"class":78},[72,10600,7784],{"class":82},[72,10602,1086],{"class":78},[72,10604,772],{"class":362},[72,10606,1086],{"class":78},[72,10608,3978],{"class":82},[72,10610,2720],{"class":78},[72,10612,570],{"class":82},[72,10614,10615],{"class":74,"line":2076},[72,10616,10617],{"class":82},"     {\n",[72,10619,10620,10623,10626,10628,10631,10633,10636,10638,10640,10642,10644],{"class":74,"line":2082},[72,10621,10622],{"class":78},"         if",[72,10624,10625],{"class":82}," ((s",[72,10627,1035],{"class":78},[72,10629,10630],{"class":82},"j)->age ",[72,10632,1514],{"class":78},[72,10634,10635],{"class":82}," (s",[72,10637,1035],{"class":78},[72,10639,1021],{"class":82},[72,10641,1035],{"class":78},[72,10643,772],{"class":362},[72,10645,10646],{"class":82},")->age)\n",[72,10648,10649],{"class":74,"line":2103},[72,10650,10651],{"class":82},"         {\n",[72,10653,10654,10657,10659,10662,10664],{"class":74,"line":2108},[72,10655,10656],{"class":82},"             Sanguo temp",[72,10658,7579],{"class":78},[72,10660,10661],{"class":82},"(s",[72,10663,1035],{"class":78},[72,10665,10666],{"class":82},"j);\n",[72,10668,10669,10672,10674,10676,10679,10681,10683,10685,10687,10689,10691],{"class":74,"line":2122},[72,10670,10671],{"class":78},"             *",[72,10673,10661],{"class":82},[72,10675,1035],{"class":78},[72,10677,10678],{"class":82},"j)",[72,10680,7579],{"class":78},[72,10682,10661],{"class":82},[72,10684,1035],{"class":78},[72,10686,1021],{"class":82},[72,10688,1035],{"class":78},[72,10690,772],{"class":362},[72,10692,3147],{"class":82},[72,10694,10695,10697,10699,10701,10703,10705,10707,10709,10711],{"class":74,"line":2127},[72,10696,10671],{"class":78},[72,10698,10661],{"class":82},[72,10700,1035],{"class":78},[72,10702,1021],{"class":82},[72,10704,1035],{"class":78},[72,10706,772],{"class":362},[72,10708,983],{"class":82},[72,10710,609],{"class":78},[72,10712,4708],{"class":82},[72,10714,10715],{"class":74,"line":2156},[72,10716,10717],{"class":82},"         }\n",[72,10719,10720],{"class":74,"line":2161},[72,10721,10722],{"class":82},"     }\n",[72,10724,10725],{"class":74,"line":2178},[72,10726,2615],{"class":82},[72,10728,10729],{"class":74,"line":2183},[72,10730,1994],{"class":82},[72,10732,10733],{"class":74,"line":2188},[72,10734,10735],{"class":621},"\u002F\u002F定义打印函数\n",[72,10737,10738,10740,10742,10744,10746,10748,10750,10752,10754,10756],{"class":74,"line":2193},[72,10739,5790],{"class":78},[72,10741,10041],{"class":358},[72,10743,564],{"class":82},[72,10745,10534],{"class":358},[72,10747,6944],{"class":78},[72,10749,1249],{"class":5642},[72,10751,932],{"class":82},[72,10753,567],{"class":78},[72,10755,7757],{"class":5642},[72,10757,570],{"class":82},[72,10759,10760],{"class":74,"line":2207},[72,10761,1975],{"class":82},[72,10763,10764,10766,10768,10770,10772,10774,10776,10778,10780,10782,10784],{"class":74,"line":2212},[72,10765,3629],{"class":78},[72,10767,2087],{"class":82},[72,10769,567],{"class":78},[72,10771,3460],{"class":82},[72,10773,609],{"class":78},[72,10775,747],{"class":362},[72,10777,3467],{"class":82},[72,10779,1464],{"class":78},[72,10781,10571],{"class":82},[72,10783,2720],{"class":78},[72,10785,570],{"class":82},[72,10787,10788],{"class":74,"line":3005},[72,10789,2458],{"class":82},[72,10791,10792,10794,10796,10798,10800,10803,10805,10807,10809,10812,10814,10816,10818,10821,10823,10825,10827,10830,10832,10834,10836,10839,10841,10843,10845,10848,10850],{"class":74,"line":3019},[72,10793,3879],{"class":82},[72,10795,1597],{"class":78},[72,10797,805],{"class":366},[72,10799,1659],{"class":362},[72,10801,10802],{"class":366},"姓名：\"",[72,10804,1597],{"class":78},[72,10806,10661],{"class":82},[72,10808,1035],{"class":78},[72,10810,10811],{"class":82},"i)->name",[72,10813,1597],{"class":78},[72,10815,805],{"class":366},[72,10817,1659],{"class":362},[72,10819,10820],{"class":366},"年龄：\"",[72,10822,1597],{"class":78},[72,10824,10661],{"class":82},[72,10826,1035],{"class":78},[72,10828,10829],{"class":82},"i)->age",[72,10831,1597],{"class":78},[72,10833,805],{"class":366},[72,10835,1659],{"class":362},[72,10837,10838],{"class":366},"性别：\"",[72,10840,1597],{"class":78},[72,10842,10661],{"class":82},[72,10844,1035],{"class":78},[72,10846,10847],{"class":82},"i)->gender",[72,10849,1597],{"class":78},[72,10851,1620],{"class":82},[72,10853,10854],{"class":74,"line":3027},[72,10855,2615],{"class":82},[72,10857,10858],{"class":74,"line":3032},[72,10859,1994],{"class":82},[72,10861,10862,10864,10866],{"class":74,"line":3038},[72,10863,567],{"class":78},[72,10865,2401],{"class":358},[72,10867,2404],{"class":82},[72,10869,10870],{"class":74,"line":3044},[72,10871,1975],{"class":82},[72,10873,10874],{"class":74,"line":3049},[72,10875,10876],{"class":621},"    \u002F\u002F定义结构体变量\n",[72,10878,10879,10882,10884,10886],{"class":74,"line":8374},[72,10880,10881],{"class":82},"    Sanguo s1[",[72,10883,873],{"class":362},[72,10885,1494],{"class":82},[72,10887,5336],{"class":78},[72,10889,10890],{"class":74,"line":8398},[72,10891,2458],{"class":82},[72,10893,10894,10896,10898,10900,10902,10904,10906],{"class":74,"line":8403},[72,10895,5345],{"class":82},[72,10897,10378],{"class":366},[72,10899,932],{"class":82},[72,10901,1329],{"class":362},[72,10903,932],{"class":82},[72,10905,10387],{"class":366},[72,10907,5358],{"class":82},[72,10909,10910,10912,10914,10916,10918,10920,10922],{"class":74,"line":8409},[72,10911,5345],{"class":82},[72,10913,10396],{"class":366},[72,10915,932],{"class":82},[72,10917,1304],{"class":362},[72,10919,932],{"class":82},[72,10921,10387],{"class":366},[72,10923,5358],{"class":82},[72,10925,10926,10928,10930,10932,10934,10936,10938],{"class":74,"line":8436},[72,10927,5345],{"class":82},[72,10929,10413],{"class":366},[72,10931,932],{"class":82},[72,10933,1254],{"class":362},[72,10935,932],{"class":82},[72,10937,10387],{"class":366},[72,10939,5358],{"class":82},[72,10941,10942,10944,10946,10948,10950,10952,10954],{"class":74,"line":8441},[72,10943,5345],{"class":82},[72,10945,10430],{"class":366},[72,10947,932],{"class":82},[72,10949,1279],{"class":362},[72,10951,932],{"class":82},[72,10953,10387],{"class":366},[72,10955,5358],{"class":82},[72,10957,10958,10960,10962,10964,10966,10968,10970],{"class":74,"line":8447},[72,10959,5345],{"class":82},[72,10961,10447],{"class":366},[72,10963,932],{"class":82},[72,10965,1229],{"class":362},[72,10967,932],{"class":82},[72,10969,10456],{"class":366},[72,10971,5358],{"class":82},[72,10973,10974],{"class":74,"line":8459},[72,10975,5379],{"class":82},[72,10977,10978,10980,10982,10984,10987,10989,10992,10994],{"class":74,"line":8471},[72,10979,2413],{"class":78},[72,10981,7757],{"class":82},[72,10983,4631],{"class":78},[72,10985,10986],{"class":82},"(s1)",[72,10988,4637],{"class":78},[72,10990,10991],{"class":82},"(s1[",[72,10993,747],{"class":362},[72,10995,4284],{"class":82},[72,10997,10998,11001,11003,11006,11008,11011,11014,11016],{"class":74,"line":8483},[72,10999,11000],{"class":82},"    Sanguo ",[72,11002,1009],{"class":78},[72,11004,11005],{"class":82},"s ",[72,11007,609],{"class":78},[72,11009,11010],{"class":78}," &",[72,11012,11013],{"class":82},"s1[",[72,11015,747],{"class":362},[72,11017,5118],{"class":82},[72,11019,11020],{"class":74,"line":10142},[72,11021,11022],{"class":621},"    \u002F\u002F排序前：\n",[72,11024,11025,11027,11029,11032,11034],{"class":74,"line":10167},[72,11026,6955],{"class":82},[72,11028,1597],{"class":78},[72,11030,11031],{"class":366}," \"排序前：\"",[72,11033,1873],{"class":78},[72,11035,9266],{"class":82},[72,11037,11038,11040],{"class":74,"line":10190},[72,11039,10341],{"class":358},[72,11041,11042],{"class":82},"(s,len);\n",[72,11044,11045],{"class":74,"line":10214},[72,11046,11047],{"class":621},"    \u002F\u002F调用排序函数\n",[72,11049,11050,11052],{"class":74,"line":10219},[72,11051,8024],{"class":358},[72,11053,11042],{"class":82},[72,11055,11056],{"class":74,"line":10224},[72,11057,11058],{"class":621},"    \u002F\u002F排序后\n",[72,11060,11061,11063,11065,11068,11070],{"class":74,"line":10229},[72,11062,6955],{"class":82},[72,11064,1597],{"class":78},[72,11066,11067],{"class":366}," \"排序后：\"",[72,11069,1873],{"class":78},[72,11071,9266],{"class":82},[72,11073,11074,11076],{"class":74,"line":10238},[72,11075,10341],{"class":358},[72,11077,11042],{"class":82},[72,11079,11080],{"class":74,"line":10243},[72,11081,1994],{"class":82},[15,11083,11084,11085,11087],{},"注意：使用指针时直接用传首地址**&s",[72,11086,747],{},"**",[473,11089,11090],{},"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":68,"searchDepth":370,"depth":370,"links":11092},[11093,11094,11095,11096,11097,11098,11099],{"id":8129,"depth":370,"text":8130},{"id":8491,"depth":370,"text":8492},{"id":8760,"depth":370,"text":8761},{"id":8925,"depth":370,"text":8926},{"id":9141,"depth":370,"text":9142},{"id":9462,"depth":370,"text":9463},{"id":9690,"depth":370,"text":9691},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":8118,"description":8126},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":11106,"title":11107,"body":11108,"description":68,"extension":487,"meta":12451,"navigation":490,"path":12452,"seo":12453,"stem":12454,"__hash__":12455},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":11109,"toc":12445},[11110,11113,11117,11123,11137,11142,11145,11149,11156,11162,11165,11172,11178,11183,11186,11189,11192,11756,11759,11773,11777,11782,11798,11938,11941,11947,11950,11955,11963,12071,12074,12079,12082,12087,12090,12096,12099,12442],[10,11111,11107],{"id":11112},"_5程序内存模型",[85,11114,11116],{"id":11115},"_51内存分区模型","5.1内存分区模型",[15,11118,11119,11120],{},"C++程序在执行时，将内存大方向划分为",[707,11121,11122],{},"4个区域",[251,11124,11125,11128,11131,11134],{},[25,11126,11127],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[25,11129,11130],{},"全局区：存放全局变量和静态变量以及常量",[25,11132,11133],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[25,11135,11136],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[15,11138,11139],{},[707,11140,11141],{},"内存四区意义：",[15,11143,11144],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[531,11146,11148],{"id":11147},"_511程序运行前","5.1.1程序运行前",[15,11150,11151,11152,11155],{},"​\t在程序编译后，生成了exe可执行程序，",[707,11153,11154],{},"未执行该程序前","分为两个区域",[15,11157,11158,11159],{},"​\t",[707,11160,11161],{},"代码区：",[15,11163,11164],{},"​\t\t存放 CPU 执行的机器指令",[15,11166,11167,11168,11171],{},"​\t\t代码区是",[707,11169,11170],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[15,11173,11167,11174,11177],{},[707,11175,11176],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[15,11179,11158,11180],{},[707,11181,11182],{},"全局区：",[15,11184,11185],{},"​\t\t全局变量和静态变量存放在此.",[15,11187,11188],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[15,11190,11191],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[63,11193,11195],{"className":552,"code":11194,"language":554,"meta":68,"style":68},"\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",[34,11196,11197,11202,11215,11228,11232,11237,11252,11267,11271,11280,11284,11289,11302,11315,11319,11324,11350,11376,11380,11407,11433,11437,11442,11458,11473,11477,11503,11529,11533,11558,11583,11587,11613,11639,11643,11659,11674,11700,11726,11730,11740,11744,11752],{"__ignoreMap":68},[72,11198,11199],{"class":74,"line":75},[72,11200,11201],{"class":621},"\u002F\u002F全局变量\n",[72,11203,11204,11206,11209,11211,11213],{"class":74,"line":370},[72,11205,567],{"class":78},[72,11207,11208],{"class":82}," g_a ",[72,11210,609],{"class":78},[72,11212,2466],{"class":362},[72,11214,1719],{"class":82},[72,11216,11217,11219,11222,11224,11226],{"class":74,"line":1608},[72,11218,567],{"class":78},[72,11220,11221],{"class":82}," g_b ",[72,11223,609],{"class":78},[72,11225,2466],{"class":362},[72,11227,1719],{"class":82},[72,11229,11230],{"class":74,"line":1623},[72,11231,2828],{"emptyLinePlaceholder":490},[72,11233,11234],{"class":74,"line":1629},[72,11235,11236],{"class":621},"\u002F\u002F全局常量\n",[72,11238,11239,11241,11243,11246,11248,11250],{"class":74,"line":1643},[72,11240,7218],{"class":78},[72,11242,2810],{"class":78},[72,11244,11245],{"class":82}," c_g_a ",[72,11247,609],{"class":78},[72,11249,2466],{"class":362},[72,11251,1719],{"class":82},[72,11253,11254,11256,11258,11261,11263,11265],{"class":74,"line":1649},[72,11255,7218],{"class":78},[72,11257,2810],{"class":78},[72,11259,11260],{"class":82}," c_g_b ",[72,11262,609],{"class":78},[72,11264,2466],{"class":362},[72,11266,1719],{"class":82},[72,11268,11269],{"class":74,"line":1740},[72,11270,2828],{"emptyLinePlaceholder":490},[72,11272,11273,11275,11277],{"class":74,"line":1746},[72,11274,567],{"class":78},[72,11276,2401],{"class":358},[72,11278,11279],{"class":82},"() {\n",[72,11281,11282],{"class":74,"line":1758},[72,11283,2828],{"emptyLinePlaceholder":490},[72,11285,11286],{"class":74,"line":2041},[72,11287,11288],{"class":621},"    \u002F\u002F局部变量\n",[72,11290,11291,11293,11296,11298,11300],{"class":74,"line":2046},[72,11292,2413],{"class":78},[72,11294,11295],{"class":82}," a ",[72,11297,609],{"class":78},[72,11299,2466],{"class":362},[72,11301,1719],{"class":82},[72,11303,11304,11306,11309,11311,11313],{"class":74,"line":2052},[72,11305,2413],{"class":78},[72,11307,11308],{"class":82}," b ",[72,11310,609],{"class":78},[72,11312,2466],{"class":362},[72,11314,1719],{"class":82},[72,11316,11317],{"class":74,"line":2057},[72,11318,2828],{"emptyLinePlaceholder":490},[72,11320,11321],{"class":74,"line":2071},[72,11322,11323],{"class":621},"    \u002F\u002F打印地址\n",[72,11325,11326,11328,11330,11333,11335,11337,11339,11341,11343,11346,11348],{"class":74,"line":2076},[72,11327,6955],{"class":82},[72,11329,1597],{"class":78},[72,11331,11332],{"class":366}," \"局部变量a地址为： \"",[72,11334,1873],{"class":78},[72,11336,2087],{"class":82},[72,11338,567],{"class":78},[72,11340,983],{"class":82},[72,11342,907],{"class":78},[72,11344,11345],{"class":82},"a ",[72,11347,1597],{"class":78},[72,11349,9266],{"class":82},[72,11351,11352,11354,11356,11359,11361,11363,11365,11367,11369,11372,11374],{"class":74,"line":2082},[72,11353,6955],{"class":82},[72,11355,1597],{"class":78},[72,11357,11358],{"class":366}," \"局部变量b地址为： \"",[72,11360,1873],{"class":78},[72,11362,2087],{"class":82},[72,11364,567],{"class":78},[72,11366,983],{"class":82},[72,11368,907],{"class":78},[72,11370,11371],{"class":82},"b ",[72,11373,1597],{"class":78},[72,11375,9266],{"class":82},[72,11377,11378],{"class":74,"line":2103},[72,11379,2828],{"emptyLinePlaceholder":490},[72,11381,11382,11384,11386,11389,11391,11394,11396,11398,11400,11403,11405],{"class":74,"line":2108},[72,11383,6955],{"class":82},[72,11385,1597],{"class":78},[72,11387,11388],{"class":366}," \"全局变量g_a地址为： \"",[72,11390,1873],{"class":78},[72,11392,11393],{"class":82},"  (",[72,11395,567],{"class":78},[72,11397,983],{"class":82},[72,11399,907],{"class":78},[72,11401,11402],{"class":82},"g_a ",[72,11404,1597],{"class":78},[72,11406,9266],{"class":82},[72,11408,11409,11411,11413,11416,11418,11420,11422,11424,11426,11429,11431],{"class":74,"line":2122},[72,11410,6955],{"class":82},[72,11412,1597],{"class":78},[72,11414,11415],{"class":366}," \"全局变量g_b地址为： \"",[72,11417,1873],{"class":78},[72,11419,11393],{"class":82},[72,11421,567],{"class":78},[72,11423,983],{"class":82},[72,11425,907],{"class":78},[72,11427,11428],{"class":82},"g_b ",[72,11430,1597],{"class":78},[72,11432,9266],{"class":82},[72,11434,11435],{"class":74,"line":2127},[72,11436,2828],{"emptyLinePlaceholder":490},[72,11438,11439],{"class":74,"line":2156},[72,11440,11441],{"class":621},"    \u002F\u002F静态变量\n",[72,11443,11444,11447,11449,11452,11454,11456],{"class":74,"line":2161},[72,11445,11446],{"class":78},"    static",[72,11448,2810],{"class":78},[72,11450,11451],{"class":82}," s_a ",[72,11453,609],{"class":78},[72,11455,2466],{"class":362},[72,11457,1719],{"class":82},[72,11459,11460,11462,11464,11467,11469,11471],{"class":74,"line":2178},[72,11461,11446],{"class":78},[72,11463,2810],{"class":78},[72,11465,11466],{"class":82}," s_b ",[72,11468,609],{"class":78},[72,11470,2466],{"class":362},[72,11472,1719],{"class":82},[72,11474,11475],{"class":74,"line":2183},[72,11476,2828],{"emptyLinePlaceholder":490},[72,11478,11479,11481,11483,11486,11488,11490,11492,11494,11496,11499,11501],{"class":74,"line":2188},[72,11480,6955],{"class":82},[72,11482,1597],{"class":78},[72,11484,11485],{"class":366}," \"静态变量s_a地址为： \"",[72,11487,1873],{"class":78},[72,11489,2087],{"class":82},[72,11491,567],{"class":78},[72,11493,983],{"class":82},[72,11495,907],{"class":78},[72,11497,11498],{"class":82},"s_a ",[72,11500,1597],{"class":78},[72,11502,9266],{"class":82},[72,11504,11505,11507,11509,11512,11514,11516,11518,11520,11522,11525,11527],{"class":74,"line":2193},[72,11506,6955],{"class":82},[72,11508,1597],{"class":78},[72,11510,11511],{"class":366}," \"静态变量s_b地址为： \"",[72,11513,1873],{"class":78},[72,11515,2087],{"class":82},[72,11517,567],{"class":78},[72,11519,983],{"class":82},[72,11521,907],{"class":78},[72,11523,11524],{"class":82},"s_b ",[72,11526,1597],{"class":78},[72,11528,9266],{"class":82},[72,11530,11531],{"class":74,"line":2207},[72,11532,2828],{"emptyLinePlaceholder":490},[72,11534,11535,11537,11539,11542,11544,11546,11548,11550,11552,11554,11556],{"class":74,"line":2212},[72,11536,6955],{"class":82},[72,11538,1597],{"class":78},[72,11540,11541],{"class":366}," \"字符串常量地址为： \"",[72,11543,1873],{"class":78},[72,11545,2087],{"class":82},[72,11547,567],{"class":78},[72,11549,983],{"class":82},[72,11551,907],{"class":78},[72,11553,1615],{"class":366},[72,11555,1873],{"class":78},[72,11557,9266],{"class":82},[72,11559,11560,11562,11564,11566,11568,11570,11572,11574,11576,11579,11581],{"class":74,"line":3005},[72,11561,6955],{"class":82},[72,11563,1597],{"class":78},[72,11565,11541],{"class":366},[72,11567,1873],{"class":78},[72,11569,2087],{"class":82},[72,11571,567],{"class":78},[72,11573,983],{"class":82},[72,11575,907],{"class":78},[72,11577,11578],{"class":366},"\"hello world1\"",[72,11580,1873],{"class":78},[72,11582,9266],{"class":82},[72,11584,11585],{"class":74,"line":3019},[72,11586,2828],{"emptyLinePlaceholder":490},[72,11588,11589,11591,11593,11596,11598,11600,11602,11604,11606,11609,11611],{"class":74,"line":3027},[72,11590,6955],{"class":82},[72,11592,1597],{"class":78},[72,11594,11595],{"class":366}," \"全局常量c_g_a地址为： \"",[72,11597,1873],{"class":78},[72,11599,2087],{"class":82},[72,11601,567],{"class":78},[72,11603,983],{"class":82},[72,11605,907],{"class":78},[72,11607,11608],{"class":82},"c_g_a ",[72,11610,1597],{"class":78},[72,11612,9266],{"class":82},[72,11614,11615,11617,11619,11622,11624,11626,11628,11630,11632,11635,11637],{"class":74,"line":3032},[72,11616,6955],{"class":82},[72,11618,1597],{"class":78},[72,11620,11621],{"class":366}," \"全局常量c_g_b地址为： \"",[72,11623,1873],{"class":78},[72,11625,2087],{"class":82},[72,11627,567],{"class":78},[72,11629,983],{"class":82},[72,11631,907],{"class":78},[72,11633,11634],{"class":82},"c_g_b ",[72,11636,1597],{"class":78},[72,11638,9266],{"class":82},[72,11640,11641],{"class":74,"line":3038},[72,11642,2828],{"emptyLinePlaceholder":490},[72,11644,11645,11648,11650,11653,11655,11657],{"class":74,"line":3044},[72,11646,11647],{"class":78},"    const",[72,11649,2810],{"class":78},[72,11651,11652],{"class":82}," c_l_a ",[72,11654,609],{"class":78},[72,11656,2466],{"class":362},[72,11658,1719],{"class":82},[72,11660,11661,11663,11665,11668,11670,11672],{"class":74,"line":3049},[72,11662,11647],{"class":78},[72,11664,2810],{"class":78},[72,11666,11667],{"class":82}," c_l_b ",[72,11669,609],{"class":78},[72,11671,2466],{"class":362},[72,11673,1719],{"class":82},[72,11675,11676,11678,11680,11683,11685,11687,11689,11691,11693,11696,11698],{"class":74,"line":8374},[72,11677,6955],{"class":82},[72,11679,1597],{"class":78},[72,11681,11682],{"class":366}," \"局部常量c_l_a地址为： \"",[72,11684,1873],{"class":78},[72,11686,2087],{"class":82},[72,11688,567],{"class":78},[72,11690,983],{"class":82},[72,11692,907],{"class":78},[72,11694,11695],{"class":82},"c_l_a ",[72,11697,1597],{"class":78},[72,11699,9266],{"class":82},[72,11701,11702,11704,11706,11709,11711,11713,11715,11717,11719,11722,11724],{"class":74,"line":8398},[72,11703,6955],{"class":82},[72,11705,1597],{"class":78},[72,11707,11708],{"class":366}," \"局部常量c_l_b地址为： \"",[72,11710,1873],{"class":78},[72,11712,2087],{"class":82},[72,11714,567],{"class":78},[72,11716,983],{"class":82},[72,11718,907],{"class":78},[72,11720,11721],{"class":82},"c_l_b ",[72,11723,1597],{"class":78},[72,11725,9266],{"class":82},[72,11727,11728],{"class":74,"line":8403},[72,11729,2828],{"emptyLinePlaceholder":490},[72,11731,11732,11734,11736,11738],{"class":74,"line":8409},[72,11733,2731],{"class":358},[72,11735,564],{"class":82},[72,11737,2736],{"class":366},[72,11739,3147],{"class":82},[72,11741,11742],{"class":74,"line":8436},[72,11743,2828],{"emptyLinePlaceholder":490},[72,11745,11746,11748,11750],{"class":74,"line":8441},[72,11747,4518],{"class":78},[72,11749,4521],{"class":362},[72,11751,1719],{"class":82},[72,11753,11754],{"class":74,"line":8447},[72,11755,1994],{"class":82},[15,11757,11758],{},"总结：",[251,11760,11761,11764,11767,11770],{},[25,11762,11763],{},"c++中程序运行前分为全局区和代码区",[25,11765,11766],{},"代码区特点是共享和只读",[25,11768,11769],{},"全局区中存放全局变量、静态变量、常量",[25,11771,11772],{},"常量区中存放const修饰的全局常量和字符串常量",[531,11774,11776],{"id":11775},"_512程序运行后","5.1.2程序运行后",[22,11778,11779],{},[25,11780,11781],{},"栈区：",[251,11783,11784,11791],{},[25,11785,11786,11787,11790],{},"由编译器自动分配释放, 存放",[707,11788,11789],{},"函数的参数值,局部变量","等",[25,11792,11793,11794,11797],{},"注意事项：",[707,11795,11796],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[63,11799,11801],{"className":552,"code":11800,"language":554,"meta":68,"style":68},"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",[34,11802,11803,11814,11818,11833,11845,11849,11853,11861,11866,11881,11899,11916,11926,11934],{"__ignoreMap":68},[72,11804,11805,11807,11809,11812],{"class":74,"line":75},[72,11806,567],{"class":78},[72,11808,6944],{"class":78},[72,11810,11811],{"class":358}," func",[72,11813,2404],{"class":82},[72,11815,11816],{"class":74,"line":370},[72,11817,1975],{"class":82},[72,11819,11820,11822,11824,11826,11828,11830],{"class":74,"line":1608},[72,11821,2413],{"class":78},[72,11823,11295],{"class":82},[72,11825,609],{"class":78},[72,11827,2466],{"class":362},[72,11829,618],{"class":82},[72,11831,11832],{"class":621}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[72,11834,11835,11837,11839,11842],{"class":74,"line":1623},[72,11836,4518],{"class":78},[72,11838,11010],{"class":78},[72,11840,11841],{"class":82},"a;",[72,11843,11844],{"class":621}," \u002F\u002F放回局部变量的地址\n",[72,11846,11847],{"class":74,"line":1629},[72,11848,1994],{"class":82},[72,11850,11851],{"class":74,"line":1643},[72,11852,2828],{"emptyLinePlaceholder":490},[72,11854,11855,11857,11859],{"class":74,"line":1649},[72,11856,567],{"class":78},[72,11858,2401],{"class":358},[72,11860,11279],{"class":82},[72,11862,11863],{"class":74,"line":1740},[72,11864,11865],{"class":621},"    \u002F\u002F接受func的返回值\n",[72,11867,11868,11870,11872,11875,11877,11879],{"class":74,"line":1746},[72,11869,2413],{"class":78},[72,11871,6944],{"class":78},[72,11873,11874],{"class":82},"p ",[72,11876,609],{"class":78},[72,11878,11811],{"class":358},[72,11880,6062],{"class":82},[72,11882,11883,11885,11887,11889,11891,11893,11896],{"class":74,"line":1758},[72,11884,6955],{"class":82},[72,11886,1597],{"class":78},[72,11888,6944],{"class":78},[72,11890,11874],{"class":82},[72,11892,1597],{"class":78},[72,11894,11895],{"class":82}," endl;",[72,11897,11898],{"class":621}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[72,11900,11901,11903,11905,11907,11909,11911,11913],{"class":74,"line":2041},[72,11902,6955],{"class":82},[72,11904,1597],{"class":78},[72,11906,6944],{"class":78},[72,11908,11874],{"class":82},[72,11910,1597],{"class":78},[72,11912,11895],{"class":82},[72,11914,11915],{"class":621}," \u002F\u002F第二次这个数据不再保留\n",[72,11917,11918,11920,11922,11924],{"class":74,"line":2046},[72,11919,2731],{"class":358},[72,11921,564],{"class":82},[72,11923,2736],{"class":366},[72,11925,3147],{"class":82},[72,11927,11928,11930,11932],{"class":74,"line":2052},[72,11929,4518],{"class":78},[72,11931,4521],{"class":362},[72,11933,1719],{"class":82},[72,11935,11936],{"class":74,"line":2057},[72,11937,1994],{"class":82},[15,11939,11940],{},"输出结果：",[15,11942,11943],{},[1891,11944],{"alt":11945,"src":11946},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[15,11948,11949],{},"总结：不要返回局部变量的地址",[22,11951,11952],{"start":370},[25,11953,11954],{},"堆区",[251,11956,11957,11960],{},[25,11958,11959],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[25,11961,11962],{},"在c++中主要利用new在堆区开辟内存",[63,11964,11966],{"className":552,"code":11965,"language":554,"meta":68,"style":68},"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",[34,11967,11968,11983,11987,11992,12013,12020,12024,12032,12036,12041,12055,12067],{"__ignoreMap":68},[72,11969,11970,11972,11975,11978,11980],{"class":74,"line":75},[72,11971,567],{"class":78},[72,11973,11974],{"class":78},"  *",[72,11976,11977],{"class":358},"func",[72,11979,2855],{"class":82},[72,11981,11982],{"class":621},"  \u002F\u002F函数返回指针\n",[72,11984,11985],{"class":74,"line":370},[72,11986,1975],{"class":82},[72,11988,11989],{"class":74,"line":1608},[72,11990,11991],{"class":621},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[72,11993,11994,11996,11998,12000,12002,12005,12007,12009,12011],{"class":74,"line":1623},[72,11995,4575],{"class":78},[72,11997,6944],{"class":78},[72,11999,15],{"class":82},[72,12001,609],{"class":78},[72,12003,12004],{"class":78}," new",[72,12006,2810],{"class":78},[72,12008,564],{"class":82},[72,12010,1000],{"class":362},[72,12012,3147],{"class":82},[72,12014,12015,12017],{"class":74,"line":1629},[72,12016,4809],{"class":78},[72,12018,12019],{"class":82}," p;\n",[72,12021,12022],{"class":74,"line":1643},[72,12023,1994],{"class":82},[72,12025,12026,12028,12030],{"class":74,"line":1649},[72,12027,567],{"class":78},[72,12029,2401],{"class":358},[72,12031,2404],{"class":82},[72,12033,12034],{"class":74,"line":1740},[72,12035,1975],{"class":82},[72,12037,12038],{"class":74,"line":1746},[72,12039,12040],{"class":621},"    \u002F\u002F在堆区开辟数据\n",[72,12042,12043,12045,12047,12049,12051,12053],{"class":74,"line":1758},[72,12044,2413],{"class":78},[72,12046,6944],{"class":78},[72,12048,15],{"class":82},[72,12050,609],{"class":78},[72,12052,11977],{"class":358},[72,12054,6062],{"class":82},[72,12056,12057,12059,12061,12063,12065],{"class":74,"line":2041},[72,12058,1980],{"class":82},[72,12060,6845],{"class":78},[72,12062,15],{"class":82},[72,12064,1597],{"class":78},[72,12066,1620],{"class":82},[72,12068,12069],{"class":74,"line":2046},[72,12070,1994],{"class":82},[15,12072,12073],{},"图片展示：",[15,12075,12076],{},[1891,12077],{"alt":11945,"src":12078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[15,12080,12081],{},"堆区内存由程序员管生死！！！",[22,12083,12084],{"start":1608},[25,12085,12086],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[15,12088,12089],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[15,12091,12092,12093],{},"​语法：",[34,12094,12095],{}," new 数据类型",[15,12097,12098],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[63,12100,12102],{"className":552,"code":12101,"language":554,"meta":68,"style":68},"\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",[34,12103,12104,12109,12119,12123,12128,12133,12155,12159,12167,12171,12185,12197,12209,12221,12226,12231,12242,12246,12251,12259,12263,12268,12290,12316,12320,12338,12342,12368,12372,12384,12388,12393,12398,12406,12410,12414,12422,12426,12432,12438],{"__ignoreMap":68},[72,12105,12106],{"class":74,"line":75},[72,12107,12108],{"class":621},"\u002F\u002F1.new的基本语法\n",[72,12110,12111,12113,12115,12117],{"class":74,"line":370},[72,12112,567],{"class":78},[72,12114,6944],{"class":78},[72,12116,11977],{"class":358},[72,12118,2404],{"class":82},[72,12120,12121],{"class":74,"line":1608},[72,12122,1975],{"class":82},[72,12124,12125],{"class":74,"line":1623},[72,12126,12127],{"class":621},"    \u002F\u002F在堆区创建整型数据\n",[72,12129,12130],{"class":74,"line":1629},[72,12131,12132],{"class":621},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[72,12134,12135,12137,12139,12141,12144,12146,12148,12150,12152],{"class":74,"line":1643},[72,12136,2413],{"class":78},[72,12138,6944],{"class":78},[72,12140,15],{"class":82},[72,12142,12143],{"class":78},"=new",[72,12145,2810],{"class":78},[72,12147,564],{"class":82},[72,12149,1000],{"class":362},[72,12151,6392],{"class":82},[72,12153,12154],{"class":621},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[72,12156,12157],{"class":74,"line":1649},[72,12158,1994],{"class":82},[72,12160,12161,12163,12165],{"class":74,"line":1740},[72,12162,5790],{"class":78},[72,12164,6014],{"class":358},[72,12166,2404],{"class":82},[72,12168,12169],{"class":74,"line":1746},[72,12170,1975],{"class":82},[72,12172,12173,12175,12177,12179,12181,12183],{"class":74,"line":1758},[72,12174,2413],{"class":78},[72,12176,6944],{"class":78},[72,12178,15],{"class":82},[72,12180,609],{"class":78},[72,12182,11977],{"class":358},[72,12184,6062],{"class":82},[72,12186,12187,12189,12191,12193,12195],{"class":74,"line":2041},[72,12188,1980],{"class":82},[72,12190,6845],{"class":78},[72,12192,15],{"class":82},[72,12194,1597],{"class":78},[72,12196,1620],{"class":82},[72,12198,12199,12201,12203,12205,12207],{"class":74,"line":2046},[72,12200,1980],{"class":82},[72,12202,6845],{"class":78},[72,12204,15],{"class":82},[72,12206,1597],{"class":78},[72,12208,1620],{"class":82},[72,12210,12211,12213,12215,12217,12219],{"class":74,"line":2052},[72,12212,1980],{"class":82},[72,12214,6845],{"class":78},[72,12216,15],{"class":82},[72,12218,1597],{"class":78},[72,12220,1620],{"class":82},[72,12222,12223],{"class":74,"line":2057},[72,12224,12225],{"class":621},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[72,12227,12228],{"class":74,"line":2071},[72,12229,12230],{"class":621},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[72,12232,12233,12236,12239],{"class":74,"line":2076},[72,12234,12235],{"class":78},"    delete",[72,12237,12238],{"class":82}," p;",[72,12240,12241],{"class":621},"\u002F\u002F删除这块地址\n",[72,12243,12244],{"class":74,"line":2082},[72,12245,1994],{"class":82},[72,12247,12248],{"class":74,"line":2103},[72,12249,12250],{"class":621},"\u002F\u002F2.在堆区利用new开辟数组\n",[72,12252,12253,12255,12257],{"class":74,"line":2108},[72,12254,5790],{"class":78},[72,12256,6083],{"class":358},[72,12258,2404],{"class":82},[72,12260,12261],{"class":74,"line":2122},[72,12262,1975],{"class":82},[72,12264,12265],{"class":74,"line":2127},[72,12266,12267],{"class":621},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[72,12269,12270,12272,12274,12276,12278,12280,12282,12284,12287],{"class":74,"line":2156},[72,12271,2413],{"class":78},[72,12273,6944],{"class":78},[72,12275,4308],{"class":82},[72,12277,12143],{"class":78},[72,12279,2810],{"class":78},[72,12281,1444],{"class":82},[72,12283,1000],{"class":362},[72,12285,12286],{"class":82},"];",[72,12288,12289],{"class":621},"\u002F\u002F10代表数组有10个元素\n",[72,12291,12292,12294,12296,12298,12300,12302,12304,12306,12308,12310,12312,12314],{"class":74,"line":2161},[72,12293,3629],{"class":78},[72,12295,2087],{"class":82},[72,12297,567],{"class":78},[72,12299,3460],{"class":82},[72,12301,609],{"class":78},[72,12303,747],{"class":362},[72,12305,3467],{"class":82},[72,12307,1464],{"class":78},[72,12309,1000],{"class":362},[72,12311,3467],{"class":82},[72,12313,2720],{"class":78},[72,12315,570],{"class":82},[72,12317,12318],{"class":74,"line":2178},[72,12319,2458],{"class":82},[72,12321,12322,12325,12327,12329,12331,12333,12335],{"class":74,"line":2183},[72,12323,12324],{"class":82},"        arr[i]",[72,12326,609],{"class":78},[72,12328,995],{"class":82},[72,12330,1035],{"class":78},[72,12332,865],{"class":362},[72,12334,618],{"class":82},[72,12336,12337],{"class":621},"\u002F\u002F给10个元素赋值100～109\n",[72,12339,12340],{"class":74,"line":2188},[72,12341,2615],{"class":82},[72,12343,12344,12346,12348,12350,12352,12354,12356,12358,12360,12362,12364,12366],{"class":74,"line":2193},[72,12345,3629],{"class":78},[72,12347,2087],{"class":82},[72,12349,567],{"class":78},[72,12351,3460],{"class":82},[72,12353,609],{"class":78},[72,12355,747],{"class":362},[72,12357,3467],{"class":82},[72,12359,1464],{"class":78},[72,12361,1000],{"class":362},[72,12363,3467],{"class":82},[72,12365,2720],{"class":78},[72,12367,570],{"class":82},[72,12369,12370],{"class":74,"line":2207},[72,12371,2458],{"class":82},[72,12373,12374,12376,12378,12380,12382],{"class":74,"line":2212},[72,12375,3879],{"class":82},[72,12377,1597],{"class":78},[72,12379,4782],{"class":82},[72,12381,1597],{"class":78},[72,12383,1620],{"class":82},[72,12385,12386],{"class":74,"line":3005},[72,12387,2615],{"class":82},[72,12389,12390],{"class":74,"line":3019},[72,12391,12392],{"class":621},"    \u002F\u002F释放堆区数组\n",[72,12394,12395],{"class":74,"line":3027},[72,12396,12397],{"class":621},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[72,12399,12400,12403],{"class":74,"line":3032},[72,12401,12402],{"class":78},"    delete[]",[72,12404,12405],{"class":82}," arr;\n",[72,12407,12408],{"class":74,"line":3038},[72,12409,1994],{"class":82},[72,12411,12412],{"class":74,"line":3044},[72,12413,2828],{"emptyLinePlaceholder":490},[72,12415,12416,12418,12420],{"class":74,"line":3049},[72,12417,567],{"class":78},[72,12419,2401],{"class":358},[72,12421,2404],{"class":82},[72,12423,12424],{"class":74,"line":8374},[72,12425,1975],{"class":82},[72,12427,12428,12430],{"class":74,"line":8398},[72,12429,6059],{"class":358},[72,12431,6062],{"class":82},[72,12433,12434,12436],{"class":74,"line":8403},[72,12435,6128],{"class":358},[72,12437,6062],{"class":82},[72,12439,12440],{"class":74,"line":8409},[72,12441,1994],{"class":82},[473,12443,12444],{},"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":68,"searchDepth":370,"depth":370,"links":12446},[12447],{"id":11115,"depth":370,"text":11116,"children":12448},[12449,12450],{"id":11147,"depth":1608,"text":11148},{"id":11775,"depth":1608,"text":11776},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":11107,"description":68},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12457,"title":12458,"body":12459,"description":68,"extension":487,"meta":13940,"navigation":490,"path":13941,"seo":13942,"stem":13943,"__hash__":13944},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12460,"toc":13932},[12461,12464,12468,12471,12474,12643,12647,12652,12669,12674,12826,12830,12833,12836,13230,13234,13237,13242,13245,13557,13561,13567,13727,13729,13737,13741,13744,13751,13929],[10,12462,12458],{"id":12463},"_6引用",[85,12465,12467],{"id":12466},"_61引用基本用法","6.1引用基本用法",[15,12469,12470],{},"引用的本质：给变量起别名",[15,12472,12473],{},"语法：数据类型 &别名=原名",[63,12475,12477],{"className":552,"code":12476,"language":554,"meta":68,"style":68},"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",[34,12478,12479,12487,12491,12503,12515,12519,12538,12557,12561,12572,12576,12595,12613,12617,12627,12631,12639],{"__ignoreMap":68},[72,12480,12481,12483,12485],{"class":74,"line":75},[72,12482,567],{"class":78},[72,12484,2401],{"class":358},[72,12486,11279],{"class":82},[72,12488,12489],{"class":74,"line":370},[72,12490,2828],{"emptyLinePlaceholder":490},[72,12492,12493,12495,12497,12499,12501],{"class":74,"line":1608},[72,12494,2413],{"class":78},[72,12496,11295],{"class":82},[72,12498,609],{"class":78},[72,12500,2466],{"class":362},[72,12502,1719],{"class":82},[72,12504,12505,12507,12509,12511,12513],{"class":74,"line":1623},[72,12506,2413],{"class":78},[72,12508,11010],{"class":78},[72,12510,11371],{"class":82},[72,12512,609],{"class":78},[72,12514,1861],{"class":82},[72,12516,12517],{"class":74,"line":1629},[72,12518,2828],{"emptyLinePlaceholder":490},[72,12520,12521,12523,12525,12528,12530,12532,12534,12536],{"class":74,"line":1643},[72,12522,6955],{"class":82},[72,12524,1597],{"class":78},[72,12526,12527],{"class":366}," \"a = \"",[72,12529,1873],{"class":78},[72,12531,11295],{"class":82},[72,12533,1597],{"class":78},[72,12535,11895],{"class":82},[72,12537,7694],{"class":621},[72,12539,12540,12542,12544,12547,12549,12551,12553,12555],{"class":74,"line":1649},[72,12541,6955],{"class":82},[72,12543,1597],{"class":78},[72,12545,12546],{"class":366}," \"b = \"",[72,12548,1873],{"class":78},[72,12550,11308],{"class":82},[72,12552,1597],{"class":78},[72,12554,11895],{"class":82},[72,12556,7694],{"class":621},[72,12558,12559],{"class":74,"line":1740},[72,12560,2828],{"emptyLinePlaceholder":490},[72,12562,12563,12566,12568,12570],{"class":74,"line":1746},[72,12564,12565],{"class":82},"    b ",[72,12567,609],{"class":78},[72,12569,6180],{"class":362},[72,12571,1719],{"class":82},[72,12573,12574],{"class":74,"line":1758},[72,12575,2828],{"emptyLinePlaceholder":490},[72,12577,12578,12580,12582,12584,12586,12588,12590,12592],{"class":74,"line":2041},[72,12579,6955],{"class":82},[72,12581,1597],{"class":78},[72,12583,12527],{"class":366},[72,12585,1873],{"class":78},[72,12587,11295],{"class":82},[72,12589,1597],{"class":78},[72,12591,11895],{"class":82},[72,12593,12594],{"class":621},"\u002F\u002F100\n",[72,12596,12597,12599,12601,12603,12605,12607,12609,12611],{"class":74,"line":2046},[72,12598,6955],{"class":82},[72,12600,1597],{"class":78},[72,12602,12546],{"class":366},[72,12604,1873],{"class":78},[72,12606,11308],{"class":82},[72,12608,1597],{"class":78},[72,12610,11895],{"class":82},[72,12612,12594],{"class":621},[72,12614,12615],{"class":74,"line":2052},[72,12616,2828],{"emptyLinePlaceholder":490},[72,12618,12619,12621,12623,12625],{"class":74,"line":2057},[72,12620,2731],{"class":358},[72,12622,564],{"class":82},[72,12624,2736],{"class":366},[72,12626,3147],{"class":82},[72,12628,12629],{"class":74,"line":2071},[72,12630,2828],{"emptyLinePlaceholder":490},[72,12632,12633,12635,12637],{"class":74,"line":2076},[72,12634,4518],{"class":78},[72,12636,4521],{"class":362},[72,12638,1719],{"class":82},[72,12640,12641],{"class":74,"line":2082},[72,12642,1994],{"class":82},[85,12644,12646],{"id":12645},"_62引用的注意事项","6.2引用的注意事项",[22,12648,12649],{},[25,12650,12651],{},"引用必须要初始化",[63,12653,12655],{"className":552,"code":12654,"language":554,"meta":68,"style":68},"int &b;\u002F\u002F非常错误！\n",[34,12656,12657],{"__ignoreMap":68},[72,12658,12659,12661,12663,12666],{"class":74,"line":75},[72,12660,567],{"class":78},[72,12662,11010],{"class":78},[72,12664,12665],{"class":82},"b;",[72,12667,12668],{"class":621},"\u002F\u002F非常错误！\n",[22,12670,12671],{"start":370},[25,12672,12673],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[63,12675,12677],{"className":552,"code":12676,"language":554,"meta":68,"style":68},"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",[34,12678,12679,12687,12699,12711,12719,12735,12748,12766,12784,12804,12814,12822],{"__ignoreMap":68},[72,12680,12681,12683,12685],{"class":74,"line":75},[72,12682,567],{"class":78},[72,12684,2401],{"class":358},[72,12686,11279],{"class":82},[72,12688,12689,12691,12693,12695,12697],{"class":74,"line":370},[72,12690,2413],{"class":78},[72,12692,11295],{"class":82},[72,12694,609],{"class":78},[72,12696,2466],{"class":362},[72,12698,1719],{"class":82},[72,12700,12701,12703,12705,12707,12709],{"class":74,"line":1608},[72,12702,2413],{"class":78},[72,12704,11308],{"class":82},[72,12706,609],{"class":78},[72,12708,9376],{"class":362},[72,12710,1719],{"class":82},[72,12712,12713,12716],{"class":74,"line":1623},[72,12714,12715],{"class":621},"    \u002F\u002Fint &c;",[72,12717,12718],{"class":621}," \u002F\u002F错误，引用必须初始化\n",[72,12720,12721,12723,12725,12727,12729,12732],{"class":74,"line":1629},[72,12722,2413],{"class":78},[72,12724,11010],{"class":78},[72,12726,3374],{"class":82},[72,12728,609],{"class":78},[72,12730,12731],{"class":82}," a;",[72,12733,12734],{"class":621}," \u002F\u002F一旦初始化后，就不可以更改\n",[72,12736,12737,12740,12742,12745],{"class":74,"line":1643},[72,12738,12739],{"class":82},"    c ",[72,12741,609],{"class":78},[72,12743,12744],{"class":82}," b;",[72,12746,12747],{"class":621}," \u002F\u002F这是赋值操作，不是更改引用\n",[72,12749,12750,12752,12754,12756,12758,12760,12762,12764],{"class":74,"line":1649},[72,12751,6955],{"class":82},[72,12753,1597],{"class":78},[72,12755,12527],{"class":366},[72,12757,1873],{"class":78},[72,12759,11295],{"class":82},[72,12761,1597],{"class":78},[72,12763,11895],{"class":82},[72,12765,7679],{"class":621},[72,12767,12768,12770,12772,12774,12776,12778,12780,12782],{"class":74,"line":1740},[72,12769,6955],{"class":82},[72,12771,1597],{"class":78},[72,12773,12546],{"class":366},[72,12775,1873],{"class":78},[72,12777,11308],{"class":82},[72,12779,1597],{"class":78},[72,12781,11895],{"class":82},[72,12783,7679],{"class":621},[72,12785,12786,12788,12790,12793,12795,12798,12800,12802],{"class":74,"line":1746},[72,12787,6955],{"class":82},[72,12789,1597],{"class":78},[72,12791,12792],{"class":366}," \"c = \"",[72,12794,1873],{"class":78},[72,12796,12797],{"class":82}," c ",[72,12799,1597],{"class":78},[72,12801,11895],{"class":82},[72,12803,7679],{"class":621},[72,12805,12806,12808,12810,12812],{"class":74,"line":1758},[72,12807,2731],{"class":358},[72,12809,564],{"class":82},[72,12811,2736],{"class":366},[72,12813,3147],{"class":82},[72,12815,12816,12818,12820],{"class":74,"line":2041},[72,12817,4518],{"class":78},[72,12819,4521],{"class":362},[72,12821,1719],{"class":82},[72,12823,12824],{"class":74,"line":2046},[72,12825,1994],{"class":82},[85,12827,12829],{"id":12828},"_63引用做函数参数","6.3引用做函数参数",[15,12831,12832],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[15,12834,12835],{},"优点：可以简化指针修改实参",[63,12837,12839],{"className":552,"code":12838,"language":554,"meta":68,"style":68},"\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",[34,12840,12841,12846,12869,12880,12890,12899,12903,12907,12912,12934,12946,12958,12968,12972,12976,12981,13003,13013,13021,13029,13033,13037,13045,13049,13061,13073,13077,13088,13114,13118,13138,13162,13166,13176,13200,13204,13214,13218,13226],{"__ignoreMap":68},[72,12842,12843],{"class":74,"line":75},[72,12844,12845],{"class":621},"\u002F\u002F1. 值传递\n",[72,12847,12848,12850,12853,12855,12857,12859,12862,12864,12866],{"class":74,"line":370},[72,12849,5790],{"class":78},[72,12851,12852],{"class":358}," mySwap01",[72,12854,564],{"class":82},[72,12856,567],{"class":78},[72,12858,1827],{"class":5642},[72,12860,12861],{"class":82},", ",[72,12863,567],{"class":78},[72,12865,3261],{"class":5642},[72,12867,12868],{"class":82},") {\n",[72,12870,12871,12873,12876,12878],{"class":74,"line":1608},[72,12872,2413],{"class":78},[72,12874,12875],{"class":82}," temp ",[72,12877,609],{"class":78},[72,12879,1861],{"class":82},[72,12881,12882,12885,12887],{"class":74,"line":1623},[72,12883,12884],{"class":82},"    a ",[72,12886,609],{"class":78},[72,12888,12889],{"class":82}," b;\n",[72,12891,12892,12894,12896],{"class":74,"line":1629},[72,12893,12565],{"class":82},[72,12895,609],{"class":78},[72,12897,12898],{"class":82}," temp;\n",[72,12900,12901],{"class":74,"line":1643},[72,12902,1994],{"class":82},[72,12904,12905],{"class":74,"line":1649},[72,12906,2828],{"emptyLinePlaceholder":490},[72,12908,12909],{"class":74,"line":1740},[72,12910,12911],{"class":621},"\u002F\u002F2. 地址传递\n",[72,12913,12914,12916,12919,12921,12924,12926,12928,12930,12932],{"class":74,"line":1746},[72,12915,5790],{"class":78},[72,12917,12918],{"class":358}," mySwap02",[72,12920,564],{"class":82},[72,12922,12923],{"class":78},"int*",[72,12925,1827],{"class":5642},[72,12927,12861],{"class":82},[72,12929,12923],{"class":78},[72,12931,3261],{"class":5642},[72,12933,12868],{"class":82},[72,12935,12936,12938,12940,12942,12944],{"class":74,"line":1758},[72,12937,2413],{"class":78},[72,12939,12875],{"class":82},[72,12941,609],{"class":78},[72,12943,6944],{"class":78},[72,12945,6623],{"class":82},[72,12947,12948,12950,12952,12954,12956],{"class":74,"line":2041},[72,12949,6829],{"class":78},[72,12951,11345],{"class":82},[72,12953,609],{"class":78},[72,12955,6944],{"class":78},[72,12957,6495],{"class":82},[72,12959,12960,12962,12964,12966],{"class":74,"line":2046},[72,12961,6829],{"class":78},[72,12963,11371],{"class":82},[72,12965,609],{"class":78},[72,12967,12898],{"class":82},[72,12969,12970],{"class":74,"line":2052},[72,12971,1994],{"class":82},[72,12973,12974],{"class":74,"line":2057},[72,12975,2828],{"emptyLinePlaceholder":490},[72,12977,12978],{"class":74,"line":2071},[72,12979,12980],{"class":621},"\u002F\u002F3. 引用传递\n",[72,12982,12983,12985,12988,12990,12993,12995,12997,12999,13001],{"class":74,"line":2076},[72,12984,5790],{"class":78},[72,12986,12987],{"class":358}," mySwap03",[72,12989,564],{"class":82},[72,12991,12992],{"class":78},"int&",[72,12994,1827],{"class":5642},[72,12996,12861],{"class":82},[72,12998,12992],{"class":78},[72,13000,3261],{"class":5642},[72,13002,12868],{"class":82},[72,13004,13005,13007,13009,13011],{"class":74,"line":2082},[72,13006,2413],{"class":78},[72,13008,12875],{"class":82},[72,13010,609],{"class":78},[72,13012,1861],{"class":82},[72,13014,13015,13017,13019],{"class":74,"line":2103},[72,13016,12884],{"class":82},[72,13018,609],{"class":78},[72,13020,12889],{"class":82},[72,13022,13023,13025,13027],{"class":74,"line":2108},[72,13024,12565],{"class":82},[72,13026,609],{"class":78},[72,13028,12898],{"class":82},[72,13030,13031],{"class":74,"line":2122},[72,13032,1994],{"class":82},[72,13034,13035],{"class":74,"line":2127},[72,13036,2828],{"emptyLinePlaceholder":490},[72,13038,13039,13041,13043],{"class":74,"line":2156},[72,13040,567],{"class":78},[72,13042,2401],{"class":358},[72,13044,11279],{"class":82},[72,13046,13047],{"class":74,"line":2161},[72,13048,2828],{"emptyLinePlaceholder":490},[72,13050,13051,13053,13055,13057,13059],{"class":74,"line":2178},[72,13052,2413],{"class":78},[72,13054,11295],{"class":82},[72,13056,609],{"class":78},[72,13058,2466],{"class":362},[72,13060,1719],{"class":82},[72,13062,13063,13065,13067,13069,13071],{"class":74,"line":2183},[72,13064,2413],{"class":78},[72,13066,11308],{"class":82},[72,13068,609],{"class":78},[72,13070,9376],{"class":362},[72,13072,1719],{"class":82},[72,13074,13075],{"class":74,"line":2188},[72,13076,2828],{"emptyLinePlaceholder":490},[72,13078,13079,13082,13085],{"class":74,"line":2193},[72,13080,13081],{"class":358},"    mySwap01",[72,13083,13084],{"class":82},"(a, b);",[72,13086,13087],{"class":621},"\u002F\u002F值传递，形参不会修饰实参\n",[72,13089,13090,13092,13094,13097,13099,13101,13103,13106,13108,13110,13112],{"class":74,"line":2207},[72,13091,6955],{"class":82},[72,13093,1597],{"class":78},[72,13095,13096],{"class":366}," \"a:\"",[72,13098,1873],{"class":78},[72,13100,11295],{"class":82},[72,13102,1597],{"class":78},[72,13104,13105],{"class":366}," \" b:\"",[72,13107,1873],{"class":78},[72,13109,11308],{"class":82},[72,13111,1597],{"class":78},[72,13113,9266],{"class":82},[72,13115,13116],{"class":74,"line":2212},[72,13117,2828],{"emptyLinePlaceholder":490},[72,13119,13120,13123,13125,13127,13130,13132,13135],{"class":74,"line":3005},[72,13121,13122],{"class":358},"    mySwap02",[72,13124,564],{"class":82},[72,13126,907],{"class":78},[72,13128,13129],{"class":82},"a, ",[72,13131,907],{"class":78},[72,13133,13134],{"class":82},"b);",[72,13136,13137],{"class":621},"\u002F\u002F地址传递，形参会修饰实参\n",[72,13139,13140,13142,13144,13146,13148,13150,13152,13154,13156,13158,13160],{"class":74,"line":3019},[72,13141,6955],{"class":82},[72,13143,1597],{"class":78},[72,13145,13096],{"class":366},[72,13147,1873],{"class":78},[72,13149,11295],{"class":82},[72,13151,1597],{"class":78},[72,13153,13105],{"class":366},[72,13155,1873],{"class":78},[72,13157,11308],{"class":82},[72,13159,1597],{"class":78},[72,13161,9266],{"class":82},[72,13163,13164],{"class":74,"line":3027},[72,13165,2828],{"emptyLinePlaceholder":490},[72,13167,13168,13171,13173],{"class":74,"line":3032},[72,13169,13170],{"class":358},"    mySwap03",[72,13172,13084],{"class":82},[72,13174,13175],{"class":621},"\u002F\u002F引用传递，形参会修饰实参\n",[72,13177,13178,13180,13182,13184,13186,13188,13190,13192,13194,13196,13198],{"class":74,"line":3038},[72,13179,6955],{"class":82},[72,13181,1597],{"class":78},[72,13183,13096],{"class":366},[72,13185,1873],{"class":78},[72,13187,11295],{"class":82},[72,13189,1597],{"class":78},[72,13191,13105],{"class":366},[72,13193,1873],{"class":78},[72,13195,11308],{"class":82},[72,13197,1597],{"class":78},[72,13199,9266],{"class":82},[72,13201,13202],{"class":74,"line":3044},[72,13203,2828],{"emptyLinePlaceholder":490},[72,13205,13206,13208,13210,13212],{"class":74,"line":3049},[72,13207,2731],{"class":358},[72,13209,564],{"class":82},[72,13211,2736],{"class":366},[72,13213,3147],{"class":82},[72,13215,13216],{"class":74,"line":8374},[72,13217,2828],{"emptyLinePlaceholder":490},[72,13219,13220,13222,13224],{"class":74,"line":8398},[72,13221,4518],{"class":78},[72,13223,4521],{"class":362},[72,13225,1719],{"class":82},[72,13227,13228],{"class":74,"line":8403},[72,13229,1994],{"class":82},[85,13231,13233],{"id":13232},"_64引用做函数的返回值","6.4引用做函数的返回值",[15,13235,13236],{},"作用：引用是可以作为函数的返回值存在的",[15,13238,9451,13239],{},[707,13240,13241],{},"不要返回局部变量引用",[15,13243,13244],{},"用法：函数调用作为左值",[63,13246,13248],{"className":10367,"code":13247,"language":10369,"meta":68,"style":68},"\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",[34,13249,13250,13255,13263,13278,13284,13288,13292,13297,13305,13322,13328,13332,13336,13344,13348,13353,13367,13387,13406,13410,13415,13428,13448,13466,13470,13486,13490,13509,13527,13531,13541,13545,13553],{"__ignoreMap":68},[72,13251,13252],{"class":74,"line":75},[72,13253,13254],{"class":621},"\u002F\u002F返回局部变量引用\n",[72,13256,13257,13259,13261],{"class":74,"line":370},[72,13258,12992],{"class":78},[72,13260,6014],{"class":358},[72,13262,11279],{"class":82},[72,13264,13265,13267,13269,13271,13273,13275],{"class":74,"line":1608},[72,13266,2413],{"class":78},[72,13268,11295],{"class":82},[72,13270,609],{"class":78},[72,13272,2466],{"class":362},[72,13274,618],{"class":82},[72,13276,13277],{"class":621}," \u002F\u002F局部变量\n",[72,13279,13280,13282],{"class":74,"line":1623},[72,13281,4518],{"class":78},[72,13283,1861],{"class":82},[72,13285,13286],{"class":74,"line":1629},[72,13287,1994],{"class":82},[72,13289,13290],{"class":74,"line":1643},[72,13291,2828],{"emptyLinePlaceholder":490},[72,13293,13294],{"class":74,"line":1649},[72,13295,13296],{"class":621},"\u002F\u002F返回静态变量引用\n",[72,13298,13299,13301,13303],{"class":74,"line":1740},[72,13300,12992],{"class":78},[72,13302,6083],{"class":358},[72,13304,11279],{"class":82},[72,13306,13307,13309,13311,13313,13315,13317,13319],{"class":74,"line":1746},[72,13308,11446],{"class":78},[72,13310,2810],{"class":78},[72,13312,11295],{"class":82},[72,13314,609],{"class":78},[72,13316,9376],{"class":362},[72,13318,618],{"class":82},[72,13320,13321],{"class":621},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[72,13323,13324,13326],{"class":74,"line":1758},[72,13325,4518],{"class":78},[72,13327,1861],{"class":82},[72,13329,13330],{"class":74,"line":2041},[72,13331,1994],{"class":82},[72,13333,13334],{"class":74,"line":2046},[72,13335,2828],{"emptyLinePlaceholder":490},[72,13337,13338,13340,13342],{"class":74,"line":2052},[72,13339,567],{"class":78},[72,13341,2401],{"class":358},[72,13343,11279],{"class":82},[72,13345,13346],{"class":74,"line":2057},[72,13347,2828],{"emptyLinePlaceholder":490},[72,13349,13350],{"class":74,"line":2071},[72,13351,13352],{"class":621},"    \u002F\u002F不能返回局部变量的引用\n",[72,13354,13355,13358,13361,13363,13365],{"class":74,"line":2076},[72,13356,13357],{"class":78},"    int&",[72,13359,13360],{"class":82}," ref ",[72,13362,609],{"class":78},[72,13364,6014],{"class":358},[72,13366,6062],{"class":82},[72,13368,13369,13371,13373,13376,13378,13380,13382,13384],{"class":74,"line":2082},[72,13370,6955],{"class":82},[72,13372,1597],{"class":78},[72,13374,13375],{"class":366}," \"ref = \"",[72,13377,1873],{"class":78},[72,13379,13360],{"class":82},[72,13381,1597],{"class":78},[72,13383,11895],{"class":82},[72,13385,13386],{"class":621},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[72,13388,13389,13391,13393,13395,13397,13399,13401,13403],{"class":74,"line":2103},[72,13390,6955],{"class":82},[72,13392,1597],{"class":78},[72,13394,13375],{"class":366},[72,13396,1873],{"class":78},[72,13398,13360],{"class":82},[72,13400,1597],{"class":78},[72,13402,11895],{"class":82},[72,13404,13405],{"class":621},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[72,13407,13408],{"class":74,"line":2108},[72,13409,2828],{"emptyLinePlaceholder":490},[72,13411,13412],{"class":74,"line":2122},[72,13413,13414],{"class":621},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[72,13416,13417,13419,13422,13424,13426],{"class":74,"line":2127},[72,13418,13357],{"class":78},[72,13420,13421],{"class":82}," ref2 ",[72,13423,609],{"class":78},[72,13425,6083],{"class":358},[72,13427,6062],{"class":82},[72,13429,13430,13432,13434,13437,13439,13441,13443,13445],{"class":74,"line":2156},[72,13431,6955],{"class":82},[72,13433,1597],{"class":78},[72,13435,13436],{"class":366}," \"ref2 = \"",[72,13438,1873],{"class":78},[72,13440,13421],{"class":82},[72,13442,1597],{"class":78},[72,13444,11895],{"class":82},[72,13446,13447],{"class":621}," \u002F\u002F20\n",[72,13449,13450,13452,13454,13456,13458,13460,13462,13464],{"class":74,"line":2161},[72,13451,6955],{"class":82},[72,13453,1597],{"class":78},[72,13455,13436],{"class":366},[72,13457,1873],{"class":78},[72,13459,13421],{"class":82},[72,13461,1597],{"class":78},[72,13463,11895],{"class":82},[72,13465,13447],{"class":621},[72,13467,13468],{"class":74,"line":2178},[72,13469,2828],{"emptyLinePlaceholder":490},[72,13471,13472,13474,13477,13479,13481,13483],{"class":74,"line":2183},[72,13473,6128],{"class":358},[72,13475,13476],{"class":82},"() ",[72,13478,609],{"class":78},[72,13480,3427],{"class":362},[72,13482,618],{"class":82},[72,13484,13485],{"class":621},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[72,13487,13488],{"class":74,"line":2188},[72,13489,2828],{"emptyLinePlaceholder":490},[72,13491,13492,13494,13496,13498,13500,13502,13504,13506],{"class":74,"line":2193},[72,13493,6955],{"class":82},[72,13495,1597],{"class":78},[72,13497,13436],{"class":366},[72,13499,1873],{"class":78},[72,13501,13421],{"class":82},[72,13503,1597],{"class":78},[72,13505,11895],{"class":82},[72,13507,13508],{"class":621}," \u002F\u002F1000\n",[72,13510,13511,13513,13515,13517,13519,13521,13523,13525],{"class":74,"line":2207},[72,13512,6955],{"class":82},[72,13514,1597],{"class":78},[72,13516,13436],{"class":366},[72,13518,1873],{"class":78},[72,13520,13421],{"class":82},[72,13522,1597],{"class":78},[72,13524,11895],{"class":82},[72,13526,13508],{"class":621},[72,13528,13529],{"class":74,"line":2212},[72,13530,2828],{"emptyLinePlaceholder":490},[72,13532,13533,13535,13537,13539],{"class":74,"line":3005},[72,13534,2731],{"class":358},[72,13536,564],{"class":82},[72,13538,2736],{"class":366},[72,13540,3147],{"class":82},[72,13542,13543],{"class":74,"line":3019},[72,13544,2828],{"emptyLinePlaceholder":490},[72,13546,13547,13549,13551],{"class":74,"line":3027},[72,13548,4518],{"class":78},[72,13550,4521],{"class":362},[72,13552,1719],{"class":82},[72,13554,13555],{"class":74,"line":3032},[72,13556,1994],{"class":82},[85,13558,13560],{"id":13559},"_65引用的本质","6.5引用的本质",[15,13562,13563,13564],{},"本质：",[707,13565,13566],{},"引用的本质在c++内部实现是一个指针常量.",[63,13568,13570],{"className":552,"code":13569,"language":554,"meta":68,"style":68},"\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",[34,13571,13572,13577,13593,13607,13611,13620,13632,13637,13642,13653,13666,13670,13686,13703,13707,13715,13723],{"__ignoreMap":68},[72,13573,13574],{"class":74,"line":75},[72,13575,13576],{"class":621},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[72,13578,13579,13581,13583,13585,13587,13590],{"class":74,"line":370},[72,13580,5790],{"class":78},[72,13582,11811],{"class":358},[72,13584,564],{"class":82},[72,13586,12992],{"class":78},[72,13588,13589],{"class":5642}," ref",[72,13591,13592],{"class":82},"){\n",[72,13594,13595,13598,13600,13602,13604],{"class":74,"line":1608},[72,13596,13597],{"class":82},"    ref ",[72,13599,609],{"class":78},[72,13601,6180],{"class":362},[72,13603,618],{"class":82},[72,13605,13606],{"class":621}," \u002F\u002F ref是引用，转换为*ref = 100\n",[72,13608,13609],{"class":74,"line":1623},[72,13610,1994],{"class":82},[72,13612,13613,13615,13617],{"class":74,"line":1629},[72,13614,567],{"class":78},[72,13616,2401],{"class":358},[72,13618,13619],{"class":82},"(){\n",[72,13621,13622,13624,13626,13628,13630],{"class":74,"line":1643},[72,13623,2413],{"class":78},[72,13625,11295],{"class":82},[72,13627,609],{"class":78},[72,13629,2466],{"class":362},[72,13631,1719],{"class":82},[72,13633,13634],{"class":74,"line":1649},[72,13635,13636],{"class":82},"    \n",[72,13638,13639],{"class":74,"line":1740},[72,13640,13641],{"class":621},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[72,13643,13644,13646,13648,13650],{"class":74,"line":1746},[72,13645,13357],{"class":78},[72,13647,13360],{"class":82},[72,13649,609],{"class":78},[72,13651,13652],{"class":82}," a; \n",[72,13654,13655,13657,13659,13661,13663],{"class":74,"line":1758},[72,13656,13597],{"class":82},[72,13658,609],{"class":78},[72,13660,9376],{"class":362},[72,13662,618],{"class":82},[72,13664,13665],{"class":621}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[72,13667,13668],{"class":74,"line":2041},[72,13669,13636],{"class":82},[72,13671,13672,13674,13676,13678,13680,13682,13684],{"class":74,"line":2046},[72,13673,6955],{"class":82},[72,13675,1597],{"class":78},[72,13677,13096],{"class":366},[72,13679,1873],{"class":78},[72,13681,11295],{"class":82},[72,13683,1597],{"class":78},[72,13685,9266],{"class":82},[72,13687,13688,13690,13692,13695,13697,13699,13701],{"class":74,"line":2052},[72,13689,6955],{"class":82},[72,13691,1597],{"class":78},[72,13693,13694],{"class":366}," \"ref:\"",[72,13696,1873],{"class":78},[72,13698,13360],{"class":82},[72,13700,1597],{"class":78},[72,13702,9266],{"class":82},[72,13704,13705],{"class":74,"line":2057},[72,13706,13636],{"class":82},[72,13708,13709,13712],{"class":74,"line":2071},[72,13710,13711],{"class":358},"    func",[72,13713,13714],{"class":82},"(a);\n",[72,13716,13717,13719,13721],{"class":74,"line":2076},[72,13718,4518],{"class":78},[72,13720,4521],{"class":362},[72,13722,1719],{"class":82},[72,13724,13725],{"class":74,"line":2082},[72,13726,1994],{"class":82},[15,13728,11758],{},[22,13730,13731,13734],{},[25,13732,13733],{},"引用的本质，就是一个指针常量",[25,13735,13736],{},"引用一旦初始化，就不可以发生改变",[85,13738,13740],{"id":13739},"_66常量引用","6.6常量引用",[15,13742,13743],{},"作用：常量引用主要用来修饰形参",[15,13745,13746,13747,13750],{},"在函数形参列表中，可以加",[707,13748,13749],{},"const修饰形参","，防止形参改变实参",[63,13752,13754],{"className":552,"code":13753,"language":554,"meta":68,"style":68},"\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",[34,13755,13756,13761,13766,13785,13790,13803,13807,13811,13819,13823,13828,13833,13847,13851,13859,13871,13875,13880,13892,13899,13903,13913,13917,13925],{"__ignoreMap":68},[72,13757,13758],{"class":74,"line":75},[72,13759,13760],{"class":621},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[72,13762,13763],{"class":74,"line":370},[72,13764,13765],{"class":621},"\u002F\u002F加上const就不能修改实参的\n",[72,13767,13768,13770,13773,13775,13777,13780,13783],{"class":74,"line":1608},[72,13769,5790],{"class":78},[72,13771,13772],{"class":358}," showValue",[72,13774,564],{"class":82},[72,13776,7218],{"class":78},[72,13778,13779],{"class":78}," int&",[72,13781,13782],{"class":5642}," v",[72,13784,12868],{"class":82},[72,13786,13787],{"class":74,"line":1623},[72,13788,13789],{"class":621},"    \u002F\u002Fv += 100;\n",[72,13791,13792,13794,13796,13799,13801],{"class":74,"line":1629},[72,13793,6955],{"class":82},[72,13795,1597],{"class":78},[72,13797,13798],{"class":82}," v ",[72,13800,1597],{"class":78},[72,13802,9266],{"class":82},[72,13804,13805],{"class":74,"line":1643},[72,13806,1994],{"class":82},[72,13808,13809],{"class":74,"line":1649},[72,13810,2828],{"emptyLinePlaceholder":490},[72,13812,13813,13815,13817],{"class":74,"line":1740},[72,13814,567],{"class":78},[72,13816,2401],{"class":358},[72,13818,11279],{"class":82},[72,13820,13821],{"class":74,"line":1746},[72,13822,2828],{"emptyLinePlaceholder":490},[72,13824,13825],{"class":74,"line":1758},[72,13826,13827],{"class":621},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[72,13829,13830],{"class":74,"line":2041},[72,13831,13832],{"class":621},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[72,13834,13835,13837,13839,13841,13843,13845],{"class":74,"line":2046},[72,13836,11647],{"class":78},[72,13838,13779],{"class":78},[72,13840,13360],{"class":82},[72,13842,609],{"class":78},[72,13844,2466],{"class":362},[72,13846,1719],{"class":82},[72,13848,13849],{"class":74,"line":2052},[72,13850,2828],{"emptyLinePlaceholder":490},[72,13852,13853,13856],{"class":74,"line":2057},[72,13854,13855],{"class":621},"    \u002F\u002Fref = 100;",[72,13857,13858],{"class":621},"  \u002F\u002F加入const后不可以修改变量\n",[72,13860,13861,13863,13865,13867,13869],{"class":74,"line":2071},[72,13862,6955],{"class":82},[72,13864,1597],{"class":78},[72,13866,13360],{"class":82},[72,13868,1597],{"class":78},[72,13870,9266],{"class":82},[72,13872,13873],{"class":74,"line":2076},[72,13874,2828],{"emptyLinePlaceholder":490},[72,13876,13877],{"class":74,"line":2082},[72,13878,13879],{"class":621},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[72,13881,13882,13884,13886,13888,13890],{"class":74,"line":2103},[72,13883,2413],{"class":78},[72,13885,11295],{"class":82},[72,13887,609],{"class":78},[72,13889,2466],{"class":362},[72,13891,1719],{"class":82},[72,13893,13894,13897],{"class":74,"line":2108},[72,13895,13896],{"class":358},"    showValue",[72,13898,13714],{"class":82},[72,13900,13901],{"class":74,"line":2122},[72,13902,2828],{"emptyLinePlaceholder":490},[72,13904,13905,13907,13909,13911],{"class":74,"line":2127},[72,13906,2731],{"class":358},[72,13908,564],{"class":82},[72,13910,2736],{"class":366},[72,13912,3147],{"class":82},[72,13914,13915],{"class":74,"line":2156},[72,13916,2828],{"emptyLinePlaceholder":490},[72,13918,13919,13921,13923],{"class":74,"line":2161},[72,13920,4518],{"class":78},[72,13922,4521],{"class":362},[72,13924,1719],{"class":82},[72,13926,13927],{"class":74,"line":2178},[72,13928,1994],{"class":82},[473,13930,13931],{},"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":68,"searchDepth":370,"depth":370,"links":13933},[13934,13935,13936,13937,13938,13939],{"id":12466,"depth":370,"text":12467},{"id":12645,"depth":370,"text":12646},{"id":12828,"depth":370,"text":12829},{"id":13232,"depth":370,"text":13233},{"id":13559,"depth":370,"text":13560},{"id":13739,"depth":370,"text":13740},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12458,"description":68},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":13946,"title":13947,"body":13948,"description":68,"extension":487,"meta":15029,"navigation":490,"path":15030,"seo":15031,"stem":15032,"__hash__":15033},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":13949,"toc":15021},[13950,13953,13957,13960,13965,14197,14199,14210,14214,14217,14225,14329,14332,14336,14339,14343,14346,14351,14373,14379,14706,14709,14713,14721,15018],[10,13951,13947],{"id":13952},"_7函数高级部分",[85,13954,13956],{"id":13955},"_71函数默认参数","7.1函数默认参数",[15,13958,13959],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[15,13961,5609,13962],{},[34,13963,13964],{}," 返回值类型  函数名 （参数= 默认值）{}",[63,13966,13968],{"className":552,"code":13967,"language":554,"meta":68,"style":68},"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",[34,13969,13970,14005,14020,14024,14028,14033,14038,14067,14087,14097,14101,14105,14113,14117,14145,14167,14171,14181,14185,14193],{"__ignoreMap":68},[72,13971,13972,13974,13976,13978,13980,13982,13984,13986,13988,13991,13993,13995,13997,13999,14001,14003],{"class":74,"line":75},[72,13973,567],{"class":78},[72,13975,11811],{"class":358},[72,13977,564],{"class":82},[72,13979,567],{"class":78},[72,13981,1827],{"class":5642},[72,13983,12861],{"class":82},[72,13985,567],{"class":78},[72,13987,3261],{"class":5642},[72,13989,13990],{"class":78}," =",[72,13992,2466],{"class":362},[72,13994,12861],{"class":82},[72,13996,567],{"class":78},[72,13998,3277],{"class":5642},[72,14000,13990],{"class":78},[72,14002,2466],{"class":362},[72,14004,12868],{"class":82},[72,14006,14007,14009,14011,14013,14015,14017],{"class":74,"line":370},[72,14008,4518],{"class":78},[72,14010,11295],{"class":82},[72,14012,1035],{"class":78},[72,14014,11308],{"class":82},[72,14016,1035],{"class":78},[72,14018,14019],{"class":82}," c;\n",[72,14021,14022],{"class":74,"line":1608},[72,14023,1994],{"class":82},[72,14025,14026],{"class":74,"line":1623},[72,14027,2828],{"emptyLinePlaceholder":490},[72,14029,14030],{"class":74,"line":1629},[72,14031,14032],{"class":621},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[72,14034,14035],{"class":74,"line":1643},[72,14036,14037],{"class":621},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[72,14039,14040,14042,14045,14047,14049,14051,14053,14055,14057,14059,14061,14063,14065],{"class":74,"line":1649},[72,14041,567],{"class":78},[72,14043,14044],{"class":358}," func2",[72,14046,564],{"class":82},[72,14048,567],{"class":78},[72,14050,1827],{"class":5642},[72,14052,13990],{"class":78},[72,14054,2466],{"class":362},[72,14056,12861],{"class":82},[72,14058,567],{"class":78},[72,14060,3261],{"class":5642},[72,14062,13990],{"class":78},[72,14064,2466],{"class":362},[72,14066,3147],{"class":82},[72,14068,14069,14071,14073,14075,14077,14079,14081,14083,14085],{"class":74,"line":1740},[72,14070,567],{"class":78},[72,14072,14044],{"class":358},[72,14074,564],{"class":82},[72,14076,567],{"class":78},[72,14078,1827],{"class":5642},[72,14080,12861],{"class":82},[72,14082,567],{"class":78},[72,14084,3261],{"class":5642},[72,14086,12868],{"class":82},[72,14088,14089,14091,14093,14095],{"class":74,"line":1746},[72,14090,4518],{"class":78},[72,14092,11295],{"class":82},[72,14094,1035],{"class":78},[72,14096,12889],{"class":82},[72,14098,14099],{"class":74,"line":1758},[72,14100,1994],{"class":82},[72,14102,14103],{"class":74,"line":2041},[72,14104,2828],{"emptyLinePlaceholder":490},[72,14106,14107,14109,14111],{"class":74,"line":2046},[72,14108,567],{"class":78},[72,14110,2401],{"class":358},[72,14112,11279],{"class":82},[72,14114,14115],{"class":74,"line":2052},[72,14116,2828],{"emptyLinePlaceholder":490},[72,14118,14119,14121,14123,14126,14128,14130,14132,14134,14136,14138,14141,14143],{"class":74,"line":2057},[72,14120,6955],{"class":82},[72,14122,1597],{"class":78},[72,14124,14125],{"class":366}," \"ret = \"",[72,14127,1873],{"class":78},[72,14129,11811],{"class":358},[72,14131,564],{"class":82},[72,14133,1254],{"class":362},[72,14135,12861],{"class":82},[72,14137,1254],{"class":362},[72,14139,14140],{"class":82},") ",[72,14142,1597],{"class":78},[72,14144,9266],{"class":82},[72,14146,14147,14149,14151,14153,14155,14157,14159,14161,14163,14165],{"class":74,"line":2071},[72,14148,6955],{"class":82},[72,14150,1597],{"class":78},[72,14152,14125],{"class":366},[72,14154,1873],{"class":78},[72,14156,11811],{"class":358},[72,14158,564],{"class":82},[72,14160,865],{"class":362},[72,14162,14140],{"class":82},[72,14164,1597],{"class":78},[72,14166,9266],{"class":82},[72,14168,14169],{"class":74,"line":2076},[72,14170,2828],{"emptyLinePlaceholder":490},[72,14172,14173,14175,14177,14179],{"class":74,"line":2082},[72,14174,2731],{"class":358},[72,14176,564],{"class":82},[72,14178,2736],{"class":366},[72,14180,3147],{"class":82},[72,14182,14183],{"class":74,"line":2103},[72,14184,2828],{"emptyLinePlaceholder":490},[72,14186,14187,14189,14191],{"class":74,"line":2108},[72,14188,4518],{"class":78},[72,14190,4521],{"class":362},[72,14192,1719],{"class":82},[72,14194,14195],{"class":74,"line":2122},[72,14196,1994],{"class":82},[15,14198,11758],{},[22,14200,14201,14204,14207],{},[25,14202,14203],{},"我传就用我；没传就用你",[25,14205,14206],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[25,14208,14209],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[85,14211,14213],{"id":14212},"_72函数的占位参数","7.2函数的占位参数",[15,14215,14216],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[15,14218,14219,14221,14222],{},[707,14220,5609],{}," ",[34,14223,14224],{},"返回值类型 函数名 (数据类型){}",[63,14226,14228],{"className":552,"code":14227,"language":554,"meta":68,"style":68},"\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",[34,14229,14230,14235,14253,14266,14270,14278,14282,14299,14303,14313,14317,14325],{"__ignoreMap":68},[72,14231,14232],{"class":74,"line":75},[72,14233,14234],{"class":621},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[72,14236,14237,14239,14241,14243,14245,14247,14249,14251],{"class":74,"line":370},[72,14238,5790],{"class":78},[72,14240,11811],{"class":358},[72,14242,564],{"class":82},[72,14244,567],{"class":78},[72,14246,1827],{"class":5642},[72,14248,12861],{"class":82},[72,14250,567],{"class":78},[72,14252,12868],{"class":82},[72,14254,14255,14257,14259,14262,14264],{"class":74,"line":1608},[72,14256,6955],{"class":82},[72,14258,1597],{"class":78},[72,14260,14261],{"class":366}," \"this is func\"",[72,14263,1873],{"class":78},[72,14265,9266],{"class":82},[72,14267,14268],{"class":74,"line":1623},[72,14269,1994],{"class":82},[72,14271,14272,14274,14276],{"class":74,"line":1629},[72,14273,567],{"class":78},[72,14275,2401],{"class":358},[72,14277,11279],{"class":82},[72,14279,14280],{"class":74,"line":1643},[72,14281,2828],{"emptyLinePlaceholder":490},[72,14283,14284,14286,14288,14290,14292,14294,14296],{"class":74,"line":1649},[72,14285,13711],{"class":358},[72,14287,564],{"class":82},[72,14289,1000],{"class":362},[72,14291,932],{"class":82},[72,14293,1000],{"class":362},[72,14295,6392],{"class":82},[72,14297,14298],{"class":621}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[72,14300,14301],{"class":74,"line":1740},[72,14302,2828],{"emptyLinePlaceholder":490},[72,14304,14305,14307,14309,14311],{"class":74,"line":1746},[72,14306,2731],{"class":358},[72,14308,564],{"class":82},[72,14310,2736],{"class":366},[72,14312,3147],{"class":82},[72,14314,14315],{"class":74,"line":1758},[72,14316,2828],{"emptyLinePlaceholder":490},[72,14318,14319,14321,14323],{"class":74,"line":2041},[72,14320,4518],{"class":78},[72,14322,4521],{"class":362},[72,14324,1719],{"class":82},[72,14326,14327],{"class":74,"line":2046},[72,14328,1994],{"class":82},[15,14330,14331],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[85,14333,14335],{"id":14334},"_73函数重载","7.3函数重载",[15,14337,14338],{},"意思是函数名是可以相同的",[531,14340,14342],{"id":14341},"_731基本语法","7.3.1基本语法",[15,14344,14345],{},"作用：函数名可以相同，提高复用性",[15,14347,14348],{},[707,14349,14350],{},"函数重载满足条件：",[251,14352,14353,14356,14359],{},[25,14354,14355],{},"同一个作用域下",[25,14357,14358],{},"函数名称相同",[25,14360,14361,14362,14365,14366,14369,14370],{},"函数参数",[707,14363,14364],{},"类型不同","  或者 ",[707,14367,14368],{},"个数不同"," 或者 ",[707,14371,14372],{},"顺序不同",[15,14374,14375,14378],{},[707,14376,14377],{},"注意:","  函数的返回值不可以作为函数重载的条件",[63,14380,14382],{"className":10367,"code":14381,"language":10369,"meta":68,"style":68},"\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",[34,14383,14384,14389,14397,14401,14414,14418,14432,14436,14449,14453,14468,14472,14485,14489,14510,14514,14527,14531,14551,14555,14568,14572,14576,14581,14586,14591,14596,14601,14605,14609,14617,14621,14627,14637,14647,14661,14676,14680,14690,14694,14702],{"__ignoreMap":68},[72,14385,14386],{"class":74,"line":75},[72,14387,14388],{"class":621},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[72,14390,14391,14393,14395],{"class":74,"line":370},[72,14392,5790],{"class":78},[72,14394,11811],{"class":358},[72,14396,2404],{"class":82},[72,14398,14399],{"class":74,"line":1608},[72,14400,1975],{"class":82},[72,14402,14403,14405,14407,14410,14412],{"class":74,"line":1623},[72,14404,6955],{"class":82},[72,14406,1597],{"class":78},[72,14408,14409],{"class":366}," \"func 的调用！\"",[72,14411,1873],{"class":78},[72,14413,9266],{"class":82},[72,14415,14416],{"class":74,"line":1629},[72,14417,1994],{"class":82},[72,14419,14420,14422,14424,14426,14428,14430],{"class":74,"line":1643},[72,14421,5790],{"class":78},[72,14423,11811],{"class":358},[72,14425,564],{"class":82},[72,14427,567],{"class":78},[72,14429,1827],{"class":5642},[72,14431,570],{"class":82},[72,14433,14434],{"class":74,"line":1649},[72,14435,1975],{"class":82},[72,14437,14438,14440,14442,14445,14447],{"class":74,"line":1740},[72,14439,6955],{"class":82},[72,14441,1597],{"class":78},[72,14443,14444],{"class":366}," \"func (int a) 的调用！\"",[72,14446,1873],{"class":78},[72,14448,9266],{"class":82},[72,14450,14451],{"class":74,"line":1746},[72,14452,1994],{"class":82},[72,14454,14455,14457,14459,14461,14464,14466],{"class":74,"line":1758},[72,14456,5790],{"class":78},[72,14458,11811],{"class":358},[72,14460,564],{"class":82},[72,14462,14463],{"class":78},"double",[72,14465,1827],{"class":5642},[72,14467,570],{"class":82},[72,14469,14470],{"class":74,"line":2041},[72,14471,1975],{"class":82},[72,14473,14474,14476,14478,14481,14483],{"class":74,"line":2046},[72,14475,6955],{"class":82},[72,14477,1597],{"class":78},[72,14479,14480],{"class":366}," \"func (double a)的调用！\"",[72,14482,1873],{"class":78},[72,14484,9266],{"class":82},[72,14486,14487],{"class":74,"line":2052},[72,14488,1994],{"class":82},[72,14490,14491,14493,14495,14497,14499,14501,14504,14506,14508],{"class":74,"line":2057},[72,14492,5790],{"class":78},[72,14494,11811],{"class":358},[72,14496,564],{"class":82},[72,14498,567],{"class":78},[72,14500,1827],{"class":5642},[72,14502,14503],{"class":82}," ,",[72,14505,14463],{"class":78},[72,14507,3261],{"class":5642},[72,14509,570],{"class":82},[72,14511,14512],{"class":74,"line":2071},[72,14513,1975],{"class":82},[72,14515,14516,14518,14520,14523,14525],{"class":74,"line":2076},[72,14517,6955],{"class":82},[72,14519,1597],{"class":78},[72,14521,14522],{"class":366}," \"func (int a ,double b) 的调用！\"",[72,14524,1873],{"class":78},[72,14526,9266],{"class":82},[72,14528,14529],{"class":74,"line":2082},[72,14530,1994],{"class":82},[72,14532,14533,14535,14537,14539,14541,14543,14545,14547,14549],{"class":74,"line":2103},[72,14534,5790],{"class":78},[72,14536,11811],{"class":358},[72,14538,564],{"class":82},[72,14540,14463],{"class":78},[72,14542,1827],{"class":5642},[72,14544,14503],{"class":82},[72,14546,567],{"class":78},[72,14548,3261],{"class":5642},[72,14550,570],{"class":82},[72,14552,14553],{"class":74,"line":2108},[72,14554,1975],{"class":82},[72,14556,14557,14559,14561,14564,14566],{"class":74,"line":2122},[72,14558,6955],{"class":82},[72,14560,1597],{"class":78},[72,14562,14563],{"class":366}," \"func (double a ,int b)的调用！\"",[72,14565,1873],{"class":78},[72,14567,9266],{"class":82},[72,14569,14570],{"class":74,"line":2127},[72,14571,1994],{"class":82},[72,14573,14574],{"class":74,"line":2156},[72,14575,2828],{"emptyLinePlaceholder":490},[72,14577,14578],{"class":74,"line":2161},[72,14579,14580],{"class":621},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[72,14582,14583],{"class":74,"line":2178},[72,14584,14585],{"class":621},"\u002F\u002Fint func(double a, int b)\n",[72,14587,14588],{"class":74,"line":2183},[72,14589,14590],{"class":621},"\u002F\u002F{\n",[72,14592,14593],{"class":74,"line":2188},[72,14594,14595],{"class":621},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[72,14597,14598],{"class":74,"line":2193},[72,14599,14600],{"class":621},"\u002F\u002F}\n",[72,14602,14603],{"class":74,"line":2207},[72,14604,2828],{"emptyLinePlaceholder":490},[72,14606,14607],{"class":74,"line":2212},[72,14608,2828],{"emptyLinePlaceholder":490},[72,14610,14611,14613,14615],{"class":74,"line":3005},[72,14612,567],{"class":78},[72,14614,2401],{"class":358},[72,14616,11279],{"class":82},[72,14618,14619],{"class":74,"line":3019},[72,14620,2828],{"emptyLinePlaceholder":490},[72,14622,14623,14625],{"class":74,"line":3027},[72,14624,13711],{"class":358},[72,14626,6062],{"class":82},[72,14628,14629,14631,14633,14635],{"class":74,"line":3032},[72,14630,13711],{"class":358},[72,14632,564],{"class":82},[72,14634,1000],{"class":362},[72,14636,3147],{"class":82},[72,14638,14639,14641,14643,14645],{"class":74,"line":3038},[72,14640,13711],{"class":358},[72,14642,564],{"class":82},[72,14644,612],{"class":362},[72,14646,3147],{"class":82},[72,14648,14649,14651,14653,14655,14657,14659],{"class":74,"line":3044},[72,14650,13711],{"class":358},[72,14652,564],{"class":82},[72,14654,1000],{"class":362},[72,14656,932],{"class":82},[72,14658,612],{"class":362},[72,14660,3147],{"class":82},[72,14662,14663,14665,14667,14669,14672,14674],{"class":74,"line":3049},[72,14664,13711],{"class":358},[72,14666,564],{"class":82},[72,14668,612],{"class":362},[72,14670,14671],{"class":82}," , ",[72,14673,1000],{"class":362},[72,14675,3147],{"class":82},[72,14677,14678],{"class":74,"line":8374},[72,14679,13636],{"class":82},[72,14681,14682,14684,14686,14688],{"class":74,"line":8398},[72,14683,2731],{"class":358},[72,14685,564],{"class":82},[72,14687,2736],{"class":366},[72,14689,3147],{"class":82},[72,14691,14692],{"class":74,"line":8403},[72,14693,2828],{"emptyLinePlaceholder":490},[72,14695,14696,14698,14700],{"class":74,"line":8409},[72,14697,4518],{"class":78},[72,14699,4521],{"class":362},[72,14701,1719],{"class":82},[72,14703,14704],{"class":74,"line":8436},[72,14705,1994],{"class":82},[15,14707,14708],{},"重点：函数返回值不可以作为函数重载条件！",[531,14710,14712],{"id":14711},"_732注意事项","7.3.2注意事项",[251,14714,14715,14718],{},[25,14716,14717],{},"引用作为重载条件!!!",[25,14719,14720],{},"函数重载碰到函数默认参数",[63,14722,14724],{"className":552,"code":14723,"language":554,"meta":68,"style":68},"\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",[34,14725,14726,14731,14736,14740,14756,14760,14773,14777,14781,14799,14803,14816,14820,14824,14828,14833,14837,14861,14865,14878,14882,14886,14900,14904,14917,14921,14925,14933,14937,14949,14959,14972,14976,14980,14988,14992,15002,15006,15014],{"__ignoreMap":68},[72,14727,14728],{"class":74,"line":75},[72,14729,14730],{"class":621},"\u002F\u002F函数重载注意事项\n",[72,14732,14733],{"class":74,"line":370},[72,14734,14735],{"class":621},"\u002F\u002F1、引用作为重载条件\n",[72,14737,14738],{"class":74,"line":1608},[72,14739,2828],{"emptyLinePlaceholder":490},[72,14741,14742,14744,14746,14748,14750,14752,14754],{"class":74,"line":1623},[72,14743,5790],{"class":78},[72,14745,11811],{"class":358},[72,14747,564],{"class":82},[72,14749,567],{"class":78},[72,14751,11010],{"class":78},[72,14753,257],{"class":5642},[72,14755,570],{"class":82},[72,14757,14758],{"class":74,"line":1629},[72,14759,1975],{"class":82},[72,14761,14762,14764,14766,14769,14771],{"class":74,"line":1643},[72,14763,6955],{"class":82},[72,14765,1597],{"class":78},[72,14767,14768],{"class":366}," \"func (int &a) 调用 \"",[72,14770,1873],{"class":78},[72,14772,9266],{"class":82},[72,14774,14775],{"class":74,"line":1649},[72,14776,1994],{"class":82},[72,14778,14779],{"class":74,"line":1740},[72,14780,2828],{"emptyLinePlaceholder":490},[72,14782,14783,14785,14787,14789,14791,14793,14795,14797],{"class":74,"line":1746},[72,14784,5790],{"class":78},[72,14786,11811],{"class":358},[72,14788,564],{"class":82},[72,14790,7218],{"class":78},[72,14792,2810],{"class":78},[72,14794,11010],{"class":78},[72,14796,257],{"class":5642},[72,14798,570],{"class":82},[72,14800,14801],{"class":74,"line":1758},[72,14802,1975],{"class":82},[72,14804,14805,14807,14809,14812,14814],{"class":74,"line":2041},[72,14806,6955],{"class":82},[72,14808,1597],{"class":78},[72,14810,14811],{"class":366}," \"func (const int &a) 调用 \"",[72,14813,1873],{"class":78},[72,14815,9266],{"class":82},[72,14817,14818],{"class":74,"line":2046},[72,14819,1994],{"class":82},[72,14821,14822],{"class":74,"line":2052},[72,14823,2828],{"emptyLinePlaceholder":490},[72,14825,14826],{"class":74,"line":2057},[72,14827,2828],{"emptyLinePlaceholder":490},[72,14829,14830],{"class":74,"line":2071},[72,14831,14832],{"class":621},"\u002F\u002F2、函数重载碰到函数默认参数\n",[72,14834,14835],{"class":74,"line":2076},[72,14836,2828],{"emptyLinePlaceholder":490},[72,14838,14839,14841,14843,14845,14847,14849,14851,14853,14855,14857,14859],{"class":74,"line":2082},[72,14840,5790],{"class":78},[72,14842,14044],{"class":358},[72,14844,564],{"class":82},[72,14846,567],{"class":78},[72,14848,1827],{"class":5642},[72,14850,12861],{"class":82},[72,14852,567],{"class":78},[72,14854,3261],{"class":5642},[72,14856,13990],{"class":78},[72,14858,2466],{"class":362},[72,14860,570],{"class":82},[72,14862,14863],{"class":74,"line":2103},[72,14864,1975],{"class":82},[72,14866,14867,14869,14871,14874,14876],{"class":74,"line":2108},[72,14868,6955],{"class":82},[72,14870,1597],{"class":78},[72,14872,14873],{"class":366}," \"func2(int a, int b = 10) 调用\"",[72,14875,1873],{"class":78},[72,14877,9266],{"class":82},[72,14879,14880],{"class":74,"line":2122},[72,14881,1994],{"class":82},[72,14883,14884],{"class":74,"line":2127},[72,14885,2828],{"emptyLinePlaceholder":490},[72,14887,14888,14890,14892,14894,14896,14898],{"class":74,"line":2156},[72,14889,5790],{"class":78},[72,14891,14044],{"class":358},[72,14893,564],{"class":82},[72,14895,567],{"class":78},[72,14897,1827],{"class":5642},[72,14899,570],{"class":82},[72,14901,14902],{"class":74,"line":2161},[72,14903,1975],{"class":82},[72,14905,14906,14908,14910,14913,14915],{"class":74,"line":2178},[72,14907,6955],{"class":82},[72,14909,1597],{"class":78},[72,14911,14912],{"class":366}," \"func2(int a) 调用\"",[72,14914,1873],{"class":78},[72,14916,9266],{"class":82},[72,14918,14919],{"class":74,"line":2183},[72,14920,1994],{"class":82},[72,14922,14923],{"class":74,"line":2188},[72,14924,2828],{"emptyLinePlaceholder":490},[72,14926,14927,14929,14931],{"class":74,"line":2193},[72,14928,567],{"class":78},[72,14930,2401],{"class":358},[72,14932,11279],{"class":82},[72,14934,14935],{"class":74,"line":2207},[72,14936,13636],{"class":82},[72,14938,14939,14941,14943,14945,14947],{"class":74,"line":2212},[72,14940,2413],{"class":78},[72,14942,11295],{"class":82},[72,14944,609],{"class":78},[72,14946,2466],{"class":362},[72,14948,1719],{"class":82},[72,14950,14951,14953,14956],{"class":74,"line":3005},[72,14952,13711],{"class":358},[72,14954,14955],{"class":82},"(a);",[72,14957,14958],{"class":621}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[72,14960,14961,14963,14965,14967,14969],{"class":74,"line":3019},[72,14962,13711],{"class":358},[72,14964,564],{"class":82},[72,14966,1000],{"class":362},[72,14968,6392],{"class":82},[72,14970,14971],{"class":621},"\u002F\u002F调用有const   10是个常量\n",[72,14973,14974],{"class":74,"line":3027},[72,14975,2828],{"emptyLinePlaceholder":490},[72,14977,14978],{"class":74,"line":3032},[72,14979,2828],{"emptyLinePlaceholder":490},[72,14981,14982,14985],{"class":74,"line":3038},[72,14983,14984],{"class":621},"    \u002F\u002Ffunc2(10);",[72,14986,14987],{"class":621}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[72,14989,14990],{"class":74,"line":3044},[72,14991,2828],{"emptyLinePlaceholder":490},[72,14993,14994,14996,14998,15000],{"class":74,"line":3049},[72,14995,2731],{"class":358},[72,14997,564],{"class":82},[72,14999,2736],{"class":366},[72,15001,3147],{"class":82},[72,15003,15004],{"class":74,"line":8374},[72,15005,2828],{"emptyLinePlaceholder":490},[72,15007,15008,15010,15012],{"class":74,"line":8398},[72,15009,4518],{"class":78},[72,15011,4521],{"class":362},[72,15013,1719],{"class":82},[72,15015,15016],{"class":74,"line":8403},[72,15017,1994],{"class":82},[473,15019,15020],{},"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":68,"searchDepth":370,"depth":370,"links":15022},[15023,15024,15025],{"id":13955,"depth":370,"text":13956},{"id":14212,"depth":370,"text":14213},{"id":14334,"depth":370,"text":14335,"children":15026},[15027,15028],{"id":14341,"depth":1608,"text":14342},{"id":14711,"depth":1608,"text":14712},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":13947,"description":68},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":15035,"title":15036,"body":15037,"description":23790,"extension":487,"meta":23791,"navigation":490,"path":23792,"seo":23793,"stem":23794,"__hash__":23795},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":15038,"toc":23771},[15039,15042,15048,15055,15060,15063,15066,15069,15073,15077,15080,15083,15091,15096,15099,15106,15111,15270,15273,15526,15529,15532,15535,15540,15543,15546,15557,15562,15798,15802,15812,15815,15823,15970,15974,15977,15980,15984,16429,16433,16441,16449,17361,17368,17373,18001,18004,18007,18010,18129,18132,18219,18222,18348,18351,18445,18448,18801,18805,18813,18817,18824,18827,18830,18841,18847,18852,18864,18872,18892,18900,18917,19103,19106,19110,19113,19116,19119,19122,19125,19128,19131,19591,19597,19601,19604,19615,20202,20205,20694,20698,20701,20704,20707,20710,20713,20721,21117,21121,21124,21127,21574,21577,21580,21585,21588,21593,21596,21600,21603,21605,21611,21613,21919,21929,21970,21974,21977,21979,22012,22015,22322,22324,22339,22342,22365,22374,22380,22383,22387,22390,22393,22398,22409,22414,22422,22427,22557,22560,22563,22738,22743,22955,22959,22962,23076,23081,23320,23324,23328,23331,23334,23339,23444,23447,23450,23453,23457,23568,23571,23574,23579,23631,23634,23637,23642,23688,23691,23696,23764,23766,23769],[10,15040,15036],{"id":15041},"_8类和对象",[15,15043,15044,15045],{},"C++面向对象的三大特性为",[707,15046,15047],{},"封装、继承、多态",[15,15049,15050,15051,15054],{},"C++认为",[707,15052,15053],{},"万事万物都皆为对象","，对象上有其属性和行为",[15,15056,15057],{},[707,15058,15059],{},"例如：",[15,15061,15062],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[15,15064,15065],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[15,15067,15068],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[85,15070,15072],{"id":15071},"_81封装","8.1封装",[531,15074,15076],{"id":15075},"_811封装的意义","8.1.1封装的意义",[15,15078,15079],{},"封装是C++面向对象三大特性之一",[15,15081,15082],{},"封装的意义：",[251,15084,15085,15088],{},[25,15086,15087],{},"将属性和行为作为一个整体，表现生活中的事物",[25,15089,15090],{},"将属性和行为加以权限控制",[15,15092,15093],{},[707,15094,15095],{},"封装意义一：",[15,15097,15098],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[15,15100,15101,14221,15103],{},[707,15102,5609],{},[34,15104,15105],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[22,15107,15108],{},[25,15109,15110],{},"**示例1：**设计一个圆类，求圆的周长",[63,15112,15114],{"className":552,"code":15113,"language":554,"meta":68,"style":68},"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",[34,15115,15116,15124,15128,15133,15138,15143,15148,15155,15160,15170,15174,15192,15196,15200,15208,15212,15217,15222,15227,15232,15243,15266],{"__ignoreMap":68},[72,15117,15118,15121],{"class":74,"line":75},[72,15119,15120],{"class":78},"class",[72,15122,15123],{"class":358}," Circle\n",[72,15125,15126],{"class":74,"line":370},[72,15127,1975],{"class":82},[72,15129,15130],{"class":74,"line":1608},[72,15131,15132],{"class":621},"    \u002F\u002F访问权限\n",[72,15134,15135],{"class":74,"line":1623},[72,15136,15137],{"class":621},"    \u002F\u002F公共权限\n",[72,15139,15140],{"class":74,"line":1629},[72,15141,15142],{"class":78},"public:\n",[72,15144,15145],{"class":74,"line":1643},[72,15146,15147],{"class":621},"    \u002F\u002F属性\n",[72,15149,15150,15152],{"class":74,"line":1649},[72,15151,2413],{"class":78},[72,15153,15154],{"class":82}," m_r;\n",[72,15156,15157],{"class":74,"line":1740},[72,15158,15159],{"class":621},"    \u002F\u002F行为\n",[72,15161,15162,15165,15168],{"class":74,"line":1746},[72,15163,15164],{"class":78},"    double",[72,15166,15167],{"class":358}," calculateZC",[72,15169,2404],{"class":82},[72,15171,15172],{"class":74,"line":1758},[72,15173,2458],{"class":82},[72,15175,15176,15179,15182,15184,15187,15189],{"class":74,"line":2041},[72,15177,15178],{"class":78},"        return",[72,15180,15181],{"class":362}," 2",[72,15183,1009],{"class":78},[72,15185,15186],{"class":82},"PI",[72,15188,1009],{"class":78},[72,15190,15191],{"class":82},"m_r;\n",[72,15193,15194],{"class":74,"line":2046},[72,15195,2615],{"class":82},[72,15197,15198],{"class":74,"line":2052},[72,15199,4423],{"class":82},[72,15201,15202,15204,15206],{"class":74,"line":2057},[72,15203,567],{"class":78},[72,15205,2401],{"class":358},[72,15207,2404],{"class":82},[72,15209,15210],{"class":74,"line":2071},[72,15211,1975],{"class":82},[72,15213,15214],{"class":74,"line":2076},[72,15215,15216],{"class":621},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[72,15218,15219],{"class":74,"line":2082},[72,15220,15221],{"class":621},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[72,15223,15224],{"class":74,"line":2103},[72,15225,15226],{"class":82},"    Circle c1;\n",[72,15228,15229],{"class":74,"line":2108},[72,15230,15231],{"class":621},"    \u002F\u002F给圆对象 的属性进行赋值\n",[72,15233,15234,15237,15239,15241],{"class":74,"line":2122},[72,15235,15236],{"class":82},"    c1.m_r",[72,15238,609],{"class":78},[72,15240,1000],{"class":362},[72,15242,1719],{"class":82},[72,15244,15245,15247,15249,15252,15254,15257,15260,15262,15264],{"class":74,"line":2127},[72,15246,1980],{"class":82},[72,15248,1597],{"class":78},[72,15250,15251],{"class":366},"\"圆的周长\"",[72,15253,1597],{"class":78},[72,15255,15256],{"class":82},"c1.",[72,15258,15259],{"class":358},"calculateZC",[72,15261,2855],{"class":82},[72,15263,1597],{"class":78},[72,15265,1620],{"class":82},[72,15267,15268],{"class":74,"line":2156},[72,15269,1994],{"class":82},[15,15271,15272],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[63,15274,15276],{"className":552,"code":15275,"language":554,"meta":68,"style":68},"#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",[34,15277,15278,15284,15294,15300,15306,15310,15314,15319,15326,15331,15349,15353,15363,15367,15372,15388,15392,15402,15406,15411,15419,15423,15455,15459,15463,15471,15475,15480,15485,15499,15513,15522],{"__ignoreMap":68},[72,15279,15280,15282],{"class":74,"line":75},[72,15281,2378],{"class":78},[72,15283,2381],{"class":366},[72,15285,15286,15288,15290,15292],{"class":74,"line":370},[72,15287,2386],{"class":78},[72,15289,2389],{"class":78},[72,15291,2392],{"class":358},[72,15293,1719],{"class":82},[72,15295,15296,15298],{"class":74,"line":1608},[72,15297,2378],{"class":78},[72,15299,8175],{"class":366},[72,15301,15302,15304],{"class":74,"line":1623},[72,15303,15120],{"class":78},[72,15305,8188],{"class":358},[72,15307,15308],{"class":74,"line":1629},[72,15309,1975],{"class":82},[72,15311,15312],{"class":74,"line":1643},[72,15313,15142],{"class":78},[72,15315,15316],{"class":74,"line":1649},[72,15317,15318],{"class":82},"    string m_name;\n",[72,15320,15321,15323],{"class":74,"line":1740},[72,15322,2413],{"class":78},[72,15324,15325],{"class":82}," m_id;\n",[72,15327,15328],{"class":74,"line":1746},[72,15329,15330],{"class":621},"    \u002F\u002F赋值姓名\n",[72,15332,15333,15336,15339,15341,15344,15347],{"class":74,"line":1758},[72,15334,15335],{"class":78},"    void",[72,15337,15338],{"class":358}," setName",[72,15340,564],{"class":82},[72,15342,15343],{"class":358},"string",[72,15345,15346],{"class":5642}," name",[72,15348,570],{"class":82},[72,15350,15351],{"class":74,"line":2041},[72,15352,2458],{"class":82},[72,15354,15355,15358,15360],{"class":74,"line":2046},[72,15356,15357],{"class":82},"        m_name",[72,15359,609],{"class":78},[72,15361,15362],{"class":82},"name;\n",[72,15364,15365],{"class":74,"line":2052},[72,15366,2615],{"class":82},[72,15368,15369],{"class":74,"line":2057},[72,15370,15371],{"class":621},"    \u002F\u002F赋值学号\n",[72,15373,15374,15376,15379,15381,15383,15386],{"class":74,"line":2071},[72,15375,15335],{"class":78},[72,15377,15378],{"class":358}," setId",[72,15380,564],{"class":82},[72,15382,567],{"class":78},[72,15384,15385],{"class":5642}," id",[72,15387,570],{"class":82},[72,15389,15390],{"class":74,"line":2076},[72,15391,2458],{"class":82},[72,15393,15394,15397,15399],{"class":74,"line":2082},[72,15395,15396],{"class":82},"        m_id",[72,15398,609],{"class":78},[72,15400,15401],{"class":82},"id;\n",[72,15403,15404],{"class":74,"line":2103},[72,15405,2615],{"class":82},[72,15407,15408],{"class":74,"line":2108},[72,15409,15410],{"class":621},"    \u002F\u002F打印学生信息\n",[72,15412,15413,15415,15417],{"class":74,"line":2122},[72,15414,15335],{"class":78},[72,15416,10041],{"class":358},[72,15418,2404],{"class":82},[72,15420,15421],{"class":74,"line":2127},[72,15422,2458],{"class":82},[72,15424,15425,15427,15429,15432,15434,15437,15439,15441,15443,15446,15448,15451,15453],{"class":74,"line":2156},[72,15426,3879],{"class":82},[72,15428,1597],{"class":78},[72,15430,15431],{"class":366},"\"姓名：\"",[72,15433,1597],{"class":78},[72,15435,15436],{"class":82},"m_name",[72,15438,1597],{"class":78},[72,15440,4787],{"class":366},[72,15442,1597],{"class":78},[72,15444,15445],{"class":366},"\"学号：\"",[72,15447,1597],{"class":78},[72,15449,15450],{"class":82},"m_id",[72,15452,1597],{"class":78},[72,15454,1620],{"class":82},[72,15456,15457],{"class":74,"line":2161},[72,15458,2615],{"class":82},[72,15460,15461],{"class":74,"line":2178},[72,15462,4423],{"class":82},[72,15464,15465,15467,15469],{"class":74,"line":2183},[72,15466,567],{"class":78},[72,15468,2401],{"class":358},[72,15470,2404],{"class":82},[72,15472,15473],{"class":74,"line":2188},[72,15474,1975],{"class":82},[72,15476,15477],{"class":74,"line":2193},[72,15478,15479],{"class":621},"    \u002F\u002F实例化\n",[72,15481,15482],{"class":74,"line":2207},[72,15483,15484],{"class":82},"    Student s1;\n",[72,15486,15487,15490,15493,15495,15497],{"class":74,"line":2212},[72,15488,15489],{"class":82},"    s1.",[72,15491,15492],{"class":358},"setName",[72,15494,564],{"class":82},[72,15496,8342],{"class":366},[72,15498,3147],{"class":82},[72,15500,15501,15503,15506,15508,15511],{"class":74,"line":3005},[72,15502,15489],{"class":82},[72,15504,15505],{"class":358},"setId",[72,15507,564],{"class":82},[72,15509,15510],{"class":362},"123456",[72,15512,3147],{"class":82},[72,15514,15515,15517,15520],{"class":74,"line":3019},[72,15516,15489],{"class":82},[72,15518,15519],{"class":358},"printInfo",[72,15521,6062],{"class":82},[72,15523,15524],{"class":74,"line":3027},[72,15525,1994],{"class":82},[15,15527,15528],{},"类中的属性和行为统称为成员",[15,15530,15531],{},"属性：成员属性(成员变量)",[15,15533,15534],{},"方法：成员函数(成员方法)",[15,15536,15537],{},[707,15538,15539],{},"封装意义二：",[15,15541,15542],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[15,15544,15545],{},"访问权限有三种：",[22,15547,15548,15551,15554],{},[25,15549,15550],{},"public        公共权限",[25,15552,15553],{},"protected 保护权限",[25,15555,15556],{},"private      私有权限",[15,15558,15559],{},[707,15560,15561],{},"示例：",[63,15563,15565],{"className":10367,"code":15564,"language":10369,"meta":68,"style":68},"\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",[34,15566,15567,15572,15577,15582,15587,15591,15598,15602,15607,15611,15616,15620,15625,15630,15635,15639,15644,15649,15656,15660,15664,15672,15676,15687,15699,15711,15715,15719,15723,15731,15735,15740,15752,15760,15768,15772,15782,15786,15794],{"__ignoreMap":68},[72,15568,15569],{"class":74,"line":75},[72,15570,15571],{"class":621},"\u002F\u002F三种权限\n",[72,15573,15574],{"class":74,"line":370},[72,15575,15576],{"class":621},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[72,15578,15579],{"class":74,"line":1608},[72,15580,15581],{"class":621},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[72,15583,15584],{"class":74,"line":1623},[72,15585,15586],{"class":621},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[72,15588,15589],{"class":74,"line":1629},[72,15590,2828],{"emptyLinePlaceholder":490},[72,15592,15593,15595],{"class":74,"line":1643},[72,15594,15120],{"class":78},[72,15596,15597],{"class":358}," Person\n",[72,15599,15600],{"class":74,"line":1649},[72,15601,1975],{"class":82},[72,15603,15604],{"class":74,"line":1740},[72,15605,15606],{"class":621},"    \u002F\u002F姓名  公共权限\n",[72,15608,15609],{"class":74,"line":1746},[72,15610,15142],{"class":78},[72,15612,15613],{"class":74,"line":1758},[72,15614,15615],{"class":82},"    string m_Name;\n",[72,15617,15618],{"class":74,"line":2041},[72,15619,2828],{"emptyLinePlaceholder":490},[72,15621,15622],{"class":74,"line":2046},[72,15623,15624],{"class":621},"    \u002F\u002F汽车  保护权限\n",[72,15626,15627],{"class":74,"line":2052},[72,15628,15629],{"class":78},"protected:\n",[72,15631,15632],{"class":74,"line":2057},[72,15633,15634],{"class":82},"    string m_Car;\n",[72,15636,15637],{"class":74,"line":2071},[72,15638,2828],{"emptyLinePlaceholder":490},[72,15640,15641],{"class":74,"line":2076},[72,15642,15643],{"class":621},"    \u002F\u002F银行卡密码  私有权限\n",[72,15645,15646],{"class":74,"line":2082},[72,15647,15648],{"class":78},"private:\n",[72,15650,15651,15653],{"class":74,"line":2103},[72,15652,2413],{"class":78},[72,15654,15655],{"class":82}," m_Password;\n",[72,15657,15658],{"class":74,"line":2108},[72,15659,2828],{"emptyLinePlaceholder":490},[72,15661,15662],{"class":74,"line":2122},[72,15663,15142],{"class":78},[72,15665,15666,15668,15670],{"class":74,"line":2127},[72,15667,15335],{"class":78},[72,15669,11811],{"class":358},[72,15671,2404],{"class":82},[72,15673,15674],{"class":74,"line":2156},[72,15675,2458],{"class":82},[72,15677,15678,15681,15683,15685],{"class":74,"line":2161},[72,15679,15680],{"class":82},"        m_Name ",[72,15682,609],{"class":78},[72,15684,9364],{"class":366},[72,15686,1719],{"class":82},[72,15688,15689,15692,15694,15697],{"class":74,"line":2178},[72,15690,15691],{"class":82},"        m_Car ",[72,15693,609],{"class":78},[72,15695,15696],{"class":366}," \"拖拉机\"",[72,15698,1719],{"class":82},[72,15700,15701,15704,15706,15709],{"class":74,"line":2183},[72,15702,15703],{"class":82},"        m_Password ",[72,15705,609],{"class":78},[72,15707,15708],{"class":362}," 123456",[72,15710,1719],{"class":82},[72,15712,15713],{"class":74,"line":2188},[72,15714,2615],{"class":82},[72,15716,15717],{"class":74,"line":2193},[72,15718,4423],{"class":82},[72,15720,15721],{"class":74,"line":2207},[72,15722,2828],{"emptyLinePlaceholder":490},[72,15724,15725,15727,15729],{"class":74,"line":2212},[72,15726,567],{"class":78},[72,15728,2401],{"class":358},[72,15730,11279],{"class":82},[72,15732,15733],{"class":74,"line":3005},[72,15734,2828],{"emptyLinePlaceholder":490},[72,15736,15737],{"class":74,"line":3019},[72,15738,15739],{"class":82},"    Person p;\n",[72,15741,15742,15745,15747,15750],{"class":74,"line":3027},[72,15743,15744],{"class":82},"    p.m_Name ",[72,15746,609],{"class":78},[72,15748,15749],{"class":366}," \"李四\"",[72,15751,1719],{"class":82},[72,15753,15754,15757],{"class":74,"line":3032},[72,15755,15756],{"class":621},"    \u002F\u002Fp.m_Car = \"奔驰\";",[72,15758,15759],{"class":621},"  \u002F\u002F保护权限类外访问不到\n",[72,15761,15762,15765],{"class":74,"line":3038},[72,15763,15764],{"class":621},"    \u002F\u002Fp.m_Password = 123;",[72,15766,15767],{"class":621}," \u002F\u002F私有权限类外访问不到\n",[72,15769,15770],{"class":74,"line":3044},[72,15771,2828],{"emptyLinePlaceholder":490},[72,15773,15774,15776,15778,15780],{"class":74,"line":3049},[72,15775,2731],{"class":358},[72,15777,564],{"class":82},[72,15779,2736],{"class":366},[72,15781,3147],{"class":82},[72,15783,15784],{"class":74,"line":8374},[72,15785,2828],{"emptyLinePlaceholder":490},[72,15787,15788,15790,15792],{"class":74,"line":8398},[72,15789,4518],{"class":78},[72,15791,4521],{"class":362},[72,15793,1719],{"class":82},[72,15795,15796],{"class":74,"line":8403},[72,15797,1994],{"class":82},[531,15799,15801],{"id":15800},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[15,15803,15804,15805,15808,15809],{},"在C++中 struct和class唯一的",[707,15806,15807],{},"区别","就在于 ",[707,15810,15811],{},"默认的访问权限不同",[15,15813,15814],{},"区别：",[251,15816,15817,15820],{},[25,15818,15819],{},"struct 默认权限为公共",[25,15821,15822],{},"class   默认权限为私有",[63,15824,15826],{"className":10367,"code":15825,"language":10369,"meta":68,"style":68},"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",[34,15827,15828,15835,15839,15849,15853,15857,15864,15868,15878,15882,15886,15894,15898,15903,15917,15921,15926,15940,15944,15954,15958,15966],{"__ignoreMap":68},[72,15829,15830,15832],{"class":74,"line":75},[72,15831,15120],{"class":78},[72,15833,15834],{"class":358}," C1\n",[72,15836,15837],{"class":74,"line":370},[72,15838,1975],{"class":82},[72,15840,15841,15843,15846],{"class":74,"line":1608},[72,15842,2413],{"class":78},[72,15844,15845],{"class":82},"  m_A;",[72,15847,15848],{"class":621}," \u002F\u002F默认是私有权限\n",[72,15850,15851],{"class":74,"line":1623},[72,15852,4423],{"class":82},[72,15854,15855],{"class":74,"line":1629},[72,15856,2828],{"emptyLinePlaceholder":490},[72,15858,15859,15861],{"class":74,"line":1643},[72,15860,8185],{"class":78},[72,15862,15863],{"class":358}," C2\n",[72,15865,15866],{"class":74,"line":1649},[72,15867,1975],{"class":82},[72,15869,15870,15872,15875],{"class":74,"line":1740},[72,15871,2413],{"class":78},[72,15873,15874],{"class":82}," m_A;",[72,15876,15877],{"class":621},"  \u002F\u002F默认是公共权限\n",[72,15879,15880],{"class":74,"line":1746},[72,15881,4423],{"class":82},[72,15883,15884],{"class":74,"line":1758},[72,15885,2828],{"emptyLinePlaceholder":490},[72,15887,15888,15890,15892],{"class":74,"line":2041},[72,15889,567],{"class":78},[72,15891,2401],{"class":358},[72,15893,11279],{"class":82},[72,15895,15896],{"class":74,"line":2046},[72,15897,2828],{"emptyLinePlaceholder":490},[72,15899,15900],{"class":74,"line":2052},[72,15901,15902],{"class":82},"    C1 c1;\n",[72,15904,15905,15908,15910,15912,15914],{"class":74,"line":2057},[72,15906,15907],{"class":82},"    c1.m_A ",[72,15909,609],{"class":78},[72,15911,2466],{"class":362},[72,15913,618],{"class":82},[72,15915,15916],{"class":621}," \u002F\u002F错误，访问权限是私有\n",[72,15918,15919],{"class":74,"line":2071},[72,15920,2828],{"emptyLinePlaceholder":490},[72,15922,15923],{"class":74,"line":2076},[72,15924,15925],{"class":82},"    C2 c2;\n",[72,15927,15928,15931,15933,15935,15937],{"class":74,"line":2082},[72,15929,15930],{"class":82},"    c2.m_A ",[72,15932,609],{"class":78},[72,15934,2466],{"class":362},[72,15936,618],{"class":82},[72,15938,15939],{"class":621}," \u002F\u002F正确，访问权限是公共\n",[72,15941,15942],{"class":74,"line":2103},[72,15943,2828],{"emptyLinePlaceholder":490},[72,15945,15946,15948,15950,15952],{"class":74,"line":2108},[72,15947,2731],{"class":358},[72,15949,564],{"class":82},[72,15951,2736],{"class":366},[72,15953,3147],{"class":82},[72,15955,15956],{"class":74,"line":2122},[72,15957,2828],{"emptyLinePlaceholder":490},[72,15959,15960,15962,15964],{"class":74,"line":2127},[72,15961,4518],{"class":78},[72,15963,4521],{"class":362},[72,15965,1719],{"class":82},[72,15967,15968],{"class":74,"line":2156},[72,15969,1994],{"class":82},[531,15971,15973],{"id":15972},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[15,15975,15976],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[15,15978,15979],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[15,15981,15982],{},[707,15983,15561],{},[63,15985,15987],{"className":10367,"code":15986,"language":10369,"meta":68,"style":68},"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",[34,15988,15989,15999,16003,16007,16012,16026,16035,16039,16049,16053,16060,16064,16068,16072,16077,16086,16093,16097,16102,16118,16141,16154,16161,16165,16174,16178,16182,16187,16203,16213,16217,16221,16225,16233,16237,16247,16251,16259,16263,16267,16275,16279,16283,16288,16301,16324,16328,16333,16346,16368,16372,16377,16391,16399,16403,16413,16417,16425],{"__ignoreMap":68},[72,15990,15991,15993,15996],{"class":74,"line":75},[72,15992,15120],{"class":78},[72,15994,15995],{"class":358}," Person",[72,15997,15998],{"class":82}," {\n",[72,16000,16001],{"class":74,"line":370},[72,16002,15142],{"class":78},[72,16004,16005],{"class":74,"line":1608},[72,16006,2828],{"emptyLinePlaceholder":490},[72,16008,16009],{"class":74,"line":1623},[72,16010,16011],{"class":621},"    \u002F\u002F姓名设置可读可写\n",[72,16013,16014,16016,16018,16020,16022,16024],{"class":74,"line":1629},[72,16015,15335],{"class":78},[72,16017,15338],{"class":358},[72,16019,564],{"class":82},[72,16021,15343],{"class":358},[72,16023,15346],{"class":5642},[72,16025,12868],{"class":82},[72,16027,16028,16030,16032],{"class":74,"line":1643},[72,16029,15680],{"class":82},[72,16031,609],{"class":78},[72,16033,16034],{"class":82}," name;\n",[72,16036,16037],{"class":74,"line":1649},[72,16038,2615],{"class":82},[72,16040,16041,16044,16047],{"class":74,"line":1740},[72,16042,16043],{"class":358},"    string",[72,16045,16046],{"class":358}," getName",[72,16048,2404],{"class":82},[72,16050,16051],{"class":74,"line":1746},[72,16052,2458],{"class":82},[72,16054,16055,16057],{"class":74,"line":1758},[72,16056,15178],{"class":78},[72,16058,16059],{"class":82}," m_Name;\n",[72,16061,16062],{"class":74,"line":2041},[72,16063,2615],{"class":82},[72,16065,16066],{"class":74,"line":2046},[72,16067,2828],{"emptyLinePlaceholder":490},[72,16069,16070],{"class":74,"line":2052},[72,16071,2828],{"emptyLinePlaceholder":490},[72,16073,16074],{"class":74,"line":2057},[72,16075,16076],{"class":621},"    \u002F\u002F获取年龄 \n",[72,16078,16079,16081,16084],{"class":74,"line":2071},[72,16080,2413],{"class":78},[72,16082,16083],{"class":358}," getAge",[72,16085,11279],{"class":82},[72,16087,16088,16090],{"class":74,"line":2076},[72,16089,15178],{"class":78},[72,16091,16092],{"class":82}," m_Age;\n",[72,16094,16095],{"class":74,"line":2082},[72,16096,2615],{"class":82},[72,16098,16099],{"class":74,"line":2103},[72,16100,16101],{"class":621},"    \u002F\u002F设置年龄\n",[72,16103,16104,16106,16109,16111,16113,16116],{"class":74,"line":2108},[72,16105,15335],{"class":78},[72,16107,16108],{"class":358}," setAge",[72,16110,564],{"class":82},[72,16112,567],{"class":78},[72,16114,16115],{"class":5642}," age",[72,16117,12868],{"class":82},[72,16119,16120,16122,16125,16127,16129,16131,16134,16136,16139],{"class":74,"line":2122},[72,16121,2925],{"class":78},[72,16123,16124],{"class":82}," (age ",[72,16126,1464],{"class":78},[72,16128,4521],{"class":362},[72,16130,3683],{"class":78},[72,16132,16133],{"class":82}," age ",[72,16135,1514],{"class":78},[72,16137,16138],{"class":362}," 150",[72,16140,12868],{"class":82},[72,16142,16143,16145,16147,16150,16152],{"class":74,"line":2127},[72,16144,10145],{"class":82},[72,16146,1597],{"class":78},[72,16148,16149],{"class":366}," \"你个老妖精!\"",[72,16151,1873],{"class":78},[72,16153,9266],{"class":82},[72,16155,16156,16159],{"class":74,"line":2156},[72,16157,16158],{"class":78},"            return",[72,16160,1719],{"class":82},[72,16162,16163],{"class":74,"line":2161},[72,16164,2957],{"class":82},[72,16166,16167,16170,16172],{"class":74,"line":2178},[72,16168,16169],{"class":82},"        m_Age ",[72,16171,609],{"class":78},[72,16173,8223],{"class":82},[72,16175,16176],{"class":74,"line":2183},[72,16177,2615],{"class":82},[72,16179,16180],{"class":74,"line":2188},[72,16181,2828],{"emptyLinePlaceholder":490},[72,16183,16184],{"class":74,"line":2193},[72,16185,16186],{"class":621},"    \u002F\u002F情人设置为只写\n",[72,16188,16189,16191,16194,16196,16198,16201],{"class":74,"line":2207},[72,16190,15335],{"class":78},[72,16192,16193],{"class":358}," setLover",[72,16195,564],{"class":82},[72,16197,15343],{"class":358},[72,16199,16200],{"class":5642}," lover",[72,16202,12868],{"class":82},[72,16204,16205,16208,16210],{"class":74,"line":2212},[72,16206,16207],{"class":82},"        m_Lover ",[72,16209,609],{"class":78},[72,16211,16212],{"class":82}," lover;\n",[72,16214,16215],{"class":74,"line":3005},[72,16216,2615],{"class":82},[72,16218,16219],{"class":74,"line":3019},[72,16220,2828],{"emptyLinePlaceholder":490},[72,16222,16223],{"class":74,"line":3027},[72,16224,15648],{"class":78},[72,16226,16227,16230],{"class":74,"line":3032},[72,16228,16229],{"class":82},"    string m_Name;",[72,16231,16232],{"class":621}," \u002F\u002F可读可写  姓名\n",[72,16234,16235],{"class":74,"line":3038},[72,16236,13636],{"class":82},[72,16238,16239,16241,16244],{"class":74,"line":3044},[72,16240,2413],{"class":78},[72,16242,16243],{"class":82}," m_Age;",[72,16245,16246],{"class":621}," \u002F\u002F只读  年龄\n",[72,16248,16249],{"class":74,"line":3049},[72,16250,2828],{"emptyLinePlaceholder":490},[72,16252,16253,16256],{"class":74,"line":8374},[72,16254,16255],{"class":82},"    string m_Lover;",[72,16257,16258],{"class":621}," \u002F\u002F只写  情人\n",[72,16260,16261],{"class":74,"line":8398},[72,16262,4423],{"class":82},[72,16264,16265],{"class":74,"line":8403},[72,16266,2828],{"emptyLinePlaceholder":490},[72,16268,16269,16271,16273],{"class":74,"line":8409},[72,16270,567],{"class":78},[72,16272,2401],{"class":358},[72,16274,11279],{"class":82},[72,16276,16277],{"class":74,"line":8436},[72,16278,2828],{"emptyLinePlaceholder":490},[72,16280,16281],{"class":74,"line":8441},[72,16282,15739],{"class":82},[72,16284,16285],{"class":74,"line":8447},[72,16286,16287],{"class":621},"    \u002F\u002F姓名设置\n",[72,16289,16290,16293,16295,16297,16299],{"class":74,"line":8459},[72,16291,16292],{"class":82},"    p.",[72,16294,15492],{"class":358},[72,16296,564],{"class":82},[72,16298,8342],{"class":366},[72,16300,3147],{"class":82},[72,16302,16303,16305,16307,16310,16312,16315,16318,16320,16322],{"class":74,"line":8471},[72,16304,6955],{"class":82},[72,16306,1597],{"class":78},[72,16308,16309],{"class":366}," \"姓名： \"",[72,16311,1873],{"class":78},[72,16313,16314],{"class":82}," p.",[72,16316,16317],{"class":358},"getName",[72,16319,13476],{"class":82},[72,16321,1597],{"class":78},[72,16323,9266],{"class":82},[72,16325,16326],{"class":74,"line":8483},[72,16327,2828],{"emptyLinePlaceholder":490},[72,16329,16330],{"class":74,"line":10142},[72,16331,16332],{"class":621},"    \u002F\u002F年龄设置\n",[72,16334,16335,16337,16340,16342,16344],{"class":74,"line":10167},[72,16336,16292],{"class":82},[72,16338,16339],{"class":358},"setAge",[72,16341,564],{"class":82},[72,16343,1210],{"class":362},[72,16345,3147],{"class":82},[72,16347,16348,16350,16352,16355,16357,16359,16362,16364,16366],{"class":74,"line":10190},[72,16349,6955],{"class":82},[72,16351,1597],{"class":78},[72,16353,16354],{"class":366}," \"年龄： \"",[72,16356,1873],{"class":78},[72,16358,16314],{"class":82},[72,16360,16361],{"class":358},"getAge",[72,16363,13476],{"class":82},[72,16365,1597],{"class":78},[72,16367,9266],{"class":82},[72,16369,16370],{"class":74,"line":10214},[72,16371,2828],{"emptyLinePlaceholder":490},[72,16373,16374],{"class":74,"line":10219},[72,16375,16376],{"class":621},"    \u002F\u002F情人设置\n",[72,16378,16379,16381,16384,16386,16389],{"class":74,"line":10224},[72,16380,16292],{"class":82},[72,16382,16383],{"class":358},"setLover",[72,16385,564],{"class":82},[72,16387,16388],{"class":366},"\"苍井\"",[72,16390,3147],{"class":82},[72,16392,16393,16396],{"class":74,"line":10229},[72,16394,16395],{"class":621},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[72,16397,16398],{"class":621},"  \u002F\u002F只写属性，不可以读取\n",[72,16400,16401],{"class":74,"line":10238},[72,16402,2828],{"emptyLinePlaceholder":490},[72,16404,16405,16407,16409,16411],{"class":74,"line":10243},[72,16406,2731],{"class":358},[72,16408,564],{"class":82},[72,16410,2736],{"class":366},[72,16412,3147],{"class":82},[72,16414,16415],{"class":74,"line":10249},[72,16416,2828],{"emptyLinePlaceholder":490},[72,16418,16419,16421,16423],{"class":74,"line":10270},[72,16420,4518],{"class":78},[72,16422,4521],{"class":362},[72,16424,1719],{"class":82},[72,16426,16427],{"class":74,"line":10276},[72,16428,1994],{"class":82},[531,16430,16432],{"id":16431},"_814封装案例","8.1.4封装案例",[22,16434,16435],{},[25,16436,16437,16440],{},[707,16438,16439],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[251,16442,16443,16446],{},[25,16444,16445],{},"求出立方体的面积和体积",[25,16447,16448],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[63,16450,16452],{"className":552,"code":16451,"language":554,"meta":68,"style":68},"#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",[34,16453,16454,16460,16470,16477,16481,16485,16490,16520,16524,16534,16544,16554,16558,16567,16571,16607,16611,16620,16624,16640,16644,16649,16658,16662,16669,16673,16682,16686,16693,16697,16706,16710,16717,16721,16726,16743,16747,16793,16797,16806,16810,16814,16818,16827,16831,16835,16840,16844,16850,16856,16862,16866,16870,16875,16897,16901,16955,16959,16967,16971,16976,16981,16994,17001,17017,17028,17034,17057,17063,17086,17100,17120,17126,17137,17160,17182,17187,17193,17207,17220,17225,17239,17244,17250,17255,17269,17274,17279,17293,17305,17310,17323,17328,17333,17338,17351,17356],{"__ignoreMap":68},[72,16455,16456,16458],{"class":74,"line":75},[72,16457,2378],{"class":78},[72,16459,2381],{"class":366},[72,16461,16462,16464,16466,16468],{"class":74,"line":370},[72,16463,2386],{"class":78},[72,16465,2389],{"class":78},[72,16467,2392],{"class":358},[72,16469,1719],{"class":82},[72,16471,16472,16474],{"class":74,"line":1608},[72,16473,15120],{"class":78},[72,16475,16476],{"class":358}," Cube\n",[72,16478,16479],{"class":74,"line":1623},[72,16480,1975],{"class":82},[72,16482,16483],{"class":74,"line":1629},[72,16484,15142],{"class":78},[72,16486,16487],{"class":74,"line":1643},[72,16488,16489],{"class":621},"    \u002F\u002F输入长宽高\n",[72,16491,16492,16494,16497,16499,16501,16504,16506,16508,16511,16513,16515,16518],{"class":74,"line":1649},[72,16493,15335],{"class":78},[72,16495,16496],{"class":358}," setLwh",[72,16498,564],{"class":82},[72,16500,567],{"class":78},[72,16502,16503],{"class":5642}," l",[72,16505,932],{"class":82},[72,16507,567],{"class":78},[72,16509,16510],{"class":5642}," w",[72,16512,932],{"class":82},[72,16514,567],{"class":78},[72,16516,16517],{"class":5642}," h",[72,16519,570],{"class":82},[72,16521,16522],{"class":74,"line":1740},[72,16523,2458],{"class":82},[72,16525,16526,16529,16531],{"class":74,"line":1746},[72,16527,16528],{"class":82},"        m_L",[72,16530,609],{"class":78},[72,16532,16533],{"class":82},"l;\n",[72,16535,16536,16539,16541],{"class":74,"line":1758},[72,16537,16538],{"class":82},"        m_W",[72,16540,609],{"class":78},[72,16542,16543],{"class":82},"w;\n",[72,16545,16546,16549,16551],{"class":74,"line":2041},[72,16547,16548],{"class":82},"        m_H",[72,16550,609],{"class":78},[72,16552,16553],{"class":82},"h;\n",[72,16555,16556],{"class":74,"line":2046},[72,16557,2615],{"class":82},[72,16559,16560,16562,16565],{"class":74,"line":2052},[72,16561,2413],{"class":78},[72,16563,16564],{"class":358}," mianji",[72,16566,2404],{"class":82},[72,16568,16569],{"class":74,"line":2057},[72,16570,2458],{"class":82},[72,16572,16573,16575,16577,16579,16582,16584,16587,16589,16592,16594,16597,16599,16602,16604],{"class":74,"line":2071},[72,16574,15178],{"class":78},[72,16576,15181],{"class":362},[72,16578,1009],{"class":78},[72,16580,16581],{"class":82},"(m_L",[72,16583,1009],{"class":78},[72,16585,16586],{"class":82},"m_W ",[72,16588,1035],{"class":78},[72,16590,16591],{"class":82}," m_L",[72,16593,1009],{"class":78},[72,16595,16596],{"class":82},"m_H ",[72,16598,1035],{"class":78},[72,16600,16601],{"class":82}," m_W",[72,16603,1009],{"class":78},[72,16605,16606],{"class":82},"m_H);\n",[72,16608,16609],{"class":74,"line":2076},[72,16610,2615],{"class":82},[72,16612,16613,16615,16618],{"class":74,"line":2082},[72,16614,2413],{"class":78},[72,16616,16617],{"class":358}," tiji",[72,16619,2404],{"class":82},[72,16621,16622],{"class":74,"line":2103},[72,16623,2458],{"class":82},[72,16625,16626,16628,16630,16632,16635,16637],{"class":74,"line":2108},[72,16627,15178],{"class":78},[72,16629,16591],{"class":82},[72,16631,1009],{"class":78},[72,16633,16634],{"class":82},"m_W",[72,16636,1009],{"class":78},[72,16638,16639],{"class":82},"m_H;\n",[72,16641,16642],{"class":74,"line":2122},[72,16643,2615],{"class":82},[72,16645,16646],{"class":74,"line":2127},[72,16647,16648],{"class":621},"    \u002F\u002F获取长宽高\n",[72,16650,16651,16653,16656],{"class":74,"line":2156},[72,16652,2413],{"class":78},[72,16654,16655],{"class":358}," getLength",[72,16657,2404],{"class":82},[72,16659,16660],{"class":74,"line":2161},[72,16661,2458],{"class":82},[72,16663,16664,16666],{"class":74,"line":2178},[72,16665,15178],{"class":78},[72,16667,16668],{"class":82}," m_L;\n",[72,16670,16671],{"class":74,"line":2183},[72,16672,2615],{"class":82},[72,16674,16675,16677,16680],{"class":74,"line":2188},[72,16676,2413],{"class":78},[72,16678,16679],{"class":358}," getWidth",[72,16681,2404],{"class":82},[72,16683,16684],{"class":74,"line":2193},[72,16685,2458],{"class":82},[72,16687,16688,16690],{"class":74,"line":2207},[72,16689,15178],{"class":78},[72,16691,16692],{"class":82}," m_W;\n",[72,16694,16695],{"class":74,"line":2212},[72,16696,2615],{"class":82},[72,16698,16699,16701,16704],{"class":74,"line":3005},[72,16700,2413],{"class":78},[72,16702,16703],{"class":358}," getHeight",[72,16705,2404],{"class":82},[72,16707,16708],{"class":74,"line":3019},[72,16709,2458],{"class":82},[72,16711,16712,16714],{"class":74,"line":3027},[72,16713,15178],{"class":78},[72,16715,16716],{"class":82}," m_H;\n",[72,16718,16719],{"class":74,"line":3032},[72,16720,2615],{"class":82},[72,16722,16723],{"class":74,"line":3038},[72,16724,16725],{"class":621},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[72,16727,16728,16731,16734,16736,16739,16741],{"class":74,"line":3044},[72,16729,16730],{"class":78},"    bool",[72,16732,16733],{"class":358}," isEqual",[72,16735,564],{"class":82},[72,16737,16738],{"class":358},"Cube",[72,16740,3277],{"class":5642},[72,16742,570],{"class":82},[72,16744,16745],{"class":74,"line":3049},[72,16746,2458],{"class":82},[72,16748,16749,16751,16754,16757,16759,16761,16764,16766,16769,16772,16774,16776,16779,16781,16783,16786,16788,16790],{"class":74,"line":8374},[72,16750,2925],{"class":78},[72,16752,16753],{"class":82}," (c.",[72,16755,16756],{"class":358},"getLength",[72,16758,13476],{"class":82},[72,16760,3377],{"class":78},[72,16762,16763],{"class":82}," m_L ",[72,16765,2144],{"class":78},[72,16767,16768],{"class":82}," c.",[72,16770,16771],{"class":358},"getWidth",[72,16773,13476],{"class":82},[72,16775,3377],{"class":78},[72,16777,16778],{"class":82}," m_W ",[72,16780,2144],{"class":78},[72,16782,16768],{"class":82},[72,16784,16785],{"class":358},"getHeight",[72,16787,13476],{"class":82},[72,16789,3377],{"class":78},[72,16791,16792],{"class":82}," m_H)\n",[72,16794,16795],{"class":74,"line":8398},[72,16796,2938],{"class":82},[72,16798,16799,16801,16804],{"class":74,"line":8403},[72,16800,16158],{"class":78},[72,16802,16803],{"class":362}," true",[72,16805,1719],{"class":82},[72,16807,16808],{"class":74,"line":8409},[72,16809,2957],{"class":82},[72,16811,16812],{"class":74,"line":8436},[72,16813,2998],{"class":78},[72,16815,16816],{"class":74,"line":8441},[72,16817,2938],{"class":82},[72,16819,16820,16822,16825],{"class":74,"line":8447},[72,16821,16158],{"class":78},[72,16823,16824],{"class":362}," false",[72,16826,1719],{"class":82},[72,16828,16829],{"class":74,"line":8459},[72,16830,2957],{"class":82},[72,16832,16833],{"class":74,"line":8471},[72,16834,2615],{"class":82},[72,16836,16837],{"class":74,"line":8483},[72,16838,16839],{"class":621},"    \u002F\u002F私有属性\n",[72,16841,16842],{"class":74,"line":10142},[72,16843,15648],{"class":78},[72,16845,16846,16848],{"class":74,"line":10167},[72,16847,2413],{"class":78},[72,16849,16668],{"class":82},[72,16851,16852,16854],{"class":74,"line":10190},[72,16853,2413],{"class":78},[72,16855,16692],{"class":82},[72,16857,16858,16860],{"class":74,"line":10214},[72,16859,2413],{"class":78},[72,16861,16716],{"class":82},[72,16863,16864],{"class":74,"line":10219},[72,16865,2828],{"emptyLinePlaceholder":490},[72,16867,16868],{"class":74,"line":10224},[72,16869,4423],{"class":82},[72,16871,16872],{"class":74,"line":10229},[72,16873,16874],{"class":621},"\u002F\u002F全局函数判断两个立方体是否相等\n",[72,16876,16877,16879,16881,16883,16885,16888,16890,16892,16895],{"class":74,"line":10238},[72,16878,1783],{"class":78},[72,16880,16733],{"class":358},[72,16882,564],{"class":82},[72,16884,16738],{"class":358},[72,16886,16887],{"class":5642}," c1",[72,16889,932],{"class":82},[72,16891,16738],{"class":358},[72,16893,16894],{"class":5642}," c2",[72,16896,570],{"class":82},[72,16898,16899],{"class":74,"line":10243},[72,16900,1975],{"class":82},[72,16902,16903,16905,16908,16910,16912,16914,16917,16919,16922,16924,16926,16928,16930,16932,16934,16936,16938,16940,16942,16944,16946,16948,16950,16952],{"class":74,"line":10249},[72,16904,4518],{"class":78},[72,16906,16907],{"class":82}," (c1.",[72,16909,16756],{"class":358},[72,16911,13476],{"class":82},[72,16913,3377],{"class":78},[72,16915,16916],{"class":82}," c2.",[72,16918,16756],{"class":358},[72,16920,16921],{"class":82},"()) ",[72,16923,2144],{"class":78},[72,16925,16907],{"class":82},[72,16927,16771],{"class":358},[72,16929,13476],{"class":82},[72,16931,3377],{"class":78},[72,16933,16916],{"class":82},[72,16935,16771],{"class":358},[72,16937,16921],{"class":82},[72,16939,2144],{"class":78},[72,16941,16907],{"class":82},[72,16943,16785],{"class":358},[72,16945,13476],{"class":82},[72,16947,3377],{"class":78},[72,16949,16916],{"class":82},[72,16951,16785],{"class":358},[72,16953,16954],{"class":82},"());\n",[72,16956,16957],{"class":74,"line":10270},[72,16958,1994],{"class":82},[72,16960,16961,16963,16965],{"class":74,"line":10276},[72,16962,567],{"class":78},[72,16964,2401],{"class":358},[72,16966,2404],{"class":82},[72,16968,16969],{"class":74,"line":10290},[72,16970,1975],{"class":82},[72,16972,16973],{"class":74,"line":10296},[72,16974,16975],{"class":82},"    Cube c1;\n",[72,16977,16978],{"class":74,"line":10323},[72,16979,16980],{"class":621},"    \u002F\u002F输入立方体的长宽高\n",[72,16982,16983,16985,16987,16990,16992],{"class":74,"line":10332},[72,16984,1980],{"class":82},[72,16986,1597],{"class":78},[72,16988,16989],{"class":366},"\"请输入第一个立方体的长、宽、高：\"",[72,16991,1597],{"class":78},[72,16993,1620],{"class":82},[72,16995,16996,16998],{"class":74,"line":10338},[72,16997,2413],{"class":78},[72,16999,17000],{"class":82}," l,w,h,l1,w1,h1;\n",[72,17002,17003,17005,17007,17009,17011,17013,17015],{"class":74,"line":10346},[72,17004,2440],{"class":82},[72,17006,1858],{"class":78},[72,17008,1072],{"class":82},[72,17010,1858],{"class":78},[72,17012,1349],{"class":82},[72,17014,1858],{"class":78},[72,17016,16553],{"class":82},[72,17018,17019,17022,17025],{"class":74,"line":10351},[72,17020,17021],{"class":82},"    c1.",[72,17023,17024],{"class":358},"setLwh",[72,17026,17027],{"class":82},"(l,w,h);\n",[72,17029,17031],{"class":74,"line":17030},66,[72,17032,17033],{"class":621},"    \u002F\u002F面积\n",[72,17035,17037,17039,17041,17044,17046,17048,17051,17053,17055],{"class":74,"line":17036},67,[72,17038,1980],{"class":82},[72,17040,1597],{"class":78},[72,17042,17043],{"class":366},"\"立方体的表面积为：\"",[72,17045,1597],{"class":78},[72,17047,15256],{"class":82},[72,17049,17050],{"class":358},"mianji",[72,17052,2855],{"class":82},[72,17054,1597],{"class":78},[72,17056,1620],{"class":82},[72,17058,17060],{"class":74,"line":17059},68,[72,17061,17062],{"class":621},"    \u002F\u002F体积\n",[72,17064,17066,17068,17070,17073,17075,17077,17080,17082,17084],{"class":74,"line":17065},69,[72,17067,1980],{"class":82},[72,17069,1597],{"class":78},[72,17071,17072],{"class":366},"\"立方体的体积为：\"",[72,17074,1597],{"class":78},[72,17076,15256],{"class":82},[72,17078,17079],{"class":358},"tiji",[72,17081,2855],{"class":82},[72,17083,1597],{"class":78},[72,17085,1620],{"class":82},[72,17087,17089,17091,17093,17096,17098],{"class":74,"line":17088},70,[72,17090,1980],{"class":82},[72,17092,1597],{"class":78},[72,17094,17095],{"class":366},"\"请输入第二个立方体的长、宽、高：\"",[72,17097,1597],{"class":78},[72,17099,1620],{"class":82},[72,17101,17103,17105,17107,17110,17112,17115,17117],{"class":74,"line":17102},71,[72,17104,2440],{"class":82},[72,17106,1858],{"class":78},[72,17108,17109],{"class":82},"l1",[72,17111,1858],{"class":78},[72,17113,17114],{"class":82},"w1",[72,17116,1858],{"class":78},[72,17118,17119],{"class":82},"h1;\n",[72,17121,17123],{"class":74,"line":17122},72,[72,17124,17125],{"class":82},"    Cube c2;\n",[72,17127,17129,17132,17134],{"class":74,"line":17128},73,[72,17130,17131],{"class":82},"    c2.",[72,17133,17024],{"class":358},[72,17135,17136],{"class":82},"(l1,w1,h1);\n",[72,17138,17140,17142,17144,17147,17149,17152,17154,17156,17158],{"class":74,"line":17139},74,[72,17141,1980],{"class":82},[72,17143,1597],{"class":78},[72,17145,17146],{"class":366},"\"第二个立方体的表面积为：\"",[72,17148,1597],{"class":78},[72,17150,17151],{"class":82},"c2.",[72,17153,17050],{"class":358},[72,17155,2855],{"class":82},[72,17157,1597],{"class":78},[72,17159,1620],{"class":82},[72,17161,17163,17165,17167,17170,17172,17174,17176,17178,17180],{"class":74,"line":17162},75,[72,17164,1980],{"class":82},[72,17166,1597],{"class":78},[72,17168,17169],{"class":366},"\"第二个立方体的体积为：\"",[72,17171,1597],{"class":78},[72,17173,17151],{"class":82},[72,17175,17079],{"class":358},[72,17177,2855],{"class":82},[72,17179,1597],{"class":78},[72,17181,1620],{"class":82},[72,17183,17185],{"class":74,"line":17184},76,[72,17186,2828],{"emptyLinePlaceholder":490},[72,17188,17190],{"class":74,"line":17189},77,[72,17191,17192],{"class":621},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[72,17194,17196,17198,17200,17203,17205],{"class":74,"line":17195},78,[72,17197,1980],{"class":82},[72,17199,1597],{"class":78},[72,17201,17202],{"class":366},"\"内部函数判断结果：\"",[72,17204,1597],{"class":78},[72,17206,1620],{"class":82},[72,17208,17210,17212,17214,17217],{"class":74,"line":17209},79,[72,17211,3529],{"class":78},[72,17213,16907],{"class":82},[72,17215,17216],{"class":358},"isEqual",[72,17218,17219],{"class":82},"(c2))\n",[72,17221,17223],{"class":74,"line":17222},80,[72,17224,2458],{"class":82},[72,17226,17228,17230,17232,17235,17237],{"class":74,"line":17227},81,[72,17229,3879],{"class":82},[72,17231,1597],{"class":78},[72,17233,17234],{"class":366},"\"两个立方体相等\"",[72,17236,1597],{"class":78},[72,17238,1620],{"class":82},[72,17240,17242],{"class":74,"line":17241},82,[72,17243,2615],{"class":82},[72,17245,17247],{"class":74,"line":17246},83,[72,17248,17249],{"class":78},"    else\n",[72,17251,17253],{"class":74,"line":17252},84,[72,17254,2458],{"class":82},[72,17256,17258,17260,17262,17265,17267],{"class":74,"line":17257},85,[72,17259,3879],{"class":82},[72,17261,1597],{"class":78},[72,17263,17264],{"class":366},"\"两个立方体不相等\"",[72,17266,1597],{"class":78},[72,17268,1620],{"class":82},[72,17270,17272],{"class":74,"line":17271},86,[72,17273,2615],{"class":82},[72,17275,17277],{"class":74,"line":17276},87,[72,17278,2828],{"emptyLinePlaceholder":490},[72,17280,17282,17284,17286,17289,17291],{"class":74,"line":17281},88,[72,17283,1980],{"class":82},[72,17285,1597],{"class":78},[72,17287,17288],{"class":366},"\"全局函数判断结果：\"",[72,17290,1597],{"class":78},[72,17292,1620],{"class":82},[72,17294,17296,17298,17300,17302],{"class":74,"line":17295},89,[72,17297,3529],{"class":78},[72,17299,2087],{"class":82},[72,17301,17216],{"class":358},[72,17303,17304],{"class":82},"(c1, c2))\n",[72,17306,17308],{"class":74,"line":17307},90,[72,17309,2458],{"class":82},[72,17311,17313,17315,17317,17319,17321],{"class":74,"line":17312},91,[72,17314,3879],{"class":82},[72,17316,1597],{"class":78},[72,17318,17234],{"class":366},[72,17320,1597],{"class":78},[72,17322,1620],{"class":82},[72,17324,17326],{"class":74,"line":17325},92,[72,17327,2615],{"class":82},[72,17329,17331],{"class":74,"line":17330},93,[72,17332,17249],{"class":78},[72,17334,17336],{"class":74,"line":17335},94,[72,17337,2458],{"class":82},[72,17339,17341,17343,17345,17347,17349],{"class":74,"line":17340},95,[72,17342,3879],{"class":82},[72,17344,1597],{"class":78},[72,17346,17264],{"class":366},[72,17348,1597],{"class":78},[72,17350,1620],{"class":82},[72,17352,17354],{"class":74,"line":17353},96,[72,17355,2615],{"class":82},[72,17357,17359],{"class":74,"line":17358},97,[72,17360,1994],{"class":82},[22,17362,17363],{"start":370},[25,17364,17365],{},[707,17366,17367],{},"练习案例2：点和圆的关系",[251,17369,17370],{},[25,17371,17372],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[63,17374,17376],{"className":552,"code":17375,"language":554,"meta":68,"style":68},"#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",[34,17377,17378,17384,17394,17401,17408,17412,17416,17421,17455,17460,17476,17490,17494,17498,17505,17512,17516,17522,17526,17530,17534,17556,17579,17584,17598,17613,17617,17621,17627,17632,17637,17641,17667,17671,17701,17729,17757,17774,17778,17791,17795,17799,17803,17816,17820,17824,17832,17836,17840,17844,17849,17853,17864,17871,17880,17890,17901,17908,17921,17932,17942,17953,17960,17974,17979,17989,17997],{"__ignoreMap":68},[72,17379,17380,17382],{"class":74,"line":75},[72,17381,2378],{"class":78},[72,17383,2381],{"class":366},[72,17385,17386,17388,17390,17392],{"class":74,"line":370},[72,17387,2386],{"class":78},[72,17389,2389],{"class":78},[72,17391,2392],{"class":358},[72,17393,1719],{"class":82},[72,17395,17396,17398],{"class":74,"line":1608},[72,17397,2378],{"class":78},[72,17399,17400],{"class":366},"\u003Ccmath>\n",[72,17402,17403,17405],{"class":74,"line":1623},[72,17404,15120],{"class":78},[72,17406,17407],{"class":358}," Point\n",[72,17409,17410],{"class":74,"line":1629},[72,17411,1975],{"class":82},[72,17413,17414],{"class":74,"line":1643},[72,17415,15142],{"class":78},[72,17417,17418],{"class":74,"line":1649},[72,17419,17420],{"class":621},"    \u002F\u002F赋值\n",[72,17422,17423,17425,17428,17430,17432,17435,17437,17439,17442,17445,17447,17450,17452],{"class":74,"line":1740},[72,17424,15335],{"class":78},[72,17426,17427],{"class":358}," setPoint",[72,17429,564],{"class":82},[72,17431,14463],{"class":78},[72,17433,17434],{"class":5642}," x",[72,17436,12861],{"class":82},[72,17438,14463],{"class":78},[72,17440,17441],{"class":5642}," y",[72,17443,17444],{"class":82},") { m_x ",[72,17446,609],{"class":78},[72,17448,17449],{"class":82}," x; m_y ",[72,17451,609],{"class":78},[72,17453,17454],{"class":82}," y; }\n",[72,17456,17457],{"class":74,"line":1746},[72,17458,17459],{"class":621},"    \u002F\u002F获取坐标\n",[72,17461,17462,17464,17467,17470,17473],{"class":74,"line":1758},[72,17463,15164],{"class":78},[72,17465,17466],{"class":358}," getX",[72,17468,17469],{"class":82},"() { ",[72,17471,17472],{"class":78},"return",[72,17474,17475],{"class":82}," m_x; }\n",[72,17477,17478,17480,17483,17485,17487],{"class":74,"line":2041},[72,17479,15164],{"class":78},[72,17481,17482],{"class":358}," getY",[72,17484,17469],{"class":82},[72,17486,17472],{"class":78},[72,17488,17489],{"class":82}," m_y; }\n",[72,17491,17492],{"class":74,"line":2046},[72,17493,2828],{"emptyLinePlaceholder":490},[72,17495,17496],{"class":74,"line":2052},[72,17497,15648],{"class":78},[72,17499,17500,17502],{"class":74,"line":2057},[72,17501,15164],{"class":78},[72,17503,17504],{"class":82}," m_x;\n",[72,17506,17507,17509],{"class":74,"line":2071},[72,17508,15164],{"class":78},[72,17510,17511],{"class":82}," m_y;\n",[72,17513,17514],{"class":74,"line":2076},[72,17515,4423],{"class":82},[72,17517,17518,17520],{"class":74,"line":2082},[72,17519,15120],{"class":78},[72,17521,15123],{"class":358},[72,17523,17524],{"class":74,"line":2103},[72,17525,1975],{"class":82},[72,17527,17528],{"class":74,"line":2108},[72,17529,15142],{"class":78},[72,17531,17532],{"class":74,"line":2122},[72,17533,17420],{"class":621},[72,17535,17536,17538,17541,17543,17545,17548,17551,17553],{"class":74,"line":2127},[72,17537,15335],{"class":78},[72,17539,17540],{"class":358}," setRadius",[72,17542,564],{"class":82},[72,17544,14463],{"class":78},[72,17546,17547],{"class":5642}," r",[72,17549,17550],{"class":82},") { m_r ",[72,17552,609],{"class":78},[72,17554,17555],{"class":82}," r; }\n",[72,17557,17558,17560,17563,17565,17568,17571,17574,17576],{"class":74,"line":2156},[72,17559,15335],{"class":78},[72,17561,17562],{"class":358}," setCenter",[72,17564,564],{"class":82},[72,17566,17567],{"class":358},"Point",[72,17569,17570],{"class":5642}," center",[72,17572,17573],{"class":82},") { m_center ",[72,17575,609],{"class":78},[72,17577,17578],{"class":82}," center; }\n",[72,17580,17581],{"class":74,"line":2161},[72,17582,17583],{"class":621},"    \u002F\u002F获取属性\n",[72,17585,17586,17588,17591,17593,17595],{"class":74,"line":2178},[72,17587,15164],{"class":78},[72,17589,17590],{"class":358}," getRadius",[72,17592,17469],{"class":82},[72,17594,17472],{"class":78},[72,17596,17597],{"class":82}," m_r; }\n",[72,17599,17600,17603,17606,17608,17610],{"class":74,"line":2183},[72,17601,17602],{"class":358},"    Point",[72,17604,17605],{"class":358}," getCenter",[72,17607,17469],{"class":82},[72,17609,17472],{"class":78},[72,17611,17612],{"class":82}," m_center; }\n",[72,17614,17615],{"class":74,"line":2188},[72,17616,2828],{"emptyLinePlaceholder":490},[72,17618,17619],{"class":74,"line":2193},[72,17620,15648],{"class":78},[72,17622,17623,17625],{"class":74,"line":2207},[72,17624,15164],{"class":78},[72,17626,15154],{"class":82},[72,17628,17629],{"class":74,"line":2212},[72,17630,17631],{"class":621},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[72,17633,17634],{"class":74,"line":3005},[72,17635,17636],{"class":82},"    Point m_center;\n",[72,17638,17639],{"class":74,"line":3019},[72,17640,4423],{"class":82},[72,17642,17643,17645,17648,17650,17653,17655,17657,17659,17661,17663,17665],{"class":74,"line":3027},[72,17644,5790],{"class":78},[72,17646,17647],{"class":358}," isInCircle",[72,17649,564],{"class":82},[72,17651,17652],{"class":358},"Circle",[72,17654,11010],{"class":78},[72,17656,842],{"class":5642},[72,17658,932],{"class":82},[72,17660,17567],{"class":358},[72,17662,11010],{"class":78},[72,17664,15],{"class":5642},[72,17666,570],{"class":82},[72,17668,17669],{"class":74,"line":3032},[72,17670,1975],{"class":82},[72,17672,17673,17675,17678,17680,17682,17685,17688,17691,17693,17695,17697,17699],{"class":74,"line":3038},[72,17674,15164],{"class":78},[72,17676,17677],{"class":82}," dx ",[72,17679,609],{"class":78},[72,17681,16768],{"class":82},[72,17683,17684],{"class":358},"getCenter",[72,17686,17687],{"class":82},"().",[72,17689,17690],{"class":358},"getX",[72,17692,13476],{"class":82},[72,17694,1086],{"class":78},[72,17696,16314],{"class":82},[72,17698,17690],{"class":358},[72,17700,6062],{"class":82},[72,17702,17703,17705,17708,17710,17712,17714,17716,17719,17721,17723,17725,17727],{"class":74,"line":3044},[72,17704,15164],{"class":78},[72,17706,17707],{"class":82}," dy ",[72,17709,609],{"class":78},[72,17711,16768],{"class":82},[72,17713,17684],{"class":358},[72,17715,17687],{"class":82},[72,17717,17718],{"class":358},"getY",[72,17720,13476],{"class":82},[72,17722,1086],{"class":78},[72,17724,16314],{"class":82},[72,17726,17718],{"class":358},[72,17728,6062],{"class":82},[72,17730,17731,17733,17736,17738,17741,17744,17746,17748,17750,17752,17754],{"class":74,"line":3049},[72,17732,15164],{"class":78},[72,17734,17735],{"class":82}," distance ",[72,17737,609],{"class":78},[72,17739,17740],{"class":358}," sqrt",[72,17742,17743],{"class":82},"(dx ",[72,17745,1009],{"class":78},[72,17747,17677],{"class":82},[72,17749,1035],{"class":78},[72,17751,17707],{"class":82},[72,17753,1009],{"class":78},[72,17755,17756],{"class":82}," dy);\n",[72,17758,17759,17761,17764,17766,17768,17771],{"class":74,"line":8374},[72,17760,3529],{"class":78},[72,17762,17763],{"class":82}," (distance ",[72,17765,1464],{"class":78},[72,17767,16768],{"class":82},[72,17769,17770],{"class":358},"getRadius",[72,17772,17773],{"class":82},"())\n",[72,17775,17776],{"class":74,"line":8398},[72,17777,2458],{"class":82},[72,17779,17780,17782,17784,17787,17789],{"class":74,"line":8403},[72,17781,10095],{"class":82},[72,17783,1597],{"class":78},[72,17785,17786],{"class":366}," \"点在圆内\"",[72,17788,1873],{"class":78},[72,17790,9266],{"class":82},[72,17792,17793],{"class":74,"line":8409},[72,17794,2615],{"class":82},[72,17796,17797],{"class":74,"line":8436},[72,17798,17249],{"class":78},[72,17800,17801],{"class":74,"line":8441},[72,17802,2458],{"class":82},[72,17804,17805,17807,17809,17812,17814],{"class":74,"line":8447},[72,17806,10095],{"class":82},[72,17808,1597],{"class":78},[72,17810,17811],{"class":366}," \"点在圆外\"",[72,17813,1873],{"class":78},[72,17815,9266],{"class":82},[72,17817,17818],{"class":74,"line":8459},[72,17819,2615],{"class":82},[72,17821,17822],{"class":74,"line":8471},[72,17823,1994],{"class":82},[72,17825,17826,17828,17830],{"class":74,"line":8483},[72,17827,567],{"class":78},[72,17829,2401],{"class":358},[72,17831,2404],{"class":82},[72,17833,17834],{"class":74,"line":10142},[72,17835,1975],{"class":82},[72,17837,17838],{"class":74,"line":10167},[72,17839,15479],{"class":621},[72,17841,17842],{"class":74,"line":10190},[72,17843,15226],{"class":82},[72,17845,17846],{"class":74,"line":10214},[72,17847,17848],{"class":82},"    Point p1;\n",[72,17850,17851],{"class":74,"line":10219},[72,17852,17420],{"class":621},[72,17854,17855,17857,17859,17862],{"class":74,"line":10224},[72,17856,1980],{"class":82},[72,17858,1597],{"class":78},[72,17860,17861],{"class":366},"\"请输入圆的半径：\"",[72,17863,1719],{"class":82},[72,17865,17866,17868],{"class":74,"line":10229},[72,17867,15164],{"class":78},[72,17869,17870],{"class":82}," r;\n",[72,17872,17873,17875,17877],{"class":74,"line":10238},[72,17874,2440],{"class":82},[72,17876,1858],{"class":78},[72,17878,17879],{"class":82},"r;\n",[72,17881,17882,17884,17887],{"class":74,"line":10243},[72,17883,17021],{"class":82},[72,17885,17886],{"class":358},"setRadius",[72,17888,17889],{"class":82},"(r);\n",[72,17891,17892,17894,17896,17899],{"class":74,"line":10249},[72,17893,1980],{"class":82},[72,17895,1597],{"class":78},[72,17897,17898],{"class":366},"\"请输入圆心坐标：\"",[72,17900,1719],{"class":82},[72,17902,17903,17905],{"class":74,"line":10270},[72,17904,15164],{"class":78},[72,17906,17907],{"class":82}," x, y;\n",[72,17909,17910,17912,17914,17916,17918],{"class":74,"line":10276},[72,17911,2440],{"class":82},[72,17913,1858],{"class":78},[72,17915,1374],{"class":82},[72,17917,1858],{"class":78},[72,17919,17920],{"class":82},"y;\n",[72,17922,17923,17926,17929],{"class":74,"line":10290},[72,17924,17925],{"class":82},"    p1.",[72,17927,17928],{"class":358},"setPoint",[72,17930,17931],{"class":82},"(x, y);\n",[72,17933,17934,17936,17939],{"class":74,"line":10296},[72,17935,17021],{"class":82},[72,17937,17938],{"class":358},"setCenter",[72,17940,17941],{"class":82},"(p1);\n",[72,17943,17944,17946,17948,17951],{"class":74,"line":10323},[72,17945,1980],{"class":82},[72,17947,1597],{"class":78},[72,17949,17950],{"class":366},"\"请输入测试点坐标：\"",[72,17952,1719],{"class":82},[72,17954,17955,17957],{"class":74,"line":10332},[72,17956,15164],{"class":78},[72,17958,17959],{"class":82}," x1, y1;\n",[72,17961,17962,17964,17966,17969,17971],{"class":74,"line":10338},[72,17963,2440],{"class":82},[72,17965,1858],{"class":78},[72,17967,17968],{"class":82},"x1",[72,17970,1858],{"class":78},[72,17972,17973],{"class":82},"y1;\n",[72,17975,17976],{"class":74,"line":10346},[72,17977,17978],{"class":82},"    Point p2;\n",[72,17980,17981,17984,17986],{"class":74,"line":10351},[72,17982,17983],{"class":82},"    p2.",[72,17985,17928],{"class":358},[72,17987,17988],{"class":82},"(x1, y1);\n",[72,17990,17991,17994],{"class":74,"line":17030},[72,17992,17993],{"class":358},"    isInCircle",[72,17995,17996],{"class":82},"(c1, p2);\n",[72,17998,17999],{"class":74,"line":17036},[72,18000,1994],{"class":82},[15,18002,18003],{},"在类中可以让另一个类作为本来的成员",[15,18005,18006],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[15,18008,18009],{},"创建point.h",[63,18011,18013],{"className":552,"code":18012,"language":554,"meta":68,"style":68},"#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",[34,18014,18015,18026,18032,18042,18048,18052,18057,18061,18065,18085,18089,18097,18105,18109,18113,18119,18125],{"__ignoreMap":68},[72,18016,18017,18020,18023],{"class":74,"line":75},[72,18018,18019],{"class":78},"#pragma",[72,18021,18022],{"class":358}," once",[72,18024,18025],{"class":621}," \u002F\u002F防止头文件重复包含\n",[72,18027,18028,18030],{"class":74,"line":370},[72,18029,2378],{"class":78},[72,18031,2381],{"class":366},[72,18033,18034,18036,18038,18040],{"class":74,"line":1608},[72,18035,2386],{"class":78},[72,18037,2389],{"class":78},[72,18039,2392],{"class":358},[72,18041,1719],{"class":82},[72,18043,18044,18046],{"class":74,"line":1623},[72,18045,15120],{"class":78},[72,18047,17407],{"class":358},[72,18049,18050],{"class":74,"line":1629},[72,18051,1975],{"class":82},[72,18053,18054],{"class":74,"line":1643},[72,18055,18056],{"class":621},"\u002F\u002F做好声明与变量定义就可以\n",[72,18058,18059],{"class":74,"line":1649},[72,18060,15142],{"class":78},[72,18062,18063],{"class":74,"line":1740},[72,18064,17420],{"class":621},[72,18066,18067,18069,18071,18073,18075,18077,18079,18081,18083],{"class":74,"line":1746},[72,18068,15335],{"class":78},[72,18070,17427],{"class":358},[72,18072,564],{"class":82},[72,18074,14463],{"class":78},[72,18076,17434],{"class":5642},[72,18078,12861],{"class":82},[72,18080,14463],{"class":78},[72,18082,17441],{"class":5642},[72,18084,3147],{"class":82},[72,18086,18087],{"class":74,"line":1758},[72,18088,17459],{"class":621},[72,18090,18091,18093,18095],{"class":74,"line":2041},[72,18092,15164],{"class":78},[72,18094,17466],{"class":358},[72,18096,6062],{"class":82},[72,18098,18099,18101,18103],{"class":74,"line":2046},[72,18100,15164],{"class":78},[72,18102,17482],{"class":358},[72,18104,6062],{"class":82},[72,18106,18107],{"class":74,"line":2052},[72,18108,2828],{"emptyLinePlaceholder":490},[72,18110,18111],{"class":74,"line":2057},[72,18112,15648],{"class":78},[72,18114,18115,18117],{"class":74,"line":2071},[72,18116,15164],{"class":78},[72,18118,17504],{"class":82},[72,18120,18121,18123],{"class":74,"line":2076},[72,18122,15164],{"class":78},[72,18124,17511],{"class":82},[72,18126,18127],{"class":74,"line":2082},[72,18128,4423],{"class":82},[15,18130,18131],{},"创建point.cpp",[63,18133,18135],{"className":552,"code":18134,"language":554,"meta":68,"style":68},"#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",[34,18136,18137,18144,18149,18183,18187,18203],{"__ignoreMap":68},[72,18138,18139,18141],{"class":74,"line":75},[72,18140,2378],{"class":78},[72,18142,18143],{"class":366},"\u003Cpoint.h>\n",[72,18145,18146],{"class":74,"line":370},[72,18147,18148],{"class":621},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[72,18150,18151,18153,18156,18159,18161,18163,18165,18167,18169,18171,18173,18175,18177,18179,18181],{"class":74,"line":1608},[72,18152,15335],{"class":78},[72,18154,18155],{"class":358}," Point",[72,18157,18158],{"class":82},"::",[72,18160,17928],{"class":358},[72,18162,564],{"class":82},[72,18164,14463],{"class":78},[72,18166,17434],{"class":5642},[72,18168,12861],{"class":82},[72,18170,14463],{"class":78},[72,18172,17441],{"class":5642},[72,18174,17444],{"class":82},[72,18176,609],{"class":78},[72,18178,17449],{"class":82},[72,18180,609],{"class":78},[72,18182,17454],{"class":82},[72,18184,18185],{"class":74,"line":1623},[72,18186,17459],{"class":621},[72,18188,18189,18191,18193,18195,18197,18199,18201],{"class":74,"line":1629},[72,18190,15164],{"class":78},[72,18192,18155],{"class":358},[72,18194,18158],{"class":82},[72,18196,17690],{"class":358},[72,18198,17469],{"class":82},[72,18200,17472],{"class":78},[72,18202,17475],{"class":82},[72,18204,18205,18207,18209,18211,18213,18215,18217],{"class":74,"line":1643},[72,18206,15164],{"class":78},[72,18208,18155],{"class":358},[72,18210,18158],{"class":82},[72,18212,17718],{"class":358},[72,18214,17469],{"class":82},[72,18216,17472],{"class":78},[72,18218,17489],{"class":82},[15,18220,18221],{},"创建circle.h",[63,18223,18225],{"className":552,"code":18224,"language":554,"meta":68,"style":68},"#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",[34,18226,18227,18234,18240,18250,18256,18262,18266,18270,18274,18288,18302,18306,18314,18322,18326,18330,18336,18340,18344],{"__ignoreMap":68},[72,18228,18229,18231],{"class":74,"line":75},[72,18230,18019],{"class":78},[72,18232,18233],{"class":358}," once\n",[72,18235,18236,18238],{"class":74,"line":370},[72,18237,2378],{"class":78},[72,18239,2381],{"class":366},[72,18241,18242,18244,18246,18248],{"class":74,"line":1608},[72,18243,2386],{"class":78},[72,18245,2389],{"class":78},[72,18247,2392],{"class":358},[72,18249,1719],{"class":82},[72,18251,18252,18254],{"class":74,"line":1623},[72,18253,2378],{"class":78},[72,18255,18143],{"class":366},[72,18257,18258,18260],{"class":74,"line":1629},[72,18259,15120],{"class":78},[72,18261,15123],{"class":358},[72,18263,18264],{"class":74,"line":1643},[72,18265,1975],{"class":82},[72,18267,18268],{"class":74,"line":1649},[72,18269,15142],{"class":78},[72,18271,18272],{"class":74,"line":1740},[72,18273,17420],{"class":621},[72,18275,18276,18278,18280,18282,18284,18286],{"class":74,"line":1746},[72,18277,15335],{"class":78},[72,18279,17540],{"class":358},[72,18281,564],{"class":82},[72,18283,14463],{"class":78},[72,18285,17547],{"class":5642},[72,18287,3147],{"class":82},[72,18289,18290,18292,18294,18296,18298,18300],{"class":74,"line":1758},[72,18291,15335],{"class":78},[72,18293,17562],{"class":358},[72,18295,564],{"class":82},[72,18297,17567],{"class":358},[72,18299,17570],{"class":5642},[72,18301,3147],{"class":82},[72,18303,18304],{"class":74,"line":2041},[72,18305,17583],{"class":621},[72,18307,18308,18310,18312],{"class":74,"line":2046},[72,18309,15164],{"class":78},[72,18311,17590],{"class":358},[72,18313,6062],{"class":82},[72,18315,18316,18318,18320],{"class":74,"line":2052},[72,18317,17602],{"class":358},[72,18319,17605],{"class":358},[72,18321,6062],{"class":82},[72,18323,18324],{"class":74,"line":2057},[72,18325,2828],{"emptyLinePlaceholder":490},[72,18327,18328],{"class":74,"line":2071},[72,18329,15648],{"class":78},[72,18331,18332,18334],{"class":74,"line":2076},[72,18333,15164],{"class":78},[72,18335,15154],{"class":82},[72,18337,18338],{"class":74,"line":2082},[72,18339,17631],{"class":621},[72,18341,18342],{"class":74,"line":2103},[72,18343,17636],{"class":82},[72,18345,18346],{"class":74,"line":2108},[72,18347,4423],{"class":82},[15,18349,18350],{},"创建circle.cpp",[63,18352,18354],{"className":552,"code":18353,"language":554,"meta":68,"style":68},"#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",[34,18355,18356,18363,18386,18408,18413,18429],{"__ignoreMap":68},[72,18357,18358,18360],{"class":74,"line":75},[72,18359,2378],{"class":78},[72,18361,18362],{"class":366},"\u003Ccircle.h>\n",[72,18364,18365,18367,18370,18372,18374,18376,18378,18380,18382,18384],{"class":74,"line":370},[72,18366,5790],{"class":78},[72,18368,18369],{"class":358}," Circle",[72,18371,18158],{"class":82},[72,18373,17886],{"class":358},[72,18375,564],{"class":82},[72,18377,14463],{"class":78},[72,18379,17547],{"class":5642},[72,18381,17550],{"class":82},[72,18383,609],{"class":78},[72,18385,17555],{"class":82},[72,18387,18388,18390,18392,18394,18396,18398,18400,18402,18404,18406],{"class":74,"line":1608},[72,18389,5790],{"class":78},[72,18391,18369],{"class":358},[72,18393,18158],{"class":82},[72,18395,17938],{"class":358},[72,18397,564],{"class":82},[72,18399,17567],{"class":358},[72,18401,17570],{"class":5642},[72,18403,17573],{"class":82},[72,18405,609],{"class":78},[72,18407,17578],{"class":82},[72,18409,18410],{"class":74,"line":1623},[72,18411,18412],{"class":621},"\u002F\u002F获取属性\n",[72,18414,18415,18417,18419,18421,18423,18425,18427],{"class":74,"line":1629},[72,18416,14463],{"class":78},[72,18418,18369],{"class":358},[72,18420,18158],{"class":82},[72,18422,17770],{"class":358},[72,18424,17469],{"class":82},[72,18426,17472],{"class":78},[72,18428,17597],{"class":82},[72,18430,18431,18433,18435,18437,18439,18441,18443],{"class":74,"line":1643},[72,18432,17567],{"class":358},[72,18434,18369],{"class":358},[72,18436,18158],{"class":82},[72,18438,17684],{"class":358},[72,18440,17469],{"class":82},[72,18442,17472],{"class":78},[72,18444,17612],{"class":82},[15,18446,18447],{},"使用封装的类",[63,18449,18451],{"className":552,"code":18450,"language":554,"meta":68,"style":68},"#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",[34,18452,18453,18459,18469,18475,18481,18505,18509,18535,18561,18585,18599,18603,18615,18619,18623,18627,18639,18643,18647,18655,18659,18663,18667,18671,18675,18685,18691,18699,18707,18717,18723,18735,18743,18751,18761,18767,18779,18783,18791,18797],{"__ignoreMap":68},[72,18454,18455,18457],{"class":74,"line":75},[72,18456,2378],{"class":78},[72,18458,2381],{"class":366},[72,18460,18461,18463,18465,18467],{"class":74,"line":370},[72,18462,2386],{"class":78},[72,18464,2389],{"class":78},[72,18466,2392],{"class":358},[72,18468,1719],{"class":82},[72,18470,18471,18473],{"class":74,"line":1608},[72,18472,2378],{"class":78},[72,18474,18362],{"class":366},[72,18476,18477,18479],{"class":74,"line":1623},[72,18478,2378],{"class":78},[72,18480,18143],{"class":366},[72,18482,18483,18485,18487,18489,18491,18493,18495,18497,18499,18501,18503],{"class":74,"line":1629},[72,18484,5790],{"class":78},[72,18486,17647],{"class":358},[72,18488,564],{"class":82},[72,18490,17652],{"class":358},[72,18492,11010],{"class":78},[72,18494,842],{"class":5642},[72,18496,932],{"class":82},[72,18498,17567],{"class":358},[72,18500,11010],{"class":78},[72,18502,15],{"class":5642},[72,18504,570],{"class":82},[72,18506,18507],{"class":74,"line":1643},[72,18508,1975],{"class":82},[72,18510,18511,18513,18515,18517,18519,18521,18523,18525,18527,18529,18531,18533],{"class":74,"line":1649},[72,18512,15164],{"class":78},[72,18514,17677],{"class":82},[72,18516,609],{"class":78},[72,18518,16768],{"class":82},[72,18520,17684],{"class":358},[72,18522,17687],{"class":82},[72,18524,17690],{"class":358},[72,18526,13476],{"class":82},[72,18528,1086],{"class":78},[72,18530,16314],{"class":82},[72,18532,17690],{"class":358},[72,18534,6062],{"class":82},[72,18536,18537,18539,18541,18543,18545,18547,18549,18551,18553,18555,18557,18559],{"class":74,"line":1740},[72,18538,15164],{"class":78},[72,18540,17707],{"class":82},[72,18542,609],{"class":78},[72,18544,16768],{"class":82},[72,18546,17684],{"class":358},[72,18548,17687],{"class":82},[72,18550,17718],{"class":358},[72,18552,13476],{"class":82},[72,18554,1086],{"class":78},[72,18556,16314],{"class":82},[72,18558,17718],{"class":358},[72,18560,6062],{"class":82},[72,18562,18563,18565,18567,18569,18571,18573,18575,18577,18579,18581,18583],{"class":74,"line":1746},[72,18564,15164],{"class":78},[72,18566,17735],{"class":82},[72,18568,609],{"class":78},[72,18570,17740],{"class":358},[72,18572,17743],{"class":82},[72,18574,1009],{"class":78},[72,18576,17677],{"class":82},[72,18578,1035],{"class":78},[72,18580,17707],{"class":82},[72,18582,1009],{"class":78},[72,18584,17756],{"class":82},[72,18586,18587,18589,18591,18593,18595,18597],{"class":74,"line":1758},[72,18588,3529],{"class":78},[72,18590,17763],{"class":82},[72,18592,1464],{"class":78},[72,18594,16768],{"class":82},[72,18596,17770],{"class":358},[72,18598,17773],{"class":82},[72,18600,18601],{"class":74,"line":2041},[72,18602,2458],{"class":82},[72,18604,18605,18607,18609,18611,18613],{"class":74,"line":2046},[72,18606,10095],{"class":82},[72,18608,1597],{"class":78},[72,18610,17786],{"class":366},[72,18612,1873],{"class":78},[72,18614,9266],{"class":82},[72,18616,18617],{"class":74,"line":2052},[72,18618,2615],{"class":82},[72,18620,18621],{"class":74,"line":2057},[72,18622,17249],{"class":78},[72,18624,18625],{"class":74,"line":2071},[72,18626,2458],{"class":82},[72,18628,18629,18631,18633,18635,18637],{"class":74,"line":2076},[72,18630,10095],{"class":82},[72,18632,1597],{"class":78},[72,18634,17811],{"class":366},[72,18636,1873],{"class":78},[72,18638,9266],{"class":82},[72,18640,18641],{"class":74,"line":2082},[72,18642,2615],{"class":82},[72,18644,18645],{"class":74,"line":2103},[72,18646,1994],{"class":82},[72,18648,18649,18651,18653],{"class":74,"line":2108},[72,18650,567],{"class":78},[72,18652,2401],{"class":358},[72,18654,2404],{"class":82},[72,18656,18657],{"class":74,"line":2122},[72,18658,1975],{"class":82},[72,18660,18661],{"class":74,"line":2127},[72,18662,15479],{"class":621},[72,18664,18665],{"class":74,"line":2156},[72,18666,15226],{"class":82},[72,18668,18669],{"class":74,"line":2161},[72,18670,17848],{"class":82},[72,18672,18673],{"class":74,"line":2178},[72,18674,17420],{"class":621},[72,18676,18677,18679,18681,18683],{"class":74,"line":2183},[72,18678,1980],{"class":82},[72,18680,1597],{"class":78},[72,18682,17861],{"class":366},[72,18684,1719],{"class":82},[72,18686,18687,18689],{"class":74,"line":2188},[72,18688,15164],{"class":78},[72,18690,17870],{"class":82},[72,18692,18693,18695,18697],{"class":74,"line":2193},[72,18694,2440],{"class":82},[72,18696,1858],{"class":78},[72,18698,17879],{"class":82},[72,18700,18701,18703,18705],{"class":74,"line":2207},[72,18702,17021],{"class":82},[72,18704,17886],{"class":358},[72,18706,17889],{"class":82},[72,18708,18709,18711,18713,18715],{"class":74,"line":2212},[72,18710,1980],{"class":82},[72,18712,1597],{"class":78},[72,18714,17898],{"class":366},[72,18716,1719],{"class":82},[72,18718,18719,18721],{"class":74,"line":3005},[72,18720,15164],{"class":78},[72,18722,17907],{"class":82},[72,18724,18725,18727,18729,18731,18733],{"class":74,"line":3019},[72,18726,2440],{"class":82},[72,18728,1858],{"class":78},[72,18730,1374],{"class":82},[72,18732,1858],{"class":78},[72,18734,17920],{"class":82},[72,18736,18737,18739,18741],{"class":74,"line":3027},[72,18738,17925],{"class":82},[72,18740,17928],{"class":358},[72,18742,17931],{"class":82},[72,18744,18745,18747,18749],{"class":74,"line":3032},[72,18746,17021],{"class":82},[72,18748,17938],{"class":358},[72,18750,17941],{"class":82},[72,18752,18753,18755,18757,18759],{"class":74,"line":3038},[72,18754,1980],{"class":82},[72,18756,1597],{"class":78},[72,18758,17950],{"class":366},[72,18760,1719],{"class":82},[72,18762,18763,18765],{"class":74,"line":3044},[72,18764,15164],{"class":78},[72,18766,17959],{"class":82},[72,18768,18769,18771,18773,18775,18777],{"class":74,"line":3049},[72,18770,2440],{"class":82},[72,18772,1858],{"class":78},[72,18774,17968],{"class":82},[72,18776,1858],{"class":78},[72,18778,17973],{"class":82},[72,18780,18781],{"class":74,"line":8374},[72,18782,17978],{"class":82},[72,18784,18785,18787,18789],{"class":74,"line":8398},[72,18786,17983],{"class":82},[72,18788,17928],{"class":358},[72,18790,17988],{"class":82},[72,18792,18793,18795],{"class":74,"line":8403},[72,18794,17993],{"class":358},[72,18796,17996],{"class":82},[72,18798,18799],{"class":74,"line":8409},[72,18800,1994],{"class":82},[85,18802,18804],{"id":18803},"_82对象的初始化清理","8.2对象的初始化清理",[251,18806,18807,18810],{},[25,18808,18809],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[25,18811,18812],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[531,18814,18816],{"id":18815},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[15,18818,18819,18820,18823],{},"对象的",[707,18821,18822],{},"初始化和清理","也是两个非常重要的安全问题",[15,18825,18826],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[15,18828,18829],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[15,18831,18832,18833,18836,18837,18840],{},"c++利用了",[707,18834,18835],{},"构造函数","和",[707,18838,18839],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[15,18842,18843,18844],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[707,18845,18846],{},"我们不提供构造和析构，编译器会提供",[15,18848,18849],{},[707,18850,18851],{},"编译器提供的构造函数和析构函数是空实现。",[251,18853,18854,18857],{},[25,18855,18856],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[25,18858,18859,18860,18863],{},"析构函数：主要作用在于对象",[707,18861,18862],{},"销毁前","系统自动调用，执行一些清理工作。",[15,18865,18866,18869],{},[707,18867,18868],{},"构造函数语法：",[34,18870,18871],{},"类名(){}",[22,18873,18874,18877,18880,18883,18886],{},[25,18875,18876],{},"构造函数，没有返回值也不写void",[25,18878,18879],{},"函数名称与类名相同",[25,18881,18882],{},"构造函数可以有参数，因此可以发生重载",[25,18884,18885],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[25,18887,18888,18889,983],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[34,18890,18891],{},"Person(){}",[15,18893,18894,14221,18897],{},[707,18895,18896],{},"析构函数语法：",[34,18898,18899],{},"~类名(){}",[22,18901,18902,18905,18908,18914],{},[25,18903,18904],{},"析构函数，没有返回值也不写void",[25,18906,18907],{},"函数名称与类名相同,在名称前加上符号  ~",[25,18909,18910,18911],{},"析构函数不可以有参数，因此",[707,18912,18913],{},"不可以发生重载",[25,18915,18916],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[63,18918,18920],{"className":552,"code":18919,"language":554,"meta":68,"style":68},"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",[34,18921,18922,18928,18932,18936,18941,18948,18952,18965,18969,18974,18981,18985,18998,19002,19006,19010,19014,19022,19026,19034,19038,19042,19050,19054,19059,19063,19070,19074,19087,19091,19099],{"__ignoreMap":68},[72,18923,18924,18926],{"class":74,"line":75},[72,18925,15120],{"class":78},[72,18927,15597],{"class":358},[72,18929,18930],{"class":74,"line":370},[72,18931,1975],{"class":82},[72,18933,18934],{"class":74,"line":1608},[72,18935,15142],{"class":78},[72,18937,18938],{"class":74,"line":1623},[72,18939,18940],{"class":621},"    \u002F\u002F构造函数\n",[72,18942,18943,18946],{"class":74,"line":1629},[72,18944,18945],{"class":358},"    Person",[72,18947,2404],{"class":82},[72,18949,18950],{"class":74,"line":1643},[72,18951,2458],{"class":82},[72,18953,18954,18956,18958,18961,18963],{"class":74,"line":1649},[72,18955,10095],{"class":82},[72,18957,1597],{"class":78},[72,18959,18960],{"class":366}," \"Person的构造函数调用\"",[72,18962,1873],{"class":78},[72,18964,9266],{"class":82},[72,18966,18967],{"class":74,"line":1740},[72,18968,2615],{"class":82},[72,18970,18971],{"class":74,"line":1746},[72,18972,18973],{"class":621},"    \u002F\u002F析构函数\n",[72,18975,18976,18979],{"class":74,"line":1758},[72,18977,18978],{"class":358},"    ~Person",[72,18980,2404],{"class":82},[72,18982,18983],{"class":74,"line":2041},[72,18984,2458],{"class":82},[72,18986,18987,18989,18991,18994,18996],{"class":74,"line":2046},[72,18988,10095],{"class":82},[72,18990,1597],{"class":78},[72,18992,18993],{"class":366}," \"Person的析构函数调用\"",[72,18995,1873],{"class":78},[72,18997,9266],{"class":82},[72,18999,19000],{"class":74,"line":2052},[72,19001,2615],{"class":82},[72,19003,19004],{"class":74,"line":2057},[72,19005,2828],{"emptyLinePlaceholder":490},[72,19007,19008],{"class":74,"line":2071},[72,19009,4423],{"class":82},[72,19011,19012],{"class":74,"line":2076},[72,19013,2828],{"emptyLinePlaceholder":490},[72,19015,19016,19018,19020],{"class":74,"line":2082},[72,19017,5790],{"class":78},[72,19019,6014],{"class":358},[72,19021,2404],{"class":82},[72,19023,19024],{"class":74,"line":2103},[72,19025,1975],{"class":82},[72,19027,19028,19031],{"class":74,"line":2108},[72,19029,19030],{"class":82},"    Person p;",[72,19032,19033],{"class":621},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[72,19035,19036],{"class":74,"line":2122},[72,19037,1994],{"class":82},[72,19039,19040],{"class":74,"line":2127},[72,19041,2828],{"emptyLinePlaceholder":490},[72,19043,19044,19046,19048],{"class":74,"line":2156},[72,19045,567],{"class":78},[72,19047,2401],{"class":358},[72,19049,11279],{"class":82},[72,19051,19052],{"class":74,"line":2161},[72,19053,13636],{"class":82},[72,19055,19056],{"class":74,"line":2178},[72,19057,19058],{"class":621},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[72,19060,19061],{"class":74,"line":2183},[72,19062,2828],{"emptyLinePlaceholder":490},[72,19064,19065,19067],{"class":74,"line":2188},[72,19066,19030],{"class":82},[72,19068,19069],{"class":621},"\u002F\u002F只有构造函数\n",[72,19071,19072],{"class":74,"line":2193},[72,19073,2828],{"emptyLinePlaceholder":490},[72,19075,19076,19078,19080,19082,19084],{"class":74,"line":2207},[72,19077,2731],{"class":358},[72,19079,564],{"class":82},[72,19081,2736],{"class":366},[72,19083,6392],{"class":82},[72,19085,19086],{"class":621},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[72,19088,19089],{"class":74,"line":2212},[72,19090,2828],{"emptyLinePlaceholder":490},[72,19092,19093,19095,19097],{"class":74,"line":3005},[72,19094,4518],{"class":78},[72,19096,4521],{"class":362},[72,19098,1719],{"class":82},[72,19100,19101],{"class":74,"line":3019},[72,19102,1994],{"class":82},[15,19104,19105],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[531,19107,19109],{"id":19108},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[15,19111,19112],{},"两种分类方式：",[15,19114,19115],{},"​\t按参数分为： 有参构造和无参构造",[15,19117,19118],{},"​\t按类型分为： 普通构造和拷贝构造",[15,19120,19121],{},"三种调用方式：",[15,19123,19124],{},"​\t括号法",[15,19126,19127],{},"​\t显示法",[15,19129,19130],{},"​\t隐式转换法",[63,19132,19134],{"className":552,"code":19133,"language":554,"meta":68,"style":68},"#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",[34,19135,19136,19142,19152,19157,19162,19167,19172,19176,19184,19188,19192,19196,19202,19206,19219,19223,19235,19239,19248,19261,19265,19269,19275,19279,19292,19296,19301,19317,19321,19326,19335,19348,19352,19358,19362,19367,19375,19379,19384,19388,19396,19400,19405,19410,19415,19420,19425,19429,19434,19439,19444,19449,19453,19458,19463,19479,19491,19496,19500,19505,19510,19515,19519,19524,19538,19551,19555,19563,19567,19573,19579,19587],{"__ignoreMap":68},[72,19137,19138,19140],{"class":74,"line":75},[72,19139,2378],{"class":78},[72,19141,2381],{"class":366},[72,19143,19144,19146,19148,19150],{"class":74,"line":370},[72,19145,2386],{"class":78},[72,19147,2389],{"class":78},[72,19149,2392],{"class":358},[72,19151,1719],{"class":82},[72,19153,19154],{"class":74,"line":1608},[72,19155,19156],{"class":621},"\u002F\u002F1.构造函数的分类及调用\n",[72,19158,19159],{"class":74,"line":1623},[72,19160,19161],{"class":621},"\u002F\u002F分类\n",[72,19163,19164],{"class":74,"line":1629},[72,19165,19166],{"class":621},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[72,19168,19169],{"class":74,"line":1643},[72,19170,19171],{"class":621},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[72,19173,19174],{"class":74,"line":1649},[72,19175,2828],{"emptyLinePlaceholder":490},[72,19177,19178,19180,19182],{"class":74,"line":1740},[72,19179,15120],{"class":78},[72,19181,15995],{"class":358},[72,19183,3102],{"class":82},[72,19185,19186],{"class":74,"line":1746},[72,19187,1975],{"class":82},[72,19189,19190],{"class":74,"line":1758},[72,19191,15142],{"class":78},[72,19193,19194],{"class":74,"line":2041},[72,19195,18940],{"class":621},[72,19197,19198,19200],{"class":74,"line":2046},[72,19199,18945],{"class":358},[72,19201,2404],{"class":82},[72,19203,19204],{"class":74,"line":2052},[72,19205,2458],{"class":82},[72,19207,19208,19210,19212,19215,19217],{"class":74,"line":2057},[72,19209,3879],{"class":82},[72,19211,1597],{"class":78},[72,19213,19214],{"class":366},"\"Person构造函数无参构造\"",[72,19216,1597],{"class":78},[72,19218,1620],{"class":82},[72,19220,19221],{"class":74,"line":2071},[72,19222,2615],{"class":82},[72,19224,19225,19227,19229,19231,19233],{"class":74,"line":2076},[72,19226,18945],{"class":358},[72,19228,564],{"class":82},[72,19230,567],{"class":78},[72,19232,1827],{"class":5642},[72,19234,570],{"class":82},[72,19236,19237],{"class":74,"line":2082},[72,19238,2458],{"class":82},[72,19240,19241,19244,19246],{"class":74,"line":2103},[72,19242,19243],{"class":82},"        age",[72,19245,609],{"class":78},[72,19247,6623],{"class":82},[72,19249,19250,19252,19254,19257,19259],{"class":74,"line":2108},[72,19251,3879],{"class":82},[72,19253,1597],{"class":78},[72,19255,19256],{"class":366},"\"Person构造函数有参构造\"",[72,19258,1597],{"class":78},[72,19260,1620],{"class":82},[72,19262,19263],{"class":74,"line":2122},[72,19264,2615],{"class":82},[72,19266,19267],{"class":74,"line":2127},[72,19268,18973],{"class":621},[72,19270,19271,19273],{"class":74,"line":2156},[72,19272,18978],{"class":358},[72,19274,2404],{"class":82},[72,19276,19277],{"class":74,"line":2161},[72,19278,2458],{"class":82},[72,19280,19281,19283,19285,19288,19290],{"class":74,"line":2178},[72,19282,3879],{"class":82},[72,19284,1597],{"class":78},[72,19286,19287],{"class":366},"\"Person析构函数被调用\"",[72,19289,1597],{"class":78},[72,19291,1620],{"class":82},[72,19293,19294],{"class":74,"line":2183},[72,19295,2615],{"class":82},[72,19297,19298],{"class":74,"line":2188},[72,19299,19300],{"class":621},"    \u002F\u002F拷贝构造函数\n",[72,19302,19303,19305,19307,19309,19311,19313,19315],{"class":74,"line":2193},[72,19304,18945],{"class":358},[72,19306,564],{"class":82},[72,19308,7218],{"class":78},[72,19310,15995],{"class":358},[72,19312,11010],{"class":78},[72,19314,15],{"class":5642},[72,19316,570],{"class":82},[72,19318,19319],{"class":74,"line":2207},[72,19320,2458],{"class":82},[72,19322,19323],{"class":74,"line":2212},[72,19324,19325],{"class":621},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[72,19327,19328,19330,19332],{"class":74,"line":3005},[72,19329,19243],{"class":82},[72,19331,609],{"class":78},[72,19333,19334],{"class":82},"p.age;\n",[72,19336,19337,19339,19341,19344,19346],{"class":74,"line":3019},[72,19338,3879],{"class":82},[72,19340,1597],{"class":78},[72,19342,19343],{"class":366},"\"Person拷贝构造函数被调用\"",[72,19345,1597],{"class":78},[72,19347,1620],{"class":82},[72,19349,19350],{"class":74,"line":3027},[72,19351,2615],{"class":82},[72,19353,19354,19356],{"class":74,"line":3032},[72,19355,2413],{"class":78},[72,19357,8223],{"class":82},[72,19359,19360],{"class":74,"line":3038},[72,19361,4423],{"class":82},[72,19363,19364],{"class":74,"line":3044},[72,19365,19366],{"class":621},"\u002F\u002F调用\n",[72,19368,19369,19371,19373],{"class":74,"line":3049},[72,19370,5790],{"class":78},[72,19372,6014],{"class":358},[72,19374,2404],{"class":82},[72,19376,19377],{"class":74,"line":8374},[72,19378,1975],{"class":82},[72,19380,19381],{"class":74,"line":8398},[72,19382,19383],{"class":621},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[72,19385,19386],{"class":74,"line":8403},[72,19387,1994],{"class":82},[72,19389,19390,19392,19394],{"class":74,"line":8409},[72,19391,5790],{"class":78},[72,19393,6083],{"class":358},[72,19395,2404],{"class":82},[72,19397,19398],{"class":74,"line":8436},[72,19399,1975],{"class":82},[72,19401,19402],{"class":74,"line":8441},[72,19403,19404],{"class":621},"    \u002F\u002F1.括号法\n",[72,19406,19407],{"class":74,"line":8447},[72,19408,19409],{"class":621},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[72,19411,19412],{"class":74,"line":8459},[72,19413,19414],{"class":621},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[72,19416,19417],{"class":74,"line":8471},[72,19418,19419],{"class":621},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[72,19421,19422],{"class":74,"line":8483},[72,19423,19424],{"class":621},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[72,19426,19427],{"class":74,"line":10142},[72,19428,2828],{"emptyLinePlaceholder":490},[72,19430,19431],{"class":74,"line":10167},[72,19432,19433],{"class":621},"    \u002F\u002F注意事项\n",[72,19435,19436],{"class":74,"line":10190},[72,19437,19438],{"class":621},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[72,19440,19441],{"class":74,"line":10214},[72,19442,19443],{"class":621},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[72,19445,19446],{"class":74,"line":10219},[72,19447,19448],{"class":621},"    \u002F\u002F Person p4();\n",[72,19450,19451],{"class":74,"line":10224},[72,19452,2828],{"emptyLinePlaceholder":490},[72,19454,19455],{"class":74,"line":10229},[72,19456,19457],{"class":621},"    \u002F\u002F2.显示法\n",[72,19459,19460],{"class":74,"line":10238},[72,19461,19462],{"class":82},"    Person p1;\n",[72,19464,19465,19468,19470,19473,19475,19477],{"class":74,"line":10243},[72,19466,19467],{"class":82},"    Person p2",[72,19469,609],{"class":78},[72,19471,19472],{"class":358},"Person",[72,19474,564],{"class":82},[72,19476,1000],{"class":362},[72,19478,3147],{"class":82},[72,19480,19481,19484,19486,19488],{"class":74,"line":10249},[72,19482,19483],{"class":82},"    Person p3",[72,19485,609],{"class":78},[72,19487,19472],{"class":358},[72,19489,19490],{"class":82},"(p2);\n",[72,19492,19493],{"class":74,"line":10270},[72,19494,19495],{"class":621},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[72,19497,19498],{"class":74,"line":10276},[72,19499,2828],{"emptyLinePlaceholder":490},[72,19501,19502],{"class":74,"line":10290},[72,19503,19504],{"class":621},"    \u002F\u002F 注意事项2\n",[72,19506,19507],{"class":74,"line":10296},[72,19508,19509],{"class":621},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[72,19511,19512],{"class":74,"line":10323},[72,19513,19514],{"class":621},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[72,19516,19517],{"class":74,"line":10332},[72,19518,2828],{"emptyLinePlaceholder":490},[72,19520,19521],{"class":74,"line":10338},[72,19522,19523],{"class":621},"    \u002F\u002F3.隐士转换法\n",[72,19525,19526,19529,19531,19533,19535],{"class":74,"line":10346},[72,19527,19528],{"class":82},"    Person p4",[72,19530,609],{"class":78},[72,19532,1000],{"class":362},[72,19534,618],{"class":82},[72,19536,19537],{"class":621},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[72,19539,19540,19543,19545,19548],{"class":74,"line":10351},[72,19541,19542],{"class":82},"    Person p5",[72,19544,609],{"class":78},[72,19546,19547],{"class":82},"p4;",[72,19549,19550],{"class":621}," \u002F\u002F 这里会调用拷贝构造函数\n",[72,19552,19553],{"class":74,"line":17030},[72,19554,1994],{"class":82},[72,19556,19557,19559,19561],{"class":74,"line":17036},[72,19558,567],{"class":78},[72,19560,2401],{"class":358},[72,19562,2404],{"class":82},[72,19564,19565],{"class":74,"line":17059},[72,19566,1975],{"class":82},[72,19568,19569,19571],{"class":74,"line":17065},[72,19570,6059],{"class":358},[72,19572,6062],{"class":82},[72,19574,19575,19577],{"class":74,"line":17088},[72,19576,6128],{"class":358},[72,19578,6062],{"class":82},[72,19580,19581,19583,19585],{"class":74,"line":17102},[72,19582,4518],{"class":78},[72,19584,4521],{"class":362},[72,19586,1719],{"class":82},[72,19588,19589],{"class":74,"line":17122},[72,19590,1994],{"class":82},[15,19592,19593,19596],{},[707,19594,19595],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[531,19598,19600],{"id":19599},"_823拷贝构造函数","8.2.3拷贝构造函数",[15,19602,19603],{},"C++中拷贝构造函数调用时机通常有三种情况",[251,19605,19606,19609,19612],{},[25,19607,19608],{},"使用一个已经创建完毕的对象来初始化一个新对象",[25,19610,19611],{},"值传递的方式给函数参数传值",[25,19613,19614],{},"以值方式返回局部对象",[63,19616,19618],{"className":552,"code":19617,"language":554,"meta":68,"style":68},"#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",[34,19619,19620,19626,19636,19640,19645,19649,19654,19659,19664,19670,19674,19678,19684,19688,19701,19705,19710,19722,19726,19734,19747,19751,19755,19771,19775,19784,19797,19801,19807,19811,19823,19827,19833,19837,19841,19849,19853,19866,19874,19892,19896,19901,19906,19921,19925,19938,19942,19950,19954,19958,19966,19970,19975,19984,19988,19992,20017,20027,20031,20039,20043,20054,20079,20083,20087,20091,20099,20103,20108,20113,20120,20125,20130,20135,20140,20144,20149,20153,20158,20162,20167,20172,20176,20180,20185,20190,20198],{"__ignoreMap":68},[72,19621,19622,19624],{"class":74,"line":75},[72,19623,2378],{"class":78},[72,19625,2381],{"class":366},[72,19627,19628,19630,19632,19634],{"class":74,"line":370},[72,19629,2386],{"class":78},[72,19631,2389],{"class":78},[72,19633,2392],{"class":358},[72,19635,1719],{"class":82},[72,19637,19638],{"class":74,"line":1608},[72,19639,2828],{"emptyLinePlaceholder":490},[72,19641,19642],{"class":74,"line":1623},[72,19643,19644],{"class":621},"\u002F\u002F拷贝构造函数调用时机\n",[72,19646,19647],{"class":74,"line":1629},[72,19648,2828],{"emptyLinePlaceholder":490},[72,19650,19651],{"class":74,"line":1643},[72,19652,19653],{"class":621},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[72,19655,19656],{"class":74,"line":1649},[72,19657,19658],{"class":621},"\u002F\u002F2.值传递的方式给函数参数传值\n",[72,19660,19661],{"class":74,"line":1740},[72,19662,19663],{"class":621},"\u002F\u002F3.以值方式返回局部对象\n",[72,19665,19666,19668],{"class":74,"line":1746},[72,19667,15120],{"class":78},[72,19669,15597],{"class":358},[72,19671,19672],{"class":74,"line":1758},[72,19673,1975],{"class":82},[72,19675,19676],{"class":74,"line":2041},[72,19677,15142],{"class":78},[72,19679,19680,19682],{"class":74,"line":2046},[72,19681,18945],{"class":358},[72,19683,2404],{"class":82},[72,19685,19686],{"class":74,"line":2052},[72,19687,2458],{"class":82},[72,19689,19690,19692,19694,19697,19699],{"class":74,"line":2057},[72,19691,10095],{"class":82},[72,19693,1597],{"class":78},[72,19695,19696],{"class":366}," \"Person的默认构造函数调用\"",[72,19698,1873],{"class":78},[72,19700,9266],{"class":82},[72,19702,19703],{"class":74,"line":2071},[72,19704,2615],{"class":82},[72,19706,19707],{"class":74,"line":2076},[72,19708,19709],{"class":621},"    \u002F\u002F有参构造\n",[72,19711,19712,19714,19716,19718,19720],{"class":74,"line":2082},[72,19713,18945],{"class":358},[72,19715,564],{"class":82},[72,19717,567],{"class":78},[72,19719,16115],{"class":5642},[72,19721,570],{"class":82},[72,19723,19724],{"class":74,"line":2103},[72,19725,2458],{"class":82},[72,19727,19728,19730,19732],{"class":74,"line":2108},[72,19729,16169],{"class":82},[72,19731,609],{"class":78},[72,19733,8223],{"class":82},[72,19735,19736,19738,19740,19743,19745],{"class":74,"line":2122},[72,19737,10095],{"class":82},[72,19739,1597],{"class":78},[72,19741,19742],{"class":366}," \"Person的有参构造函数调用\"",[72,19744,1873],{"class":78},[72,19746,9266],{"class":82},[72,19748,19749],{"class":74,"line":2127},[72,19750,2615],{"class":82},[72,19752,19753],{"class":74,"line":2156},[72,19754,19300],{"class":621},[72,19756,19757,19759,19761,19763,19765,19767,19769],{"class":74,"line":2161},[72,19758,18945],{"class":358},[72,19760,564],{"class":82},[72,19762,7218],{"class":78},[72,19764,15995],{"class":358},[72,19766,11010],{"class":78},[72,19768,15],{"class":5642},[72,19770,570],{"class":82},[72,19772,19773],{"class":74,"line":2178},[72,19774,2458],{"class":82},[72,19776,19777,19779,19781],{"class":74,"line":2183},[72,19778,16169],{"class":82},[72,19780,609],{"class":78},[72,19782,19783],{"class":82}," p.m_Age;\n",[72,19785,19786,19788,19790,19793,19795],{"class":74,"line":2188},[72,19787,10095],{"class":82},[72,19789,1597],{"class":78},[72,19791,19792],{"class":366}," \"Person的拷贝构造函数调用\"",[72,19794,1873],{"class":78},[72,19796,9266],{"class":82},[72,19798,19799],{"class":74,"line":2193},[72,19800,2615],{"class":82},[72,19802,19803,19805],{"class":74,"line":2207},[72,19804,18978],{"class":358},[72,19806,2404],{"class":82},[72,19808,19809],{"class":74,"line":2212},[72,19810,2458],{"class":82},[72,19812,19813,19815,19817,19819,19821],{"class":74,"line":3005},[72,19814,10095],{"class":82},[72,19816,1597],{"class":78},[72,19818,18993],{"class":366},[72,19820,1873],{"class":78},[72,19822,9266],{"class":82},[72,19824,19825],{"class":74,"line":3019},[72,19826,2615],{"class":82},[72,19828,19829,19831],{"class":74,"line":3027},[72,19830,2413],{"class":78},[72,19832,16092],{"class":82},[72,19834,19835],{"class":74,"line":3032},[72,19836,4423],{"class":82},[72,19838,19839],{"class":74,"line":3038},[72,19840,19653],{"class":621},[72,19842,19843,19845,19847],{"class":74,"line":3044},[72,19844,5790],{"class":78},[72,19846,6014],{"class":358},[72,19848,2404],{"class":82},[72,19850,19851],{"class":74,"line":3049},[72,19852,1975],{"class":82},[72,19854,19855,19858,19860,19862,19864],{"class":74,"line":8374},[72,19856,19857],{"class":82},"    Person ",[72,19859,7556],{"class":358},[72,19861,564],{"class":82},[72,19863,1254],{"class":362},[72,19865,3147],{"class":82},[72,19867,19868,19870,19872],{"class":74,"line":8398},[72,19869,19857],{"class":82},[72,19871,7459],{"class":358},[72,19873,17941],{"class":82},[72,19875,19876,19878,19880,19883,19885,19888,19890],{"class":74,"line":8403},[72,19877,1980],{"class":82},[72,19879,1597],{"class":78},[72,19881,19882],{"class":366},"\"P2的年龄为：\"",[72,19884,1597],{"class":78},[72,19886,19887],{"class":82},"p2.m_Age",[72,19889,1597],{"class":78},[72,19891,1620],{"class":82},[72,19893,19894],{"class":74,"line":8409},[72,19895,1994],{"class":82},[72,19897,19898],{"class":74,"line":8436},[72,19899,19900],{"class":621},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[72,19902,19903],{"class":74,"line":8441},[72,19904,19905],{"class":621},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[72,19907,19908,19910,19913,19915,19917,19919],{"class":74,"line":8447},[72,19909,5790],{"class":78},[72,19911,19912],{"class":358}," doWork",[72,19914,564],{"class":82},[72,19916,19472],{"class":358},[72,19918,7251],{"class":5642},[72,19920,570],{"class":82},[72,19922,19923],{"class":74,"line":8459},[72,19924,1975],{"class":82},[72,19926,19927,19929,19931,19934,19936],{"class":74,"line":8471},[72,19928,6955],{"class":82},[72,19930,1597],{"class":78},[72,19932,19933],{"class":366}," \"doWork函数调用\"",[72,19935,1873],{"class":78},[72,19937,9266],{"class":82},[72,19939,19940],{"class":74,"line":8483},[72,19941,1994],{"class":82},[72,19943,19944,19946,19948],{"class":74,"line":10142},[72,19945,5790],{"class":78},[72,19947,6083],{"class":358},[72,19949,2404],{"class":82},[72,19951,19952],{"class":74,"line":10167},[72,19953,1975],{"class":82},[72,19955,19956],{"class":74,"line":10190},[72,19957,15739],{"class":82},[72,19959,19960,19963],{"class":74,"line":10214},[72,19961,19962],{"class":358},"    doWork",[72,19964,19965],{"class":82},"(p);\n",[72,19967,19968],{"class":74,"line":10219},[72,19969,1994],{"class":82},[72,19971,19972],{"class":74,"line":10224},[72,19973,19974],{"class":621},"\u002F\u002F 3.以值方式返回局部对象\n",[72,19976,19977,19979,19982],{"class":74,"line":10229},[72,19978,19472],{"class":358},[72,19980,19981],{"class":358}," doWork2",[72,19983,2404],{"class":82},[72,19985,19986],{"class":74,"line":10238},[72,19987,1975],{"class":82},[72,19989,19990],{"class":74,"line":10243},[72,19991,19462],{"class":82},[72,19993,19994,19996,19998,20000,20002,20004,20006,20008,20010,20012,20014],{"class":74,"line":10249},[72,19995,1980],{"class":82},[72,19997,1597],{"class":78},[72,19999,564],{"class":82},[72,20001,567],{"class":78},[72,20003,6944],{"class":78},[72,20005,983],{"class":82},[72,20007,907],{"class":78},[72,20009,7556],{"class":82},[72,20011,1597],{"class":78},[72,20013,1667],{"class":82},[72,20015,20016],{"class":621},"\u002F\u002F打印p1的地址\n",[72,20018,20019,20021,20024],{"class":74,"line":10270},[72,20020,4518],{"class":78},[72,20022,20023],{"class":82}," p1;",[72,20025,20026],{"class":621},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[72,20028,20029],{"class":74,"line":10276},[72,20030,1994],{"class":82},[72,20032,20033,20035,20037],{"class":74,"line":10290},[72,20034,5790],{"class":78},[72,20036,6155],{"class":358},[72,20038,2404],{"class":82},[72,20040,20041],{"class":74,"line":10296},[72,20042,1975],{"class":82},[72,20044,20045,20048,20050,20052],{"class":74,"line":10323},[72,20046,20047],{"class":82},"    Person p ",[72,20049,609],{"class":78},[72,20051,19981],{"class":358},[72,20053,6062],{"class":82},[72,20055,20056,20058,20060,20062,20064,20066,20068,20070,20072,20074,20076],{"class":74,"line":10332},[72,20057,1980],{"class":82},[72,20059,1597],{"class":78},[72,20061,564],{"class":82},[72,20063,567],{"class":78},[72,20065,6944],{"class":78},[72,20067,983],{"class":82},[72,20069,907],{"class":78},[72,20071,15],{"class":82},[72,20073,1597],{"class":78},[72,20075,1667],{"class":82},[72,20077,20078],{"class":621},"\u002F\u002F打印p的地址\n",[72,20080,20081],{"class":74,"line":10338},[72,20082,1994],{"class":82},[72,20084,20085],{"class":74,"line":10346},[72,20086,2828],{"emptyLinePlaceholder":490},[72,20088,20089],{"class":74,"line":10351},[72,20090,2828],{"emptyLinePlaceholder":490},[72,20092,20093,20095,20097],{"class":74,"line":17030},[72,20094,567],{"class":78},[72,20096,2401],{"class":358},[72,20098,2404],{"class":82},[72,20100,20101],{"class":74,"line":17036},[72,20102,1975],{"class":82},[72,20104,20105],{"class":74,"line":17059},[72,20106,20107],{"class":621},"    \u002F\u002F test01();\n",[72,20109,20110],{"class":74,"line":17065},[72,20111,20112],{"class":621},"    \u002F\u002F test02();\n",[72,20114,20115,20118],{"class":74,"line":17088},[72,20116,20117],{"class":358},"    test03",[72,20119,6062],{"class":82},[72,20121,20122],{"class":74,"line":17102},[72,20123,20124],{"class":621},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[72,20126,20127],{"class":74,"line":17122},[72,20128,20129],{"class":621},"\u002F\u002F 输出结果如下：\n",[72,20131,20132],{"class":74,"line":17128},[72,20133,20134],{"class":621},"\u002F\u002F Person的默认构造函数调用\n",[72,20136,20137],{"class":74,"line":17139},[72,20138,20139],{"class":621},"\u002F\u002F 0x7fffffffceec\n",[72,20141,20142],{"class":74,"line":17162},[72,20143,20139],{"class":621},[72,20145,20146],{"class":74,"line":17184},[72,20147,20148],{"class":621},"\u002F\u002F Person的析构函数调用\n",[72,20150,20151],{"class":74,"line":17189},[72,20152,2828],{"emptyLinePlaceholder":490},[72,20154,20155],{"class":74,"line":17195},[72,20156,20157],{"class":621},"\u002F\u002F 之前的输出结果如下：\n",[72,20159,20160],{"class":74,"line":17209},[72,20161,20134],{"class":621},[72,20163,20164],{"class":74,"line":17222},[72,20165,20166],{"class":621},"\u002F\u002F 地址\n",[72,20168,20169],{"class":74,"line":17227},[72,20170,20171],{"class":621},"\u002F\u002F Person的拷贝构造函数调用\n",[72,20173,20174],{"class":74,"line":17241},[72,20175,20148],{"class":621},[72,20177,20178],{"class":74,"line":17246},[72,20179,20166],{"class":621},[72,20181,20182],{"class":74,"line":17252},[72,20183,20184],{"class":621},"\u002F\u002F (这两次输出的地址也是不同的) \n",[72,20186,20187],{"class":74,"line":17257},[72,20188,20189],{"class":621},"\u002F\u002F Person的析构函数调用     \n",[72,20191,20192,20194,20196],{"class":74,"line":17271},[72,20193,4518],{"class":78},[72,20195,4521],{"class":362},[72,20197,1719],{"class":82},[72,20199,20200],{"class":74,"line":17276},[72,20201,1994],{"class":82},[15,20203,20204],{},"简化版理解",[63,20206,20208],{"className":552,"code":20207,"language":554,"meta":68,"style":68},"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",[34,20209,20210,20218,20222,20228,20241,20252,20256,20268,20281,20289,20293,20309,20322,20331,20335,20340,20346,20359,20363,20367,20374,20378,20382,20387,20395,20399,20415,20428,20441,20445,20450,20458,20462,20466,20471,20476,20492,20500,20507,20513,20517,20521,20526,20534,20538,20542,20565,20572,20576,20580,20588,20592,20602,20624,20628,20632,20636,20644,20648,20653,20658,20664,20668,20678,20682,20690],{"__ignoreMap":68},[72,20211,20212,20214,20216],{"class":74,"line":75},[72,20213,15120],{"class":78},[72,20215,15995],{"class":358},[72,20217,15998],{"class":82},[72,20219,20220],{"class":74,"line":370},[72,20221,15142],{"class":78},[72,20223,20224,20226],{"class":74,"line":1608},[72,20225,18945],{"class":358},[72,20227,11279],{"class":82},[72,20229,20230,20232,20234,20237,20239],{"class":74,"line":1623},[72,20231,10095],{"class":82},[72,20233,1597],{"class":78},[72,20235,20236],{"class":366}," \"无参构造函数!\"",[72,20238,1873],{"class":78},[72,20240,9266],{"class":82},[72,20242,20243,20246,20248,20250],{"class":74,"line":1629},[72,20244,20245],{"class":82},"        mAge ",[72,20247,609],{"class":78},[72,20249,4521],{"class":362},[72,20251,1719],{"class":82},[72,20253,20254],{"class":74,"line":1643},[72,20255,2615],{"class":82},[72,20257,20258,20260,20262,20264,20266],{"class":74,"line":1649},[72,20259,18945],{"class":358},[72,20261,564],{"class":82},[72,20263,567],{"class":78},[72,20265,16115],{"class":5642},[72,20267,12868],{"class":82},[72,20269,20270,20272,20274,20277,20279],{"class":74,"line":1740},[72,20271,10095],{"class":82},[72,20273,1597],{"class":78},[72,20275,20276],{"class":366}," \"有参构造函数!\"",[72,20278,1873],{"class":78},[72,20280,9266],{"class":82},[72,20282,20283,20285,20287],{"class":74,"line":1746},[72,20284,20245],{"class":82},[72,20286,609],{"class":78},[72,20288,8223],{"class":82},[72,20290,20291],{"class":74,"line":1758},[72,20292,2615],{"class":82},[72,20294,20295,20297,20299,20301,20303,20305,20307],{"class":74,"line":2041},[72,20296,18945],{"class":358},[72,20298,564],{"class":82},[72,20300,7218],{"class":78},[72,20302,15995],{"class":358},[72,20304,907],{"class":78},[72,20306,7251],{"class":5642},[72,20308,12868],{"class":82},[72,20310,20311,20313,20315,20318,20320],{"class":74,"line":2046},[72,20312,10095],{"class":82},[72,20314,1597],{"class":78},[72,20316,20317],{"class":366}," \"拷贝构造函数!\"",[72,20319,1873],{"class":78},[72,20321,9266],{"class":82},[72,20323,20324,20326,20328],{"class":74,"line":2052},[72,20325,20245],{"class":82},[72,20327,609],{"class":78},[72,20329,20330],{"class":82}," p.mAge;\n",[72,20332,20333],{"class":74,"line":2057},[72,20334,2615],{"class":82},[72,20336,20337],{"class":74,"line":2071},[72,20338,20339],{"class":621},"    \u002F\u002F析构函数在释放内存之前调用\n",[72,20341,20342,20344],{"class":74,"line":2076},[72,20343,18978],{"class":358},[72,20345,11279],{"class":82},[72,20347,20348,20350,20352,20355,20357],{"class":74,"line":2082},[72,20349,10095],{"class":82},[72,20351,1597],{"class":78},[72,20353,20354],{"class":366}," \"析构函数!\"",[72,20356,1873],{"class":78},[72,20358,9266],{"class":82},[72,20360,20361],{"class":74,"line":2103},[72,20362,2615],{"class":82},[72,20364,20365],{"class":74,"line":2108},[72,20366,15142],{"class":78},[72,20368,20369,20371],{"class":74,"line":2122},[72,20370,2413],{"class":78},[72,20372,20373],{"class":82}," mAge;\n",[72,20375,20376],{"class":74,"line":2127},[72,20377,4423],{"class":82},[72,20379,20380],{"class":74,"line":2156},[72,20381,2828],{"emptyLinePlaceholder":490},[72,20383,20384],{"class":74,"line":2161},[72,20385,20386],{"class":621},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[72,20388,20389,20391,20393],{"class":74,"line":2178},[72,20390,5790],{"class":78},[72,20392,6014],{"class":358},[72,20394,11279],{"class":82},[72,20396,20397],{"class":74,"line":2183},[72,20398,2828],{"emptyLinePlaceholder":490},[72,20400,20401,20403,20406,20408,20410,20412],{"class":74,"line":2188},[72,20402,19857],{"class":82},[72,20404,20405],{"class":358},"man",[72,20407,564],{"class":82},[72,20409,865],{"class":362},[72,20411,6392],{"class":82},[72,20413,20414],{"class":621}," \u002F\u002Fp对象已经创建完毕\n",[72,20416,20417,20419,20422,20425],{"class":74,"line":2193},[72,20418,19857],{"class":82},[72,20420,20421],{"class":358},"newman",[72,20423,20424],{"class":82},"(man);",[72,20426,20427],{"class":621}," \u002F\u002F调用拷贝构造函数\n",[72,20429,20430,20433,20435,20438],{"class":74,"line":2207},[72,20431,20432],{"class":82},"    Person newman2 ",[72,20434,609],{"class":78},[72,20436,20437],{"class":82}," man;",[72,20439,20440],{"class":621}," \u002F\u002F拷贝构造\n",[72,20442,20443],{"class":74,"line":2212},[72,20444,2828],{"emptyLinePlaceholder":490},[72,20446,20447],{"class":74,"line":3005},[72,20448,20449],{"class":621},"    \u002F\u002FPerson newman3;\n",[72,20451,20452,20455],{"class":74,"line":3019},[72,20453,20454],{"class":621},"    \u002F\u002Fnewman3 = man;",[72,20456,20457],{"class":621}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[72,20459,20460],{"class":74,"line":3027},[72,20461,1994],{"class":82},[72,20463,20464],{"class":74,"line":3032},[72,20465,2828],{"emptyLinePlaceholder":490},[72,20467,20468],{"class":74,"line":3038},[72,20469,20470],{"class":621},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[72,20472,20473],{"class":74,"line":3044},[72,20474,20475],{"class":621},"\u002F\u002F相当于Person p1 = p;\n",[72,20477,20478,20480,20482,20484,20486,20489],{"class":74,"line":3049},[72,20479,5790],{"class":78},[72,20481,19912],{"class":358},[72,20483,564],{"class":82},[72,20485,19472],{"class":358},[72,20487,20488],{"class":5642}," p1",[72,20490,20491],{"class":82},") {}\n",[72,20493,20494,20496,20498],{"class":74,"line":8374},[72,20495,5790],{"class":78},[72,20497,6083],{"class":358},[72,20499,11279],{"class":82},[72,20501,20502,20504],{"class":74,"line":8398},[72,20503,19030],{"class":82},[72,20505,20506],{"class":621}," \u002F\u002F无参构造函数\n",[72,20508,20509,20511],{"class":74,"line":8403},[72,20510,19962],{"class":358},[72,20512,19965],{"class":82},[72,20514,20515],{"class":74,"line":8409},[72,20516,1994],{"class":82},[72,20518,20519],{"class":74,"line":8436},[72,20520,2828],{"emptyLinePlaceholder":490},[72,20522,20523],{"class":74,"line":8441},[72,20524,20525],{"class":621},"\u002F\u002F3. 以值方式返回局部对象\n",[72,20527,20528,20530,20532],{"class":74,"line":8447},[72,20529,19472],{"class":358},[72,20531,19981],{"class":358},[72,20533,2404],{"class":82},[72,20535,20536],{"class":74,"line":8459},[72,20537,1975],{"class":82},[72,20539,20540],{"class":74,"line":8471},[72,20541,19462],{"class":82},[72,20543,20544,20546,20548,20550,20552,20554,20556,20558,20561,20563],{"class":74,"line":8483},[72,20545,6955],{"class":82},[72,20547,1597],{"class":78},[72,20549,2087],{"class":82},[72,20551,567],{"class":78},[72,20553,6944],{"class":78},[72,20555,983],{"class":82},[72,20557,907],{"class":78},[72,20559,20560],{"class":82},"p1 ",[72,20562,1597],{"class":78},[72,20564,9266],{"class":82},[72,20566,20567,20569],{"class":74,"line":10142},[72,20568,4518],{"class":78},[72,20570,20571],{"class":82}," p1;\n",[72,20573,20574],{"class":74,"line":10167},[72,20575,1994],{"class":82},[72,20577,20578],{"class":74,"line":10190},[72,20579,2828],{"emptyLinePlaceholder":490},[72,20581,20582,20584,20586],{"class":74,"line":10214},[72,20583,5790],{"class":78},[72,20585,6155],{"class":358},[72,20587,2404],{"class":82},[72,20589,20590],{"class":74,"line":10219},[72,20591,1975],{"class":82},[72,20593,20594,20596,20598,20600],{"class":74,"line":10224},[72,20595,20047],{"class":82},[72,20597,609],{"class":78},[72,20599,19981],{"class":358},[72,20601,6062],{"class":82},[72,20603,20604,20606,20608,20610,20612,20614,20616,20618,20620,20622],{"class":74,"line":10229},[72,20605,6955],{"class":82},[72,20607,1597],{"class":78},[72,20609,2087],{"class":82},[72,20611,567],{"class":78},[72,20613,6944],{"class":78},[72,20615,983],{"class":82},[72,20617,907],{"class":78},[72,20619,11874],{"class":82},[72,20621,1597],{"class":78},[72,20623,9266],{"class":82},[72,20625,20626],{"class":74,"line":10238},[72,20627,1994],{"class":82},[72,20629,20630],{"class":74,"line":10243},[72,20631,2828],{"emptyLinePlaceholder":490},[72,20633,20634],{"class":74,"line":10249},[72,20635,2828],{"emptyLinePlaceholder":490},[72,20637,20638,20640,20642],{"class":74,"line":10270},[72,20639,567],{"class":78},[72,20641,2401],{"class":358},[72,20643,11279],{"class":82},[72,20645,20646],{"class":74,"line":10276},[72,20647,2828],{"emptyLinePlaceholder":490},[72,20649,20650],{"class":74,"line":10290},[72,20651,20652],{"class":621},"    \u002F\u002Ftest01();\n",[72,20654,20655],{"class":74,"line":10296},[72,20656,20657],{"class":621},"    \u002F\u002Ftest02();\n",[72,20659,20660,20662],{"class":74,"line":10323},[72,20661,20117],{"class":358},[72,20663,6062],{"class":82},[72,20665,20666],{"class":74,"line":10332},[72,20667,2828],{"emptyLinePlaceholder":490},[72,20669,20670,20672,20674,20676],{"class":74,"line":10338},[72,20671,2731],{"class":358},[72,20673,564],{"class":82},[72,20675,2736],{"class":366},[72,20677,3147],{"class":82},[72,20679,20680],{"class":74,"line":10346},[72,20681,2828],{"emptyLinePlaceholder":490},[72,20683,20684,20686,20688],{"class":74,"line":10351},[72,20685,4518],{"class":78},[72,20687,4521],{"class":362},[72,20689,1719],{"class":82},[72,20691,20692],{"class":74,"line":17030},[72,20693,1994],{"class":82},[531,20695,20697],{"id":20696},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[15,20699,20700],{},"默认情况下，c++编译器至少给一个类添加3个函数",[15,20702,20703],{},"1．默认构造函数(无参，函数体为空)",[15,20705,20706],{},"2．默认析构函数(无参，函数体为空)",[15,20708,20709],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[15,20711,20712],{},"构造函数调用规则如下：",[251,20714,20715,20718],{},[25,20716,20717],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[25,20719,20720],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[63,20722,20724],{"className":552,"code":20723,"language":554,"meta":68,"style":68},"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",[34,20725,20726,20734,20738,20743,20749,20761,20765,20770,20782,20791,20803,20807,20811,20827,20836,20848,20852,20856,20862,20874,20878,20882,20888,20892,20896,20904,20908,20920,20925,20933,20937,20955,20959,20963,20971,20975,20980,20988,21003,21016,21020,21025,21032,21048,21061,21065,21069,21077,21081,21087,21091,21101,21105,21113],{"__ignoreMap":68},[72,20727,20728,20730,20732],{"class":74,"line":75},[72,20729,15120],{"class":78},[72,20731,15995],{"class":358},[72,20733,15998],{"class":82},[72,20735,20736],{"class":74,"line":370},[72,20737,15142],{"class":78},[72,20739,20740],{"class":74,"line":1608},[72,20741,20742],{"class":621},"    \u002F\u002F无参（默认）构造函数\n",[72,20744,20745,20747],{"class":74,"line":1623},[72,20746,18945],{"class":358},[72,20748,11279],{"class":82},[72,20750,20751,20753,20755,20757,20759],{"class":74,"line":1629},[72,20752,10095],{"class":82},[72,20754,1597],{"class":78},[72,20756,20236],{"class":366},[72,20758,1873],{"class":78},[72,20760,9266],{"class":82},[72,20762,20763],{"class":74,"line":1643},[72,20764,2615],{"class":82},[72,20766,20767],{"class":74,"line":1649},[72,20768,20769],{"class":621},"    \u002F\u002F有参构造函数\n",[72,20771,20772,20774,20776,20778,20780],{"class":74,"line":1740},[72,20773,18945],{"class":358},[72,20775,564],{"class":82},[72,20777,567],{"class":78},[72,20779,1827],{"class":5642},[72,20781,12868],{"class":82},[72,20783,20784,20787,20789],{"class":74,"line":1746},[72,20785,20786],{"class":82},"        age ",[72,20788,609],{"class":78},[72,20790,1861],{"class":82},[72,20792,20793,20795,20797,20799,20801],{"class":74,"line":1758},[72,20794,10095],{"class":82},[72,20796,1597],{"class":78},[72,20798,20276],{"class":366},[72,20800,1873],{"class":78},[72,20802,9266],{"class":82},[72,20804,20805],{"class":74,"line":2041},[72,20806,2615],{"class":82},[72,20808,20809],{"class":74,"line":2046},[72,20810,19300],{"class":621},[72,20812,20813,20815,20817,20819,20821,20823,20825],{"class":74,"line":2052},[72,20814,18945],{"class":358},[72,20816,564],{"class":82},[72,20818,7218],{"class":78},[72,20820,15995],{"class":358},[72,20822,907],{"class":78},[72,20824,7251],{"class":5642},[72,20826,12868],{"class":82},[72,20828,20829,20831,20833],{"class":74,"line":2057},[72,20830,20786],{"class":82},[72,20832,609],{"class":78},[72,20834,20835],{"class":82}," p.age;\n",[72,20837,20838,20840,20842,20844,20846],{"class":74,"line":2071},[72,20839,10095],{"class":82},[72,20841,1597],{"class":78},[72,20843,20317],{"class":366},[72,20845,1873],{"class":78},[72,20847,9266],{"class":82},[72,20849,20850],{"class":74,"line":2076},[72,20851,2615],{"class":82},[72,20853,20854],{"class":74,"line":2082},[72,20855,18973],{"class":621},[72,20857,20858,20860],{"class":74,"line":2103},[72,20859,18978],{"class":358},[72,20861,11279],{"class":82},[72,20863,20864,20866,20868,20870,20872],{"class":74,"line":2108},[72,20865,10095],{"class":82},[72,20867,1597],{"class":78},[72,20869,20354],{"class":366},[72,20871,1873],{"class":78},[72,20873,9266],{"class":82},[72,20875,20876],{"class":74,"line":2122},[72,20877,2615],{"class":82},[72,20879,20880],{"class":74,"line":2127},[72,20881,15142],{"class":78},[72,20883,20884,20886],{"class":74,"line":2156},[72,20885,2413],{"class":78},[72,20887,8223],{"class":82},[72,20889,20890],{"class":74,"line":2161},[72,20891,4423],{"class":82},[72,20893,20894],{"class":74,"line":2178},[72,20895,2828],{"emptyLinePlaceholder":490},[72,20897,20898,20900,20902],{"class":74,"line":2183},[72,20899,5790],{"class":78},[72,20901,6014],{"class":358},[72,20903,2404],{"class":82},[72,20905,20906],{"class":74,"line":2188},[72,20907,1975],{"class":82},[72,20909,20910,20912,20914,20916,20918],{"class":74,"line":2193},[72,20911,19857],{"class":82},[72,20913,7556],{"class":358},[72,20915,564],{"class":82},[72,20917,1204],{"class":362},[72,20919,3147],{"class":82},[72,20921,20922],{"class":74,"line":2207},[72,20923,20924],{"class":621},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[72,20926,20927,20929,20931],{"class":74,"line":2212},[72,20928,19857],{"class":82},[72,20930,7459],{"class":358},[72,20932,17941],{"class":82},[72,20934,20935],{"class":74,"line":3005},[72,20936,2828],{"emptyLinePlaceholder":490},[72,20938,20939,20941,20943,20946,20948,20951,20953],{"class":74,"line":3019},[72,20940,6955],{"class":82},[72,20942,1597],{"class":78},[72,20944,20945],{"class":366}," \"p2的年龄为： \"",[72,20947,1873],{"class":78},[72,20949,20950],{"class":82}," p2.age ",[72,20952,1597],{"class":78},[72,20954,9266],{"class":82},[72,20956,20957],{"class":74,"line":3027},[72,20958,1994],{"class":82},[72,20960,20961],{"class":74,"line":3032},[72,20962,2828],{"emptyLinePlaceholder":490},[72,20964,20965,20967,20969],{"class":74,"line":3038},[72,20966,5790],{"class":78},[72,20968,6083],{"class":358},[72,20970,2404],{"class":82},[72,20972,20973],{"class":74,"line":3044},[72,20974,1975],{"class":82},[72,20976,20977],{"class":74,"line":3049},[72,20978,20979],{"class":621},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[72,20981,20982,20985],{"class":74,"line":8374},[72,20983,20984],{"class":82},"    Person p1;",[72,20986,20987],{"class":621}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[72,20989,20990,20992,20994,20996,20998,21000],{"class":74,"line":8398},[72,20991,19857],{"class":82},[72,20993,7459],{"class":358},[72,20995,564],{"class":82},[72,20997,1000],{"class":362},[72,20999,6392],{"class":82},[72,21001,21002],{"class":621}," \u002F\u002F用户提供的有参\n",[72,21004,21005,21007,21010,21013],{"class":74,"line":8403},[72,21006,19857],{"class":82},[72,21008,21009],{"class":358},"p3",[72,21011,21012],{"class":82},"(p2);",[72,21014,21015],{"class":621}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[72,21017,21018],{"class":74,"line":8409},[72,21019,2828],{"emptyLinePlaceholder":490},[72,21021,21022],{"class":74,"line":8436},[72,21023,21024],{"class":621},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[72,21026,21027,21030],{"class":74,"line":8441},[72,21028,21029],{"class":82},"    Person p4;",[72,21031,20987],{"class":621},[72,21033,21034,21036,21039,21041,21043,21045],{"class":74,"line":8447},[72,21035,19857],{"class":82},[72,21037,21038],{"class":358},"p5",[72,21040,564],{"class":82},[72,21042,1000],{"class":362},[72,21044,6392],{"class":82},[72,21046,21047],{"class":621}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[72,21049,21050,21052,21055,21058],{"class":74,"line":8459},[72,21051,19857],{"class":82},[72,21053,21054],{"class":358},"p6",[72,21056,21057],{"class":82},"(p5);",[72,21059,21060],{"class":621}," \u002F\u002F用户自己提供拷贝构造\n",[72,21062,21063],{"class":74,"line":8471},[72,21064,1994],{"class":82},[72,21066,21067],{"class":74,"line":8483},[72,21068,2828],{"emptyLinePlaceholder":490},[72,21070,21071,21073,21075],{"class":74,"line":10142},[72,21072,567],{"class":78},[72,21074,2401],{"class":358},[72,21076,11279],{"class":82},[72,21078,21079],{"class":74,"line":10167},[72,21080,2828],{"emptyLinePlaceholder":490},[72,21082,21083,21085],{"class":74,"line":10190},[72,21084,6059],{"class":358},[72,21086,6062],{"class":82},[72,21088,21089],{"class":74,"line":10214},[72,21090,2828],{"emptyLinePlaceholder":490},[72,21092,21093,21095,21097,21099],{"class":74,"line":10219},[72,21094,2731],{"class":358},[72,21096,564],{"class":82},[72,21098,2736],{"class":366},[72,21100,3147],{"class":82},[72,21102,21103],{"class":74,"line":10224},[72,21104,2828],{"emptyLinePlaceholder":490},[72,21106,21107,21109,21111],{"class":74,"line":10229},[72,21108,4518],{"class":78},[72,21110,4521],{"class":362},[72,21112,1719],{"class":82},[72,21114,21115],{"class":74,"line":10238},[72,21116,1994],{"class":82},[531,21118,21120],{"id":21119},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[15,21122,21123],{},"浅拷贝：简单的赋值拷贝操作",[15,21125,21126],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[63,21128,21130],{"className":552,"code":21129,"language":554,"meta":68,"style":68},"#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",[34,21131,21132,21138,21148,21154,21158,21162,21167,21173,21177,21190,21194,21198,21205,21209,21219,21234,21247,21251,21256,21261,21277,21281,21294,21299,21304,21309,21318,21323,21338,21342,21346,21350,21356,21360,21365,21380,21384,21395,21409,21413,21422,21426,21432,21444,21448,21456,21460,21477,21508,21516,21544,21548,21552,21560,21564,21570],{"__ignoreMap":68},[72,21133,21134,21136],{"class":74,"line":75},[72,21135,2378],{"class":78},[72,21137,2381],{"class":366},[72,21139,21140,21142,21144,21146],{"class":74,"line":370},[72,21141,2386],{"class":78},[72,21143,2389],{"class":78},[72,21145,2392],{"class":358},[72,21147,1719],{"class":82},[72,21149,21150,21152],{"class":74,"line":1608},[72,21151,15120],{"class":78},[72,21153,15597],{"class":358},[72,21155,21156],{"class":74,"line":1623},[72,21157,1975],{"class":82},[72,21159,21160],{"class":74,"line":1629},[72,21161,15142],{"class":78},[72,21163,21164],{"class":74,"line":1643},[72,21165,21166],{"class":621},"    \u002F\u002F默认构造函数\n",[72,21168,21169,21171],{"class":74,"line":1649},[72,21170,18945],{"class":358},[72,21172,2404],{"class":82},[72,21174,21175],{"class":74,"line":1740},[72,21176,2458],{"class":82},[72,21178,21179,21181,21183,21186,21188],{"class":74,"line":1746},[72,21180,3879],{"class":82},[72,21182,1597],{"class":78},[72,21184,21185],{"class":366},"\"默认构造函数\"",[72,21187,1597],{"class":78},[72,21189,1620],{"class":82},[72,21191,21192],{"class":74,"line":1758},[72,21193,2615],{"class":82},[72,21195,21196],{"class":74,"line":2041},[72,21197,20769],{"class":621},[72,21199,21200,21202],{"class":74,"line":2046},[72,21201,18978],{"class":358},[72,21203,21204],{"class":82},"(int age,int height)\n",[72,21206,21207],{"class":74,"line":2052},[72,21208,2458],{"class":82},[72,21210,21211,21214,21216],{"class":74,"line":2057},[72,21212,21213],{"class":82},"        m_Age",[72,21215,609],{"class":78},[72,21217,21218],{"class":82},"age;\n",[72,21220,21221,21224,21226,21228,21231],{"class":74,"line":2071},[72,21222,21223],{"class":82},"        m_Height",[72,21225,12143],{"class":78},[72,21227,2810],{"class":78},[72,21229,21230],{"class":82},"(height);",[72,21232,21233],{"class":621},"\u002F\u002F放到堆区\n",[72,21235,21236,21238,21240,21243,21245],{"class":74,"line":2076},[72,21237,3879],{"class":82},[72,21239,1597],{"class":78},[72,21241,21242],{"class":366},"\"有参构造函数\"",[72,21244,1597],{"class":78},[72,21246,1620],{"class":82},[72,21248,21249],{"class":74,"line":2082},[72,21250,2615],{"class":82},[72,21252,21253],{"class":74,"line":2103},[72,21254,21255],{"class":621},"    \u002F\u002F深拷贝解决上述问题\n",[72,21257,21258],{"class":74,"line":2108},[72,21259,21260],{"class":621},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[72,21262,21263,21265,21267,21269,21271,21273,21275],{"class":74,"line":2122},[72,21264,18945],{"class":358},[72,21266,564],{"class":82},[72,21268,7218],{"class":78},[72,21270,15995],{"class":358},[72,21272,11010],{"class":78},[72,21274,15],{"class":5642},[72,21276,570],{"class":82},[72,21278,21279],{"class":74,"line":2127},[72,21280,2458],{"class":82},[72,21282,21283,21285,21287,21290,21292],{"class":74,"line":2156},[72,21284,3879],{"class":82},[72,21286,1597],{"class":78},[72,21288,21289],{"class":366},"\"拷贝构造函数\"",[72,21291,1597],{"class":78},[72,21293,1620],{"class":82},[72,21295,21296],{"class":74,"line":2161},[72,21297,21298],{"class":621},"        \u002F\u002F编译器默认的写如下注释部分\n",[72,21300,21301],{"class":74,"line":2178},[72,21302,21303],{"class":621},"        \u002F\u002Fm_Age=p.m_Age;\n",[72,21305,21306],{"class":74,"line":2183},[72,21307,21308],{"class":621},"        \u002F\u002Fm_Height=p.m_Height;\n",[72,21310,21311,21313,21315],{"class":74,"line":2188},[72,21312,21213],{"class":82},[72,21314,609],{"class":78},[72,21316,21317],{"class":82},"p.m_Age;\n",[72,21319,21320],{"class":74,"line":2193},[72,21321,21322],{"class":621},"        \u002F\u002F深拷贝操作\n",[72,21324,21325,21327,21329,21331,21333,21335],{"class":74,"line":2207},[72,21326,21223],{"class":82},[72,21328,12143],{"class":78},[72,21330,2810],{"class":78},[72,21332,564],{"class":82},[72,21334,1009],{"class":78},[72,21336,21337],{"class":82},"p.m_Height);\n",[72,21339,21340],{"class":74,"line":2212},[72,21341,2615],{"class":82},[72,21343,21344],{"class":74,"line":3005},[72,21345,2828],{"emptyLinePlaceholder":490},[72,21347,21348],{"class":74,"line":3019},[72,21349,18973],{"class":621},[72,21351,21352,21354],{"class":74,"line":3027},[72,21353,18978],{"class":358},[72,21355,2404],{"class":82},[72,21357,21358],{"class":74,"line":3032},[72,21359,2458],{"class":82},[72,21361,21362],{"class":74,"line":3038},[72,21363,21364],{"class":621},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[72,21366,21367,21369,21372,21375,21378],{"class":74,"line":3044},[72,21368,2925],{"class":78},[72,21370,21371],{"class":82},"(m_Height ",[72,21373,21374],{"class":78},"!=",[72,21376,21377],{"class":362}," NULL",[72,21379,570],{"class":82},[72,21381,21382],{"class":74,"line":3049},[72,21383,2938],{"class":82},[72,21385,21386,21389,21392],{"class":74,"line":8374},[72,21387,21388],{"class":78},"            delete",[72,21390,21391],{"class":82}," m_Height;",[72,21393,21394],{"class":621}," \u002F\u002F释放堆区内存\n",[72,21396,21397,21400,21402,21404,21406],{"class":74,"line":8398},[72,21398,21399],{"class":82},"            m_Height",[72,21401,609],{"class":78},[72,21403,2820],{"class":362},[72,21405,618],{"class":82},[72,21407,21408],{"class":621}," \u002F\u002F防止野指针\n",[72,21410,21411],{"class":74,"line":8403},[72,21412,2957],{"class":82},[72,21414,21415,21417,21419],{"class":74,"line":8409},[72,21416,3879],{"class":82},[72,21418,1597],{"class":78},[72,21420,21421],{"class":366},"\"Person的析构函数调用\"\n",[72,21423,21424],{"class":74,"line":8436},[72,21425,2615],{"class":82},[72,21427,21428,21430],{"class":74,"line":8441},[72,21429,2413],{"class":78},[72,21431,16092],{"class":82},[72,21433,21434,21436,21438,21441],{"class":74,"line":8447},[72,21435,2413],{"class":78},[72,21437,6944],{"class":78},[72,21439,21440],{"class":82},"m_Height;",[72,21442,21443],{"class":621}," \u002F\u002F定义一个指针，指向身高\n",[72,21445,21446],{"class":74,"line":8459},[72,21447,4423],{"class":82},[72,21449,21450,21452,21454],{"class":74,"line":8471},[72,21451,5790],{"class":78},[72,21453,6014],{"class":358},[72,21455,2404],{"class":82},[72,21457,21458],{"class":74,"line":8483},[72,21459,1975],{"class":82},[72,21461,21462,21464,21466,21468,21470,21472,21475],{"class":74,"line":10142},[72,21463,19857],{"class":82},[72,21465,7556],{"class":358},[72,21467,564],{"class":82},[72,21469,1204],{"class":362},[72,21471,932],{"class":82},[72,21473,21474],{"class":362},"160",[72,21476,3147],{"class":82},[72,21478,21479,21481,21483,21486,21488,21491,21493,21496,21498,21501,21503,21505],{"class":74,"line":10167},[72,21480,1980],{"class":82},[72,21482,1597],{"class":78},[72,21484,21485],{"class":366},"\"p1的年龄为:\"",[72,21487,1597],{"class":78},[72,21489,21490],{"class":82},"p1.m_Age",[72,21492,1597],{"class":78},[72,21494,21495],{"class":366},"\"身高为：\"",[72,21497,6845],{"class":78},[72,21499,21500],{"class":82},"p1.m_Height",[72,21502,1597],{"class":78},[72,21504,1667],{"class":82},[72,21506,21507],{"class":621},"  \u002F\u002F18\n",[72,21509,21510,21512,21514],{"class":74,"line":10190},[72,21511,19857],{"class":82},[72,21513,7459],{"class":358},[72,21515,17941],{"class":82},[72,21517,21518,21520,21522,21525,21527,21529,21531,21533,21535,21538,21540,21542],{"class":74,"line":10214},[72,21519,1980],{"class":82},[72,21521,1597],{"class":78},[72,21523,21524],{"class":366},"\"p2的年龄为：\"",[72,21526,1597],{"class":78},[72,21528,19887],{"class":82},[72,21530,1597],{"class":78},[72,21532,21495],{"class":366},[72,21534,6845],{"class":78},[72,21536,21537],{"class":82},"p2.m_Height",[72,21539,1597],{"class":78},[72,21541,1667],{"class":82},[72,21543,21507],{"class":621},[72,21545,21546],{"class":74,"line":10219},[72,21547,13636],{"class":82},[72,21549,21550],{"class":74,"line":10224},[72,21551,1994],{"class":82},[72,21553,21554,21556,21558],{"class":74,"line":10229},[72,21555,567],{"class":78},[72,21557,2401],{"class":358},[72,21559,2404],{"class":82},[72,21561,21562],{"class":74,"line":10238},[72,21563,1975],{"class":82},[72,21565,21566,21568],{"class":74,"line":10243},[72,21567,6059],{"class":358},[72,21569,6062],{"class":82},[72,21571,21572],{"class":74,"line":10249},[72,21573,1994],{"class":82},[15,21575,21576],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[15,21578,21579],{},"浅拷贝带来的问题是堆区的内存重复释放",[15,21581,21582],{},[1891,21583],{"alt":68,"src":21584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[15,21586,21587],{},"浅拷贝问题要使用深拷贝来解决",[15,21589,21590],{},[1891,21591],{"alt":68,"src":21592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[15,21594,21595],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[531,21597,21599],{"id":21598},"_826初始化列表","8.2.6初始化列表",[15,21601,21602],{},"作用：初始化属性",[15,21604,5609],{},[63,21606,21609],{"className":21607,"code":21608,"language":127},[125],"构造函数():属性1(值1),属性2(值2).....{}\n",[34,21610,21608],{"__ignoreMap":68},[15,21612,172],{},[63,21614,21616],{"className":552,"code":21615,"language":554,"meta":68,"style":68},"#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",[34,21617,21618,21624,21634,21640,21644,21649,21653,21658,21663,21668,21673,21678,21683,21687,21692,21697,21740,21749,21767,21785,21803,21807,21811,21818,21825,21832,21836,21840,21848,21852,21856,21876,21885,21889,21893,21903,21907,21915],{"__ignoreMap":68},[72,21619,21620,21622],{"class":74,"line":75},[72,21621,2378],{"class":78},[72,21623,2381],{"class":366},[72,21625,21626,21628,21630,21632],{"class":74,"line":370},[72,21627,2386],{"class":78},[72,21629,2389],{"class":78},[72,21631,2392],{"class":358},[72,21633,1719],{"class":82},[72,21635,21636,21638],{"class":74,"line":1608},[72,21637,15120],{"class":78},[72,21639,15597],{"class":358},[72,21641,21642],{"class":74,"line":1623},[72,21643,1975],{"class":82},[72,21645,21646],{"class":74,"line":1629},[72,21647,21648],{"class":78},"    public:\n",[72,21650,21651],{"class":74,"line":1643},[72,21652,2828],{"emptyLinePlaceholder":490},[72,21654,21655],{"class":74,"line":1649},[72,21656,21657],{"class":621},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[72,21659,21660],{"class":74,"line":1740},[72,21661,21662],{"class":621},"    \u002F\u002FPerson(int a, int b, int c) {\n",[72,21664,21665],{"class":74,"line":1746},[72,21666,21667],{"class":621},"    \u002F\u002F  m_A = a;\n",[72,21669,21670],{"class":74,"line":1758},[72,21671,21672],{"class":621},"    \u002F\u002F  m_B = b;\n",[72,21674,21675],{"class":74,"line":2041},[72,21676,21677],{"class":621},"    \u002F\u002F  m_C = c;\n",[72,21679,21680],{"class":74,"line":2046},[72,21681,21682],{"class":621},"    \u002F\u002F}\n",[72,21684,21685],{"class":74,"line":2052},[72,21686,2828],{"emptyLinePlaceholder":490},[72,21688,21689],{"class":74,"line":2057},[72,21690,21691],{"class":621},"    \u002F\u002F初始化列表方式初始化\n",[72,21693,21694],{"class":74,"line":2071},[72,21695,21696],{"class":621},"    \u002F\u002F使用有参构造函数\n",[72,21698,21699,21701,21703,21705,21707,21709,21711,21713,21715,21717,21719,21722,21725,21728,21731,21734,21737],{"class":74,"line":2076},[72,21700,18945],{"class":358},[72,21702,564],{"class":82},[72,21704,567],{"class":78},[72,21706,1827],{"class":5642},[72,21708,12861],{"class":82},[72,21710,567],{"class":78},[72,21712,3261],{"class":5642},[72,21714,12861],{"class":82},[72,21716,567],{"class":78},[72,21718,3277],{"class":5642},[72,21720,21721],{"class":82},") :",[72,21723,21724],{"class":358},"m_A",[72,21726,21727],{"class":82},"(a), ",[72,21729,21730],{"class":358},"m_B",[72,21732,21733],{"class":82},"(b), ",[72,21735,21736],{"class":358},"m_C",[72,21738,21739],{"class":82},"(c) {}\n",[72,21741,21742,21744,21747],{"class":74,"line":2082},[72,21743,15335],{"class":78},[72,21745,21746],{"class":358}," PrintPerson",[72,21748,11279],{"class":82},[72,21750,21751,21753,21755,21758,21760,21763,21765],{"class":74,"line":2103},[72,21752,10095],{"class":82},[72,21754,1597],{"class":78},[72,21756,21757],{"class":366}," \"mA:\"",[72,21759,1873],{"class":78},[72,21761,21762],{"class":82}," m_A ",[72,21764,1597],{"class":78},[72,21766,9266],{"class":82},[72,21768,21769,21771,21773,21776,21778,21781,21783],{"class":74,"line":2108},[72,21770,10095],{"class":82},[72,21772,1597],{"class":78},[72,21774,21775],{"class":366}," \"mB:\"",[72,21777,1873],{"class":78},[72,21779,21780],{"class":82}," m_B ",[72,21782,1597],{"class":78},[72,21784,9266],{"class":82},[72,21786,21787,21789,21791,21794,21796,21799,21801],{"class":74,"line":2122},[72,21788,10095],{"class":82},[72,21790,1597],{"class":78},[72,21792,21793],{"class":366}," \"mC:\"",[72,21795,1873],{"class":78},[72,21797,21798],{"class":82}," m_C ",[72,21800,1597],{"class":78},[72,21802,9266],{"class":82},[72,21804,21805],{"class":74,"line":2127},[72,21806,2615],{"class":82},[72,21808,21809],{"class":74,"line":2156},[72,21810,15648],{"class":78},[72,21812,21813,21815],{"class":74,"line":2161},[72,21814,2413],{"class":78},[72,21816,21817],{"class":82}," m_A;\n",[72,21819,21820,21822],{"class":74,"line":2178},[72,21821,2413],{"class":78},[72,21823,21824],{"class":82}," m_B;\n",[72,21826,21827,21829],{"class":74,"line":2183},[72,21828,2413],{"class":78},[72,21830,21831],{"class":82}," m_C;\n",[72,21833,21834],{"class":74,"line":2188},[72,21835,4423],{"class":82},[72,21837,21838],{"class":74,"line":2193},[72,21839,2828],{"emptyLinePlaceholder":490},[72,21841,21842,21844,21846],{"class":74,"line":2207},[72,21843,567],{"class":78},[72,21845,2401],{"class":358},[72,21847,6404],{"class":82},[72,21849,21850],{"class":74,"line":2212},[72,21851,1975],{"class":82},[72,21853,21854],{"class":74,"line":3005},[72,21855,2828],{"emptyLinePlaceholder":490},[72,21857,21858,21860,21862,21864,21866,21868,21870,21872,21874],{"class":74,"line":3019},[72,21859,19857],{"class":82},[72,21861,15],{"class":358},[72,21863,564],{"class":82},[72,21865,772],{"class":362},[72,21867,12861],{"class":82},[72,21869,640],{"class":362},[72,21871,12861],{"class":82},[72,21873,634],{"class":362},[72,21875,3147],{"class":82},[72,21877,21878,21880,21883],{"class":74,"line":3027},[72,21879,16292],{"class":82},[72,21881,21882],{"class":358},"PrintPerson",[72,21884,6062],{"class":82},[72,21886,21887],{"class":74,"line":3032},[72,21888,2828],{"emptyLinePlaceholder":490},[72,21890,21891],{"class":74,"line":3038},[72,21892,2828],{"emptyLinePlaceholder":490},[72,21894,21895,21897,21899,21901],{"class":74,"line":3044},[72,21896,2731],{"class":358},[72,21898,564],{"class":82},[72,21900,2736],{"class":366},[72,21902,3147],{"class":82},[72,21904,21905],{"class":74,"line":3049},[72,21906,2828],{"emptyLinePlaceholder":490},[72,21908,21909,21911,21913],{"class":74,"line":8374},[72,21910,4518],{"class":78},[72,21912,4521],{"class":362},[72,21914,1719],{"class":82},[72,21916,21917],{"class":74,"line":8398},[72,21918,1994],{"class":82},[15,21920,21921,21922,21925,21926],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[707,21923,21924],{},"参数名就是定义的对象属性","，",[707,21927,21928],{},"属性后面的值为有参构造函数的形参",[63,21930,21932],{"className":552,"code":21931,"language":554,"meta":68,"style":68},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[34,21933,21934],{"__ignoreMap":68},[72,21935,21936,21938,21940,21942,21945,21947,21950,21952,21955,21957,21960,21962,21965,21967],{"class":74,"line":75},[72,21937,19472],{"class":358},[72,21939,564],{"class":82},[72,21941,567],{"class":78},[72,21943,21944],{"class":82}," a.",[72,21946,567],{"class":78},[72,21948,21949],{"class":82}," b,",[72,21951,567],{"class":78},[72,21953,21954],{"class":82}," b):",[72,21956,21724],{"class":358},[72,21958,21959],{"class":82},"(a),",[72,21961,21730],{"class":358},[72,21963,21964],{"class":82},"(c),",[72,21966,21736],{"class":358},[72,21968,21969],{"class":82},"(b) {}\n",[531,21971,21973],{"id":21972},"_827类对象作为类成员","8.2.7类对象作为类成员",[15,21975,21976],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[15,21978,15059],{},[63,21980,21982],{"className":552,"code":21981,"language":554,"meta":68,"style":68},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[34,21983,21984,21989,21994,21998,22003,22007],{"__ignoreMap":68},[72,21985,21986],{"class":74,"line":75},[72,21987,21988],{"class":82},"A{};\n",[72,21990,21991],{"class":74,"line":370},[72,21992,21993],{"class":82},"B\n",[72,21995,21996],{"class":74,"line":1608},[72,21997,1975],{"class":82},[72,21999,22000],{"class":74,"line":1623},[72,22001,22002],{"class":82},"    A a;\n",[72,22004,22005],{"class":74,"line":1629},[72,22006,1994],{"class":82},[72,22008,22009],{"class":74,"line":1643},[72,22010,22011],{"class":621},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[15,22013,22014],{},"案例",[63,22016,22018],{"className":552,"code":22017,"language":554,"meta":68,"style":68},"\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",[34,22019,22020,22025,22032,22036,22041,22046,22060,22064,22074,22085,22089,22096,22100,22113,22117,22122,22127,22131,22137,22141,22145,22149,22180,22184,22195,22199,22205,22209,22222,22226,22230,22234,22239,22244,22248,22256,22260,22277,22296,22300,22308,22312,22318],{"__ignoreMap":68},[72,22021,22022],{"class":74,"line":75},[72,22023,22024],{"class":621},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[72,22026,22027,22029],{"class":74,"line":370},[72,22028,15120],{"class":78},[72,22030,22031],{"class":358}," Phone\n",[72,22033,22034],{"class":74,"line":1608},[72,22035,1975],{"class":82},[72,22037,22038],{"class":74,"line":1623},[72,22039,22040],{"class":82},"public：\n",[72,22042,22043],{"class":74,"line":1629},[72,22044,22045],{"class":621},"    \u002F\u002F 赋值(构造函数)\n",[72,22047,22048,22051,22053,22055,22058],{"class":74,"line":1643},[72,22049,22050],{"class":358},"    Phone",[72,22052,564],{"class":82},[72,22054,15343],{"class":358},[72,22056,22057],{"class":5642}," pName",[72,22059,570],{"class":82},[72,22061,22062],{"class":74,"line":1649},[72,22063,2458],{"class":82},[72,22065,22066,22069,22071],{"class":74,"line":1740},[72,22067,22068],{"class":82},"        m_pName",[72,22070,609],{"class":78},[72,22072,22073],{"class":82},"pName;\n",[72,22075,22076,22078,22080,22083],{"class":74,"line":1746},[72,22077,3879],{"class":82},[72,22079,1597],{"class":78},[72,22081,22082],{"class":366},"\"Phone的构造函数调用\"",[72,22084,1719],{"class":82},[72,22086,22087],{"class":74,"line":1758},[72,22088,2615],{"class":82},[72,22090,22091,22094],{"class":74,"line":2041},[72,22092,22093],{"class":358},"    ~Phone",[72,22095,2404],{"class":82},[72,22097,22098],{"class":74,"line":2046},[72,22099,2458],{"class":82},[72,22101,22102,22104,22106,22109,22111],{"class":74,"line":2052},[72,22103,3879],{"class":82},[72,22105,1597],{"class":78},[72,22107,22108],{"class":366},"\"Phone析构函数调用\"",[72,22110,1597],{"class":78},[72,22112,1620],{"class":82},[72,22114,22115],{"class":74,"line":2057},[72,22116,2615],{"class":82},[72,22118,22119],{"class":74,"line":2071},[72,22120,22121],{"class":621},"    \u002F\u002F\n",[72,22123,22124],{"class":74,"line":2076},[72,22125,22126],{"class":82},"    string m_PName;\n",[72,22128,22129],{"class":74,"line":2082},[72,22130,4423],{"class":82},[72,22132,22133,22135],{"class":74,"line":2103},[72,22134,15120],{"class":78},[72,22136,15597],{"class":358},[72,22138,22139],{"class":74,"line":2108},[72,22140,1975],{"class":82},[72,22142,22143],{"class":74,"line":2122},[72,22144,15142],{"class":78},[72,22146,22147],{"class":74,"line":2127},[72,22148,17420],{"class":621},[72,22150,22151,22153,22155,22157,22159,22161,22163,22166,22169,22171,22174,22177],{"class":74,"line":2156},[72,22152,18945],{"class":358},[72,22154,564],{"class":82},[72,22156,15343],{"class":358},[72,22158,15346],{"class":5642},[72,22160,932],{"class":82},[72,22162,15343],{"class":358},[72,22164,22165],{"class":5642}," pname",[72,22167,22168],{"class":82},"):",[72,22170,15436],{"class":358},[72,22172,22173],{"class":82},"(name),m_phone.",[72,22175,22176],{"class":358},"m_PName",[72,22178,22179],{"class":82},"(pname) \n",[72,22181,22182],{"class":74,"line":2161},[72,22183,2458],{"class":82},[72,22185,22186,22188,22190,22193],{"class":74,"line":2178},[72,22187,3879],{"class":82},[72,22189,1597],{"class":78},[72,22191,22192],{"class":366},"\"Person的构造函数调用\"",[72,22194,1719],{"class":82},[72,22196,22197],{"class":74,"line":2183},[72,22198,2615],{"class":82},[72,22200,22201,22203],{"class":74,"line":2188},[72,22202,18978],{"class":358},[72,22204,2404],{"class":82},[72,22206,22207],{"class":74,"line":2193},[72,22208,2458],{"class":82},[72,22210,22211,22213,22215,22218,22220],{"class":74,"line":2207},[72,22212,3879],{"class":82},[72,22214,1597],{"class":78},[72,22216,22217],{"class":366},"\"Person析构函数调用\"",[72,22219,1597],{"class":78},[72,22221,1620],{"class":82},[72,22223,22224],{"class":74,"line":2212},[72,22225,2615],{"class":82},[72,22227,22228],{"class":74,"line":3005},[72,22229,8206],{"class":621},[72,22231,22232],{"class":74,"line":3019},[72,22233,15318],{"class":82},[72,22235,22236],{"class":74,"line":3027},[72,22237,22238],{"class":621},"    \u002F\u002F手机\n",[72,22240,22241],{"class":74,"line":3032},[72,22242,22243],{"class":82},"    Phone m_Phone;\n",[72,22245,22246],{"class":74,"line":3038},[72,22247,4423],{"class":82},[72,22249,22250,22252,22254],{"class":74,"line":3044},[72,22251,5790],{"class":78},[72,22253,6014],{"class":358},[72,22255,2404],{"class":82},[72,22257,22258],{"class":74,"line":3049},[72,22259,1975],{"class":82},[72,22261,22262,22264,22266,22268,22270,22272,22275],{"class":74,"line":8374},[72,22263,19857],{"class":82},[72,22265,15],{"class":358},[72,22267,564],{"class":82},[72,22269,8342],{"class":366},[72,22271,932],{"class":82},[72,22273,22274],{"class":366},"\"安卓\"",[72,22276,3147],{"class":82},[72,22278,22279,22281,22283,22286,22288,22291,22293],{"class":74,"line":8398},[72,22280,1980],{"class":82},[72,22282,1597],{"class":78},[72,22284,22285],{"class":82},"p.Name",[72,22287,1597],{"class":78},[72,22289,22290],{"class":366},"\"拿着：\"",[72,22292,1597],{"class":78},[72,22294,22295],{"class":82},"p.m_phone.m_PName;\n",[72,22297,22298],{"class":74,"line":8403},[72,22299,1994],{"class":82},[72,22301,22302,22304,22306],{"class":74,"line":8409},[72,22303,567],{"class":78},[72,22305,2401],{"class":358},[72,22307,2404],{"class":82},[72,22309,22310],{"class":74,"line":8436},[72,22311,1975],{"class":82},[72,22313,22314,22316],{"class":74,"line":8441},[72,22315,6059],{"class":358},[72,22317,6062],{"class":82},[72,22319,22320],{"class":74,"line":8447},[72,22321,1994],{"class":82},[15,22323,9451],{},[63,22325,22327],{"className":552,"code":22326,"language":554,"meta":68,"style":68},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[34,22328,22329,22334],{"__ignoreMap":68},[72,22330,22331],{"class":74,"line":75},[72,22332,22333],{"class":621},"    \u002F\u002F不需要写这个：\n",[72,22335,22336],{"class":74,"line":370},[72,22337,22338],{"class":621},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[15,22340,22341],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[63,22343,22345],{"className":552,"code":22344,"language":554,"meta":68,"style":68},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[34,22346,22347],{"__ignoreMap":68},[72,22348,22349,22351,22354,22356,22359,22362],{"class":74,"line":75},[72,22350,19472],{"class":358},[72,22352,22353],{"class":82},"(string name.string pname):",[72,22355,15436],{"class":358},[72,22357,22358],{"class":82},"(name),",[72,22360,22361],{"class":358},"m_phone",[72,22363,22364],{"class":82},"(pname) {}\n",[15,22366,22367,22368,609,22371],{},"采用的是隐式转换法，实际为如下：\n",[34,22369,22370],{},"m_phone(pname)",[34,22372,22373],{},"Phone m_phone=pname",[15,22375,22376,22379],{},[707,22377,22378],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[15,22381,22382],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[531,22384,22386],{"id":22385},"_828静态对象","8.2.8静态对象",[15,22388,22389],{},"静态对象在成员对象前static，称为静态对象",[15,22391,22392],{},"静态对象分为两类：",[22,22394,22395],{},[25,22396,22397],{},"静态成员变量",[251,22399,22400,22403,22406],{},[25,22401,22402],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[25,22404,22405],{},"②在编译阶段分配内存",[25,22407,22408],{},"③类内声明，类外初始化",[22,22410,22411],{"start":370},[25,22412,22413],{},"静态成员函数",[251,22415,22416,22419],{},[25,22417,22418],{},"①所有对象共享同一个函数",[25,22420,22421],{},"②静态成员函数只能访问静态成员变量",[22423,22424,22426],"h4",{"id":22425},"_8281静态成员变量","8.2.8.1静态成员变量",[63,22428,22430],{"className":552,"code":22429,"language":554,"meta":68,"style":68},"#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",[34,22431,22432,22438,22448,22454,22458,22462,22467,22472,22477,22485,22489,22493,22497,22505,22509,22513,22518,22531,22535,22543,22547,22553],{"__ignoreMap":68},[72,22433,22434,22436],{"class":74,"line":75},[72,22435,2378],{"class":78},[72,22437,2381],{"class":366},[72,22439,22440,22442,22444,22446],{"class":74,"line":370},[72,22441,2386],{"class":78},[72,22443,2389],{"class":78},[72,22445,2392],{"class":358},[72,22447,1719],{"class":82},[72,22449,22450,22452],{"class":74,"line":1608},[72,22451,15120],{"class":78},[72,22453,15597],{"class":358},[72,22455,22456],{"class":74,"line":1623},[72,22457,1975],{"class":82},[72,22459,22460],{"class":74,"line":1629},[72,22461,15142],{"class":78},[72,22463,22464],{"class":74,"line":1643},[72,22465,22466],{"class":621},"    \u002F\u002F非静态成员变量\n",[72,22468,22469],{"class":74,"line":1649},[72,22470,22471],{"class":621},"    \u002F\u002F int m_A;\n",[72,22473,22474],{"class":74,"line":1740},[72,22475,22476],{"class":621},"    \u002F\u002F定义静态成员变量\n",[72,22478,22479,22481,22483],{"class":74,"line":1746},[72,22480,11446],{"class":78},[72,22482,2810],{"class":78},[72,22484,21817],{"class":82},[72,22486,22487],{"class":74,"line":1758},[72,22488,2828],{"emptyLinePlaceholder":490},[72,22490,22491],{"class":74,"line":2041},[72,22492,2828],{"emptyLinePlaceholder":490},[72,22494,22495],{"class":74,"line":2046},[72,22496,4423],{"class":82},[72,22498,22499,22501,22503],{"class":74,"line":2052},[72,22500,5790],{"class":78},[72,22502,6014],{"class":358},[72,22504,2404],{"class":82},[72,22506,22507],{"class":74,"line":2057},[72,22508,1975],{"class":82},[72,22510,22511],{"class":74,"line":2071},[72,22512,15739],{"class":82},[72,22514,22515],{"class":74,"line":2076},[72,22516,22517],{"class":621},"    \u002F\u002F输出类成员变量这块内存\n",[72,22519,22520,22522,22524,22527,22529],{"class":74,"line":2082},[72,22521,1980],{"class":82},[72,22523,1597],{"class":78},[72,22525,22526],{"class":82},"p.m_A",[72,22528,1597],{"class":78},[72,22530,1620],{"class":82},[72,22532,22533],{"class":74,"line":2103},[72,22534,1994],{"class":82},[72,22536,22537,22539,22541],{"class":74,"line":2108},[72,22538,567],{"class":78},[72,22540,2401],{"class":358},[72,22542,2404],{"class":82},[72,22544,22545],{"class":74,"line":2122},[72,22546,1975],{"class":82},[72,22548,22549,22551],{"class":74,"line":2127},[72,22550,6059],{"class":358},[72,22552,2404],{"class":82},[72,22554,22555],{"class":74,"line":2156},[72,22556,1994],{"class":82},[15,22558,22559],{},"此时输出是报错的：无法解析外部命令",[15,22561,22562],{},"解决这一问题：必须用到类内声明，类外初始化操作",[63,22564,22566],{"className":552,"code":22565,"language":554,"meta":68,"style":68},"#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",[34,22567,22568,22574,22584,22590,22594,22598,22603,22611,22615,22620,22635,22643,22647,22651,22656,22661,22673,22678,22689,22694,22699,22712,22716,22724,22728,22734],{"__ignoreMap":68},[72,22569,22570,22572],{"class":74,"line":75},[72,22571,2378],{"class":78},[72,22573,2381],{"class":366},[72,22575,22576,22578,22580,22582],{"class":74,"line":370},[72,22577,2386],{"class":78},[72,22579,2389],{"class":78},[72,22581,2392],{"class":358},[72,22583,1719],{"class":82},[72,22585,22586,22588],{"class":74,"line":1608},[72,22587,15120],{"class":78},[72,22589,15597],{"class":358},[72,22591,22592],{"class":74,"line":1623},[72,22593,1975],{"class":82},[72,22595,22596],{"class":74,"line":1629},[72,22597,15142],{"class":78},[72,22599,22600],{"class":74,"line":1643},[72,22601,22602],{"class":621},"    \u002F\u002F类内声明\n",[72,22604,22605,22607,22609],{"class":74,"line":1649},[72,22606,11446],{"class":78},[72,22608,2810],{"class":78},[72,22610,21817],{"class":82},[72,22612,22613],{"class":74,"line":1740},[72,22614,4423],{"class":82},[72,22616,22617],{"class":74,"line":1746},[72,22618,22619],{"class":621},"\u002F\u002F类外初始化\n",[72,22621,22622,22624,22626,22629,22631,22633],{"class":74,"line":1758},[72,22623,567],{"class":78},[72,22625,15995],{"class":358},[72,22627,22628],{"class":82},"::m_A",[72,22630,609],{"class":78},[72,22632,1000],{"class":362},[72,22634,1719],{"class":82},[72,22636,22637,22639,22641],{"class":74,"line":2041},[72,22638,5790],{"class":78},[72,22640,6014],{"class":358},[72,22642,2404],{"class":82},[72,22644,22645],{"class":74,"line":2046},[72,22646,1975],{"class":82},[72,22648,22649],{"class":74,"line":2052},[72,22650,15739],{"class":82},[72,22652,22653],{"class":74,"line":2057},[72,22654,22655],{"class":621},"    \u002F\u002F访问变量的原内存空间\n",[72,22657,22658],{"class":74,"line":2071},[72,22659,22660],{"class":621},"    \u002F\u002F100\n",[72,22662,22663,22665,22667,22669,22671],{"class":74,"line":2076},[72,22664,1980],{"class":82},[72,22666,1597],{"class":78},[72,22668,22526],{"class":82},[72,22670,1597],{"class":78},[72,22672,1620],{"class":82},[72,22674,22675],{"class":74,"line":2082},[72,22676,22677],{"class":82},"    Person p2;\n",[72,22679,22680,22683,22685,22687],{"class":74,"line":2103},[72,22681,22682],{"class":82},"    p2.m_A",[72,22684,609],{"class":78},[72,22686,2151],{"class":362},[72,22688,1719],{"class":82},[72,22690,22691],{"class":74,"line":2108},[72,22692,22693],{"class":621},"    \u002F\u002F继续访问这片空间\n",[72,22695,22696],{"class":74,"line":2122},[72,22697,22698],{"class":621},"    \u002F\u002F200\n",[72,22700,22701,22703,22705,22708,22710],{"class":74,"line":2127},[72,22702,1980],{"class":82},[72,22704,1597],{"class":78},[72,22706,22707],{"class":82},"p2.m_A",[72,22709,1597],{"class":78},[72,22711,1620],{"class":82},[72,22713,22714],{"class":74,"line":2156},[72,22715,1994],{"class":82},[72,22717,22718,22720,22722],{"class":74,"line":2161},[72,22719,567],{"class":78},[72,22721,2401],{"class":358},[72,22723,2404],{"class":82},[72,22725,22726],{"class":74,"line":2178},[72,22727,1975],{"class":82},[72,22729,22730,22732],{"class":74,"line":2183},[72,22731,6059],{"class":358},[72,22733,6062],{"class":82},[72,22735,22736],{"class":74,"line":2188},[72,22737,1994],{"class":82},[15,22739,22740],{},[707,22741,22742],{},"静态变量的访问",[63,22744,22746],{"className":552,"code":22745,"language":554,"meta":68,"style":68},"#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",[34,22747,22748,22754,22764,22770,22774,22778,22782,22790,22794,22799,22807,22811,22815,22829,22844,22852,22856,22861,22866,22871,22876,22888,22893,22898,22912,22929,22933,22941,22945,22951],{"__ignoreMap":68},[72,22749,22750,22752],{"class":74,"line":75},[72,22751,2378],{"class":78},[72,22753,2381],{"class":366},[72,22755,22756,22758,22760,22762],{"class":74,"line":370},[72,22757,2386],{"class":78},[72,22759,2389],{"class":78},[72,22761,2392],{"class":358},[72,22763,1719],{"class":82},[72,22765,22766,22768],{"class":74,"line":1608},[72,22767,15120],{"class":78},[72,22769,15597],{"class":358},[72,22771,22772],{"class":74,"line":1623},[72,22773,1975],{"class":82},[72,22775,22776],{"class":74,"line":1629},[72,22777,15142],{"class":78},[72,22779,22780],{"class":74,"line":1643},[72,22781,22602],{"class":621},[72,22783,22784,22786,22788],{"class":74,"line":1649},[72,22785,11446],{"class":78},[72,22787,2810],{"class":78},[72,22789,21817],{"class":82},[72,22791,22792],{"class":74,"line":1740},[72,22793,15648],{"class":78},[72,22795,22796],{"class":74,"line":1746},[72,22797,22798],{"class":621},"    \u002F\u002F静态成员变量也是有访问权限的\n",[72,22800,22801,22803,22805],{"class":74,"line":1758},[72,22802,11446],{"class":78},[72,22804,2810],{"class":78},[72,22806,21824],{"class":82},[72,22808,22809],{"class":74,"line":2041},[72,22810,4423],{"class":82},[72,22812,22813],{"class":74,"line":2046},[72,22814,22619],{"class":621},[72,22816,22817,22819,22821,22823,22825,22827],{"class":74,"line":2052},[72,22818,567],{"class":78},[72,22820,15995],{"class":358},[72,22822,22628],{"class":82},[72,22824,609],{"class":78},[72,22826,1000],{"class":362},[72,22828,1719],{"class":82},[72,22830,22831,22833,22835,22838,22840,22842],{"class":74,"line":2057},[72,22832,567],{"class":78},[72,22834,15995],{"class":358},[72,22836,22837],{"class":82},"::m_B",[72,22839,609],{"class":78},[72,22841,1254],{"class":362},[72,22843,1719],{"class":82},[72,22845,22846,22848,22850],{"class":74,"line":2071},[72,22847,5790],{"class":78},[72,22849,6083],{"class":358},[72,22851,2404],{"class":82},[72,22853,22854],{"class":74,"line":2076},[72,22855,1975],{"class":82},[72,22857,22858],{"class":74,"line":2082},[72,22859,22860],{"class":621},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[72,22862,22863],{"class":74,"line":2103},[72,22864,22865],{"class":621},"    \u002F\u002F静态成员变量有两种访问方式：\n",[72,22867,22868],{"class":74,"line":2108},[72,22869,22870],{"class":621},"    \u002F\u002F1.通过对象进行访问\n",[72,22872,22873],{"class":74,"line":2122},[72,22874,22875],{"class":82},"    Person p;  \n",[72,22877,22878,22880,22882,22884,22886],{"class":74,"line":2127},[72,22879,1980],{"class":82},[72,22881,1597],{"class":78},[72,22883,22526],{"class":82},[72,22885,1597],{"class":78},[72,22887,1620],{"class":82},[72,22889,22890],{"class":74,"line":2156},[72,22891,22892],{"class":621},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[72,22894,22895],{"class":74,"line":2161},[72,22896,22897],{"class":621},"    \u002F\u002F2.通过类名进行访问\n",[72,22899,22900,22902,22904,22906,22908,22910],{"class":74,"line":2178},[72,22901,1980],{"class":82},[72,22903,1597],{"class":78},[72,22905,19472],{"class":358},[72,22907,22628],{"class":82},[72,22909,1597],{"class":78},[72,22911,1620],{"class":82},[72,22913,22914,22916,22918,22920,22922,22924,22926],{"class":74,"line":2183},[72,22915,1980],{"class":82},[72,22917,1597],{"class":78},[72,22919,19472],{"class":358},[72,22921,22837],{"class":82},[72,22923,1597],{"class":78},[72,22925,1667],{"class":82},[72,22927,22928],{"class":621}," \u002F\u002F没有访问权限，报错\n",[72,22930,22931],{"class":74,"line":2188},[72,22932,1994],{"class":82},[72,22934,22935,22937,22939],{"class":74,"line":2193},[72,22936,567],{"class":78},[72,22938,2401],{"class":358},[72,22940,2404],{"class":82},[72,22942,22943],{"class":74,"line":2207},[72,22944,1975],{"class":82},[72,22946,22947,22949],{"class":74,"line":2212},[72,22948,6128],{"class":358},[72,22950,6062],{"class":82},[72,22952,22953],{"class":74,"line":3005},[72,22954,1994],{"class":82},[22423,22956,22958],{"id":22957},"_8282静态成员函数","8.2.8.2静态成员函数",[15,22960,22961],{},"1.静态成员函数定义与访问",[63,22963,22965],{"className":552,"code":22964,"language":554,"meta":68,"style":68},"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",[34,22966,22967,22973,22977,22981,22986,22997,23001,23015,23019,23023,23031,23035,23040,23045,23049,23057,23062,23072],{"__ignoreMap":68},[72,22968,22969,22971],{"class":74,"line":75},[72,22970,15120],{"class":78},[72,22972,15597],{"class":358},[72,22974,22975],{"class":74,"line":370},[72,22976,1975],{"class":82},[72,22978,22979],{"class":74,"line":1608},[72,22980,15142],{"class":78},[72,22982,22983],{"class":74,"line":1623},[72,22984,22985],{"class":621},"    \u002F\u002F在公共权限下定义静态成员函数\n",[72,22987,22988,22990,22993,22995],{"class":74,"line":1629},[72,22989,11446],{"class":78},[72,22991,22992],{"class":78}," void",[72,22994,11811],{"class":358},[72,22996,2404],{"class":82},[72,22998,22999],{"class":74,"line":1643},[72,23000,2458],{"class":82},[72,23002,23003,23006,23008,23011,23013],{"class":74,"line":1649},[72,23004,23005],{"class":82},"        coout",[72,23007,1597],{"class":78},[72,23009,23010],{"class":366},"\"静态成员函数的调用\"",[72,23012,1597],{"class":78},[72,23014,1620],{"class":82},[72,23016,23017],{"class":74,"line":1740},[72,23018,2615],{"class":82},[72,23020,23021],{"class":74,"line":1746},[72,23022,4423],{"class":82},[72,23024,23025,23027,23029],{"class":74,"line":1758},[72,23026,5790],{"class":78},[72,23028,6014],{"class":358},[72,23030,2404],{"class":82},[72,23032,23033],{"class":74,"line":2041},[72,23034,1975],{"class":82},[72,23036,23037],{"class":74,"line":2046},[72,23038,23039],{"class":621},"    \u002F\u002F静态成员函数的调用方式:\n",[72,23041,23042],{"class":74,"line":2052},[72,23043,23044],{"class":621},"    \u002F\u002F1.通过对象访问\n",[72,23046,23047],{"class":74,"line":2057},[72,23048,15739],{"class":82},[72,23050,23051,23053,23055],{"class":74,"line":2071},[72,23052,16292],{"class":82},[72,23054,11977],{"class":358},[72,23056,6062],{"class":82},[72,23058,23059],{"class":74,"line":2076},[72,23060,23061],{"class":621},"    \u002F\u002F2.通过类名访问\n",[72,23063,23064,23066,23068,23070],{"class":74,"line":2082},[72,23065,18945],{"class":358},[72,23067,18158],{"class":82},[72,23069,11977],{"class":358},[72,23071,6062],{"class":82},[72,23073,23074],{"class":74,"line":2103},[72,23075,1994],{"class":82},[22,23077,23078],{"start":370},[25,23079,23080],{},"静态成员函数只能访问静态成员变量",[63,23082,23084],{"className":552,"code":23083,"language":554,"meta":68,"style":68},"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",[34,23085,23086,23092,23096,23100,23104,23114,23118,23132,23137,23149,23153,23164,23174,23178,23182,23186,23196,23200,23213,23217,23221,23225,23229,23243,23251,23255,23259,23263,23267,23275,23279,23289,23294,23298,23306,23310,23316],{"__ignoreMap":68},[72,23087,23088,23090],{"class":74,"line":75},[72,23089,15120],{"class":78},[72,23091,15597],{"class":358},[72,23093,23094],{"class":74,"line":370},[72,23095,1975],{"class":82},[72,23097,23098],{"class":74,"line":1608},[72,23099,15142],{"class":78},[72,23101,23102],{"class":74,"line":1623},[72,23103,22985],{"class":621},[72,23105,23106,23108,23110,23112],{"class":74,"line":1629},[72,23107,11446],{"class":78},[72,23109,22992],{"class":78},[72,23111,11811],{"class":358},[72,23113,2404],{"class":82},[72,23115,23116],{"class":74,"line":1643},[72,23117,2458],{"class":82},[72,23119,23120,23123,23125,23127,23129],{"class":74,"line":1649},[72,23121,23122],{"class":82},"        m_A",[72,23124,609],{"class":78},[72,23126,865],{"class":362},[72,23128,618],{"class":82},[72,23130,23131],{"class":621}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[72,23133,23134],{"class":74,"line":1740},[72,23135,23136],{"class":621},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[72,23138,23139,23141,23143,23145,23147],{"class":74,"line":1746},[72,23140,23005],{"class":82},[72,23142,1597],{"class":78},[72,23144,23010],{"class":366},[72,23146,1597],{"class":78},[72,23148,1620],{"class":82},[72,23150,23151],{"class":74,"line":1758},[72,23152,2615],{"class":82},[72,23154,23155,23157,23159,23161],{"class":74,"line":2041},[72,23156,11446],{"class":78},[72,23158,2810],{"class":78},[72,23160,15874],{"class":82},[72,23162,23163],{"class":621}," \u002F\u002F静态成员变量\n",[72,23165,23166,23168,23171],{"class":74,"line":2046},[72,23167,2413],{"class":78},[72,23169,23170],{"class":82}," m_B;",[72,23172,23173],{"class":621}," \u002F\u002F非静态成员变量\n",[72,23175,23176],{"class":74,"line":2052},[72,23177,2828],{"emptyLinePlaceholder":490},[72,23179,23180],{"class":74,"line":2057},[72,23181,15648],{"class":78},[72,23183,23184],{"class":74,"line":2071},[72,23185,22798],{"class":621},[72,23187,23188,23190,23192,23194],{"class":74,"line":2076},[72,23189,11446],{"class":78},[72,23191,22992],{"class":78},[72,23193,14044],{"class":358},[72,23195,2404],{"class":82},[72,23197,23198],{"class":74,"line":2082},[72,23199,2458],{"class":82},[72,23201,23202,23204,23206,23209,23211],{"class":74,"line":2103},[72,23203,3879],{"class":82},[72,23205,1597],{"class":78},[72,23207,23208],{"class":366},"\"这是私有权限下的静态函数调用\"",[72,23210,1597],{"class":78},[72,23212,1620],{"class":82},[72,23214,23215],{"class":74,"line":2108},[72,23216,2615],{"class":82},[72,23218,23219],{"class":74,"line":2122},[72,23220,2828],{"emptyLinePlaceholder":490},[72,23222,23223],{"class":74,"line":2127},[72,23224,2828],{"emptyLinePlaceholder":490},[72,23226,23227],{"class":74,"line":2156},[72,23228,4423],{"class":82},[72,23230,23231,23233,23235,23237,23239,23241],{"class":74,"line":2161},[72,23232,567],{"class":78},[72,23234,15995],{"class":358},[72,23236,22628],{"class":82},[72,23238,609],{"class":78},[72,23240,747],{"class":362},[72,23242,1719],{"class":82},[72,23244,23245,23247,23249],{"class":74,"line":2178},[72,23246,5790],{"class":78},[72,23248,6014],{"class":358},[72,23250,2404],{"class":82},[72,23252,23253],{"class":74,"line":2183},[72,23254,1975],{"class":82},[72,23256,23257],{"class":74,"line":2188},[72,23258,23039],{"class":621},[72,23260,23261],{"class":74,"line":2193},[72,23262,23044],{"class":621},[72,23264,23265],{"class":74,"line":2207},[72,23266,15739],{"class":82},[72,23268,23269,23271,23273],{"class":74,"line":2212},[72,23270,16292],{"class":82},[72,23272,11977],{"class":358},[72,23274,6062],{"class":82},[72,23276,23277],{"class":74,"line":3005},[72,23278,23061],{"class":621},[72,23280,23281,23283,23285,23287],{"class":74,"line":3019},[72,23282,18945],{"class":358},[72,23284,18158],{"class":82},[72,23286,11977],{"class":358},[72,23288,6062],{"class":82},[72,23290,23291],{"class":74,"line":3027},[72,23292,23293],{"class":621},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[72,23295,23296],{"class":74,"line":3032},[72,23297,1994],{"class":82},[72,23299,23300,23302,23304],{"class":74,"line":3038},[72,23301,567],{"class":78},[72,23303,2401],{"class":358},[72,23305,2404],{"class":82},[72,23307,23308],{"class":74,"line":3044},[72,23309,1975],{"class":82},[72,23311,23312,23314],{"class":74,"line":3049},[72,23313,6059],{"class":358},[72,23315,6062],{"class":82},[72,23317,23318],{"class":74,"line":8374},[72,23319,1994],{"class":82},[531,23321,23323],{"id":23322},"_83c对象模型和this指针","8.3C++对象模型和this指针",[22423,23325,23327],{"id":23326},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[15,23329,23330],{},"在c++中，类内的成员变量和成员函数分开存储",[15,23332,23333],{},"只有非静态成员变量才属于类的对象上",[23335,23336,23338],"h5",{"id":23337},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[63,23340,23342],{"className":552,"code":23341,"language":554,"meta":68,"style":68},"#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",[34,23343,23344,23351,23361,23367,23371,23375,23379,23387,23391,23395,23418,23422,23430,23434,23440],{"__ignoreMap":68},[72,23345,23346,23348],{"class":74,"line":75},[72,23347,2378],{"class":78},[72,23349,23350],{"class":366},"\u003Ciostraem>\n",[72,23352,23353,23355,23357,23359],{"class":74,"line":370},[72,23354,2386],{"class":78},[72,23356,2389],{"class":78},[72,23358,2392],{"class":358},[72,23360,1719],{"class":82},[72,23362,23363,23365],{"class":74,"line":1608},[72,23364,15120],{"class":78},[72,23366,15597],{"class":358},[72,23368,23369],{"class":74,"line":1623},[72,23370,1975],{"class":82},[72,23372,23373],{"class":74,"line":1629},[72,23374,2828],{"emptyLinePlaceholder":490},[72,23376,23377],{"class":74,"line":1643},[72,23378,4423],{"class":82},[72,23380,23381,23383,23385],{"class":74,"line":1649},[72,23382,5790],{"class":78},[72,23384,6014],{"class":358},[72,23386,2404],{"class":82},[72,23388,23389],{"class":74,"line":1740},[72,23390,1975],{"class":82},[72,23392,23393],{"class":74,"line":1746},[72,23394,15739],{"class":82},[72,23396,23397,23399,23401,23404,23406,23409,23411,23413,23415],{"class":74,"line":1758},[72,23398,1980],{"class":82},[72,23400,1597],{"class":78},[72,23402,23403],{"class":366},"\"size of p=\"",[72,23405,1597],{"class":78},[72,23407,23408],{"class":358},"sizeoif",[72,23410,6965],{"class":82},[72,23412,1597],{"class":78},[72,23414,1667],{"class":82},[72,23416,23417],{"class":621}," \u002F\u002F查看这个空类的占用的内存空间\n",[72,23419,23420],{"class":74,"line":2041},[72,23421,1994],{"class":82},[72,23423,23424,23426,23428],{"class":74,"line":2046},[72,23425,567],{"class":78},[72,23427,2401],{"class":358},[72,23429,2404],{"class":82},[72,23431,23432],{"class":74,"line":2052},[72,23433,1975],{"class":82},[72,23435,23436,23438],{"class":74,"line":2057},[72,23437,6059],{"class":358},[72,23439,6062],{"class":82},[72,23441,23442],{"class":74,"line":2071},[72,23443,1994],{"class":82},[15,23445,23446],{},"输出结果为：size of p=1",[15,23448,23449],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[15,23451,23452],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[23335,23454,23456],{"id":23455},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[63,23458,23460],{"className":552,"code":23459,"language":554,"meta":68,"style":68},"#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",[34,23461,23462,23468,23478,23486,23490,23499,23503,23511,23515,23519,23538,23542,23546,23554,23558,23564],{"__ignoreMap":68},[72,23463,23464,23466],{"class":74,"line":75},[72,23465,2378],{"class":78},[72,23467,2381],{"class":366},[72,23469,23470,23472,23474,23476],{"class":74,"line":370},[72,23471,2386],{"class":78},[72,23473,2389],{"class":78},[72,23475,2392],{"class":358},[72,23477,1719],{"class":82},[72,23479,23480,23482,23484],{"class":74,"line":1608},[72,23481,15120],{"class":78},[72,23483,15995],{"class":358},[72,23485,3102],{"class":82},[72,23487,23488],{"class":74,"line":1623},[72,23489,1975],{"class":82},[72,23491,23492,23494,23496],{"class":74,"line":1629},[72,23493,2413],{"class":78},[72,23495,15874],{"class":82},[72,23497,23498],{"class":621},"\u002F\u002F非静态成员变量\n",[72,23500,23501],{"class":74,"line":1643},[72,23502,4423],{"class":82},[72,23504,23505,23507,23509],{"class":74,"line":1649},[72,23506,5790],{"class":78},[72,23508,6014],{"class":358},[72,23510,2404],{"class":82},[72,23512,23513],{"class":74,"line":1740},[72,23514,1975],{"class":82},[72,23516,23517],{"class":74,"line":1746},[72,23518,15739],{"class":82},[72,23520,23521,23523,23525,23527,23529,23531,23533,23535],{"class":74,"line":1758},[72,23522,1980],{"class":82},[72,23524,1597],{"class":78},[72,23526,23403],{"class":366},[72,23528,1801],{"class":78},[72,23530,6965],{"class":82},[72,23532,1597],{"class":78},[72,23534,1667],{"class":82},[72,23536,23537],{"class":621}," \u002F\u002F查看不是空对象时占用多少内存\n",[72,23539,23540],{"class":74,"line":2041},[72,23541,2828],{"emptyLinePlaceholder":490},[72,23543,23544],{"class":74,"line":2046},[72,23545,1994],{"class":82},[72,23547,23548,23550,23552],{"class":74,"line":2052},[72,23549,567],{"class":78},[72,23551,2401],{"class":358},[72,23553,2404],{"class":82},[72,23555,23556],{"class":74,"line":2057},[72,23557,1975],{"class":82},[72,23559,23560,23562],{"class":74,"line":2071},[72,23561,6059],{"class":358},[72,23563,6062],{"class":82},[72,23565,23566],{"class":74,"line":2076},[72,23567,1994],{"class":82},[15,23569,23570],{},"输出结果：size of p=4",[15,23572,23573],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[22,23575,23576],{},[25,23577,23578],{},"如果加上非静态成员变量，Person类修改如下",[63,23580,23582],{"className":552,"code":23581,"language":554,"meta":68,"style":68},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[34,23583,23584,23590,23594,23600,23608,23612,23617],{"__ignoreMap":68},[72,23585,23586,23588],{"class":74,"line":75},[72,23587,15120],{"class":78},[72,23589,15597],{"class":358},[72,23591,23592],{"class":74,"line":370},[72,23593,1975],{"class":82},[72,23595,23596,23598],{"class":74,"line":1608},[72,23597,2413],{"class":78},[72,23599,21817],{"class":82},[72,23601,23602,23604,23606],{"class":74,"line":1623},[72,23603,11446],{"class":78},[72,23605,2810],{"class":78},[72,23607,21824],{"class":82},[72,23609,23610],{"class":74,"line":1629},[72,23611,4423],{"class":82},[72,23613,23614],{"class":74,"line":1643},[72,23615,23616],{"class":621},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[72,23618,23619,23621,23623,23625,23627,23629],{"class":74,"line":1649},[72,23620,567],{"class":78},[72,23622,15995],{"class":358},[72,23624,22837],{"class":82},[72,23626,609],{"class":78},[72,23628,747],{"class":362},[72,23630,1719],{"class":82},[15,23632,23633],{},"输出结果：4",[15,23635,23636],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[22,23638,23639],{"start":370},[25,23640,23641],{},"加上非静态成员函数",[63,23643,23645],{"className":552,"code":23644,"language":554,"meta":68,"style":68},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[34,23646,23647,23654,23658,23664,23672,23676,23680,23684],{"__ignoreMap":68},[72,23648,23649,23651],{"class":74,"line":75},[72,23650,15120],{"class":78},[72,23652,23653],{"class":358},"  Person\n",[72,23655,23656],{"class":74,"line":370},[72,23657,1975],{"class":82},[72,23659,23660,23662],{"class":74,"line":1608},[72,23661,2413],{"class":78},[72,23663,21817],{"class":82},[72,23665,23666,23668,23670],{"class":74,"line":1623},[72,23667,15335],{"class":78},[72,23669,11811],{"class":358},[72,23671,2404],{"class":82},[72,23673,23674],{"class":74,"line":1629},[72,23675,2458],{"class":82},[72,23677,23678],{"class":74,"line":1643},[72,23679,2828],{"emptyLinePlaceholder":490},[72,23681,23682],{"class":74,"line":1649},[72,23683,2615],{"class":82},[72,23685,23686],{"class":74,"line":1740},[72,23687,4423],{"class":82},[15,23689,23690],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[22,23692,23693],{"start":1608},[25,23694,23695],{},"加上静态成员函数",[63,23697,23699],{"className":552,"code":23698,"language":554,"meta":68,"style":68},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[34,23700,23701,23707,23711,23717,23725,23729,23733,23737,23748,23752,23756,23760],{"__ignoreMap":68},[72,23702,23703,23705],{"class":74,"line":75},[72,23704,15120],{"class":78},[72,23706,23653],{"class":358},[72,23708,23709],{"class":74,"line":370},[72,23710,1975],{"class":82},[72,23712,23713,23715],{"class":74,"line":1608},[72,23714,2413],{"class":78},[72,23716,21817],{"class":82},[72,23718,23719,23721,23723],{"class":74,"line":1623},[72,23720,15335],{"class":78},[72,23722,11811],{"class":358},[72,23724,2404],{"class":82},[72,23726,23727],{"class":74,"line":1629},[72,23728,2458],{"class":82},[72,23730,23731],{"class":74,"line":1643},[72,23732,2828],{"emptyLinePlaceholder":490},[72,23734,23735],{"class":74,"line":1649},[72,23736,2615],{"class":82},[72,23738,23739,23741,23743,23746],{"class":74,"line":1740},[72,23740,11446],{"class":78},[72,23742,22992],{"class":78},[72,23744,23745],{"class":358}," func1",[72,23747,2404],{"class":82},[72,23749,23750],{"class":74,"line":1746},[72,23751,2458],{"class":82},[72,23753,23754],{"class":74,"line":1758},[72,23755,2828],{"emptyLinePlaceholder":490},[72,23757,23758],{"class":74,"line":2041},[72,23759,2615],{"class":82},[72,23761,23762],{"class":74,"line":2046},[72,23763,4423],{"class":82},[15,23765,23633],{},[15,23767,23768],{},"解释：静态成员函数也不属于类上",[473,23770,8100],{},{"title":68,"searchDepth":370,"depth":370,"links":23772},[23773,23779],{"id":15071,"depth":370,"text":15072,"children":23774},[23775,23776,23777,23778],{"id":15075,"depth":1608,"text":15076},{"id":15800,"depth":1608,"text":15801},{"id":15972,"depth":1608,"text":15973},{"id":16431,"depth":1608,"text":16432},{"id":18803,"depth":370,"text":18804,"children":23780},[23781,23782,23783,23784,23785,23786,23787,23788,23789],{"id":18815,"depth":1608,"text":18816},{"id":19108,"depth":1608,"text":19109},{"id":19599,"depth":1608,"text":19600},{"id":20696,"depth":1608,"text":20697},{"id":21119,"depth":1608,"text":21120},{"id":21598,"depth":1608,"text":21599},{"id":21972,"depth":1608,"text":21973},{"id":22385,"depth":1608,"text":22386},{"id":23322,"depth":1608,"text":23323},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":15036,"description":23790},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":23797,"title":554,"body":23798,"description":23802,"extension":487,"meta":23803,"navigation":490,"path":23804,"seo":23805,"stem":23806,"__hash__":23807},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":23799,"toc":23800},[],{"title":68,"searchDepth":370,"depth":370,"links":23801},[],null,{"category":489},"\u002Fwiki\u002F2026-05-24-c++",{"title":554,"description":23802},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":23809,"title":23810,"body":23811,"description":68,"extension":487,"meta":24398,"navigation":490,"path":24399,"seo":24400,"stem":24401,"__hash__":24402},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":23812,"toc":24380},[23813,23816,23820,23823,23826,23829,23847,23852,23855,23858,23861,23864,23869,23872,23877,23880,23883,23887,23890,23893,23899,23902,23920,23924,23928,23931,23936,23939,23943,23946,23959,23962,23966,23969,23972,23975,24000,24003,24012,24023,24038,24070,24074,24081,24089,24093,24096,24099,24104,24108,24111,24114,24119,24122,24126,24129,24132,24137,24140,24144,24149,24153,24219,24223,24226,24229,24232,24235,24238,24244,24263,24266,24280,24288,24292,24295,24298,24303,24306,24311,24316,24319,24322,24327,24332,24335,24340,24345,24348,24353,24358,24361,24364,24369,24372,24377],[10,23814,23810],{"id":23815},"_1强化学习基本认识",[85,23817,23819],{"id":23818},"_11什么是强化学习","1.1.什么是强化学习",[15,23821,23822],{},"强化学习有两部分组成：智能体和环境；",[15,23824,23825],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[15,23827,23828],{},"强化学习与监督学习的区别:",[22,23830,23831,23834,23837,23840],{},[25,23832,23833],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[25,23835,23836],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[25,23838,23839],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[25,23841,23842,23843,23846],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[707,23844,23845],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[15,23848,23849],{},[1891,23850],{"alt":68,"src":23851},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[15,23853,23854],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[15,23856,23857],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[15,23859,23860],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[15,23862,23863],{},"获取奖励",[15,23865,23866],{},[1891,23867],{"alt":68,"src":23868},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[15,23870,23871],{},"强化学习可以分成标准强化学习和深度强化学习",[15,23873,23874],{},[1891,23875],{"alt":68,"src":23876},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[15,23878,23879],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[15,23881,23882],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[85,23884,23886],{"id":23885},"_12强化学习应用场景","1.2.强化学习应用场景",[15,23888,23889],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[15,23891,23892],{},"具身智能中的应用",[15,23894,23895,23898],{},[707,23896,23897],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[15,23900,23901],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[15,23903,23904,23905,23908,23909,23912,23913,23916,23917],{},"机器人是",[707,23906,23907],{},"躯体","，深度学习是",[707,23910,23911],{},"神经元****网络","，VLA是",[707,23914,23915],{},"通用的行为逻辑","，而强化学习是",[707,23918,23919],{},"教练",[85,23921,23923],{"id":23922},"_13序列决策","1.3.序列决策",[531,23925,23927],{"id":23926},"_131智能体与环境","1.3.1.智能体与环境",[15,23929,23930],{},"强化学习研究的问题是智能体agent与环境交互的问题",[15,23932,23933],{},[1891,23934],{"alt":68,"src":23935},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[15,23937,23938],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[531,23940,23942],{"id":23941},"_132奖励","1.3.2.奖励",[15,23944,23945],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[15,23947,23948,23949,23958],{},"取某个策略的表现如何。强化学习的目的就是",[707,23950,23951,23952,23957],{},"最大化",[707,23953,23954],{},[707,23955,23956],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[15,23960,23961],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[531,23963,23965],{"id":23964},"_133序列决策","1.3.3.序列决策",[15,23967,23968],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[15,23970,23971],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[15,23973,23974],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[15,23976,23977,23981,23982,23984,23985,23987,23988,23990,23991,14221,23994,14221,23997],{},[23978,23979,23980],"em",{},"Ht"," = ",[23978,23983,1150],{},"1*, a",[23978,23986,772],{},", r",[23978,23989,772],{},", . . . ,* ",[23978,23992,23993],{},"ot",[23978,23995,23996],{},", at ,",[23978,23998,23999],{},"rt",[15,24001,24002],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[15,24004,24005,23981,24008,2087,24010,983],{},[23978,24006,24007],{},"st",[23978,24009,615],{},[23978,24011,23980],{},[15,24013,24014,24015,24018,24019,24022],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[707,24016,24017],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[707,24020,24021],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[15,24024,24025,24026,24029,24030,24033,24034,24037],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[707,24027,24028],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[707,24031,24032],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[23978,24035,24036],{},"S, A, T, R, Ω, O, γ",")。",[15,24039,24040,24041,24043,24044,24046,24047,564,24049,24052,24053,24055,24056,564,24059,24062,24063,24065,24066,24069],{},"其中 ",[23978,24042,1243],{}," 表示状态空间，为隐变量，",[23978,24045,787],{}," 为动作空间，",[23978,24048,1268],{},[23978,24050,24051],{},"s ′ |s, a",") 为状态转移概率，",[23978,24054,1218],{}," 为奖励函数，",[23978,24057,24058],{},"Ω",[23978,24060,24061],{},"o|s, a",") 为观测概率，",[23978,24064,1144],{}," 为观测空间，",[23978,24067,24068],{},"γ"," 为折扣因子。",[85,24071,24073],{"id":24072},"_14动作空间","1.4.动作空间",[15,24075,24076,24077,24080],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[707,24078,24079],{},"动作空间"," ，动作空间分为:",[22,24082,24083,24086],{},[25,24084,24085],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[25,24087,24088],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[85,24090,24092],{"id":24091},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[15,24094,24095],{},"由策略、价值函数、模型三部分组成",[15,24097,24098],{},"这三者组成马尔可夫决策过程",[15,24100,24101],{},[1891,24102],{"alt":68,"src":24103},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[531,24105,24107],{"id":24106},"_151策略","1.5.1.策略",[15,24109,24110],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[15,24112,24113],{},"策略可分为两种：",[15,24115,24116],{},[1891,24117],{"alt":68,"src":24118},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[15,24120,24121],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[531,24123,24125],{"id":24124},"_152价值函数","1.5.2.价值函数",[15,24127,24128],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[15,24130,24131],{},"价值函数中有一个折扣因子，类似于存款利息",[15,24133,24134],{},[1891,24135],{"alt":68,"src":24136},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[15,24138,24139],{},"进入某个状态采取的最优动作可以通过Q函数得到",[531,24141,24143],{"id":24142},"_153模型","1.5.3.模型",[15,24145,24146],{},[1891,24147],{"alt":68,"src":24148},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[85,24150,24152],{"id":24151},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[154,24154,24155,24165],{},[157,24156,24157],{},[160,24158,24159,24162],{},[163,24160,24161],{"align":165},"类型",[163,24163,24164],{"align":165},"特点",[174,24166,24167,24177,24187,24197,24209],{},[160,24168,24169,24174],{},[179,24170,24171],{"align":165},[707,24172,24173],{},"基于价值的智能体",[179,24175,24176],{"align":165},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[160,24178,24179,24184],{},[179,24180,24181],{"align":165},[707,24182,24183],{},"基于策略的智能体",[179,24185,24186],{"align":165},"直接学习策略，没有学习价值函数",[160,24188,24189,24194],{},[179,24190,24191],{"align":165},[707,24192,24193],{},"演员-评论员智能体",[179,24195,24196],{"align":165},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[160,24198,24199,24204],{},[179,24200,24201],{"align":165},[707,24202,24203],{},"有模型强化学习智能体",[179,24205,24206],{"align":165},[1891,24207],{"alt":68,"src":24208},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[160,24210,24211,24216],{},[179,24212,24213],{"align":165},[707,24214,24215],{},"免模型强化学习智能体",[179,24217,24218],{"align":165},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[85,24220,24222],{"id":24221},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[15,24224,24225],{},"学习和规划是序列决策的两个基本问题",[15,24227,24228],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[15,24230,24231],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[15,24233,24234],{},"强化学习用到的库：Gym",[15,24236,24237],{},"Gym可以检验强化学习算法的优劣",[15,24239,24240,24243],{},[707,24241,24242],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[63,24245,24247],{"className":349,"code":24246,"language":351,"meta":68,"style":68},"pip install gym==0.25.2\n",[34,24248,24249],{"__ignoreMap":68},[72,24250,24251,24254,24257,24260],{"class":74,"line":75},[72,24252,24253],{"class":358},"pip",[72,24255,24256],{"class":366}," install",[72,24258,24259],{"class":366}," gym==",[72,24261,24262],{"class":362},"0.25.2\n",[15,24264,24265],{},"显示图形界面需要",[63,24267,24269],{"className":349,"code":24268,"language":351,"meta":68,"style":68},"pip install pygame\n",[34,24270,24271],{"__ignoreMap":68},[72,24272,24273,24275,24277],{"class":74,"line":75},[72,24274,24253],{"class":358},[72,24276,24256],{"class":366},[72,24278,24279],{"class":366}," pygame\n",[15,24281,24282,24283],{},"有关Gym库的相关文档介绍：",[257,24284,24287],{"href":24285,"rel":24286},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[261],"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[85,24289,24291],{"id":24290},"_18一些补充基础概念","1.8.一些补充基础概念",[15,24293,24294],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[15,24296,24297],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[15,24299,24300],{},[1891,24301],{"alt":68,"src":24302},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[15,24304,24305],{},"折扣率需要自己来设定",[15,24307,24308],{},[1891,24309],{"alt":68,"src":24310},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[22,24312,24313],{},[25,24314,24315],{},"状态转移函数：",[15,24317,24318],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[15,24320,24321],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[15,24323,24324],{},[1891,24325],{"alt":68,"src":24326},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[22,24328,24329],{"start":370},[25,24330,24331],{},"动作价值函数：",[15,24333,24334],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[15,24336,24337],{},[1891,24338],{"alt":68,"src":24339},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[22,24341,24342],{"start":1608},[25,24343,24344],{},"最优动作价值函数：",[15,24346,24347],{},"这个函数是对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会基于这个分数来做决策，这样期望回报会最大化",[15,24349,24350],{},[1891,24351],{"alt":68,"src":24352},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[22,24354,24355],{"start":1623},[25,24356,24357],{},"状态价值函数:",[15,24359,24360],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[15,24362,24363],{},"它衡量的是“一个具体动作”的长期价值",[15,24365,24366],{},[1891,24367],{"alt":68,"src":24368},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[15,24370,24371],{},"几个价值函数之间的比较：",[15,24373,24374],{},[1891,24375],{"alt":68,"src":24376},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[473,24378,24379],{},"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":68,"searchDepth":370,"depth":370,"links":24381},[24382,24383,24384,24389,24390,24395,24396,24397],{"id":23818,"depth":370,"text":23819},{"id":23885,"depth":370,"text":23886},{"id":23922,"depth":370,"text":23923,"children":24385},[24386,24387,24388],{"id":23926,"depth":1608,"text":23927},{"id":23941,"depth":1608,"text":23942},{"id":23964,"depth":1608,"text":23965},{"id":24072,"depth":370,"text":24073},{"id":24091,"depth":370,"text":24092,"children":24391},[24392,24393,24394],{"id":24106,"depth":1608,"text":24107},{"id":24124,"depth":1608,"text":24125},{"id":24142,"depth":1608,"text":24143},{"id":24151,"depth":370,"text":24152},{"id":24221,"depth":370,"text":24222},{"id":24290,"depth":370,"text":24291},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23810,"description":68},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":24404,"title":24405,"body":24406,"description":24413,"extension":487,"meta":24424,"navigation":490,"path":24425,"seo":24426,"stem":24427,"__hash__":24428},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":24407,"toc":24422},[24408,24411,24414,24419],[10,24409,24405],{"id":24410},"_2马尔可夫决策过程",[15,24412,24413],{},"这是强化学习的基本框架",[15,24415,24416],{},[1891,24417],{"alt":68,"src":24418},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[15,24420,24421],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":68,"searchDepth":370,"depth":370,"links":24423},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":24405,"description":24413},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24430,"title":24431,"body":24432,"description":68,"extension":487,"meta":24548,"navigation":490,"path":24549,"seo":24550,"stem":24551,"__hash__":24552},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24433,"toc":24543},[24434,24437,24441,24444,24449,24454,24457,24462,24465,24470,24473,24477,24482,24485,24490,24495,24500,24503,24507,24512,24515,24520,24525,24530,24535,24538],[10,24435,24431],{"id":24436},"_3动作价值函数",[85,24438,24440],{"id":24439},"_31dqn","3.1.DQN",[15,24442,24443],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[15,24445,24446],{},[1891,24447],{"alt":68,"src":24448},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[15,24450,24451],{},[1891,24452],{"alt":68,"src":24453},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[15,24455,24456],{},"DQN算法的描述：",[15,24458,24459],{},[1891,24460],{"alt":68,"src":24461},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[15,24463,24464],{},"这里的Dense指的是全连接层",[15,24466,24467],{},[1891,24468],{"alt":68,"src":24469},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[15,24471,24472],{},"当前观测的状态为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算法",[85,24474,24476],{"id":24475},"_32dqn的举例","3.2.DQN的举例",[15,24478,24479],{},[1891,24480],{"alt":68,"src":24481},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[15,24483,24484],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[15,24486,24487],{},[1891,24488],{"alt":68,"src":24489},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[15,24491,24492],{},[1891,24493],{"alt":68,"src":24494},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[15,24496,24497],{},[1891,24498],{"alt":68,"src":24499},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[15,24501,24502],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[85,24504,24506],{"id":24505},"_33td算法","3.3.TD算法",[15,24508,24509],{},[1891,24510],{"alt":68,"src":24511},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[15,24513,24514],{},"强化学习TD算法公式的粗略解释：",[15,24516,24517],{},[1891,24518],{"alt":68,"src":24519},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[15,24521,24522],{},[1891,24523],{"alt":68,"src":24524},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[15,24526,24527],{},[1891,24528],{"alt":68,"src":24529},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[15,24531,24532],{},[1891,24533],{"alt":68,"src":24534},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[15,24536,24537],{},"TD算法总结：",[15,24539,24540],{},[1891,24541],{"alt":68,"src":24542},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":68,"searchDepth":370,"depth":370,"links":24544},[24545,24546,24547],{"id":24439,"depth":370,"text":24440},{"id":24475,"depth":370,"text":24476},{"id":24505,"depth":370,"text":24506},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24431,"description":68},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24554,"title":24555,"body":24556,"description":68,"extension":487,"meta":24789,"navigation":490,"path":24790,"seo":24791,"stem":24792,"__hash__":24793},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24557,"toc":24785},[24558,24561,24565,24568,24571,24576,24581,24584,24589,24594,24597,24602,24605,24610,24613,24618,24621,24626,24629,24634,24639,24642,24647,24650,24653,24658,24661,24666,24671,24675,24678,24681,24686,24691,24694,24699,24704,24707,24712,24715,24718,24723,24726,24731,24734,24739,24744,24747,24752,24757,24760,24765,24768,24773,24776],[10,24559,24555],{"id":24560},"_4策略学习",[85,24562,24564],{"id":24563},"_41概念描述","4.1.概念描述",[15,24566,24567],{},"用神经网络（策略网络）近似策略函数",[15,24569,24570],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[15,24572,24573],{},[1891,24574],{"alt":68,"src":24575},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[15,24577,24578],{},[1891,24579],{"alt":68,"src":24580},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[15,24582,24583],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[15,24585,24586],{},[1891,24587],{"alt":68,"src":24588},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[15,24590,24591],{},[1891,24592],{"alt":68,"src":24593},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[15,24595,24596],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[15,24598,24599],{},[1891,24600],{"alt":68,"src":24601},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[15,24603,24604],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[15,24606,24607],{},[1891,24608],{"alt":68,"src":24609},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[15,24611,24612],{},"改进theta要用到策略梯度算法",[15,24614,24615],{},[1891,24616],{"alt":68,"src":24617},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[15,24619,24620],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[15,24622,24623],{},[1891,24624],{"alt":68,"src":24625},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[15,24627,24628],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[15,24630,24631],{},[1891,24632],{"alt":68,"src":24633},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[15,24635,24636],{},[1891,24637],{"alt":68,"src":24638},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[15,24640,24641],{},"梯度公式总结：",[15,24643,24644],{},[1891,24645],{"alt":68,"src":24646},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[15,24648,24649],{},"两个公式的分别应用场景：",[15,24651,24652],{},"对于离散的动作：",[15,24654,24655],{},[1891,24656],{"alt":68,"src":24657},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[15,24659,24660],{},"对于连续的动作：",[15,24662,24663],{},[1891,24664],{"alt":68,"src":24665},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[15,24667,24668],{},[1891,24669],{"alt":68,"src":24670},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[85,24672,24674],{"id":24673},"_42概率梯度算法总结","4.2.概率梯度算法总结",[15,24676,24677],{},"使用蒙特卡洛来近似计算策略梯度",[15,24679,24680],{},"蒙特卡洛法的解释如下：",[15,24682,24683],{},[1891,24684],{"alt":68,"src":24685},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[15,24687,24688],{},[1891,24689],{"alt":68,"src":24690},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[15,24692,24693],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[22,24695,24696],{},[25,24697,24698],{},"方法一：reinforce算法",[15,24700,24701],{},[1891,24702],{"alt":68,"src":24703},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[15,24705,24706],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[22,24708,24709],{"start":370},[25,24710,24711],{},"方法二：actor-critic算法",[15,24713,24714],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[15,24716,24717],{},"两个网络的构建：",[15,24719,24720],{},[1891,24721],{"alt":68,"src":24722},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[15,24724,24725],{},"actor网路：",[15,24727,24728],{},[1891,24729],{"alt":68,"src":24730},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[15,24732,24733],{},"critic网络",[15,24735,24736],{},[1891,24737],{"alt":68,"src":24738},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[22,24740,24741],{"start":1608},[25,24742,24743],{},"网络的训练",[15,24745,24746],{},"网络描述",[15,24748,24749],{},[1891,24750],{"alt":68,"src":24751},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[15,24753,24754],{},[1891,24755],{"alt":68,"src":24756},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[15,24758,24759],{},"TD算法更新梯度：",[15,24761,24762],{},[1891,24763],{"alt":68,"src":24764},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[15,24766,24767],{},"策略网络更新梯度：",[15,24769,24770],{},[1891,24771],{"alt":68,"src":24772},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[15,24774,24775],{},"训练整个流程的具体描述：",[15,24777,24778,24781,24782],{},[1891,24779],{"alt":68,"src":24780},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[1891,24783],{"alt":68,"src":24784},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":68,"searchDepth":370,"depth":370,"links":24786},[24787,24788],{"id":24563,"depth":370,"text":24564},{"id":24673,"depth":370,"text":24674},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24555,"description":68},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":24795,"title":24796,"body":24797,"description":24804,"extension":487,"meta":24854,"navigation":490,"path":24855,"seo":24856,"stem":24857,"__hash__":24858},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":24798,"toc":24850},[24799,24802,24805,24809,24812,24817,24821,24824,24829,24832,24837,24842,24845],[10,24800,24796],{"id":24801},"_5alphago算法",[15,24803,24804],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[85,24806,24808],{"id":24807},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[15,24810,24811],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[15,24813,24814],{},[1891,24815],{"alt":68,"src":24816},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[85,24818,24820],{"id":24819},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[15,24822,24823],{},"采用强化学习的方式训练策略网络",[15,24825,24826],{},[1891,24827],{"alt":68,"src":24828},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[15,24830,24831],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[15,24833,24834],{},[1891,24835],{"alt":68,"src":24836},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[15,24838,24839],{},[1891,24840],{"alt":68,"src":24841},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[15,24843,24844],{},"强化学习训练策略网络的总结：",[15,24846,24847],{},[1891,24848],{"alt":68,"src":24849},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":68,"searchDepth":370,"depth":370,"links":24851},[24852,24853],{"id":24807,"depth":370,"text":24808},{"id":24819,"depth":370,"text":24820},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24796,"description":24804},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":24860,"title":24861,"body":24862,"description":24869,"extension":487,"meta":24872,"navigation":490,"path":24873,"seo":24874,"stem":24875,"__hash__":24876},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":24863,"toc":24870},[24864,24867],[10,24865,24861],{"id":24866},"_6价值网络",[15,24868,24869],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":68,"searchDepth":370,"depth":370,"links":24871},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24861,"description":24869},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24878,"title":24879,"body":24880,"description":24884,"extension":487,"meta":24885,"navigation":490,"path":24886,"seo":24887,"stem":24888,"__hash__":24889},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":24881,"toc":24882},[],{"title":68,"searchDepth":370,"depth":370,"links":24883},[],"记录自己的强化学习笔记。",{"category":489},"\u002Fwiki\u002F2025-12-04",{"title":24879,"description":24884},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":24891,"title":24892,"body":24893,"description":23802,"extension":487,"meta":24932,"navigation":490,"path":24933,"seo":24934,"stem":24935,"__hash__":24936},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":24894,"toc":24930},[24895,24898,24901,24907,24910,24916,24919,24924,24927],[10,24896,24892],{"id":24897},"_1-项目概览与官方资源",[15,24899,24900],{},"官方文档：",[15,24902,24903],{},[257,24904,24905],{"href":24905,"rel":24906},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[261],[15,24908,24909],{},"官方代码仓库：",[15,24911,24912],{},[257,24913,24914],{"href":24914,"rel":24915},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[261],[15,24917,24918],{},"复现大体流程：",[15,24920,24921],{},[1891,24922],{"alt":68,"src":24923},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[15,24925,24926],{},"本教程的目标是打通这条链路：",[15,24928,24929],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":68,"searchDepth":370,"depth":370,"links":24931},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":24892,"description":23802},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":24938,"title":24939,"body":24940,"description":23802,"extension":487,"meta":25056,"navigation":490,"path":25057,"seo":25058,"stem":25059,"__hash__":25060},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":24941,"toc":25051},[24942,24945,24949,24952,24959,24963,24966,24975,24985,24989,25019,25022,25048],[10,24943,24939],{"id":24944},"_2-环境准备与设备连接",[85,24946,24948],{"id":24947},"_21-系统与环境","2.1 系统与环境",[15,24950,24951],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[15,24953,24954,24955,24958],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[34,24956,24957],{},"lerobot"," 依赖。",[85,24960,24962],{"id":24961},"_22-机械臂串口识别","2.2 机械臂串口识别",[15,24964,24965],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[63,24967,24969],{"className":349,"code":24968,"language":351,"meta":68,"style":68},"lerobot-find-out\n",[34,24970,24971],{"__ignoreMap":68},[72,24972,24973],{"class":74,"line":75},[72,24974,24968],{"class":358},[15,24976,24977,24978,37,24981,24984],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[34,24979,24980],{},"\u002Fdev\u002FttyACM0",[34,24982,24983],{},"\u002Fdev\u002FttyACM1","）。",[85,24986,24988],{"id":24987},"_23-串口授权","2.3 串口授权",[63,24990,24992],{"className":349,"code":24991,"language":351,"meta":68,"style":68},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[34,24993,24994,25008],{"__ignoreMap":68},[72,24995,24996,24999,25002,25005],{"class":74,"line":75},[72,24997,24998],{"class":358},"sudo",[72,25000,25001],{"class":366}," chmod",[72,25003,25004],{"class":362}," 666",[72,25006,25007],{"class":366}," \u002Fdev\u002FttyACM0\n",[72,25009,25010,25012,25014,25016],{"class":74,"line":370},[72,25011,24998],{"class":358},[72,25013,25001],{"class":366},[72,25015,25004],{"class":362},[72,25017,25018],{"class":366}," \u002Fdev\u002FttyACM1\n",[15,25020,25021],{},"说明：",[251,25023,25024,25029,25035,25045],{},[25,25025,25026,25028],{},[34,25027,24998],{},"：以 root 权限执行命令。",[25,25030,25031,25034],{},[34,25032,25033],{},"chmod","：修改设备节点权限。",[25,25036,25037,25040,25041,25044],{},[34,25038,25039],{},"666","：",[34,25042,25043],{},"rw-rw-rw-","，所有用户可读写。",[25,25046,25047],{},"串口号必须替换为你机器上的真实端口。",[473,25049,25050],{},"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":68,"searchDepth":370,"depth":370,"links":25052},[25053,25054,25055],{"id":24947,"depth":370,"text":24948},{"id":24961,"depth":370,"text":24962},{"id":24987,"depth":370,"text":24988},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":24939,"description":23802},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":25062,"title":25063,"body":25064,"description":23802,"extension":487,"meta":25225,"navigation":490,"path":25226,"seo":25227,"stem":25228,"__hash__":25229},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":25065,"toc":25221},[25066,25070,25074,25080,25083,25140,25143,25147,25150,25218],[10,25067,25069],{"id":25068},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[85,25071,25073],{"id":25072},"_31-配置电机-id","3.1 配置电机 ID",[15,25075,25076,25077,25079],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[34,25078,772],{},"，需要改成机械臂链路里不冲突的编号。",[15,25081,25082],{},"方式一：用 LeRobot 命令逐步写入。",[63,25084,25086],{"className":349,"code":25085,"language":351,"meta":68,"style":68},"# 主臂舵机配置 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",[34,25087,25088,25093,25101,25108,25113,25117,25122,25128,25135],{"__ignoreMap":68},[72,25089,25090],{"class":74,"line":75},[72,25091,25092],{"class":621},"# 主臂舵机配置 ID\n",[72,25094,25095,25098],{"class":74,"line":370},[72,25096,25097],{"class":358},"lerobot-setup-motors",[72,25099,25100],{"class":362}," \\\n",[72,25102,25103,25106],{"class":74,"line":1608},[72,25104,25105],{"class":362},"  --teleop.type=so101_leader",[72,25107,25100],{"class":362},[72,25109,25110],{"class":74,"line":1623},[72,25111,25112],{"class":362},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[72,25114,25115],{"class":74,"line":1629},[72,25116,2828],{"emptyLinePlaceholder":490},[72,25118,25119],{"class":74,"line":1643},[72,25120,25121],{"class":621},"# 从臂舵机配置 ID\n",[72,25123,25124,25126],{"class":74,"line":1649},[72,25125,25097],{"class":358},[72,25127,25100],{"class":362},[72,25129,25130,25133],{"class":74,"line":1740},[72,25131,25132],{"class":362},"  --robot.type=so101_follower",[72,25134,25100],{"class":362},[72,25136,25137],{"class":74,"line":1746},[72,25138,25139],{"class":362},"  --robot.port=\u002Fdev\u002FttyACM1\n",[15,25141,25142],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[85,25144,25146],{"id":25145},"_32-机械臂校准","3.2 机械臂校准",[15,25148,25149],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[63,25151,25153],{"className":349,"code":25152,"language":351,"meta":68,"style":68},"# 主臂校准\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",[34,25154,25155,25160,25167,25173,25180,25185,25189,25194,25200,25206,25213],{"__ignoreMap":68},[72,25156,25157],{"class":74,"line":75},[72,25158,25159],{"class":621},"# 主臂校准\n",[72,25161,25162,25165],{"class":74,"line":370},[72,25163,25164],{"class":358},"lerobot-calibrate",[72,25166,25100],{"class":362},[72,25168,25169,25171],{"class":74,"line":1608},[72,25170,25105],{"class":362},[72,25172,25100],{"class":362},[72,25174,25175,25178],{"class":74,"line":1623},[72,25176,25177],{"class":362},"  --teleop.port=\u002Fdev\u002FttyACM0",[72,25179,25100],{"class":362},[72,25181,25182],{"class":74,"line":1629},[72,25183,25184],{"class":362},"  --teleop.id=my_awesome_leader_arm\n",[72,25186,25187],{"class":74,"line":1643},[72,25188,2828],{"emptyLinePlaceholder":490},[72,25190,25191],{"class":74,"line":1649},[72,25192,25193],{"class":621},"# 从臂校准\n",[72,25195,25196,25198],{"class":74,"line":1740},[72,25197,25164],{"class":358},[72,25199,25100],{"class":362},[72,25201,25202,25204],{"class":74,"line":1746},[72,25203,25132],{"class":362},[72,25205,25100],{"class":362},[72,25207,25208,25211],{"class":74,"line":1758},[72,25209,25210],{"class":362},"  --robot.port=\u002Fdev\u002FttyACM1",[72,25212,25100],{"class":362},[72,25214,25215],{"class":74,"line":2041},[72,25216,25217],{"class":362},"  --robot.id=my_awesome_follower_arm\n",[473,25219,25220],{},"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":68,"searchDepth":370,"depth":370,"links":25222},[25223,25224],{"id":25072,"depth":370,"text":25073},{"id":25145,"depth":370,"text":25146},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":25063,"description":23802},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":25231,"title":25232,"body":25233,"description":23802,"extension":487,"meta":25424,"navigation":490,"path":25425,"seo":25426,"stem":25427,"__hash__":25428},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":25234,"toc":25420},[25235,25238,25242,25289,25293,25306,25369,25372,25417],[10,25236,25232],{"id":25237},"_4-遥操与相机接入",[85,25239,25241],{"id":25240},"_41-不带相机遥操","4.1 不带相机遥操",[63,25243,25245],{"className":349,"code":25244,"language":351,"meta":68,"style":68},"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",[34,25246,25247,25254,25260,25266,25273,25279,25285],{"__ignoreMap":68},[72,25248,25249,25252],{"class":74,"line":75},[72,25250,25251],{"class":358},"lerobot-teleoperate",[72,25253,25100],{"class":362},[72,25255,25256,25258],{"class":74,"line":370},[72,25257,25132],{"class":362},[72,25259,25100],{"class":362},[72,25261,25262,25264],{"class":74,"line":1608},[72,25263,25210],{"class":362},[72,25265,25100],{"class":362},[72,25267,25268,25271],{"class":74,"line":1623},[72,25269,25270],{"class":362},"  --robot.id=my_awesome_follower_arm",[72,25272,25100],{"class":362},[72,25274,25275,25277],{"class":74,"line":1629},[72,25276,25105],{"class":362},[72,25278,25100],{"class":362},[72,25280,25281,25283],{"class":74,"line":1643},[72,25282,25177],{"class":362},[72,25284,25100],{"class":362},[72,25286,25287],{"class":74,"line":1649},[72,25288,25184],{"class":362},[85,25290,25292],{"id":25291},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[63,25294,25296],{"className":349,"code":25295,"language":351,"meta":68,"style":68},"lerobot-find-cameras opencv\n",[34,25297,25298],{"__ignoreMap":68},[72,25299,25300,25303],{"class":74,"line":75},[72,25301,25302],{"class":358},"lerobot-find-cameras",[72,25304,25305],{"class":366}," opencv\n",[63,25307,25309],{"className":349,"code":25308,"language":351,"meta":68,"style":68},"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",[34,25310,25311,25317,25323,25329,25335,25345,25351,25357,25364],{"__ignoreMap":68},[72,25312,25313,25315],{"class":74,"line":75},[72,25314,25251],{"class":358},[72,25316,25100],{"class":362},[72,25318,25319,25321],{"class":74,"line":370},[72,25320,25132],{"class":362},[72,25322,25100],{"class":362},[72,25324,25325,25327],{"class":74,"line":1608},[72,25326,25210],{"class":362},[72,25328,25100],{"class":362},[72,25330,25331,25333],{"class":74,"line":1623},[72,25332,25270],{"class":362},[72,25334,25100],{"class":362},[72,25336,25337,25340,25343],{"class":74,"line":1629},[72,25338,25339],{"class":362},"  --robot.cameras=",[72,25341,25342],{"class":366},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[72,25344,25100],{"class":362},[72,25346,25347,25349],{"class":74,"line":1643},[72,25348,25105],{"class":362},[72,25350,25100],{"class":362},[72,25352,25353,25355],{"class":74,"line":1649},[72,25354,25177],{"class":362},[72,25356,25100],{"class":362},[72,25358,25359,25362],{"class":74,"line":1740},[72,25360,25361],{"class":362},"  --teleop.id=my_awesome_leader_arm",[72,25363,25100],{"class":362},[72,25365,25366],{"class":74,"line":1746},[72,25367,25368],{"class":362},"  --display_data=true\n",[15,25370,25371],{},"相机参数说明：",[251,25373,25374,25380,25386,25395,25405,25411],{},[25,25375,25376,25379],{},[34,25377,25378],{},"front","：相机名称。",[25,25381,25382,25385],{},[34,25383,25384],{},"type: opencv","：相机驱动类型。",[25,25387,25388,25391,25392,24984],{},[34,25389,25390],{},"index_or_path","：设备编号或设备路径（如 ",[34,25393,25394],{},"\u002Fdev\u002Fvideo4",[25,25396,25397,25400,25401,25404],{},[34,25398,25399],{},"width"," \u002F ",[34,25402,25403],{},"height","：图像分辨率。",[25,25406,25407,25410],{},[34,25408,25409],{},"fps","：采样帧率。",[25,25412,25413,25416],{},[34,25414,25415],{},"--display_data=true","：启用实时可视化。",[473,25418,25419],{},"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":68,"searchDepth":370,"depth":370,"links":25421},[25422,25423],{"id":25240,"depth":370,"text":25241},{"id":25291,"depth":370,"text":25292},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":25232,"description":23802},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":25430,"title":25431,"body":25432,"description":23802,"extension":487,"meta":25604,"navigation":490,"path":25605,"seo":25606,"stem":25607,"__hash__":25608},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25433,"toc":25599},[25434,25438,25442,25447,25452,25455,25497,25503,25507,25556,25561,25565,25568,25576,25581,25586,25591,25596],[10,25435,25437],{"id":25436},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[85,25439,25441],{"id":25440},"_51-生成访问令牌","5.1 生成访问令牌",[15,25443,25444],{},[1891,25445],{"alt":68,"src":25446},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[15,25448,25449],{},[1891,25450],{"alt":68,"src":25451},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[15,25453,25454],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[63,25456,25458],{"className":349,"code":25457,"language":351,"meta":68,"style":68},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[34,25459,25460,25473],{"__ignoreMap":68},[72,25461,25462,25465,25468,25470],{"class":74,"line":75},[72,25463,25464],{"class":78},"export",[72,25466,25467],{"class":82}," HF_TOKEN",[72,25469,609],{"class":78},[72,25471,25472],{"class":366},"\"your_huggingface_token\"\n",[72,25474,25475,25478,25481,25484,25487,25489,25492,25494],{"class":74,"line":370},[72,25476,25477],{"class":358},"hf",[72,25479,25480],{"class":366}," auth",[72,25482,25483],{"class":366}," login",[72,25485,25486],{"class":362}," --token",[72,25488,10150],{"class":366},[72,25490,25491],{"class":82},"$HF_TOKEN",[72,25493,805],{"class":366},[72,25495,25496],{"class":362}," --add-to-git-credential\n",[15,25498,25499,25502],{},[34,25500,25501],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[85,25504,25506],{"id":25505},"_52-验证登录","5.2 验证登录",[63,25508,25510],{"className":349,"code":25509,"language":351,"meta":68,"style":68},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[34,25511,25512,25543],{"__ignoreMap":68},[72,25513,25514,25517,25519,25522,25524,25526,25529,25532,25535,25538,25541],{"class":74,"line":75},[72,25515,25516],{"class":82},"HF_USER",[72,25518,609],{"class":78},[72,25520,25521],{"class":82},"$(",[72,25523,25477],{"class":358},[72,25525,25480],{"class":366},[72,25527,25528],{"class":366}," whoami",[72,25530,25531],{"class":78}," |",[72,25533,25534],{"class":358}," head",[72,25536,25537],{"class":362}," -n",[72,25539,25540],{"class":362}," 1",[72,25542,570],{"class":82},[72,25544,25545,25548,25550,25553],{"class":74,"line":370},[72,25546,25547],{"class":362},"echo",[72,25549,10150],{"class":366},[72,25551,25552],{"class":82},"$HF_USER",[72,25554,25555],{"class":366},"\"\n",[15,25557,25558],{},[1891,25559],{"alt":68,"src":25560},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[85,25562,25564],{"id":25563},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[15,25566,25567],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[251,25569,25570,25573],{},[25,25571,25572],{},"Dataset Repo（用于上传演示数据）",[25,25574,25575],{},"Model Repo（用于上传训练后的 ACT 权重）",[15,25577,25578],{},[1891,25579],{"alt":68,"src":25580},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[15,25582,25583],{},[1891,25584],{"alt":68,"src":25585},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[15,25587,25588],{},[1891,25589],{"alt":68,"src":25590},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[15,25592,25593],{},[1891,25594],{"alt":68,"src":25595},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[473,25597,25598],{},"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":68,"searchDepth":370,"depth":370,"links":25600},[25601,25602,25603],{"id":25440,"depth":370,"text":25441},{"id":25505,"depth":370,"text":25506},{"id":25563,"depth":370,"text":25564},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25431,"description":23802},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25610,"title":25611,"body":25612,"description":23802,"extension":487,"meta":25809,"navigation":490,"path":25810,"seo":25811,"stem":25812,"__hash__":25813},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25613,"toc":25804},[25614,25618,25622,25718,25726,25731,25735,25751,25754,25758,25801],[10,25615,25617],{"id":25616},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[85,25619,25621],{"id":25620},"_61-录制示教数据","6.1 录制示教数据",[63,25623,25625],{"className":349,"code":25624,"language":351,"meta":68,"style":68},"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",[34,25626,25627,25634,25640,25646,25652,25661,25667,25673,25679,25686,25696,25703,25713],{"__ignoreMap":68},[72,25628,25629,25632],{"class":74,"line":75},[72,25630,25631],{"class":358},"lerobot-record",[72,25633,25100],{"class":362},[72,25635,25636,25638],{"class":74,"line":370},[72,25637,25132],{"class":362},[72,25639,25100],{"class":362},[72,25641,25642,25644],{"class":74,"line":1608},[72,25643,25210],{"class":362},[72,25645,25100],{"class":362},[72,25647,25648,25650],{"class":74,"line":1623},[72,25649,25270],{"class":362},[72,25651,25100],{"class":362},[72,25653,25654,25656,25659],{"class":74,"line":1629},[72,25655,25339],{"class":362},[72,25657,25658],{"class":366},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[72,25660,25100],{"class":362},[72,25662,25663,25665],{"class":74,"line":1643},[72,25664,25105],{"class":362},[72,25666,25100],{"class":362},[72,25668,25669,25671],{"class":74,"line":1649},[72,25670,25177],{"class":362},[72,25672,25100],{"class":362},[72,25674,25675,25677],{"class":74,"line":1740},[72,25676,25361],{"class":362},[72,25678,25100],{"class":362},[72,25680,25681,25684],{"class":74,"line":1746},[72,25682,25683],{"class":362},"  --display_data=true",[72,25685,25100],{"class":362},[72,25687,25688,25691,25694],{"class":74,"line":1758},[72,25689,25690],{"class":362},"  --dataset.repo_id=",[72,25692,25693],{"class":366},"\"Embodied-AI-6\u002Fso101_test\"",[72,25695,25100],{"class":362},[72,25697,25698,25701],{"class":74,"line":2041},[72,25699,25700],{"class":362},"  --dataset.num_episodes=10",[72,25702,25100],{"class":362},[72,25704,25705,25708,25711],{"class":74,"line":2046},[72,25706,25707],{"class":362},"  --dataset.single_task=",[72,25709,25710],{"class":366},"\"Grab the green cube\"",[72,25712,25100],{"class":362},[72,25714,25715],{"class":74,"line":2052},[72,25716,25717],{"class":362},"  --resume=true\n",[251,25719,25720],{},[25,25721,25722,25725],{},[34,25723,25724],{},"--resume=true","：已有同一数据集时继续追加 episode。",[15,25727,25728],{},[1891,25729],{"alt":68,"src":25730},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[85,25732,25734],{"id":25733},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[63,25736,25738],{"className":349,"code":25737,"language":351,"meta":68,"style":68},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[34,25739,25740],{"__ignoreMap":68},[72,25741,25742,25745,25748],{"class":74,"line":75},[72,25743,25744],{"class":358},"rm",[72,25746,25747],{"class":362}," -rf",[72,25749,25750],{"class":366}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[15,25752,25753],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[85,25755,25757],{"id":25756},"_63-回放指定-episode","6.3 回放指定 episode",[63,25759,25761],{"className":349,"code":25760,"language":351,"meta":68,"style":68},"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",[34,25762,25763,25770,25776,25782,25788,25796],{"__ignoreMap":68},[72,25764,25765,25768],{"class":74,"line":75},[72,25766,25767],{"class":358},"lerobot-replay",[72,25769,25100],{"class":362},[72,25771,25772,25774],{"class":74,"line":370},[72,25773,25132],{"class":362},[72,25775,25100],{"class":362},[72,25777,25778,25780],{"class":74,"line":1608},[72,25779,25210],{"class":362},[72,25781,25100],{"class":362},[72,25783,25784,25786],{"class":74,"line":1623},[72,25785,25270],{"class":362},[72,25787,25100],{"class":362},[72,25789,25790,25792,25794],{"class":74,"line":1629},[72,25791,25690],{"class":362},[72,25793,25693],{"class":366},[72,25795,25100],{"class":362},[72,25797,25798],{"class":74,"line":1643},[72,25799,25800],{"class":362},"  --dataset.episode=0\n",[473,25802,25803],{},"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":68,"searchDepth":370,"depth":370,"links":25805},[25806,25807,25808],{"id":25620,"depth":370,"text":25621},{"id":25733,"depth":370,"text":25734},{"id":25756,"depth":370,"text":25757},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25611,"description":23802},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":25815,"title":25816,"body":25817,"description":23802,"extension":487,"meta":25945,"navigation":490,"path":25946,"seo":25947,"stem":25948,"__hash__":25949},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":25818,"toc":25943},[25819,25823,25886,25889,25936,25941],[10,25820,25822],{"id":25821},"_7-act-模型训练","7. ACT 模型训练",[63,25824,25826],{"className":349,"code":25825,"language":351,"meta":68,"style":68},"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",[34,25827,25828,25835,25843,25850,25857,25864,25871,25878],{"__ignoreMap":68},[72,25829,25830,25833],{"class":74,"line":75},[72,25831,25832],{"class":358},"lerobot-train",[72,25834,25100],{"class":362},[72,25836,25837,25839,25841],{"class":74,"line":370},[72,25838,25690],{"class":362},[72,25840,25693],{"class":366},[72,25842,25100],{"class":362},[72,25844,25845,25848],{"class":74,"line":1608},[72,25846,25847],{"class":362},"  --policy.type=act",[72,25849,25100],{"class":362},[72,25851,25852,25855],{"class":74,"line":1623},[72,25853,25854],{"class":362},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[72,25856,25100],{"class":362},[72,25858,25859,25862],{"class":74,"line":1629},[72,25860,25861],{"class":362},"  --job_name=act_so101_test",[72,25863,25100],{"class":362},[72,25865,25866,25869],{"class":74,"line":1643},[72,25867,25868],{"class":362},"  --policy.device=cuda",[72,25870,25100],{"class":362},[72,25872,25873,25876],{"class":74,"line":1649},[72,25874,25875],{"class":362},"  --wandb.enable=false",[72,25877,25100],{"class":362},[72,25879,25880,25883],{"class":74,"line":1740},[72,25881,25882],{"class":362},"  --policy.repo_id=",[72,25884,25885],{"class":366},"\"Embodied-AI-6\u002Flerobot_new\"\n",[15,25887,25888],{},"参数说明：",[251,25890,25891,25897,25903,25909,25915,25924,25930],{},[25,25892,25893,25896],{},[34,25894,25895],{},"--dataset.repo_id","：训练数据集仓库。",[25,25898,25899,25902],{},[34,25900,25901],{},"--policy.type=act","：策略模型类型为 ACT。",[25,25904,25905,25908],{},[34,25906,25907],{},"--output_dir","：本地训练输出目录。",[25,25910,25911,25914],{},[34,25912,25913],{},"--job_name","：训练任务名称。",[25,25916,25917,25920,25921,24984],{},[34,25918,25919],{},"--policy.device","：训练设备（如 ",[34,25922,25923],{},"cuda",[25,25925,25926,25929],{},[34,25927,25928],{},"--wandb.enable","：是否启用 WandB 可视化。",[25,25931,25932,25935],{},[34,25933,25934],{},"--policy.repo_id","：训练后模型推送目标仓库。",[15,25937,25938],{},[1891,25939],{"alt":68,"src":25940},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[473,25942,25803],{},{"title":68,"searchDepth":370,"depth":370,"links":25944},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25816,"description":23802},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":25951,"title":25952,"body":25953,"description":23802,"extension":487,"meta":26040,"navigation":490,"path":26041,"seo":26042,"stem":26043,"__hash__":26044},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":25954,"toc":26038},[25955,25958,25961,26028,26036],[10,25956,25952],{"id":25957},"_8-策略部署与自动采集",[15,25959,25960],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[63,25962,25964],{"className":349,"code":25963,"language":351,"meta":68,"style":68},"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",[34,25965,25966,25972,25978,25984,25992,25998,26005,26013,26021],{"__ignoreMap":68},[72,25967,25968,25970],{"class":74,"line":75},[72,25969,25631],{"class":358},[72,25971,25100],{"class":362},[72,25973,25974,25976],{"class":74,"line":370},[72,25975,25132],{"class":362},[72,25977,25100],{"class":362},[72,25979,25980,25982],{"class":74,"line":1608},[72,25981,25210],{"class":362},[72,25983,25100],{"class":362},[72,25985,25986,25988,25990],{"class":74,"line":1623},[72,25987,25339],{"class":362},[72,25989,25658],{"class":366},[72,25991,25100],{"class":362},[72,25993,25994,25996],{"class":74,"line":1629},[72,25995,25270],{"class":362},[72,25997,25100],{"class":362},[72,25999,26000,26003],{"class":74,"line":1643},[72,26001,26002],{"class":362},"  --display_data=false",[72,26004,25100],{"class":362},[72,26006,26007,26009,26011],{"class":74,"line":1649},[72,26008,25690],{"class":362},[72,26010,25693],{"class":366},[72,26012,25100],{"class":362},[72,26014,26015,26017,26019],{"class":74,"line":1740},[72,26016,25707],{"class":362},[72,26018,25710],{"class":366},[72,26020,25100],{"class":362},[72,26022,26023,26026],{"class":74,"line":1746},[72,26024,26025],{"class":362},"  --policy.path=",[72,26027,25885],{"class":366},[251,26029,26030],{},[25,26031,26032,26035],{},[34,26033,26034],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[473,26037,25803],{},{"title":68,"searchDepth":370,"depth":370,"links":26039},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":25952,"description":23802},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":26046,"title":26047,"body":26048,"description":23802,"extension":487,"meta":26077,"navigation":490,"path":26078,"seo":26079,"stem":26080,"__hash__":26081},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":26049,"toc":26075},[26050,26054,26057,26063,26066,26072],[10,26051,26053],{"id":26052},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[15,26055,26056],{},"项目地址：",[15,26058,26059],{},[257,26060,26061],{"href":26061,"rel":26062},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[261],[15,26064,26065],{},"参考教程：",[15,26067,26068],{},[257,26069,26070],{"href":26070,"rel":26071},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[261],[15,26073,26074],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":68,"searchDepth":370,"depth":370,"links":26076},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":26047,"description":23802},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":26083,"title":26084,"body":26085,"description":26089,"extension":487,"meta":26090,"navigation":490,"path":26091,"seo":26092,"stem":26093,"__hash__":26094},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":26086,"toc":26087},[],{"title":68,"searchDepth":370,"depth":370,"links":26088},[],"act复现",{"category":489},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":26084,"description":26089},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":26096,"title":26097,"body":26098,"description":68,"extension":487,"meta":26400,"navigation":490,"path":26401,"seo":26402,"stem":26403,"__hash__":26404},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":26099,"toc":26392},[26100,26103,26107,26117,26124,26131,26134,26141,26144,26147,26151,26163,26167,26213,26216,26219,26222,26225,26228,26232,26270,26276,26280,26334,26339,26342,26345,26350,26353,26358,26361,26364,26368,26371,26374,26378],[10,26101,26097],{"id":26102},"_1简介",[531,26104,26106],{"id":26105},"_11什么是-docker","1.1什么是 Docker？",[15,26108,26109,26110,26113,26114],{},"Docker 是一个开源的 ",[707,26111,26112],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[707,26115,26116],{},"一次构建，到处运行。",[15,26118,26119,26120,26123],{},"“ ",[707,26121,26122],{},"一次构建，到处运行"," ”也就是说：",[22,26125,26126],{},[25,26127,26128],{},[707,26129,26130],{},"之前：",[15,26132,26133],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[22,26135,26136],{},[25,26137,26138],{},[707,26139,26140],{},"使用docker后：",[15,26142,26143],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[15,26145,26146],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[531,26148,26150],{"id":26149},"_12它是怎么工作的","1.2.它是怎么工作的？",[251,26152,26153,26156],{},[25,26154,26155],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[25,26157,26158,26159,26162],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[707,26160,26161],{},"无论在哪运行都一样稳定"," 。",[531,26164,26166],{"id":26165},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[154,26168,26169,26179],{},[157,26170,26171],{},[160,26172,26173,26176],{},[163,26174,26175],{"align":165},"概念",[163,26177,26178],{"align":165},"解释",[174,26180,26181,26189,26197,26205],{},[160,26182,26183,26186],{},[179,26184,26185],{"align":165},"镜像",[179,26187,26188],{"align":165},"Image，运行容器的模板，像是一个应用快照",[160,26190,26191,26194],{},[179,26192,26193],{"align":165},"容器",[179,26195,26196],{"align":165},"Container，运行中的镜像实例，有自己的文件系统、网络等",[160,26198,26199,26202],{},[179,26200,26201],{"align":165},"Dockerfile",[179,26203,26204],{"align":165},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[160,26206,26207,26210],{},[179,26208,26209],{"align":165},"仓库",[179,26211,26212],{"align":165},"Registry，存放镜像的地方，比如 Docker Hub",[15,26214,26215],{},"抽象化理解:",[15,26217,26218],{},"Docker镜像≈C++类",[15,26220,26221],{},"Docker容器≈C++类实例(即对象)",[15,26223,26224],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[15,26226,26227],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[531,26229,26231],{"id":26230},"_14类比理解","1.4.类比理解",[154,26233,26234,26244],{},[157,26235,26236],{},[160,26237,26238,26241],{},[163,26239,26240],{"align":165},"传统部署",[163,26242,26243],{"align":165},"Docker部署",[174,26245,26246,26254,26262],{},[160,26247,26248,26251],{},[179,26249,26250],{"align":165},"手动安装依赖、调试版本不一致问题",[179,26252,26253],{"align":165},"一次打包环境和代码",[160,26255,26256,26259],{},[179,26257,26258],{"align":165},"程序“裸奔”跑在系统上",[179,26260,26261],{"align":165},"程序“穿着容器”隔离运行",[160,26263,26264,26267],{},[179,26265,26266],{"align":165},"容易“在我电脑上能跑”",[179,26268,26269],{"align":165},"保证“无论在哪都能跑”",[15,26271,26272,26273],{},"就像快递包裹： ",[707,26274,26275],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[531,26277,26279],{"id":26278},"_15docker-的核心优势","1.5.Docker 的核心优势",[154,26281,26282,26292],{},[157,26283,26284],{},[160,26285,26286,26289],{},[163,26287,26288],{"align":165},"优势",[163,26290,26291],{"align":165},"说明",[174,26293,26294,26302,26310,26318,26326],{},[160,26295,26296,26299],{},[179,26297,26298],{"align":165},"轻量级",[179,26300,26301],{"align":165},"基于系统内核共享，启动速度快，占资源少",[160,26303,26304,26307],{},[179,26305,26306],{"align":165},"跨平台",[179,26308,26309],{"align":165},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[160,26311,26312,26315],{},[179,26313,26314],{"align":165},"易于迁移部署",[179,26316,26317],{"align":165},"应用和环境一起封装，不怕依赖不一致",[160,26319,26320,26323],{},[179,26321,26322],{"align":165},"易于版本控制",[179,26324,26325],{"align":165},"镜像版本可控，支持回滚",[160,26327,26328,26331],{},[179,26329,26330],{"align":165},"生态丰富",[179,26332,26333],{"align":165},"Docker Hub 上有成千上万的现成镜像可用",[22,26335,26336],{},[25,26337,26338],{},"在Linux上可以几乎实现无性能损失。",[15,26340,26341],{},"docker里的发行版和本机共用Linux内核。",[15,26343,26344],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[22,26346,26347],{},[25,26348,26349],{},"可以快速部署在绝大多数Linux发行版",[15,26351,26352],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[22,26354,26355],{},[25,26356,26357],{},"配置环境简单",[15,26359,26360],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[15,26362,26363],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[22,26365,26366],{},[25,26367,26330],{},[15,26369,26370],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[15,26372,26373],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[531,26375,26377],{"id":26376},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[251,26379,26380,26383,26386,26389],{},[25,26381,26382],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[25,26384,26385],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[25,26387,26388],{},"微服务架构：每个服务一个容器，灵活组合",[25,26390,26391],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":68,"searchDepth":370,"depth":370,"links":26393},[26394,26395,26396,26397,26398,26399],{"id":26105,"depth":1608,"text":26106},{"id":26149,"depth":1608,"text":26150},{"id":26165,"depth":1608,"text":26166},{"id":26230,"depth":1608,"text":26231},{"id":26278,"depth":1608,"text":26279},{"id":26376,"depth":1608,"text":26377},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":26097,"description":68},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":26406,"title":26407,"body":26408,"description":68,"extension":487,"meta":27141,"navigation":490,"path":27142,"seo":27143,"stem":27144,"__hash__":27145},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":26409,"toc":27136},[26410,26413,26417,26420,26423,26429,26435,26439,26448,26451,26508,26511,26562,26565,26648,26651,26688,26692,26703,26716,26723,26726,26806,26809,26859,26862,26885,26889,26896,26899,26915,26921,26924,26940,26946,26949,26965,26979,26985,27005,27011,27014,27026,27032,27035,27049,27055,27058,27078,27083,27086,27089,27093,27096,27099,27102,27109,27112,27115,27118,27123,27128,27133],[10,26411,26407],{"id":26412},"_2安装docker",[531,26414,26416],{"id":26415},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[15,26418,26419],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[15,26421,26422],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[15,26424,26425],{},[257,26426,26427],{"href":26427,"rel":26428},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[261],[15,26430,26431],{},[257,26432,26433],{"href":26433,"rel":26434},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[261],[22423,26436,26438],{"id":26437},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[15,26440,26441,26442,26447],{},"以下内容根据 ",[257,26443,26446],{"href":26444,"rel":26445},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[261],"官方文档"," 修改而来。",[15,26449,26450],{},"如果你过去安装过 docker，先删掉：",[63,26452,26454],{"className":349,"code":26453,"language":351,"meta":68,"style":68},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[34,26455,26456],{"__ignoreMap":68},[72,26457,26458,26460,26463,26466,26469,26472,26475,26478,26481,26484,26487,26490,26493,26496,26499,26502,26505],{"class":74,"line":75},[72,26459,3453],{"class":78},[72,26461,26462],{"class":82}," pkg ",[72,26464,26465],{"class":78},"in",[72,26467,26468],{"class":366}," docker.io",[72,26470,26471],{"class":366}," docker-doc",[72,26473,26474],{"class":366}," docker-compose",[72,26476,26477],{"class":366}," docker-compose-v2",[72,26479,26480],{"class":366}," podman-docker",[72,26482,26483],{"class":366}," containerd",[72,26485,26486],{"class":366}," runc",[72,26488,26489],{"class":82},"; ",[72,26491,26492],{"class":78},"do",[72,26494,26495],{"class":358}," sudo",[72,26497,26498],{"class":366}," apt-get",[72,26500,26501],{"class":366}," remove",[72,26503,26504],{"class":82}," $pkg; ",[72,26506,26507],{"class":78},"done\n",[15,26509,26510],{},"首先安装依赖和GPG：",[63,26512,26516],{"className":26513,"code":26514,"language":26515,"meta":68,"style":68},"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",[34,26517,26518,26523,26528,26533,26538,26543,26548,26552,26557],{"__ignoreMap":68},[72,26519,26520],{"class":74,"line":75},[72,26521,26522],{},"# Add Docker's official GPG key:\n",[72,26524,26525],{"class":74,"line":370},[72,26526,26527],{},"sudo apt-get update\n",[72,26529,26530],{"class":74,"line":1608},[72,26531,26532],{},"sudo apt-get install ca-certificates curl\n",[72,26534,26535],{"class":74,"line":1623},[72,26536,26537],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[72,26539,26540],{"class":74,"line":1629},[72,26541,26542],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[72,26544,26545],{"class":74,"line":1643},[72,26546,26547],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[72,26549,26550],{"class":74,"line":1649},[72,26551,2828],{"emptyLinePlaceholder":490},[72,26553,26554],{"class":74,"line":1740},[72,26555,26556],{},"# 如果上面这行报错就弄下面这行\n",[72,26558,26559],{"class":74,"line":1746},[72,26560,26561],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[15,26563,26564],{},"信任 Docker 的 GPG 公钥并添加仓库：",[63,26566,26568],{"className":349,"code":26567,"language":351,"meta":68,"style":68},"# 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",[34,26569,26570,26575,26581,26598,26631],{"__ignoreMap":68},[72,26571,26572],{"class":74,"line":75},[72,26573,26574],{"class":621},"# Add the repository to Apt sources:\n",[72,26576,26577,26579],{"class":74,"line":370},[72,26578,25547],{"class":362},[72,26580,25100],{"class":362},[72,26582,26583,26586,26589,26592,26595],{"class":74,"line":1608},[72,26584,26585],{"class":366},"  \"deb [arch=$(",[72,26587,26588],{"class":358},"dpkg",[72,26590,26591],{"class":362}," --print-architecture",[72,26593,26594],{"class":366},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[72,26596,26597],{"class":362},"\\\n",[72,26599,26600,26603,26605,26607,26610,26613,26615,26617,26620,26622,26624,26627,26629],{"class":74,"line":1623},[72,26601,26602],{"class":366},"  \"",[72,26604,25521],{"class":82},[72,26606,1112],{"class":362},[72,26608,26609],{"class":366}," \u002Fetc\u002Fos-release",[72,26611,26612],{"class":82}," && ",[72,26614,25547],{"class":362},[72,26616,10150],{"class":366},[72,26618,26619],{"class":82},"$VERSION_CODENAME",[72,26621,805],{"class":366},[72,26623,983],{"class":82},[72,26625,26626],{"class":366},"\" stable\"",[72,26628,25531],{"class":78},[72,26630,25100],{"class":362},[72,26632,26633,26636,26639,26642,26645],{"class":74,"line":1629},[72,26634,26635],{"class":358},"  sudo",[72,26637,26638],{"class":366}," tee",[72,26640,26641],{"class":366}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[72,26643,26644],{"class":78}," >",[72,26646,26647],{"class":366}," \u002Fdev\u002Fnull\n",[15,26649,26650],{},"最后安装",[63,26652,26654],{"className":349,"code":26653,"language":351,"meta":68,"style":68},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[34,26655,26656,26665],{"__ignoreMap":68},[72,26657,26658,26660,26662],{"class":74,"line":75},[72,26659,24998],{"class":358},[72,26661,26498],{"class":366},[72,26663,26664],{"class":366}," update\n",[72,26666,26667,26669,26671,26673,26676,26679,26682,26685],{"class":74,"line":370},[72,26668,24998],{"class":358},[72,26670,26498],{"class":366},[72,26672,24256],{"class":366},[72,26674,26675],{"class":366}," docker-ce",[72,26677,26678],{"class":366}," docker-ce-cli",[72,26680,26681],{"class":366}," containerd.io",[72,26683,26684],{"class":366}," docker-buildx-plugin",[72,26686,26687],{"class":366}," docker-compose-plugin\n",[22423,26689,26691],{"id":26690},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[15,26693,26694,26695,26698,26699,26702],{},"查看自己自己包管理工具版本（dnf是 ",[707,26696,26697],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[707,26700,26701],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[63,26704,26706],{"className":349,"code":26705,"language":351,"meta":68,"style":68},"dnf --version\n",[34,26707,26708],{"__ignoreMap":68},[72,26709,26710,26713],{"class":74,"line":75},[72,26711,26712],{"class":358},"dnf",[72,26714,26715],{"class":362}," --version\n",[15,26717,26441,26718,26722],{},[257,26719,26446],{"href":26720,"rel":26721},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[261]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[15,26724,26725],{},"如果你之前安装过 docker，请先删掉",[63,26727,26729],{"className":349,"code":26728,"language":351,"meta":68,"style":68},"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",[34,26730,26731,26745,26752,26759,26766,26773,26780,26787,26794,26801],{"__ignoreMap":68},[72,26732,26733,26735,26738,26740,26743],{"class":74,"line":75},[72,26734,24998],{"class":358},[72,26736,26737],{"class":366}," dnf",[72,26739,26501],{"class":366},[72,26741,26742],{"class":366}," docker",[72,26744,25100],{"class":362},[72,26746,26747,26750],{"class":74,"line":370},[72,26748,26749],{"class":366},"                  docker-client",[72,26751,25100],{"class":362},[72,26753,26754,26757],{"class":74,"line":1608},[72,26755,26756],{"class":366},"                  docker-client-latest",[72,26758,25100],{"class":362},[72,26760,26761,26764],{"class":74,"line":1623},[72,26762,26763],{"class":366},"                  docker-common",[72,26765,25100],{"class":362},[72,26767,26768,26771],{"class":74,"line":1629},[72,26769,26770],{"class":366},"                  docker-latest",[72,26772,25100],{"class":362},[72,26774,26775,26778],{"class":74,"line":1643},[72,26776,26777],{"class":366},"                  docker-latest-logrotate",[72,26779,25100],{"class":362},[72,26781,26782,26785],{"class":74,"line":1649},[72,26783,26784],{"class":366},"                  docker-logrotate",[72,26786,25100],{"class":362},[72,26788,26789,26792],{"class":74,"line":1740},[72,26790,26791],{"class":366},"                  docker-selinux",[72,26793,25100],{"class":362},[72,26795,26796,26799],{"class":74,"line":1746},[72,26797,26798],{"class":366},"                  docker-engine-selinux",[72,26800,25100],{"class":362},[72,26802,26803],{"class":74,"line":1758},[72,26804,26805],{"class":366},"                  docker-engine\n",[15,26807,26808],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[63,26810,26812],{"className":349,"code":26811,"language":351,"meta":68,"style":68},"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",[34,26813,26814,26828,26843],{"__ignoreMap":68},[72,26815,26816,26818,26820,26823,26825],{"class":74,"line":75},[72,26817,24998],{"class":358},[72,26819,26737],{"class":366},[72,26821,26822],{"class":362}," -y",[72,26824,24256],{"class":366},[72,26826,26827],{"class":366}," dnf-plugins-core\n",[72,26829,26830,26832,26834,26837,26840],{"class":74,"line":370},[72,26831,24998],{"class":358},[72,26833,26737],{"class":366},[72,26835,26836],{"class":366}," config-manager",[72,26838,26839],{"class":366}," addrepo",[72,26841,26842],{"class":362}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[72,26844,26845,26847,26850,26853,26856],{"class":74,"line":1608},[72,26846,24998],{"class":358},[72,26848,26849],{"class":366}," sed",[72,26851,26852],{"class":362}," -i",[72,26854,26855],{"class":366}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[72,26857,26858],{"class":366}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[15,26860,26861],{},"最后安装：",[63,26863,26865],{"className":349,"code":26864,"language":351,"meta":68,"style":68},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[34,26866,26867],{"__ignoreMap":68},[72,26868,26869,26871,26873,26875,26877,26879,26881,26883],{"class":74,"line":75},[72,26870,24998],{"class":358},[72,26872,26737],{"class":366},[72,26874,24256],{"class":366},[72,26876,26675],{"class":366},[72,26878,26678],{"class":366},[72,26880,26681],{"class":366},[72,26882,26684],{"class":366},[72,26884,26687],{"class":366},[531,26886,26888],{"id":26887},"_22配置环境","2.2.配置环境",[22423,26890,26892,26895],{"id":26891},"_221检查-docker-服务状态",[707,26893,26894],{},"2.2.1.检查 Docker 服务状态"," ：",[15,26897,26898],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[63,26900,26902],{"className":349,"code":26901,"language":351,"meta":68,"style":68},"systemctl status docker\n",[34,26903,26904],{"__ignoreMap":68},[72,26905,26906,26909,26912],{"class":74,"line":75},[72,26907,26908],{"class":358},"systemctl",[72,26910,26911],{"class":366}," status",[72,26913,26914],{"class":366}," docker\n",[22423,26916,26918,26895],{"id":26917},"_222启动-docker-服务",[707,26919,26920],{},"2.2.2.启动 Docker 服务",[15,26922,26923],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[63,26925,26927],{"className":349,"code":26926,"language":351,"meta":68,"style":68},"sudo systemctl start docker\n",[34,26928,26929],{"__ignoreMap":68},[72,26930,26931,26933,26936,26938],{"class":74,"line":75},[72,26932,24998],{"class":358},[72,26934,26935],{"class":366}," systemctl",[72,26937,4612],{"class":366},[72,26939,26914],{"class":366},[22423,26941,26943,26895],{"id":26942},"_223设置-docker-开机自启",[707,26944,26945],{},"2.2.3.设置 Docker 开机自启",[15,26947,26948],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[63,26950,26952],{"className":349,"code":26951,"language":351,"meta":68,"style":68},"sudo systemctl enable docker\n",[34,26953,26954],{"__ignoreMap":68},[72,26955,26956,26958,26960,26963],{"class":74,"line":75},[72,26957,24998],{"class":358},[72,26959,26935],{"class":366},[72,26961,26962],{"class":366}," enable",[72,26964,26914],{"class":366},[22423,26966,26968,14221,26971,14221,26976,26895],{"id":26967},"_224将用户添加到-docker-组",[707,26969,26970],{},"2.2.4.将用户添加到",[707,26972,26973],{},[34,26974,26975],{},"docker",[707,26977,26978],{},"组",[15,26980,26981,26982,26984],{},"使用以下命令将当前用户添加到 ",[34,26983,26975],{}," 组：",[63,26986,26988],{"className":349,"code":26987,"language":351,"meta":68,"style":68},"sudo usermod -aG docker $USER\n",[34,26989,26990],{"__ignoreMap":68},[72,26991,26992,26994,26997,27000,27002],{"class":74,"line":75},[72,26993,24998],{"class":358},[72,26995,26996],{"class":366}," usermod",[72,26998,26999],{"class":362}," -aG",[72,27001,26742],{"class":366},[72,27003,27004],{"class":82}," $USER\n",[22423,27006,27008,26895],{"id":27007},"_225退出并重新登录",[707,27009,27010],{},"2.2.5.退出并重新登录",[15,27012,27013],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[63,27015,27017],{"className":349,"code":27016,"language":351,"meta":68,"style":68},"newgrp docker\n",[34,27018,27019],{"__ignoreMap":68},[72,27020,27021,27024],{"class":74,"line":75},[72,27022,27023],{"class":358},"newgrp",[72,27025,26914],{"class":366},[22423,27027,27029,26895],{"id":27028},"_226重新启动-docker-服务如果需要",[707,27030,27031],{},"2.2.6.重新启动 Docker 服务（如果需要）",[15,27033,27034],{},"确保 Docker 服务正在运行，可以使用以下命令：",[63,27036,27037],{"className":349,"code":26926,"language":351,"meta":68,"style":68},[34,27038,27039],{"__ignoreMap":68},[72,27040,27041,27043,27045,27047],{"class":74,"line":75},[72,27042,24998],{"class":358},[72,27044,26935],{"class":366},[72,27046,4612],{"class":366},[72,27048,26914],{"class":366},[22423,27050,27052,26895],{"id":27051},"_227重启电脑后检查-docker-服务状态",[707,27053,27054],{},"2.2.7.重启电脑后检查 Docker 服务状态",[15,27056,27057],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[63,27059,27061],{"className":349,"code":27060,"language":351,"meta":68,"style":68},"sudo reboot\nsystemctl status docker\n",[34,27062,27063,27070],{"__ignoreMap":68},[72,27064,27065,27067],{"class":74,"line":75},[72,27066,24998],{"class":358},[72,27068,27069],{"class":366}," reboot\n",[72,27071,27072,27074,27076],{"class":74,"line":370},[72,27073,26908],{"class":358},[72,27075,26911],{"class":366},[72,27077,26914],{"class":366},[15,27079,27080],{},[1891,27081],{"alt":68,"src":27082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[15,27084,27085],{},"第三行显示enabled说明开机自启动成功",[15,27087,27088],{},"按q退出",[531,27090,27092],{"id":27091},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[15,27094,27095],{},"优先使用linux来使用docker是比较好的",[15,27097,27098],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[15,27100,27101],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[15,27103,27104,27105],{},"官方下载安装:",[257,27106,27107],{"href":27107,"rel":27108},"https:\u002F\u002Fwww.docker.com\u002F",[261],[15,27110,27111],{},"Windows的Docker显卡直通与USB直通:",[15,27113,27114],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[15,27116,27117],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[15,27119,27120],{},[1891,27121],{"alt":68,"src":27122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[15,27124,27125],{},[1891,27126],{"alt":68,"src":27127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[15,27129,27130],{},[1891,27131],{"alt":68,"src":27132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[473,27134,27135],{},"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":68,"searchDepth":370,"depth":370,"links":27137},[27138,27139,27140],{"id":26415,"depth":1608,"text":26416},{"id":26887,"depth":1608,"text":26888},{"id":27091,"depth":1608,"text":27092},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":26407,"description":68},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":27147,"title":27148,"body":27149,"description":27156,"extension":487,"meta":27849,"navigation":490,"path":27850,"seo":27851,"stem":27852,"__hash__":27853},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":27150,"toc":27843},[27151,27154,27157,27161,27166,27171,27174,27202,27207,27216,27219,27224,27228,27235,27240,27246,27250,27253,27257,27262,27354,27359,27377,27382,27403,27408,27424,27428,27433,27462,27467,27513,27518,27562,27570,27587,27592,27608,27613,27627,27630,27633,27636,27639,27668,27671,27676,27680,27683,27686,27692,27695,27698,27701,27763,27770,27775,27778,27796,27800,27803,27820,27823,27826,27840],[10,27152,27148],{"id":27153},"_3docker直通",[15,27155,27156],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[531,27158,27160],{"id":27159},"_31usb直通","3.1.USB直通",[15,27162,27163],{},[1891,27164],{"alt":68,"src":27165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[22,27167,27168],{},[25,27169,27170],{},"方法一(不是很推荐新手)：",[15,27172,27173],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[63,27175,27177],{"className":349,"code":27176,"language":351,"meta":68,"style":68},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[34,27178,27179,27187,27192],{"__ignoreMap":68},[72,27180,27181,27184],{"class":74,"line":75},[72,27182,27183],{"class":358},"ls",[72,27185,27186],{"class":366}," \u002Fdev\n",[72,27188,27189],{"class":74,"line":370},[72,27190,27191],{"class":621},"#例如\n",[72,27193,27194,27197,27199],{"class":74,"line":1608},[72,27195,27196],{"class":82},"--device",[72,27198,609],{"class":78},[72,27200,27201],{"class":366},"\u002Fdev\u002Ftty_USB0\n",[22,27203,27204],{"start":370},[25,27205,27206],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[63,27208,27210],{"className":349,"code":27209,"language":351,"meta":68,"style":68},"--privileged\n",[34,27211,27212],{"__ignoreMap":68},[72,27213,27214],{"class":74,"line":75},[72,27215,27209],{"class":358},[15,27217,27218],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[15,27220,27221],{},[1891,27222],{"alt":68,"src":27223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[531,27225,27227],{"id":27226},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[15,27229,27230,27231,27234],{},"NVIDIA Container Toolkit使用户 ",[707,27232,27233],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[15,27236,27237],{},[1891,27238],{"alt":68,"src":27239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[15,27241,27242],{},[257,27243,27244],{"href":27244,"rel":27245},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[261],[22423,27247,27249],{"id":27248},"_321安装","3.2.1.安装",[15,27251,27252],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[23335,27254,27256],{"id":27255},"_3211ubuntu","3.2.1.1.Ubuntu",[22,27258,27259],{},[25,27260,27261],{},"配置存储库 并更新",[63,27263,27265],{"className":349,"code":27264,"language":351,"meta":68,"style":68},"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",[34,27266,27267,27296,27316,27328,27340,27346],{"__ignoreMap":68},[72,27268,27269,27272,27275,27278,27280,27282,27285,27288,27291,27294],{"class":74,"line":75},[72,27270,27271],{"class":358},"curl",[72,27273,27274],{"class":362}," -fsSL",[72,27276,27277],{"class":366}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[72,27279,25531],{"class":78},[72,27281,26495],{"class":358},[72,27283,27284],{"class":366}," gpg",[72,27286,27287],{"class":362}," --dearmor",[72,27289,27290],{"class":362}," -o",[72,27292,27293],{"class":366}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[72,27295,25100],{"class":362},[72,27297,27298,27301,27303,27306,27309,27312,27314],{"class":74,"line":370},[72,27299,27300],{"class":82},"  && ",[72,27302,27271],{"class":358},[72,27304,27305],{"class":362}," -s",[72,27307,27308],{"class":362}," -L",[72,27310,27311],{"class":366}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[72,27313,25531],{"class":78},[72,27315,25100],{"class":362},[72,27317,27318,27321,27324,27326],{"class":74,"line":1608},[72,27319,27320],{"class":358},"    sed",[72,27322,27323],{"class":366}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[72,27325,25531],{"class":78},[72,27327,25100],{"class":362},[72,27329,27330,27333,27335,27338],{"class":74,"line":1623},[72,27331,27332],{"class":358},"    sudo",[72,27334,26638],{"class":366},[72,27336,27337],{"class":366}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[72,27339,25100],{"class":362},[72,27341,27342,27344],{"class":74,"line":1629},[72,27343,27300],{"class":82},[72,27345,26597],{"class":362},[72,27347,27348,27350,27352],{"class":74,"line":1643},[72,27349,27332],{"class":358},[72,27351,26498],{"class":366},[72,27353,26664],{"class":366},[22,27355,27356],{"start":370},[25,27357,27358],{},"安装nvidia-docker2",[63,27360,27362],{"className":349,"code":27361,"language":351,"meta":68,"style":68},"sudo apt-get install -y nvidia-docker2\n",[34,27363,27364],{"__ignoreMap":68},[72,27365,27366,27368,27370,27372,27374],{"class":74,"line":75},[72,27367,24998],{"class":358},[72,27369,26498],{"class":366},[72,27371,24256],{"class":366},[72,27373,26822],{"class":362},[72,27375,27376],{"class":366}," nvidia-docker2\n",[22,27378,27379],{"start":1608},[25,27380,27381],{},"使用nvidia-ctk命令配置container runtime",[63,27383,27385],{"className":349,"code":27384,"language":351,"meta":68,"style":68},"sudo nvidia-ctk runtime configure --runtime=docker\n",[34,27386,27387],{"__ignoreMap":68},[72,27388,27389,27391,27394,27397,27400],{"class":74,"line":75},[72,27390,24998],{"class":358},[72,27392,27393],{"class":366}," nvidia-ctk",[72,27395,27396],{"class":366}," runtime",[72,27398,27399],{"class":366}," configure",[72,27401,27402],{"class":362}," --runtime=docker\n",[22,27404,27405],{"start":1623},[25,27406,27407],{},"重启docker服务:",[63,27409,27411],{"className":349,"code":27410,"language":351,"meta":68,"style":68},"sudo systemctl restart docker\n",[34,27412,27413],{"__ignoreMap":68},[72,27414,27415,27417,27419,27422],{"class":74,"line":75},[72,27416,24998],{"class":358},[72,27418,26935],{"class":366},[72,27420,27421],{"class":366}," restart",[72,27423,26914],{"class":366},[23335,27425,27427],{"id":27426},"_3212fedora","3.2.1.2.Fedora",[22,27429,27430],{},[25,27431,27432],{},"配置存储库",[63,27434,27436],{"className":349,"code":27435,"language":351,"meta":68,"style":68},"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",[34,27437,27438,27453],{"__ignoreMap":68},[72,27439,27440,27442,27444,27446,27449,27451],{"class":74,"line":75},[72,27441,27271],{"class":358},[72,27443,27305],{"class":362},[72,27445,27308],{"class":362},[72,27447,27448],{"class":366}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[72,27450,25531],{"class":78},[72,27452,25100],{"class":362},[72,27454,27455,27457,27459],{"class":74,"line":370},[72,27456,24998],{"class":358},[72,27458,26638],{"class":366},[72,27460,27461],{"class":366}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[22,27463,27464],{"start":370},[25,27465,27466],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[63,27468,27470],{"className":349,"code":27469,"language":351,"meta":68,"style":68},"# 如果是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",[34,27471,27472,27477,27491,27495,27500],{"__ignoreMap":68},[72,27473,27474],{"class":74,"line":75},[72,27475,27476],{"class":621},"# 如果是RHEL或者Rocky（DNF4）\n",[72,27478,27479,27481,27483,27485,27488],{"class":74,"line":370},[72,27480,24998],{"class":358},[72,27482,26737],{"class":366},[72,27484,26836],{"class":366},[72,27486,27487],{"class":362}," --add-repo",[72,27489,27490],{"class":366}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[72,27492,27493],{"class":74,"line":1608},[72,27494,2828],{"emptyLinePlaceholder":490},[72,27496,27497],{"class":74,"line":1623},[72,27498,27499],{"class":621},"# 如果是Feodra41+（DNF5）\n",[72,27501,27502,27504,27506,27508,27510],{"class":74,"line":1629},[72,27503,24998],{"class":358},[72,27505,26737],{"class":366},[72,27507,26836],{"class":366},[72,27509,26839],{"class":366},[72,27511,27512],{"class":362}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[22,27514,27515],{"start":1608},[25,27516,27517],{},"安装NVIDIA Container Toolki包",[63,27519,27521],{"className":349,"code":27520,"language":351,"meta":68,"style":68},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[34,27522,27523,27528,27541,27545,27550],{"__ignoreMap":68},[72,27524,27525],{"class":74,"line":75},[72,27526,27527],{"class":621},"# 如果是RHEL或者Rocky\n",[72,27529,27530,27532,27534,27536,27538],{"class":74,"line":370},[72,27531,24998],{"class":358},[72,27533,26737],{"class":366},[72,27535,24256],{"class":366},[72,27537,26822],{"class":362},[72,27539,27540],{"class":366}," nvidia-container-toolkit\n",[72,27542,27543],{"class":74,"line":1608},[72,27544,2828],{"emptyLinePlaceholder":490},[72,27546,27547],{"class":74,"line":1623},[72,27548,27549],{"class":621},"# 如果是Fedora\n",[72,27551,27552,27554,27556,27558,27560],{"class":74,"line":1629},[72,27553,24998],{"class":358},[72,27555,26737],{"class":366},[72,27557,24256],{"class":366},[72,27559,26822],{"class":362},[72,27561,27540],{"class":366},[22,27563,27564],{"start":1623},[25,27565,27566,27567,27569],{},"安装nvidia-docker2 ： 在Fedora上使用",[34,27568,26712],{},"进行安装",[63,27571,27573],{"className":349,"code":27572,"language":351,"meta":68,"style":68},"sudo dnf install -y nvidia-docker2\n",[34,27574,27575],{"__ignoreMap":68},[72,27576,27577,27579,27581,27583,27585],{"class":74,"line":75},[72,27578,24998],{"class":358},[72,27580,26737],{"class":366},[72,27582,24256],{"class":366},[72,27584,26822],{"class":362},[72,27586,27376],{"class":366},[22,27588,27589],{"start":1629},[25,27590,27591],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[63,27593,27594],{"className":349,"code":27384,"language":351,"meta":68,"style":68},[34,27595,27596],{"__ignoreMap":68},[72,27597,27598,27600,27602,27604,27606],{"class":74,"line":75},[72,27599,24998],{"class":358},[72,27601,27393],{"class":366},[72,27603,27396],{"class":366},[72,27605,27399],{"class":366},[72,27607,27402],{"class":362},[22,27609,27610],{"start":1643},[25,27611,27612],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[63,27614,27615],{"className":349,"code":27410,"language":351,"meta":68,"style":68},[34,27616,27617],{"__ignoreMap":68},[72,27618,27619,27621,27623,27625],{"class":74,"line":75},[72,27620,24998],{"class":358},[72,27622,26935],{"class":366},[72,27624,27421],{"class":366},[72,27626,26914],{"class":366},[15,27628,27629],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[15,27631,27632],{},"方法：",[15,27634,27635],{},"1️⃣nvidia-smi",[15,27637,27638],{},"2️⃣运行nvidia cuda 容器进行测试",[63,27640,27642],{"className":349,"code":27641,"language":351,"meta":68,"style":68},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[34,27643,27644],{"__ignoreMap":68},[72,27645,27646,27648,27650,27653,27656,27659,27662,27665],{"class":74,"line":75},[72,27647,24998],{"class":358},[72,27649,26742],{"class":366},[72,27651,27652],{"class":366}," run",[72,27654,27655],{"class":362}," --rm",[72,27657,27658],{"class":362}," --gpus",[72,27660,27661],{"class":366}," all",[72,27663,27664],{"class":366}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[72,27666,27667],{"class":366}," nvidia-smi\n",[15,27669,27670],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[15,27672,27673],{},[1891,27674],{"alt":68,"src":27675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[531,27677,27679],{"id":27678},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[15,27681,27682],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[15,27684,27685],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[15,27687,27688],{},[257,27689,27690],{"href":27690,"rel":27691},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[261],[15,27693,27694],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[15,27696,27697],{},"我们只需要找到对应的Docker镜像当底包即可。",[15,27699,27700],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[154,27702,27703,27719],{},[157,27704,27705],{},[160,27706,27707,27710,27713,27716],{},[163,27708,27709],{"align":165},"镜像类型",[163,27711,27712],{"align":165},"适用场景",[163,27714,27715],{"align":165},"示例标签",[163,27717,27718],{"align":165},"大小",[174,27720,27721,27735,27749],{},[160,27722,27723,27726,27729,27732],{},[179,27724,27725],{"align":165},"base",[179,27727,27728],{"align":165},"仅需 CUDA 运行时库",[179,27730,27731],{"align":165},"12.4.0-base-ubuntu22.04",[179,27733,27734],{"align":165},"~240MB",[160,27736,27737,27740,27743,27746],{},[179,27738,27739],{"align":165},"runtime",[179,27741,27742],{"align":165},"部署编译后的应用（含数学库）",[179,27744,27745],{"align":165},"12.4.0-runtime-ubuntu22.04",[179,27747,27748],{"align":165},"~2GB",[160,27750,27751,27754,27757,27760],{},[179,27752,27753],{"align":165},"devel",[179,27755,27756],{"align":165},"开发环境（含编译工具）",[179,27758,27759],{"align":165},"12.4.0-devel-ubuntu22.04",[179,27761,27762],{"align":165},"~3GB",[15,27764,27765,27766,27769],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[34,27767,27768],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[15,27771,27772],{},[1891,27773],{"alt":68,"src":27774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[15,27776,27777],{},"在dockerfile里就可以开头这么写：",[63,27779,27781],{"className":349,"code":27780,"language":351,"meta":68,"style":68},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[34,27782,27783,27788],{"__ignoreMap":68},[72,27784,27785],{"class":74,"line":75},[72,27786,27787],{"class":621},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[72,27789,27790,27793],{"class":74,"line":370},[72,27791,27792],{"class":358},"FROM",[72,27794,27795],{"class":366}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[531,27797,27799],{"id":27798},"_34配置以太网","3.4.配置以太网",[15,27801,27802],{},"指定网络模式",[63,27804,27806],{"className":349,"code":27805,"language":351,"meta":68,"style":68},"--net=host \\\n",[34,27807,27808],{"__ignoreMap":68},[72,27809,27810,27813,27815,27818],{"class":74,"line":75},[72,27811,27812],{"class":82},"--net",[72,27814,609],{"class":78},[72,27816,27817],{"class":366},"host",[72,27819,25100],{"class":358},[15,27821,27822],{},"启动参数里加上这行即可。具体在下方",[15,27824,27825],{},"--net选项：指定网络模式，该选项有以下参数可选：",[251,27827,27828,27831,27834,27837],{},[25,27829,27830],{},"--net=bridge:默认选项，表示连接到默认的网桥",[25,27832,27833],{},"--net=host:容器使用宿主机的网络",[25,27835,27836],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[25,27838,27839],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[473,27841,27842],{},"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":68,"searchDepth":370,"depth":370,"links":27844},[27845,27846,27847,27848],{"id":27159,"depth":1608,"text":27160},{"id":27226,"depth":1608,"text":27227},{"id":27678,"depth":1608,"text":27679},{"id":27798,"depth":1608,"text":27799},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":27148,"description":27156},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27855,"title":27856,"body":27857,"description":27864,"extension":487,"meta":27870,"navigation":490,"path":27871,"seo":27872,"stem":27873,"__hash__":27874},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27858,"toc":27868},[27859,27862,27865],[10,27860,27856],{"id":27861},"_4dockerhub换源",[15,27863,27864],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[15,27866,27867],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":68,"searchDepth":370,"depth":370,"links":27869},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27856,"description":27864},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27876,"title":27877,"body":27878,"description":68,"extension":487,"meta":28890,"navigation":490,"path":28891,"seo":28892,"stem":28893,"__hash__":28894},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27879,"toc":28885},[27880,27883,27887,27893,27897,27900,28240,28243,28246,28249,28254,28259,28262,28265,28268,28271,28290,28293,28304,28310,28492,28502,28518,28781,28783,28808,28823,28832,28882],[10,27881,27877],{"id":27882},"_5docker命令学习",[531,27884,27886],{"id":27885},"_51参考文档","5.1.参考文档",[15,27888,27889],{},[257,27890,27891],{"href":27891,"rel":27892},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[261],[531,27894,27896],{"id":27895},"_52常用命令","5.2.常用命令",[15,27898,27899],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[154,27901,27902,27915],{},[157,27903,27904],{},[160,27905,27906,27909,27912],{},[163,27907,27908],{"align":165},"命令",[163,27910,27911],{"align":165},"描述",[163,27913,27914],{"align":165},"示例",[174,27916,27917,27928,27939,27950,27961,27972,27983,27994,28004,28015,28026,28037,28047,28058,28069,28080,28090,28100,28110,28120,28131,28142,28153,28164,28175,28186,28196,28207,28218,28229],{},[160,27918,27919,27922,27925],{},[179,27920,27921],{"align":165},"docker run",[179,27923,27924],{"align":165},"创建并启动一个新的容器。",[179,27926,27927],{"align":165},"docker run -it ubuntu bash",[160,27929,27930,27933,27936],{},[179,27931,27932],{"align":165},"docker build",[179,27934,27935],{"align":165},"通过指定的 Dockerfile 创建一个新的镜像。",[179,27937,27938],{"align":165},"docker build -t myimage .",[160,27940,27941,27944,27947],{},[179,27942,27943],{"align":165},"docker pull",[179,27945,27946],{"align":165},"从 Docker 仓库拉取镜像。",[179,27948,27949],{"align":165},"docker pull ubuntu",[160,27951,27952,27955,27958],{},[179,27953,27954],{"align":165},"docker push",[179,27956,27957],{"align":165},"将本地镜像推送到 Docker 仓库。",[179,27959,27960],{"align":165},"docker push myimage",[160,27962,27963,27966,27969],{},[179,27964,27965],{"align":165},"docker stop",[179,27967,27968],{"align":165},"停止一个正在运行的容器。",[179,27970,27971],{"align":165},"docker stop container_id",[160,27973,27974,27977,27980],{},[179,27975,27976],{"align":165},"docker start",[179,27978,27979],{"align":165},"启动一个已经存在的容器。",[179,27981,27982],{"align":165},"docker start container_id",[160,27984,27985,27988,27991],{},[179,27986,27987],{"align":165},"docker restart",[179,27989,27990],{"align":165},"重新启动容器。",[179,27992,27993],{"align":165},"docker restart container_id",[160,27995,27996,27999,28002],{},[179,27997,27998],{"align":165},"docker ps",[179,28000,28001],{"align":165},"列出当前正在运行的容器。",[179,28003,27998],{"align":165},[160,28005,28006,28009,28012],{},[179,28007,28008],{"align":165},"docker rm",[179,28010,28011],{"align":165},"删除一个或多个停止的容器。",[179,28013,28014],{"align":165},"docker rm container_id",[160,28016,28017,28020,28023],{},[179,28018,28019],{"align":165},"docker exec",[179,28021,28022],{"align":165},"在一个正在运行的容器中执行命令。",[179,28024,28025],{"align":165},"docker exec -it container_id bash",[160,28027,28028,28031,28034],{},[179,28029,28030],{"align":165},"docker logs",[179,28032,28033],{"align":165},"查看容器的日志输出。",[179,28035,28036],{"align":165},"docker logs container_id",[160,28038,28039,28042,28045],{},[179,28040,28041],{"align":165},"docker images",[179,28043,28044],{"align":165},"列出本地所有镜像。",[179,28046,28041],{"align":165},[160,28048,28049,28052,28055],{},[179,28050,28051],{"align":165},"docker rmi",[179,28053,28054],{"align":165},"删除一个或多个镜像。",[179,28056,28057],{"align":165},"docker rmi myimage",[160,28059,28060,28063,28066],{},[179,28061,28062],{"align":165},"docker network",[179,28064,28065],{"align":165},"管理 Docker 网络。",[179,28067,28068],{"align":165},"docker network ls",[160,28070,28071,28074,28077],{},[179,28072,28073],{"align":165},"docker volume",[179,28075,28076],{"align":165},"管理 Docker 数据卷。",[179,28078,28079],{"align":165},"docker volume ls",[160,28081,28082,28085,28088],{},[179,28083,28084],{"align":165},"docker-compose up",[179,28086,28087],{"align":165},"启动 docker-compose.yml 中定义的所有服务。",[179,28089,28084],{"align":165},[160,28091,28092,28095,28098],{},[179,28093,28094],{"align":165},"docker-compose down",[179,28096,28097],{"align":165},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[179,28099,28094],{"align":165},[160,28101,28102,28105,28108],{},[179,28103,28104],{"align":165},"docker info",[179,28106,28107],{"align":165},"显示 Docker 系统的详细信息。",[179,28109,28104],{"align":165},[160,28111,28112,28115,28118],{},[179,28113,28114],{"align":165},"docker stats",[179,28116,28117],{"align":165},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[179,28119,28114],{"align":165},[160,28121,28122,28125,28128],{},[179,28123,28124],{"align":165},"docker inspect",[179,28126,28127],{"align":165},"查看容器或镜像的详细信息（JSON 格式）。",[179,28129,28130],{"align":165},"docker inspect container_id",[160,28132,28133,28136,28139],{},[179,28134,28135],{"align":165},"docker save",[179,28137,28138],{"align":165},"将一个镜像保存为 tar 文件。",[179,28140,28141],{"align":165},"docker save -o myimage.tar myimage",[160,28143,28144,28147,28150],{},[179,28145,28146],{"align":165},"docker load",[179,28148,28149],{"align":165},"从 tar 文件中加载镜像。",[179,28151,28152],{"align":165},"docker load -i myimage.tar",[160,28154,28155,28158,28161],{},[179,28156,28157],{"align":165},"docker tag",[179,28159,28160],{"align":165},"为镜像添加标签（tag）。",[179,28162,28163],{"align":165},"docker tag myimage myimage:v1",[160,28165,28166,28169,28172],{},[179,28167,28168],{"align":165},"docker buildx build",[179,28170,28171],{"align":165},"使用 Buildx 构建多架构镜像。",[179,28173,28174],{"align":165},"docker buildx build -t myimage .",[160,28176,28177,28180,28183],{},[179,28178,28179],{"align":165},"docker buildx create",[179,28181,28182],{"align":165},"创建一个新的 Buildx 构建实例。",[179,28184,28185],{"align":165},"docker buildx create –use",[160,28187,28188,28191,28194],{},[179,28189,28190],{"align":165},"docker buildx ls",[179,28192,28193],{"align":165},"列出所有可用的 Buildx 构建实例。",[179,28195,28190],{"align":165},[160,28197,28198,28201,28204],{},[179,28199,28200],{"align":165},"docker buildx use",[179,28202,28203],{"align":165},"设置当前的 Buildx 构建实例。",[179,28205,28206],{"align":165},"docker buildx use mybuilder",[160,28208,28209,28212,28215],{},[179,28210,28211],{"align":165},"docker buildx bake",[179,28213,28214],{"align":165},"使用 Bake 文件批量构建镜像。",[179,28216,28217],{"align":165},"docker buildx bake -f bake.hcl",[160,28219,28220,28223,28226],{},[179,28221,28222],{"align":165},"docker buildx build –push",[179,28224,28225],{"align":165},"构建镜像并推送到镜像仓库。",[179,28227,28228],{"align":165},"docker buildx build –push -t myimage .",[160,28230,28231,28234,28237],{},[179,28232,28233],{"align":165},"docker buildx build –platform",[179,28235,28236],{"align":165},"构建镜像并为多个平台生成支持。",[179,28238,28239],{"align":165},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[15,28241,28242],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[15,28244,28245],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[15,28247,28248],{},"docker images 可以查看已经下载的镜像",[15,28250,28251],{},[1891,28252],{"alt":68,"src":28253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[15,28255,28256],{},[707,28257,28258],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[15,28260,28261],{},"docker rmi $(docker images -q) 删除所有的镜像",[15,28263,28264],{},"docker container logs 查看容器日志",[15,28266,28267],{},"docker top 查看容器里的进程",[15,28269,28270],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[63,28272,28274],{"className":349,"code":28273,"language":351,"meta":68,"style":68},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[34,28275,28276],{"__ignoreMap":68},[72,28277,28278,28281,28284,28287],{"class":74,"line":75},[72,28279,28280],{"class":358},"如：docker",[72,28282,28283],{"class":366}," cp",[72,28285,28286],{"class":366}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[72,28288,28289],{"class":366}," \u002Fmydata\u002Fnginx\n",[15,28291,28292],{},"docker run时在启动容器的时候会有几个常用的选项：",[251,28294,28295,28298,28301],{},[25,28296,28297],{},"-d选项：表示后台运行",[25,28299,28300],{},"-P选项：随机端口映射",[25,28302,28303],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[531,28305,28307],{"id":28306},"_53run命令的参数非常重要",[707,28308,28309],{},"5.3.run命令的参数（非常重要）",[154,28311,28312,28325],{},[157,28313,28314],{},[160,28315,28316,28319,28322],{},[163,28317,28318],{"align":165},"参数\u002F配置",[163,28320,28321],{"align":165},"功能说明",[163,28323,28324],{"align":165},"重要性与参考依据",[174,28326,28327,28338,28349,28360,28371,28382,28393,28404,28415,28426,28437,28448,28459,28470,28481],{},[160,28328,28329,28332,28335],{},[179,28330,28331],{"align":165},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[179,28333,28334],{"align":165},"指定容器名称，便于后续管理",[179,28336,28337],{"align":165},"替代随机生成的容器名。",[160,28339,28340,28343,28346],{},[179,28341,28342],{"align":165},"–gpus all",[179,28344,28345],{"align":165},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[179,28347,28348],{"align":165},"用于CUDA加速等GPU依赖任务。",[160,28350,28351,28354,28357],{},[179,28352,28353],{"align":165},"-e NVIDIA_DRIVER_CAPABILITIES=all",[179,28355,28356],{"align":165},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[179,28358,28359],{"align":165},"确保容器内GPU功能完整67。",[160,28361,28362,28365,28368],{},[179,28363,28364],{"align":165},"-dit",[179,28366,28367],{"align":165},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[179,28369,28370],{"align":165},"允许容器在后台运行并支持交互操作。",[160,28372,28373,28376,28379],{},[179,28374,28375],{"align":165},"–privileged",[179,28377,28378],{"align":165},"赋予容器完全主机权限（可访问设备、内核模块等）",[179,28380,28381],{"align":165},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[160,28383,28384,28387,28390],{},[179,28385,28386],{"align":165},"–net=host",[179,28388,28389],{"align":165},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[179,28391,28392],{"align":165},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[160,28394,28395,28398,28401],{},[179,28396,28397],{"align":165},"–group-add audio–group-add video–group-add dialout",[179,28399,28400],{"align":165},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[179,28402,28403],{"align":165},"避免权限问题（如避免无法调用摄像头、麦克风）。",[160,28405,28406,28409,28412],{},[179,28407,28408],{"align":165},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[179,28410,28411],{"align":165},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[179,28413,28414],{"align":165},"支持容器内运行图形界面应用（如OpenCV可视化）。",[160,28416,28417,28420,28423],{},[179,28418,28419],{"align":165},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[179,28421,28422],{"align":165},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[179,28424,28425],{"align":165},"实现容器内图形显示。",[160,28427,28428,28431,28434],{},[179,28429,28430],{"align":165},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[179,28432,28433],{"align":165},"挂载X11认证文件（只读）",[179,28435,28436],{"align":165},"确保容器有权连接宿主机显示服务。",[160,28438,28439,28442,28445],{},[179,28440,28441],{"align":165},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[179,28443,28444],{"align":165},"挂载Wayland显示协议相关目录",[179,28446,28447],{"align":165},"支持Wayland协议的图形显示。",[160,28449,28450,28453,28456],{},[179,28451,28452],{"align":165},"–ulimit nofile=1024:524288",[179,28454,28455],{"align":165},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[179,28457,28458],{"align":165},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[160,28460,28461,28464,28467],{},[179,28462,28463],{"align":165},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[179,28465,28466],{"align":165},"挂载宿主机用户目录到容器内同名路径",[179,28468,28469],{"align":165},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[160,28471,28472,28475,28478],{},[179,28473,28474],{"align":165},"-w \u002Fhome\u002Ftungchiahui",[179,28476,28477],{"align":165},"设置容器启动后的默认工作目录",[179,28479,28480],{"align":165},"直接进入项目路径，方便执行命令2324。",[160,28482,28483,28486,28489],{},[179,28484,28485],{"align":165},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[179,28487,28488],{"align":165},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[179,28490,28491],{"align":165},"提供预配置的深度学习与机器人开发环境。",[15,28493,28494,28495,28497,28498,28501],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[34,28496,24998],{},"加不加",[34,28499,28500],{},"sudo -E","都无所谓。",[15,28503,28504,28505,28507,28508,28510,28511,28514,28515,28517],{},"用户已经被加到docker组了，不用",[34,28506,24998],{},"也行跑，其次，",[34,28509,24998],{},"运行的话，你的",[34,28512,28513],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[34,28516,28513],{},"更不可能变了。",[63,28519,28521],{"className":349,"code":28520,"language":351,"meta":68,"style":68},"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",[34,28522,28523,28536,28546,28556,28568,28575,28582,28589,28599,28608,28617,28631,28643,28655,28664,28674,28683,28698,28731,28758,28769,28776],{"__ignoreMap":68},[72,28524,28525,28527,28529,28531,28534],{"class":74,"line":75},[72,28526,24998],{"class":358},[72,28528,26742],{"class":366},[72,28530,27652],{"class":366},[72,28532,28533],{"class":362}," --name=ros_opencv_cuda",[72,28535,25100],{"class":362},[72,28537,28538,28541,28544],{"class":74,"line":370},[72,28539,28540],{"class":82},"--gpus ",[72,28542,28543],{"class":366},"all",[72,28545,25100],{"class":362},[72,28547,28548,28551,28554],{"class":74,"line":1608},[72,28549,28550],{"class":82},"-e ",[72,28552,28553],{"class":366},"NVIDIA_DRIVER_CAPABILITIES=all",[72,28555,25100],{"class":362},[72,28557,28558,28560,28563,28566],{"class":74,"line":1623},[72,28559,28550],{"class":82},[72,28561,28562],{"class":366},"DISPLAY=",[72,28564,28565],{"class":82},"$DISPLAY ",[72,28567,26597],{"class":362},[72,28569,28570,28573],{"class":74,"line":1629},[72,28571,28572],{"class":82},"-dit ",[72,28574,26597],{"class":362},[72,28576,28577,28580],{"class":74,"line":1643},[72,28578,28579],{"class":82},"--privileged ",[72,28581,26597],{"class":362},[72,28583,28584,28587],{"class":74,"line":1649},[72,28585,28586],{"class":82},"--net=host ",[72,28588,26597],{"class":362},[72,28590,28591,28594,28597],{"class":74,"line":1740},[72,28592,28593],{"class":82},"--group-add ",[72,28595,28596],{"class":366},"audio",[72,28598,25100],{"class":362},[72,28600,28601,28603,28606],{"class":74,"line":1746},[72,28602,28593],{"class":82},[72,28604,28605],{"class":366},"video",[72,28607,25100],{"class":362},[72,28609,28610,28612,28615],{"class":74,"line":1758},[72,28611,28593],{"class":82},[72,28613,28614],{"class":366},"dialout",[72,28616,25100],{"class":362},[72,28618,28619,28621,28624,28626,28629],{"class":74,"line":2041},[72,28620,28550],{"class":82},[72,28622,28623],{"class":366},"XAUTHORITY=",[72,28625,28513],{"class":82},[72,28627,28628],{"class":366},"\u002F.Xauthority",[72,28630,25100],{"class":362},[72,28632,28633,28635,28638,28641],{"class":74,"line":2046},[72,28634,28550],{"class":82},[72,28636,28637],{"class":366},"WAYLAND_DISPLAY=",[72,28639,28640],{"class":82},"$WAYLAND_DISPLAY ",[72,28642,26597],{"class":362},[72,28644,28645,28647,28650,28653],{"class":74,"line":2052},[72,28646,28550],{"class":82},[72,28648,28649],{"class":366},"XDG_RUNTIME_DIR=",[72,28651,28652],{"class":82},"$XDG_RUNTIME_DIR ",[72,28654,26597],{"class":362},[72,28656,28657,28659,28662],{"class":74,"line":2057},[72,28658,28550],{"class":82},[72,28660,28661],{"class":366},"QT_QPA_PLATFORM=xcb",[72,28663,25100],{"class":362},[72,28665,28666,28669,28672],{"class":74,"line":2071},[72,28667,28668],{"class":82},"-v ",[72,28670,28671],{"class":366},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[72,28673,25100],{"class":362},[72,28675,28676,28678,28681],{"class":74,"line":2076},[72,28677,28668],{"class":82},[72,28679,28680],{"class":366},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[72,28682,25100],{"class":362},[72,28684,28685,28688,28691,28693,28696],{"class":74,"line":2082},[72,28686,28687],{"class":82},"-v $HOME",[72,28689,28690],{"class":366},"\u002F.Xauthority:",[72,28692,28513],{"class":82},[72,28694,28695],{"class":366},"\u002F.Xauthority:ro",[72,28697,25100],{"class":362},[72,28699,28700,28702,28705,28707,28710,28713,28715,28718,28720,28722,28724,28726,28729],{"class":74,"line":2103},[72,28701,28668],{"class":82},[72,28703,28704],{"class":366},"\u002Frun\u002Fuser\u002F",[72,28706,25521],{"class":82},[72,28708,28709],{"class":358},"id",[72,28711,28712],{"class":362}," -u",[72,28714,983],{"class":82},[72,28716,28717],{"class":366},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[72,28719,25521],{"class":82},[72,28721,28709],{"class":358},[72,28723,28712],{"class":362},[72,28725,983],{"class":82},[72,28727,28728],{"class":366},"\u002Fwayland-0",[72,28730,25100],{"class":362},[72,28732,28733,28735,28737,28739,28741,28743,28745,28748,28750,28752,28754,28756],{"class":74,"line":2108},[72,28734,28668],{"class":82},[72,28736,28704],{"class":366},[72,28738,25521],{"class":82},[72,28740,28709],{"class":358},[72,28742,28712],{"class":362},[72,28744,983],{"class":82},[72,28746,28747],{"class":366},":\u002Frun\u002Fuser\u002F",[72,28749,25521],{"class":82},[72,28751,28709],{"class":358},[72,28753,28712],{"class":362},[72,28755,14140],{"class":82},[72,28757,26597],{"class":362},[72,28759,28760,28762,28764,28767],{"class":74,"line":2122},[72,28761,28687],{"class":82},[72,28763,1413],{"class":366},[72,28765,28766],{"class":82},"$HOME ",[72,28768,26597],{"class":362},[72,28770,28771,28774],{"class":74,"line":2127},[72,28772,28773],{"class":82},"-w $HOME ",[72,28775,26597],{"class":362},[72,28777,28778],{"class":74,"line":2156},[72,28779,28780],{"class":82},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[15,28782,9451],{},[22,28784,28785,28793,28796,28799],{},[25,28786,28787,14221,28789,28792],{},[34,28788,28553],{},[34,28790,28791],{},"--gpus all","没有英伟达显卡请注释。",[25,28794,28795],{},"--name后面请自己为容器起名。",[25,28797,28798],{},"最后一行仓库名称请你自己找对应的镜像填上。",[25,28800,28801,28802,28807],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[23978,28803,28804],{},[707,28805,28806],{},"请不要加","。",[63,28809,28811],{"className":349,"code":28810,"language":351,"meta":68,"style":68},"--ulimit nofile=1024:524288 \\\n",[34,28812,28813],{"__ignoreMap":68},[72,28814,28815,28818,28821],{"class":74,"line":75},[72,28816,28817],{"class":358},"--ulimit",[72,28819,28820],{"class":366}," nofile=1024:524288",[72,28822,25100],{"class":362},[15,28824,28825,28826,28831],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[23978,28827,28828],{},[707,28829,28830],{},"不建议","**.**",[63,28833,28835],{"className":349,"code":28834,"language":351,"meta":68,"style":68},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[34,28836,28837,28864,28873],{"__ignoreMap":68},[72,28838,28839,28842,28845,28847,28849,28851,28853,28855,28857,28860,28862],{"class":74,"line":75},[72,28840,28841],{"class":358},"--user",[72,28843,28844],{"class":82}," $(",[72,28846,28709],{"class":358},[72,28848,28712],{"class":362},[72,28850,983],{"class":82},[72,28852,1413],{"class":366},[72,28854,25521],{"class":82},[72,28856,28709],{"class":358},[72,28858,28859],{"class":362}," -g",[72,28861,14140],{"class":82},[72,28863,26597],{"class":362},[72,28865,28866,28868,28871],{"class":74,"line":370},[72,28867,28668],{"class":82},[72,28869,28870],{"class":366},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[72,28872,25100],{"class":362},[72,28874,28875,28877,28880],{"class":74,"line":1608},[72,28876,28668],{"class":82},[72,28878,28879],{"class":366},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[72,28881,25100],{"class":362},[473,28883,28884],{},"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":68,"searchDepth":370,"depth":370,"links":28886},[28887,28888,28889],{"id":27885,"depth":1608,"text":27886},{"id":27895,"depth":1608,"text":27896},{"id":28306,"depth":1608,"text":28309},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27877,"description":68},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28896,"title":28897,"body":28898,"description":68,"extension":487,"meta":30520,"navigation":490,"path":30521,"seo":30522,"stem":30523,"__hash__":30524},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":28899,"toc":30515},[28900,28903,28907,28910,29132,29136,29140,29143,29249,29254,29257,29262,29265,29270,29273,29278,29281,29293,29296,29301,29308,29336,29343,29419,29424,29427,29450,29452,29527,29532,29535,29539,29547,29552,29557,29561,29572,29578,29581,29584,29608,29611,29614,29641,29644,29647,30112,30115,30120,30125,30129,30152,30157,30161,30165,30168,30171,30174,30201,30204,30207,30225,30228,30231,30253,30261,30266,30271,30275,30278,30281,30284,30287,30332,30335,30353,30356,30361,30364,30385,30388,30444,30447,30452,30456,30459,30466,30469,30472,30477,30480,30496,30499,30512],[10,28901,28897],{"id":28902},"_6手动创建docker镜像",[531,28904,28906],{"id":28905},"_61dockerfile","6.1.DockerFile",[15,28908,28909],{},"常用命令：",[154,28911,28912,28923],{},[157,28913,28914],{},[160,28915,28916,28919,28921],{},[163,28917,28918],{"align":165},"指令",[163,28920,26291],{"align":165},[163,28922,27914],{"align":165},[174,28924,28925,28935,28951,28962,28973,28984,28995,29006,29017,29031,29045,29056,29070,29081,29092,29106,29121],{},[160,28926,28927,28929,28932],{},[179,28928,27792],{"align":165},[179,28930,28931],{"align":165},"指定基础镜像，是 Dockerfile 的起点",[179,28933,28934],{"align":165},"FROM ubuntu:22.04",[160,28936,28937,28940,28943],{},[179,28938,28939],{"align":165},"LABEL",[179,28941,28942],{"align":165},"添加元数据（如作者、版本等）",[179,28944,28945,28946,28950],{"align":165},"LABEL maintainer=”",[257,28947,28949],{"href":28948},"mailto:you@example.com","you@example.com","”",[160,28952,28953,28956,28959],{},[179,28954,28955],{"align":165},"ENV",[179,28957,28958],{"align":165},"设置环境变量",[179,28960,28961],{"align":165},"ENV PORT=8080",[160,28963,28964,28967,28970],{},[179,28965,28966],{"align":165},"ARG",[179,28968,28969],{"align":165},"构建参数，只在构建期间可用",[179,28971,28972],{"align":165},"ARG VERSION=1.0",[160,28974,28975,28978,28981],{},[179,28976,28977],{"align":165},"RUN",[179,28979,28980],{"align":165},"构建镜像时运行命令",[179,28982,28983],{"align":165},"RUN apt-get update && apt-get install -y curl",[160,28985,28986,28989,28992],{},[179,28987,28988],{"align":165},"COPY",[179,28990,28991],{"align":165},"复制文件到镜像中",[179,28993,28994],{"align":165},"COPY . \u002Fapp",[160,28996,28997,29000,29003],{},[179,28998,28999],{"align":165},"ADD",[179,29001,29002],{"align":165},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[179,29004,29005],{"align":165},"ADD archive.tar.gz \u002Fdata\u002F",[160,29007,29008,29011,29014],{},[179,29009,29010],{"align":165},"WORKDIR",[179,29012,29013],{"align":165},"设置工作目录",[179,29015,29016],{"align":165},"WORKDIR \u002Fopt",[160,29018,29019,29022,29025],{},[179,29020,29021],{"align":165},"CMD",[179,29023,29024],{"align":165},"设置容器启动时默认命令（可被 docker run 覆盖）",[179,29026,29027,29028],{"align":165},"CMD ",[72,29029,29030],{},"“node”, “index.js”",[160,29032,29033,29036,29039],{},[179,29034,29035],{"align":165},"ENTRYPOINT",[179,29037,29038],{"align":165},"设置容器启动时固定命令（通常用于 CLI 工具等）",[179,29040,29041,29042],{"align":165},"ENTRYPOINT ",[72,29043,29044],{},"“python3”",[160,29046,29047,29050,29053],{},[179,29048,29049],{"align":165},"EXPOSE",[179,29051,29052],{"align":165},"声明镜像内服务监听的端口（不会自动映射）",[179,29054,29055],{"align":165},"EXPOSE 80",[160,29057,29058,29061,29064],{},[179,29059,29060],{"align":165},"VOLUME",[179,29062,29063],{"align":165},"声明数据卷挂载点",[179,29065,29066,29067],{"align":165},"VOLUME ",[72,29068,29069],{},"“\u002Fdata”",[160,29071,29072,29075,29078],{},[179,29073,29074],{"align":165},"USER",[179,29076,29077],{"align":165},"设置后续命令执行的用户",[179,29079,29080],{"align":165},"USER appuser",[160,29082,29083,29086,29089],{},[179,29084,29085],{"align":165},"ONBUILD",[179,29087,29088],{"align":165},"当镜像作为其他镜像基础镜像时触发的构建指令",[179,29090,29091],{"align":165},"ONBUILD COPY . \u002Fsrc",[160,29093,29094,29097,29100],{},[179,29095,29096],{"align":165},"SHELL",[179,29098,29099],{"align":165},"更改默认 shell，比如将 sh -c 改为 bash -c",[179,29101,29102,29103],{"align":165},"SHELL ",[72,29104,29105],{},"“\u002Fbin\u002Fbash”, “-c”",[160,29107,29108,29111,29114],{},[179,29109,29110],{"align":165},"HEALTHCHECK",[179,29112,29113],{"align":165},"定义容器运行时的健康检查命令",[179,29115,29116,29117],{"align":165},"`HEALTHCHECK CMD curl –fail ",[257,29118,29119],{"href":29119,"rel":29120},"http:\u002F\u002Flocalhost:8080",[261],[160,29122,29123,29126,29129],{},[179,29124,29125],{"align":165},"STOPSIGNAL",[179,29127,29128],{"align":165},"容器停止时发送的信号",[179,29130,29131],{"align":165},"STOPSIGNAL SIGKILL",[531,29133,29135],{"id":29134},"_62自己创建容器","6.2.自己创建容器",[22423,29137,29139],{"id":29138},"_621手动创建","6.2.1.手动创建",[15,29141,29142],{},"在x86电脑上编译x86的：",[63,29144,29146],{"className":349,"code":29145,"language":351,"meta":68,"style":68},"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",[34,29147,29148,29164,29168,29181,29185,29198,29202,29215,29219,29232,29236],{"__ignoreMap":68},[72,29149,29150,29152,29155,29158,29161],{"class":74,"line":75},[72,29151,26975],{"class":358},[72,29153,29154],{"class":366}," build",[72,29156,29157],{"class":362}," -t",[72,29159,29160],{"class":366}," ros-melodic-cuda118-cudnn8-bionic:latest",[72,29162,29163],{"class":366}," .\n",[72,29165,29166],{"class":74,"line":370},[72,29167,2828],{"emptyLinePlaceholder":490},[72,29169,29170,29172,29174,29176,29179],{"class":74,"line":1608},[72,29171,26975],{"class":358},[72,29173,29154],{"class":366},[72,29175,29157],{"class":362},[72,29177,29178],{"class":366}," ros-noetic-focal:latest",[72,29180,29163],{"class":366},[72,29182,29183],{"class":74,"line":1623},[72,29184,2828],{"emptyLinePlaceholder":490},[72,29186,29187,29189,29191,29193,29196],{"class":74,"line":1629},[72,29188,26975],{"class":358},[72,29190,29154],{"class":366},[72,29192,29157],{"class":362},[72,29194,29195],{"class":366}," ros-humble-jammy:latest",[72,29197,29163],{"class":366},[72,29199,29200],{"class":74,"line":1643},[72,29201,2828],{"emptyLinePlaceholder":490},[72,29203,29204,29206,29208,29210,29213],{"class":74,"line":1649},[72,29205,26975],{"class":358},[72,29207,29154],{"class":366},[72,29209,29157],{"class":362},[72,29211,29212],{"class":366}," ros-jazzy-noble:latest",[72,29214,29163],{"class":366},[72,29216,29217],{"class":74,"line":1740},[72,29218,2828],{"emptyLinePlaceholder":490},[72,29220,29221,29223,29225,29227,29230],{"class":74,"line":1746},[72,29222,26975],{"class":358},[72,29224,29154],{"class":366},[72,29226,29157],{"class":362},[72,29228,29229],{"class":366}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[72,29231,29163],{"class":366},[72,29233,29234],{"class":74,"line":1758},[72,29235,2828],{"emptyLinePlaceholder":490},[72,29237,29238,29240,29242,29244,29247],{"class":74,"line":2041},[72,29239,26975],{"class":358},[72,29241,29154],{"class":366},[72,29243,29157],{"class":362},[72,29245,29246],{"class":366}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[72,29248,29163],{"class":366},[15,29250,29251],{},[1891,29252],{"alt":68,"src":29253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[15,29255,29256],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[15,29258,29259],{},[1891,29260],{"alt":68,"src":29261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[15,29263,29264],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[22,29266,29267],{},[25,29268,29269],{},"创建 Docker Hub 账户",[15,29271,29272],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[22,29274,29275],{"start":370},[25,29276,29277],{},"登录 Docker Hub",[15,29279,29280],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[63,29282,29284],{"className":349,"code":29283,"language":351,"meta":68,"style":68},"docker login\n",[34,29285,29286],{"__ignoreMap":68},[72,29287,29288,29290],{"class":74,"line":75},[72,29289,26975],{"class":358},[72,29291,29292],{"class":366}," login\n",[15,29294,29295],{},"输入你的 Docker Hub 用户名和密码进行验证。",[22,29297,29298],{},[25,29299,29300],{},"为你的镜像打标签",[15,29302,29303,29304,29307],{},"Docker Hub 使用 ",[34,29305,29306],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[63,29309,29311],{"className":349,"code":29310,"language":351,"meta":68,"style":68},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[34,29312,29313],{"__ignoreMap":68},[72,29314,29315,29317,29320,29322,29325,29328,29331,29333],{"class":74,"line":75},[72,29316,26975],{"class":358},[72,29318,29319],{"class":366}," tag",[72,29321,29212],{"class":366},[72,29323,29324],{"class":78}," \u003C",[72,29326,29327],{"class":366},"你的用户",[72,29329,29330],{"class":82},"名",[72,29332,1514],{"class":78},[72,29334,29335],{"class":366},"\u002Fros-jazzy-noble:latest\n",[15,29337,29338,29339,29342],{},"例如，如果你的 Docker Hub 用户名是 ",[34,29340,29341],{},"tungchiahui","，你应该执行：",[63,29344,29346],{"className":349,"code":29345,"language":351,"meta":68,"style":68},"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",[34,29347,29348,29359,29363,29374,29378,29389,29393,29404,29408],{"__ignoreMap":68},[72,29349,29350,29352,29354,29356],{"class":74,"line":75},[72,29351,26975],{"class":358},[72,29353,29319],{"class":366},[72,29355,29178],{"class":366},[72,29357,29358],{"class":366}," tungchiahui\u002Fros-noetic-focal:latest\n",[72,29360,29361],{"class":74,"line":370},[72,29362,2828],{"emptyLinePlaceholder":490},[72,29364,29365,29367,29369,29371],{"class":74,"line":1608},[72,29366,26975],{"class":358},[72,29368,29319],{"class":366},[72,29370,29195],{"class":366},[72,29372,29373],{"class":366}," tungchiahui\u002Fros-humble-jammy:latest\n",[72,29375,29376],{"class":74,"line":1623},[72,29377,2828],{"emptyLinePlaceholder":490},[72,29379,29380,29382,29384,29386],{"class":74,"line":1629},[72,29381,26975],{"class":358},[72,29383,29319],{"class":366},[72,29385,29212],{"class":366},[72,29387,29388],{"class":366}," tungchiahui\u002Fros-jazzy-noble:latest\n",[72,29390,29391],{"class":74,"line":1643},[72,29392,2828],{"emptyLinePlaceholder":490},[72,29394,29395,29397,29399,29401],{"class":74,"line":1649},[72,29396,26975],{"class":358},[72,29398,29319],{"class":366},[72,29400,29229],{"class":366},[72,29402,29403],{"class":366}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[72,29405,29406],{"class":74,"line":1740},[72,29407,2828],{"emptyLinePlaceholder":490},[72,29409,29410,29412,29414,29416],{"class":74,"line":1746},[72,29411,26975],{"class":358},[72,29413,29319],{"class":366},[72,29415,29246],{"class":366},[72,29417,29418],{"class":366}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[22,29420,29421],{"start":370},[25,29422,29423],{},"推送镜像到 Docker Hub",[15,29425,29426],{},"使用以下命令将镜像推送到 Docker Hub：",[63,29428,29430],{"className":349,"code":29429,"language":351,"meta":68,"style":68},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[34,29431,29432],{"__ignoreMap":68},[72,29433,29434,29436,29439,29441,29443,29445,29447],{"class":74,"line":75},[72,29435,26975],{"class":358},[72,29437,29438],{"class":366}," push",[72,29440,29324],{"class":78},[72,29442,29327],{"class":366},[72,29444,29330],{"class":82},[72,29446,1514],{"class":78},[72,29448,29449],{"class":366},"\u002Fros-noetic-jazzy-noble:latest\n",[15,29451,15059],{},[63,29453,29455],{"className":349,"code":29454,"language":351,"meta":68,"style":68},"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",[34,29456,29457,29465,29469,29477,29481,29489,29493,29502,29506,29514,29518],{"__ignoreMap":68},[72,29458,29459,29461,29463],{"class":74,"line":75},[72,29460,26975],{"class":358},[72,29462,29438],{"class":366},[72,29464,29358],{"class":366},[72,29466,29467],{"class":74,"line":370},[72,29468,2828],{"emptyLinePlaceholder":490},[72,29470,29471,29473,29475],{"class":74,"line":1608},[72,29472,26975],{"class":358},[72,29474,29438],{"class":366},[72,29476,29373],{"class":366},[72,29478,29479],{"class":74,"line":1623},[72,29480,2828],{"emptyLinePlaceholder":490},[72,29482,29483,29485,29487],{"class":74,"line":1629},[72,29484,26975],{"class":358},[72,29486,29438],{"class":366},[72,29488,29388],{"class":366},[72,29490,29491],{"class":74,"line":1643},[72,29492,2828],{"emptyLinePlaceholder":490},[72,29494,29495,29497,29499],{"class":74,"line":1649},[72,29496,26975],{"class":358},[72,29498,29438],{"class":366},[72,29500,29501],{"class":366}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[72,29503,29504],{"class":74,"line":1740},[72,29505,2828],{"emptyLinePlaceholder":490},[72,29507,29508,29510,29512],{"class":74,"line":1746},[72,29509,26975],{"class":358},[72,29511,29438],{"class":366},[72,29513,29418],{"class":366},[72,29515,29516],{"class":74,"line":1758},[72,29517,2828],{"emptyLinePlaceholder":490},[72,29519,29520,29522,29524],{"class":74,"line":2041},[72,29521,26975],{"class":358},[72,29523,29438],{"class":366},[72,29525,29526],{"class":366}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[22,29528,29529],{"start":1608},[25,29530,29531],{},"验证推送成功",[15,29533,29534],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[15,29536,29537],{},[707,29538,4212],{},[251,29540,29541,29544],{},[25,29542,29543],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[25,29545,29546],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[15,29548,29549],{},[1891,29550],{"alt":68,"src":29551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[15,29553,29554],{},[1891,29555],{"alt":68,"src":29556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[22423,29558,29560],{"id":29559},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[15,29562,29563,29564,29567,29568,29571],{},"如果您想在 ",[707,29565,29566],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[707,29569,29570],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[15,29573,29574,29575],{},"1. ",[707,29576,29577],{},"启用 Docker 跨平台构建",[15,29579,29580],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[15,29582,29583],{},"第一步：启用 buildx（只需执行一次）",[63,29585,29587],{"className":349,"code":29586,"language":351,"meta":68,"style":68},"docker buildx create --name multiarch_builder --use\n",[34,29588,29589],{"__ignoreMap":68},[72,29590,29591,29593,29596,29599,29602,29605],{"class":74,"line":75},[72,29592,26975],{"class":358},[72,29594,29595],{"class":366}," buildx",[72,29597,29598],{"class":366}," create",[72,29600,29601],{"class":362}," --name",[72,29603,29604],{"class":366}," multiarch_builder",[72,29606,29607],{"class":362}," --use\n",[15,29609,29610],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[15,29612,29613],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[63,29615,29617],{"className":349,"code":29616,"language":351,"meta":68,"style":68},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[34,29618,29619],{"__ignoreMap":68},[72,29620,29621,29623,29625,29627,29630,29633,29636,29638],{"class":74,"line":75},[72,29622,26975],{"class":358},[72,29624,27652],{"class":366},[72,29626,27655],{"class":362},[72,29628,29629],{"class":362}," --privileged",[72,29631,29632],{"class":366}," multiarch\u002Fqemu-user-static",[72,29634,29635],{"class":362}," --reset",[72,29637,363],{"class":362},[72,29639,29640],{"class":366}," yes\n",[15,29642,29643],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[15,29645,29646],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[63,29648,29650],{"className":349,"code":29649,"language":351,"meta":68,"style":68},"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",[34,29651,29652,29694,29698,29703,29713,29723,29732,29738,29742,29746,29756,29764,29773,29779,29783,29787,29797,29805,29814,29820,29824,29828,29838,29846,29855,29861,29865,29869,29879,29887,29896,29902,29906,29910,29920,29928,29937,29943,29947,29951,29961,29969,29978,29984,29988,29992,30002,30010,30019,30025,30029,30033,30043,30051,30060,30066,30070,30074,30085,30093,30102,30108],{"__ignoreMap":68},[72,29653,29654,29656,29658,29660,29663,29666,29668,29670,29673,29675,29677,29679,29681,29684,29687,29689,29692],{"class":74,"line":75},[72,29655,26975],{"class":358},[72,29657,29595],{"class":366},[72,29659,29154],{"class":366},[72,29661,29662],{"class":362}," --platform",[72,29664,29665],{"class":366}," linux\u002Famd64,linux\u002Farm64",[72,29667,29157],{"class":362},[72,29669,29324],{"class":78},[72,29671,29672],{"class":366},"你的镜像",[72,29674,29330],{"class":82},[72,29676,1514],{"class":78},[72,29678,1413],{"class":366},[72,29680,1464],{"class":78},[72,29682,29683],{"class":366},"标",[72,29685,29686],{"class":82},"签",[72,29688,1514],{"class":78},[72,29690,29691],{"class":362}," --push",[72,29693,29163],{"class":366},[72,29695,29696],{"class":74,"line":370},[72,29697,2828],{"emptyLinePlaceholder":490},[72,29699,29700],{"class":74,"line":1608},[72,29701,29702],{"class":621},"# 例子：\n",[72,29704,29705,29707,29709,29711],{"class":74,"line":1623},[72,29706,26975],{"class":358},[72,29708,29595],{"class":366},[72,29710,29154],{"class":366},[72,29712,25100],{"class":362},[72,29714,29715,29718,29721],{"class":74,"line":1629},[72,29716,29717],{"class":82},"--platform ",[72,29719,29720],{"class":366},"linux\u002Famd64,linux\u002Farm64",[72,29722,25100],{"class":362},[72,29724,29725,29727,29730],{"class":74,"line":1643},[72,29726,29157],{"class":362},[72,29728,29729],{"class":366}," tungchiahui\u002Fros:noetic-focal",[72,29731,25100],{"class":362},[72,29733,29734,29736],{"class":74,"line":1649},[72,29735,29691],{"class":362},[72,29737,25100],{"class":362},[72,29739,29740],{"class":74,"line":1740},[72,29741,29163],{"class":366},[72,29743,29744],{"class":74,"line":1746},[72,29745,2828],{"emptyLinePlaceholder":490},[72,29747,29748,29750,29752,29754],{"class":74,"line":1758},[72,29749,26975],{"class":358},[72,29751,29595],{"class":366},[72,29753,29154],{"class":366},[72,29755,25100],{"class":362},[72,29757,29758,29760,29762],{"class":74,"line":2041},[72,29759,29717],{"class":82},[72,29761,29720],{"class":366},[72,29763,25100],{"class":362},[72,29765,29766,29768,29771],{"class":74,"line":2046},[72,29767,29157],{"class":362},[72,29769,29770],{"class":366}," tungchiahui\u002Fros:humble-jammy",[72,29772,25100],{"class":362},[72,29774,29775,29777],{"class":74,"line":2052},[72,29776,29691],{"class":362},[72,29778,25100],{"class":362},[72,29780,29781],{"class":74,"line":2057},[72,29782,29163],{"class":366},[72,29784,29785],{"class":74,"line":2071},[72,29786,2828],{"emptyLinePlaceholder":490},[72,29788,29789,29791,29793,29795],{"class":74,"line":2076},[72,29790,26975],{"class":358},[72,29792,29595],{"class":366},[72,29794,29154],{"class":366},[72,29796,25100],{"class":362},[72,29798,29799,29801,29803],{"class":74,"line":2082},[72,29800,29717],{"class":82},[72,29802,29720],{"class":366},[72,29804,25100],{"class":362},[72,29806,29807,29809,29812],{"class":74,"line":2103},[72,29808,29157],{"class":362},[72,29810,29811],{"class":366}," tungchiahui\u002Fros:jazzy-noble",[72,29813,25100],{"class":362},[72,29815,29816,29818],{"class":74,"line":2108},[72,29817,29691],{"class":362},[72,29819,25100],{"class":362},[72,29821,29822],{"class":74,"line":2122},[72,29823,29163],{"class":366},[72,29825,29826],{"class":74,"line":2127},[72,29827,2828],{"emptyLinePlaceholder":490},[72,29829,29830,29832,29834,29836],{"class":74,"line":2156},[72,29831,26742],{"class":358},[72,29833,29595],{"class":366},[72,29835,29154],{"class":366},[72,29837,25100],{"class":362},[72,29839,29840,29842,29844],{"class":74,"line":2161},[72,29841,29717],{"class":82},[72,29843,29720],{"class":366},[72,29845,25100],{"class":362},[72,29847,29848,29850,29853],{"class":74,"line":2178},[72,29849,29157],{"class":362},[72,29851,29852],{"class":366}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[72,29854,25100],{"class":362},[72,29856,29857,29859],{"class":74,"line":2183},[72,29858,29691],{"class":362},[72,29860,25100],{"class":362},[72,29862,29863],{"class":74,"line":2188},[72,29864,29163],{"class":366},[72,29866,29867],{"class":74,"line":2193},[72,29868,2828],{"emptyLinePlaceholder":490},[72,29870,29871,29873,29875,29877],{"class":74,"line":2207},[72,29872,26975],{"class":358},[72,29874,29595],{"class":366},[72,29876,29154],{"class":366},[72,29878,25100],{"class":362},[72,29880,29881,29883,29885],{"class":74,"line":2212},[72,29882,29717],{"class":82},[72,29884,29720],{"class":366},[72,29886,25100],{"class":362},[72,29888,29889,29891,29894],{"class":74,"line":3005},[72,29890,29157],{"class":362},[72,29892,29893],{"class":366}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[72,29895,25100],{"class":362},[72,29897,29898,29900],{"class":74,"line":3019},[72,29899,29691],{"class":362},[72,29901,25100],{"class":362},[72,29903,29904],{"class":74,"line":3027},[72,29905,29163],{"class":366},[72,29907,29908],{"class":74,"line":3032},[72,29909,2828],{"emptyLinePlaceholder":490},[72,29911,29912,29914,29916,29918],{"class":74,"line":3038},[72,29913,26742],{"class":358},[72,29915,29595],{"class":366},[72,29917,29154],{"class":366},[72,29919,25100],{"class":362},[72,29921,29922,29924,29926],{"class":74,"line":3044},[72,29923,29717],{"class":82},[72,29925,29720],{"class":366},[72,29927,25100],{"class":362},[72,29929,29930,29932,29935],{"class":74,"line":3049},[72,29931,29157],{"class":362},[72,29933,29934],{"class":366}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[72,29936,25100],{"class":362},[72,29938,29939,29941],{"class":74,"line":8374},[72,29940,29691],{"class":362},[72,29942,25100],{"class":362},[72,29944,29945],{"class":74,"line":8398},[72,29946,29163],{"class":366},[72,29948,29949],{"class":74,"line":8403},[72,29950,2828],{"emptyLinePlaceholder":490},[72,29952,29953,29955,29957,29959],{"class":74,"line":8409},[72,29954,26975],{"class":358},[72,29956,29595],{"class":366},[72,29958,29154],{"class":366},[72,29960,25100],{"class":362},[72,29962,29963,29965,29967],{"class":74,"line":8436},[72,29964,29717],{"class":82},[72,29966,29720],{"class":366},[72,29968,25100],{"class":362},[72,29970,29971,29973,29976],{"class":74,"line":8441},[72,29972,29157],{"class":362},[72,29974,29975],{"class":366}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[72,29977,25100],{"class":362},[72,29979,29980,29982],{"class":74,"line":8447},[72,29981,29691],{"class":362},[72,29983,25100],{"class":362},[72,29985,29986],{"class":74,"line":8459},[72,29987,29163],{"class":366},[72,29989,29990],{"class":74,"line":8471},[72,29991,2828],{"emptyLinePlaceholder":490},[72,29993,29994,29996,29998,30000],{"class":74,"line":8483},[72,29995,26975],{"class":358},[72,29997,29595],{"class":366},[72,29999,29154],{"class":366},[72,30001,25100],{"class":362},[72,30003,30004,30006,30008],{"class":74,"line":10142},[72,30005,29717],{"class":82},[72,30007,29720],{"class":366},[72,30009,25100],{"class":362},[72,30011,30012,30014,30017],{"class":74,"line":10167},[72,30013,29157],{"class":362},[72,30015,30016],{"class":366}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[72,30018,25100],{"class":362},[72,30020,30021,30023],{"class":74,"line":10190},[72,30022,29691],{"class":362},[72,30024,25100],{"class":362},[72,30026,30027],{"class":74,"line":10214},[72,30028,29163],{"class":366},[72,30030,30031],{"class":74,"line":10219},[72,30032,2828],{"emptyLinePlaceholder":490},[72,30034,30035,30037,30039,30041],{"class":74,"line":10224},[72,30036,26742],{"class":358},[72,30038,29595],{"class":366},[72,30040,29154],{"class":366},[72,30042,25100],{"class":362},[72,30044,30045,30047,30049],{"class":74,"line":10229},[72,30046,29717],{"class":82},[72,30048,29720],{"class":366},[72,30050,25100],{"class":362},[72,30052,30053,30055,30058],{"class":74,"line":10238},[72,30054,29157],{"class":362},[72,30056,30057],{"class":366}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[72,30059,25100],{"class":362},[72,30061,30062,30064],{"class":74,"line":10243},[72,30063,29691],{"class":362},[72,30065,25100],{"class":362},[72,30067,30068],{"class":74,"line":10249},[72,30069,29163],{"class":366},[72,30071,30072],{"class":74,"line":10270},[72,30073,2828],{"emptyLinePlaceholder":490},[72,30075,30076,30079,30081,30083],{"class":74,"line":10276},[72,30077,30078],{"class":358},"  docker",[72,30080,29595],{"class":366},[72,30082,29154],{"class":366},[72,30084,25100],{"class":362},[72,30086,30087,30089,30091],{"class":74,"line":10290},[72,30088,29717],{"class":82},[72,30090,29720],{"class":366},[72,30092,25100],{"class":362},[72,30094,30095,30097,30100],{"class":74,"line":10296},[72,30096,29157],{"class":362},[72,30098,30099],{"class":366}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[72,30101,25100],{"class":362},[72,30103,30104,30106],{"class":74,"line":10323},[72,30105,29691],{"class":362},[72,30107,25100],{"class":362},[72,30109,30110],{"class":74,"line":10332},[72,30111,29163],{"class":366},[15,30113,30114],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[15,30116,30117],{},[1891,30118],{"alt":68,"src":30119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[15,30121,30122],{},[1891,30123],{"alt":68,"src":30124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[22423,30126,30128],{"id":30127},"_623清除构建缓存","6.2.3.清除构建缓存",[63,30130,30132],{"className":349,"code":30131,"language":351,"meta":68,"style":68},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[34,30133,30134,30139],{"__ignoreMap":68},[72,30135,30136],{"class":74,"line":75},[72,30137,30138],{"class":621},"# 清理BuildKit构建缓存\n",[72,30140,30141,30143,30146,30149],{"class":74,"line":370},[72,30142,26975],{"class":358},[72,30144,30145],{"class":366}," builder",[72,30147,30148],{"class":366}," prune",[72,30150,30151],{"class":362}," -f\n",[15,30153,30154],{},[1891,30155],{"alt":68,"src":30156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[531,30158,30160],{"id":30159},"_63补充","6.3.补充",[22423,30162,30164],{"id":30163},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[15,30166,30167],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[15,30169,30170],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[15,30172,30173],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[63,30175,30177],{"className":349,"code":30176,"language":351,"meta":68,"style":68},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[34,30178,30179,30186],{"__ignoreMap":68},[72,30180,30181,30183],{"class":74,"line":75},[72,30182,27792],{"class":358},[72,30184,30185],{"class":366}," nginx\n",[72,30187,30188,30190,30193,30196,30198],{"class":74,"line":370},[72,30189,28977],{"class":358},[72,30191,30192],{"class":366}," echo",[72,30194,30195],{"class":366}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[72,30197,26644],{"class":78},[72,30199,30200],{"class":366}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[15,30202,30203],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[15,30205,30206],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[63,30208,30210],{"className":349,"code":30209,"language":351,"meta":68,"style":68},"docker build -t nginx:tuling .\n",[34,30211,30212],{"__ignoreMap":68},[72,30213,30214,30216,30218,30220,30223],{"class":74,"line":75},[72,30215,26975],{"class":358},[72,30217,29154],{"class":366},[72,30219,29157],{"class":362},[72,30221,30222],{"class":366}," nginx:tuling",[72,30224,29163],{"class":366},[15,30226,30227],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[15,30229,30230],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[63,30232,30234],{"className":349,"code":30233,"language":351,"meta":68,"style":68},"docker run -d -p 92:80 nginx:tuling\n",[34,30235,30236],{"__ignoreMap":68},[72,30237,30238,30240,30242,30245,30247,30250],{"class":74,"line":75},[72,30239,26975],{"class":358},[72,30241,27652],{"class":366},[72,30243,30244],{"class":362}," -d",[72,30246,363],{"class":362},[72,30248,30249],{"class":366}," 92:80",[72,30251,30252],{"class":366}," nginx:tuling\n",[15,30254,30255,30256],{},"4、访问 ",[257,30257,30260],{"href":30258,"rel":30259},"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",[261],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[15,30262,30263],{},[1891,30264],{"alt":68,"src":30265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[15,30267,30268],{},[1891,30269],{"alt":68,"src":30270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[22423,30272,30274],{"id":30273},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[15,30276,30277],{},"只需要知道大体流程即可",[15,30279,30280],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[15,30282,30283],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[15,30285,30286],{},"2、在Dockerfile中添加以下内容",[63,30288,30290],{"className":26513,"code":30289,"language":26515,"meta":68,"style":68},"# 基于哪个镜像\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",[34,30291,30292,30297,30302,30307,30312,30317,30322,30327],{"__ignoreMap":68},[72,30293,30294],{"class":74,"line":75},[72,30295,30296],{},"# 基于哪个镜像\n",[72,30298,30299],{"class":74,"line":370},[72,30300,30301],{},"From java:8\n",[72,30303,30304],{"class":74,"line":1608},[72,30305,30306],{},"# 复制文件到容器\n",[72,30308,30309],{"class":74,"line":1623},[72,30310,30311],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[72,30313,30314],{"class":74,"line":1629},[72,30315,30316],{},"# 声明需要暴露的端口\n",[72,30318,30319],{"class":74,"line":1643},[72,30320,30321],{},"EXPOSE 8877\n",[72,30323,30324],{"class":74,"line":1649},[72,30325,30326],{},"# 配置容器启动后执行的命令\n",[72,30328,30329],{"class":74,"line":1740},[72,30330,30331],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[15,30333,30334],{},"3、使用docker build命令构建镜像",[63,30336,30338],{"className":349,"code":30337,"language":351,"meta":68,"style":68},"docker build -t tulingmall-member:0.0.5 .\n",[34,30339,30340],{"__ignoreMap":68},[72,30341,30342,30344,30346,30348,30351],{"class":74,"line":75},[72,30343,26975],{"class":358},[72,30345,29154],{"class":366},[72,30347,29157],{"class":362},[72,30349,30350],{"class":366}," tulingmall-member:0.0.5",[72,30352,29163],{"class":366},[15,30354,30355],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[15,30357,30358],{},[1891,30359],{"alt":68,"src":30360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[15,30362,30363],{},"4、启动镜像，加-d可在后台启动",[63,30365,30367],{"className":349,"code":30366,"language":351,"meta":68,"style":68},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[34,30368,30369],{"__ignoreMap":68},[72,30370,30371,30373,30375,30377,30379,30382],{"class":74,"line":75},[72,30372,26975],{"class":358},[72,30374,27652],{"class":366},[72,30376,30244],{"class":362},[72,30378,363],{"class":362},[72,30380,30381],{"class":366}," 8877:8877",[72,30383,30384],{"class":366}," tulingmall-member:0.0.5\n",[15,30386,30387],{},"加上JVM参数：",[63,30389,30391],{"className":349,"code":30390,"language":351,"meta":68,"style":68},"# --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",[34,30392,30393,30398,30413,30423,30432,30439],{"__ignoreMap":68},[72,30394,30395],{"class":74,"line":75},[72,30396,30397],{"class":621},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[72,30399,30400,30402,30404,30407,30409,30411],{"class":74,"line":370},[72,30401,26975],{"class":358},[72,30403,27652],{"class":366},[72,30405,30406],{"class":362},"  -d",[72,30408,363],{"class":362},[72,30410,30381],{"class":366},[72,30412,25100],{"class":362},[72,30414,30415,30417,30420],{"class":74,"line":1608},[72,30416,28550],{"class":82},[72,30418,30419],{"class":366},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[72,30421,30422],{"class":362},"  \\\n",[72,30424,30425,30427,30430],{"class":74,"line":1623},[72,30426,28550],{"class":82},[72,30428,30429],{"class":366},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[72,30431,30422],{"class":362},[72,30433,30434,30437],{"class":74,"line":1629},[72,30435,30436],{"class":82},"--cap-add=SYS_PTRACE  ",[72,30438,26597],{"class":362},[72,30440,30441],{"class":74,"line":1643},[72,30442,30443],{"class":82},"tulingmall-member:0.0.5\n",[15,30445,30446],{},"5、访问会员服务接口",[15,30448,30449],{},[1891,30450],{"alt":68,"src":30451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[22423,30453,30455],{"id":30454},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[15,30457,30458],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[15,30460,30461,30462],{},"阿里云docker镜像仓库：",[257,30463,30464],{"href":30464,"rel":30465},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[261],[15,30467,30468],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[15,30470,30471],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[15,30473,30474],{},[1891,30475],{"alt":68,"src":30476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[15,30478,30479],{},"要把镜像推送到镜像仓库",[63,30481,30483],{"className":349,"code":30482,"language":351,"meta":68,"style":68},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[34,30484,30485],{"__ignoreMap":68},[72,30486,30487,30489,30491,30493],{"class":74,"line":75},[72,30488,26975],{"class":358},[72,30490,29319],{"class":366},[72,30492,30350],{"class":366},[72,30494,30495],{"class":366}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[15,30497,30498],{},"最后将镜像推送到远程仓库",[63,30500,30502],{"className":349,"code":30501,"language":351,"meta":68,"style":68},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[34,30503,30504],{"__ignoreMap":68},[72,30505,30506,30508,30510],{"class":74,"line":75},[72,30507,26975],{"class":358},[72,30509,29438],{"class":366},[72,30511,30495],{"class":366},[473,30513,30514],{},"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":68,"searchDepth":370,"depth":370,"links":30516},[30517,30518,30519],{"id":28905,"depth":1608,"text":28906},{"id":29134,"depth":1608,"text":29135},{"id":30159,"depth":1608,"text":30160},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28897,"description":68},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30526,"title":30527,"body":30528,"description":68,"extension":487,"meta":30671,"navigation":490,"path":30672,"seo":30673,"stem":30674,"__hash__":30675},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30529,"toc":30669},[30530,30533,30538,30543,30546,30551,30556,30559,30564,30569,30572,30577,30580,30583,30586,30589,30592,30595,30615,30637,30640,30643,30663,30666],[10,30531,30527],{"id":30532},"_7vscode远程开发",[22,30534,30535],{},[25,30536,30537],{},"插件1：微软Docker工具",[15,30539,30540],{},[1891,30541],{"alt":68,"src":30542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[15,30544,30545],{},"docker扩展插件已经进化为container tools了，请安装container tools",[15,30547,30548],{},[1891,30549],{"alt":68,"src":30550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[22,30552,30553],{"start":370},[25,30554,30555],{},"插件2：微软Docker远程开发工具",[15,30557,30558],{},"下面这是远程开发的插件。",[15,30560,30561],{},[1891,30562],{"alt":68,"src":30563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[15,30565,30566],{},[1891,30567],{"alt":68,"src":30568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[15,30570,30571],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[15,30573,30574],{},[1891,30575],{"alt":68,"src":30576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[15,30578,30579],{},"安装完拓展之后，vscode进行链接：",[15,30581,30582],{},"1.按ctrl+shift+p",[15,30584,30585],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[15,30587,30588],{},"3.选择目前运行的容器",[15,30590,30591],{},"4.VS Code 会在新窗口中打开并连接到容器",[15,30593,30594],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[63,30596,30598],{"className":349,"code":30597,"language":351,"meta":68,"style":68},"docker run -v 主机目录:容器目录 image-name\n",[34,30599,30600],{"__ignoreMap":68},[72,30601,30602,30604,30606,30609,30612],{"class":74,"line":75},[72,30603,26975],{"class":358},[72,30605,27652],{"class":366},[72,30607,30608],{"class":362}," -v",[72,30610,30611],{"class":366}," 主机目录:容器目录",[72,30613,30614],{"class":366}," image-name\n",[63,30616,30618],{"className":349,"code":30617,"language":351,"meta":68,"style":68},"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",[34,30619,30620],{"__ignoreMap":68},[72,30621,30622,30624,30626,30629,30631,30634],{"class":74,"line":75},[72,30623,26975],{"class":358},[72,30625,27652],{"class":366},[72,30627,30628],{"class":362}," -it",[72,30630,30608],{"class":362},[72,30632,30633],{"class":366}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[72,30635,30636],{"class":366}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[15,30638,30639],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[15,30641,30642],{},"查看挂载情况：",[63,30644,30646],{"className":349,"code":30645,"language":351,"meta":68,"style":68},"mount | grep -i project\n",[34,30647,30648],{"__ignoreMap":68},[72,30649,30650,30653,30655,30658,30660],{"class":74,"line":75},[72,30651,30652],{"class":358},"mount",[72,30654,25531],{"class":78},[72,30656,30657],{"class":358}," grep",[72,30659,26852],{"class":362},[72,30661,30662],{"class":366}," project\n",[15,30664,30665],{},"也可以通过ls来进行查看",[473,30667,30668],{},"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":68,"searchDepth":370,"depth":370,"links":30670},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30527,"description":68},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30677,"title":30678,"body":30679,"description":23802,"extension":487,"meta":30683,"navigation":490,"path":30685,"seo":30686,"stem":30687,"__hash__":30688},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30680,"toc":30681},[],{"title":68,"searchDepth":370,"depth":370,"links":30682},[],{"category":30684},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30678,"description":23802},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30690,"title":30691,"body":30692,"description":23802,"extension":487,"meta":30696,"navigation":490,"path":30697,"seo":30698,"stem":30699,"__hash__":30700},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30693,"toc":30694},[],{"title":68,"searchDepth":370,"depth":370,"links":30695},[],{"category":30684},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30691,"description":23802},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30702,"title":30703,"body":30704,"description":23802,"extension":487,"meta":30994,"navigation":490,"path":30995,"seo":30996,"stem":30997,"__hash__":30998},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30705,"toc":30992},[30706,30709,30717,30732,30737,30788,30791,30797,30981,30986,30989],[10,30707,30703],{"id":30708},"_1验证深度学习环境",[15,30710,30711,30712],{},"关于环境的安装，看",[257,30713,30716],{"href":30714,"rel":30715},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[261],"Pytorch-->深度学习",[15,30718,30719,30720,30723,30724,30727,30728,30731],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[34,30721,30722],{},"pytorch-cuda=12.4"," 是一个“ ",[707,30725,30726],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[707,30729,30730],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[15,30733,30734],{},[1891,30735],{"alt":68,"src":30736},"\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",[63,30738,30740],{"className":349,"code":30739,"language":351,"meta":68,"style":68},"# 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",[34,30741,30742,30747],{"__ignoreMap":68},[72,30743,30744],{"class":74,"line":75},[72,30745,30746],{"class":621},"# CUDA 12.4\n",[72,30748,30749,30752,30754,30757,30760,30763,30766,30769,30771,30774,30777,30780,30783,30785],{"class":74,"line":370},[72,30750,30751],{"class":358},"conda",[72,30753,24256],{"class":366},[72,30755,30756],{"class":366}," pytorch==",[72,30758,30759],{"class":362},"2.5.1",[72,30761,30762],{"class":366}," torchvision==",[72,30764,30765],{"class":362},"0.20.1",[72,30767,30768],{"class":366}," torchaudio==",[72,30770,30759],{"class":362},[72,30772,30773],{"class":366}," pytorch-cuda=",[72,30775,30776],{"class":362},"12.4",[72,30778,30779],{"class":362}," -c",[72,30781,30782],{"class":366}," pytorch",[72,30784,30779],{"class":362},[72,30786,30787],{"class":366}," nvidia\n",[15,30789,30790],{},"）：",[15,30792,30793],{},[257,30794,30795],{"href":30795,"rel":30796},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[261],[63,30798,30800],{"className":65,"code":30799,"language":67,"meta":68,"style":68},"# 对深度学习环境进行测试\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",[34,30801,30802,30807,30814,30819,30829,30845,30850,30860,30897,30904,30916,30932,30937,30947,30959,30969],{"__ignoreMap":68},[72,30803,30804],{"class":74,"line":75},[72,30805,30806],{"class":621},"# 对深度学习环境进行测试\n",[72,30808,30809,30811],{"class":74,"line":370},[72,30810,79],{"class":78},[72,30812,30813],{"class":82}," torch\n",[72,30815,30816],{"class":74,"line":1608},[72,30817,30818],{"class":621},"# 查看cuda是否被激活\n",[72,30820,30821,30824,30826],{"class":74,"line":1623},[72,30822,30823],{"class":82},"flag",[72,30825,609],{"class":78},[72,30827,30828],{"class":82},"torch.cuda.is_available()\n",[72,30830,30831,30834,30836,30839,30842],{"class":74,"line":1629},[72,30832,30833],{"class":362},"print",[72,30835,564],{"class":82},[72,30837,30838],{"class":366},"\"cuda:\"",[72,30840,30841],{"class":82},", flag)   ",[72,30843,30844],{"class":621},"#返回true的话说明被激活\n",[72,30846,30847],{"class":74,"line":1643},[72,30848,30849],{"class":621},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[72,30851,30852,30855,30857],{"class":74,"line":1649},[72,30853,30854],{"class":82},"ngpu",[72,30856,609],{"class":78},[72,30858,30859],{"class":362},"1\n",[72,30861,30862,30865,30867,30870,30873,30875,30878,30881,30884,30886,30888,30890,30892,30895],{"class":74,"line":1740},[72,30863,30864],{"class":82},"device",[72,30866,609],{"class":78},[72,30868,30869],{"class":82},"torch.device(",[72,30871,30872],{"class":366},"\"cuda:0\"",[72,30874,2133],{"class":78},[72,30876,30877],{"class":82},"(torch.cuda.is_available() ",[72,30879,30880],{"class":78},"and",[72,30882,30883],{"class":82}," ngpu",[72,30885,1514],{"class":78},[72,30887,747],{"class":362},[72,30889,14140],{"class":82},[72,30891,2130],{"class":78},[72,30893,30894],{"class":366}," \"cpu\"",[72,30896,570],{"class":82},[72,30898,30899,30901],{"class":74,"line":1746},[72,30900,30833],{"class":362},[72,30902,30903],{"class":82},"(device)\n",[72,30905,30906,30908,30911,30913],{"class":74,"line":1758},[72,30907,30833],{"class":362},[72,30909,30910],{"class":82},"(torch.cuda.get_device_name(",[72,30912,747],{"class":362},[72,30914,30915],{"class":82},"))\n",[72,30917,30918,30920,30923,30925,30927,30929],{"class":74,"line":2041},[72,30919,30833],{"class":362},[72,30921,30922],{"class":82},"(torch.rand(",[72,30924,634],{"class":362},[72,30926,932],{"class":82},[72,30928,634],{"class":362},[72,30930,30931],{"class":82},").cuda())\n",[72,30933,30934],{"class":74,"line":2046},[72,30935,30936],{"class":621},"# 查看cuda和cudnn的版本\n",[72,30938,30939,30942,30944],{"class":74,"line":2052},[72,30940,30941],{"class":82},"cuda_version",[72,30943,609],{"class":78},[72,30945,30946],{"class":82},"torch.version.cuda\n",[72,30948,30949,30951,30953,30956],{"class":74,"line":2057},[72,30950,30833],{"class":362},[72,30952,564],{"class":82},[72,30954,30955],{"class":366},"\"cuda version\"",[72,30957,30958],{"class":82},",cuda_version)\n",[72,30960,30961,30964,30966],{"class":74,"line":2071},[72,30962,30963],{"class":82},"cudnn_version",[72,30965,609],{"class":78},[72,30967,30968],{"class":82},"torch.backends.cudnn.version()\n",[72,30970,30971,30973,30975,30978],{"class":74,"line":2076},[72,30972,30833],{"class":362},[72,30974,564],{"class":82},[72,30976,30977],{"class":366},"\"cudnn version\"",[72,30979,30980],{"class":82},",cudnn_version)\n",[15,30982,30983],{},[1891,30984],{"alt":68,"src":30985},"\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",[15,30987,30988],{},"cuda:0 指的是一块显卡",[473,30990,30991],{},"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":68,"searchDepth":370,"depth":370,"links":30993},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30703,"description":23802},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":31000,"title":31001,"body":31002,"description":23802,"extension":487,"meta":50806,"navigation":490,"path":50807,"seo":50808,"stem":50809,"__hash__":50810},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":31003,"toc":50800},[31004,31007,31011,31015,31018,31023,31028,31031,31036,31041,31046,31049,31053,31058,31062,31067,31070,31075,31078,31081,31084,31087,31092,31095,31100,31105,31110,31115,31118,31122,31125,31130,31734,31739,31742,31747,31750,31753,32217,32220,32223,32226,32229,34280,34283,34288,34293,35088,35091,35096,35874,35878,37537,37541,38255,38259,38263,38268,38273,38278,38281,38286,38291,38296,38301,38306,38310,38315,39597,39602,39605,39608,39611,39766,39769,39772,40988,40993,41688,41692,41696,41701,41706,41709,41714,41719,41724,41729,41734,41739,41744,41749,41754,41759,41764,41769,41774,41779,41784,41789,41794,41799,41804,41809,41814,41819,41824,41829,41834,41839,41844,41849,41854,41859,41863,41867,41870,43348,43352,44999,45003,45697,45701,45704,45707,46251,46254,46258,46261,47658,47662,47665,48243,50030,50034,50037,50797],[10,31005,31001],{"id":31006},"_2经典神经网络",[531,31008,31010],{"id":31009},"_21lenet与alexnet","2.1.LeNet与AlexNet",[22423,31012,31014],{"id":31013},"_211原理介绍","2.1.1.原理介绍",[15,31016,31017],{},"LeNet-5",[22,31019,31020],{},[25,31021,31022],{},"原理",[15,31024,31025],{},[1891,31026],{"alt":68,"src":31027},"\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",[15,31029,31030],{},"B是batch批次；C是channel通道",[22,31032,31033],{"start":370},[25,31034,31035],{},"网络参数详细",[15,31037,31038],{},[1891,31039],{"alt":68,"src":31040},"\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",[15,31042,31043],{},[1891,31044],{"alt":68,"src":31045},"\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",[15,31047,31048],{},"AlexNet",[22,31050,31051],{},[25,31052,31022],{},[15,31054,31055],{},[1891,31056],{"alt":68,"src":31057},"\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",[22,31059,31060],{"start":370},[25,31061,31035],{},[15,31063,31064],{},[1891,31065],{"alt":68,"src":31066},"\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",[15,31068,31069],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[15,31071,31072],{},[1891,31073],{"alt":68,"src":31074},"\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",[15,31076,31077],{},"数据处理中的图像增强操作:",[15,31079,31080],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[15,31082,31083],{},"①增加数据量，保证训练数据充足；②防止过拟合",[15,31085,31086],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[15,31088,31089],{},[1891,31090],{"alt":68,"src":31091},"\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",[15,31093,31094],{},"提升网络精确度的方法：LRN正则化",[15,31096,31097],{},[1891,31098],{"alt":68,"src":31099},"\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",[15,31101,31102],{},[1891,31103],{"alt":68,"src":31104},"\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",[22,31106,31107],{"start":1608},[25,31108,31109],{},"AlexNet的总结",[15,31111,31112],{},[1891,31113],{"alt":68,"src":31114},"\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",[15,31116,31117],{},"比LeNet模型要深一丢丢",[22423,31119,31121],{"id":31120},"_212代码实现","2.1.2.代码实现",[15,31123,31124],{},"（1）LeNet",[22,31126,31127],{},[25,31128,31129],{},"模型搭建",[63,31131,31133],{"className":65,"code":31132,"language":67,"meta":68,"style":68},"# 导入库\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",[34,31134,31135,31140,31146,31151,31164,31169,31181,31185,31205,31210,31215,31226,31231,31250,31254,31259,31308,31320,31325,31354,31389,31416,31421,31433,31438,31458,31477,31496,31500,31505,31515,31532,31543,31558,31569,31580,31595,31610,31621,31628,31632,31646,31651,31674,31679,31684,31689,31693,31698,31703,31713],{"__ignoreMap":68},[72,31136,31137],{"class":74,"line":75},[72,31138,31139],{"class":621},"# 导入库\n",[72,31141,31142,31144],{"class":74,"line":370},[72,31143,79],{"class":78},[72,31145,30813],{"class":82},[72,31147,31148],{"class":74,"line":1608},[72,31149,31150],{"class":621},"# 导入神经网络层\n",[72,31152,31153,31156,31159,31161],{"class":74,"line":1623},[72,31154,31155],{"class":78},"from",[72,31157,31158],{"class":82}," torch ",[72,31160,79],{"class":78},[72,31162,31163],{"class":82}," nn\n",[72,31165,31166],{"class":74,"line":1629},[72,31167,31168],{"class":621},"# 导入展示神经网络参数的包\n",[72,31170,31171,31173,31176,31178],{"class":74,"line":1643},[72,31172,31155],{"class":78},[72,31174,31175],{"class":82}," torchsummary ",[72,31177,79],{"class":78},[72,31179,31180],{"class":82}," summary\n",[72,31182,31183],{"class":74,"line":1649},[72,31184,2828],{"emptyLinePlaceholder":490},[72,31186,31187,31189,31192,31194,31197,31199,31202],{"class":74,"line":1740},[72,31188,15120],{"class":78},[72,31190,31191],{"class":358}," LeNet",[72,31193,564],{"class":82},[72,31195,31196],{"class":358},"nn",[72,31198,1112],{"class":82},[72,31200,31201],{"class":358},"Module",[72,31203,31204],{"class":82},"):\n",[72,31206,31207],{"class":74,"line":1746},[72,31208,31209],{"class":621},"    # 模型初始化:\n",[72,31211,31212],{"class":74,"line":1758},[72,31213,31214],{"class":621},"    # 定义一些网络层和激活函数\n",[72,31216,31217,31220,31223],{"class":74,"line":2041},[72,31218,31219],{"class":78},"    def",[72,31221,31222],{"class":362}," __init__",[72,31224,31225],{"class":82},"(self):\n",[72,31227,31228],{"class":74,"line":2046},[72,31229,31230],{"class":621},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[72,31232,31233,31236,31239,31242,31245,31248],{"class":74,"line":2052},[72,31234,31235],{"class":362},"        super",[72,31237,31238],{"class":82},"(LeNet,",[72,31240,31241],{"class":362},"self",[72,31243,31244],{"class":82},").",[72,31246,31247],{"class":362},"__init__",[72,31249,2404],{"class":82},[72,31251,31252],{"class":74,"line":2057},[72,31253,2828],{"emptyLinePlaceholder":490},[72,31255,31256],{"class":74,"line":2071},[72,31257,31258],{"class":621},"        # 定义网络层\n",[72,31260,31261,31264,31267,31269,31272,31275,31277,31279,31281,31284,31286,31288,31290,31293,31295,31297,31299,31302,31304,31306],{"class":74,"line":2076},[72,31262,31263],{"class":362},"        self",[72,31265,31266],{"class":82},".c1",[72,31268,609],{"class":78},[72,31270,31271],{"class":82},"nn.Conv2d(",[72,31273,31274],{"class":5642},"in_channels",[72,31276,609],{"class":78},[72,31278,772],{"class":362},[72,31280,932],{"class":82},[72,31282,31283],{"class":5642},"out_channels",[72,31285,609],{"class":78},[72,31287,898],{"class":362},[72,31289,932],{"class":82},[72,31291,31292],{"class":5642},"kernel_size",[72,31294,609],{"class":78},[72,31296,873],{"class":362},[72,31298,932],{"class":82},[72,31300,31301],{"class":5642},"padding",[72,31303,609],{"class":78},[72,31305,640],{"class":362},[72,31307,570],{"class":82},[72,31309,31310,31312,31315,31317],{"class":74,"line":2082},[72,31311,31263],{"class":362},[72,31313,31314],{"class":82},".sig",[72,31316,609],{"class":78},[72,31318,31319],{"class":82},"nn.Sigmoid()\n",[72,31321,31322],{"class":74,"line":2103},[72,31323,31324],{"class":621},"        # 定义池化\n",[72,31326,31327,31329,31332,31334,31337,31339,31341,31343,31345,31348,31350,31352],{"class":74,"line":2108},[72,31328,31263],{"class":362},[72,31330,31331],{"class":82},".s2",[72,31333,609],{"class":78},[72,31335,31336],{"class":82},"nn.AvgPool2d(",[72,31338,31292],{"class":5642},[72,31340,609],{"class":78},[72,31342,640],{"class":362},[72,31344,932],{"class":82},[72,31346,31347],{"class":5642},"stride",[72,31349,609],{"class":78},[72,31351,640],{"class":362},[72,31353,570],{"class":82},[72,31355,31356,31358,31361,31363,31365,31367,31369,31371,31373,31375,31377,31379,31381,31383,31385,31387],{"class":74,"line":2122},[72,31357,31263],{"class":362},[72,31359,31360],{"class":82},".c3",[72,31362,609],{"class":78},[72,31364,31271],{"class":82},[72,31366,31274],{"class":5642},[72,31368,609],{"class":78},[72,31370,898],{"class":362},[72,31372,932],{"class":82},[72,31374,31283],{"class":5642},[72,31376,609],{"class":78},[72,31378,1155],{"class":362},[72,31380,932],{"class":82},[72,31382,31292],{"class":5642},[72,31384,609],{"class":78},[72,31386,873],{"class":362},[72,31388,570],{"class":82},[72,31390,31391,31393,31396,31398,31400,31402,31404,31406,31408,31410,31412,31414],{"class":74,"line":2127},[72,31392,31263],{"class":362},[72,31394,31395],{"class":82},".s4",[72,31397,609],{"class":78},[72,31399,31336],{"class":82},[72,31401,31292],{"class":5642},[72,31403,609],{"class":78},[72,31405,640],{"class":362},[72,31407,932],{"class":82},[72,31409,31347],{"class":5642},[72,31411,609],{"class":78},[72,31413,640],{"class":362},[72,31415,570],{"class":82},[72,31417,31418],{"class":74,"line":2156},[72,31419,31420],{"class":621},"        # 定义平展层\n",[72,31422,31423,31425,31428,31430],{"class":74,"line":2161},[72,31424,31263],{"class":362},[72,31426,31427],{"class":82},".flatten",[72,31429,609],{"class":78},[72,31431,31432],{"class":82},"nn.Flatten()\n",[72,31434,31435],{"class":74,"line":2178},[72,31436,31437],{"class":621},"        # 定义全连接层\n",[72,31439,31440,31442,31445,31447,31450,31452,31454,31456],{"class":74,"line":2183},[72,31441,31263],{"class":362},[72,31443,31444],{"class":82},".f5",[72,31446,609],{"class":78},[72,31448,31449],{"class":82},"nn.Linear(",[72,31451,4415],{"class":362},[72,31453,932],{"class":82},[72,31455,1371],{"class":362},[72,31457,570],{"class":82},[72,31459,31460,31462,31465,31467,31469,31471,31473,31475],{"class":74,"line":2188},[72,31461,31263],{"class":362},[72,31463,31464],{"class":82},".f6",[72,31466,609],{"class":78},[72,31468,31449],{"class":82},[72,31470,1371],{"class":362},[72,31472,932],{"class":82},[72,31474,1265],{"class":362},[72,31476,570],{"class":82},[72,31478,31479,31481,31484,31486,31488,31490,31492,31494],{"class":74,"line":2193},[72,31480,31263],{"class":362},[72,31482,31483],{"class":82},".f7",[72,31485,609],{"class":78},[72,31487,31449],{"class":82},[72,31489,1265],{"class":362},[72,31491,932],{"class":82},[72,31493,1000],{"class":362},[72,31495,570],{"class":82},[72,31497,31498],{"class":74,"line":2207},[72,31499,2828],{"emptyLinePlaceholder":490},[72,31501,31502],{"class":74,"line":2212},[72,31503,31504],{"class":621},"    # 写工具->写前向传播\n",[72,31506,31507,31509,31512],{"class":74,"line":3005},[72,31508,31219],{"class":78},[72,31510,31511],{"class":358}," forward",[72,31513,31514],{"class":82},"(self,x):\n",[72,31516,31517,31520,31522,31524,31527,31529],{"class":74,"line":3019},[72,31518,31519],{"class":82},"        x",[72,31521,609],{"class":78},[72,31523,31241],{"class":362},[72,31525,31526],{"class":82},".sig(",[72,31528,31241],{"class":362},[72,31530,31531],{"class":82},".c1(x))\n",[72,31533,31534,31536,31538,31540],{"class":74,"line":3027},[72,31535,31519],{"class":82},[72,31537,609],{"class":78},[72,31539,31241],{"class":362},[72,31541,31542],{"class":82},".s2(x)\n",[72,31544,31545,31547,31549,31551,31553,31555],{"class":74,"line":3032},[72,31546,31519],{"class":82},[72,31548,609],{"class":78},[72,31550,31241],{"class":362},[72,31552,31526],{"class":82},[72,31554,31241],{"class":362},[72,31556,31557],{"class":82},".c3(x))\n",[72,31559,31560,31562,31564,31566],{"class":74,"line":3038},[72,31561,31519],{"class":82},[72,31563,609],{"class":78},[72,31565,31241],{"class":362},[72,31567,31568],{"class":82},".s4(x)\n",[72,31570,31571,31573,31575,31577],{"class":74,"line":3044},[72,31572,31519],{"class":82},[72,31574,609],{"class":78},[72,31576,31241],{"class":362},[72,31578,31579],{"class":82},".flatten(x)\n",[72,31581,31582,31584,31586,31588,31590,31592],{"class":74,"line":3049},[72,31583,31519],{"class":82},[72,31585,609],{"class":78},[72,31587,31241],{"class":362},[72,31589,31526],{"class":82},[72,31591,31241],{"class":362},[72,31593,31594],{"class":82},".f5(x))\n",[72,31596,31597,31599,31601,31603,31605,31607],{"class":74,"line":8374},[72,31598,31519],{"class":82},[72,31600,609],{"class":78},[72,31602,31241],{"class":362},[72,31604,31526],{"class":82},[72,31606,31241],{"class":362},[72,31608,31609],{"class":82},".f6(x))\n",[72,31611,31612,31614,31616,31618],{"class":74,"line":8398},[72,31613,31519],{"class":82},[72,31615,609],{"class":78},[72,31617,31241],{"class":362},[72,31619,31620],{"class":82},".f7(x)\n",[72,31622,31623,31625],{"class":74,"line":8403},[72,31624,15178],{"class":78},[72,31626,31627],{"class":82}," x\n",[72,31629,31630],{"class":74,"line":8409},[72,31631,2828],{"emptyLinePlaceholder":490},[72,31633,31634,31636,31639,31641,31644],{"class":74,"line":8436},[72,31635,1960],{"class":78},[72,31637,31638],{"class":362}," __name__",[72,31640,3377],{"class":78},[72,31642,31643],{"class":366},"\"__main__\"",[72,31645,4167],{"class":82},[72,31647,31648],{"class":74,"line":8441},[72,31649,31650],{"class":621},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[72,31652,31653,31656,31658,31660,31663,31665,31668,31670,31672],{"class":74,"line":8447},[72,31654,31655],{"class":82},"    device",[72,31657,609],{"class":78},[72,31659,30869],{"class":82},[72,31661,31662],{"class":366},"\"cuda\"",[72,31664,2133],{"class":78},[72,31666,31667],{"class":82}," torch.cuda.is_available() ",[72,31669,2130],{"class":78},[72,31671,30894],{"class":366},[72,31673,570],{"class":82},[72,31675,31676],{"class":74,"line":8459},[72,31677,31678],{"class":621},"    # 如果就是想指定用cpu用下方代码:\n",[72,31680,31681],{"class":74,"line":8471},[72,31682,31683],{"class":621},"    # device=\"cpu\"\n",[72,31685,31686],{"class":74,"line":8483},[72,31687,31688],{"class":621},"    # print(device)\n",[72,31690,31691],{"class":74,"line":10142},[72,31692,2828],{"emptyLinePlaceholder":490},[72,31694,31695],{"class":74,"line":10167},[72,31696,31697],{"class":621},"    # 实例化模型\n",[72,31699,31700],{"class":74,"line":10190},[72,31701,31702],{"class":621},"    # 将模型放到设备中去运行\n",[72,31704,31705,31708,31710],{"class":74,"line":10214},[72,31706,31707],{"class":82},"    model",[72,31709,609],{"class":78},[72,31711,31712],{"class":82},"LeNet().to(device)\n",[72,31714,31715,31718,31721,31723,31725,31727,31729,31731],{"class":74,"line":10219},[72,31716,31717],{"class":362},"    print",[72,31719,31720],{"class":82},"(summary(model,(",[72,31722,772],{"class":362},[72,31724,932],{"class":82},[72,31726,1455],{"class":362},[72,31728,932],{"class":82},[72,31730,1455],{"class":362},[72,31732,31733],{"class":82},")))\n",[15,31735,31736],{},[1891,31737],{"alt":68,"src":31738},"\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",[15,31740,31741],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[22,31743,31744],{"start":370},[25,31745,31746],{},"训练",[15,31748,31749],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[15,31751,31752],{},"在训练之前可以将数据展示看一下",[63,31754,31756],{"className":65,"code":31755,"language":67,"meta":68,"style":68},"# 建立画图的函数，用于展示数据\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",[34,31757,31758,31763,31768,31780,31792,31805,31810,31822,31827,31839,31844,31856,31860,31864,31885,31897,31902,31923,31934,31938,31943,31961,31972,31977,31988,31993,32004,32008,32013,32028,32041,32046,32051,32064,32077,32090,32095,32099,32104,32124,32141,32161,32174,32187,32197,32212],{"__ignoreMap":68},[72,31759,31760],{"class":74,"line":75},[72,31761,31762],{"class":621},"# 建立画图的函数，用于展示数据\n",[72,31764,31765],{"class":74,"line":370},[72,31766,31767],{"class":621},"# torchvision中包含很多内置的数据集\n",[72,31769,31770,31772,31775,31777],{"class":74,"line":1608},[72,31771,31155],{"class":78},[72,31773,31774],{"class":82}," sklearn.externals.array_api_compat.torch ",[72,31776,79],{"class":78},[72,31778,31779],{"class":82}," squeeze\n",[72,31781,31782,31784,31787,31789],{"class":74,"line":1623},[72,31783,31155],{"class":78},[72,31785,31786],{"class":82}," torchvision.datasets ",[72,31788,79],{"class":78},[72,31790,31791],{"class":82}," FashionMNIST\n",[72,31793,31794,31796,31799,31802],{"class":74,"line":1629},[72,31795,79],{"class":78},[72,31797,31798],{"class":82}," numpy ",[72,31800,31801],{"class":78},"as",[72,31803,31804],{"class":82}," np\n",[72,31806,31807],{"class":74,"line":1643},[72,31808,31809],{"class":621},"# 引入处理数据集的包\n",[72,31811,31812,31814,31817,31819],{"class":74,"line":1649},[72,31813,31155],{"class":78},[72,31815,31816],{"class":82}," torchvision ",[72,31818,79],{"class":78},[72,31820,31821],{"class":82}," transforms\n",[72,31823,31824],{"class":74,"line":1740},[72,31825,31826],{"class":621},"# 从torch库中引入数据处理的包\n",[72,31828,31829,31831,31834,31836],{"class":74,"line":1746},[72,31830,79],{"class":78},[72,31832,31833],{"class":82}," torch.utils.data ",[72,31835,31801],{"class":78},[72,31837,31838],{"class":82}," Data\n",[72,31840,31841],{"class":74,"line":1758},[72,31842,31843],{"class":621},"# 导入画图的库\n",[72,31845,31846,31848,31851,31853],{"class":74,"line":2041},[72,31847,79],{"class":78},[72,31849,31850],{"class":82}," matplotlib.pyplot ",[72,31852,31801],{"class":78},[72,31854,31855],{"class":82}," plt\n",[72,31857,31858],{"class":74,"line":2046},[72,31859,2828],{"emptyLinePlaceholder":490},[72,31861,31862],{"class":74,"line":2052},[72,31863,2828],{"emptyLinePlaceholder":490},[72,31865,31866,31869,31871,31874,31877,31879,31882],{"class":74,"line":2057},[72,31867,31868],{"class":82},"train_data",[72,31870,609],{"class":78},[72,31872,31873],{"class":82},"FashionMNIST(",[72,31875,31876],{"class":5642},"root",[72,31878,609],{"class":78},[72,31880,31881],{"class":366},"'.\u002Fdata'",[72,31883,31884],{"class":82},",\n",[72,31886,31887,31890,31892,31895],{"class":74,"line":2071},[72,31888,31889],{"class":5642},"                        train",[72,31891,609],{"class":78},[72,31893,31894],{"class":362},"True",[72,31896,31884],{"class":82},[72,31898,31899],{"class":74,"line":2076},[72,31900,31901],{"class":621},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[72,31903,31904,31907,31909,31912,31915,31917,31920],{"class":74,"line":2082},[72,31905,31906],{"class":5642},"                        transform",[72,31908,609],{"class":78},[72,31910,31911],{"class":82},"transforms.Compose([transforms.Resize(",[72,31913,31914],{"class":5642},"size",[72,31916,609],{"class":78},[72,31918,31919],{"class":362},"224",[72,31921,31922],{"class":82},"),transforms.ToTensor()]),\n",[72,31924,31925,31928,31930,31932],{"class":74,"line":2103},[72,31926,31927],{"class":5642},"                        download",[72,31929,609],{"class":78},[72,31931,31894],{"class":362},[72,31933,570],{"class":82},[72,31935,31936],{"class":74,"line":2108},[72,31937,2828],{"emptyLinePlaceholder":490},[72,31939,31940],{"class":74,"line":2122},[72,31941,31942],{"class":621},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[72,31944,31945,31948,31950,31953,31956,31958],{"class":74,"line":2127},[72,31946,31947],{"class":82},"train_loader",[72,31949,609],{"class":78},[72,31951,31952],{"class":82},"Data.DataLoader(",[72,31954,31955],{"class":5642},"dataset",[72,31957,609],{"class":78},[72,31959,31960],{"class":82},"train_data,\n",[72,31962,31963,31966,31968,31970],{"class":74,"line":2156},[72,31964,31965],{"class":5642},"                             batch_size",[72,31967,609],{"class":78},[72,31969,759],{"class":362},[72,31971,31884],{"class":82},[72,31973,31974],{"class":74,"line":2161},[72,31975,31976],{"class":621},"                             # 数据是否打乱\n",[72,31978,31979,31982,31984,31986],{"class":74,"line":2178},[72,31980,31981],{"class":5642},"                             shuffle",[72,31983,609],{"class":78},[72,31985,31894],{"class":362},[72,31987,31884],{"class":82},[72,31989,31990],{"class":74,"line":2183},[72,31991,31992],{"class":621},"                             # 规定加载数据的进程\n",[72,31994,31995,31998,32000,32002],{"class":74,"line":2188},[72,31996,31997],{"class":5642},"                             num_workers",[72,31999,609],{"class":78},[72,32001,747],{"class":362},[72,32003,570],{"class":82},[72,32005,32006],{"class":74,"line":2193},[72,32007,2828],{"emptyLinePlaceholder":490},[72,32009,32010],{"class":74,"line":2207},[72,32011,32012],{"class":621},"# 获得一个batch的数据\n",[72,32014,32015,32017,32020,32022,32025],{"class":74,"line":2212},[72,32016,3453],{"class":78},[72,32018,32019],{"class":82}," step,(b_x,b_y) ",[72,32021,26465],{"class":78},[72,32023,32024],{"class":362}," enumerate",[72,32026,32027],{"class":82},"(train_loader):\n",[72,32029,32030,32032,32035,32037,32039],{"class":74,"line":3005},[72,32031,3529],{"class":78},[72,32033,32034],{"class":82}," step ",[72,32036,1514],{"class":78},[72,32038,4521],{"class":362},[72,32040,4167],{"class":82},[72,32042,32043],{"class":74,"line":3019},[72,32044,32045],{"class":78},"        break\n",[72,32047,32048],{"class":74,"line":3027},[72,32049,32050],{"class":621},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[72,32052,32053,32056,32058,32061],{"class":74,"line":3032},[72,32054,32055],{"class":82},"batch_x",[72,32057,609],{"class":78},[72,32059,32060],{"class":82},"b_x.squeeze().numpy()  ",[72,32062,32063],{"class":621},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[72,32065,32066,32069,32071,32074],{"class":74,"line":3038},[72,32067,32068],{"class":82},"batch_y",[72,32070,609],{"class":78},[72,32072,32073],{"class":82},"b_y.numpy()   ",[72,32075,32076],{"class":621},"#将张量转换成功numpy数组\n",[72,32078,32079,32082,32084,32087],{"class":74,"line":3044},[72,32080,32081],{"class":82},"class_label",[72,32083,609],{"class":78},[72,32085,32086],{"class":82},"train_data.classes  ",[72,32088,32089],{"class":621},"#训练集标签\n",[72,32091,32092],{"class":74,"line":3049},[72,32093,32094],{"class":621},"# print(class_label)\n",[72,32096,32097],{"class":74,"line":8374},[72,32098,2828],{"emptyLinePlaceholder":490},[72,32100,32101],{"class":74,"line":8398},[72,32102,32103],{"class":621},"# 可视化一个batch的图像\n",[72,32105,32106,32109,32112,32114,32116,32118,32120,32122],{"class":74,"line":8403},[72,32107,32108],{"class":82},"plt.figure(",[72,32110,32111],{"class":5642},"figsize",[72,32113,609],{"class":78},[72,32115,564],{"class":82},[72,32117,1052],{"class":362},[72,32119,932],{"class":82},[72,32121,873],{"class":362},[72,32123,30915],{"class":82},[72,32125,32126,32128,32131,32133,32136,32138],{"class":74,"line":8409},[72,32127,3453],{"class":78},[72,32129,32130],{"class":82}," ii ",[72,32132,26465],{"class":78},[72,32134,32135],{"class":82}," np.arange(",[72,32137,7784],{"class":362},[72,32139,32140],{"class":82},"(batch_y)):\n",[72,32142,32143,32146,32148,32150,32152,32155,32157,32159],{"class":74,"line":8436},[72,32144,32145],{"class":82},"    plt.subplot(",[72,32147,847],{"class":362},[72,32149,932],{"class":82},[72,32151,1155],{"class":362},[72,32153,32154],{"class":82},",ii ",[72,32156,1035],{"class":78},[72,32158,25540],{"class":362},[72,32160,570],{"class":82},[72,32162,32163,32166,32169,32171],{"class":74,"line":8441},[72,32164,32165],{"class":82},"    plt.imshow(batch_x[ii,:,:],",[72,32167,32168],{"class":5642},"cmap",[72,32170,609],{"class":78},[72,32172,32173],{"class":82},"plt.cm.gray)\n",[72,32175,32176,32179,32181,32183,32185],{"class":74,"line":8447},[72,32177,32178],{"class":82},"    plt.title(class_label[batch_y[ii]],",[72,32180,31914],{"class":5642},[72,32182,609],{"class":78},[72,32184,1000],{"class":362},[72,32186,570],{"class":82},[72,32188,32189,32192,32195],{"class":74,"line":8459},[72,32190,32191],{"class":82},"    plt.axis(",[72,32193,32194],{"class":366},"\"off\"",[72,32196,570],{"class":82},[72,32198,32199,32202,32205,32207,32210],{"class":74,"line":8471},[72,32200,32201],{"class":82},"    plt.subplots_adjust(",[72,32203,32204],{"class":5642},"wspace",[72,32206,609],{"class":78},[72,32208,32209],{"class":362},"0.05",[72,32211,570],{"class":82},[72,32213,32214],{"class":74,"line":8483},[72,32215,32216],{"class":82},"plt.show()\n",[15,32218,32219],{},"用matplotlib进行展示的过程可以后续再补",[15,32221,32222],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[15,32224,32225],{},"训练次数就是按照批次过整个训练集数据的次数",[15,32227,32228],{},"模型训练：",[63,32230,32232],{"className":65,"code":32231,"language":67,"meta":68,"style":68},"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",[34,32233,32234,32241,32248,32252,32264,32270,32281,32291,32301,32311,32321,32326,32338,32348,32352,32356,32361,32372,32385,32396,32413,32424,32463,32479,32491,32502,32507,32518,32534,32545,32556,32567,32574,32578,32583,32588,32592,32597,32607,32628,32632,32636,32641,32646,32651,32671,32675,32680,32690,32694,32699,32708,32713,32718,32723,32733,32737,32741,32746,32751,32761,32766,32776,32781,32790,32795,32804,32809,32818,32822,32827,32837,32841,32845,32850,32865,32893,32908,32912,32917,32922,32931,32936,32945,32950,32959,32964,32973,32978,32987,32992,33001,33006,33019,33024,33034,33039,33049,33055,33061,33067,33073,33084,33090,33110,33116,33127,33133,33139,33145,33151,33157,33163,33169,33189,33195,33211,33217,33231,33237,33252,33258,33267,33273,33282,33288,33294,33303,33309,33320,33326,33345,33351,33362,33368,33388,33404,33410,33424,33430,33436,33447,33453,33459,33469,33475,33486,33492,33502,33507,33513,33562,33609,33614,33620,33639,33645,33665,33671,33677,33687,33692,33698,33714,33759,33765,33771,33777,33788,33794,33800,33806,33824,33838,33847,33856,33865,33874,33880,33886,33894,33899,33905,33916,33922,33942,33948,33954,33960,33977,33983,33989,33995,34001,34007,34034,34058,34064,34070,34076,34087,34098,34104,34121,34144,34167,34173,34178,34187,34197,34203,34208,34214,34227,34233,34244,34255,34274],{"__ignoreMap":68},[72,32235,32236,32238],{"class":74,"line":75},[72,32237,79],{"class":78},[72,32239,32240],{"class":82}," copy\n",[72,32242,32243,32245],{"class":74,"line":370},[72,32244,79],{"class":78},[72,32246,32247],{"class":82}," time\n",[72,32249,32250],{"class":74,"line":1608},[72,32251,2828],{"emptyLinePlaceholder":490},[72,32253,32254,32256,32259,32261],{"class":74,"line":1623},[72,32255,79],{"class":78},[72,32257,32258],{"class":82}," pandas ",[72,32260,31801],{"class":78},[72,32262,32263],{"class":82}," pd\n",[72,32265,32266,32268],{"class":74,"line":1629},[72,32267,79],{"class":78},[72,32269,30813],{"class":82},[72,32271,32272,32274,32276,32278],{"class":74,"line":1643},[72,32273,31155],{"class":78},[72,32275,31833],{"class":82},[72,32277,79],{"class":78},[72,32279,32280],{"class":82}," Dataset\n",[72,32282,32283,32285,32287,32289],{"class":74,"line":1649},[72,32284,31155],{"class":78},[72,32286,31786],{"class":82},[72,32288,79],{"class":78},[72,32290,31791],{"class":82},[72,32292,32293,32295,32297,32299],{"class":74,"line":1740},[72,32294,31155],{"class":78},[72,32296,31816],{"class":82},[72,32298,79],{"class":78},[72,32300,31821],{"class":82},[72,32302,32303,32305,32307,32309],{"class":74,"line":1746},[72,32304,79],{"class":78},[72,32306,31833],{"class":82},[72,32308,31801],{"class":78},[72,32310,31838],{"class":82},[72,32312,32313,32315,32317,32319],{"class":74,"line":1758},[72,32314,79],{"class":78},[72,32316,31850],{"class":82},[72,32318,31801],{"class":78},[72,32320,31855],{"class":82},[72,32322,32323],{"class":74,"line":2041},[72,32324,32325],{"class":621},"# 导入模型\n",[72,32327,32328,32330,32333,32335],{"class":74,"line":2046},[72,32329,31155],{"class":78},[72,32331,32332],{"class":82}," model ",[72,32334,79],{"class":78},[72,32336,32337],{"class":82}," LeNet\n",[72,32339,32340,32342,32344,32346],{"class":74,"line":2052},[72,32341,31155],{"class":78},[72,32343,31158],{"class":82},[72,32345,79],{"class":78},[72,32347,31163],{"class":82},[72,32349,32350],{"class":74,"line":2057},[72,32351,2828],{"emptyLinePlaceholder":490},[72,32353,32354],{"class":74,"line":2071},[72,32355,2828],{"emptyLinePlaceholder":490},[72,32357,32358],{"class":74,"line":2076},[72,32359,32360],{"class":621},"# 处理训练集与验证集函数--->划分数据集\n",[72,32362,32363,32366,32369],{"class":74,"line":2082},[72,32364,32365],{"class":78},"def",[72,32367,32368],{"class":358}," train_val_data_process",[72,32370,32371],{"class":82},"():\n",[72,32373,32374,32377,32379,32381,32383],{"class":74,"line":2103},[72,32375,32376],{"class":82},"    train_data",[72,32378,609],{"class":78},[72,32380,31873],{"class":82},[72,32382,31881],{"class":366},[72,32384,31884],{"class":82},[72,32386,32387,32390,32392,32394],{"class":74,"line":2108},[72,32388,32389],{"class":5642},"                            train",[72,32391,609],{"class":78},[72,32393,31894],{"class":362},[72,32395,31884],{"class":82},[72,32397,32398,32401,32403,32405,32407,32409,32411],{"class":74,"line":2122},[72,32399,32400],{"class":5642},"                            transform",[72,32402,609],{"class":78},[72,32404,31911],{"class":82},[72,32406,31914],{"class":5642},[72,32408,609],{"class":78},[72,32410,1455],{"class":362},[72,32412,31922],{"class":82},[72,32414,32415,32418,32420,32422],{"class":74,"line":2127},[72,32416,32417],{"class":5642},"                            download",[72,32419,609],{"class":78},[72,32421,31894],{"class":362},[72,32423,570],{"class":82},[72,32425,32426,32429,32431,32434,32437,32439,32442,32444,32446,32449,32451,32453,32456,32458,32460],{"class":74,"line":2156},[72,32427,32428],{"class":82},"    train_data,val_data",[72,32430,609],{"class":78},[72,32432,32433],{"class":82},"Data.random_split(train_data,[",[72,32435,32436],{"class":362},"round",[72,32438,564],{"class":82},[72,32440,32441],{"class":362},"0.8",[72,32443,1009],{"class":78},[72,32445,7784],{"class":362},[72,32447,32448],{"class":82},"(train_data)),",[72,32450,32436],{"class":362},[72,32452,564],{"class":82},[72,32454,32455],{"class":362},"0.2",[72,32457,1009],{"class":78},[72,32459,7784],{"class":362},[72,32461,32462],{"class":82},"(train_data))])\n",[72,32464,32465,32468,32470,32473,32475,32477],{"class":74,"line":2161},[72,32466,32467],{"class":82},"    train_dataloader ",[72,32469,609],{"class":78},[72,32471,32472],{"class":82}," Data.DataLoader(",[72,32474,31955],{"class":5642},[72,32476,609],{"class":78},[72,32478,31960],{"class":82},[72,32480,32481,32484,32486,32489],{"class":74,"line":2178},[72,32482,32483],{"class":5642},"                                       batch_size",[72,32485,609],{"class":78},[72,32487,32488],{"class":362},"128",[72,32490,31884],{"class":82},[72,32492,32493,32496,32498,32500],{"class":74,"line":2183},[72,32494,32495],{"class":5642},"                                       shuffle",[72,32497,609],{"class":78},[72,32499,31894],{"class":362},[72,32501,31884],{"class":82},[72,32503,32504],{"class":74,"line":2188},[72,32505,32506],{"class":621},"                                       # 规定8个进程\n",[72,32508,32509,32512,32514,32516],{"class":74,"line":2193},[72,32510,32511],{"class":5642},"                                       num_workers",[72,32513,609],{"class":78},[72,32515,949],{"class":362},[72,32517,570],{"class":82},[72,32519,32520,32523,32525,32527,32529,32531],{"class":74,"line":2207},[72,32521,32522],{"class":82},"    val_dataloader",[72,32524,609],{"class":78},[72,32526,31952],{"class":82},[72,32528,31955],{"class":5642},[72,32530,609],{"class":78},[72,32532,32533],{"class":82},"val_data,\n",[72,32535,32536,32539,32541,32543],{"class":74,"line":2212},[72,32537,32538],{"class":5642},"                                   batch_size",[72,32540,609],{"class":78},[72,32542,32488],{"class":362},[72,32544,31884],{"class":82},[72,32546,32547,32550,32552,32554],{"class":74,"line":3005},[72,32548,32549],{"class":5642},"                                   shuffle",[72,32551,609],{"class":78},[72,32553,31894],{"class":362},[72,32555,31884],{"class":82},[72,32557,32558,32561,32563,32565],{"class":74,"line":3019},[72,32559,32560],{"class":5642},"                                   num_workers",[72,32562,609],{"class":78},[72,32564,949],{"class":362},[72,32566,570],{"class":82},[72,32568,32569,32571],{"class":74,"line":3027},[72,32570,4518],{"class":78},[72,32572,32573],{"class":82}," train_dataloader,val_dataloader\n",[72,32575,32576],{"class":74,"line":3032},[72,32577,2828],{"emptyLinePlaceholder":490},[72,32579,32580],{"class":74,"line":3038},[72,32581,32582],{"class":621},"# 验证是否出错\n",[72,32584,32585],{"class":74,"line":3044},[72,32586,32587],{"class":621},"# train_val_data_process()\n",[72,32589,32590],{"class":74,"line":3049},[72,32591,2828],{"emptyLinePlaceholder":490},[72,32593,32594],{"class":74,"line":8374},[72,32595,32596],{"class":621},"# 定义模型训练函数\n",[72,32598,32599,32601,32604],{"class":74,"line":8398},[72,32600,32365],{"class":78},[72,32602,32603],{"class":358}," train_model_process",[72,32605,32606],{"class":82},"(model,train_dataloader,val_dataloader,num_epochs):\n",[72,32608,32609,32611,32613,32615,32617,32619,32621,32623,32626],{"class":74,"line":8403},[72,32610,31655],{"class":82},[72,32612,609],{"class":78},[72,32614,30869],{"class":82},[72,32616,31662],{"class":366},[72,32618,2133],{"class":78},[72,32620,31667],{"class":82},[72,32622,2130],{"class":78},[72,32624,32625],{"class":366}," 'cpu'",[72,32627,570],{"class":82},[72,32629,32630],{"class":74,"line":8409},[72,32631,2828],{"emptyLinePlaceholder":490},[72,32633,32634],{"class":74,"line":8436},[72,32635,2828],{"emptyLinePlaceholder":490},[72,32637,32638],{"class":74,"line":8441},[72,32639,32640],{"class":621},"    # 定义优化器\n",[72,32642,32643],{"class":74,"line":8447},[72,32644,32645],{"class":621},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[72,32647,32648],{"class":74,"line":8459},[72,32649,32650],{"class":621},"    # lr为学习率\n",[72,32652,32653,32656,32658,32661,32664,32666,32669],{"class":74,"line":8471},[72,32654,32655],{"class":82},"    optimizer",[72,32657,609],{"class":78},[72,32659,32660],{"class":82},"torch.optim.Adam(model.parameters(),",[72,32662,32663],{"class":5642},"lr",[72,32665,609],{"class":78},[72,32667,32668],{"class":362},"0.001",[72,32670,570],{"class":82},[72,32672,32673],{"class":74,"line":8483},[72,32674,2828],{"emptyLinePlaceholder":490},[72,32676,32677],{"class":74,"line":10142},[72,32678,32679],{"class":621},"    # 定义损失函数使用交叉熵损失函数\n",[72,32681,32682,32685,32687],{"class":74,"line":10167},[72,32683,32684],{"class":82},"    criterion",[72,32686,609],{"class":78},[72,32688,32689],{"class":82},"nn.CrossEntropyLoss()\n",[72,32691,32692],{"class":74,"line":10190},[72,32693,2828],{"emptyLinePlaceholder":490},[72,32695,32696],{"class":74,"line":10214},[72,32697,32698],{"class":621},"    # 将模型放到GPU中进行训练\n",[72,32700,32701,32703,32705],{"class":74,"line":10219},[72,32702,31707],{"class":82},[72,32704,609],{"class":78},[72,32706,32707],{"class":82},"model.to(device)\n",[72,32709,32710],{"class":74,"line":10224},[72,32711,32712],{"class":621},"    # 复制当前模型的参数\n",[72,32714,32715],{"class":74,"line":10229},[72,32716,32717],{"class":621},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[72,32719,32720],{"class":74,"line":10238},[72,32721,32722],{"class":621},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[72,32724,32725,32728,32730],{"class":74,"line":10243},[72,32726,32727],{"class":82},"    best_model_wts",[72,32729,609],{"class":78},[72,32731,32732],{"class":82},"copy.deepcopy(model.state_dict())\n",[72,32734,32735],{"class":74,"line":10249},[72,32736,2828],{"emptyLinePlaceholder":490},[72,32738,32739],{"class":74,"line":10270},[72,32740,2828],{"emptyLinePlaceholder":490},[72,32742,32743],{"class":74,"line":10276},[72,32744,32745],{"class":621},"    # 初始化参数\n",[72,32747,32748],{"class":74,"line":10290},[72,32749,32750],{"class":621},"    # 最高准确度\n",[72,32752,32753,32756,32758],{"class":74,"line":10296},[72,32754,32755],{"class":82},"    best_acc",[72,32757,609],{"class":78},[72,32759,32760],{"class":362},"0.0\n",[72,32762,32763],{"class":74,"line":10323},[72,32764,32765],{"class":621},"    # 训练集损失列表\n",[72,32767,32768,32771,32773],{"class":74,"line":10332},[72,32769,32770],{"class":82},"    train_loss_all",[72,32772,609],{"class":78},[72,32774,32775],{"class":82},"[]\n",[72,32777,32778],{"class":74,"line":10338},[72,32779,32780],{"class":621},"    # 验证集函数列表\n",[72,32782,32783,32786,32788],{"class":74,"line":10346},[72,32784,32785],{"class":82},"    val_loss_all",[72,32787,609],{"class":78},[72,32789,32775],{"class":82},[72,32791,32792],{"class":74,"line":10351},[72,32793,32794],{"class":621},"    # 训练集准确度列表\n",[72,32796,32797,32800,32802],{"class":74,"line":17030},[72,32798,32799],{"class":82},"    train_acc_all",[72,32801,609],{"class":78},[72,32803,32775],{"class":82},[72,32805,32806],{"class":74,"line":17036},[72,32807,32808],{"class":621},"    # 验证集准确度列表\n",[72,32810,32811,32814,32816],{"class":74,"line":17059},[72,32812,32813],{"class":82},"    val_acc_all",[72,32815,609],{"class":78},[72,32817,32775],{"class":82},[72,32819,32820],{"class":74,"line":17065},[72,32821,2828],{"emptyLinePlaceholder":490},[72,32823,32824],{"class":74,"line":17088},[72,32825,32826],{"class":621},"    # 保存当前时间--->方便看每轮训练的时间\n",[72,32828,32829,32832,32834],{"class":74,"line":17102},[72,32830,32831],{"class":82},"    since",[72,32833,609],{"class":78},[72,32835,32836],{"class":82},"time.time()\n",[72,32838,32839],{"class":74,"line":17122},[72,32840,2828],{"emptyLinePlaceholder":490},[72,32842,32843],{"class":74,"line":17128},[72,32844,2828],{"emptyLinePlaceholder":490},[72,32846,32847],{"class":74,"line":17139},[72,32848,32849],{"class":621},"    # 准备工作完成--->开始训练模型\n",[72,32851,32852,32854,32857,32859,32862],{"class":74,"line":17162},[72,32853,3629],{"class":78},[72,32855,32856],{"class":82}," epoch ",[72,32858,26465],{"class":78},[72,32860,32861],{"class":362}," range",[72,32863,32864],{"class":82},"(num_epochs):\n",[72,32866,32867,32870,32872,32875,32878,32880,32882,32884,32887,32889,32891],{"class":74,"line":17184},[72,32868,32869],{"class":362},"        print",[72,32871,564],{"class":82},[72,32873,32874],{"class":366},"\"Epoch ",[72,32876,32877],{"class":362},"{}",[72,32879,1138],{"class":366},[72,32881,32877],{"class":362},[72,32883,805],{"class":366},[72,32885,32886],{"class":82},".format(epoch,num_epochs",[72,32888,1086],{"class":78},[72,32890,772],{"class":362},[72,32892,30915],{"class":82},[72,32894,32895,32897,32899,32902,32904,32906],{"class":74,"line":17189},[72,32896,32869],{"class":362},[72,32898,564],{"class":82},[72,32900,32901],{"class":366},"\"-\"",[72,32903,1009],{"class":78},[72,32905,1000],{"class":362},[72,32907,570],{"class":82},[72,32909,32910],{"class":74,"line":17195},[72,32911,2828],{"emptyLinePlaceholder":490},[72,32913,32914],{"class":74,"line":17209},[72,32915,32916],{"class":621},"        # 初始化参数\n",[72,32918,32919],{"class":74,"line":17222},[72,32920,32921],{"class":621},"        # 训练集损失函数\n",[72,32923,32924,32927,32929],{"class":74,"line":17227},[72,32925,32926],{"class":82},"        train_loss",[72,32928,609],{"class":78},[72,32930,32760],{"class":362},[72,32932,32933],{"class":74,"line":17241},[72,32934,32935],{"class":621},"        # 训练集准确度\n",[72,32937,32938,32941,32943],{"class":74,"line":17246},[72,32939,32940],{"class":82},"        train_corrects",[72,32942,609],{"class":78},[72,32944,3513],{"class":362},[72,32946,32947],{"class":74,"line":17252},[72,32948,32949],{"class":621},"        # 验证集损失函数\n",[72,32951,32952,32955,32957],{"class":74,"line":17257},[72,32953,32954],{"class":82},"        val_loss",[72,32956,609],{"class":78},[72,32958,32760],{"class":362},[72,32960,32961],{"class":74,"line":17271},[72,32962,32963],{"class":621},"        # 验证集准确度\n",[72,32965,32966,32969,32971],{"class":74,"line":17276},[72,32967,32968],{"class":82},"        val_corrects",[72,32970,609],{"class":78},[72,32972,3513],{"class":362},[72,32974,32975],{"class":74,"line":17281},[72,32976,32977],{"class":621},"        # 训练集样本数量\n",[72,32979,32980,32983,32985],{"class":74,"line":17295},[72,32981,32982],{"class":82},"        train_num",[72,32984,609],{"class":78},[72,32986,3513],{"class":362},[72,32988,32989],{"class":74,"line":17307},[72,32990,32991],{"class":621},"        # 验证集样本数量\n",[72,32993,32994,32997,32999],{"class":74,"line":17312},[72,32995,32996],{"class":82},"        val_num",[72,32998,609],{"class":78},[72,33000,3513],{"class":362},[72,33002,33003],{"class":74,"line":17325},[72,33004,33005],{"class":621},"        # 将数据放到设备,并开始训练\n",[72,33007,33008,33010,33012,33014,33016],{"class":74,"line":17330},[72,33009,3831],{"class":78},[72,33011,32019],{"class":82},[72,33013,26465],{"class":78},[72,33015,32024],{"class":362},[72,33017,33018],{"class":82},"(train_dataloader):\n",[72,33020,33021],{"class":74,"line":17335},[72,33022,33023],{"class":621},"            # 将特征放入到训练设备\n",[72,33025,33026,33029,33031],{"class":74,"line":17340},[72,33027,33028],{"class":82},"            b_x",[72,33030,609],{"class":78},[72,33032,33033],{"class":82},"b_x.to(device)\n",[72,33035,33036],{"class":74,"line":17353},[72,33037,33038],{"class":621},"            # 将标签放入到训练设备当中\n",[72,33040,33041,33044,33046],{"class":74,"line":17358},[72,33042,33043],{"class":82},"            b_y",[72,33045,609],{"class":78},[72,33047,33048],{"class":82},"b_y.to(device)\n",[72,33050,33052],{"class":74,"line":33051},98,[72,33053,33054],{"class":621},"            # 设置模型为训练模式\n",[72,33056,33058],{"class":74,"line":33057},99,[72,33059,33060],{"class":82},"            model.train()\n",[72,33062,33064],{"class":74,"line":33063},100,[72,33065,33066],{"class":621},"            # 将数据放到模型当中,开始前向传播\n",[72,33068,33070],{"class":74,"line":33069},101,[72,33071,33072],{"class":621},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[72,33074,33076,33079,33081],{"class":74,"line":33075},102,[72,33077,33078],{"class":82},"            output",[72,33080,609],{"class":78},[72,33082,33083],{"class":82},"model(b_x)\n",[72,33085,33087],{"class":74,"line":33086},103,[72,33088,33089],{"class":621},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[72,33091,33093,33096,33098,33101,33104,33106,33108],{"class":74,"line":33092},104,[72,33094,33095],{"class":82},"            pre_lab",[72,33097,609],{"class":78},[72,33099,33100],{"class":82},"torch.argmax(output,",[72,33102,33103],{"class":5642},"dim",[72,33105,609],{"class":78},[72,33107,772],{"class":362},[72,33109,570],{"class":82},[72,33111,33113],{"class":74,"line":33112},105,[72,33114,33115],{"class":621},"            # 计算每一个batch的损失函数\n",[72,33117,33119,33122,33124],{"class":74,"line":33118},106,[72,33120,33121],{"class":82},"            loss",[72,33123,609],{"class":78},[72,33125,33126],{"class":82},"criterion(output,b_y)\n",[72,33128,33130],{"class":74,"line":33129},107,[72,33131,33132],{"class":621},"            # 将梯度初始化为0\n",[72,33134,33136],{"class":74,"line":33135},108,[72,33137,33138],{"class":82},"            optimizer.zero_grad()\n",[72,33140,33142],{"class":74,"line":33141},109,[72,33143,33144],{"class":621},"            # 梯度置为0后再进行反向传播\n",[72,33146,33148],{"class":74,"line":33147},110,[72,33149,33150],{"class":82},"            loss.backward()\n",[72,33152,33154],{"class":74,"line":33153},111,[72,33155,33156],{"class":621},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[72,33158,33160],{"class":74,"line":33159},112,[72,33161,33162],{"class":82},"            optimizer.step()\n",[72,33164,33166],{"class":74,"line":33165},113,[72,33167,33168],{"class":621},"            # loss.item()指的是batch的平均损失\n",[72,33170,33172,33175,33177,33180,33182,33185,33187],{"class":74,"line":33171},114,[72,33173,33174],{"class":82},"            train_loss",[72,33176,9903],{"class":78},[72,33178,33179],{"class":82},"loss.item()",[72,33181,1009],{"class":78},[72,33183,33184],{"class":82},"b_x.size(",[72,33186,747],{"class":362},[72,33188,570],{"class":82},[72,33190,33192],{"class":74,"line":33191},115,[72,33193,33194],{"class":621},"            # 计算每个批次中正确预测的数量\n",[72,33196,33198,33201,33203,33206,33208],{"class":74,"line":33197},116,[72,33199,33200],{"class":82},"            train_corrects",[72,33202,9903],{"class":78},[72,33204,33205],{"class":82},"torch.sum(pre_lab",[72,33207,3377],{"class":78},[72,33209,33210],{"class":82},"b_y.data)\n",[72,33212,33214],{"class":74,"line":33213},117,[72,33215,33216],{"class":621},"            # 计算目前为止一共处理了多少样本\n",[72,33218,33220,33223,33225,33227,33229],{"class":74,"line":33219},118,[72,33221,33222],{"class":82},"            train_num",[72,33224,9903],{"class":78},[72,33226,33184],{"class":82},[72,33228,747],{"class":362},[72,33230,570],{"class":82},[72,33232,33234],{"class":74,"line":33233},119,[72,33235,33236],{"class":621},"        # 验证数据\n",[72,33238,33240,33242,33245,33247,33249],{"class":74,"line":33239},120,[72,33241,3831],{"class":78},[72,33243,33244],{"class":82}," step ,(b_x,b_y) ",[72,33246,26465],{"class":78},[72,33248,32024],{"class":362},[72,33250,33251],{"class":82},"(val_dataloader):\n",[72,33253,33255],{"class":74,"line":33254},121,[72,33256,33257],{"class":621},"            # 将特征放到验证设备当中\n",[72,33259,33261,33263,33265],{"class":74,"line":33260},122,[72,33262,33028],{"class":82},[72,33264,609],{"class":78},[72,33266,33033],{"class":82},[72,33268,33270],{"class":74,"line":33269},123,[72,33271,33272],{"class":621},"            # 将标签放到放到训练设备当中\n",[72,33274,33276,33278,33280],{"class":74,"line":33275},124,[72,33277,33043],{"class":82},[72,33279,609],{"class":78},[72,33281,33048],{"class":82},[72,33283,33285],{"class":74,"line":33284},125,[72,33286,33287],{"class":621},"            # 开启验证模式，设置模型为评估模式\n",[72,33289,33291],{"class":74,"line":33290},126,[72,33292,33293],{"class":82},"            model.eval()\n",[72,33295,33297,33300],{"class":74,"line":33296},127,[72,33298,33299],{"class":78},"            with",[72,33301,33302],{"class":82}," torch.no_grad():\n",[72,33304,33306],{"class":74,"line":33305},128,[72,33307,33308],{"class":621},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[72,33310,33312,33315,33317],{"class":74,"line":33311},129,[72,33313,33314],{"class":82},"                output ",[72,33316,609],{"class":78},[72,33318,33319],{"class":82}," model(b_x)\n",[72,33321,33323],{"class":74,"line":33322},130,[72,33324,33325],{"class":621},"                # 查找每一行中最大值对应的下标\n",[72,33327,33329,33332,33334,33337,33339,33341,33343],{"class":74,"line":33328},131,[72,33330,33331],{"class":82},"                pre_lab ",[72,33333,609],{"class":78},[72,33335,33336],{"class":82}," torch.argmax(output, ",[72,33338,33103],{"class":5642},[72,33340,609],{"class":78},[72,33342,772],{"class":362},[72,33344,570],{"class":82},[72,33346,33348],{"class":74,"line":33347},132,[72,33349,33350],{"class":621},"                # 计算验证集上的当前 batch 损失\n",[72,33352,33354,33357,33359],{"class":74,"line":33353},133,[72,33355,33356],{"class":82},"                val_batch_loss ",[72,33358,609],{"class":78},[72,33360,33361],{"class":82}," criterion(output, b_y)\n",[72,33363,33365],{"class":74,"line":33364},134,[72,33366,33367],{"class":621},"                # 对损失函数进行累加（按样本数加权）\n",[72,33369,33371,33374,33376,33379,33381,33384,33386],{"class":74,"line":33370},135,[72,33372,33373],{"class":82},"                val_loss ",[72,33375,9903],{"class":78},[72,33377,33378],{"class":82}," val_batch_loss.item() ",[72,33380,1009],{"class":78},[72,33382,33383],{"class":82}," b_x.size(",[72,33385,747],{"class":362},[72,33387,570],{"class":82},[72,33389,33391,33394,33396,33399,33401],{"class":74,"line":33390},136,[72,33392,33393],{"class":82},"                val_corrects ",[72,33395,9903],{"class":78},[72,33397,33398],{"class":82}," torch.sum(pre_lab ",[72,33400,3377],{"class":78},[72,33402,33403],{"class":82}," b_y.data)\n",[72,33405,33407],{"class":74,"line":33406},137,[72,33408,33409],{"class":621},"                # 当前用于验证的样本数量\n",[72,33411,33413,33416,33418,33420,33422],{"class":74,"line":33412},138,[72,33414,33415],{"class":82},"            val_num ",[72,33417,9903],{"class":78},[72,33419,33383],{"class":82},[72,33421,747],{"class":362},[72,33423,570],{"class":82},[72,33425,33427],{"class":74,"line":33426},139,[72,33428,33429],{"class":621},"        # 计算并保存每一次迭代的loss值和准确率\n",[72,33431,33433],{"class":74,"line":33432},140,[72,33434,33435],{"class":621},"        # 计算并保存训练集的loss值\n",[72,33437,33439,33442,33444],{"class":74,"line":33438},141,[72,33440,33441],{"class":82},"        train_loss_all.append(train_loss",[72,33443,1138],{"class":78},[72,33445,33446],{"class":82},"train_num)\n",[72,33448,33450],{"class":74,"line":33449},142,[72,33451,33452],{"class":621},"        # 取双精度\n",[72,33454,33456],{"class":74,"line":33455},143,[72,33457,33458],{"class":621},"        # 计算并保存训练集的准确率\n",[72,33460,33462,33465,33467],{"class":74,"line":33461},144,[72,33463,33464],{"class":82},"        train_acc_all.append(train_corrects.double().item()",[72,33466,1138],{"class":78},[72,33468,33446],{"class":82},[72,33470,33472],{"class":74,"line":33471},145,[72,33473,33474],{"class":621},"        # 计算并保存验证集的loss值\n",[72,33476,33478,33481,33483],{"class":74,"line":33477},146,[72,33479,33480],{"class":82},"        val_loss_all.append(val_loss",[72,33482,1138],{"class":78},[72,33484,33485],{"class":82},"val_num)\n",[72,33487,33489],{"class":74,"line":33488},147,[72,33490,33491],{"class":621},"        # 计算并保存验证集的准确率\n",[72,33493,33495,33498,33500],{"class":74,"line":33494},148,[72,33496,33497],{"class":82},"        val_acc_all.append(val_corrects.double().item()",[72,33499,1138],{"class":78},[72,33501,33485],{"class":82},[72,33503,33505],{"class":74,"line":33504},149,[72,33506,2828],{"emptyLinePlaceholder":490},[72,33508,33510],{"class":74,"line":33509},150,[72,33511,33512],{"class":621},"        # 打印训练一轮的loss值和准确率\n",[72,33514,33516,33518,33520,33522,33524,33527,33529,33532,33534,33537,33539,33541,33543,33545,33548,33550,33552,33555,33557,33559],{"class":74,"line":33515},151,[72,33517,32869],{"class":362},[72,33519,564],{"class":82},[72,33521,4020],{"class":366},[72,33523,32877],{"class":362},[72,33525,33526],{"class":366},"train loss:",[72,33528,1450],{"class":362},[72,33530,33531],{"class":78},":.4f",[72,33533,1500],{"class":362},[72,33535,33536],{"class":366}," train acc:",[72,33538,1450],{"class":362},[72,33540,33531],{"class":78},[72,33542,1500],{"class":362},[72,33544,4020],{"class":366},[72,33546,33547],{"class":82},".format(epoch,train_loss_all[",[72,33549,1086],{"class":78},[72,33551,772],{"class":362},[72,33553,33554],{"class":82},"],train_acc_all[",[72,33556,1086],{"class":78},[72,33558,772],{"class":362},[72,33560,33561],{"class":82},"]))\n",[72,33563,33565,33567,33569,33571,33573,33576,33578,33580,33582,33585,33587,33589,33591,33593,33596,33598,33600,33603,33605,33607],{"class":74,"line":33564},152,[72,33566,32869],{"class":362},[72,33568,564],{"class":82},[72,33570,4020],{"class":366},[72,33572,32877],{"class":362},[72,33574,33575],{"class":366},"val loss:",[72,33577,1450],{"class":362},[72,33579,33531],{"class":78},[72,33581,1500],{"class":362},[72,33583,33584],{"class":366}," val acc:",[72,33586,1450],{"class":362},[72,33588,33531],{"class":78},[72,33590,1500],{"class":362},[72,33592,4020],{"class":366},[72,33594,33595],{"class":82},".format(epoch,val_loss_all[",[72,33597,1086],{"class":78},[72,33599,772],{"class":362},[72,33601,33602],{"class":82},"],val_acc_all[",[72,33604,1086],{"class":78},[72,33606,772],{"class":362},[72,33608,33561],{"class":82},[72,33610,33612],{"class":74,"line":33611},153,[72,33613,2828],{"emptyLinePlaceholder":490},[72,33615,33617],{"class":74,"line":33616},154,[72,33618,33619],{"class":621},"        # 判断准确度--->保存最优模型\n",[72,33621,33623,33625,33628,33630,33632,33634,33636],{"class":74,"line":33622},155,[72,33624,2925],{"class":78},[72,33626,33627],{"class":82}," val_acc_all[",[72,33629,1086],{"class":78},[72,33631,772],{"class":362},[72,33633,1494],{"class":82},[72,33635,1514],{"class":78},[72,33637,33638],{"class":82},"best_acc:\n",[72,33640,33642],{"class":74,"line":33641},156,[72,33643,33644],{"class":621},"            # 保存当前模型准确度\n",[72,33646,33648,33651,33653,33655,33658,33660,33662],{"class":74,"line":33647},157,[72,33649,33650],{"class":82},"            best_acc:",[72,33652,603],{"class":362},[72,33654,609],{"class":78},[72,33656,33657],{"class":82},"val_acc_all[",[72,33659,1086],{"class":78},[72,33661,772],{"class":362},[72,33663,33664],{"class":82},"]\n",[72,33666,33668],{"class":74,"line":33667},158,[72,33669,33670],{"class":621},"            # 保存当前的准确度\n",[72,33672,33674],{"class":74,"line":33673},159,[72,33675,33676],{"class":621},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[72,33678,33680,33683,33685],{"class":74,"line":33679},160,[72,33681,33682],{"class":82},"            best_model_wts",[72,33684,609],{"class":78},[72,33686,32732],{"class":82},[72,33688,33690],{"class":74,"line":33689},161,[72,33691,2828],{"emptyLinePlaceholder":490},[72,33693,33695],{"class":74,"line":33694},162,[72,33696,33697],{"class":621},"        # 计算耗时\n",[72,33699,33701,33704,33706,33709,33711],{"class":74,"line":33700},163,[72,33702,33703],{"class":82},"        time_use",[72,33705,609],{"class":78},[72,33707,33708],{"class":82},"time.time()",[72,33710,1086],{"class":78},[72,33712,33713],{"class":82},"since\n",[72,33715,33717,33719,33721,33724,33726,33729,33731,33733,33735,33737,33739,33742,33745,33748,33750,33753,33755,33757],{"class":74,"line":33716},164,[72,33718,32869],{"class":362},[72,33720,564],{"class":82},[72,33722,33723],{"class":366},"'训练和验证耗费的时间",[72,33725,1450],{"class":362},[72,33727,33728],{"class":78},":.0f",[72,33730,1500],{"class":362},[72,33732,1098],{"class":366},[72,33734,1450],{"class":362},[72,33736,33728],{"class":78},[72,33738,1500],{"class":362},[72,33740,33741],{"class":366},"s'",[72,33743,33744],{"class":82},".format(time_use",[72,33746,33747],{"class":78},"\u002F\u002F",[72,33749,1461],{"class":362},[72,33751,33752],{"class":82},",time_use",[72,33754,882],{"class":78},[72,33756,1461],{"class":362},[72,33758,30915],{"class":82},[72,33760,33762],{"class":74,"line":33761},165,[72,33763,33764],{"class":621},"    # 选择最优参数\n",[72,33766,33768],{"class":74,"line":33767},166,[72,33769,33770],{"class":621},"    # 加载最高准确率下的模型参数\n",[72,33772,33774],{"class":74,"line":33773},167,[72,33775,33776],{"class":621},"    # model.load_state_dict(best_model_wts)\n",[72,33778,33780,33783,33786],{"class":74,"line":33779},168,[72,33781,33782],{"class":82},"    torch.save(model.state_dict(best_model_wts), ",[72,33784,33785],{"class":366},"'.\u002Fbest_model.pth'",[72,33787,570],{"class":82},[72,33789,33791],{"class":74,"line":33790},169,[72,33792,33793],{"class":621},"    # 或者写成\n",[72,33795,33797],{"class":74,"line":33796},170,[72,33798,33799],{"class":621},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[72,33801,33803],{"class":74,"line":33802},171,[72,33804,33805],{"class":621},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[72,33807,33809,33812,33814,33817,33820,33822],{"class":74,"line":33808},172,[72,33810,33811],{"class":82},"    train_process",[72,33813,609],{"class":78},[72,33815,33816],{"class":82},"pd.DataFrame(",[72,33818,33819],{"class":5642},"data",[72,33821,609],{"class":78},[72,33823,1975],{"class":82},[72,33825,33827,33830,33832,33835],{"class":74,"line":33826},173,[72,33828,33829],{"class":366},"        \"epoch\"",[72,33831,1413],{"class":82},[72,33833,33834],{"class":362},"range",[72,33836,33837],{"class":82},"(num_epochs),\n",[72,33839,33841,33844],{"class":74,"line":33840},174,[72,33842,33843],{"class":366},"        \"train_loss_all\"",[72,33845,33846],{"class":82},":train_loss_all,\n",[72,33848,33850,33853],{"class":74,"line":33849},175,[72,33851,33852],{"class":366},"        \"val_loss_all\"",[72,33854,33855],{"class":82},":val_loss_all,\n",[72,33857,33859,33862],{"class":74,"line":33858},176,[72,33860,33861],{"class":366},"        \"train_acc_all\"",[72,33863,33864],{"class":82},":train_acc_all,\n",[72,33866,33868,33871],{"class":74,"line":33867},177,[72,33869,33870],{"class":366},"        \"val_acc_all\"",[72,33872,33873],{"class":82},":val_acc_all\n",[72,33875,33877],{"class":74,"line":33876},178,[72,33878,33879],{"class":82},"    })\n",[72,33881,33883],{"class":74,"line":33882},179,[72,33884,33885],{"class":621},"    # 返回训练保存的过程\n",[72,33887,33889,33891],{"class":74,"line":33888},180,[72,33890,4518],{"class":78},[72,33892,33893],{"class":82}," train_process\n",[72,33895,33897],{"class":74,"line":33896},181,[72,33898,2828],{"emptyLinePlaceholder":490},[72,33900,33902],{"class":74,"line":33901},182,[72,33903,33904],{"class":621},"# 将loss值和精度按照图片的形式展示出来\n",[72,33906,33908,33910,33913],{"class":74,"line":33907},183,[72,33909,32365],{"class":78},[72,33911,33912],{"class":358}," matplot_acc_loss",[72,33914,33915],{"class":82},"(train_process):\n",[72,33917,33919],{"class":74,"line":33918},184,[72,33920,33921],{"class":621},"    # 设置图的大小\n",[72,33923,33925,33928,33930,33932,33934,33936,33938,33940],{"class":74,"line":33924},185,[72,33926,33927],{"class":82},"    plt.figure(",[72,33929,32111],{"class":5642},[72,33931,609],{"class":78},[72,33933,564],{"class":82},[72,33935,1052],{"class":362},[72,33937,932],{"class":82},[72,33939,847],{"class":362},[72,33941,30915],{"class":82},[72,33943,33945],{"class":74,"line":33944},186,[72,33946,33947],{"class":621},"    # 设置图中有几张图\n",[72,33949,33951],{"class":74,"line":33950},187,[72,33952,33953],{"class":621},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[72,33955,33957],{"class":74,"line":33956},188,[72,33958,33959],{"class":621},"    # ①loss图\n",[72,33961,33963,33965,33967,33969,33971,33973,33975],{"class":74,"line":33962},189,[72,33964,32145],{"class":82},[72,33966,772],{"class":362},[72,33968,932],{"class":82},[72,33970,640],{"class":362},[72,33972,932],{"class":82},[72,33974,772],{"class":362},[72,33976,570],{"class":82},[72,33978,33980],{"class":74,"line":33979},190,[72,33981,33982],{"class":621},"    # 补充:\n",[72,33984,33986],{"class":74,"line":33985},191,[72,33987,33988],{"class":621},"    # plt.subplot(nrows, ncols, index)\n",[72,33990,33992],{"class":74,"line":33991},192,[72,33993,33994],{"class":621},"    # nrows：行数\n",[72,33996,33998],{"class":74,"line":33997},193,[72,33999,34000],{"class":621},"    # ncols：列数\n",[72,34002,34004],{"class":74,"line":34003},194,[72,34005,34006],{"class":621},"    # index：目前选中第几个子图（从1开始）\n",[72,34008,34010,34013,34016,34019,34022,34024,34027,34029,34032],{"class":74,"line":34009},195,[72,34011,34012],{"class":82},"    plt.plot(train_process[",[72,34014,34015],{"class":366},"\"epoch\"",[72,34017,34018],{"class":82},"],train_process.train_loss_all,",[72,34020,34021],{"class":366},"'ro-'",[72,34023,932],{"class":82},[72,34025,34026],{"class":5642},"label",[72,34028,609],{"class":78},[72,34030,34031],{"class":366},"'train loss'",[72,34033,570],{"class":82},[72,34035,34037,34039,34041,34044,34047,34049,34051,34053,34056],{"class":74,"line":34036},196,[72,34038,34012],{"class":82},[72,34040,34015],{"class":366},[72,34042,34043],{"class":82},"],train_process.val_loss_all,",[72,34045,34046],{"class":366},"'bs--'",[72,34048,932],{"class":82},[72,34050,34026],{"class":5642},[72,34052,609],{"class":78},[72,34054,34055],{"class":366},"'val loss'",[72,34057,570],{"class":82},[72,34059,34061],{"class":74,"line":34060},197,[72,34062,34063],{"class":621},"    # 添加一个图例\n",[72,34065,34067],{"class":74,"line":34066},198,[72,34068,34069],{"class":82},"    plt.legend()\n",[72,34071,34073],{"class":74,"line":34072},199,[72,34074,34075],{"class":621},"    # 给轴添加标签\n",[72,34077,34079,34082,34085],{"class":74,"line":34078},200,[72,34080,34081],{"class":82},"    plt.xlabel(",[72,34083,34084],{"class":366},"'epoch'",[72,34086,570],{"class":82},[72,34088,34090,34093,34096],{"class":74,"line":34089},201,[72,34091,34092],{"class":82},"    plt.ylabel(",[72,34094,34095],{"class":366},"'loss'",[72,34097,570],{"class":82},[72,34099,34101],{"class":74,"line":34100},202,[72,34102,34103],{"class":621},"    # ②准确度图\n",[72,34105,34107,34109,34111,34113,34115,34117,34119],{"class":74,"line":34106},203,[72,34108,32145],{"class":82},[72,34110,772],{"class":362},[72,34112,932],{"class":82},[72,34114,640],{"class":362},[72,34116,932],{"class":82},[72,34118,640],{"class":362},[72,34120,570],{"class":82},[72,34122,34124,34126,34128,34131,34133,34135,34137,34139,34142],{"class":74,"line":34123},204,[72,34125,34012],{"class":82},[72,34127,34015],{"class":366},[72,34129,34130],{"class":82},"],train_process.train_acc_all,",[72,34132,34021],{"class":366},[72,34134,932],{"class":82},[72,34136,34026],{"class":5642},[72,34138,609],{"class":78},[72,34140,34141],{"class":366},"'train acc'",[72,34143,570],{"class":82},[72,34145,34147,34149,34151,34154,34156,34158,34160,34162,34165],{"class":74,"line":34146},205,[72,34148,34012],{"class":82},[72,34150,34015],{"class":366},[72,34152,34153],{"class":82},"],train_process.val_acc_all,",[72,34155,34046],{"class":366},[72,34157,932],{"class":82},[72,34159,34026],{"class":5642},[72,34161,609],{"class":78},[72,34163,34164],{"class":366},"'val acc'",[72,34166,570],{"class":82},[72,34168,34170],{"class":74,"line":34169},206,[72,34171,34172],{"class":621},"    # 添加图例\n",[72,34174,34176],{"class":74,"line":34175},207,[72,34177,34069],{"class":82},[72,34179,34181,34183,34185],{"class":74,"line":34180},208,[72,34182,34081],{"class":82},[72,34184,34015],{"class":366},[72,34186,570],{"class":82},[72,34188,34190,34192,34195],{"class":74,"line":34189},209,[72,34191,34092],{"class":82},[72,34193,34194],{"class":366},"\"acc\"",[72,34196,570],{"class":82},[72,34198,34200],{"class":74,"line":34199},210,[72,34201,34202],{"class":82},"    plt.show()\n",[72,34204,34206],{"class":74,"line":34205},211,[72,34207,2828],{"emptyLinePlaceholder":490},[72,34209,34211],{"class":74,"line":34210},212,[72,34212,34213],{"class":621},"# 正式开始训练:\n",[72,34215,34217,34219,34221,34223,34225],{"class":74,"line":34216},213,[72,34218,1960],{"class":78},[72,34220,31638],{"class":362},[72,34222,3377],{"class":78},[72,34224,31643],{"class":366},[72,34226,4167],{"class":82},[72,34228,34230],{"class":74,"line":34229},214,[72,34231,34232],{"class":621},"    # 将模型实例化\n",[72,34234,34236,34239,34241],{"class":74,"line":34235},215,[72,34237,34238],{"class":82},"    LeNet",[72,34240,609],{"class":78},[72,34242,34243],{"class":82},"LeNet()\n",[72,34245,34247,34250,34252],{"class":74,"line":34246},216,[72,34248,34249],{"class":82},"    train_dataloader,val_dataloader",[72,34251,609],{"class":78},[72,34253,34254],{"class":82},"train_val_data_process()\n",[72,34256,34258,34260,34262,34265,34268,34270,34272],{"class":74,"line":34257},217,[72,34259,33811],{"class":82},[72,34261,609],{"class":78},[72,34263,34264],{"class":82},"train_model_process(LeNet,train_dataloader,val_dataloader,",[72,34266,34267],{"class":5642},"num_epochs",[72,34269,609],{"class":78},[72,34271,1254],{"class":362},[72,34273,570],{"class":82},[72,34275,34277],{"class":74,"line":34276},218,[72,34278,34279],{"class":82},"    matplot_acc_loss(train_process)\n",[15,34281,34282],{},"画图的补充点学习：",[15,34284,34285],{},[1891,34286],{"alt":68,"src":34287},"\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",[22,34289,34290],{"start":1608},[25,34291,34292],{},"测试",[63,34294,34296],{"className":65,"code":34295,"language":67,"meta":68,"style":68},"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",[34,34297,34298,34304,34314,34326,34336,34341,34351,34361,34365,34370,34379,34396,34408,34425,34436,34452,34457,34468,34479,34490,34497,34501,34506,34516,34521,34538,34546,34550,34555,34564,34573,34577,34582,34587,34592,34599,34604,34616,34626,34636,34641,34645,34650,34659,34664,34680,34685,34690,34695,34709,34714,34728,34732,34737,34752,34757,34769,34773,34778,34790,34795,34803,34808,34813,34823,34828,34837,34842,34847,34851,34856,34861,34877,34885,34890,34895,34954,34960,34965,34976,34984,34992,34996,35001,35005,35010,35018,35023,35039,35044,35054,35064],{"__ignoreMap":68},[72,34299,34300,34302],{"class":74,"line":75},[72,34301,79],{"class":78},[72,34303,30813],{"class":82},[72,34305,34306,34308,34310,34312],{"class":74,"line":370},[72,34307,79],{"class":78},[72,34309,31833],{"class":82},[72,34311,31801],{"class":78},[72,34313,31838],{"class":82},[72,34315,34316,34318,34321,34323],{"class":74,"line":1608},[72,34317,31155],{"class":78},[72,34319,34320],{"class":82}," jupyter_client.consoleapp ",[72,34322,79],{"class":78},[72,34324,34325],{"class":82}," classes\n",[72,34327,34328,34330,34332,34334],{"class":74,"line":1623},[72,34329,31155],{"class":78},[72,34331,31816],{"class":82},[72,34333,79],{"class":78},[72,34335,31821],{"class":82},[72,34337,34338],{"class":74,"line":1629},[72,34339,34340],{"class":621},"# 导入数据集\n",[72,34342,34343,34345,34347,34349],{"class":74,"line":1643},[72,34344,31155],{"class":78},[72,34346,31786],{"class":82},[72,34348,79],{"class":78},[72,34350,31791],{"class":82},[72,34352,34353,34355,34357,34359],{"class":74,"line":1649},[72,34354,31155],{"class":78},[72,34356,32332],{"class":82},[72,34358,79],{"class":78},[72,34360,32337],{"class":82},[72,34362,34363],{"class":74,"line":1740},[72,34364,2828],{"emptyLinePlaceholder":490},[72,34366,34367],{"class":74,"line":1746},[72,34368,34369],{"class":621},"# 测试数据处理\n",[72,34371,34372,34374,34377],{"class":74,"line":1758},[72,34373,32365],{"class":78},[72,34375,34376],{"class":358}," test_data_process",[72,34378,32371],{"class":82},[72,34380,34381,34384,34386,34388,34390,34392,34394],{"class":74,"line":2041},[72,34382,34383],{"class":82},"    test_data",[72,34385,609],{"class":78},[72,34387,31873],{"class":82},[72,34389,31876],{"class":5642},[72,34391,609],{"class":78},[72,34393,31881],{"class":366},[72,34395,31884],{"class":82},[72,34397,34398,34401,34403,34406],{"class":74,"line":2046},[72,34399,34400],{"class":5642},"                           train",[72,34402,609],{"class":78},[72,34404,34405],{"class":362},"False",[72,34407,31884],{"class":82},[72,34409,34410,34413,34415,34417,34419,34421,34423],{"class":74,"line":2052},[72,34411,34412],{"class":5642},"                           transform",[72,34414,609],{"class":78},[72,34416,31911],{"class":82},[72,34418,31914],{"class":5642},[72,34420,609],{"class":78},[72,34422,1455],{"class":362},[72,34424,31922],{"class":82},[72,34426,34427,34430,34432,34434],{"class":74,"line":2057},[72,34428,34429],{"class":5642},"                           download",[72,34431,609],{"class":78},[72,34433,31894],{"class":362},[72,34435,570],{"class":82},[72,34437,34438,34441,34443,34445,34447,34449],{"class":74,"line":2071},[72,34439,34440],{"class":82},"    test_dataloader",[72,34442,609],{"class":78},[72,34444,31952],{"class":82},[72,34446,31955],{"class":5642},[72,34448,609],{"class":78},[72,34450,34451],{"class":82},"test_data,\n",[72,34453,34454],{"class":74,"line":2076},[72,34455,34456],{"class":621},"                                    # 这里是一张一张进行测试\n",[72,34458,34459,34462,34464,34466],{"class":74,"line":2082},[72,34460,34461],{"class":5642},"                                    batch_size",[72,34463,609],{"class":78},[72,34465,772],{"class":362},[72,34467,31884],{"class":82},[72,34469,34470,34473,34475,34477],{"class":74,"line":2103},[72,34471,34472],{"class":5642},"                                    shuffle",[72,34474,609],{"class":78},[72,34476,31894],{"class":362},[72,34478,31884],{"class":82},[72,34480,34481,34484,34486,34488],{"class":74,"line":2108},[72,34482,34483],{"class":5642},"                                    num_workers",[72,34485,609],{"class":78},[72,34487,747],{"class":362},[72,34489,570],{"class":82},[72,34491,34492,34494],{"class":74,"line":2122},[72,34493,4518],{"class":78},[72,34495,34496],{"class":82}," test_dataloader\n",[72,34498,34499],{"class":74,"line":2127},[72,34500,2828],{"emptyLinePlaceholder":490},[72,34502,34503],{"class":74,"line":2156},[72,34504,34505],{"class":621},"# 定义模型测试函数\n",[72,34507,34508,34510,34513],{"class":74,"line":2161},[72,34509,32365],{"class":78},[72,34511,34512],{"class":358}," test_model_process",[72,34514,34515],{"class":82},"(model,test_dataloader):\n",[72,34517,34518],{"class":74,"line":2178},[72,34519,34520],{"class":621},"    # 将模型放到设备当中，先进行判断\n",[72,34522,34523,34525,34527,34529,34531,34533,34535],{"class":74,"line":2183},[72,34524,31655],{"class":82},[72,34526,609],{"class":78},[72,34528,31662],{"class":366},[72,34530,2133],{"class":78},[72,34532,31667],{"class":82},[72,34534,2130],{"class":78},[72,34536,34537],{"class":366}," \"cpu\"\n",[72,34539,34540,34542,34544],{"class":74,"line":2188},[72,34541,31707],{"class":82},[72,34543,609],{"class":78},[72,34545,32707],{"class":82},[72,34547,34548],{"class":74,"line":2193},[72,34549,2828],{"emptyLinePlaceholder":490},[72,34551,34552],{"class":74,"line":2207},[72,34553,34554],{"class":621},"    # 设置初始化参数\n",[72,34556,34557,34560,34562],{"class":74,"line":2212},[72,34558,34559],{"class":82},"    test_corrects",[72,34561,609],{"class":78},[72,34563,32760],{"class":362},[72,34565,34566,34569,34571],{"class":74,"line":3005},[72,34567,34568],{"class":82},"    test_num",[72,34570,609],{"class":78},[72,34572,3513],{"class":362},[72,34574,34575],{"class":74,"line":3019},[72,34576,2828],{"emptyLinePlaceholder":490},[72,34578,34579],{"class":74,"line":3027},[72,34580,34581],{"class":621},"    # 进行模型测试\n",[72,34583,34584],{"class":74,"line":3032},[72,34585,34586],{"class":621},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[72,34588,34589],{"class":74,"line":3038},[72,34590,34591],{"class":621},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[72,34593,34594,34597],{"class":74,"line":3044},[72,34595,34596],{"class":78},"    with",[72,34598,33302],{"class":82},[72,34600,34601],{"class":74,"line":3049},[72,34602,34603],{"class":621},"        # 从数据中进行\n",[72,34605,34606,34608,34611,34613],{"class":74,"line":8374},[72,34607,3831],{"class":78},[72,34609,34610],{"class":82}," test_data_x,test_data_y ",[72,34612,26465],{"class":78},[72,34614,34615],{"class":82}," test_dataloader:\n",[72,34617,34618,34621,34623],{"class":74,"line":8398},[72,34619,34620],{"class":82},"            test_data_x",[72,34622,609],{"class":78},[72,34624,34625],{"class":82},"test_data_x.to(device)\n",[72,34627,34628,34631,34633],{"class":74,"line":8403},[72,34629,34630],{"class":82},"            test_data_y",[72,34632,609],{"class":78},[72,34634,34635],{"class":82},"test_data_y.to(device)\n",[72,34637,34638],{"class":74,"line":8409},[72,34639,34640],{"class":621},"            # 设置为验证模式\n",[72,34642,34643],{"class":74,"line":8436},[72,34644,33293],{"class":82},[72,34646,34647],{"class":74,"line":8441},[72,34648,34649],{"class":621},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[72,34651,34652,34654,34656],{"class":74,"line":8447},[72,34653,33078],{"class":82},[72,34655,609],{"class":78},[72,34657,34658],{"class":82},"model(test_data_x)\n",[72,34660,34661],{"class":74,"line":8459},[72,34662,34663],{"class":621},"            # 查找每一行中最大值对应的下标\n",[72,34665,34666,34668,34670,34672,34674,34676,34678],{"class":74,"line":8471},[72,34667,33095],{"class":82},[72,34669,609],{"class":78},[72,34671,33100],{"class":82},[72,34673,33103],{"class":5642},[72,34675,609],{"class":78},[72,34677,772],{"class":362},[72,34679,570],{"class":82},[72,34681,34682],{"class":74,"line":8483},[72,34683,34684],{"class":621},"            # 计算正确率\n",[72,34686,34687],{"class":74,"line":10142},[72,34688,34689],{"class":621},"            # .data表示是一个不带梯度信息的tensor\n",[72,34691,34692],{"class":74,"line":10167},[72,34693,34694],{"class":621},"            # 如果预测正确，则准确度test_corrects加1\n",[72,34696,34697,34700,34702,34704,34706],{"class":74,"line":10190},[72,34698,34699],{"class":82},"            test_corrects",[72,34701,9903],{"class":78},[72,34703,33205],{"class":82},[72,34705,3377],{"class":78},[72,34707,34708],{"class":82},"test_data_y.data)\n",[72,34710,34711],{"class":74,"line":10214},[72,34712,34713],{"class":621},"            # 将所有的测试样本进行累计\n",[72,34715,34716,34719,34721,34724,34726],{"class":74,"line":10219},[72,34717,34718],{"class":82},"            test_num",[72,34720,9903],{"class":78},[72,34722,34723],{"class":82},"test_data_x.size(",[72,34725,747],{"class":362},[72,34727,570],{"class":82},[72,34729,34730],{"class":74,"line":10224},[72,34731,2828],{"emptyLinePlaceholder":490},[72,34733,34734],{"class":74,"line":10229},[72,34735,34736],{"class":621},"        # 计算准确度\n",[72,34738,34739,34742,34744,34747,34749],{"class":74,"line":10238},[72,34740,34741],{"class":82},"        test_acc",[72,34743,609],{"class":78},[72,34745,34746],{"class":82},"test_corrects.double().item()",[72,34748,1138],{"class":78},[72,34750,34751],{"class":82},"test_num\n",[72,34753,34754],{"class":74,"line":10243},[72,34755,34756],{"class":621},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[72,34758,34759,34761,34763,34766],{"class":74,"line":10249},[72,34760,32869],{"class":362},[72,34762,564],{"class":82},[72,34764,34765],{"class":366},"\"测试的准确率：\"",[72,34767,34768],{"class":82},",test_acc)\n",[72,34770,34771],{"class":74,"line":10270},[72,34772,2828],{"emptyLinePlaceholder":490},[72,34774,34775],{"class":74,"line":10276},[72,34776,34777],{"class":621},"# 实现模型的测试功能\n",[72,34779,34780,34782,34784,34786,34788],{"class":74,"line":10290},[72,34781,1960],{"class":78},[72,34783,31638],{"class":362},[72,34785,3377],{"class":78},[72,34787,31643],{"class":366},[72,34789,4167],{"class":82},[72,34791,34792],{"class":74,"line":10296},[72,34793,34794],{"class":621},"    # 加载模型\n",[72,34796,34797,34799,34801],{"class":74,"line":10323},[72,34798,31707],{"class":82},[72,34800,609],{"class":78},[72,34802,34243],{"class":82},[72,34804,34805],{"class":74,"line":10332},[72,34806,34807],{"class":621},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[72,34809,34810],{"class":74,"line":10338},[72,34811,34812],{"class":621},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[72,34814,34815,34818,34821],{"class":74,"line":10346},[72,34816,34817],{"class":82},"    model.load_state_dict(torch.load(",[72,34819,34820],{"class":366},"'best_model.pth'",[72,34822,30915],{"class":82},[72,34824,34825],{"class":74,"line":10351},[72,34826,34827],{"class":621},"    # 数据加载\n",[72,34829,34830,34832,34834],{"class":74,"line":17030},[72,34831,34440],{"class":82},[72,34833,609],{"class":78},[72,34835,34836],{"class":82},"test_data_process()\n",[72,34838,34839],{"class":74,"line":17036},[72,34840,34841],{"class":621},"    # 加载模型测试的函数\n",[72,34843,34844],{"class":74,"line":17059},[72,34845,34846],{"class":82},"    test_model_process(model,test_dataloader)\n",[72,34848,34849],{"class":74,"line":17065},[72,34850,2828],{"emptyLinePlaceholder":490},[72,34852,34853],{"class":74,"line":17088},[72,34854,34855],{"class":621},"    # 验证集推理实现：\n",[72,34857,34858],{"class":74,"line":17102},[72,34859,34860],{"class":621},"    # 加载数据加载的更详细一些\n",[72,34862,34863,34865,34867,34869,34871,34873,34875],{"class":74,"line":17122},[72,34864,31655],{"class":82},[72,34866,609],{"class":78},[72,34868,31662],{"class":366},[72,34870,2133],{"class":78},[72,34872,31667],{"class":82},[72,34874,2130],{"class":78},[72,34876,34537],{"class":366},[72,34878,34879,34881,34883],{"class":74,"line":17128},[72,34880,31707],{"class":82},[72,34882,609],{"class":78},[72,34884,32707],{"class":82},[72,34886,34887],{"class":74,"line":17139},[72,34888,34889],{"class":621},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[72,34891,34892],{"class":74,"line":17162},[72,34893,34894],{"class":621},"    # 顺序不可改变\n",[72,34896,34897,34900,34902,34904,34907,34909,34912,34914,34917,34919,34922,34924,34927,34929,34932,34934,34937,34939,34942,34944,34947,34949,34952],{"class":74,"line":17184},[72,34898,34899],{"class":82},"    classes",[72,34901,609],{"class":78},[72,34903,1444],{"class":82},[72,34905,34906],{"class":366},"'T-shirt\u002Ftop'",[72,34908,932],{"class":82},[72,34910,34911],{"class":366},"'Trouser'",[72,34913,932],{"class":82},[72,34915,34916],{"class":366},"'Pullover'",[72,34918,932],{"class":82},[72,34920,34921],{"class":366},"'Dress'",[72,34923,932],{"class":82},[72,34925,34926],{"class":366},"'Coat'",[72,34928,932],{"class":82},[72,34930,34931],{"class":366},"'Sandal'",[72,34933,932],{"class":82},[72,34935,34936],{"class":366},"'Shirt'",[72,34938,932],{"class":82},[72,34940,34941],{"class":366},"'Sneaker'",[72,34943,932],{"class":82},[72,34945,34946],{"class":366},"'Bag'",[72,34948,932],{"class":82},[72,34950,34951],{"class":366},"'Ankle boot'",[72,34953,33664],{"class":82},[72,34955,34956,34958],{"class":74,"line":17189},[72,34957,34596],{"class":78},[72,34959,33302],{"class":82},[72,34961,34962],{"class":74,"line":17195},[72,34963,34964],{"class":621},"        # 将数据和标签都放到设备当中\n",[72,34966,34967,34969,34972,34974],{"class":74,"line":17209},[72,34968,3831],{"class":78},[72,34970,34971],{"class":82}," b_x,b_y ",[72,34973,26465],{"class":78},[72,34975,34615],{"class":82},[72,34977,34978,34980,34982],{"class":74,"line":17222},[72,34979,33028],{"class":82},[72,34981,609],{"class":78},[72,34983,33033],{"class":82},[72,34985,34986,34988,34990],{"class":74,"line":17227},[72,34987,33043],{"class":82},[72,34989,609],{"class":78},[72,34991,33048],{"class":82},[72,34993,34994],{"class":74,"line":17241},[72,34995,2828],{"emptyLinePlaceholder":490},[72,34997,34998],{"class":74,"line":17246},[72,34999,35000],{"class":621},"            # 设置模型为验证模式\n",[72,35002,35003],{"class":74,"line":17252},[72,35004,33293],{"class":82},[72,35006,35007],{"class":74,"line":17257},[72,35008,35009],{"class":621},"            # 模型推理结果\n",[72,35011,35012,35014,35016],{"class":74,"line":17271},[72,35013,33078],{"class":82},[72,35015,609],{"class":78},[72,35017,33083],{"class":82},[72,35019,35020],{"class":74,"line":17276},[72,35021,35022],{"class":621},"            # 获取最大下标，最大下标就是类别号\n",[72,35024,35025,35027,35029,35031,35033,35035,35037],{"class":74,"line":17281},[72,35026,33095],{"class":82},[72,35028,609],{"class":78},[72,35030,33100],{"class":82},[72,35032,33103],{"class":5642},[72,35034,609],{"class":78},[72,35036,772],{"class":362},[72,35038,570],{"class":82},[72,35040,35041],{"class":74,"line":17295},[72,35042,35043],{"class":621},"            # 取出张量中的数值\n",[72,35045,35046,35049,35051],{"class":74,"line":17307},[72,35047,35048],{"class":82},"            result",[72,35050,609],{"class":78},[72,35052,35053],{"class":82},"pre_lab.item()\n",[72,35055,35056,35059,35061],{"class":74,"line":17312},[72,35057,35058],{"class":82},"            label",[72,35060,609],{"class":78},[72,35062,35063],{"class":82},"b_y.item()\n",[72,35065,35066,35069,35071,35074,35077,35080,35082,35085],{"class":74,"line":17325},[72,35067,35068],{"class":362},"            print",[72,35070,564],{"class":82},[72,35072,35073],{"class":366},"\"预测值：\"",[72,35075,35076],{"class":82},",classes[result],",[72,35078,35079],{"class":366},"\"------\"",[72,35081,932],{"class":82},[72,35083,35084],{"class":366},"\"真实值：\"",[72,35086,35087],{"class":82},",classes[label])\n",[15,35089,35090],{},"（2）AlexNet",[22,35092,35093],{},[25,35094,35095],{},"神经网络构建",[63,35097,35099],{"className":65,"code":35098,"language":67,"meta":68,"style":68},"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",[34,35100,35101,35107,35117,35127,35139,35143,35160,35168,35183,35195,35237,35264,35307,35333,35377,35420,35463,35490,35494,35504,35509,35537,35556,35575,35579,35584,35592,35607,35617,35631,35641,35656,35671,35686,35697,35701,35706,35716,35731,35736,35750,35765,35777,35782,35793,35798,35804,35809,35821,35841,35846,35855],{"__ignoreMap":68},[72,35102,35103,35105],{"class":74,"line":75},[72,35104,79],{"class":78},[72,35106,30813],{"class":82},[72,35108,35109,35111,35113,35115],{"class":74,"line":370},[72,35110,31155],{"class":78},[72,35112,31158],{"class":82},[72,35114,79],{"class":78},[72,35116,31163],{"class":82},[72,35118,35119,35121,35123,35125],{"class":74,"line":1608},[72,35120,31155],{"class":78},[72,35122,31175],{"class":82},[72,35124,79],{"class":78},[72,35126,31180],{"class":82},[72,35128,35129,35131,35134,35136],{"class":74,"line":1623},[72,35130,79],{"class":78},[72,35132,35133],{"class":82}," torch.nn.functional ",[72,35135,31801],{"class":78},[72,35137,35138],{"class":82}," F\n",[72,35140,35141],{"class":74,"line":1629},[72,35142,2828],{"emptyLinePlaceholder":490},[72,35144,35145,35147,35150,35152,35154,35156,35158],{"class":74,"line":1643},[72,35146,15120],{"class":78},[72,35148,35149],{"class":358}," AlexNet",[72,35151,564],{"class":82},[72,35153,31196],{"class":358},[72,35155,1112],{"class":82},[72,35157,31201],{"class":358},[72,35159,31204],{"class":82},[72,35161,35162,35164,35166],{"class":74,"line":1649},[72,35163,31219],{"class":78},[72,35165,31222],{"class":362},[72,35167,31225],{"class":82},[72,35169,35170,35172,35175,35177,35179,35181],{"class":74,"line":1740},[72,35171,31235],{"class":362},[72,35173,35174],{"class":82},"(AlexNet,",[72,35176,31241],{"class":362},[72,35178,31244],{"class":82},[72,35180,31247],{"class":362},[72,35182,2404],{"class":82},[72,35184,35185,35187,35190,35192],{"class":74,"line":1746},[72,35186,31263],{"class":362},[72,35188,35189],{"class":82},".ReLu",[72,35191,609],{"class":78},[72,35193,35194],{"class":82},"nn.ReLU()\n",[72,35196,35197,35199,35201,35203,35205,35207,35209,35211,35213,35215,35217,35219,35221,35223,35225,35227,35229,35231,35233,35235],{"class":74,"line":1758},[72,35198,31263],{"class":362},[72,35200,31266],{"class":82},[72,35202,609],{"class":78},[72,35204,31271],{"class":82},[72,35206,31274],{"class":5642},[72,35208,609],{"class":78},[72,35210,772],{"class":362},[72,35212,932],{"class":82},[72,35214,31283],{"class":5642},[72,35216,609],{"class":78},[72,35218,765],{"class":362},[72,35220,932],{"class":82},[72,35222,31292],{"class":5642},[72,35224,609],{"class":78},[72,35226,1026],{"class":362},[72,35228,932],{"class":82},[72,35230,31347],{"class":5642},[72,35232,609],{"class":78},[72,35234,847],{"class":362},[72,35236,570],{"class":82},[72,35238,35239,35241,35243,35245,35248,35250,35252,35254,35256,35258,35260,35262],{"class":74,"line":2041},[72,35240,31263],{"class":362},[72,35242,31331],{"class":82},[72,35244,609],{"class":78},[72,35246,35247],{"class":82},"nn.MaxPool2d(",[72,35249,31292],{"class":5642},[72,35251,609],{"class":78},[72,35253,634],{"class":362},[72,35255,932],{"class":82},[72,35257,31347],{"class":5642},[72,35259,609],{"class":78},[72,35261,640],{"class":362},[72,35263,570],{"class":82},[72,35265,35266,35268,35270,35272,35274,35276,35278,35280,35282,35284,35286,35289,35291,35293,35295,35297,35299,35301,35303,35305],{"class":74,"line":2046},[72,35267,31263],{"class":362},[72,35269,31360],{"class":82},[72,35271,609],{"class":78},[72,35273,31271],{"class":82},[72,35275,31274],{"class":5642},[72,35277,609],{"class":78},[72,35279,765],{"class":362},[72,35281,932],{"class":82},[72,35283,31283],{"class":5642},[72,35285,609],{"class":78},[72,35287,35288],{"class":362},"256",[72,35290,932],{"class":82},[72,35292,31292],{"class":5642},[72,35294,609],{"class":78},[72,35296,873],{"class":362},[72,35298,932],{"class":82},[72,35300,31301],{"class":5642},[72,35302,609],{"class":78},[72,35304,640],{"class":362},[72,35306,570],{"class":82},[72,35308,35309,35311,35313,35315,35317,35319,35321,35323,35325,35327,35329,35331],{"class":74,"line":2052},[72,35310,31263],{"class":362},[72,35312,31395],{"class":82},[72,35314,609],{"class":78},[72,35316,35247],{"class":82},[72,35318,31292],{"class":5642},[72,35320,609],{"class":78},[72,35322,634],{"class":362},[72,35324,932],{"class":82},[72,35326,31347],{"class":5642},[72,35328,609],{"class":78},[72,35330,640],{"class":362},[72,35332,570],{"class":82},[72,35334,35335,35337,35340,35342,35344,35346,35348,35350,35352,35354,35356,35359,35361,35363,35365,35367,35369,35371,35373,35375],{"class":74,"line":2057},[72,35336,31263],{"class":362},[72,35338,35339],{"class":82},".c5",[72,35341,609],{"class":78},[72,35343,31271],{"class":82},[72,35345,31274],{"class":5642},[72,35347,609],{"class":78},[72,35349,35288],{"class":362},[72,35351,932],{"class":82},[72,35353,31283],{"class":5642},[72,35355,609],{"class":78},[72,35357,35358],{"class":362},"384",[72,35360,932],{"class":82},[72,35362,31292],{"class":5642},[72,35364,609],{"class":78},[72,35366,634],{"class":362},[72,35368,932],{"class":82},[72,35370,31301],{"class":5642},[72,35372,609],{"class":78},[72,35374,772],{"class":362},[72,35376,570],{"class":82},[72,35378,35379,35381,35384,35386,35388,35390,35392,35394,35396,35398,35400,35402,35404,35406,35408,35410,35412,35414,35416,35418],{"class":74,"line":2071},[72,35380,31263],{"class":362},[72,35382,35383],{"class":82},".c6",[72,35385,609],{"class":78},[72,35387,31271],{"class":82},[72,35389,31274],{"class":5642},[72,35391,609],{"class":78},[72,35393,35358],{"class":362},[72,35395,932],{"class":82},[72,35397,31283],{"class":5642},[72,35399,609],{"class":78},[72,35401,35358],{"class":362},[72,35403,932],{"class":82},[72,35405,31292],{"class":5642},[72,35407,609],{"class":78},[72,35409,634],{"class":362},[72,35411,932],{"class":82},[72,35413,31301],{"class":5642},[72,35415,609],{"class":78},[72,35417,772],{"class":362},[72,35419,570],{"class":82},[72,35421,35422,35424,35427,35429,35431,35433,35435,35437,35439,35441,35443,35445,35447,35449,35451,35453,35455,35457,35459,35461],{"class":74,"line":2076},[72,35423,31263],{"class":362},[72,35425,35426],{"class":82},".c7",[72,35428,609],{"class":78},[72,35430,31271],{"class":82},[72,35432,31274],{"class":5642},[72,35434,609],{"class":78},[72,35436,35358],{"class":362},[72,35438,932],{"class":82},[72,35440,31283],{"class":5642},[72,35442,609],{"class":78},[72,35444,35288],{"class":362},[72,35446,932],{"class":82},[72,35448,31292],{"class":5642},[72,35450,609],{"class":78},[72,35452,634],{"class":362},[72,35454,932],{"class":82},[72,35456,31301],{"class":5642},[72,35458,609],{"class":78},[72,35460,772],{"class":362},[72,35462,570],{"class":82},[72,35464,35465,35467,35470,35472,35474,35476,35478,35480,35482,35484,35486,35488],{"class":74,"line":2082},[72,35466,31263],{"class":362},[72,35468,35469],{"class":82},".s8",[72,35471,609],{"class":78},[72,35473,35247],{"class":82},[72,35475,31292],{"class":5642},[72,35477,609],{"class":78},[72,35479,634],{"class":362},[72,35481,932],{"class":82},[72,35483,31347],{"class":5642},[72,35485,609],{"class":78},[72,35487,640],{"class":362},[72,35489,570],{"class":82},[72,35491,35492],{"class":74,"line":2103},[72,35493,31420],{"class":621},[72,35495,35496,35498,35500,35502],{"class":74,"line":2108},[72,35497,31263],{"class":362},[72,35499,31427],{"class":82},[72,35501,609],{"class":78},[72,35503,31432],{"class":82},[72,35505,35506],{"class":74,"line":2122},[72,35507,35508],{"class":621},"       # 定义全连接层\n",[72,35510,35511,35513,35516,35518,35520,35522,35524,35526,35528,35530,35532,35535],{"class":74,"line":2127},[72,35512,31263],{"class":362},[72,35514,35515],{"class":82},".f1",[72,35517,609],{"class":78},[72,35519,31449],{"class":82},[72,35521,898],{"class":362},[72,35523,1009],{"class":78},[72,35525,898],{"class":362},[72,35527,1009],{"class":78},[72,35529,35288],{"class":362},[72,35531,932],{"class":82},[72,35533,35534],{"class":362},"4096",[72,35536,570],{"class":82},[72,35538,35539,35541,35544,35546,35548,35550,35552,35554],{"class":74,"line":2156},[72,35540,31263],{"class":362},[72,35542,35543],{"class":82},".f2",[72,35545,609],{"class":78},[72,35547,31449],{"class":82},[72,35549,35534],{"class":362},[72,35551,932],{"class":82},[72,35553,35534],{"class":362},[72,35555,570],{"class":82},[72,35557,35558,35560,35563,35565,35567,35569,35571,35573],{"class":74,"line":2161},[72,35559,31263],{"class":362},[72,35561,35562],{"class":82},".f3",[72,35564,609],{"class":78},[72,35566,31449],{"class":82},[72,35568,35534],{"class":362},[72,35570,932],{"class":82},[72,35572,1000],{"class":362},[72,35574,570],{"class":82},[72,35576,35577],{"class":74,"line":2178},[72,35578,2828],{"emptyLinePlaceholder":490},[72,35580,35581],{"class":74,"line":2183},[72,35582,35583],{"class":621},"    # 定义前向传播\n",[72,35585,35586,35588,35590],{"class":74,"line":2188},[72,35587,31219],{"class":78},[72,35589,31511],{"class":358},[72,35591,31514],{"class":82},[72,35593,35594,35596,35598,35600,35603,35605],{"class":74,"line":2193},[72,35595,31519],{"class":82},[72,35597,609],{"class":78},[72,35599,31241],{"class":362},[72,35601,35602],{"class":82},".ReLu(",[72,35604,31241],{"class":362},[72,35606,31531],{"class":82},[72,35608,35609,35611,35613,35615],{"class":74,"line":2207},[72,35610,31519],{"class":82},[72,35612,609],{"class":78},[72,35614,31241],{"class":362},[72,35616,31542],{"class":82},[72,35618,35619,35621,35623,35625,35627,35629],{"class":74,"line":2212},[72,35620,31519],{"class":82},[72,35622,609],{"class":78},[72,35624,31241],{"class":362},[72,35626,35602],{"class":82},[72,35628,31241],{"class":362},[72,35630,31557],{"class":82},[72,35632,35633,35635,35637,35639],{"class":74,"line":3005},[72,35634,31519],{"class":82},[72,35636,609],{"class":78},[72,35638,31241],{"class":362},[72,35640,31568],{"class":82},[72,35642,35643,35645,35647,35649,35651,35653],{"class":74,"line":3019},[72,35644,31519],{"class":82},[72,35646,609],{"class":78},[72,35648,31241],{"class":362},[72,35650,35602],{"class":82},[72,35652,31241],{"class":362},[72,35654,35655],{"class":82},".c5(x))\n",[72,35657,35658,35660,35662,35664,35666,35668],{"class":74,"line":3027},[72,35659,31519],{"class":82},[72,35661,609],{"class":78},[72,35663,31241],{"class":362},[72,35665,35602],{"class":82},[72,35667,31241],{"class":362},[72,35669,35670],{"class":82},".c6(x))\n",[72,35672,35673,35675,35677,35679,35681,35683],{"class":74,"line":3032},[72,35674,31519],{"class":82},[72,35676,609],{"class":78},[72,35678,31241],{"class":362},[72,35680,35602],{"class":82},[72,35682,31241],{"class":362},[72,35684,35685],{"class":82},".c7(x))\n",[72,35687,35688,35690,35692,35694],{"class":74,"line":3038},[72,35689,31519],{"class":82},[72,35691,609],{"class":78},[72,35693,31241],{"class":362},[72,35695,35696],{"class":82},".s8(x)\n",[72,35698,35699],{"class":74,"line":3044},[72,35700,2828],{"emptyLinePlaceholder":490},[72,35702,35703],{"class":74,"line":3049},[72,35704,35705],{"class":621},"        # 展平加线性全连接层\n",[72,35707,35708,35710,35712,35714],{"class":74,"line":8374},[72,35709,31519],{"class":82},[72,35711,609],{"class":78},[72,35713,31241],{"class":362},[72,35715,31579],{"class":82},[72,35717,35718,35720,35722,35724,35726,35728],{"class":74,"line":8398},[72,35719,31519],{"class":82},[72,35721,609],{"class":78},[72,35723,31241],{"class":362},[72,35725,35602],{"class":82},[72,35727,31241],{"class":362},[72,35729,35730],{"class":82},".f1(x))\n",[72,35732,35733],{"class":74,"line":8403},[72,35734,35735],{"class":621},"        # 还需要dropout对神经元随机进行失活\n",[72,35737,35738,35740,35742,35745,35748],{"class":74,"line":8409},[72,35739,31519],{"class":82},[72,35741,609],{"class":78},[72,35743,35744],{"class":82},"F.dropout(x,",[72,35746,35747],{"class":362},"0.5",[72,35749,570],{"class":82},[72,35751,35752,35754,35756,35758,35760,35762],{"class":74,"line":8436},[72,35753,31519],{"class":82},[72,35755,609],{"class":78},[72,35757,31241],{"class":362},[72,35759,35602],{"class":82},[72,35761,31241],{"class":362},[72,35763,35764],{"class":82},".f2(x))\n",[72,35766,35767,35769,35771,35773,35775],{"class":74,"line":8441},[72,35768,31519],{"class":82},[72,35770,609],{"class":78},[72,35772,35744],{"class":82},[72,35774,35747],{"class":362},[72,35776,570],{"class":82},[72,35778,35779],{"class":74,"line":8447},[72,35780,35781],{"class":621},"        # 直接输出\n",[72,35783,35784,35786,35788,35790],{"class":74,"line":8459},[72,35785,31519],{"class":82},[72,35787,609],{"class":78},[72,35789,31241],{"class":362},[72,35791,35792],{"class":82},".f3(x)\n",[72,35794,35795],{"class":74,"line":8471},[72,35796,35797],{"class":621},"        # 前向传播输出\n",[72,35799,35800,35802],{"class":74,"line":8483},[72,35801,15178],{"class":78},[72,35803,31627],{"class":82},[72,35805,35806],{"class":74,"line":10142},[72,35807,35808],{"class":621},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[72,35810,35811,35813,35815,35817,35819],{"class":74,"line":10167},[72,35812,1960],{"class":78},[72,35814,31638],{"class":362},[72,35816,3377],{"class":78},[72,35818,31643],{"class":366},[72,35820,4167],{"class":82},[72,35822,35823,35825,35827,35829,35831,35833,35835,35837,35839],{"class":74,"line":10190},[72,35824,31655],{"class":82},[72,35826,609],{"class":78},[72,35828,30869],{"class":82},[72,35830,31662],{"class":366},[72,35832,2133],{"class":78},[72,35834,31667],{"class":82},[72,35836,2130],{"class":78},[72,35838,30894],{"class":366},[72,35840,570],{"class":82},[72,35842,35843],{"class":74,"line":10214},[72,35844,35845],{"class":621},"    # 模型实例化，然后将实例化的模型放到设备中\n",[72,35847,35848,35850,35852],{"class":74,"line":10219},[72,35849,31707],{"class":82},[72,35851,609],{"class":78},[72,35853,35854],{"class":82},"AlexNet().to(device)\n",[72,35856,35857,35859,35861,35863,35865,35868,35870,35872],{"class":74,"line":10224},[72,35858,31717],{"class":362},[72,35860,31720],{"class":82},[72,35862,772],{"class":362},[72,35864,932],{"class":82},[72,35866,35867],{"class":362},"227",[72,35869,932],{"class":82},[72,35871,35867],{"class":362},[72,35873,31733],{"class":82},[22,35875,35876],{"start":370},[25,35877,31746],{},[63,35879,35881],{"className":65,"code":35880,"language":67,"meta":68,"style":68},"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",[34,35882,35883,35889,35895,35905,35911,35921,35931,35941,35951,35961,35965,35976,35986,35990,35994,35998,36006,36018,36028,36044,36054,36086,36100,36110,36120,36124,36134,36148,36158,36168,36178,36184,36188,36192,36196,36200,36204,36212,36232,36236,36240,36244,36248,36252,36268,36272,36276,36284,36288,36292,36300,36304,36308,36312,36320,36324,36328,36332,36336,36344,36348,36356,36360,36368,36372,36380,36384,36392,36396,36400,36408,36412,36416,36420,36432,36456,36470,36474,36478,36482,36490,36494,36502,36506,36514,36518,36526,36530,36538,36542,36550,36554,36566,36570,36578,36582,36590,36594,36598,36602,36606,36614,36618,36634,36638,36646,36650,36654,36658,36662,36666,36670,36674,36690,36694,36706,36710,36722,36726,36738,36742,36750,36754,36762,36766,36770,36775,36781,36785,36794,36798,36815,36819,36828,36832,36850,36863,36868,36881,36885,36889,36897,36901,36905,36913,36917,36925,36929,36937,36941,36945,36987,37029,37033,37037,37053,37057,37073,37077,37081,37089,37093,37097,37109,37147,37152,37157,37166,37170,37184,37194,37200,37206,37212,37218,37222,37226,37232,37236,37240,37248,37252,37270,37274,37278,37282,37298,37302,37306,37310,37314,37318,37338,37358,37362,37366,37370,37378,37386,37390,37406,37426,37446,37450,37454,37462,37470,37474,37478,37482,37494,37498,37508,37516,37533],{"__ignoreMap":68},[72,35884,35885,35887],{"class":74,"line":75},[72,35886,79],{"class":78},[72,35888,32240],{"class":82},[72,35890,35891,35893],{"class":74,"line":370},[72,35892,79],{"class":78},[72,35894,32247],{"class":82},[72,35896,35897,35899,35901,35903],{"class":74,"line":1608},[72,35898,79],{"class":78},[72,35900,32258],{"class":82},[72,35902,31801],{"class":78},[72,35904,32263],{"class":82},[72,35906,35907,35909],{"class":74,"line":1623},[72,35908,79],{"class":78},[72,35910,30813],{"class":82},[72,35912,35913,35915,35917,35919],{"class":74,"line":1629},[72,35914,31155],{"class":78},[72,35916,31833],{"class":82},[72,35918,79],{"class":78},[72,35920,32280],{"class":82},[72,35922,35923,35925,35927,35929],{"class":74,"line":1643},[72,35924,31155],{"class":78},[72,35926,31786],{"class":82},[72,35928,79],{"class":78},[72,35930,31791],{"class":82},[72,35932,35933,35935,35937,35939],{"class":74,"line":1649},[72,35934,31155],{"class":78},[72,35936,31816],{"class":82},[72,35938,79],{"class":78},[72,35940,31821],{"class":82},[72,35942,35943,35945,35947,35949],{"class":74,"line":1740},[72,35944,79],{"class":78},[72,35946,31833],{"class":82},[72,35948,31801],{"class":78},[72,35950,31838],{"class":82},[72,35952,35953,35955,35957,35959],{"class":74,"line":1746},[72,35954,79],{"class":78},[72,35956,31850],{"class":82},[72,35958,31801],{"class":78},[72,35960,31855],{"class":82},[72,35962,35963],{"class":74,"line":1758},[72,35964,32325],{"class":621},[72,35966,35967,35969,35971,35973],{"class":74,"line":2041},[72,35968,31155],{"class":78},[72,35970,32332],{"class":82},[72,35972,79],{"class":78},[72,35974,35975],{"class":82}," AlexNet\n",[72,35977,35978,35980,35982,35984],{"class":74,"line":2046},[72,35979,31155],{"class":78},[72,35981,31158],{"class":82},[72,35983,79],{"class":78},[72,35985,31163],{"class":82},[72,35987,35988],{"class":74,"line":2052},[72,35989,2828],{"emptyLinePlaceholder":490},[72,35991,35992],{"class":74,"line":2057},[72,35993,2828],{"emptyLinePlaceholder":490},[72,35995,35996],{"class":74,"line":2071},[72,35997,32360],{"class":621},[72,35999,36000,36002,36004],{"class":74,"line":2076},[72,36001,32365],{"class":78},[72,36003,32368],{"class":358},[72,36005,32371],{"class":82},[72,36007,36008,36010,36012,36014,36016],{"class":74,"line":2082},[72,36009,32376],{"class":82},[72,36011,609],{"class":78},[72,36013,31873],{"class":82},[72,36015,31881],{"class":366},[72,36017,31884],{"class":82},[72,36019,36020,36022,36024,36026],{"class":74,"line":2103},[72,36021,32389],{"class":5642},[72,36023,609],{"class":78},[72,36025,31894],{"class":362},[72,36027,31884],{"class":82},[72,36029,36030,36032,36034,36036,36038,36040,36042],{"class":74,"line":2108},[72,36031,32400],{"class":5642},[72,36033,609],{"class":78},[72,36035,31911],{"class":82},[72,36037,31914],{"class":5642},[72,36039,609],{"class":78},[72,36041,35867],{"class":362},[72,36043,31922],{"class":82},[72,36045,36046,36048,36050,36052],{"class":74,"line":2122},[72,36047,32417],{"class":5642},[72,36049,609],{"class":78},[72,36051,31894],{"class":362},[72,36053,570],{"class":82},[72,36055,36056,36058,36060,36062,36064,36066,36068,36070,36072,36074,36076,36078,36080,36082,36084],{"class":74,"line":2127},[72,36057,32428],{"class":82},[72,36059,609],{"class":78},[72,36061,32433],{"class":82},[72,36063,32436],{"class":362},[72,36065,564],{"class":82},[72,36067,32441],{"class":362},[72,36069,1009],{"class":78},[72,36071,7784],{"class":362},[72,36073,32448],{"class":82},[72,36075,32436],{"class":362},[72,36077,564],{"class":82},[72,36079,32455],{"class":362},[72,36081,1009],{"class":78},[72,36083,7784],{"class":362},[72,36085,32462],{"class":82},[72,36087,36088,36090,36092,36094,36096,36098],{"class":74,"line":2156},[72,36089,32467],{"class":82},[72,36091,609],{"class":78},[72,36093,32472],{"class":82},[72,36095,31955],{"class":5642},[72,36097,609],{"class":78},[72,36099,31960],{"class":82},[72,36101,36102,36104,36106,36108],{"class":74,"line":2161},[72,36103,32483],{"class":5642},[72,36105,609],{"class":78},[72,36107,32488],{"class":362},[72,36109,31884],{"class":82},[72,36111,36112,36114,36116,36118],{"class":74,"line":2178},[72,36113,32495],{"class":5642},[72,36115,609],{"class":78},[72,36117,31894],{"class":362},[72,36119,31884],{"class":82},[72,36121,36122],{"class":74,"line":2183},[72,36123,32506],{"class":621},[72,36125,36126,36128,36130,36132],{"class":74,"line":2188},[72,36127,32511],{"class":5642},[72,36129,609],{"class":78},[72,36131,949],{"class":362},[72,36133,570],{"class":82},[72,36135,36136,36138,36140,36142,36144,36146],{"class":74,"line":2193},[72,36137,32522],{"class":82},[72,36139,609],{"class":78},[72,36141,31952],{"class":82},[72,36143,31955],{"class":5642},[72,36145,609],{"class":78},[72,36147,32533],{"class":82},[72,36149,36150,36152,36154,36156],{"class":74,"line":2207},[72,36151,32538],{"class":5642},[72,36153,609],{"class":78},[72,36155,32488],{"class":362},[72,36157,31884],{"class":82},[72,36159,36160,36162,36164,36166],{"class":74,"line":2212},[72,36161,32549],{"class":5642},[72,36163,609],{"class":78},[72,36165,31894],{"class":362},[72,36167,31884],{"class":82},[72,36169,36170,36172,36174,36176],{"class":74,"line":3005},[72,36171,32560],{"class":5642},[72,36173,609],{"class":78},[72,36175,949],{"class":362},[72,36177,570],{"class":82},[72,36179,36180,36182],{"class":74,"line":3019},[72,36181,4518],{"class":78},[72,36183,32573],{"class":82},[72,36185,36186],{"class":74,"line":3027},[72,36187,2828],{"emptyLinePlaceholder":490},[72,36189,36190],{"class":74,"line":3032},[72,36191,32582],{"class":621},[72,36193,36194],{"class":74,"line":3038},[72,36195,32587],{"class":621},[72,36197,36198],{"class":74,"line":3044},[72,36199,2828],{"emptyLinePlaceholder":490},[72,36201,36202],{"class":74,"line":3049},[72,36203,32596],{"class":621},[72,36205,36206,36208,36210],{"class":74,"line":8374},[72,36207,32365],{"class":78},[72,36209,32603],{"class":358},[72,36211,32606],{"class":82},[72,36213,36214,36216,36218,36220,36222,36224,36226,36228,36230],{"class":74,"line":8398},[72,36215,31655],{"class":82},[72,36217,609],{"class":78},[72,36219,30869],{"class":82},[72,36221,31662],{"class":366},[72,36223,2133],{"class":78},[72,36225,31667],{"class":82},[72,36227,2130],{"class":78},[72,36229,32625],{"class":366},[72,36231,570],{"class":82},[72,36233,36234],{"class":74,"line":8403},[72,36235,2828],{"emptyLinePlaceholder":490},[72,36237,36238],{"class":74,"line":8409},[72,36239,2828],{"emptyLinePlaceholder":490},[72,36241,36242],{"class":74,"line":8436},[72,36243,32640],{"class":621},[72,36245,36246],{"class":74,"line":8441},[72,36247,32645],{"class":621},[72,36249,36250],{"class":74,"line":8447},[72,36251,32650],{"class":621},[72,36253,36254,36256,36258,36260,36262,36264,36266],{"class":74,"line":8459},[72,36255,32655],{"class":82},[72,36257,609],{"class":78},[72,36259,32660],{"class":82},[72,36261,32663],{"class":5642},[72,36263,609],{"class":78},[72,36265,32668],{"class":362},[72,36267,570],{"class":82},[72,36269,36270],{"class":74,"line":8471},[72,36271,2828],{"emptyLinePlaceholder":490},[72,36273,36274],{"class":74,"line":8483},[72,36275,32679],{"class":621},[72,36277,36278,36280,36282],{"class":74,"line":10142},[72,36279,32684],{"class":82},[72,36281,609],{"class":78},[72,36283,32689],{"class":82},[72,36285,36286],{"class":74,"line":10167},[72,36287,2828],{"emptyLinePlaceholder":490},[72,36289,36290],{"class":74,"line":10190},[72,36291,32698],{"class":621},[72,36293,36294,36296,36298],{"class":74,"line":10214},[72,36295,31707],{"class":82},[72,36297,609],{"class":78},[72,36299,32707],{"class":82},[72,36301,36302],{"class":74,"line":10219},[72,36303,32712],{"class":621},[72,36305,36306],{"class":74,"line":10224},[72,36307,32717],{"class":621},[72,36309,36310],{"class":74,"line":10229},[72,36311,32722],{"class":621},[72,36313,36314,36316,36318],{"class":74,"line":10238},[72,36315,32727],{"class":82},[72,36317,609],{"class":78},[72,36319,32732],{"class":82},[72,36321,36322],{"class":74,"line":10243},[72,36323,2828],{"emptyLinePlaceholder":490},[72,36325,36326],{"class":74,"line":10249},[72,36327,2828],{"emptyLinePlaceholder":490},[72,36329,36330],{"class":74,"line":10270},[72,36331,32745],{"class":621},[72,36333,36334],{"class":74,"line":10276},[72,36335,32750],{"class":621},[72,36337,36338,36340,36342],{"class":74,"line":10290},[72,36339,32755],{"class":82},[72,36341,609],{"class":78},[72,36343,32760],{"class":362},[72,36345,36346],{"class":74,"line":10296},[72,36347,32765],{"class":621},[72,36349,36350,36352,36354],{"class":74,"line":10323},[72,36351,32770],{"class":82},[72,36353,609],{"class":78},[72,36355,32775],{"class":82},[72,36357,36358],{"class":74,"line":10332},[72,36359,32780],{"class":621},[72,36361,36362,36364,36366],{"class":74,"line":10338},[72,36363,32785],{"class":82},[72,36365,609],{"class":78},[72,36367,32775],{"class":82},[72,36369,36370],{"class":74,"line":10346},[72,36371,32794],{"class":621},[72,36373,36374,36376,36378],{"class":74,"line":10351},[72,36375,32799],{"class":82},[72,36377,609],{"class":78},[72,36379,32775],{"class":82},[72,36381,36382],{"class":74,"line":17030},[72,36383,32808],{"class":621},[72,36385,36386,36388,36390],{"class":74,"line":17036},[72,36387,32813],{"class":82},[72,36389,609],{"class":78},[72,36391,32775],{"class":82},[72,36393,36394],{"class":74,"line":17059},[72,36395,2828],{"emptyLinePlaceholder":490},[72,36397,36398],{"class":74,"line":17065},[72,36399,32826],{"class":621},[72,36401,36402,36404,36406],{"class":74,"line":17088},[72,36403,32831],{"class":82},[72,36405,609],{"class":78},[72,36407,32836],{"class":82},[72,36409,36410],{"class":74,"line":17102},[72,36411,2828],{"emptyLinePlaceholder":490},[72,36413,36414],{"class":74,"line":17122},[72,36415,2828],{"emptyLinePlaceholder":490},[72,36417,36418],{"class":74,"line":17128},[72,36419,32849],{"class":621},[72,36421,36422,36424,36426,36428,36430],{"class":74,"line":17139},[72,36423,3629],{"class":78},[72,36425,32856],{"class":82},[72,36427,26465],{"class":78},[72,36429,32861],{"class":362},[72,36431,32864],{"class":82},[72,36433,36434,36436,36438,36440,36442,36444,36446,36448,36450,36452,36454],{"class":74,"line":17162},[72,36435,32869],{"class":362},[72,36437,564],{"class":82},[72,36439,32874],{"class":366},[72,36441,32877],{"class":362},[72,36443,1138],{"class":366},[72,36445,32877],{"class":362},[72,36447,805],{"class":366},[72,36449,32886],{"class":82},[72,36451,1086],{"class":78},[72,36453,772],{"class":362},[72,36455,30915],{"class":82},[72,36457,36458,36460,36462,36464,36466,36468],{"class":74,"line":17184},[72,36459,32869],{"class":362},[72,36461,564],{"class":82},[72,36463,32901],{"class":366},[72,36465,1009],{"class":78},[72,36467,1000],{"class":362},[72,36469,570],{"class":82},[72,36471,36472],{"class":74,"line":17189},[72,36473,2828],{"emptyLinePlaceholder":490},[72,36475,36476],{"class":74,"line":17195},[72,36477,32916],{"class":621},[72,36479,36480],{"class":74,"line":17209},[72,36481,32921],{"class":621},[72,36483,36484,36486,36488],{"class":74,"line":17222},[72,36485,32926],{"class":82},[72,36487,609],{"class":78},[72,36489,32760],{"class":362},[72,36491,36492],{"class":74,"line":17227},[72,36493,32935],{"class":621},[72,36495,36496,36498,36500],{"class":74,"line":17241},[72,36497,32940],{"class":82},[72,36499,609],{"class":78},[72,36501,3513],{"class":362},[72,36503,36504],{"class":74,"line":17246},[72,36505,32949],{"class":621},[72,36507,36508,36510,36512],{"class":74,"line":17252},[72,36509,32954],{"class":82},[72,36511,609],{"class":78},[72,36513,32760],{"class":362},[72,36515,36516],{"class":74,"line":17257},[72,36517,32963],{"class":621},[72,36519,36520,36522,36524],{"class":74,"line":17271},[72,36521,32968],{"class":82},[72,36523,609],{"class":78},[72,36525,3513],{"class":362},[72,36527,36528],{"class":74,"line":17276},[72,36529,32977],{"class":621},[72,36531,36532,36534,36536],{"class":74,"line":17281},[72,36533,32982],{"class":82},[72,36535,609],{"class":78},[72,36537,3513],{"class":362},[72,36539,36540],{"class":74,"line":17295},[72,36541,32991],{"class":621},[72,36543,36544,36546,36548],{"class":74,"line":17307},[72,36545,32996],{"class":82},[72,36547,609],{"class":78},[72,36549,3513],{"class":362},[72,36551,36552],{"class":74,"line":17312},[72,36553,33005],{"class":621},[72,36555,36556,36558,36560,36562,36564],{"class":74,"line":17325},[72,36557,3831],{"class":78},[72,36559,32019],{"class":82},[72,36561,26465],{"class":78},[72,36563,32024],{"class":362},[72,36565,33018],{"class":82},[72,36567,36568],{"class":74,"line":17330},[72,36569,33023],{"class":621},[72,36571,36572,36574,36576],{"class":74,"line":17335},[72,36573,33028],{"class":82},[72,36575,609],{"class":78},[72,36577,33033],{"class":82},[72,36579,36580],{"class":74,"line":17340},[72,36581,33038],{"class":621},[72,36583,36584,36586,36588],{"class":74,"line":17353},[72,36585,33043],{"class":82},[72,36587,609],{"class":78},[72,36589,33048],{"class":82},[72,36591,36592],{"class":74,"line":17358},[72,36593,33054],{"class":621},[72,36595,36596],{"class":74,"line":33051},[72,36597,33060],{"class":82},[72,36599,36600],{"class":74,"line":33057},[72,36601,33066],{"class":621},[72,36603,36604],{"class":74,"line":33063},[72,36605,33072],{"class":621},[72,36607,36608,36610,36612],{"class":74,"line":33069},[72,36609,33078],{"class":82},[72,36611,609],{"class":78},[72,36613,33083],{"class":82},[72,36615,36616],{"class":74,"line":33075},[72,36617,33089],{"class":621},[72,36619,36620,36622,36624,36626,36628,36630,36632],{"class":74,"line":33086},[72,36621,33095],{"class":82},[72,36623,609],{"class":78},[72,36625,33100],{"class":82},[72,36627,33103],{"class":5642},[72,36629,609],{"class":78},[72,36631,772],{"class":362},[72,36633,570],{"class":82},[72,36635,36636],{"class":74,"line":33092},[72,36637,33115],{"class":621},[72,36639,36640,36642,36644],{"class":74,"line":33112},[72,36641,33121],{"class":82},[72,36643,609],{"class":78},[72,36645,33126],{"class":82},[72,36647,36648],{"class":74,"line":33118},[72,36649,33132],{"class":621},[72,36651,36652],{"class":74,"line":33129},[72,36653,33138],{"class":82},[72,36655,36656],{"class":74,"line":33135},[72,36657,33144],{"class":621},[72,36659,36660],{"class":74,"line":33141},[72,36661,33150],{"class":82},[72,36663,36664],{"class":74,"line":33147},[72,36665,33156],{"class":621},[72,36667,36668],{"class":74,"line":33153},[72,36669,33162],{"class":82},[72,36671,36672],{"class":74,"line":33159},[72,36673,33168],{"class":621},[72,36675,36676,36678,36680,36682,36684,36686,36688],{"class":74,"line":33165},[72,36677,33174],{"class":82},[72,36679,9903],{"class":78},[72,36681,33179],{"class":82},[72,36683,1009],{"class":78},[72,36685,33184],{"class":82},[72,36687,747],{"class":362},[72,36689,570],{"class":82},[72,36691,36692],{"class":74,"line":33171},[72,36693,33194],{"class":621},[72,36695,36696,36698,36700,36702,36704],{"class":74,"line":33191},[72,36697,33200],{"class":82},[72,36699,9903],{"class":78},[72,36701,33205],{"class":82},[72,36703,3377],{"class":78},[72,36705,33210],{"class":82},[72,36707,36708],{"class":74,"line":33197},[72,36709,33216],{"class":621},[72,36711,36712,36714,36716,36718,36720],{"class":74,"line":33213},[72,36713,33222],{"class":82},[72,36715,9903],{"class":78},[72,36717,33184],{"class":82},[72,36719,747],{"class":362},[72,36721,570],{"class":82},[72,36723,36724],{"class":74,"line":33219},[72,36725,33236],{"class":621},[72,36727,36728,36730,36732,36734,36736],{"class":74,"line":33233},[72,36729,3831],{"class":78},[72,36731,33244],{"class":82},[72,36733,26465],{"class":78},[72,36735,32024],{"class":362},[72,36737,33251],{"class":82},[72,36739,36740],{"class":74,"line":33239},[72,36741,33257],{"class":621},[72,36743,36744,36746,36748],{"class":74,"line":33254},[72,36745,33028],{"class":82},[72,36747,609],{"class":78},[72,36749,33033],{"class":82},[72,36751,36752],{"class":74,"line":33260},[72,36753,33272],{"class":621},[72,36755,36756,36758,36760],{"class":74,"line":33269},[72,36757,33043],{"class":82},[72,36759,609],{"class":78},[72,36761,33048],{"class":82},[72,36763,36764],{"class":74,"line":33275},[72,36765,33287],{"class":621},[72,36767,36768],{"class":74,"line":33284},[72,36769,33293],{"class":82},[72,36771,36772],{"class":74,"line":33290},[72,36773,36774],{"class":621},"            # 验证时不计算梯度以节省内存\u002F计算\n",[72,36776,36777,36779],{"class":74,"line":33296},[72,36778,33299],{"class":78},[72,36780,33302],{"class":82},[72,36782,36783],{"class":74,"line":33305},[72,36784,33308],{"class":621},[72,36786,36787,36790,36792],{"class":74,"line":33311},[72,36788,36789],{"class":82},"                output",[72,36791,609],{"class":78},[72,36793,33083],{"class":82},[72,36795,36796],{"class":74,"line":33322},[72,36797,33325],{"class":621},[72,36799,36800,36803,36805,36807,36809,36811,36813],{"class":74,"line":33328},[72,36801,36802],{"class":82},"                pre_lab",[72,36804,609],{"class":78},[72,36806,33100],{"class":82},[72,36808,33103],{"class":5642},[72,36810,609],{"class":78},[72,36812,772],{"class":362},[72,36814,570],{"class":82},[72,36816,36817],{"class":74,"line":33347},[72,36818,33350],{"class":621},[72,36820,36821,36824,36826],{"class":74,"line":33353},[72,36822,36823],{"class":82},"                val_batch_loss",[72,36825,609],{"class":78},[72,36827,33126],{"class":82},[72,36829,36830],{"class":74,"line":33364},[72,36831,33367],{"class":621},[72,36833,36834,36837,36839,36842,36844,36846,36848],{"class":74,"line":33370},[72,36835,36836],{"class":82},"                val_loss",[72,36838,9903],{"class":78},[72,36840,36841],{"class":82},"val_batch_loss.item()",[72,36843,1009],{"class":78},[72,36845,33184],{"class":82},[72,36847,747],{"class":362},[72,36849,570],{"class":82},[72,36851,36852,36855,36857,36859,36861],{"class":74,"line":33390},[72,36853,36854],{"class":82},"                val_corrects",[72,36856,9903],{"class":78},[72,36858,33205],{"class":82},[72,36860,3377],{"class":78},[72,36862,33210],{"class":82},[72,36864,36865],{"class":74,"line":33406},[72,36866,36867],{"class":621},"            # 当前用于验证的样本数量\n",[72,36869,36870,36873,36875,36877,36879],{"class":74,"line":33412},[72,36871,36872],{"class":82},"            val_num",[72,36874,9903],{"class":78},[72,36876,33184],{"class":82},[72,36878,747],{"class":362},[72,36880,570],{"class":82},[72,36882,36883],{"class":74,"line":33426},[72,36884,33429],{"class":621},[72,36886,36887],{"class":74,"line":33432},[72,36888,33435],{"class":621},[72,36890,36891,36893,36895],{"class":74,"line":33438},[72,36892,33441],{"class":82},[72,36894,1138],{"class":78},[72,36896,33446],{"class":82},[72,36898,36899],{"class":74,"line":33449},[72,36900,33452],{"class":621},[72,36902,36903],{"class":74,"line":33455},[72,36904,33458],{"class":621},[72,36906,36907,36909,36911],{"class":74,"line":33461},[72,36908,33464],{"class":82},[72,36910,1138],{"class":78},[72,36912,33446],{"class":82},[72,36914,36915],{"class":74,"line":33471},[72,36916,33474],{"class":621},[72,36918,36919,36921,36923],{"class":74,"line":33477},[72,36920,33480],{"class":82},[72,36922,1138],{"class":78},[72,36924,33485],{"class":82},[72,36926,36927],{"class":74,"line":33488},[72,36928,33491],{"class":621},[72,36930,36931,36933,36935],{"class":74,"line":33494},[72,36932,33497],{"class":82},[72,36934,1138],{"class":78},[72,36936,33485],{"class":82},[72,36938,36939],{"class":74,"line":33504},[72,36940,2828],{"emptyLinePlaceholder":490},[72,36942,36943],{"class":74,"line":33509},[72,36944,33512],{"class":621},[72,36946,36947,36949,36951,36953,36955,36957,36959,36961,36963,36965,36967,36969,36971,36973,36975,36977,36979,36981,36983,36985],{"class":74,"line":33515},[72,36948,32869],{"class":362},[72,36950,564],{"class":82},[72,36952,4020],{"class":366},[72,36954,32877],{"class":362},[72,36956,33526],{"class":366},[72,36958,1450],{"class":362},[72,36960,33531],{"class":78},[72,36962,1500],{"class":362},[72,36964,33536],{"class":366},[72,36966,1450],{"class":362},[72,36968,33531],{"class":78},[72,36970,1500],{"class":362},[72,36972,4020],{"class":366},[72,36974,33547],{"class":82},[72,36976,1086],{"class":78},[72,36978,772],{"class":362},[72,36980,33554],{"class":82},[72,36982,1086],{"class":78},[72,36984,772],{"class":362},[72,36986,33561],{"class":82},[72,36988,36989,36991,36993,36995,36997,36999,37001,37003,37005,37007,37009,37011,37013,37015,37017,37019,37021,37023,37025,37027],{"class":74,"line":33564},[72,36990,32869],{"class":362},[72,36992,564],{"class":82},[72,36994,4020],{"class":366},[72,36996,32877],{"class":362},[72,36998,33575],{"class":366},[72,37000,1450],{"class":362},[72,37002,33531],{"class":78},[72,37004,1500],{"class":362},[72,37006,33584],{"class":366},[72,37008,1450],{"class":362},[72,37010,33531],{"class":78},[72,37012,1500],{"class":362},[72,37014,4020],{"class":366},[72,37016,33595],{"class":82},[72,37018,1086],{"class":78},[72,37020,772],{"class":362},[72,37022,33602],{"class":82},[72,37024,1086],{"class":78},[72,37026,772],{"class":362},[72,37028,33561],{"class":82},[72,37030,37031],{"class":74,"line":33611},[72,37032,2828],{"emptyLinePlaceholder":490},[72,37034,37035],{"class":74,"line":33616},[72,37036,33619],{"class":621},[72,37038,37039,37041,37043,37045,37047,37049,37051],{"class":74,"line":33622},[72,37040,2925],{"class":78},[72,37042,33627],{"class":82},[72,37044,1086],{"class":78},[72,37046,772],{"class":362},[72,37048,1494],{"class":82},[72,37050,1514],{"class":78},[72,37052,33638],{"class":82},[72,37054,37055],{"class":74,"line":33641},[72,37056,33644],{"class":621},[72,37058,37059,37061,37063,37065,37067,37069,37071],{"class":74,"line":33647},[72,37060,33650],{"class":82},[72,37062,603],{"class":362},[72,37064,609],{"class":78},[72,37066,33657],{"class":82},[72,37068,1086],{"class":78},[72,37070,772],{"class":362},[72,37072,33664],{"class":82},[72,37074,37075],{"class":74,"line":33667},[72,37076,33670],{"class":621},[72,37078,37079],{"class":74,"line":33673},[72,37080,33676],{"class":621},[72,37082,37083,37085,37087],{"class":74,"line":33679},[72,37084,33682],{"class":82},[72,37086,609],{"class":78},[72,37088,32732],{"class":82},[72,37090,37091],{"class":74,"line":33689},[72,37092,2828],{"emptyLinePlaceholder":490},[72,37094,37095],{"class":74,"line":33694},[72,37096,33697],{"class":621},[72,37098,37099,37101,37103,37105,37107],{"class":74,"line":33700},[72,37100,33703],{"class":82},[72,37102,609],{"class":78},[72,37104,33708],{"class":82},[72,37106,1086],{"class":78},[72,37108,33713],{"class":82},[72,37110,37111,37113,37115,37117,37119,37121,37123,37125,37127,37129,37131,37133,37135,37137,37139,37141,37143,37145],{"class":74,"line":33716},[72,37112,32869],{"class":362},[72,37114,564],{"class":82},[72,37116,33723],{"class":366},[72,37118,1450],{"class":362},[72,37120,33728],{"class":78},[72,37122,1500],{"class":362},[72,37124,1098],{"class":366},[72,37126,1450],{"class":362},[72,37128,33728],{"class":78},[72,37130,1500],{"class":362},[72,37132,33741],{"class":366},[72,37134,33744],{"class":82},[72,37136,33747],{"class":78},[72,37138,1461],{"class":362},[72,37140,33752],{"class":82},[72,37142,882],{"class":78},[72,37144,1461],{"class":362},[72,37146,30915],{"class":82},[72,37148,37149],{"class":74,"line":33761},[72,37150,37151],{"class":621},"    # 选择最优参数并保存\n",[72,37153,37154],{"class":74,"line":33767},[72,37155,37156],{"class":621},"    # 保存最佳模型权重字典\n",[72,37158,37159,37162,37164],{"class":74,"line":33773},[72,37160,37161],{"class":82},"    torch.save(best_model_wts,",[72,37163,33785],{"class":366},[72,37165,570],{"class":82},[72,37167,37168],{"class":74,"line":33779},[72,37169,33805],{"class":621},[72,37171,37172,37174,37176,37178,37180,37182],{"class":74,"line":33790},[72,37173,33811],{"class":82},[72,37175,609],{"class":78},[72,37177,33816],{"class":82},[72,37179,33819],{"class":5642},[72,37181,609],{"class":78},[72,37183,1975],{"class":82},[72,37185,37186,37188,37190,37192],{"class":74,"line":33796},[72,37187,33829],{"class":366},[72,37189,1413],{"class":82},[72,37191,33834],{"class":362},[72,37193,33837],{"class":82},[72,37195,37196,37198],{"class":74,"line":33802},[72,37197,33843],{"class":366},[72,37199,33846],{"class":82},[72,37201,37202,37204],{"class":74,"line":33808},[72,37203,33852],{"class":366},[72,37205,33855],{"class":82},[72,37207,37208,37210],{"class":74,"line":33826},[72,37209,33861],{"class":366},[72,37211,33864],{"class":82},[72,37213,37214,37216],{"class":74,"line":33840},[72,37215,33870],{"class":366},[72,37217,33873],{"class":82},[72,37219,37220],{"class":74,"line":33849},[72,37221,33879],{"class":82},[72,37223,37224],{"class":74,"line":33858},[72,37225,33885],{"class":621},[72,37227,37228,37230],{"class":74,"line":33867},[72,37229,4518],{"class":78},[72,37231,33893],{"class":82},[72,37233,37234],{"class":74,"line":33876},[72,37235,2828],{"emptyLinePlaceholder":490},[72,37237,37238],{"class":74,"line":33882},[72,37239,33904],{"class":621},[72,37241,37242,37244,37246],{"class":74,"line":33888},[72,37243,32365],{"class":78},[72,37245,33912],{"class":358},[72,37247,33915],{"class":82},[72,37249,37250],{"class":74,"line":33896},[72,37251,33921],{"class":621},[72,37253,37254,37256,37258,37260,37262,37264,37266,37268],{"class":74,"line":33901},[72,37255,33927],{"class":82},[72,37257,32111],{"class":5642},[72,37259,609],{"class":78},[72,37261,564],{"class":82},[72,37263,1052],{"class":362},[72,37265,932],{"class":82},[72,37267,847],{"class":362},[72,37269,30915],{"class":82},[72,37271,37272],{"class":74,"line":33907},[72,37273,33947],{"class":621},[72,37275,37276],{"class":74,"line":33918},[72,37277,33953],{"class":621},[72,37279,37280],{"class":74,"line":33924},[72,37281,33959],{"class":621},[72,37283,37284,37286,37288,37290,37292,37294,37296],{"class":74,"line":33944},[72,37285,32145],{"class":82},[72,37287,772],{"class":362},[72,37289,932],{"class":82},[72,37291,640],{"class":362},[72,37293,932],{"class":82},[72,37295,772],{"class":362},[72,37297,570],{"class":82},[72,37299,37300],{"class":74,"line":33950},[72,37301,33982],{"class":621},[72,37303,37304],{"class":74,"line":33956},[72,37305,33988],{"class":621},[72,37307,37308],{"class":74,"line":33962},[72,37309,33994],{"class":621},[72,37311,37312],{"class":74,"line":33979},[72,37313,34000],{"class":621},[72,37315,37316],{"class":74,"line":33985},[72,37317,34006],{"class":621},[72,37319,37320,37322,37324,37326,37328,37330,37332,37334,37336],{"class":74,"line":33991},[72,37321,34012],{"class":82},[72,37323,34015],{"class":366},[72,37325,34018],{"class":82},[72,37327,34021],{"class":366},[72,37329,932],{"class":82},[72,37331,34026],{"class":5642},[72,37333,609],{"class":78},[72,37335,34031],{"class":366},[72,37337,570],{"class":82},[72,37339,37340,37342,37344,37346,37348,37350,37352,37354,37356],{"class":74,"line":33997},[72,37341,34012],{"class":82},[72,37343,34015],{"class":366},[72,37345,34043],{"class":82},[72,37347,34046],{"class":366},[72,37349,932],{"class":82},[72,37351,34026],{"class":5642},[72,37353,609],{"class":78},[72,37355,34055],{"class":366},[72,37357,570],{"class":82},[72,37359,37360],{"class":74,"line":34003},[72,37361,34063],{"class":621},[72,37363,37364],{"class":74,"line":34009},[72,37365,34069],{"class":82},[72,37367,37368],{"class":74,"line":34036},[72,37369,34075],{"class":621},[72,37371,37372,37374,37376],{"class":74,"line":34060},[72,37373,34081],{"class":82},[72,37375,34084],{"class":366},[72,37377,570],{"class":82},[72,37379,37380,37382,37384],{"class":74,"line":34066},[72,37381,34092],{"class":82},[72,37383,34095],{"class":366},[72,37385,570],{"class":82},[72,37387,37388],{"class":74,"line":34072},[72,37389,34103],{"class":621},[72,37391,37392,37394,37396,37398,37400,37402,37404],{"class":74,"line":34078},[72,37393,32145],{"class":82},[72,37395,772],{"class":362},[72,37397,932],{"class":82},[72,37399,640],{"class":362},[72,37401,932],{"class":82},[72,37403,640],{"class":362},[72,37405,570],{"class":82},[72,37407,37408,37410,37412,37414,37416,37418,37420,37422,37424],{"class":74,"line":34089},[72,37409,34012],{"class":82},[72,37411,34015],{"class":366},[72,37413,34130],{"class":82},[72,37415,34021],{"class":366},[72,37417,932],{"class":82},[72,37419,34026],{"class":5642},[72,37421,609],{"class":78},[72,37423,34141],{"class":366},[72,37425,570],{"class":82},[72,37427,37428,37430,37432,37434,37436,37438,37440,37442,37444],{"class":74,"line":34100},[72,37429,34012],{"class":82},[72,37431,34015],{"class":366},[72,37433,34153],{"class":82},[72,37435,34046],{"class":366},[72,37437,932],{"class":82},[72,37439,34026],{"class":5642},[72,37441,609],{"class":78},[72,37443,34164],{"class":366},[72,37445,570],{"class":82},[72,37447,37448],{"class":74,"line":34106},[72,37449,34172],{"class":621},[72,37451,37452],{"class":74,"line":34123},[72,37453,34069],{"class":82},[72,37455,37456,37458,37460],{"class":74,"line":34146},[72,37457,34081],{"class":82},[72,37459,34015],{"class":366},[72,37461,570],{"class":82},[72,37463,37464,37466,37468],{"class":74,"line":34169},[72,37465,34092],{"class":82},[72,37467,34194],{"class":366},[72,37469,570],{"class":82},[72,37471,37472],{"class":74,"line":34175},[72,37473,34202],{"class":82},[72,37475,37476],{"class":74,"line":34180},[72,37477,2828],{"emptyLinePlaceholder":490},[72,37479,37480],{"class":74,"line":34189},[72,37481,34213],{"class":621},[72,37483,37484,37486,37488,37490,37492],{"class":74,"line":34199},[72,37485,1960],{"class":78},[72,37487,31638],{"class":362},[72,37489,3377],{"class":78},[72,37491,31643],{"class":366},[72,37493,4167],{"class":82},[72,37495,37496],{"class":74,"line":34205},[72,37497,34232],{"class":621},[72,37499,37500,37503,37505],{"class":74,"line":34210},[72,37501,37502],{"class":82},"    AlexNet",[72,37504,609],{"class":78},[72,37506,37507],{"class":82},"AlexNet()\n",[72,37509,37510,37512,37514],{"class":74,"line":34216},[72,37511,34249],{"class":82},[72,37513,609],{"class":78},[72,37515,34254],{"class":82},[72,37517,37518,37520,37522,37525,37527,37529,37531],{"class":74,"line":34229},[72,37519,33811],{"class":82},[72,37521,609],{"class":78},[72,37523,37524],{"class":82},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[72,37526,34267],{"class":5642},[72,37528,609],{"class":78},[72,37530,1254],{"class":362},[72,37532,570],{"class":82},[72,37534,37535],{"class":74,"line":34235},[72,37536,34279],{"class":82},[22,37538,37539],{"start":1608},[25,37540,34292],{},[63,37542,37544],{"className":65,"code":37543,"language":67,"meta":68,"style":68},"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",[34,37545,37546,37552,37562,37572,37582,37586,37596,37606,37617,37621,37625,37629,37637,37653,37663,37679,37689,37703,37707,37717,37727,37737,37743,37747,37751,37759,37763,37779,37787,37791,37795,37803,37811,37815,37819,37823,37827,37833,37837,37847,37855,37863,37867,37871,37875,37883,37887,37903,37907,37911,37915,37927,37931,37943,37947,37951,37963,37967,37977,37981,37985,37997,38001,38009,38013,38017,38025,38029,38037,38041,38045,38049,38053,38057,38073,38081,38085,38089,38137,38143,38147,38157,38165,38173,38177,38181,38185,38189,38197,38201,38217,38221,38229,38237],{"__ignoreMap":68},[72,37547,37548,37550],{"class":74,"line":75},[72,37549,79],{"class":78},[72,37551,30813],{"class":82},[72,37553,37554,37556,37558,37560],{"class":74,"line":370},[72,37555,79],{"class":78},[72,37557,31833],{"class":82},[72,37559,31801],{"class":78},[72,37561,31838],{"class":82},[72,37563,37564,37566,37568,37570],{"class":74,"line":1608},[72,37565,31155],{"class":78},[72,37567,34320],{"class":82},[72,37569,79],{"class":78},[72,37571,34325],{"class":82},[72,37573,37574,37576,37578,37580],{"class":74,"line":1623},[72,37575,31155],{"class":78},[72,37577,31816],{"class":82},[72,37579,79],{"class":78},[72,37581,31821],{"class":82},[72,37583,37584],{"class":74,"line":1629},[72,37585,34340],{"class":621},[72,37587,37588,37590,37592,37594],{"class":74,"line":1643},[72,37589,31155],{"class":78},[72,37591,31786],{"class":82},[72,37593,79],{"class":78},[72,37595,31791],{"class":82},[72,37597,37598,37600,37602,37604],{"class":74,"line":1649},[72,37599,31155],{"class":78},[72,37601,32332],{"class":82},[72,37603,79],{"class":78},[72,37605,35975],{"class":82},[72,37607,37608,37610,37613,37615],{"class":74,"line":1740},[72,37609,31155],{"class":78},[72,37611,37612],{"class":82}," 练习.AlexNet.model ",[72,37614,79],{"class":78},[72,37616,35975],{"class":82},[72,37618,37619],{"class":74,"line":1746},[72,37620,2828],{"emptyLinePlaceholder":490},[72,37622,37623],{"class":74,"line":1758},[72,37624,2828],{"emptyLinePlaceholder":490},[72,37626,37627],{"class":74,"line":2041},[72,37628,34369],{"class":621},[72,37630,37631,37633,37635],{"class":74,"line":2046},[72,37632,32365],{"class":78},[72,37634,34376],{"class":358},[72,37636,32371],{"class":82},[72,37638,37639,37641,37643,37645,37647,37649,37651],{"class":74,"line":2052},[72,37640,34383],{"class":82},[72,37642,609],{"class":78},[72,37644,31873],{"class":82},[72,37646,31876],{"class":5642},[72,37648,609],{"class":78},[72,37650,31881],{"class":366},[72,37652,31884],{"class":82},[72,37654,37655,37657,37659,37661],{"class":74,"line":2057},[72,37656,34400],{"class":5642},[72,37658,609],{"class":78},[72,37660,34405],{"class":362},[72,37662,31884],{"class":82},[72,37664,37665,37667,37669,37671,37673,37675,37677],{"class":74,"line":2071},[72,37666,34412],{"class":5642},[72,37668,609],{"class":78},[72,37670,31911],{"class":82},[72,37672,31914],{"class":5642},[72,37674,609],{"class":78},[72,37676,35867],{"class":362},[72,37678,31922],{"class":82},[72,37680,37681,37683,37685,37687],{"class":74,"line":2076},[72,37682,34429],{"class":5642},[72,37684,609],{"class":78},[72,37686,31894],{"class":362},[72,37688,570],{"class":82},[72,37690,37691,37693,37695,37697,37699,37701],{"class":74,"line":2082},[72,37692,34440],{"class":82},[72,37694,609],{"class":78},[72,37696,31952],{"class":82},[72,37698,31955],{"class":5642},[72,37700,609],{"class":78},[72,37702,34451],{"class":82},[72,37704,37705],{"class":74,"line":2103},[72,37706,34456],{"class":621},[72,37708,37709,37711,37713,37715],{"class":74,"line":2108},[72,37710,34461],{"class":5642},[72,37712,609],{"class":78},[72,37714,772],{"class":362},[72,37716,31884],{"class":82},[72,37718,37719,37721,37723,37725],{"class":74,"line":2122},[72,37720,34472],{"class":5642},[72,37722,609],{"class":78},[72,37724,31894],{"class":362},[72,37726,31884],{"class":82},[72,37728,37729,37731,37733,37735],{"class":74,"line":2127},[72,37730,34483],{"class":5642},[72,37732,609],{"class":78},[72,37734,747],{"class":362},[72,37736,570],{"class":82},[72,37738,37739,37741],{"class":74,"line":2156},[72,37740,4518],{"class":78},[72,37742,34496],{"class":82},[72,37744,37745],{"class":74,"line":2161},[72,37746,2828],{"emptyLinePlaceholder":490},[72,37748,37749],{"class":74,"line":2178},[72,37750,34505],{"class":621},[72,37752,37753,37755,37757],{"class":74,"line":2183},[72,37754,32365],{"class":78},[72,37756,34512],{"class":358},[72,37758,34515],{"class":82},[72,37760,37761],{"class":74,"line":2188},[72,37762,34520],{"class":621},[72,37764,37765,37767,37769,37771,37773,37775,37777],{"class":74,"line":2193},[72,37766,31655],{"class":82},[72,37768,609],{"class":78},[72,37770,31662],{"class":366},[72,37772,2133],{"class":78},[72,37774,31667],{"class":82},[72,37776,2130],{"class":78},[72,37778,34537],{"class":366},[72,37780,37781,37783,37785],{"class":74,"line":2207},[72,37782,31707],{"class":82},[72,37784,609],{"class":78},[72,37786,32707],{"class":82},[72,37788,37789],{"class":74,"line":2212},[72,37790,2828],{"emptyLinePlaceholder":490},[72,37792,37793],{"class":74,"line":3005},[72,37794,34554],{"class":621},[72,37796,37797,37799,37801],{"class":74,"line":3019},[72,37798,34559],{"class":82},[72,37800,609],{"class":78},[72,37802,32760],{"class":362},[72,37804,37805,37807,37809],{"class":74,"line":3027},[72,37806,34568],{"class":82},[72,37808,609],{"class":78},[72,37810,3513],{"class":362},[72,37812,37813],{"class":74,"line":3032},[72,37814,2828],{"emptyLinePlaceholder":490},[72,37816,37817],{"class":74,"line":3038},[72,37818,34581],{"class":621},[72,37820,37821],{"class":74,"line":3044},[72,37822,34586],{"class":621},[72,37824,37825],{"class":74,"line":3049},[72,37826,34591],{"class":621},[72,37828,37829,37831],{"class":74,"line":8374},[72,37830,34596],{"class":78},[72,37832,33302],{"class":82},[72,37834,37835],{"class":74,"line":8398},[72,37836,34603],{"class":621},[72,37838,37839,37841,37843,37845],{"class":74,"line":8403},[72,37840,3831],{"class":78},[72,37842,34610],{"class":82},[72,37844,26465],{"class":78},[72,37846,34615],{"class":82},[72,37848,37849,37851,37853],{"class":74,"line":8409},[72,37850,34620],{"class":82},[72,37852,609],{"class":78},[72,37854,34625],{"class":82},[72,37856,37857,37859,37861],{"class":74,"line":8436},[72,37858,34630],{"class":82},[72,37860,609],{"class":78},[72,37862,34635],{"class":82},[72,37864,37865],{"class":74,"line":8441},[72,37866,34640],{"class":621},[72,37868,37869],{"class":74,"line":8447},[72,37870,33293],{"class":82},[72,37872,37873],{"class":74,"line":8459},[72,37874,34649],{"class":621},[72,37876,37877,37879,37881],{"class":74,"line":8471},[72,37878,33078],{"class":82},[72,37880,609],{"class":78},[72,37882,34658],{"class":82},[72,37884,37885],{"class":74,"line":8483},[72,37886,34663],{"class":621},[72,37888,37889,37891,37893,37895,37897,37899,37901],{"class":74,"line":10142},[72,37890,33095],{"class":82},[72,37892,609],{"class":78},[72,37894,33100],{"class":82},[72,37896,33103],{"class":5642},[72,37898,609],{"class":78},[72,37900,772],{"class":362},[72,37902,570],{"class":82},[72,37904,37905],{"class":74,"line":10167},[72,37906,34684],{"class":621},[72,37908,37909],{"class":74,"line":10190},[72,37910,34689],{"class":621},[72,37912,37913],{"class":74,"line":10214},[72,37914,34694],{"class":621},[72,37916,37917,37919,37921,37923,37925],{"class":74,"line":10219},[72,37918,34699],{"class":82},[72,37920,9903],{"class":78},[72,37922,33205],{"class":82},[72,37924,3377],{"class":78},[72,37926,34708],{"class":82},[72,37928,37929],{"class":74,"line":10224},[72,37930,34713],{"class":621},[72,37932,37933,37935,37937,37939,37941],{"class":74,"line":10229},[72,37934,34718],{"class":82},[72,37936,9903],{"class":78},[72,37938,34723],{"class":82},[72,37940,747],{"class":362},[72,37942,570],{"class":82},[72,37944,37945],{"class":74,"line":10238},[72,37946,2828],{"emptyLinePlaceholder":490},[72,37948,37949],{"class":74,"line":10243},[72,37950,34736],{"class":621},[72,37952,37953,37955,37957,37959,37961],{"class":74,"line":10249},[72,37954,34741],{"class":82},[72,37956,609],{"class":78},[72,37958,34746],{"class":82},[72,37960,1138],{"class":78},[72,37962,34751],{"class":82},[72,37964,37965],{"class":74,"line":10270},[72,37966,34756],{"class":621},[72,37968,37969,37971,37973,37975],{"class":74,"line":10276},[72,37970,32869],{"class":362},[72,37972,564],{"class":82},[72,37974,34765],{"class":366},[72,37976,34768],{"class":82},[72,37978,37979],{"class":74,"line":10290},[72,37980,2828],{"emptyLinePlaceholder":490},[72,37982,37983],{"class":74,"line":10296},[72,37984,34777],{"class":621},[72,37986,37987,37989,37991,37993,37995],{"class":74,"line":10323},[72,37988,1960],{"class":78},[72,37990,31638],{"class":362},[72,37992,3377],{"class":78},[72,37994,31643],{"class":366},[72,37996,4167],{"class":82},[72,37998,37999],{"class":74,"line":10332},[72,38000,34794],{"class":621},[72,38002,38003,38005,38007],{"class":74,"line":10338},[72,38004,31707],{"class":82},[72,38006,609],{"class":78},[72,38008,37507],{"class":82},[72,38010,38011],{"class":74,"line":10346},[72,38012,34807],{"class":621},[72,38014,38015],{"class":74,"line":10351},[72,38016,34812],{"class":621},[72,38018,38019,38021,38023],{"class":74,"line":17030},[72,38020,34817],{"class":82},[72,38022,34820],{"class":366},[72,38024,30915],{"class":82},[72,38026,38027],{"class":74,"line":17036},[72,38028,34827],{"class":621},[72,38030,38031,38033,38035],{"class":74,"line":17059},[72,38032,34440],{"class":82},[72,38034,609],{"class":78},[72,38036,34836],{"class":82},[72,38038,38039],{"class":74,"line":17065},[72,38040,34841],{"class":621},[72,38042,38043],{"class":74,"line":17088},[72,38044,34846],{"class":82},[72,38046,38047],{"class":74,"line":17102},[72,38048,2828],{"emptyLinePlaceholder":490},[72,38050,38051],{"class":74,"line":17122},[72,38052,34855],{"class":621},[72,38054,38055],{"class":74,"line":17128},[72,38056,34860],{"class":621},[72,38058,38059,38061,38063,38065,38067,38069,38071],{"class":74,"line":17139},[72,38060,31655],{"class":82},[72,38062,609],{"class":78},[72,38064,31662],{"class":366},[72,38066,2133],{"class":78},[72,38068,31667],{"class":82},[72,38070,2130],{"class":78},[72,38072,34537],{"class":366},[72,38074,38075,38077,38079],{"class":74,"line":17162},[72,38076,31707],{"class":82},[72,38078,609],{"class":78},[72,38080,32707],{"class":82},[72,38082,38083],{"class":74,"line":17184},[72,38084,34889],{"class":621},[72,38086,38087],{"class":74,"line":17189},[72,38088,34894],{"class":621},[72,38090,38091,38093,38095,38097,38099,38101,38103,38105,38107,38109,38111,38113,38115,38117,38119,38121,38123,38125,38127,38129,38131,38133,38135],{"class":74,"line":17195},[72,38092,34899],{"class":82},[72,38094,609],{"class":78},[72,38096,1444],{"class":82},[72,38098,34906],{"class":366},[72,38100,932],{"class":82},[72,38102,34911],{"class":366},[72,38104,932],{"class":82},[72,38106,34916],{"class":366},[72,38108,932],{"class":82},[72,38110,34921],{"class":366},[72,38112,932],{"class":82},[72,38114,34926],{"class":366},[72,38116,932],{"class":82},[72,38118,34931],{"class":366},[72,38120,932],{"class":82},[72,38122,34936],{"class":366},[72,38124,932],{"class":82},[72,38126,34941],{"class":366},[72,38128,932],{"class":82},[72,38130,34946],{"class":366},[72,38132,932],{"class":82},[72,38134,34951],{"class":366},[72,38136,33664],{"class":82},[72,38138,38139,38141],{"class":74,"line":17209},[72,38140,34596],{"class":78},[72,38142,33302],{"class":82},[72,38144,38145],{"class":74,"line":17222},[72,38146,34964],{"class":621},[72,38148,38149,38151,38153,38155],{"class":74,"line":17227},[72,38150,3831],{"class":78},[72,38152,34971],{"class":82},[72,38154,26465],{"class":78},[72,38156,34615],{"class":82},[72,38158,38159,38161,38163],{"class":74,"line":17241},[72,38160,33028],{"class":82},[72,38162,609],{"class":78},[72,38164,33033],{"class":82},[72,38166,38167,38169,38171],{"class":74,"line":17246},[72,38168,33043],{"class":82},[72,38170,609],{"class":78},[72,38172,33048],{"class":82},[72,38174,38175],{"class":74,"line":17252},[72,38176,2828],{"emptyLinePlaceholder":490},[72,38178,38179],{"class":74,"line":17257},[72,38180,35000],{"class":621},[72,38182,38183],{"class":74,"line":17271},[72,38184,33293],{"class":82},[72,38186,38187],{"class":74,"line":17276},[72,38188,35009],{"class":621},[72,38190,38191,38193,38195],{"class":74,"line":17281},[72,38192,33078],{"class":82},[72,38194,609],{"class":78},[72,38196,33083],{"class":82},[72,38198,38199],{"class":74,"line":17295},[72,38200,35022],{"class":621},[72,38202,38203,38205,38207,38209,38211,38213,38215],{"class":74,"line":17307},[72,38204,33095],{"class":82},[72,38206,609],{"class":78},[72,38208,33100],{"class":82},[72,38210,33103],{"class":5642},[72,38212,609],{"class":78},[72,38214,772],{"class":362},[72,38216,570],{"class":82},[72,38218,38219],{"class":74,"line":17312},[72,38220,35043],{"class":621},[72,38222,38223,38225,38227],{"class":74,"line":17325},[72,38224,35048],{"class":82},[72,38226,609],{"class":78},[72,38228,35053],{"class":82},[72,38230,38231,38233,38235],{"class":74,"line":17330},[72,38232,35058],{"class":82},[72,38234,609],{"class":78},[72,38236,35063],{"class":82},[72,38238,38239,38241,38243,38245,38247,38249,38251,38253],{"class":74,"line":17335},[72,38240,35068],{"class":362},[72,38242,564],{"class":82},[72,38244,35073],{"class":366},[72,38246,35076],{"class":82},[72,38248,35079],{"class":366},[72,38250,932],{"class":82},[72,38252,35084],{"class":366},[72,38254,35087],{"class":82},[531,38256,38258],{"id":38257},"_22vgg","2.2.VGG",[22423,38260,38262],{"id":38261},"_221原理","2.2.1.原理",[15,38264,38265],{},[1891,38266],{"alt":68,"src":38267},"\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",[15,38269,38270],{},[1891,38271],{"alt":68,"src":38272},"\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",[15,38274,38275],{},[1891,38276],{"alt":68,"src":38277},"\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",[15,38279,38280],{},"参数详细描述：",[15,38282,38283],{},[1891,38284],{"alt":68,"src":38285},"\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",[15,38287,38288],{},[1891,38289],{"alt":68,"src":38290},"\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",[15,38292,38293],{},[1891,38294],{"alt":68,"src":38295},"\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",[15,38297,38298],{},[1891,38299],{"alt":68,"src":38300},"\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",[15,38302,38303],{},[1891,38304],{"alt":68,"src":38305},"\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",[22423,38307,38309],{"id":38308},"_222代码实现","2.2.2.代码实现",[22,38311,38312],{},[25,38313,38314],{},"网络搭建",[63,38316,38318],{"className":65,"code":38317,"language":67,"meta":68,"style":68},"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",[34,38319,38320,38326,38338,38348,38358,38362,38379,38387,38406,38411,38416,38428,38466,38471,38507,38511,38540,38545,38550,38561,38597,38601,38637,38641,38669,38673,38678,38689,38725,38729,38765,38769,38805,38809,38837,38841,38846,38857,38894,38898,38934,38938,38974,38978,39006,39010,39015,39026,39062,39066,39102,39106,39142,39146,39174,39178,39183,39194,39199,39204,39209,39230,39234,39246,39250,39262,39266,39270,39275,39280,39295,39300,39310,39315,39330,39335,39354,39359,39368,39373,39383,39388,39393,39407,39412,39426,39434,39438,39442,39450,39461,39472,39483,39494,39505,39516,39522,39526,39531,39544,39564,39570,39579],{"__ignoreMap":68},[72,38321,38322,38324],{"class":74,"line":75},[72,38323,79],{"class":78},[72,38325,30813],{"class":82},[72,38327,38328,38330,38333,38335],{"class":74,"line":370},[72,38329,31155],{"class":78},[72,38331,38332],{"class":82}," sympy.core.sympify ",[72,38334,79],{"class":78},[72,38336,38337],{"class":82}," kernS\n",[72,38339,38340,38342,38344,38346],{"class":74,"line":1608},[72,38341,31155],{"class":78},[72,38343,31158],{"class":82},[72,38345,79],{"class":78},[72,38347,31163],{"class":82},[72,38349,38350,38352,38354,38356],{"class":74,"line":1623},[72,38351,31155],{"class":78},[72,38353,31175],{"class":82},[72,38355,79],{"class":78},[72,38357,31180],{"class":82},[72,38359,38360],{"class":74,"line":1629},[72,38361,2828],{"emptyLinePlaceholder":490},[72,38363,38364,38366,38369,38371,38373,38375,38377],{"class":74,"line":1643},[72,38365,15120],{"class":78},[72,38367,38368],{"class":358}," VGG16",[72,38370,564],{"class":82},[72,38372,31196],{"class":358},[72,38374,1112],{"class":82},[72,38376,31201],{"class":358},[72,38378,31204],{"class":82},[72,38380,38381,38383,38385],{"class":74,"line":1649},[72,38382,31219],{"class":78},[72,38384,31222],{"class":362},[72,38386,31225],{"class":82},[72,38388,38389,38391,38393,38396,38398,38400,38402,38404],{"class":74,"line":1740},[72,38390,31235],{"class":362},[72,38392,564],{"class":82},[72,38394,38395],{"class":362},"VGG16",[72,38397,12861],{"class":82},[72,38399,31241],{"class":362},[72,38401,31244],{"class":82},[72,38403,31247],{"class":362},[72,38405,2404],{"class":82},[72,38407,38408],{"class":74,"line":1746},[72,38409,38410],{"class":621},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[72,38412,38413],{"class":74,"line":1758},[72,38414,38415],{"class":621},"        # 这里用的是灰度图\n",[72,38417,38418,38420,38423,38425],{"class":74,"line":2041},[72,38419,31263],{"class":362},[72,38421,38422],{"class":82},".block1",[72,38424,609],{"class":78},[72,38426,38427],{"class":82},"nn.Sequential(\n",[72,38429,38430,38433,38435,38437,38439,38441,38443,38445,38447,38449,38451,38453,38455,38457,38459,38461,38463],{"class":74,"line":2046},[72,38431,38432],{"class":82},"            nn.Conv2d(",[72,38434,31274],{"class":5642},[72,38436,609],{"class":78},[72,38438,772],{"class":362},[72,38440,932],{"class":82},[72,38442,31283],{"class":5642},[72,38444,609],{"class":78},[72,38446,759],{"class":362},[72,38448,932],{"class":82},[72,38450,31292],{"class":5642},[72,38452,609],{"class":78},[72,38454,634],{"class":362},[72,38456,932],{"class":82},[72,38458,31301],{"class":5642},[72,38460,609],{"class":78},[72,38462,772],{"class":362},[72,38464,38465],{"class":82},"),\n",[72,38467,38468],{"class":74,"line":2052},[72,38469,38470],{"class":82},"            nn.ReLU(),\n",[72,38472,38473,38475,38477,38479,38481,38483,38485,38487,38489,38491,38493,38495,38497,38499,38501,38503,38505],{"class":74,"line":2057},[72,38474,38432],{"class":82},[72,38476,31274],{"class":5642},[72,38478,609],{"class":78},[72,38480,759],{"class":362},[72,38482,932],{"class":82},[72,38484,31283],{"class":5642},[72,38486,609],{"class":78},[72,38488,759],{"class":362},[72,38490,932],{"class":82},[72,38492,31292],{"class":5642},[72,38494,609],{"class":78},[72,38496,634],{"class":362},[72,38498,932],{"class":82},[72,38500,31301],{"class":5642},[72,38502,609],{"class":78},[72,38504,772],{"class":362},[72,38506,38465],{"class":82},[72,38508,38509],{"class":74,"line":2071},[72,38510,38470],{"class":82},[72,38512,38513,38516,38518,38520,38522,38524,38526,38528,38530,38532,38534,38536,38538],{"class":74,"line":2076},[72,38514,38515],{"class":82},"            nn.MaxPool2d(",[72,38517,31292],{"class":5642},[72,38519,609],{"class":78},[72,38521,640],{"class":362},[72,38523,932],{"class":82},[72,38525,31347],{"class":5642},[72,38527,609],{"class":78},[72,38529,640],{"class":362},[72,38531,932],{"class":82},[72,38533,31301],{"class":5642},[72,38535,609],{"class":78},[72,38537,747],{"class":362},[72,38539,570],{"class":82},[72,38541,38542],{"class":74,"line":2082},[72,38543,38544],{"class":82},"        )\n",[72,38546,38547],{"class":74,"line":2103},[72,38548,38549],{"class":621},"        # 第二层\n",[72,38551,38552,38554,38557,38559],{"class":74,"line":2108},[72,38553,31263],{"class":362},[72,38555,38556],{"class":82},".block2",[72,38558,609],{"class":78},[72,38560,38427],{"class":82},[72,38562,38563,38565,38567,38569,38571,38573,38575,38577,38579,38581,38583,38585,38587,38589,38591,38593,38595],{"class":74,"line":2122},[72,38564,38432],{"class":82},[72,38566,31274],{"class":5642},[72,38568,609],{"class":78},[72,38570,759],{"class":362},[72,38572,932],{"class":82},[72,38574,31283],{"class":5642},[72,38576,609],{"class":78},[72,38578,32488],{"class":362},[72,38580,932],{"class":82},[72,38582,31292],{"class":5642},[72,38584,609],{"class":78},[72,38586,634],{"class":362},[72,38588,932],{"class":82},[72,38590,31301],{"class":5642},[72,38592,609],{"class":78},[72,38594,772],{"class":362},[72,38596,38465],{"class":82},[72,38598,38599],{"class":74,"line":2127},[72,38600,38470],{"class":82},[72,38602,38603,38605,38607,38609,38611,38613,38615,38617,38619,38621,38623,38625,38627,38629,38631,38633,38635],{"class":74,"line":2156},[72,38604,38432],{"class":82},[72,38606,31274],{"class":5642},[72,38608,609],{"class":78},[72,38610,32488],{"class":362},[72,38612,932],{"class":82},[72,38614,31283],{"class":5642},[72,38616,609],{"class":78},[72,38618,32488],{"class":362},[72,38620,932],{"class":82},[72,38622,31292],{"class":5642},[72,38624,609],{"class":78},[72,38626,634],{"class":362},[72,38628,932],{"class":82},[72,38630,31301],{"class":5642},[72,38632,609],{"class":78},[72,38634,772],{"class":362},[72,38636,38465],{"class":82},[72,38638,38639],{"class":74,"line":2161},[72,38640,38470],{"class":82},[72,38642,38643,38645,38647,38649,38651,38653,38655,38657,38659,38661,38663,38665,38667],{"class":74,"line":2178},[72,38644,38515],{"class":82},[72,38646,31292],{"class":5642},[72,38648,609],{"class":78},[72,38650,640],{"class":362},[72,38652,932],{"class":82},[72,38654,31347],{"class":5642},[72,38656,609],{"class":78},[72,38658,640],{"class":362},[72,38660,932],{"class":82},[72,38662,31301],{"class":5642},[72,38664,609],{"class":78},[72,38666,747],{"class":362},[72,38668,570],{"class":82},[72,38670,38671],{"class":74,"line":2183},[72,38672,38544],{"class":82},[72,38674,38675],{"class":74,"line":2188},[72,38676,38677],{"class":621},"        # 第三层\n",[72,38679,38680,38682,38685,38687],{"class":74,"line":2193},[72,38681,31263],{"class":362},[72,38683,38684],{"class":82},".block3",[72,38686,609],{"class":78},[72,38688,38427],{"class":82},[72,38690,38691,38693,38695,38697,38699,38701,38703,38705,38707,38709,38711,38713,38715,38717,38719,38721,38723],{"class":74,"line":2207},[72,38692,38432],{"class":82},[72,38694,31274],{"class":5642},[72,38696,609],{"class":78},[72,38698,32488],{"class":362},[72,38700,932],{"class":82},[72,38702,31283],{"class":5642},[72,38704,609],{"class":78},[72,38706,35288],{"class":362},[72,38708,932],{"class":82},[72,38710,31292],{"class":5642},[72,38712,609],{"class":78},[72,38714,634],{"class":362},[72,38716,932],{"class":82},[72,38718,31301],{"class":5642},[72,38720,609],{"class":78},[72,38722,772],{"class":362},[72,38724,38465],{"class":82},[72,38726,38727],{"class":74,"line":2212},[72,38728,38470],{"class":82},[72,38730,38731,38733,38735,38737,38739,38741,38743,38745,38747,38749,38751,38753,38755,38757,38759,38761,38763],{"class":74,"line":3005},[72,38732,38432],{"class":82},[72,38734,31274],{"class":5642},[72,38736,609],{"class":78},[72,38738,35288],{"class":362},[72,38740,932],{"class":82},[72,38742,31283],{"class":5642},[72,38744,609],{"class":78},[72,38746,35288],{"class":362},[72,38748,932],{"class":82},[72,38750,31292],{"class":5642},[72,38752,609],{"class":78},[72,38754,634],{"class":362},[72,38756,932],{"class":82},[72,38758,31301],{"class":5642},[72,38760,609],{"class":78},[72,38762,772],{"class":362},[72,38764,38465],{"class":82},[72,38766,38767],{"class":74,"line":3019},[72,38768,38470],{"class":82},[72,38770,38771,38773,38775,38777,38779,38781,38783,38785,38787,38789,38791,38793,38795,38797,38799,38801,38803],{"class":74,"line":3027},[72,38772,38432],{"class":82},[72,38774,31274],{"class":5642},[72,38776,609],{"class":78},[72,38778,35288],{"class":362},[72,38780,932],{"class":82},[72,38782,31283],{"class":5642},[72,38784,609],{"class":78},[72,38786,35288],{"class":362},[72,38788,932],{"class":82},[72,38790,31292],{"class":5642},[72,38792,609],{"class":78},[72,38794,634],{"class":362},[72,38796,932],{"class":82},[72,38798,31301],{"class":5642},[72,38800,609],{"class":78},[72,38802,772],{"class":362},[72,38804,38465],{"class":82},[72,38806,38807],{"class":74,"line":3032},[72,38808,38470],{"class":82},[72,38810,38811,38813,38815,38817,38819,38821,38823,38825,38827,38829,38831,38833,38835],{"class":74,"line":3038},[72,38812,38515],{"class":82},[72,38814,31292],{"class":5642},[72,38816,609],{"class":78},[72,38818,640],{"class":362},[72,38820,932],{"class":82},[72,38822,31347],{"class":5642},[72,38824,609],{"class":78},[72,38826,640],{"class":362},[72,38828,932],{"class":82},[72,38830,31301],{"class":5642},[72,38832,609],{"class":78},[72,38834,747],{"class":362},[72,38836,570],{"class":82},[72,38838,38839],{"class":74,"line":3044},[72,38840,38544],{"class":82},[72,38842,38843],{"class":74,"line":3049},[72,38844,38845],{"class":621},"        # 第四层\n",[72,38847,38848,38850,38853,38855],{"class":74,"line":8374},[72,38849,31263],{"class":362},[72,38851,38852],{"class":82},".block4",[72,38854,609],{"class":78},[72,38856,38427],{"class":82},[72,38858,38859,38861,38863,38865,38867,38869,38871,38873,38876,38878,38880,38882,38884,38886,38888,38890,38892],{"class":74,"line":8398},[72,38860,38432],{"class":82},[72,38862,31274],{"class":5642},[72,38864,609],{"class":78},[72,38866,35288],{"class":362},[72,38868,932],{"class":82},[72,38870,31283],{"class":5642},[72,38872,609],{"class":78},[72,38874,38875],{"class":362},"512",[72,38877,932],{"class":82},[72,38879,31292],{"class":5642},[72,38881,609],{"class":78},[72,38883,634],{"class":362},[72,38885,932],{"class":82},[72,38887,31301],{"class":5642},[72,38889,609],{"class":78},[72,38891,772],{"class":362},[72,38893,38465],{"class":82},[72,38895,38896],{"class":74,"line":8403},[72,38897,38470],{"class":82},[72,38899,38900,38902,38904,38906,38908,38910,38912,38914,38916,38918,38920,38922,38924,38926,38928,38930,38932],{"class":74,"line":8409},[72,38901,38432],{"class":82},[72,38903,31274],{"class":5642},[72,38905,609],{"class":78},[72,38907,38875],{"class":362},[72,38909,932],{"class":82},[72,38911,31283],{"class":5642},[72,38913,609],{"class":78},[72,38915,38875],{"class":362},[72,38917,932],{"class":82},[72,38919,31292],{"class":5642},[72,38921,609],{"class":78},[72,38923,634],{"class":362},[72,38925,932],{"class":82},[72,38927,31301],{"class":5642},[72,38929,609],{"class":78},[72,38931,772],{"class":362},[72,38933,38465],{"class":82},[72,38935,38936],{"class":74,"line":8436},[72,38937,38470],{"class":82},[72,38939,38940,38942,38944,38946,38948,38950,38952,38954,38956,38958,38960,38962,38964,38966,38968,38970,38972],{"class":74,"line":8441},[72,38941,38432],{"class":82},[72,38943,31274],{"class":5642},[72,38945,609],{"class":78},[72,38947,38875],{"class":362},[72,38949,932],{"class":82},[72,38951,31283],{"class":5642},[72,38953,609],{"class":78},[72,38955,38875],{"class":362},[72,38957,932],{"class":82},[72,38959,31292],{"class":5642},[72,38961,609],{"class":78},[72,38963,634],{"class":362},[72,38965,932],{"class":82},[72,38967,31301],{"class":5642},[72,38969,609],{"class":78},[72,38971,772],{"class":362},[72,38973,38465],{"class":82},[72,38975,38976],{"class":74,"line":8447},[72,38977,38470],{"class":82},[72,38979,38980,38982,38984,38986,38988,38990,38992,38994,38996,38998,39000,39002,39004],{"class":74,"line":8459},[72,38981,38515],{"class":82},[72,38983,31292],{"class":5642},[72,38985,609],{"class":78},[72,38987,640],{"class":362},[72,38989,932],{"class":82},[72,38991,31347],{"class":5642},[72,38993,609],{"class":78},[72,38995,640],{"class":362},[72,38997,932],{"class":82},[72,38999,31301],{"class":5642},[72,39001,609],{"class":78},[72,39003,747],{"class":362},[72,39005,570],{"class":82},[72,39007,39008],{"class":74,"line":8471},[72,39009,38544],{"class":82},[72,39011,39012],{"class":74,"line":8483},[72,39013,39014],{"class":621},"        # 第五层\n",[72,39016,39017,39019,39022,39024],{"class":74,"line":10142},[72,39018,31263],{"class":362},[72,39020,39021],{"class":82},".block5",[72,39023,609],{"class":78},[72,39025,38427],{"class":82},[72,39027,39028,39030,39032,39034,39036,39038,39040,39042,39044,39046,39048,39050,39052,39054,39056,39058,39060],{"class":74,"line":10167},[72,39029,38432],{"class":82},[72,39031,31274],{"class":5642},[72,39033,609],{"class":78},[72,39035,38875],{"class":362},[72,39037,932],{"class":82},[72,39039,31283],{"class":5642},[72,39041,609],{"class":78},[72,39043,38875],{"class":362},[72,39045,932],{"class":82},[72,39047,31292],{"class":5642},[72,39049,609],{"class":78},[72,39051,634],{"class":362},[72,39053,932],{"class":82},[72,39055,31301],{"class":5642},[72,39057,609],{"class":78},[72,39059,772],{"class":362},[72,39061,38465],{"class":82},[72,39063,39064],{"class":74,"line":10190},[72,39065,38470],{"class":82},[72,39067,39068,39070,39072,39074,39076,39078,39080,39082,39084,39086,39088,39090,39092,39094,39096,39098,39100],{"class":74,"line":10214},[72,39069,38432],{"class":82},[72,39071,31274],{"class":5642},[72,39073,609],{"class":78},[72,39075,38875],{"class":362},[72,39077,932],{"class":82},[72,39079,31283],{"class":5642},[72,39081,609],{"class":78},[72,39083,38875],{"class":362},[72,39085,932],{"class":82},[72,39087,31292],{"class":5642},[72,39089,609],{"class":78},[72,39091,634],{"class":362},[72,39093,932],{"class":82},[72,39095,31301],{"class":5642},[72,39097,609],{"class":78},[72,39099,772],{"class":362},[72,39101,38465],{"class":82},[72,39103,39104],{"class":74,"line":10219},[72,39105,38470],{"class":82},[72,39107,39108,39110,39112,39114,39116,39118,39120,39122,39124,39126,39128,39130,39132,39134,39136,39138,39140],{"class":74,"line":10224},[72,39109,38432],{"class":82},[72,39111,31274],{"class":5642},[72,39113,609],{"class":78},[72,39115,38875],{"class":362},[72,39117,932],{"class":82},[72,39119,31283],{"class":5642},[72,39121,609],{"class":78},[72,39123,38875],{"class":362},[72,39125,932],{"class":82},[72,39127,31292],{"class":5642},[72,39129,609],{"class":78},[72,39131,634],{"class":362},[72,39133,932],{"class":82},[72,39135,31301],{"class":5642},[72,39137,609],{"class":78},[72,39139,772],{"class":362},[72,39141,38465],{"class":82},[72,39143,39144],{"class":74,"line":10229},[72,39145,38470],{"class":82},[72,39147,39148,39150,39152,39154,39156,39158,39160,39162,39164,39166,39168,39170,39172],{"class":74,"line":10238},[72,39149,38515],{"class":82},[72,39151,31292],{"class":5642},[72,39153,609],{"class":78},[72,39155,640],{"class":362},[72,39157,932],{"class":82},[72,39159,31347],{"class":5642},[72,39161,609],{"class":78},[72,39163,640],{"class":362},[72,39165,932],{"class":82},[72,39167,31301],{"class":5642},[72,39169,609],{"class":78},[72,39171,747],{"class":362},[72,39173,570],{"class":82},[72,39175,39176],{"class":74,"line":10243},[72,39177,38544],{"class":82},[72,39179,39180],{"class":74,"line":10249},[72,39181,39182],{"class":621},"        # 全连接层\n",[72,39184,39185,39187,39190,39192],{"class":74,"line":10270},[72,39186,31263],{"class":362},[72,39188,39189],{"class":82},".block6",[72,39191,609],{"class":78},[72,39193,38427],{"class":82},[72,39195,39196],{"class":74,"line":10276},[72,39197,39198],{"class":621},"            # 平展操作\n",[72,39200,39201],{"class":74,"line":10290},[72,39202,39203],{"class":621},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[72,39205,39206],{"class":74,"line":10296},[72,39207,39208],{"class":82},"            nn.Flatten(),\n",[72,39210,39211,39214,39216,39218,39220,39222,39224,39226,39228],{"class":74,"line":10323},[72,39212,39213],{"class":82},"            nn.Linear(",[72,39215,923],{"class":362},[72,39217,1009],{"class":78},[72,39219,923],{"class":362},[72,39221,1009],{"class":78},[72,39223,38875],{"class":362},[72,39225,932],{"class":82},[72,39227,35288],{"class":362},[72,39229,38465],{"class":82},[72,39231,39232],{"class":74,"line":10332},[72,39233,38470],{"class":82},[72,39235,39236,39238,39240,39242,39244],{"class":74,"line":10338},[72,39237,39213],{"class":82},[72,39239,35288],{"class":362},[72,39241,932],{"class":82},[72,39243,32488],{"class":362},[72,39245,38465],{"class":82},[72,39247,39248],{"class":74,"line":10346},[72,39249,38470],{"class":82},[72,39251,39252,39254,39256,39258,39260],{"class":74,"line":10351},[72,39253,39213],{"class":82},[72,39255,32488],{"class":362},[72,39257,932],{"class":82},[72,39259,1000],{"class":362},[72,39261,570],{"class":82},[72,39263,39264],{"class":74,"line":17030},[72,39265,38544],{"class":82},[72,39267,39268],{"class":74,"line":17036},[72,39269,2828],{"emptyLinePlaceholder":490},[72,39271,39272],{"class":74,"line":17059},[72,39273,39274],{"class":621},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[72,39276,39277],{"class":74,"line":17065},[72,39278,39279],{"class":621},"        # 循环遍历模型\n",[72,39281,39282,39284,39287,39289,39292],{"class":74,"line":17088},[72,39283,3831],{"class":78},[72,39285,39286],{"class":82}," m ",[72,39288,26465],{"class":78},[72,39290,39291],{"class":362}," self",[72,39293,39294],{"class":82},".modules():\n",[72,39296,39297],{"class":74,"line":17102},[72,39298,39299],{"class":621},"            # print(m)\n",[72,39301,39302,39304,39307],{"class":74,"line":17122},[72,39303,5070],{"class":78},[72,39305,39306],{"class":362}," isinstance",[72,39308,39309],{"class":82},"(m,nn.Conv2d):\n",[72,39311,39312],{"class":74,"line":17128},[72,39313,39314],{"class":621},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[72,39316,39317,39320,39323,39325,39328],{"class":74,"line":17139},[72,39318,39319],{"class":82},"                nn.init.kaiming_normal_(m.weight,",[72,39321,39322],{"class":5642},"nonlinearity",[72,39324,609],{"class":78},[72,39326,39327],{"class":366},"'relu'",[72,39329,570],{"class":82},[72,39331,39332],{"class":74,"line":17162},[72,39333,39334],{"class":621},"                # 判断b参数是否存在\n",[72,39336,39337,39340,39343,39346,39349,39352],{"class":74,"line":17184},[72,39338,39339],{"class":78},"                if",[72,39341,39342],{"class":82}," m.bias ",[72,39344,39345],{"class":78},"is",[72,39347,39348],{"class":78}," not",[72,39350,39351],{"class":362}," None",[72,39353,4167],{"class":82},[72,39355,39356],{"class":74,"line":17189},[72,39357,39358],{"class":621},"                    # 如果参数不存在的化初始化b=0\n",[72,39360,39361,39364,39366],{"class":74,"line":17195},[72,39362,39363],{"class":82},"                    nn.init.constant_(m.bias,",[72,39365,747],{"class":362},[72,39367,570],{"class":82},[72,39369,39370],{"class":74,"line":17209},[72,39371,39372],{"class":621},"            # 全连接层初始化\n",[72,39374,39375,39378,39380],{"class":74,"line":17222},[72,39376,39377],{"class":78},"            elif",[72,39379,39306],{"class":362},[72,39381,39382],{"class":82},"(m,nn.Linear):\n",[72,39384,39385],{"class":74,"line":17227},[72,39386,39387],{"class":621},"                # 这个初始化方法是利用的是正太分布的方式\n",[72,39389,39390],{"class":74,"line":17241},[72,39391,39392],{"class":621},"                # 均值为0，方差为0.01\n",[72,39394,39395,39398,39400,39402,39405],{"class":74,"line":17246},[72,39396,39397],{"class":82},"                nn.init.normal_(m.weight,",[72,39399,747],{"class":362},[72,39401,932],{"class":82},[72,39403,39404],{"class":362},"0.01",[72,39406,570],{"class":82},[72,39408,39409],{"class":74,"line":17252},[72,39410,39411],{"class":621},"                # 初始化b参数\n",[72,39413,39414,39416,39418,39420,39422,39424],{"class":74,"line":17257},[72,39415,39339],{"class":78},[72,39417,39342],{"class":82},[72,39419,39345],{"class":78},[72,39421,39348],{"class":78},[72,39423,39351],{"class":362},[72,39425,4167],{"class":82},[72,39427,39428,39430,39432],{"class":74,"line":17271},[72,39429,39363],{"class":82},[72,39431,747],{"class":362},[72,39433,570],{"class":82},[72,39435,39436],{"class":74,"line":17276},[72,39437,2828],{"emptyLinePlaceholder":490},[72,39439,39440],{"class":74,"line":17281},[72,39441,35583],{"class":621},[72,39443,39444,39446,39448],{"class":74,"line":17295},[72,39445,31219],{"class":78},[72,39447,31511],{"class":358},[72,39449,31514],{"class":82},[72,39451,39452,39454,39456,39458],{"class":74,"line":17307},[72,39453,31519],{"class":82},[72,39455,609],{"class":78},[72,39457,31241],{"class":362},[72,39459,39460],{"class":82},".block1(x)\n",[72,39462,39463,39465,39467,39469],{"class":74,"line":17312},[72,39464,31519],{"class":82},[72,39466,609],{"class":78},[72,39468,31241],{"class":362},[72,39470,39471],{"class":82},".block2(x)\n",[72,39473,39474,39476,39478,39480],{"class":74,"line":17325},[72,39475,31519],{"class":82},[72,39477,609],{"class":78},[72,39479,31241],{"class":362},[72,39481,39482],{"class":82},".block3(x)\n",[72,39484,39485,39487,39489,39491],{"class":74,"line":17330},[72,39486,31519],{"class":82},[72,39488,609],{"class":78},[72,39490,31241],{"class":362},[72,39492,39493],{"class":82},".block4(x)\n",[72,39495,39496,39498,39500,39502],{"class":74,"line":17335},[72,39497,31519],{"class":82},[72,39499,609],{"class":78},[72,39501,31241],{"class":362},[72,39503,39504],{"class":82},".block5(x)\n",[72,39506,39507,39509,39511,39513],{"class":74,"line":17340},[72,39508,31519],{"class":82},[72,39510,609],{"class":78},[72,39512,31241],{"class":362},[72,39514,39515],{"class":82},".block6(x)\n",[72,39517,39518,39520],{"class":74,"line":17353},[72,39519,15178],{"class":78},[72,39521,31627],{"class":82},[72,39523,39524],{"class":74,"line":17358},[72,39525,2828],{"emptyLinePlaceholder":490},[72,39527,39528],{"class":74,"line":33051},[72,39529,39530],{"class":621},"# 验证模型\n",[72,39532,39533,39535,39537,39539,39542],{"class":74,"line":33057},[72,39534,1960],{"class":78},[72,39536,31638],{"class":362},[72,39538,3377],{"class":78},[72,39540,39541],{"class":366},"'__main__'",[72,39543,4167],{"class":82},[72,39545,39546,39548,39550,39552,39554,39556,39558,39560,39562],{"class":74,"line":33063},[72,39547,31655],{"class":82},[72,39549,609],{"class":78},[72,39551,30869],{"class":82},[72,39553,31662],{"class":366},[72,39555,2133],{"class":78},[72,39557,31667],{"class":82},[72,39559,2130],{"class":78},[72,39561,30894],{"class":366},[72,39563,570],{"class":82},[72,39565,39566,39568],{"class":74,"line":33069},[72,39567,31717],{"class":362},[72,39569,30903],{"class":82},[72,39571,39572,39574,39576],{"class":74,"line":33075},[72,39573,31707],{"class":82},[72,39575,609],{"class":78},[72,39577,39578],{"class":82},"VGG16().to(device)\n",[72,39580,39581,39583,39585,39587,39589,39591,39593,39595],{"class":74,"line":33086},[72,39582,31717],{"class":362},[72,39584,31720],{"class":82},[72,39586,772],{"class":362},[72,39588,932],{"class":82},[72,39590,31919],{"class":362},[72,39592,932],{"class":82},[72,39594,31919],{"class":362},[72,39596,31733],{"class":82},[22,39598,39599],{"start":370},[25,39600,39601],{},"训练代码",[15,39603,39604],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[15,39606,39607],{},"解决方式:",[15,39609,39610],{},"①权重初始化",[63,39612,39614],{"className":65,"code":39613,"language":67,"meta":68,"style":68},"# 权重初始化,保证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",[34,39615,39616,39621,39626,39638,39643,39651,39656,39669,39674,39688,39693,39702,39707,39716,39721,39726,39739,39744,39758],{"__ignoreMap":68},[72,39617,39618],{"class":74,"line":75},[72,39619,39620],{"class":621},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[72,39622,39623],{"class":74,"line":370},[72,39624,39625],{"class":621},"# 循环遍历模型\n",[72,39627,39628,39630,39632,39634,39636],{"class":74,"line":1608},[72,39629,3453],{"class":78},[72,39631,39286],{"class":82},[72,39633,26465],{"class":78},[72,39635,39291],{"class":362},[72,39637,39294],{"class":82},[72,39639,39640],{"class":74,"line":1623},[72,39641,39642],{"class":621},"    # print(m)\n",[72,39644,39645,39647,39649],{"class":74,"line":1629},[72,39646,3529],{"class":78},[72,39648,39306],{"class":362},[72,39650,39309],{"class":82},[72,39652,39653],{"class":74,"line":1643},[72,39654,39655],{"class":621},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[72,39657,39658,39661,39663,39665,39667],{"class":74,"line":1649},[72,39659,39660],{"class":82},"        nn.init.kaiming_normal_(m.weight,",[72,39662,39322],{"class":5642},[72,39664,609],{"class":78},[72,39666,39327],{"class":366},[72,39668,570],{"class":82},[72,39670,39671],{"class":74,"line":1740},[72,39672,39673],{"class":621},"        # 判断b参数是否存在\n",[72,39675,39676,39678,39680,39682,39684,39686],{"class":74,"line":1746},[72,39677,2925],{"class":78},[72,39679,39342],{"class":82},[72,39681,39345],{"class":78},[72,39683,39348],{"class":78},[72,39685,39351],{"class":362},[72,39687,4167],{"class":82},[72,39689,39690],{"class":74,"line":1758},[72,39691,39692],{"class":621},"            # 如果参数不存在的化初始化b=0\n",[72,39694,39695,39698,39700],{"class":74,"line":2041},[72,39696,39697],{"class":82},"            nn.init.constant_(m.bias,",[72,39699,747],{"class":362},[72,39701,570],{"class":82},[72,39703,39704],{"class":74,"line":2046},[72,39705,39706],{"class":621},"    # 全连接层初始化\n",[72,39708,39709,39712,39714],{"class":74,"line":2052},[72,39710,39711],{"class":78},"    elif",[72,39713,39306],{"class":362},[72,39715,39382],{"class":82},[72,39717,39718],{"class":74,"line":2057},[72,39719,39720],{"class":621},"        # 这个初始化方法是利用的是正太分布的方式\n",[72,39722,39723],{"class":74,"line":2071},[72,39724,39725],{"class":621},"        # 均值为0，方差为0.01\n",[72,39727,39728,39731,39733,39735,39737],{"class":74,"line":2076},[72,39729,39730],{"class":82},"        nn.init.normal_(m.weight,",[72,39732,747],{"class":362},[72,39734,932],{"class":82},[72,39736,39404],{"class":362},[72,39738,570],{"class":82},[72,39740,39741],{"class":74,"line":2082},[72,39742,39743],{"class":621},"        # 初始化b参数\n",[72,39745,39746,39748,39750,39752,39754,39756],{"class":74,"line":2103},[72,39747,2925],{"class":78},[72,39749,39342],{"class":82},[72,39751,39345],{"class":78},[72,39753,39348],{"class":78},[72,39755,39351],{"class":362},[72,39757,4167],{"class":82},[72,39759,39760,39762,39764],{"class":74,"line":2108},[72,39761,39697],{"class":82},[72,39763,747],{"class":362},[72,39765,570],{"class":82},[15,39767,39768],{},"②尽可能地增加批次",[15,39770,39771],{},"训练完整代码：",[63,39773,39774],{"className":65,"code":38317,"language":67,"meta":68,"style":68},[34,39775,39776,39782,39792,39802,39812,39816,39832,39840,39858,39862,39866,39876,39912,39916,39952,39956,39984,39988,39992,40002,40038,40042,40078,40082,40110,40114,40118,40128,40164,40168,40204,40208,40244,40248,40276,40280,40284,40294,40330,40334,40370,40374,40410,40414,40442,40446,40450,40460,40496,40500,40536,40540,40576,40580,40608,40612,40616,40626,40630,40634,40638,40658,40662,40674,40678,40690,40694,40698,40702,40706,40718,40722,40730,40734,40746,40750,40764,40768,40776,40780,40788,40792,40796,40808,40812,40826,40834,40838,40842,40850,40860,40870,40880,40890,40900,40910,40916,40920,40924,40936,40956,40962,40970],{"__ignoreMap":68},[72,39777,39778,39780],{"class":74,"line":75},[72,39779,79],{"class":78},[72,39781,30813],{"class":82},[72,39783,39784,39786,39788,39790],{"class":74,"line":370},[72,39785,31155],{"class":78},[72,39787,38332],{"class":82},[72,39789,79],{"class":78},[72,39791,38337],{"class":82},[72,39793,39794,39796,39798,39800],{"class":74,"line":1608},[72,39795,31155],{"class":78},[72,39797,31158],{"class":82},[72,39799,79],{"class":78},[72,39801,31163],{"class":82},[72,39803,39804,39806,39808,39810],{"class":74,"line":1623},[72,39805,31155],{"class":78},[72,39807,31175],{"class":82},[72,39809,79],{"class":78},[72,39811,31180],{"class":82},[72,39813,39814],{"class":74,"line":1629},[72,39815,2828],{"emptyLinePlaceholder":490},[72,39817,39818,39820,39822,39824,39826,39828,39830],{"class":74,"line":1643},[72,39819,15120],{"class":78},[72,39821,38368],{"class":358},[72,39823,564],{"class":82},[72,39825,31196],{"class":358},[72,39827,1112],{"class":82},[72,39829,31201],{"class":358},[72,39831,31204],{"class":82},[72,39833,39834,39836,39838],{"class":74,"line":1649},[72,39835,31219],{"class":78},[72,39837,31222],{"class":362},[72,39839,31225],{"class":82},[72,39841,39842,39844,39846,39848,39850,39852,39854,39856],{"class":74,"line":1740},[72,39843,31235],{"class":362},[72,39845,564],{"class":82},[72,39847,38395],{"class":362},[72,39849,12861],{"class":82},[72,39851,31241],{"class":362},[72,39853,31244],{"class":82},[72,39855,31247],{"class":362},[72,39857,2404],{"class":82},[72,39859,39860],{"class":74,"line":1746},[72,39861,38410],{"class":621},[72,39863,39864],{"class":74,"line":1758},[72,39865,38415],{"class":621},[72,39867,39868,39870,39872,39874],{"class":74,"line":2041},[72,39869,31263],{"class":362},[72,39871,38422],{"class":82},[72,39873,609],{"class":78},[72,39875,38427],{"class":82},[72,39877,39878,39880,39882,39884,39886,39888,39890,39892,39894,39896,39898,39900,39902,39904,39906,39908,39910],{"class":74,"line":2046},[72,39879,38432],{"class":82},[72,39881,31274],{"class":5642},[72,39883,609],{"class":78},[72,39885,772],{"class":362},[72,39887,932],{"class":82},[72,39889,31283],{"class":5642},[72,39891,609],{"class":78},[72,39893,759],{"class":362},[72,39895,932],{"class":82},[72,39897,31292],{"class":5642},[72,39899,609],{"class":78},[72,39901,634],{"class":362},[72,39903,932],{"class":82},[72,39905,31301],{"class":5642},[72,39907,609],{"class":78},[72,39909,772],{"class":362},[72,39911,38465],{"class":82},[72,39913,39914],{"class":74,"line":2052},[72,39915,38470],{"class":82},[72,39917,39918,39920,39922,39924,39926,39928,39930,39932,39934,39936,39938,39940,39942,39944,39946,39948,39950],{"class":74,"line":2057},[72,39919,38432],{"class":82},[72,39921,31274],{"class":5642},[72,39923,609],{"class":78},[72,39925,759],{"class":362},[72,39927,932],{"class":82},[72,39929,31283],{"class":5642},[72,39931,609],{"class":78},[72,39933,759],{"class":362},[72,39935,932],{"class":82},[72,39937,31292],{"class":5642},[72,39939,609],{"class":78},[72,39941,634],{"class":362},[72,39943,932],{"class":82},[72,39945,31301],{"class":5642},[72,39947,609],{"class":78},[72,39949,772],{"class":362},[72,39951,38465],{"class":82},[72,39953,39954],{"class":74,"line":2071},[72,39955,38470],{"class":82},[72,39957,39958,39960,39962,39964,39966,39968,39970,39972,39974,39976,39978,39980,39982],{"class":74,"line":2076},[72,39959,38515],{"class":82},[72,39961,31292],{"class":5642},[72,39963,609],{"class":78},[72,39965,640],{"class":362},[72,39967,932],{"class":82},[72,39969,31347],{"class":5642},[72,39971,609],{"class":78},[72,39973,640],{"class":362},[72,39975,932],{"class":82},[72,39977,31301],{"class":5642},[72,39979,609],{"class":78},[72,39981,747],{"class":362},[72,39983,570],{"class":82},[72,39985,39986],{"class":74,"line":2082},[72,39987,38544],{"class":82},[72,39989,39990],{"class":74,"line":2103},[72,39991,38549],{"class":621},[72,39993,39994,39996,39998,40000],{"class":74,"line":2108},[72,39995,31263],{"class":362},[72,39997,38556],{"class":82},[72,39999,609],{"class":78},[72,40001,38427],{"class":82},[72,40003,40004,40006,40008,40010,40012,40014,40016,40018,40020,40022,40024,40026,40028,40030,40032,40034,40036],{"class":74,"line":2122},[72,40005,38432],{"class":82},[72,40007,31274],{"class":5642},[72,40009,609],{"class":78},[72,40011,759],{"class":362},[72,40013,932],{"class":82},[72,40015,31283],{"class":5642},[72,40017,609],{"class":78},[72,40019,32488],{"class":362},[72,40021,932],{"class":82},[72,40023,31292],{"class":5642},[72,40025,609],{"class":78},[72,40027,634],{"class":362},[72,40029,932],{"class":82},[72,40031,31301],{"class":5642},[72,40033,609],{"class":78},[72,40035,772],{"class":362},[72,40037,38465],{"class":82},[72,40039,40040],{"class":74,"line":2127},[72,40041,38470],{"class":82},[72,40043,40044,40046,40048,40050,40052,40054,40056,40058,40060,40062,40064,40066,40068,40070,40072,40074,40076],{"class":74,"line":2156},[72,40045,38432],{"class":82},[72,40047,31274],{"class":5642},[72,40049,609],{"class":78},[72,40051,32488],{"class":362},[72,40053,932],{"class":82},[72,40055,31283],{"class":5642},[72,40057,609],{"class":78},[72,40059,32488],{"class":362},[72,40061,932],{"class":82},[72,40063,31292],{"class":5642},[72,40065,609],{"class":78},[72,40067,634],{"class":362},[72,40069,932],{"class":82},[72,40071,31301],{"class":5642},[72,40073,609],{"class":78},[72,40075,772],{"class":362},[72,40077,38465],{"class":82},[72,40079,40080],{"class":74,"line":2161},[72,40081,38470],{"class":82},[72,40083,40084,40086,40088,40090,40092,40094,40096,40098,40100,40102,40104,40106,40108],{"class":74,"line":2178},[72,40085,38515],{"class":82},[72,40087,31292],{"class":5642},[72,40089,609],{"class":78},[72,40091,640],{"class":362},[72,40093,932],{"class":82},[72,40095,31347],{"class":5642},[72,40097,609],{"class":78},[72,40099,640],{"class":362},[72,40101,932],{"class":82},[72,40103,31301],{"class":5642},[72,40105,609],{"class":78},[72,40107,747],{"class":362},[72,40109,570],{"class":82},[72,40111,40112],{"class":74,"line":2183},[72,40113,38544],{"class":82},[72,40115,40116],{"class":74,"line":2188},[72,40117,38677],{"class":621},[72,40119,40120,40122,40124,40126],{"class":74,"line":2193},[72,40121,31263],{"class":362},[72,40123,38684],{"class":82},[72,40125,609],{"class":78},[72,40127,38427],{"class":82},[72,40129,40130,40132,40134,40136,40138,40140,40142,40144,40146,40148,40150,40152,40154,40156,40158,40160,40162],{"class":74,"line":2207},[72,40131,38432],{"class":82},[72,40133,31274],{"class":5642},[72,40135,609],{"class":78},[72,40137,32488],{"class":362},[72,40139,932],{"class":82},[72,40141,31283],{"class":5642},[72,40143,609],{"class":78},[72,40145,35288],{"class":362},[72,40147,932],{"class":82},[72,40149,31292],{"class":5642},[72,40151,609],{"class":78},[72,40153,634],{"class":362},[72,40155,932],{"class":82},[72,40157,31301],{"class":5642},[72,40159,609],{"class":78},[72,40161,772],{"class":362},[72,40163,38465],{"class":82},[72,40165,40166],{"class":74,"line":2212},[72,40167,38470],{"class":82},[72,40169,40170,40172,40174,40176,40178,40180,40182,40184,40186,40188,40190,40192,40194,40196,40198,40200,40202],{"class":74,"line":3005},[72,40171,38432],{"class":82},[72,40173,31274],{"class":5642},[72,40175,609],{"class":78},[72,40177,35288],{"class":362},[72,40179,932],{"class":82},[72,40181,31283],{"class":5642},[72,40183,609],{"class":78},[72,40185,35288],{"class":362},[72,40187,932],{"class":82},[72,40189,31292],{"class":5642},[72,40191,609],{"class":78},[72,40193,634],{"class":362},[72,40195,932],{"class":82},[72,40197,31301],{"class":5642},[72,40199,609],{"class":78},[72,40201,772],{"class":362},[72,40203,38465],{"class":82},[72,40205,40206],{"class":74,"line":3019},[72,40207,38470],{"class":82},[72,40209,40210,40212,40214,40216,40218,40220,40222,40224,40226,40228,40230,40232,40234,40236,40238,40240,40242],{"class":74,"line":3027},[72,40211,38432],{"class":82},[72,40213,31274],{"class":5642},[72,40215,609],{"class":78},[72,40217,35288],{"class":362},[72,40219,932],{"class":82},[72,40221,31283],{"class":5642},[72,40223,609],{"class":78},[72,40225,35288],{"class":362},[72,40227,932],{"class":82},[72,40229,31292],{"class":5642},[72,40231,609],{"class":78},[72,40233,634],{"class":362},[72,40235,932],{"class":82},[72,40237,31301],{"class":5642},[72,40239,609],{"class":78},[72,40241,772],{"class":362},[72,40243,38465],{"class":82},[72,40245,40246],{"class":74,"line":3032},[72,40247,38470],{"class":82},[72,40249,40250,40252,40254,40256,40258,40260,40262,40264,40266,40268,40270,40272,40274],{"class":74,"line":3038},[72,40251,38515],{"class":82},[72,40253,31292],{"class":5642},[72,40255,609],{"class":78},[72,40257,640],{"class":362},[72,40259,932],{"class":82},[72,40261,31347],{"class":5642},[72,40263,609],{"class":78},[72,40265,640],{"class":362},[72,40267,932],{"class":82},[72,40269,31301],{"class":5642},[72,40271,609],{"class":78},[72,40273,747],{"class":362},[72,40275,570],{"class":82},[72,40277,40278],{"class":74,"line":3044},[72,40279,38544],{"class":82},[72,40281,40282],{"class":74,"line":3049},[72,40283,38845],{"class":621},[72,40285,40286,40288,40290,40292],{"class":74,"line":8374},[72,40287,31263],{"class":362},[72,40289,38852],{"class":82},[72,40291,609],{"class":78},[72,40293,38427],{"class":82},[72,40295,40296,40298,40300,40302,40304,40306,40308,40310,40312,40314,40316,40318,40320,40322,40324,40326,40328],{"class":74,"line":8398},[72,40297,38432],{"class":82},[72,40299,31274],{"class":5642},[72,40301,609],{"class":78},[72,40303,35288],{"class":362},[72,40305,932],{"class":82},[72,40307,31283],{"class":5642},[72,40309,609],{"class":78},[72,40311,38875],{"class":362},[72,40313,932],{"class":82},[72,40315,31292],{"class":5642},[72,40317,609],{"class":78},[72,40319,634],{"class":362},[72,40321,932],{"class":82},[72,40323,31301],{"class":5642},[72,40325,609],{"class":78},[72,40327,772],{"class":362},[72,40329,38465],{"class":82},[72,40331,40332],{"class":74,"line":8403},[72,40333,38470],{"class":82},[72,40335,40336,40338,40340,40342,40344,40346,40348,40350,40352,40354,40356,40358,40360,40362,40364,40366,40368],{"class":74,"line":8409},[72,40337,38432],{"class":82},[72,40339,31274],{"class":5642},[72,40341,609],{"class":78},[72,40343,38875],{"class":362},[72,40345,932],{"class":82},[72,40347,31283],{"class":5642},[72,40349,609],{"class":78},[72,40351,38875],{"class":362},[72,40353,932],{"class":82},[72,40355,31292],{"class":5642},[72,40357,609],{"class":78},[72,40359,634],{"class":362},[72,40361,932],{"class":82},[72,40363,31301],{"class":5642},[72,40365,609],{"class":78},[72,40367,772],{"class":362},[72,40369,38465],{"class":82},[72,40371,40372],{"class":74,"line":8436},[72,40373,38470],{"class":82},[72,40375,40376,40378,40380,40382,40384,40386,40388,40390,40392,40394,40396,40398,40400,40402,40404,40406,40408],{"class":74,"line":8441},[72,40377,38432],{"class":82},[72,40379,31274],{"class":5642},[72,40381,609],{"class":78},[72,40383,38875],{"class":362},[72,40385,932],{"class":82},[72,40387,31283],{"class":5642},[72,40389,609],{"class":78},[72,40391,38875],{"class":362},[72,40393,932],{"class":82},[72,40395,31292],{"class":5642},[72,40397,609],{"class":78},[72,40399,634],{"class":362},[72,40401,932],{"class":82},[72,40403,31301],{"class":5642},[72,40405,609],{"class":78},[72,40407,772],{"class":362},[72,40409,38465],{"class":82},[72,40411,40412],{"class":74,"line":8447},[72,40413,38470],{"class":82},[72,40415,40416,40418,40420,40422,40424,40426,40428,40430,40432,40434,40436,40438,40440],{"class":74,"line":8459},[72,40417,38515],{"class":82},[72,40419,31292],{"class":5642},[72,40421,609],{"class":78},[72,40423,640],{"class":362},[72,40425,932],{"class":82},[72,40427,31347],{"class":5642},[72,40429,609],{"class":78},[72,40431,640],{"class":362},[72,40433,932],{"class":82},[72,40435,31301],{"class":5642},[72,40437,609],{"class":78},[72,40439,747],{"class":362},[72,40441,570],{"class":82},[72,40443,40444],{"class":74,"line":8471},[72,40445,38544],{"class":82},[72,40447,40448],{"class":74,"line":8483},[72,40449,39014],{"class":621},[72,40451,40452,40454,40456,40458],{"class":74,"line":10142},[72,40453,31263],{"class":362},[72,40455,39021],{"class":82},[72,40457,609],{"class":78},[72,40459,38427],{"class":82},[72,40461,40462,40464,40466,40468,40470,40472,40474,40476,40478,40480,40482,40484,40486,40488,40490,40492,40494],{"class":74,"line":10167},[72,40463,38432],{"class":82},[72,40465,31274],{"class":5642},[72,40467,609],{"class":78},[72,40469,38875],{"class":362},[72,40471,932],{"class":82},[72,40473,31283],{"class":5642},[72,40475,609],{"class":78},[72,40477,38875],{"class":362},[72,40479,932],{"class":82},[72,40481,31292],{"class":5642},[72,40483,609],{"class":78},[72,40485,634],{"class":362},[72,40487,932],{"class":82},[72,40489,31301],{"class":5642},[72,40491,609],{"class":78},[72,40493,772],{"class":362},[72,40495,38465],{"class":82},[72,40497,40498],{"class":74,"line":10190},[72,40499,38470],{"class":82},[72,40501,40502,40504,40506,40508,40510,40512,40514,40516,40518,40520,40522,40524,40526,40528,40530,40532,40534],{"class":74,"line":10214},[72,40503,38432],{"class":82},[72,40505,31274],{"class":5642},[72,40507,609],{"class":78},[72,40509,38875],{"class":362},[72,40511,932],{"class":82},[72,40513,31283],{"class":5642},[72,40515,609],{"class":78},[72,40517,38875],{"class":362},[72,40519,932],{"class":82},[72,40521,31292],{"class":5642},[72,40523,609],{"class":78},[72,40525,634],{"class":362},[72,40527,932],{"class":82},[72,40529,31301],{"class":5642},[72,40531,609],{"class":78},[72,40533,772],{"class":362},[72,40535,38465],{"class":82},[72,40537,40538],{"class":74,"line":10219},[72,40539,38470],{"class":82},[72,40541,40542,40544,40546,40548,40550,40552,40554,40556,40558,40560,40562,40564,40566,40568,40570,40572,40574],{"class":74,"line":10224},[72,40543,38432],{"class":82},[72,40545,31274],{"class":5642},[72,40547,609],{"class":78},[72,40549,38875],{"class":362},[72,40551,932],{"class":82},[72,40553,31283],{"class":5642},[72,40555,609],{"class":78},[72,40557,38875],{"class":362},[72,40559,932],{"class":82},[72,40561,31292],{"class":5642},[72,40563,609],{"class":78},[72,40565,634],{"class":362},[72,40567,932],{"class":82},[72,40569,31301],{"class":5642},[72,40571,609],{"class":78},[72,40573,772],{"class":362},[72,40575,38465],{"class":82},[72,40577,40578],{"class":74,"line":10229},[72,40579,38470],{"class":82},[72,40581,40582,40584,40586,40588,40590,40592,40594,40596,40598,40600,40602,40604,40606],{"class":74,"line":10238},[72,40583,38515],{"class":82},[72,40585,31292],{"class":5642},[72,40587,609],{"class":78},[72,40589,640],{"class":362},[72,40591,932],{"class":82},[72,40593,31347],{"class":5642},[72,40595,609],{"class":78},[72,40597,640],{"class":362},[72,40599,932],{"class":82},[72,40601,31301],{"class":5642},[72,40603,609],{"class":78},[72,40605,747],{"class":362},[72,40607,570],{"class":82},[72,40609,40610],{"class":74,"line":10243},[72,40611,38544],{"class":82},[72,40613,40614],{"class":74,"line":10249},[72,40615,39182],{"class":621},[72,40617,40618,40620,40622,40624],{"class":74,"line":10270},[72,40619,31263],{"class":362},[72,40621,39189],{"class":82},[72,40623,609],{"class":78},[72,40625,38427],{"class":82},[72,40627,40628],{"class":74,"line":10276},[72,40629,39198],{"class":621},[72,40631,40632],{"class":74,"line":10290},[72,40633,39203],{"class":621},[72,40635,40636],{"class":74,"line":10296},[72,40637,39208],{"class":82},[72,40639,40640,40642,40644,40646,40648,40650,40652,40654,40656],{"class":74,"line":10323},[72,40641,39213],{"class":82},[72,40643,923],{"class":362},[72,40645,1009],{"class":78},[72,40647,923],{"class":362},[72,40649,1009],{"class":78},[72,40651,38875],{"class":362},[72,40653,932],{"class":82},[72,40655,35288],{"class":362},[72,40657,38465],{"class":82},[72,40659,40660],{"class":74,"line":10332},[72,40661,38470],{"class":82},[72,40663,40664,40666,40668,40670,40672],{"class":74,"line":10338},[72,40665,39213],{"class":82},[72,40667,35288],{"class":362},[72,40669,932],{"class":82},[72,40671,32488],{"class":362},[72,40673,38465],{"class":82},[72,40675,40676],{"class":74,"line":10346},[72,40677,38470],{"class":82},[72,40679,40680,40682,40684,40686,40688],{"class":74,"line":10351},[72,40681,39213],{"class":82},[72,40683,32488],{"class":362},[72,40685,932],{"class":82},[72,40687,1000],{"class":362},[72,40689,570],{"class":82},[72,40691,40692],{"class":74,"line":17030},[72,40693,38544],{"class":82},[72,40695,40696],{"class":74,"line":17036},[72,40697,2828],{"emptyLinePlaceholder":490},[72,40699,40700],{"class":74,"line":17059},[72,40701,39274],{"class":621},[72,40703,40704],{"class":74,"line":17065},[72,40705,39279],{"class":621},[72,40707,40708,40710,40712,40714,40716],{"class":74,"line":17088},[72,40709,3831],{"class":78},[72,40711,39286],{"class":82},[72,40713,26465],{"class":78},[72,40715,39291],{"class":362},[72,40717,39294],{"class":82},[72,40719,40720],{"class":74,"line":17102},[72,40721,39299],{"class":621},[72,40723,40724,40726,40728],{"class":74,"line":17122},[72,40725,5070],{"class":78},[72,40727,39306],{"class":362},[72,40729,39309],{"class":82},[72,40731,40732],{"class":74,"line":17128},[72,40733,39314],{"class":621},[72,40735,40736,40738,40740,40742,40744],{"class":74,"line":17139},[72,40737,39319],{"class":82},[72,40739,39322],{"class":5642},[72,40741,609],{"class":78},[72,40743,39327],{"class":366},[72,40745,570],{"class":82},[72,40747,40748],{"class":74,"line":17162},[72,40749,39334],{"class":621},[72,40751,40752,40754,40756,40758,40760,40762],{"class":74,"line":17184},[72,40753,39339],{"class":78},[72,40755,39342],{"class":82},[72,40757,39345],{"class":78},[72,40759,39348],{"class":78},[72,40761,39351],{"class":362},[72,40763,4167],{"class":82},[72,40765,40766],{"class":74,"line":17189},[72,40767,39358],{"class":621},[72,40769,40770,40772,40774],{"class":74,"line":17195},[72,40771,39363],{"class":82},[72,40773,747],{"class":362},[72,40775,570],{"class":82},[72,40777,40778],{"class":74,"line":17209},[72,40779,39372],{"class":621},[72,40781,40782,40784,40786],{"class":74,"line":17222},[72,40783,39377],{"class":78},[72,40785,39306],{"class":362},[72,40787,39382],{"class":82},[72,40789,40790],{"class":74,"line":17227},[72,40791,39387],{"class":621},[72,40793,40794],{"class":74,"line":17241},[72,40795,39392],{"class":621},[72,40797,40798,40800,40802,40804,40806],{"class":74,"line":17246},[72,40799,39397],{"class":82},[72,40801,747],{"class":362},[72,40803,932],{"class":82},[72,40805,39404],{"class":362},[72,40807,570],{"class":82},[72,40809,40810],{"class":74,"line":17252},[72,40811,39411],{"class":621},[72,40813,40814,40816,40818,40820,40822,40824],{"class":74,"line":17257},[72,40815,39339],{"class":78},[72,40817,39342],{"class":82},[72,40819,39345],{"class":78},[72,40821,39348],{"class":78},[72,40823,39351],{"class":362},[72,40825,4167],{"class":82},[72,40827,40828,40830,40832],{"class":74,"line":17271},[72,40829,39363],{"class":82},[72,40831,747],{"class":362},[72,40833,570],{"class":82},[72,40835,40836],{"class":74,"line":17276},[72,40837,2828],{"emptyLinePlaceholder":490},[72,40839,40840],{"class":74,"line":17281},[72,40841,35583],{"class":621},[72,40843,40844,40846,40848],{"class":74,"line":17295},[72,40845,31219],{"class":78},[72,40847,31511],{"class":358},[72,40849,31514],{"class":82},[72,40851,40852,40854,40856,40858],{"class":74,"line":17307},[72,40853,31519],{"class":82},[72,40855,609],{"class":78},[72,40857,31241],{"class":362},[72,40859,39460],{"class":82},[72,40861,40862,40864,40866,40868],{"class":74,"line":17312},[72,40863,31519],{"class":82},[72,40865,609],{"class":78},[72,40867,31241],{"class":362},[72,40869,39471],{"class":82},[72,40871,40872,40874,40876,40878],{"class":74,"line":17325},[72,40873,31519],{"class":82},[72,40875,609],{"class":78},[72,40877,31241],{"class":362},[72,40879,39482],{"class":82},[72,40881,40882,40884,40886,40888],{"class":74,"line":17330},[72,40883,31519],{"class":82},[72,40885,609],{"class":78},[72,40887,31241],{"class":362},[72,40889,39493],{"class":82},[72,40891,40892,40894,40896,40898],{"class":74,"line":17335},[72,40893,31519],{"class":82},[72,40895,609],{"class":78},[72,40897,31241],{"class":362},[72,40899,39504],{"class":82},[72,40901,40902,40904,40906,40908],{"class":74,"line":17340},[72,40903,31519],{"class":82},[72,40905,609],{"class":78},[72,40907,31241],{"class":362},[72,40909,39515],{"class":82},[72,40911,40912,40914],{"class":74,"line":17353},[72,40913,15178],{"class":78},[72,40915,31627],{"class":82},[72,40917,40918],{"class":74,"line":17358},[72,40919,2828],{"emptyLinePlaceholder":490},[72,40921,40922],{"class":74,"line":33051},[72,40923,39530],{"class":621},[72,40925,40926,40928,40930,40932,40934],{"class":74,"line":33057},[72,40927,1960],{"class":78},[72,40929,31638],{"class":362},[72,40931,3377],{"class":78},[72,40933,39541],{"class":366},[72,40935,4167],{"class":82},[72,40937,40938,40940,40942,40944,40946,40948,40950,40952,40954],{"class":74,"line":33063},[72,40939,31655],{"class":82},[72,40941,609],{"class":78},[72,40943,30869],{"class":82},[72,40945,31662],{"class":366},[72,40947,2133],{"class":78},[72,40949,31667],{"class":82},[72,40951,2130],{"class":78},[72,40953,30894],{"class":366},[72,40955,570],{"class":82},[72,40957,40958,40960],{"class":74,"line":33069},[72,40959,31717],{"class":362},[72,40961,30903],{"class":82},[72,40963,40964,40966,40968],{"class":74,"line":33075},[72,40965,31707],{"class":82},[72,40967,609],{"class":78},[72,40969,39578],{"class":82},[72,40971,40972,40974,40976,40978,40980,40982,40984,40986],{"class":74,"line":33086},[72,40973,31717],{"class":362},[72,40975,31720],{"class":82},[72,40977,772],{"class":362},[72,40979,932],{"class":82},[72,40981,31919],{"class":362},[72,40983,932],{"class":82},[72,40985,31919],{"class":362},[72,40987,31733],{"class":82},[22,40989,40990],{"start":1608},[25,40991,40992],{},"测试代码",[63,40994,40996],{"className":65,"code":40995,"language":67,"meta":68,"style":68},"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",[34,40997,40998,41004,41014,41024,41028,41038,41049,41053,41057,41061,41069,41085,41095,41111,41121,41135,41139,41149,41159,41169,41175,41179,41183,41191,41195,41211,41219,41223,41227,41235,41243,41247,41251,41255,41259,41265,41269,41279,41287,41295,41299,41303,41307,41315,41319,41335,41339,41343,41347,41359,41363,41375,41379,41383,41395,41399,41409,41413,41417,41429,41433,41442,41446,41450,41458,41462,41470,41474,41478,41482,41486,41490,41506,41514,41518,41522,41570,41576,41580,41590,41598,41606,41610,41614,41618,41622,41630,41634,41650,41654,41662,41670],{"__ignoreMap":68},[72,40999,41000,41002],{"class":74,"line":75},[72,41001,79],{"class":78},[72,41003,30813],{"class":82},[72,41005,41006,41008,41010,41012],{"class":74,"line":370},[72,41007,79],{"class":78},[72,41009,31833],{"class":82},[72,41011,31801],{"class":78},[72,41013,31838],{"class":82},[72,41015,41016,41018,41020,41022],{"class":74,"line":1608},[72,41017,31155],{"class":78},[72,41019,31816],{"class":82},[72,41021,79],{"class":78},[72,41023,31821],{"class":82},[72,41025,41026],{"class":74,"line":1623},[72,41027,34340],{"class":621},[72,41029,41030,41032,41034,41036],{"class":74,"line":1629},[72,41031,31155],{"class":78},[72,41033,31786],{"class":82},[72,41035,79],{"class":78},[72,41037,31791],{"class":82},[72,41039,41040,41042,41044,41046],{"class":74,"line":1643},[72,41041,31155],{"class":78},[72,41043,32332],{"class":82},[72,41045,79],{"class":78},[72,41047,41048],{"class":362}," VGG16\n",[72,41050,41051],{"class":74,"line":1649},[72,41052,2828],{"emptyLinePlaceholder":490},[72,41054,41055],{"class":74,"line":1740},[72,41056,2828],{"emptyLinePlaceholder":490},[72,41058,41059],{"class":74,"line":1746},[72,41060,34369],{"class":621},[72,41062,41063,41065,41067],{"class":74,"line":1758},[72,41064,32365],{"class":78},[72,41066,34376],{"class":358},[72,41068,32371],{"class":82},[72,41070,41071,41073,41075,41077,41079,41081,41083],{"class":74,"line":2041},[72,41072,34383],{"class":82},[72,41074,609],{"class":78},[72,41076,31873],{"class":82},[72,41078,31876],{"class":5642},[72,41080,609],{"class":78},[72,41082,31881],{"class":366},[72,41084,31884],{"class":82},[72,41086,41087,41089,41091,41093],{"class":74,"line":2046},[72,41088,34400],{"class":5642},[72,41090,609],{"class":78},[72,41092,34405],{"class":362},[72,41094,31884],{"class":82},[72,41096,41097,41099,41101,41103,41105,41107,41109],{"class":74,"line":2052},[72,41098,34412],{"class":5642},[72,41100,609],{"class":78},[72,41102,31911],{"class":82},[72,41104,31914],{"class":5642},[72,41106,609],{"class":78},[72,41108,31919],{"class":362},[72,41110,31922],{"class":82},[72,41112,41113,41115,41117,41119],{"class":74,"line":2057},[72,41114,34429],{"class":5642},[72,41116,609],{"class":78},[72,41118,31894],{"class":362},[72,41120,570],{"class":82},[72,41122,41123,41125,41127,41129,41131,41133],{"class":74,"line":2071},[72,41124,34440],{"class":82},[72,41126,609],{"class":78},[72,41128,31952],{"class":82},[72,41130,31955],{"class":5642},[72,41132,609],{"class":78},[72,41134,34451],{"class":82},[72,41136,41137],{"class":74,"line":2076},[72,41138,34456],{"class":621},[72,41140,41141,41143,41145,41147],{"class":74,"line":2082},[72,41142,34461],{"class":5642},[72,41144,609],{"class":78},[72,41146,772],{"class":362},[72,41148,31884],{"class":82},[72,41150,41151,41153,41155,41157],{"class":74,"line":2103},[72,41152,34472],{"class":5642},[72,41154,609],{"class":78},[72,41156,31894],{"class":362},[72,41158,31884],{"class":82},[72,41160,41161,41163,41165,41167],{"class":74,"line":2108},[72,41162,34483],{"class":5642},[72,41164,609],{"class":78},[72,41166,747],{"class":362},[72,41168,570],{"class":82},[72,41170,41171,41173],{"class":74,"line":2122},[72,41172,4518],{"class":78},[72,41174,34496],{"class":82},[72,41176,41177],{"class":74,"line":2127},[72,41178,2828],{"emptyLinePlaceholder":490},[72,41180,41181],{"class":74,"line":2156},[72,41182,34505],{"class":621},[72,41184,41185,41187,41189],{"class":74,"line":2161},[72,41186,32365],{"class":78},[72,41188,34512],{"class":358},[72,41190,34515],{"class":82},[72,41192,41193],{"class":74,"line":2178},[72,41194,34520],{"class":621},[72,41196,41197,41199,41201,41203,41205,41207,41209],{"class":74,"line":2183},[72,41198,31655],{"class":82},[72,41200,609],{"class":78},[72,41202,31662],{"class":366},[72,41204,2133],{"class":78},[72,41206,31667],{"class":82},[72,41208,2130],{"class":78},[72,41210,34537],{"class":366},[72,41212,41213,41215,41217],{"class":74,"line":2188},[72,41214,31707],{"class":82},[72,41216,609],{"class":78},[72,41218,32707],{"class":82},[72,41220,41221],{"class":74,"line":2193},[72,41222,2828],{"emptyLinePlaceholder":490},[72,41224,41225],{"class":74,"line":2207},[72,41226,34554],{"class":621},[72,41228,41229,41231,41233],{"class":74,"line":2212},[72,41230,34559],{"class":82},[72,41232,609],{"class":78},[72,41234,32760],{"class":362},[72,41236,41237,41239,41241],{"class":74,"line":3005},[72,41238,34568],{"class":82},[72,41240,609],{"class":78},[72,41242,3513],{"class":362},[72,41244,41245],{"class":74,"line":3019},[72,41246,2828],{"emptyLinePlaceholder":490},[72,41248,41249],{"class":74,"line":3027},[72,41250,34581],{"class":621},[72,41252,41253],{"class":74,"line":3032},[72,41254,34586],{"class":621},[72,41256,41257],{"class":74,"line":3038},[72,41258,34591],{"class":621},[72,41260,41261,41263],{"class":74,"line":3044},[72,41262,34596],{"class":78},[72,41264,33302],{"class":82},[72,41266,41267],{"class":74,"line":3049},[72,41268,34603],{"class":621},[72,41270,41271,41273,41275,41277],{"class":74,"line":8374},[72,41272,3831],{"class":78},[72,41274,34610],{"class":82},[72,41276,26465],{"class":78},[72,41278,34615],{"class":82},[72,41280,41281,41283,41285],{"class":74,"line":8398},[72,41282,34620],{"class":82},[72,41284,609],{"class":78},[72,41286,34625],{"class":82},[72,41288,41289,41291,41293],{"class":74,"line":8403},[72,41290,34630],{"class":82},[72,41292,609],{"class":78},[72,41294,34635],{"class":82},[72,41296,41297],{"class":74,"line":8409},[72,41298,34640],{"class":621},[72,41300,41301],{"class":74,"line":8436},[72,41302,33293],{"class":82},[72,41304,41305],{"class":74,"line":8441},[72,41306,34649],{"class":621},[72,41308,41309,41311,41313],{"class":74,"line":8447},[72,41310,33078],{"class":82},[72,41312,609],{"class":78},[72,41314,34658],{"class":82},[72,41316,41317],{"class":74,"line":8459},[72,41318,34663],{"class":621},[72,41320,41321,41323,41325,41327,41329,41331,41333],{"class":74,"line":8471},[72,41322,33095],{"class":82},[72,41324,609],{"class":78},[72,41326,33100],{"class":82},[72,41328,33103],{"class":5642},[72,41330,609],{"class":78},[72,41332,772],{"class":362},[72,41334,570],{"class":82},[72,41336,41337],{"class":74,"line":8483},[72,41338,34684],{"class":621},[72,41340,41341],{"class":74,"line":10142},[72,41342,34689],{"class":621},[72,41344,41345],{"class":74,"line":10167},[72,41346,34694],{"class":621},[72,41348,41349,41351,41353,41355,41357],{"class":74,"line":10190},[72,41350,34699],{"class":82},[72,41352,9903],{"class":78},[72,41354,33205],{"class":82},[72,41356,3377],{"class":78},[72,41358,34708],{"class":82},[72,41360,41361],{"class":74,"line":10214},[72,41362,34713],{"class":621},[72,41364,41365,41367,41369,41371,41373],{"class":74,"line":10219},[72,41366,34718],{"class":82},[72,41368,9903],{"class":78},[72,41370,34723],{"class":82},[72,41372,747],{"class":362},[72,41374,570],{"class":82},[72,41376,41377],{"class":74,"line":10224},[72,41378,2828],{"emptyLinePlaceholder":490},[72,41380,41381],{"class":74,"line":10229},[72,41382,34736],{"class":621},[72,41384,41385,41387,41389,41391,41393],{"class":74,"line":10238},[72,41386,34741],{"class":82},[72,41388,609],{"class":78},[72,41390,34746],{"class":82},[72,41392,1138],{"class":78},[72,41394,34751],{"class":82},[72,41396,41397],{"class":74,"line":10243},[72,41398,34756],{"class":621},[72,41400,41401,41403,41405,41407],{"class":74,"line":10249},[72,41402,32869],{"class":362},[72,41404,564],{"class":82},[72,41406,34765],{"class":366},[72,41408,34768],{"class":82},[72,41410,41411],{"class":74,"line":10270},[72,41412,2828],{"emptyLinePlaceholder":490},[72,41414,41415],{"class":74,"line":10276},[72,41416,34777],{"class":621},[72,41418,41419,41421,41423,41425,41427],{"class":74,"line":10290},[72,41420,1960],{"class":78},[72,41422,31638],{"class":362},[72,41424,3377],{"class":78},[72,41426,31643],{"class":366},[72,41428,4167],{"class":82},[72,41430,41431],{"class":74,"line":10296},[72,41432,34794],{"class":621},[72,41434,41435,41437,41439],{"class":74,"line":10323},[72,41436,31707],{"class":82},[72,41438,609],{"class":78},[72,41440,41441],{"class":82},"VGG16()\n",[72,41443,41444],{"class":74,"line":10332},[72,41445,34807],{"class":621},[72,41447,41448],{"class":74,"line":10338},[72,41449,34812],{"class":621},[72,41451,41452,41454,41456],{"class":74,"line":10346},[72,41453,34817],{"class":82},[72,41455,34820],{"class":366},[72,41457,30915],{"class":82},[72,41459,41460],{"class":74,"line":10351},[72,41461,34827],{"class":621},[72,41463,41464,41466,41468],{"class":74,"line":17030},[72,41465,34440],{"class":82},[72,41467,609],{"class":78},[72,41469,34836],{"class":82},[72,41471,41472],{"class":74,"line":17036},[72,41473,34841],{"class":621},[72,41475,41476],{"class":74,"line":17059},[72,41477,34846],{"class":82},[72,41479,41480],{"class":74,"line":17065},[72,41481,2828],{"emptyLinePlaceholder":490},[72,41483,41484],{"class":74,"line":17088},[72,41485,34855],{"class":621},[72,41487,41488],{"class":74,"line":17102},[72,41489,34860],{"class":621},[72,41491,41492,41494,41496,41498,41500,41502,41504],{"class":74,"line":17122},[72,41493,31655],{"class":82},[72,41495,609],{"class":78},[72,41497,31662],{"class":366},[72,41499,2133],{"class":78},[72,41501,31667],{"class":82},[72,41503,2130],{"class":78},[72,41505,34537],{"class":366},[72,41507,41508,41510,41512],{"class":74,"line":17128},[72,41509,31707],{"class":82},[72,41511,609],{"class":78},[72,41513,32707],{"class":82},[72,41515,41516],{"class":74,"line":17139},[72,41517,34889],{"class":621},[72,41519,41520],{"class":74,"line":17162},[72,41521,34894],{"class":621},[72,41523,41524,41526,41528,41530,41532,41534,41536,41538,41540,41542,41544,41546,41548,41550,41552,41554,41556,41558,41560,41562,41564,41566,41568],{"class":74,"line":17184},[72,41525,34899],{"class":82},[72,41527,609],{"class":78},[72,41529,1444],{"class":82},[72,41531,34906],{"class":366},[72,41533,932],{"class":82},[72,41535,34911],{"class":366},[72,41537,932],{"class":82},[72,41539,34916],{"class":366},[72,41541,932],{"class":82},[72,41543,34921],{"class":366},[72,41545,932],{"class":82},[72,41547,34926],{"class":366},[72,41549,932],{"class":82},[72,41551,34931],{"class":366},[72,41553,932],{"class":82},[72,41555,34936],{"class":366},[72,41557,932],{"class":82},[72,41559,34941],{"class":366},[72,41561,932],{"class":82},[72,41563,34946],{"class":366},[72,41565,932],{"class":82},[72,41567,34951],{"class":366},[72,41569,33664],{"class":82},[72,41571,41572,41574],{"class":74,"line":17189},[72,41573,34596],{"class":78},[72,41575,33302],{"class":82},[72,41577,41578],{"class":74,"line":17195},[72,41579,34964],{"class":621},[72,41581,41582,41584,41586,41588],{"class":74,"line":17209},[72,41583,3831],{"class":78},[72,41585,34971],{"class":82},[72,41587,26465],{"class":78},[72,41589,34615],{"class":82},[72,41591,41592,41594,41596],{"class":74,"line":17222},[72,41593,33028],{"class":82},[72,41595,609],{"class":78},[72,41597,33033],{"class":82},[72,41599,41600,41602,41604],{"class":74,"line":17227},[72,41601,33043],{"class":82},[72,41603,609],{"class":78},[72,41605,33048],{"class":82},[72,41607,41608],{"class":74,"line":17241},[72,41609,2828],{"emptyLinePlaceholder":490},[72,41611,41612],{"class":74,"line":17246},[72,41613,35000],{"class":621},[72,41615,41616],{"class":74,"line":17252},[72,41617,33293],{"class":82},[72,41619,41620],{"class":74,"line":17257},[72,41621,35009],{"class":621},[72,41623,41624,41626,41628],{"class":74,"line":17271},[72,41625,33078],{"class":82},[72,41627,609],{"class":78},[72,41629,33083],{"class":82},[72,41631,41632],{"class":74,"line":17276},[72,41633,35022],{"class":621},[72,41635,41636,41638,41640,41642,41644,41646,41648],{"class":74,"line":17281},[72,41637,33095],{"class":82},[72,41639,609],{"class":78},[72,41641,33100],{"class":82},[72,41643,33103],{"class":5642},[72,41645,609],{"class":78},[72,41647,772],{"class":362},[72,41649,570],{"class":82},[72,41651,41652],{"class":74,"line":17295},[72,41653,35043],{"class":621},[72,41655,41656,41658,41660],{"class":74,"line":17307},[72,41657,35048],{"class":82},[72,41659,609],{"class":78},[72,41661,35053],{"class":82},[72,41663,41664,41666,41668],{"class":74,"line":17312},[72,41665,35058],{"class":82},[72,41667,609],{"class":78},[72,41669,35063],{"class":82},[72,41671,41672,41674,41676,41678,41680,41682,41684,41686],{"class":74,"line":17325},[72,41673,35068],{"class":362},[72,41675,564],{"class":82},[72,41677,35073],{"class":366},[72,41679,35076],{"class":82},[72,41681,35079],{"class":366},[72,41683,932],{"class":82},[72,41685,35084],{"class":366},[72,41687,35087],{"class":82},[531,41689,41691],{"id":41690},"_23googlenet","2.3.GoogLeNet",[22423,41693,41695],{"id":41694},"_231原理","2.3.1.原理",[22,41697,41698],{},[25,41699,41700],{},"网络结构",[15,41702,41703],{},[1891,41704],{"alt":68,"src":41705},"\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",[15,41707,41708],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[15,41710,41711],{},[1891,41712],{"alt":68,"src":41713},"\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",[15,41715,41716],{},[1891,41717],{"alt":68,"src":41718},"\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",[15,41720,41721],{},[1891,41722],{"alt":68,"src":41723},"\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",[22,41725,41726],{"start":370},[25,41727,41728],{},"1x1卷积的优点",[15,41730,41731],{},[1891,41732],{"alt":68,"src":41733},"\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",[22,41735,41736],{"start":1608},[25,41737,41738],{},"全局平均池化层优点",[15,41740,41741],{},[1891,41742],{"alt":68,"src":41743},"\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",[15,41745,41746],{},[1891,41747],{"alt":68,"src":41748},"\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",[22,41750,41751],{"start":1623},[25,41752,41753],{},"参数详细描述",[15,41755,41756],{},[1891,41757],{"alt":68,"src":41758},"\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",[15,41760,41761],{},[1891,41762],{"alt":68,"src":41763},"\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",[15,41765,41766],{},[1891,41767],{"alt":68,"src":41768},"\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",[15,41770,41771],{},[1891,41772],{"alt":68,"src":41773},"\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",[15,41775,41776],{},[1891,41777],{"alt":68,"src":41778},"\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",[15,41780,41781],{},[1891,41782],{"alt":68,"src":41783},"\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",[15,41785,41786],{},[1891,41787],{"alt":68,"src":41788},"\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",[15,41790,41791],{},[1891,41792],{"alt":68,"src":41793},"\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",[15,41795,41796],{},[1891,41797],{"alt":68,"src":41798},"\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",[15,41800,41801],{},[1891,41802],{"alt":68,"src":41803},"\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",[15,41805,41806],{},[1891,41807],{"alt":68,"src":41808},"\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",[15,41810,41811],{},[1891,41812],{"alt":68,"src":41813},"\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",[15,41815,41816],{},[1891,41817],{"alt":68,"src":41818},"\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",[15,41820,41821],{},[1891,41822],{"alt":68,"src":41823},"\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",[15,41825,41826],{},[1891,41827],{"alt":68,"src":41828},"\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",[15,41830,41831],{},[1891,41832],{"alt":68,"src":41833},"\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",[15,41835,41836],{},[1891,41837],{"alt":68,"src":41838},"\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",[15,41840,41841],{},[1891,41842],{"alt":68,"src":41843},"\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",[15,41845,41846],{},[1891,41847],{"alt":68,"src":41848},"\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",[15,41850,41851],{},[1891,41852],{"alt":68,"src":41853},"\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",[15,41855,41856],{},[1891,41857],{"alt":68,"src":41858},"\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",[22423,41860,41862],{"id":41861},"_232代码实现","2.3.2.代码实现",[22,41864,41865],{},[25,41866,31129],{},[15,41868,41869],{},"根据原理一步一步搭建即可",[63,41871,41873],{"className":65,"code":41872,"language":67,"meta":68,"style":68},"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",[34,41874,41875,41881,41891,41901,41905,41922,41931,41946,41956,41961,41994,41999,42036,42083,42088,42124,42171,42176,42181,42216,42248,42252,42260,42276,42300,42325,42346,42351,42366,42370,42374,42379,42396,42401,42410,42425,42436,42480,42484,42512,42516,42527,42555,42559,42596,42600,42628,42632,42643,42679,42711,42739,42743,42754,42788,42820,42852,42885,42919,42947,42951,42962,42995,43027,43041,43045,43058,43062,43067,43079,43087,43109,43114,43119,43124,43129,43134,43139,43153,43161,43170,43183,43198,43207,43211,43219,43230,43241,43252,43263,43274,43280,43284,43289,43301,43321,43330],{"__ignoreMap":68},[72,41876,41877,41879],{"class":74,"line":75},[72,41878,79],{"class":78},[72,41880,30813],{"class":82},[72,41882,41883,41885,41887,41889],{"class":74,"line":370},[72,41884,31155],{"class":78},[72,41886,31158],{"class":82},[72,41888,79],{"class":78},[72,41890,31163],{"class":82},[72,41892,41893,41895,41897,41899],{"class":74,"line":1608},[72,41894,31155],{"class":78},[72,41896,31175],{"class":82},[72,41898,79],{"class":78},[72,41900,31180],{"class":82},[72,41902,41903],{"class":74,"line":1623},[72,41904,2828],{"emptyLinePlaceholder":490},[72,41906,41907,41909,41912,41914,41916,41918,41920],{"class":74,"line":1629},[72,41908,15120],{"class":78},[72,41910,41911],{"class":358}," Inception",[72,41913,564],{"class":82},[72,41915,31196],{"class":358},[72,41917,1112],{"class":82},[72,41919,31201],{"class":358},[72,41921,31204],{"class":82},[72,41923,41924,41926,41928],{"class":74,"line":1643},[72,41925,31219],{"class":78},[72,41927,31222],{"class":362},[72,41929,41930],{"class":82},"(self,in_channels,c1,c2,c3,c4):\n",[72,41932,41933,41935,41938,41940,41942,41944],{"class":74,"line":1649},[72,41934,31235],{"class":362},[72,41936,41937],{"class":82},"(Inception,",[72,41939,31241],{"class":362},[72,41941,31244],{"class":82},[72,41943,31247],{"class":362},[72,41945,2404],{"class":82},[72,41947,41948,41950,41952,41954],{"class":74,"line":1740},[72,41949,31263],{"class":362},[72,41951,35189],{"class":82},[72,41953,609],{"class":78},[72,41955,35194],{"class":82},[72,41957,41958],{"class":74,"line":1746},[72,41959,41960],{"class":621},"        # 路线1：定义1*1卷积\n",[72,41962,41963,41965,41968,41970,41972,41974,41976,41979,41981,41983,41986,41988,41990,41992],{"class":74,"line":1758},[72,41964,31263],{"class":362},[72,41966,41967],{"class":82},".p1_1",[72,41969,609],{"class":78},[72,41971,31271],{"class":82},[72,41973,31274],{"class":5642},[72,41975,609],{"class":78},[72,41977,41978],{"class":82},"in_channels,",[72,41980,31283],{"class":5642},[72,41982,609],{"class":78},[72,41984,41985],{"class":82},"c1,",[72,41987,31292],{"class":5642},[72,41989,609],{"class":78},[72,41991,772],{"class":362},[72,41993,570],{"class":82},[72,41995,41996],{"class":74,"line":2041},[72,41997,41998],{"class":621},"        # 路线2：定义1*1卷积和3*3\n",[72,42000,42001,42003,42006,42008,42010,42012,42014,42016,42018,42020,42023,42025,42028,42030,42032,42034],{"class":74,"line":2046},[72,42002,31263],{"class":362},[72,42004,42005],{"class":82},".p2_1",[72,42007,609],{"class":78},[72,42009,31271],{"class":82},[72,42011,31274],{"class":5642},[72,42013,609],{"class":78},[72,42015,41978],{"class":82},[72,42017,31283],{"class":5642},[72,42019,609],{"class":78},[72,42021,42022],{"class":82},"c2[",[72,42024,747],{"class":362},[72,42026,42027],{"class":82},"],",[72,42029,31292],{"class":5642},[72,42031,609],{"class":78},[72,42033,772],{"class":362},[72,42035,570],{"class":82},[72,42037,42038,42040,42043,42045,42047,42049,42051,42053,42055,42057,42059,42061,42063,42065,42067,42069,42071,42073,42075,42077,42079,42081],{"class":74,"line":2052},[72,42039,31263],{"class":362},[72,42041,42042],{"class":82},".p2_2",[72,42044,609],{"class":78},[72,42046,31271],{"class":82},[72,42048,31274],{"class":5642},[72,42050,609],{"class":78},[72,42052,42022],{"class":82},[72,42054,747],{"class":362},[72,42056,42027],{"class":82},[72,42058,31283],{"class":5642},[72,42060,609],{"class":78},[72,42062,42022],{"class":82},[72,42064,772],{"class":362},[72,42066,42027],{"class":82},[72,42068,31292],{"class":5642},[72,42070,609],{"class":78},[72,42072,634],{"class":362},[72,42074,932],{"class":82},[72,42076,31301],{"class":5642},[72,42078,609],{"class":78},[72,42080,772],{"class":362},[72,42082,570],{"class":82},[72,42084,42085],{"class":74,"line":2057},[72,42086,42087],{"class":621},"        # 路线3：定义1*1卷积和5*5\n",[72,42089,42090,42092,42095,42097,42099,42101,42103,42105,42107,42109,42112,42114,42116,42118,42120,42122],{"class":74,"line":2071},[72,42091,31263],{"class":362},[72,42093,42094],{"class":82},".p3_1",[72,42096,609],{"class":78},[72,42098,31271],{"class":82},[72,42100,31274],{"class":5642},[72,42102,609],{"class":78},[72,42104,41978],{"class":82},[72,42106,31283],{"class":5642},[72,42108,609],{"class":78},[72,42110,42111],{"class":82},"c3[",[72,42113,747],{"class":362},[72,42115,42027],{"class":82},[72,42117,31292],{"class":5642},[72,42119,609],{"class":78},[72,42121,772],{"class":362},[72,42123,570],{"class":82},[72,42125,42126,42128,42131,42133,42135,42137,42139,42141,42143,42145,42147,42149,42151,42153,42155,42157,42159,42161,42163,42165,42167,42169],{"class":74,"line":2076},[72,42127,31263],{"class":362},[72,42129,42130],{"class":82},".p3_2",[72,42132,609],{"class":78},[72,42134,31271],{"class":82},[72,42136,31274],{"class":5642},[72,42138,609],{"class":78},[72,42140,42111],{"class":82},[72,42142,747],{"class":362},[72,42144,42027],{"class":82},[72,42146,31283],{"class":5642},[72,42148,609],{"class":78},[72,42150,42111],{"class":82},[72,42152,772],{"class":362},[72,42154,42027],{"class":82},[72,42156,31292],{"class":5642},[72,42158,609],{"class":78},[72,42160,873],{"class":362},[72,42162,932],{"class":82},[72,42164,31301],{"class":5642},[72,42166,609],{"class":78},[72,42168,640],{"class":362},[72,42170,570],{"class":82},[72,42172,42173],{"class":74,"line":2082},[72,42174,42175],{"class":621},"        # 路线4：定义3*3最大池化和1*1卷积\n",[72,42177,42178],{"class":74,"line":2103},[72,42179,42180],{"class":621},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[72,42182,42183,42185,42188,42190,42192,42194,42196,42198,42200,42202,42204,42206,42208,42210,42212,42214],{"class":74,"line":2108},[72,42184,31263],{"class":362},[72,42186,42187],{"class":82},".p4_1",[72,42189,609],{"class":78},[72,42191,35247],{"class":82},[72,42193,31292],{"class":5642},[72,42195,609],{"class":78},[72,42197,634],{"class":362},[72,42199,932],{"class":82},[72,42201,31347],{"class":5642},[72,42203,609],{"class":78},[72,42205,772],{"class":362},[72,42207,932],{"class":82},[72,42209,31301],{"class":5642},[72,42211,609],{"class":78},[72,42213,772],{"class":362},[72,42215,570],{"class":82},[72,42217,42218,42220,42223,42225,42227,42229,42231,42233,42235,42237,42240,42242,42244,42246],{"class":74,"line":2122},[72,42219,31263],{"class":362},[72,42221,42222],{"class":82},".p4_2",[72,42224,609],{"class":78},[72,42226,31271],{"class":82},[72,42228,31274],{"class":5642},[72,42230,609],{"class":78},[72,42232,41978],{"class":82},[72,42234,31283],{"class":5642},[72,42236,609],{"class":78},[72,42238,42239],{"class":82},"c4,",[72,42241,31292],{"class":5642},[72,42243,609],{"class":78},[72,42245,772],{"class":362},[72,42247,570],{"class":82},[72,42249,42250],{"class":74,"line":2127},[72,42251,2828],{"emptyLinePlaceholder":490},[72,42253,42254,42256,42258],{"class":74,"line":2156},[72,42255,31219],{"class":78},[72,42257,31511],{"class":358},[72,42259,31514],{"class":82},[72,42261,42262,42265,42267,42269,42271,42273],{"class":74,"line":2161},[72,42263,42264],{"class":82},"        p1",[72,42266,609],{"class":78},[72,42268,31241],{"class":362},[72,42270,35602],{"class":82},[72,42272,31241],{"class":362},[72,42274,42275],{"class":82},".p1_1(x))\n",[72,42277,42278,42280,42282,42284,42286,42288,42291,42293,42295,42297],{"class":74,"line":2178},[72,42279,7511],{"class":82},[72,42281,609],{"class":78},[72,42283,31241],{"class":362},[72,42285,35602],{"class":82},[72,42287,31241],{"class":362},[72,42289,42290],{"class":82},".p2_2(",[72,42292,31241],{"class":362},[72,42294,35602],{"class":82},[72,42296,31241],{"class":362},[72,42298,42299],{"class":82},".p2_1(x))))\n",[72,42301,42302,42305,42307,42309,42311,42313,42316,42318,42320,42322],{"class":74,"line":2183},[72,42303,42304],{"class":82},"        p3",[72,42306,609],{"class":78},[72,42308,31241],{"class":362},[72,42310,35602],{"class":82},[72,42312,31241],{"class":362},[72,42314,42315],{"class":82},".p3_2(",[72,42317,31241],{"class":362},[72,42319,35602],{"class":82},[72,42321,31241],{"class":362},[72,42323,42324],{"class":82},".p3_1(x))))\n",[72,42326,42327,42330,42332,42334,42336,42338,42341,42343],{"class":74,"line":2188},[72,42328,42329],{"class":82},"        p4",[72,42331,609],{"class":78},[72,42333,31241],{"class":362},[72,42335,35602],{"class":82},[72,42337,31241],{"class":362},[72,42339,42340],{"class":82},".p4_2(",[72,42342,31241],{"class":362},[72,42344,42345],{"class":82},".p4_1(x)))\n",[72,42347,42348],{"class":74,"line":2193},[72,42349,42350],{"class":621},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[72,42352,42353,42355,42358,42360,42362,42364],{"class":74,"line":2207},[72,42354,15178],{"class":78},[72,42356,42357],{"class":82}," torch.cat((p1,p2,p3,p4),",[72,42359,33103],{"class":5642},[72,42361,609],{"class":78},[72,42363,772],{"class":362},[72,42365,570],{"class":82},[72,42367,42368],{"class":74,"line":2212},[72,42369,2828],{"emptyLinePlaceholder":490},[72,42371,42372],{"class":74,"line":3005},[72,42373,2828],{"emptyLinePlaceholder":490},[72,42375,42376],{"class":74,"line":3019},[72,42377,42378],{"class":621},"# 搭建GoogLeNet网络\n",[72,42380,42381,42383,42386,42388,42390,42392,42394],{"class":74,"line":3027},[72,42382,15120],{"class":78},[72,42384,42385],{"class":358}," GoogLeNet",[72,42387,564],{"class":82},[72,42389,31196],{"class":358},[72,42391,1112],{"class":82},[72,42393,31201],{"class":358},[72,42395,31204],{"class":82},[72,42397,42398],{"class":74,"line":3032},[72,42399,42400],{"class":621},"    # 必须把Inception导入到里边\n",[72,42402,42403,42405,42407],{"class":74,"line":3038},[72,42404,31219],{"class":78},[72,42406,31222],{"class":362},[72,42408,42409],{"class":82},"(self,Inception):\n",[72,42411,42412,42414,42417,42419,42421,42423],{"class":74,"line":3044},[72,42413,31235],{"class":362},[72,42415,42416],{"class":82},"(GoogLeNet,",[72,42418,31241],{"class":362},[72,42420,31244],{"class":82},[72,42422,31247],{"class":362},[72,42424,2404],{"class":82},[72,42426,42427,42429,42432,42434],{"class":74,"line":3049},[72,42428,31263],{"class":362},[72,42430,42431],{"class":82},".b1",[72,42433,609],{"class":78},[72,42435,38427],{"class":82},[72,42437,42438,42440,42442,42444,42446,42448,42450,42452,42454,42456,42458,42460,42462,42464,42466,42468,42470,42472,42474,42476,42478],{"class":74,"line":8374},[72,42439,38432],{"class":82},[72,42441,31274],{"class":5642},[72,42443,609],{"class":78},[72,42445,772],{"class":362},[72,42447,932],{"class":82},[72,42449,31283],{"class":5642},[72,42451,609],{"class":78},[72,42453,759],{"class":362},[72,42455,932],{"class":82},[72,42457,31292],{"class":5642},[72,42459,609],{"class":78},[72,42461,923],{"class":362},[72,42463,932],{"class":82},[72,42465,31347],{"class":5642},[72,42467,609],{"class":78},[72,42469,640],{"class":362},[72,42471,932],{"class":82},[72,42473,31301],{"class":5642},[72,42475,609],{"class":78},[72,42477,634],{"class":362},[72,42479,38465],{"class":82},[72,42481,42482],{"class":74,"line":8398},[72,42483,38470],{"class":82},[72,42485,42486,42488,42490,42492,42494,42496,42498,42500,42502,42504,42506,42508,42510],{"class":74,"line":8403},[72,42487,38515],{"class":82},[72,42489,31292],{"class":5642},[72,42491,609],{"class":78},[72,42493,634],{"class":362},[72,42495,932],{"class":82},[72,42497,31347],{"class":5642},[72,42499,609],{"class":78},[72,42501,640],{"class":362},[72,42503,932],{"class":82},[72,42505,31301],{"class":5642},[72,42507,609],{"class":78},[72,42509,772],{"class":362},[72,42511,570],{"class":82},[72,42513,42514],{"class":74,"line":8409},[72,42515,38544],{"class":82},[72,42517,42518,42520,42523,42525],{"class":74,"line":8436},[72,42519,31263],{"class":362},[72,42521,42522],{"class":82},".b2",[72,42524,609],{"class":78},[72,42526,38427],{"class":82},[72,42528,42529,42531,42533,42535,42537,42539,42541,42543,42545,42547,42549,42551,42553],{"class":74,"line":8441},[72,42530,38432],{"class":82},[72,42532,31274],{"class":5642},[72,42534,609],{"class":78},[72,42536,759],{"class":362},[72,42538,932],{"class":82},[72,42540,31283],{"class":5642},[72,42542,609],{"class":78},[72,42544,759],{"class":362},[72,42546,932],{"class":82},[72,42548,31292],{"class":5642},[72,42550,609],{"class":78},[72,42552,772],{"class":362},[72,42554,38465],{"class":82},[72,42556,42557],{"class":74,"line":8447},[72,42558,38470],{"class":82},[72,42560,42561,42563,42565,42567,42569,42571,42573,42575,42578,42580,42582,42584,42586,42588,42590,42592,42594],{"class":74,"line":8459},[72,42562,38432],{"class":82},[72,42564,31274],{"class":5642},[72,42566,609],{"class":78},[72,42568,759],{"class":362},[72,42570,932],{"class":82},[72,42572,31283],{"class":5642},[72,42574,609],{"class":78},[72,42576,42577],{"class":362},"192",[72,42579,932],{"class":82},[72,42581,31292],{"class":5642},[72,42583,609],{"class":78},[72,42585,634],{"class":362},[72,42587,932],{"class":82},[72,42589,31301],{"class":5642},[72,42591,609],{"class":78},[72,42593,772],{"class":362},[72,42595,38465],{"class":82},[72,42597,42598],{"class":74,"line":8471},[72,42599,38470],{"class":82},[72,42601,42602,42604,42606,42608,42610,42612,42614,42616,42618,42620,42622,42624,42626],{"class":74,"line":8483},[72,42603,38515],{"class":82},[72,42605,31292],{"class":5642},[72,42607,609],{"class":78},[72,42609,634],{"class":362},[72,42611,932],{"class":82},[72,42613,31347],{"class":5642},[72,42615,609],{"class":78},[72,42617,640],{"class":362},[72,42619,932],{"class":82},[72,42621,31301],{"class":5642},[72,42623,609],{"class":78},[72,42625,772],{"class":362},[72,42627,570],{"class":82},[72,42629,42630],{"class":74,"line":10142},[72,42631,38544],{"class":82},[72,42633,42634,42636,42639,42641],{"class":74,"line":10167},[72,42635,31263],{"class":362},[72,42637,42638],{"class":82},".b3",[72,42640,609],{"class":78},[72,42642,38427],{"class":82},[72,42644,42645,42648,42650,42652,42654,42657,42659,42661,42663,42666,42668,42670,42672,42675,42677],{"class":74,"line":10190},[72,42646,42647],{"class":82},"            Inception(",[72,42649,42577],{"class":362},[72,42651,932],{"class":82},[72,42653,759],{"class":362},[72,42655,42656],{"class":82},",(",[72,42658,765],{"class":362},[72,42660,932],{"class":82},[72,42662,32488],{"class":362},[72,42664,42665],{"class":82},"),(",[72,42667,1155],{"class":362},[72,42669,932],{"class":82},[72,42671,753],{"class":362},[72,42673,42674],{"class":82},"),",[72,42676,753],{"class":362},[72,42678,38465],{"class":82},[72,42680,42681,42683,42685,42687,42689,42691,42693,42695,42697,42699,42701,42703,42705,42707,42709],{"class":74,"line":10214},[72,42682,42647],{"class":82},[72,42684,35288],{"class":362},[72,42686,932],{"class":82},[72,42688,32488],{"class":362},[72,42690,42656],{"class":82},[72,42692,32488],{"class":362},[72,42694,932],{"class":82},[72,42696,42577],{"class":362},[72,42698,42665],{"class":82},[72,42700,753],{"class":362},[72,42702,932],{"class":82},[72,42704,765],{"class":362},[72,42706,42674],{"class":82},[72,42708,759],{"class":362},[72,42710,38465],{"class":82},[72,42712,42713,42715,42717,42719,42721,42723,42725,42727,42729,42731,42733,42735,42737],{"class":74,"line":10219},[72,42714,38515],{"class":82},[72,42716,31292],{"class":5642},[72,42718,609],{"class":78},[72,42720,634],{"class":362},[72,42722,932],{"class":82},[72,42724,31347],{"class":5642},[72,42726,609],{"class":78},[72,42728,640],{"class":362},[72,42730,932],{"class":82},[72,42732,31301],{"class":5642},[72,42734,609],{"class":78},[72,42736,772],{"class":362},[72,42738,570],{"class":82},[72,42740,42741],{"class":74,"line":10224},[72,42742,38544],{"class":82},[72,42744,42745,42747,42750,42752],{"class":74,"line":10229},[72,42746,31263],{"class":362},[72,42748,42749],{"class":82},".b4",[72,42751,609],{"class":78},[72,42753,38427],{"class":82},[72,42755,42756,42758,42761,42763,42765,42767,42769,42771,42774,42776,42778,42780,42782,42784,42786],{"class":74,"line":10238},[72,42757,42647],{"class":82},[72,42759,42760],{"class":362},"480",[72,42762,932],{"class":82},[72,42764,42577],{"class":362},[72,42766,42656],{"class":82},[72,42768,765],{"class":362},[72,42770,932],{"class":82},[72,42772,42773],{"class":362},"208",[72,42775,42665],{"class":82},[72,42777,1155],{"class":362},[72,42779,932],{"class":82},[72,42781,1161],{"class":362},[72,42783,42674],{"class":82},[72,42785,759],{"class":362},[72,42787,38465],{"class":82},[72,42789,42790,42792,42794,42796,42798,42800,42802,42804,42806,42808,42810,42812,42814,42816,42818],{"class":74,"line":10243},[72,42791,42647],{"class":82},[72,42793,38875],{"class":362},[72,42795,932],{"class":82},[72,42797,21474],{"class":362},[72,42799,42656],{"class":82},[72,42801,1172],{"class":362},[72,42803,932],{"class":82},[72,42805,31919],{"class":362},[72,42807,42665],{"class":82},[72,42809,1354],{"class":362},[72,42811,932],{"class":82},[72,42813,759],{"class":362},[72,42815,42674],{"class":82},[72,42817,759],{"class":362},[72,42819,38465],{"class":82},[72,42821,42822,42824,42826,42828,42830,42832,42834,42836,42838,42840,42842,42844,42846,42848,42850],{"class":74,"line":10249},[72,42823,42647],{"class":82},[72,42825,38875],{"class":362},[72,42827,932],{"class":82},[72,42829,32488],{"class":362},[72,42831,42656],{"class":82},[72,42833,32488],{"class":362},[72,42835,932],{"class":82},[72,42837,35288],{"class":362},[72,42839,42665],{"class":82},[72,42841,1354],{"class":362},[72,42843,932],{"class":82},[72,42845,759],{"class":362},[72,42847,42674],{"class":82},[72,42849,759],{"class":362},[72,42851,38465],{"class":82},[72,42853,42854,42856,42858,42860,42862,42864,42866,42868,42871,42873,42875,42877,42879,42881,42883],{"class":74,"line":10270},[72,42855,42647],{"class":82},[72,42857,38875],{"class":362},[72,42859,932],{"class":82},[72,42861,1172],{"class":362},[72,42863,42656],{"class":82},[72,42865,32488],{"class":362},[72,42867,932],{"class":82},[72,42869,42870],{"class":362},"288",[72,42872,42665],{"class":82},[72,42874,753],{"class":362},[72,42876,932],{"class":82},[72,42878,759],{"class":362},[72,42880,42674],{"class":82},[72,42882,759],{"class":362},[72,42884,38465],{"class":82},[72,42886,42887,42889,42892,42894,42896,42898,42900,42902,42905,42907,42909,42911,42913,42915,42917],{"class":74,"line":10276},[72,42888,42647],{"class":82},[72,42890,42891],{"class":362},"528",[72,42893,932],{"class":82},[72,42895,35288],{"class":362},[72,42897,42656],{"class":82},[72,42899,21474],{"class":362},[72,42901,932],{"class":82},[72,42903,42904],{"class":362},"320",[72,42906,42665],{"class":82},[72,42908,753],{"class":362},[72,42910,932],{"class":82},[72,42912,32488],{"class":362},[72,42914,42674],{"class":82},[72,42916,32488],{"class":362},[72,42918,38465],{"class":82},[72,42920,42921,42923,42925,42927,42929,42931,42933,42935,42937,42939,42941,42943,42945],{"class":74,"line":10290},[72,42922,38515],{"class":82},[72,42924,31292],{"class":5642},[72,42926,609],{"class":78},[72,42928,634],{"class":362},[72,42930,932],{"class":82},[72,42932,31347],{"class":5642},[72,42934,609],{"class":78},[72,42936,640],{"class":362},[72,42938,932],{"class":82},[72,42940,31301],{"class":5642},[72,42942,609],{"class":78},[72,42944,772],{"class":362},[72,42946,570],{"class":82},[72,42948,42949],{"class":74,"line":10296},[72,42950,38544],{"class":82},[72,42952,42953,42955,42958,42960],{"class":74,"line":10323},[72,42954,31263],{"class":362},[72,42956,42957],{"class":82},".b5",[72,42959,609],{"class":78},[72,42961,38427],{"class":82},[72,42963,42964,42966,42969,42971,42973,42975,42977,42979,42981,42983,42985,42987,42989,42991,42993],{"class":74,"line":10332},[72,42965,42647],{"class":82},[72,42967,42968],{"class":362},"832",[72,42970,932],{"class":82},[72,42972,35288],{"class":362},[72,42974,42656],{"class":82},[72,42976,21474],{"class":362},[72,42978,932],{"class":82},[72,42980,42904],{"class":362},[72,42982,42665],{"class":82},[72,42984,753],{"class":362},[72,42986,932],{"class":82},[72,42988,32488],{"class":362},[72,42990,42674],{"class":82},[72,42992,32488],{"class":362},[72,42994,38465],{"class":82},[72,42996,42997,42999,43001,43003,43005,43007,43009,43011,43013,43015,43017,43019,43021,43023,43025],{"class":74,"line":10338},[72,42998,42647],{"class":82},[72,43000,42968],{"class":362},[72,43002,932],{"class":82},[72,43004,35358],{"class":362},[72,43006,42656],{"class":82},[72,43008,42577],{"class":362},[72,43010,932],{"class":82},[72,43012,35358],{"class":362},[72,43014,42665],{"class":82},[72,43016,1161],{"class":362},[72,43018,932],{"class":82},[72,43020,32488],{"class":362},[72,43022,42674],{"class":82},[72,43024,32488],{"class":362},[72,43026,38465],{"class":82},[72,43028,43029,43032,43034,43036,43038],{"class":74,"line":10346},[72,43030,43031],{"class":82},"            nn.AdaptiveAvgPool2d((",[72,43033,772],{"class":362},[72,43035,932],{"class":82},[72,43037,772],{"class":362},[72,43039,43040],{"class":82},")),\n",[72,43042,43043],{"class":74,"line":10351},[72,43044,39208],{"class":82},[72,43046,43047,43049,43052,43054,43056],{"class":74,"line":17030},[72,43048,39213],{"class":82},[72,43050,43051],{"class":362},"1024",[72,43053,932],{"class":82},[72,43055,1000],{"class":362},[72,43057,570],{"class":82},[72,43059,43060],{"class":74,"line":17036},[72,43061,38544],{"class":82},[72,43063,43064],{"class":74,"line":17059},[72,43065,43066],{"class":621},"        # 对模型参数初始化\n",[72,43068,43069,43071,43073,43075,43077],{"class":74,"line":17065},[72,43070,3831],{"class":78},[72,43072,39286],{"class":82},[72,43074,26465],{"class":78},[72,43076,39291],{"class":362},[72,43078,39294],{"class":82},[72,43080,43081,43083,43085],{"class":74,"line":17088},[72,43082,5070],{"class":78},[72,43084,39306],{"class":362},[72,43086,39309],{"class":82},[72,43088,43089,43091,43094,43096,43099,43101,43103,43105,43107],{"class":74,"line":17102},[72,43090,39319],{"class":82},[72,43092,43093],{"class":5642},"mode",[72,43095,609],{"class":78},[72,43097,43098],{"class":366},"'fan_out'",[72,43100,932],{"class":82},[72,43102,39322],{"class":5642},[72,43104,609],{"class":78},[72,43106,39327],{"class":366},[72,43108,570],{"class":82},[72,43110,43111],{"class":74,"line":17122},[72,43112,43113],{"class":621},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[72,43115,43116],{"class":74,"line":17128},[72,43117,43118],{"class":621},"                # ② mode = 'fan_out'决定使用的fan值：\n",[72,43120,43121],{"class":74,"line":17139},[72,43122,43123],{"class":621},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[72,43125,43126],{"class":74,"line":17162},[72,43127,43128],{"class":621},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[72,43130,43131],{"class":74,"line":17184},[72,43132,43133],{"class":621},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[72,43135,43136],{"class":74,"line":17189},[72,43137,43138],{"class":621},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[72,43140,43141,43143,43145,43147,43149,43151],{"class":74,"line":17195},[72,43142,39339],{"class":78},[72,43144,39342],{"class":82},[72,43146,39345],{"class":78},[72,43148,39348],{"class":78},[72,43150,39351],{"class":362},[72,43152,4167],{"class":82},[72,43154,43155,43157,43159],{"class":74,"line":17209},[72,43156,39363],{"class":82},[72,43158,747],{"class":362},[72,43160,570],{"class":82},[72,43162,43163,43166,43168],{"class":74,"line":17222},[72,43164,43165],{"class":78},"                elif",[72,43167,39306],{"class":362},[72,43169,39382],{"class":82},[72,43171,43172,43175,43177,43179,43181],{"class":74,"line":17227},[72,43173,43174],{"class":82},"                    nn.init.normal_(m.weight,",[72,43176,747],{"class":362},[72,43178,932],{"class":82},[72,43180,39404],{"class":362},[72,43182,570],{"class":82},[72,43184,43185,43188,43190,43192,43194,43196],{"class":74,"line":17241},[72,43186,43187],{"class":78},"                    if",[72,43189,39342],{"class":82},[72,43191,39345],{"class":78},[72,43193,39348],{"class":78},[72,43195,39351],{"class":362},[72,43197,4167],{"class":82},[72,43199,43200,43203,43205],{"class":74,"line":17246},[72,43201,43202],{"class":82},"                        nn.init.constant_(m.bias,",[72,43204,747],{"class":362},[72,43206,570],{"class":82},[72,43208,43209],{"class":74,"line":17252},[72,43210,35583],{"class":621},[72,43212,43213,43215,43217],{"class":74,"line":17257},[72,43214,31219],{"class":78},[72,43216,31511],{"class":358},[72,43218,31514],{"class":82},[72,43220,43221,43223,43225,43227],{"class":74,"line":17271},[72,43222,31519],{"class":82},[72,43224,609],{"class":78},[72,43226,31241],{"class":362},[72,43228,43229],{"class":82},".b1(x)\n",[72,43231,43232,43234,43236,43238],{"class":74,"line":17276},[72,43233,31519],{"class":82},[72,43235,609],{"class":78},[72,43237,31241],{"class":362},[72,43239,43240],{"class":82},".b2(x)\n",[72,43242,43243,43245,43247,43249],{"class":74,"line":17281},[72,43244,31519],{"class":82},[72,43246,609],{"class":78},[72,43248,31241],{"class":362},[72,43250,43251],{"class":82},".b3(x)\n",[72,43253,43254,43256,43258,43260],{"class":74,"line":17295},[72,43255,31519],{"class":82},[72,43257,609],{"class":78},[72,43259,31241],{"class":362},[72,43261,43262],{"class":82},".b4(x)\n",[72,43264,43265,43267,43269,43271],{"class":74,"line":17307},[72,43266,31519],{"class":82},[72,43268,609],{"class":78},[72,43270,31241],{"class":362},[72,43272,43273],{"class":82},".b5(x)\n",[72,43275,43276,43278],{"class":74,"line":17312},[72,43277,15178],{"class":78},[72,43279,31627],{"class":82},[72,43281,43282],{"class":74,"line":17325},[72,43283,2828],{"emptyLinePlaceholder":490},[72,43285,43286],{"class":74,"line":17330},[72,43287,43288],{"class":621},"# 模型展示\n",[72,43290,43291,43293,43295,43297,43299],{"class":74,"line":17335},[72,43292,1960],{"class":78},[72,43294,31638],{"class":362},[72,43296,3377],{"class":78},[72,43298,31643],{"class":366},[72,43300,4167],{"class":82},[72,43302,43303,43305,43307,43309,43311,43313,43315,43317,43319],{"class":74,"line":17340},[72,43304,31655],{"class":82},[72,43306,609],{"class":78},[72,43308,30869],{"class":82},[72,43310,31662],{"class":366},[72,43312,2133],{"class":78},[72,43314,31667],{"class":82},[72,43316,2130],{"class":78},[72,43318,30894],{"class":366},[72,43320,570],{"class":82},[72,43322,43323,43325,43327],{"class":74,"line":17353},[72,43324,31707],{"class":82},[72,43326,609],{"class":78},[72,43328,43329],{"class":82},"GoogLeNet(Inception).to(device)\n",[72,43331,43332,43334,43336,43338,43340,43342,43344,43346],{"class":74,"line":17358},[72,43333,31717],{"class":362},[72,43335,31720],{"class":82},[72,43337,772],{"class":362},[72,43339,932],{"class":82},[72,43341,31919],{"class":362},[72,43343,932],{"class":82},[72,43345,31919],{"class":362},[72,43347,31733],{"class":82},[22,43349,43350],{"start":370},[25,43351,39601],{},[63,43353,43355],{"className":65,"code":43354,"language":67,"meta":68,"style":68},"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",[34,43356,43357,43363,43369,43379,43385,43395,43405,43415,43425,43435,43439,43450,43460,43464,43468,43472,43480,43492,43502,43518,43528,43560,43574,43584,43594,43598,43608,43622,43632,43642,43652,43658,43662,43666,43670,43674,43678,43686,43706,43710,43714,43718,43722,43726,43742,43746,43750,43758,43762,43766,43774,43778,43782,43786,43794,43798,43802,43806,43810,43818,43822,43830,43834,43842,43846,43854,43858,43866,43870,43874,43882,43886,43890,43894,43906,43930,43944,43948,43952,43956,43964,43968,43976,43980,43988,43992,44000,44004,44012,44016,44024,44028,44040,44044,44052,44056,44064,44068,44072,44076,44080,44088,44092,44108,44112,44120,44124,44128,44132,44136,44140,44144,44148,44164,44168,44180,44184,44196,44200,44212,44216,44224,44228,44236,44240,44244,44248,44254,44258,44266,44270,44286,44290,44298,44302,44318,44330,44334,44346,44350,44354,44362,44366,44370,44378,44382,44390,44394,44402,44406,44410,44452,44494,44498,44502,44518,44522,44538,44542,44546,44554,44558,44562,44574,44612,44616,44620,44628,44632,44646,44656,44662,44668,44674,44680,44684,44688,44694,44698,44702,44710,44714,44732,44736,44740,44744,44760,44764,44768,44772,44776,44780,44800,44820,44824,44828,44832,44840,44848,44852,44868,44888,44908,44912,44916,44924,44932,44936,44940,44944,44956,44960,44970,44978,44995],{"__ignoreMap":68},[72,43358,43359,43361],{"class":74,"line":75},[72,43360,79],{"class":78},[72,43362,32240],{"class":82},[72,43364,43365,43367],{"class":74,"line":370},[72,43366,79],{"class":78},[72,43368,32247],{"class":82},[72,43370,43371,43373,43375,43377],{"class":74,"line":1608},[72,43372,79],{"class":78},[72,43374,32258],{"class":82},[72,43376,31801],{"class":78},[72,43378,32263],{"class":82},[72,43380,43381,43383],{"class":74,"line":1623},[72,43382,79],{"class":78},[72,43384,30813],{"class":82},[72,43386,43387,43389,43391,43393],{"class":74,"line":1629},[72,43388,31155],{"class":78},[72,43390,31833],{"class":82},[72,43392,79],{"class":78},[72,43394,32280],{"class":82},[72,43396,43397,43399,43401,43403],{"class":74,"line":1643},[72,43398,31155],{"class":78},[72,43400,31786],{"class":82},[72,43402,79],{"class":78},[72,43404,31791],{"class":82},[72,43406,43407,43409,43411,43413],{"class":74,"line":1649},[72,43408,31155],{"class":78},[72,43410,31816],{"class":82},[72,43412,79],{"class":78},[72,43414,31821],{"class":82},[72,43416,43417,43419,43421,43423],{"class":74,"line":1740},[72,43418,79],{"class":78},[72,43420,31833],{"class":82},[72,43422,31801],{"class":78},[72,43424,31838],{"class":82},[72,43426,43427,43429,43431,43433],{"class":74,"line":1746},[72,43428,79],{"class":78},[72,43430,31850],{"class":82},[72,43432,31801],{"class":78},[72,43434,31855],{"class":82},[72,43436,43437],{"class":74,"line":1758},[72,43438,32325],{"class":621},[72,43440,43441,43443,43445,43447],{"class":74,"line":2041},[72,43442,31155],{"class":78},[72,43444,32332],{"class":82},[72,43446,79],{"class":78},[72,43448,43449],{"class":82}," GoogLeNet, Inception\n",[72,43451,43452,43454,43456,43458],{"class":74,"line":2046},[72,43453,31155],{"class":78},[72,43455,31158],{"class":82},[72,43457,79],{"class":78},[72,43459,31163],{"class":82},[72,43461,43462],{"class":74,"line":2052},[72,43463,2828],{"emptyLinePlaceholder":490},[72,43465,43466],{"class":74,"line":2057},[72,43467,2828],{"emptyLinePlaceholder":490},[72,43469,43470],{"class":74,"line":2071},[72,43471,32360],{"class":621},[72,43473,43474,43476,43478],{"class":74,"line":2076},[72,43475,32365],{"class":78},[72,43477,32368],{"class":358},[72,43479,32371],{"class":82},[72,43481,43482,43484,43486,43488,43490],{"class":74,"line":2082},[72,43483,32376],{"class":82},[72,43485,609],{"class":78},[72,43487,31873],{"class":82},[72,43489,31881],{"class":366},[72,43491,31884],{"class":82},[72,43493,43494,43496,43498,43500],{"class":74,"line":2103},[72,43495,32389],{"class":5642},[72,43497,609],{"class":78},[72,43499,31894],{"class":362},[72,43501,31884],{"class":82},[72,43503,43504,43506,43508,43510,43512,43514,43516],{"class":74,"line":2108},[72,43505,32400],{"class":5642},[72,43507,609],{"class":78},[72,43509,31911],{"class":82},[72,43511,31914],{"class":5642},[72,43513,609],{"class":78},[72,43515,35867],{"class":362},[72,43517,31922],{"class":82},[72,43519,43520,43522,43524,43526],{"class":74,"line":2122},[72,43521,32417],{"class":5642},[72,43523,609],{"class":78},[72,43525,31894],{"class":362},[72,43527,570],{"class":82},[72,43529,43530,43532,43534,43536,43538,43540,43542,43544,43546,43548,43550,43552,43554,43556,43558],{"class":74,"line":2127},[72,43531,32428],{"class":82},[72,43533,609],{"class":78},[72,43535,32433],{"class":82},[72,43537,32436],{"class":362},[72,43539,564],{"class":82},[72,43541,32441],{"class":362},[72,43543,1009],{"class":78},[72,43545,7784],{"class":362},[72,43547,32448],{"class":82},[72,43549,32436],{"class":362},[72,43551,564],{"class":82},[72,43553,32455],{"class":362},[72,43555,1009],{"class":78},[72,43557,7784],{"class":362},[72,43559,32462],{"class":82},[72,43561,43562,43564,43566,43568,43570,43572],{"class":74,"line":2156},[72,43563,32467],{"class":82},[72,43565,609],{"class":78},[72,43567,32472],{"class":82},[72,43569,31955],{"class":5642},[72,43571,609],{"class":78},[72,43573,31960],{"class":82},[72,43575,43576,43578,43580,43582],{"class":74,"line":2161},[72,43577,32483],{"class":5642},[72,43579,609],{"class":78},[72,43581,753],{"class":362},[72,43583,31884],{"class":82},[72,43585,43586,43588,43590,43592],{"class":74,"line":2178},[72,43587,32495],{"class":5642},[72,43589,609],{"class":78},[72,43591,31894],{"class":362},[72,43593,31884],{"class":82},[72,43595,43596],{"class":74,"line":2183},[72,43597,32506],{"class":621},[72,43599,43600,43602,43604,43606],{"class":74,"line":2188},[72,43601,32511],{"class":5642},[72,43603,609],{"class":78},[72,43605,949],{"class":362},[72,43607,570],{"class":82},[72,43609,43610,43612,43614,43616,43618,43620],{"class":74,"line":2193},[72,43611,32522],{"class":82},[72,43613,609],{"class":78},[72,43615,31952],{"class":82},[72,43617,31955],{"class":5642},[72,43619,609],{"class":78},[72,43621,32533],{"class":82},[72,43623,43624,43626,43628,43630],{"class":74,"line":2207},[72,43625,32538],{"class":5642},[72,43627,609],{"class":78},[72,43629,753],{"class":362},[72,43631,31884],{"class":82},[72,43633,43634,43636,43638,43640],{"class":74,"line":2212},[72,43635,32549],{"class":5642},[72,43637,609],{"class":78},[72,43639,31894],{"class":362},[72,43641,31884],{"class":82},[72,43643,43644,43646,43648,43650],{"class":74,"line":3005},[72,43645,32560],{"class":5642},[72,43647,609],{"class":78},[72,43649,949],{"class":362},[72,43651,570],{"class":82},[72,43653,43654,43656],{"class":74,"line":3019},[72,43655,4518],{"class":78},[72,43657,32573],{"class":82},[72,43659,43660],{"class":74,"line":3027},[72,43661,2828],{"emptyLinePlaceholder":490},[72,43663,43664],{"class":74,"line":3032},[72,43665,32582],{"class":621},[72,43667,43668],{"class":74,"line":3038},[72,43669,32587],{"class":621},[72,43671,43672],{"class":74,"line":3044},[72,43673,2828],{"emptyLinePlaceholder":490},[72,43675,43676],{"class":74,"line":3049},[72,43677,32596],{"class":621},[72,43679,43680,43682,43684],{"class":74,"line":8374},[72,43681,32365],{"class":78},[72,43683,32603],{"class":358},[72,43685,32606],{"class":82},[72,43687,43688,43690,43692,43694,43696,43698,43700,43702,43704],{"class":74,"line":8398},[72,43689,31655],{"class":82},[72,43691,609],{"class":78},[72,43693,30869],{"class":82},[72,43695,31662],{"class":366},[72,43697,2133],{"class":78},[72,43699,31667],{"class":82},[72,43701,2130],{"class":78},[72,43703,32625],{"class":366},[72,43705,570],{"class":82},[72,43707,43708],{"class":74,"line":8403},[72,43709,2828],{"emptyLinePlaceholder":490},[72,43711,43712],{"class":74,"line":8409},[72,43713,2828],{"emptyLinePlaceholder":490},[72,43715,43716],{"class":74,"line":8436},[72,43717,32640],{"class":621},[72,43719,43720],{"class":74,"line":8441},[72,43721,32645],{"class":621},[72,43723,43724],{"class":74,"line":8447},[72,43725,32650],{"class":621},[72,43727,43728,43730,43732,43734,43736,43738,43740],{"class":74,"line":8459},[72,43729,32655],{"class":82},[72,43731,609],{"class":78},[72,43733,32660],{"class":82},[72,43735,32663],{"class":5642},[72,43737,609],{"class":78},[72,43739,32668],{"class":362},[72,43741,570],{"class":82},[72,43743,43744],{"class":74,"line":8471},[72,43745,2828],{"emptyLinePlaceholder":490},[72,43747,43748],{"class":74,"line":8483},[72,43749,32679],{"class":621},[72,43751,43752,43754,43756],{"class":74,"line":10142},[72,43753,32684],{"class":82},[72,43755,609],{"class":78},[72,43757,32689],{"class":82},[72,43759,43760],{"class":74,"line":10167},[72,43761,2828],{"emptyLinePlaceholder":490},[72,43763,43764],{"class":74,"line":10190},[72,43765,32698],{"class":621},[72,43767,43768,43770,43772],{"class":74,"line":10214},[72,43769,31707],{"class":82},[72,43771,609],{"class":78},[72,43773,32707],{"class":82},[72,43775,43776],{"class":74,"line":10219},[72,43777,32712],{"class":621},[72,43779,43780],{"class":74,"line":10224},[72,43781,32717],{"class":621},[72,43783,43784],{"class":74,"line":10229},[72,43785,32722],{"class":621},[72,43787,43788,43790,43792],{"class":74,"line":10238},[72,43789,32727],{"class":82},[72,43791,609],{"class":78},[72,43793,32732],{"class":82},[72,43795,43796],{"class":74,"line":10243},[72,43797,2828],{"emptyLinePlaceholder":490},[72,43799,43800],{"class":74,"line":10249},[72,43801,2828],{"emptyLinePlaceholder":490},[72,43803,43804],{"class":74,"line":10270},[72,43805,32745],{"class":621},[72,43807,43808],{"class":74,"line":10276},[72,43809,32750],{"class":621},[72,43811,43812,43814,43816],{"class":74,"line":10290},[72,43813,32755],{"class":82},[72,43815,609],{"class":78},[72,43817,32760],{"class":362},[72,43819,43820],{"class":74,"line":10296},[72,43821,32765],{"class":621},[72,43823,43824,43826,43828],{"class":74,"line":10323},[72,43825,32770],{"class":82},[72,43827,609],{"class":78},[72,43829,32775],{"class":82},[72,43831,43832],{"class":74,"line":10332},[72,43833,32780],{"class":621},[72,43835,43836,43838,43840],{"class":74,"line":10338},[72,43837,32785],{"class":82},[72,43839,609],{"class":78},[72,43841,32775],{"class":82},[72,43843,43844],{"class":74,"line":10346},[72,43845,32794],{"class":621},[72,43847,43848,43850,43852],{"class":74,"line":10351},[72,43849,32799],{"class":82},[72,43851,609],{"class":78},[72,43853,32775],{"class":82},[72,43855,43856],{"class":74,"line":17030},[72,43857,32808],{"class":621},[72,43859,43860,43862,43864],{"class":74,"line":17036},[72,43861,32813],{"class":82},[72,43863,609],{"class":78},[72,43865,32775],{"class":82},[72,43867,43868],{"class":74,"line":17059},[72,43869,2828],{"emptyLinePlaceholder":490},[72,43871,43872],{"class":74,"line":17065},[72,43873,32826],{"class":621},[72,43875,43876,43878,43880],{"class":74,"line":17088},[72,43877,32831],{"class":82},[72,43879,609],{"class":78},[72,43881,32836],{"class":82},[72,43883,43884],{"class":74,"line":17102},[72,43885,2828],{"emptyLinePlaceholder":490},[72,43887,43888],{"class":74,"line":17122},[72,43889,2828],{"emptyLinePlaceholder":490},[72,43891,43892],{"class":74,"line":17128},[72,43893,32849],{"class":621},[72,43895,43896,43898,43900,43902,43904],{"class":74,"line":17139},[72,43897,3629],{"class":78},[72,43899,32856],{"class":82},[72,43901,26465],{"class":78},[72,43903,32861],{"class":362},[72,43905,32864],{"class":82},[72,43907,43908,43910,43912,43914,43916,43918,43920,43922,43924,43926,43928],{"class":74,"line":17162},[72,43909,32869],{"class":362},[72,43911,564],{"class":82},[72,43913,32874],{"class":366},[72,43915,32877],{"class":362},[72,43917,1138],{"class":366},[72,43919,32877],{"class":362},[72,43921,805],{"class":366},[72,43923,32886],{"class":82},[72,43925,1086],{"class":78},[72,43927,772],{"class":362},[72,43929,30915],{"class":82},[72,43931,43932,43934,43936,43938,43940,43942],{"class":74,"line":17184},[72,43933,32869],{"class":362},[72,43935,564],{"class":82},[72,43937,32901],{"class":366},[72,43939,1009],{"class":78},[72,43941,1000],{"class":362},[72,43943,570],{"class":82},[72,43945,43946],{"class":74,"line":17189},[72,43947,2828],{"emptyLinePlaceholder":490},[72,43949,43950],{"class":74,"line":17195},[72,43951,32916],{"class":621},[72,43953,43954],{"class":74,"line":17209},[72,43955,32921],{"class":621},[72,43957,43958,43960,43962],{"class":74,"line":17222},[72,43959,32926],{"class":82},[72,43961,609],{"class":78},[72,43963,32760],{"class":362},[72,43965,43966],{"class":74,"line":17227},[72,43967,32935],{"class":621},[72,43969,43970,43972,43974],{"class":74,"line":17241},[72,43971,32940],{"class":82},[72,43973,609],{"class":78},[72,43975,3513],{"class":362},[72,43977,43978],{"class":74,"line":17246},[72,43979,32949],{"class":621},[72,43981,43982,43984,43986],{"class":74,"line":17252},[72,43983,32954],{"class":82},[72,43985,609],{"class":78},[72,43987,32760],{"class":362},[72,43989,43990],{"class":74,"line":17257},[72,43991,32963],{"class":621},[72,43993,43994,43996,43998],{"class":74,"line":17271},[72,43995,32968],{"class":82},[72,43997,609],{"class":78},[72,43999,3513],{"class":362},[72,44001,44002],{"class":74,"line":17276},[72,44003,32977],{"class":621},[72,44005,44006,44008,44010],{"class":74,"line":17281},[72,44007,32982],{"class":82},[72,44009,609],{"class":78},[72,44011,3513],{"class":362},[72,44013,44014],{"class":74,"line":17295},[72,44015,32991],{"class":621},[72,44017,44018,44020,44022],{"class":74,"line":17307},[72,44019,32996],{"class":82},[72,44021,609],{"class":78},[72,44023,3513],{"class":362},[72,44025,44026],{"class":74,"line":17312},[72,44027,33005],{"class":621},[72,44029,44030,44032,44034,44036,44038],{"class":74,"line":17325},[72,44031,3831],{"class":78},[72,44033,32019],{"class":82},[72,44035,26465],{"class":78},[72,44037,32024],{"class":362},[72,44039,33018],{"class":82},[72,44041,44042],{"class":74,"line":17330},[72,44043,33023],{"class":621},[72,44045,44046,44048,44050],{"class":74,"line":17335},[72,44047,33028],{"class":82},[72,44049,609],{"class":78},[72,44051,33033],{"class":82},[72,44053,44054],{"class":74,"line":17340},[72,44055,33038],{"class":621},[72,44057,44058,44060,44062],{"class":74,"line":17353},[72,44059,33043],{"class":82},[72,44061,609],{"class":78},[72,44063,33048],{"class":82},[72,44065,44066],{"class":74,"line":17358},[72,44067,33054],{"class":621},[72,44069,44070],{"class":74,"line":33051},[72,44071,33060],{"class":82},[72,44073,44074],{"class":74,"line":33057},[72,44075,33066],{"class":621},[72,44077,44078],{"class":74,"line":33063},[72,44079,33072],{"class":621},[72,44081,44082,44084,44086],{"class":74,"line":33069},[72,44083,33078],{"class":82},[72,44085,609],{"class":78},[72,44087,33083],{"class":82},[72,44089,44090],{"class":74,"line":33075},[72,44091,33089],{"class":621},[72,44093,44094,44096,44098,44100,44102,44104,44106],{"class":74,"line":33086},[72,44095,33095],{"class":82},[72,44097,609],{"class":78},[72,44099,33100],{"class":82},[72,44101,33103],{"class":5642},[72,44103,609],{"class":78},[72,44105,772],{"class":362},[72,44107,570],{"class":82},[72,44109,44110],{"class":74,"line":33092},[72,44111,33115],{"class":621},[72,44113,44114,44116,44118],{"class":74,"line":33112},[72,44115,33121],{"class":82},[72,44117,609],{"class":78},[72,44119,33126],{"class":82},[72,44121,44122],{"class":74,"line":33118},[72,44123,33132],{"class":621},[72,44125,44126],{"class":74,"line":33129},[72,44127,33138],{"class":82},[72,44129,44130],{"class":74,"line":33135},[72,44131,33144],{"class":621},[72,44133,44134],{"class":74,"line":33141},[72,44135,33150],{"class":82},[72,44137,44138],{"class":74,"line":33147},[72,44139,33156],{"class":621},[72,44141,44142],{"class":74,"line":33153},[72,44143,33162],{"class":82},[72,44145,44146],{"class":74,"line":33159},[72,44147,33168],{"class":621},[72,44149,44150,44152,44154,44156,44158,44160,44162],{"class":74,"line":33165},[72,44151,33174],{"class":82},[72,44153,9903],{"class":78},[72,44155,33179],{"class":82},[72,44157,1009],{"class":78},[72,44159,33184],{"class":82},[72,44161,747],{"class":362},[72,44163,570],{"class":82},[72,44165,44166],{"class":74,"line":33171},[72,44167,33194],{"class":621},[72,44169,44170,44172,44174,44176,44178],{"class":74,"line":33191},[72,44171,33200],{"class":82},[72,44173,9903],{"class":78},[72,44175,33205],{"class":82},[72,44177,3377],{"class":78},[72,44179,33210],{"class":82},[72,44181,44182],{"class":74,"line":33197},[72,44183,33216],{"class":621},[72,44185,44186,44188,44190,44192,44194],{"class":74,"line":33213},[72,44187,33222],{"class":82},[72,44189,9903],{"class":78},[72,44191,33184],{"class":82},[72,44193,747],{"class":362},[72,44195,570],{"class":82},[72,44197,44198],{"class":74,"line":33219},[72,44199,33236],{"class":621},[72,44201,44202,44204,44206,44208,44210],{"class":74,"line":33233},[72,44203,3831],{"class":78},[72,44205,33244],{"class":82},[72,44207,26465],{"class":78},[72,44209,32024],{"class":362},[72,44211,33251],{"class":82},[72,44213,44214],{"class":74,"line":33239},[72,44215,33257],{"class":621},[72,44217,44218,44220,44222],{"class":74,"line":33254},[72,44219,33028],{"class":82},[72,44221,609],{"class":78},[72,44223,33033],{"class":82},[72,44225,44226],{"class":74,"line":33260},[72,44227,33272],{"class":621},[72,44229,44230,44232,44234],{"class":74,"line":33269},[72,44231,33043],{"class":82},[72,44233,609],{"class":78},[72,44235,33048],{"class":82},[72,44237,44238],{"class":74,"line":33275},[72,44239,33287],{"class":621},[72,44241,44242],{"class":74,"line":33284},[72,44243,33293],{"class":82},[72,44245,44246],{"class":74,"line":33290},[72,44247,36774],{"class":621},[72,44249,44250,44252],{"class":74,"line":33296},[72,44251,33299],{"class":78},[72,44253,33302],{"class":82},[72,44255,44256],{"class":74,"line":33305},[72,44257,33308],{"class":621},[72,44259,44260,44262,44264],{"class":74,"line":33311},[72,44261,36789],{"class":82},[72,44263,609],{"class":78},[72,44265,33083],{"class":82},[72,44267,44268],{"class":74,"line":33322},[72,44269,33325],{"class":621},[72,44271,44272,44274,44276,44278,44280,44282,44284],{"class":74,"line":33328},[72,44273,36802],{"class":82},[72,44275,609],{"class":78},[72,44277,33100],{"class":82},[72,44279,33103],{"class":5642},[72,44281,609],{"class":78},[72,44283,772],{"class":362},[72,44285,570],{"class":82},[72,44287,44288],{"class":74,"line":33347},[72,44289,33350],{"class":621},[72,44291,44292,44294,44296],{"class":74,"line":33353},[72,44293,36823],{"class":82},[72,44295,609],{"class":78},[72,44297,33126],{"class":82},[72,44299,44300],{"class":74,"line":33364},[72,44301,33367],{"class":621},[72,44303,44304,44306,44308,44310,44312,44314,44316],{"class":74,"line":33370},[72,44305,36836],{"class":82},[72,44307,9903],{"class":78},[72,44309,36841],{"class":82},[72,44311,1009],{"class":78},[72,44313,33184],{"class":82},[72,44315,747],{"class":362},[72,44317,570],{"class":82},[72,44319,44320,44322,44324,44326,44328],{"class":74,"line":33390},[72,44321,36854],{"class":82},[72,44323,9903],{"class":78},[72,44325,33205],{"class":82},[72,44327,3377],{"class":78},[72,44329,33210],{"class":82},[72,44331,44332],{"class":74,"line":33406},[72,44333,36867],{"class":621},[72,44335,44336,44338,44340,44342,44344],{"class":74,"line":33412},[72,44337,36872],{"class":82},[72,44339,9903],{"class":78},[72,44341,33184],{"class":82},[72,44343,747],{"class":362},[72,44345,570],{"class":82},[72,44347,44348],{"class":74,"line":33426},[72,44349,33429],{"class":621},[72,44351,44352],{"class":74,"line":33432},[72,44353,33435],{"class":621},[72,44355,44356,44358,44360],{"class":74,"line":33438},[72,44357,33441],{"class":82},[72,44359,1138],{"class":78},[72,44361,33446],{"class":82},[72,44363,44364],{"class":74,"line":33449},[72,44365,33452],{"class":621},[72,44367,44368],{"class":74,"line":33455},[72,44369,33458],{"class":621},[72,44371,44372,44374,44376],{"class":74,"line":33461},[72,44373,33464],{"class":82},[72,44375,1138],{"class":78},[72,44377,33446],{"class":82},[72,44379,44380],{"class":74,"line":33471},[72,44381,33474],{"class":621},[72,44383,44384,44386,44388],{"class":74,"line":33477},[72,44385,33480],{"class":82},[72,44387,1138],{"class":78},[72,44389,33485],{"class":82},[72,44391,44392],{"class":74,"line":33488},[72,44393,33491],{"class":621},[72,44395,44396,44398,44400],{"class":74,"line":33494},[72,44397,33497],{"class":82},[72,44399,1138],{"class":78},[72,44401,33485],{"class":82},[72,44403,44404],{"class":74,"line":33504},[72,44405,2828],{"emptyLinePlaceholder":490},[72,44407,44408],{"class":74,"line":33509},[72,44409,33512],{"class":621},[72,44411,44412,44414,44416,44418,44420,44422,44424,44426,44428,44430,44432,44434,44436,44438,44440,44442,44444,44446,44448,44450],{"class":74,"line":33515},[72,44413,32869],{"class":362},[72,44415,564],{"class":82},[72,44417,4020],{"class":366},[72,44419,32877],{"class":362},[72,44421,33526],{"class":366},[72,44423,1450],{"class":362},[72,44425,33531],{"class":78},[72,44427,1500],{"class":362},[72,44429,33536],{"class":366},[72,44431,1450],{"class":362},[72,44433,33531],{"class":78},[72,44435,1500],{"class":362},[72,44437,4020],{"class":366},[72,44439,33547],{"class":82},[72,44441,1086],{"class":78},[72,44443,772],{"class":362},[72,44445,33554],{"class":82},[72,44447,1086],{"class":78},[72,44449,772],{"class":362},[72,44451,33561],{"class":82},[72,44453,44454,44456,44458,44460,44462,44464,44466,44468,44470,44472,44474,44476,44478,44480,44482,44484,44486,44488,44490,44492],{"class":74,"line":33564},[72,44455,32869],{"class":362},[72,44457,564],{"class":82},[72,44459,4020],{"class":366},[72,44461,32877],{"class":362},[72,44463,33575],{"class":366},[72,44465,1450],{"class":362},[72,44467,33531],{"class":78},[72,44469,1500],{"class":362},[72,44471,33584],{"class":366},[72,44473,1450],{"class":362},[72,44475,33531],{"class":78},[72,44477,1500],{"class":362},[72,44479,4020],{"class":366},[72,44481,33595],{"class":82},[72,44483,1086],{"class":78},[72,44485,772],{"class":362},[72,44487,33602],{"class":82},[72,44489,1086],{"class":78},[72,44491,772],{"class":362},[72,44493,33561],{"class":82},[72,44495,44496],{"class":74,"line":33611},[72,44497,2828],{"emptyLinePlaceholder":490},[72,44499,44500],{"class":74,"line":33616},[72,44501,33619],{"class":621},[72,44503,44504,44506,44508,44510,44512,44514,44516],{"class":74,"line":33622},[72,44505,2925],{"class":78},[72,44507,33627],{"class":82},[72,44509,1086],{"class":78},[72,44511,772],{"class":362},[72,44513,1494],{"class":82},[72,44515,1514],{"class":78},[72,44517,33638],{"class":82},[72,44519,44520],{"class":74,"line":33641},[72,44521,33644],{"class":621},[72,44523,44524,44526,44528,44530,44532,44534,44536],{"class":74,"line":33647},[72,44525,33650],{"class":82},[72,44527,603],{"class":362},[72,44529,609],{"class":78},[72,44531,33657],{"class":82},[72,44533,1086],{"class":78},[72,44535,772],{"class":362},[72,44537,33664],{"class":82},[72,44539,44540],{"class":74,"line":33667},[72,44541,33670],{"class":621},[72,44543,44544],{"class":74,"line":33673},[72,44545,33676],{"class":621},[72,44547,44548,44550,44552],{"class":74,"line":33679},[72,44549,33682],{"class":82},[72,44551,609],{"class":78},[72,44553,32732],{"class":82},[72,44555,44556],{"class":74,"line":33689},[72,44557,2828],{"emptyLinePlaceholder":490},[72,44559,44560],{"class":74,"line":33694},[72,44561,33697],{"class":621},[72,44563,44564,44566,44568,44570,44572],{"class":74,"line":33700},[72,44565,33703],{"class":82},[72,44567,609],{"class":78},[72,44569,33708],{"class":82},[72,44571,1086],{"class":78},[72,44573,33713],{"class":82},[72,44575,44576,44578,44580,44582,44584,44586,44588,44590,44592,44594,44596,44598,44600,44602,44604,44606,44608,44610],{"class":74,"line":33716},[72,44577,32869],{"class":362},[72,44579,564],{"class":82},[72,44581,33723],{"class":366},[72,44583,1450],{"class":362},[72,44585,33728],{"class":78},[72,44587,1500],{"class":362},[72,44589,1098],{"class":366},[72,44591,1450],{"class":362},[72,44593,33728],{"class":78},[72,44595,1500],{"class":362},[72,44597,33741],{"class":366},[72,44599,33744],{"class":82},[72,44601,33747],{"class":78},[72,44603,1461],{"class":362},[72,44605,33752],{"class":82},[72,44607,882],{"class":78},[72,44609,1461],{"class":362},[72,44611,30915],{"class":82},[72,44613,44614],{"class":74,"line":33761},[72,44615,37151],{"class":621},[72,44617,44618],{"class":74,"line":33767},[72,44619,37156],{"class":621},[72,44621,44622,44624,44626],{"class":74,"line":33773},[72,44623,37161],{"class":82},[72,44625,33785],{"class":366},[72,44627,570],{"class":82},[72,44629,44630],{"class":74,"line":33779},[72,44631,33805],{"class":621},[72,44633,44634,44636,44638,44640,44642,44644],{"class":74,"line":33790},[72,44635,33811],{"class":82},[72,44637,609],{"class":78},[72,44639,33816],{"class":82},[72,44641,33819],{"class":5642},[72,44643,609],{"class":78},[72,44645,1975],{"class":82},[72,44647,44648,44650,44652,44654],{"class":74,"line":33796},[72,44649,33829],{"class":366},[72,44651,1413],{"class":82},[72,44653,33834],{"class":362},[72,44655,33837],{"class":82},[72,44657,44658,44660],{"class":74,"line":33802},[72,44659,33843],{"class":366},[72,44661,33846],{"class":82},[72,44663,44664,44666],{"class":74,"line":33808},[72,44665,33852],{"class":366},[72,44667,33855],{"class":82},[72,44669,44670,44672],{"class":74,"line":33826},[72,44671,33861],{"class":366},[72,44673,33864],{"class":82},[72,44675,44676,44678],{"class":74,"line":33840},[72,44677,33870],{"class":366},[72,44679,33873],{"class":82},[72,44681,44682],{"class":74,"line":33849},[72,44683,33879],{"class":82},[72,44685,44686],{"class":74,"line":33858},[72,44687,33885],{"class":621},[72,44689,44690,44692],{"class":74,"line":33867},[72,44691,4518],{"class":78},[72,44693,33893],{"class":82},[72,44695,44696],{"class":74,"line":33876},[72,44697,2828],{"emptyLinePlaceholder":490},[72,44699,44700],{"class":74,"line":33882},[72,44701,33904],{"class":621},[72,44703,44704,44706,44708],{"class":74,"line":33888},[72,44705,32365],{"class":78},[72,44707,33912],{"class":358},[72,44709,33915],{"class":82},[72,44711,44712],{"class":74,"line":33896},[72,44713,33921],{"class":621},[72,44715,44716,44718,44720,44722,44724,44726,44728,44730],{"class":74,"line":33901},[72,44717,33927],{"class":82},[72,44719,32111],{"class":5642},[72,44721,609],{"class":78},[72,44723,564],{"class":82},[72,44725,1052],{"class":362},[72,44727,932],{"class":82},[72,44729,847],{"class":362},[72,44731,30915],{"class":82},[72,44733,44734],{"class":74,"line":33907},[72,44735,33947],{"class":621},[72,44737,44738],{"class":74,"line":33918},[72,44739,33953],{"class":621},[72,44741,44742],{"class":74,"line":33924},[72,44743,33959],{"class":621},[72,44745,44746,44748,44750,44752,44754,44756,44758],{"class":74,"line":33944},[72,44747,32145],{"class":82},[72,44749,772],{"class":362},[72,44751,932],{"class":82},[72,44753,640],{"class":362},[72,44755,932],{"class":82},[72,44757,772],{"class":362},[72,44759,570],{"class":82},[72,44761,44762],{"class":74,"line":33950},[72,44763,33982],{"class":621},[72,44765,44766],{"class":74,"line":33956},[72,44767,33988],{"class":621},[72,44769,44770],{"class":74,"line":33962},[72,44771,33994],{"class":621},[72,44773,44774],{"class":74,"line":33979},[72,44775,34000],{"class":621},[72,44777,44778],{"class":74,"line":33985},[72,44779,34006],{"class":621},[72,44781,44782,44784,44786,44788,44790,44792,44794,44796,44798],{"class":74,"line":33991},[72,44783,34012],{"class":82},[72,44785,34015],{"class":366},[72,44787,34018],{"class":82},[72,44789,34021],{"class":366},[72,44791,932],{"class":82},[72,44793,34026],{"class":5642},[72,44795,609],{"class":78},[72,44797,34031],{"class":366},[72,44799,570],{"class":82},[72,44801,44802,44804,44806,44808,44810,44812,44814,44816,44818],{"class":74,"line":33997},[72,44803,34012],{"class":82},[72,44805,34015],{"class":366},[72,44807,34043],{"class":82},[72,44809,34046],{"class":366},[72,44811,932],{"class":82},[72,44813,34026],{"class":5642},[72,44815,609],{"class":78},[72,44817,34055],{"class":366},[72,44819,570],{"class":82},[72,44821,44822],{"class":74,"line":34003},[72,44823,34063],{"class":621},[72,44825,44826],{"class":74,"line":34009},[72,44827,34069],{"class":82},[72,44829,44830],{"class":74,"line":34036},[72,44831,34075],{"class":621},[72,44833,44834,44836,44838],{"class":74,"line":34060},[72,44835,34081],{"class":82},[72,44837,34084],{"class":366},[72,44839,570],{"class":82},[72,44841,44842,44844,44846],{"class":74,"line":34066},[72,44843,34092],{"class":82},[72,44845,34095],{"class":366},[72,44847,570],{"class":82},[72,44849,44850],{"class":74,"line":34072},[72,44851,34103],{"class":621},[72,44853,44854,44856,44858,44860,44862,44864,44866],{"class":74,"line":34078},[72,44855,32145],{"class":82},[72,44857,772],{"class":362},[72,44859,932],{"class":82},[72,44861,640],{"class":362},[72,44863,932],{"class":82},[72,44865,640],{"class":362},[72,44867,570],{"class":82},[72,44869,44870,44872,44874,44876,44878,44880,44882,44884,44886],{"class":74,"line":34089},[72,44871,34012],{"class":82},[72,44873,34015],{"class":366},[72,44875,34130],{"class":82},[72,44877,34021],{"class":366},[72,44879,932],{"class":82},[72,44881,34026],{"class":5642},[72,44883,609],{"class":78},[72,44885,34141],{"class":366},[72,44887,570],{"class":82},[72,44889,44890,44892,44894,44896,44898,44900,44902,44904,44906],{"class":74,"line":34100},[72,44891,34012],{"class":82},[72,44893,34015],{"class":366},[72,44895,34153],{"class":82},[72,44897,34046],{"class":366},[72,44899,932],{"class":82},[72,44901,34026],{"class":5642},[72,44903,609],{"class":78},[72,44905,34164],{"class":366},[72,44907,570],{"class":82},[72,44909,44910],{"class":74,"line":34106},[72,44911,34172],{"class":621},[72,44913,44914],{"class":74,"line":34123},[72,44915,34069],{"class":82},[72,44917,44918,44920,44922],{"class":74,"line":34146},[72,44919,34081],{"class":82},[72,44921,34015],{"class":366},[72,44923,570],{"class":82},[72,44925,44926,44928,44930],{"class":74,"line":34169},[72,44927,34092],{"class":82},[72,44929,34194],{"class":366},[72,44931,570],{"class":82},[72,44933,44934],{"class":74,"line":34175},[72,44935,34202],{"class":82},[72,44937,44938],{"class":74,"line":34180},[72,44939,2828],{"emptyLinePlaceholder":490},[72,44941,44942],{"class":74,"line":34189},[72,44943,34213],{"class":621},[72,44945,44946,44948,44950,44952,44954],{"class":74,"line":34199},[72,44947,1960],{"class":78},[72,44949,31638],{"class":362},[72,44951,3377],{"class":78},[72,44953,31643],{"class":366},[72,44955,4167],{"class":82},[72,44957,44958],{"class":74,"line":34205},[72,44959,34232],{"class":621},[72,44961,44962,44965,44967],{"class":74,"line":34210},[72,44963,44964],{"class":82},"    GoogLeNet",[72,44966,609],{"class":78},[72,44968,44969],{"class":82},"GoogLeNet(Inception)\n",[72,44971,44972,44974,44976],{"class":74,"line":34216},[72,44973,34249],{"class":82},[72,44975,609],{"class":78},[72,44977,34254],{"class":82},[72,44979,44980,44982,44984,44987,44989,44991,44993],{"class":74,"line":34229},[72,44981,33811],{"class":82},[72,44983,609],{"class":78},[72,44985,44986],{"class":82},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[72,44988,34267],{"class":5642},[72,44990,609],{"class":78},[72,44992,1505],{"class":362},[72,44994,570],{"class":82},[72,44996,44997],{"class":74,"line":34235},[72,44998,34279],{"class":82},[22,45000,45001],{"start":1608},[25,45002,40992],{},[63,45004,45006],{"className":65,"code":45005,"language":67,"meta":68,"style":68},"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",[34,45007,45008,45014,45024,45034,45038,45048,45059,45063,45067,45071,45079,45095,45105,45121,45131,45145,45149,45159,45169,45179,45185,45189,45193,45201,45205,45221,45229,45233,45237,45245,45253,45257,45261,45265,45269,45275,45279,45289,45297,45305,45309,45313,45317,45325,45329,45345,45349,45353,45357,45369,45373,45385,45389,45393,45405,45409,45419,45423,45427,45439,45443,45451,45455,45459,45467,45471,45479,45483,45487,45491,45495,45499,45515,45523,45527,45531,45579,45585,45589,45599,45607,45615,45619,45623,45627,45631,45639,45643,45659,45663,45671,45679],{"__ignoreMap":68},[72,45009,45010,45012],{"class":74,"line":75},[72,45011,79],{"class":78},[72,45013,30813],{"class":82},[72,45015,45016,45018,45020,45022],{"class":74,"line":370},[72,45017,79],{"class":78},[72,45019,31833],{"class":82},[72,45021,31801],{"class":78},[72,45023,31838],{"class":82},[72,45025,45026,45028,45030,45032],{"class":74,"line":1608},[72,45027,31155],{"class":78},[72,45029,31816],{"class":82},[72,45031,79],{"class":78},[72,45033,31821],{"class":82},[72,45035,45036],{"class":74,"line":1623},[72,45037,34340],{"class":621},[72,45039,45040,45042,45044,45046],{"class":74,"line":1629},[72,45041,31155],{"class":78},[72,45043,31786],{"class":82},[72,45045,79],{"class":78},[72,45047,31791],{"class":82},[72,45049,45050,45052,45054,45056],{"class":74,"line":1643},[72,45051,31155],{"class":78},[72,45053,32332],{"class":82},[72,45055,79],{"class":78},[72,45057,45058],{"class":82}," GoogLeNet,Inception\n",[72,45060,45061],{"class":74,"line":1649},[72,45062,2828],{"emptyLinePlaceholder":490},[72,45064,45065],{"class":74,"line":1740},[72,45066,2828],{"emptyLinePlaceholder":490},[72,45068,45069],{"class":74,"line":1746},[72,45070,34369],{"class":621},[72,45072,45073,45075,45077],{"class":74,"line":1758},[72,45074,32365],{"class":78},[72,45076,34376],{"class":358},[72,45078,32371],{"class":82},[72,45080,45081,45083,45085,45087,45089,45091,45093],{"class":74,"line":2041},[72,45082,34383],{"class":82},[72,45084,609],{"class":78},[72,45086,31873],{"class":82},[72,45088,31876],{"class":5642},[72,45090,609],{"class":78},[72,45092,31881],{"class":366},[72,45094,31884],{"class":82},[72,45096,45097,45099,45101,45103],{"class":74,"line":2046},[72,45098,34400],{"class":5642},[72,45100,609],{"class":78},[72,45102,34405],{"class":362},[72,45104,31884],{"class":82},[72,45106,45107,45109,45111,45113,45115,45117,45119],{"class":74,"line":2052},[72,45108,34412],{"class":5642},[72,45110,609],{"class":78},[72,45112,31911],{"class":82},[72,45114,31914],{"class":5642},[72,45116,609],{"class":78},[72,45118,35867],{"class":362},[72,45120,31922],{"class":82},[72,45122,45123,45125,45127,45129],{"class":74,"line":2057},[72,45124,34429],{"class":5642},[72,45126,609],{"class":78},[72,45128,31894],{"class":362},[72,45130,570],{"class":82},[72,45132,45133,45135,45137,45139,45141,45143],{"class":74,"line":2071},[72,45134,34440],{"class":82},[72,45136,609],{"class":78},[72,45138,31952],{"class":82},[72,45140,31955],{"class":5642},[72,45142,609],{"class":78},[72,45144,34451],{"class":82},[72,45146,45147],{"class":74,"line":2076},[72,45148,34456],{"class":621},[72,45150,45151,45153,45155,45157],{"class":74,"line":2082},[72,45152,34461],{"class":5642},[72,45154,609],{"class":78},[72,45156,772],{"class":362},[72,45158,31884],{"class":82},[72,45160,45161,45163,45165,45167],{"class":74,"line":2103},[72,45162,34472],{"class":5642},[72,45164,609],{"class":78},[72,45166,31894],{"class":362},[72,45168,31884],{"class":82},[72,45170,45171,45173,45175,45177],{"class":74,"line":2108},[72,45172,34483],{"class":5642},[72,45174,609],{"class":78},[72,45176,747],{"class":362},[72,45178,570],{"class":82},[72,45180,45181,45183],{"class":74,"line":2122},[72,45182,4518],{"class":78},[72,45184,34496],{"class":82},[72,45186,45187],{"class":74,"line":2127},[72,45188,2828],{"emptyLinePlaceholder":490},[72,45190,45191],{"class":74,"line":2156},[72,45192,34505],{"class":621},[72,45194,45195,45197,45199],{"class":74,"line":2161},[72,45196,32365],{"class":78},[72,45198,34512],{"class":358},[72,45200,34515],{"class":82},[72,45202,45203],{"class":74,"line":2178},[72,45204,34520],{"class":621},[72,45206,45207,45209,45211,45213,45215,45217,45219],{"class":74,"line":2183},[72,45208,31655],{"class":82},[72,45210,609],{"class":78},[72,45212,31662],{"class":366},[72,45214,2133],{"class":78},[72,45216,31667],{"class":82},[72,45218,2130],{"class":78},[72,45220,34537],{"class":366},[72,45222,45223,45225,45227],{"class":74,"line":2188},[72,45224,31707],{"class":82},[72,45226,609],{"class":78},[72,45228,32707],{"class":82},[72,45230,45231],{"class":74,"line":2193},[72,45232,2828],{"emptyLinePlaceholder":490},[72,45234,45235],{"class":74,"line":2207},[72,45236,34554],{"class":621},[72,45238,45239,45241,45243],{"class":74,"line":2212},[72,45240,34559],{"class":82},[72,45242,609],{"class":78},[72,45244,32760],{"class":362},[72,45246,45247,45249,45251],{"class":74,"line":3005},[72,45248,34568],{"class":82},[72,45250,609],{"class":78},[72,45252,3513],{"class":362},[72,45254,45255],{"class":74,"line":3019},[72,45256,2828],{"emptyLinePlaceholder":490},[72,45258,45259],{"class":74,"line":3027},[72,45260,34581],{"class":621},[72,45262,45263],{"class":74,"line":3032},[72,45264,34586],{"class":621},[72,45266,45267],{"class":74,"line":3038},[72,45268,34591],{"class":621},[72,45270,45271,45273],{"class":74,"line":3044},[72,45272,34596],{"class":78},[72,45274,33302],{"class":82},[72,45276,45277],{"class":74,"line":3049},[72,45278,34603],{"class":621},[72,45280,45281,45283,45285,45287],{"class":74,"line":8374},[72,45282,3831],{"class":78},[72,45284,34610],{"class":82},[72,45286,26465],{"class":78},[72,45288,34615],{"class":82},[72,45290,45291,45293,45295],{"class":74,"line":8398},[72,45292,34620],{"class":82},[72,45294,609],{"class":78},[72,45296,34625],{"class":82},[72,45298,45299,45301,45303],{"class":74,"line":8403},[72,45300,34630],{"class":82},[72,45302,609],{"class":78},[72,45304,34635],{"class":82},[72,45306,45307],{"class":74,"line":8409},[72,45308,34640],{"class":621},[72,45310,45311],{"class":74,"line":8436},[72,45312,33293],{"class":82},[72,45314,45315],{"class":74,"line":8441},[72,45316,34649],{"class":621},[72,45318,45319,45321,45323],{"class":74,"line":8447},[72,45320,33078],{"class":82},[72,45322,609],{"class":78},[72,45324,34658],{"class":82},[72,45326,45327],{"class":74,"line":8459},[72,45328,34663],{"class":621},[72,45330,45331,45333,45335,45337,45339,45341,45343],{"class":74,"line":8471},[72,45332,33095],{"class":82},[72,45334,609],{"class":78},[72,45336,33100],{"class":82},[72,45338,33103],{"class":5642},[72,45340,609],{"class":78},[72,45342,772],{"class":362},[72,45344,570],{"class":82},[72,45346,45347],{"class":74,"line":8483},[72,45348,34684],{"class":621},[72,45350,45351],{"class":74,"line":10142},[72,45352,34689],{"class":621},[72,45354,45355],{"class":74,"line":10167},[72,45356,34694],{"class":621},[72,45358,45359,45361,45363,45365,45367],{"class":74,"line":10190},[72,45360,34699],{"class":82},[72,45362,9903],{"class":78},[72,45364,33205],{"class":82},[72,45366,3377],{"class":78},[72,45368,34708],{"class":82},[72,45370,45371],{"class":74,"line":10214},[72,45372,34713],{"class":621},[72,45374,45375,45377,45379,45381,45383],{"class":74,"line":10219},[72,45376,34718],{"class":82},[72,45378,9903],{"class":78},[72,45380,34723],{"class":82},[72,45382,747],{"class":362},[72,45384,570],{"class":82},[72,45386,45387],{"class":74,"line":10224},[72,45388,2828],{"emptyLinePlaceholder":490},[72,45390,45391],{"class":74,"line":10229},[72,45392,34736],{"class":621},[72,45394,45395,45397,45399,45401,45403],{"class":74,"line":10238},[72,45396,34741],{"class":82},[72,45398,609],{"class":78},[72,45400,34746],{"class":82},[72,45402,1138],{"class":78},[72,45404,34751],{"class":82},[72,45406,45407],{"class":74,"line":10243},[72,45408,34756],{"class":621},[72,45410,45411,45413,45415,45417],{"class":74,"line":10249},[72,45412,32869],{"class":362},[72,45414,564],{"class":82},[72,45416,34765],{"class":366},[72,45418,34768],{"class":82},[72,45420,45421],{"class":74,"line":10270},[72,45422,2828],{"emptyLinePlaceholder":490},[72,45424,45425],{"class":74,"line":10276},[72,45426,34777],{"class":621},[72,45428,45429,45431,45433,45435,45437],{"class":74,"line":10290},[72,45430,1960],{"class":78},[72,45432,31638],{"class":362},[72,45434,3377],{"class":78},[72,45436,31643],{"class":366},[72,45438,4167],{"class":82},[72,45440,45441],{"class":74,"line":10296},[72,45442,34794],{"class":621},[72,45444,45445,45447,45449],{"class":74,"line":10323},[72,45446,31707],{"class":82},[72,45448,609],{"class":78},[72,45450,44969],{"class":82},[72,45452,45453],{"class":74,"line":10332},[72,45454,34807],{"class":621},[72,45456,45457],{"class":74,"line":10338},[72,45458,34812],{"class":621},[72,45460,45461,45463,45465],{"class":74,"line":10346},[72,45462,34817],{"class":82},[72,45464,34820],{"class":366},[72,45466,30915],{"class":82},[72,45468,45469],{"class":74,"line":10351},[72,45470,34827],{"class":621},[72,45472,45473,45475,45477],{"class":74,"line":17030},[72,45474,34440],{"class":82},[72,45476,609],{"class":78},[72,45478,34836],{"class":82},[72,45480,45481],{"class":74,"line":17036},[72,45482,34841],{"class":621},[72,45484,45485],{"class":74,"line":17059},[72,45486,34846],{"class":82},[72,45488,45489],{"class":74,"line":17065},[72,45490,2828],{"emptyLinePlaceholder":490},[72,45492,45493],{"class":74,"line":17088},[72,45494,34855],{"class":621},[72,45496,45497],{"class":74,"line":17102},[72,45498,34860],{"class":621},[72,45500,45501,45503,45505,45507,45509,45511,45513],{"class":74,"line":17122},[72,45502,31655],{"class":82},[72,45504,609],{"class":78},[72,45506,31662],{"class":366},[72,45508,2133],{"class":78},[72,45510,31667],{"class":82},[72,45512,2130],{"class":78},[72,45514,34537],{"class":366},[72,45516,45517,45519,45521],{"class":74,"line":17128},[72,45518,31707],{"class":82},[72,45520,609],{"class":78},[72,45522,32707],{"class":82},[72,45524,45525],{"class":74,"line":17139},[72,45526,34889],{"class":621},[72,45528,45529],{"class":74,"line":17162},[72,45530,34894],{"class":621},[72,45532,45533,45535,45537,45539,45541,45543,45545,45547,45549,45551,45553,45555,45557,45559,45561,45563,45565,45567,45569,45571,45573,45575,45577],{"class":74,"line":17184},[72,45534,34899],{"class":82},[72,45536,609],{"class":78},[72,45538,1444],{"class":82},[72,45540,34906],{"class":366},[72,45542,932],{"class":82},[72,45544,34911],{"class":366},[72,45546,932],{"class":82},[72,45548,34916],{"class":366},[72,45550,932],{"class":82},[72,45552,34921],{"class":366},[72,45554,932],{"class":82},[72,45556,34926],{"class":366},[72,45558,932],{"class":82},[72,45560,34931],{"class":366},[72,45562,932],{"class":82},[72,45564,34936],{"class":366},[72,45566,932],{"class":82},[72,45568,34941],{"class":366},[72,45570,932],{"class":82},[72,45572,34946],{"class":366},[72,45574,932],{"class":82},[72,45576,34951],{"class":366},[72,45578,33664],{"class":82},[72,45580,45581,45583],{"class":74,"line":17189},[72,45582,34596],{"class":78},[72,45584,33302],{"class":82},[72,45586,45587],{"class":74,"line":17195},[72,45588,34964],{"class":621},[72,45590,45591,45593,45595,45597],{"class":74,"line":17209},[72,45592,3831],{"class":78},[72,45594,34971],{"class":82},[72,45596,26465],{"class":78},[72,45598,34615],{"class":82},[72,45600,45601,45603,45605],{"class":74,"line":17222},[72,45602,33028],{"class":82},[72,45604,609],{"class":78},[72,45606,33033],{"class":82},[72,45608,45609,45611,45613],{"class":74,"line":17227},[72,45610,33043],{"class":82},[72,45612,609],{"class":78},[72,45614,33048],{"class":82},[72,45616,45617],{"class":74,"line":17241},[72,45618,2828],{"emptyLinePlaceholder":490},[72,45620,45621],{"class":74,"line":17246},[72,45622,35000],{"class":621},[72,45624,45625],{"class":74,"line":17252},[72,45626,33293],{"class":82},[72,45628,45629],{"class":74,"line":17257},[72,45630,35009],{"class":621},[72,45632,45633,45635,45637],{"class":74,"line":17271},[72,45634,33078],{"class":82},[72,45636,609],{"class":78},[72,45638,33083],{"class":82},[72,45640,45641],{"class":74,"line":17276},[72,45642,35022],{"class":621},[72,45644,45645,45647,45649,45651,45653,45655,45657],{"class":74,"line":17281},[72,45646,33095],{"class":82},[72,45648,609],{"class":78},[72,45650,33100],{"class":82},[72,45652,33103],{"class":5642},[72,45654,609],{"class":78},[72,45656,772],{"class":362},[72,45658,570],{"class":82},[72,45660,45661],{"class":74,"line":17295},[72,45662,35043],{"class":621},[72,45664,45665,45667,45669],{"class":74,"line":17307},[72,45666,35048],{"class":82},[72,45668,609],{"class":78},[72,45670,35053],{"class":82},[72,45672,45673,45675,45677],{"class":74,"line":17312},[72,45674,35058],{"class":82},[72,45676,609],{"class":78},[72,45678,35063],{"class":82},[72,45680,45681,45683,45685,45687,45689,45691,45693,45695],{"class":74,"line":17325},[72,45682,35068],{"class":362},[72,45684,564],{"class":82},[72,45686,35073],{"class":366},[72,45688,35076],{"class":82},[72,45690,35079],{"class":366},[72,45692,932],{"class":82},[72,45694,35084],{"class":366},[72,45696,35087],{"class":82},[531,45698,45700],{"id":45699},"_24训练自己的数据集","2.4.训练自己的数据集",[15,45702,45703],{},"猫狗分类任务",[15,45705,45706],{},"划分数据集和验证集",[63,45708,45710],{"className":65,"code":45709,"language":67,"meta":68,"style":68},"# 创建脚本，用于划分数据集和验证集\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",[34,45711,45712,45717,45724,45729,45740,45747,45751,45761,45775,45784,45788,45793,45803,45823,45827,45832,45842,45853,45866,45870,45875,45884,45894,45905,45909,45914,45924,45928,45933,45938,45943,45948,45953,45957,45967,45994,46007,46019,46046,46051,46056,46070,46075,46087,46102,46117,46125,46129,46134,46140,46152,46165,46170,46175,46180,46230,46236,46240],{"__ignoreMap":68},[72,45713,45714],{"class":74,"line":75},[72,45715,45716],{"class":621},"# 创建脚本，用于划分数据集和验证集\n",[72,45718,45719,45721],{"class":74,"line":370},[72,45720,79],{"class":78},[72,45722,45723],{"class":82}," os\n",[72,45725,45726],{"class":74,"line":1608},[72,45727,45728],{"class":621},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[72,45730,45731,45733,45736,45738],{"class":74,"line":1623},[72,45732,31155],{"class":78},[72,45734,45735],{"class":82}," shutil ",[72,45737,79],{"class":78},[72,45739,32240],{"class":82},[72,45741,45742,45744],{"class":74,"line":1629},[72,45743,79],{"class":78},[72,45745,45746],{"class":82}," random\n",[72,45748,45749],{"class":74,"line":1643},[72,45750,2828],{"emptyLinePlaceholder":490},[72,45752,45753,45755,45758],{"class":74,"line":1649},[72,45754,32365],{"class":78},[72,45756,45757],{"class":358}," mkfile",[72,45759,45760],{"class":82},"(file):\n",[72,45762,45763,45765,45767,45770,45773],{"class":74,"line":1740},[72,45764,3529],{"class":78},[72,45766,39348],{"class":78},[72,45768,45769],{"class":82}," os.path.exists(",[72,45771,45772],{"class":5642},"file",[72,45774,31204],{"class":82},[72,45776,45777,45780,45782],{"class":74,"line":1746},[72,45778,45779],{"class":82},"        os.makedirs(",[72,45781,45772],{"class":5642},[72,45783,570],{"class":82},[72,45785,45786],{"class":74,"line":1758},[72,45787,2828],{"emptyLinePlaceholder":490},[72,45789,45790],{"class":74,"line":2041},[72,45791,45792],{"class":621},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[72,45794,45795,45798,45800],{"class":74,"line":2046},[72,45796,45797],{"class":82},"file_path",[72,45799,609],{"class":78},[72,45801,45802],{"class":366},"'data_cat_dog'\n",[72,45804,45805,45808,45810,45813,45815,45818,45820],{"class":74,"line":2052},[72,45806,45807],{"class":82},"flower_class",[72,45809,609],{"class":78},[72,45811,45812],{"class":82},"[cla ",[72,45814,3453],{"class":78},[72,45816,45817],{"class":82}," cla ",[72,45819,26465],{"class":78},[72,45821,45822],{"class":82}," os.listdir(file_path)]\n",[72,45824,45825],{"class":74,"line":2057},[72,45826,2828],{"emptyLinePlaceholder":490},[72,45828,45829],{"class":74,"line":2071},[72,45830,45831],{"class":621},"# 创建训练集train文件夹\n",[72,45833,45834,45837,45840],{"class":74,"line":2076},[72,45835,45836],{"class":82},"mkfile(",[72,45838,45839],{"class":366},"'data\u002Ftrain'",[72,45841,570],{"class":82},[72,45843,45844,45846,45848,45850],{"class":74,"line":2082},[72,45845,3453],{"class":78},[72,45847,45817],{"class":82},[72,45849,26465],{"class":78},[72,45851,45852],{"class":82}," flower_class:\n",[72,45854,45855,45858,45861,45863],{"class":74,"line":2103},[72,45856,45857],{"class":82},"    mkfile(",[72,45859,45860],{"class":366},"'data\u002Ftrain\u002F'",[72,45862,1035],{"class":78},[72,45864,45865],{"class":82},"cla)\n",[72,45867,45868],{"class":74,"line":2108},[72,45869,2828],{"emptyLinePlaceholder":490},[72,45871,45872],{"class":74,"line":2122},[72,45873,45874],{"class":621},"# 创建验证集val文件夹\n",[72,45876,45877,45879,45882],{"class":74,"line":2127},[72,45878,45836],{"class":82},[72,45880,45881],{"class":366},"'data\u002Ftest'",[72,45883,570],{"class":82},[72,45885,45886,45888,45890,45892],{"class":74,"line":2156},[72,45887,3453],{"class":78},[72,45889,45817],{"class":82},[72,45891,26465],{"class":78},[72,45893,45852],{"class":82},[72,45895,45896,45898,45901,45903],{"class":74,"line":2161},[72,45897,45857],{"class":82},[72,45899,45900],{"class":366},"'data\u002Ftest\u002F'",[72,45902,1035],{"class":78},[72,45904,45865],{"class":82},[72,45906,45907],{"class":74,"line":2178},[72,45908,2828],{"emptyLinePlaceholder":490},[72,45910,45911],{"class":74,"line":2183},[72,45912,45913],{"class":621},"# 划分比例，训练集：测试集=9：1\n",[72,45915,45916,45919,45921],{"class":74,"line":2188},[72,45917,45918],{"class":82},"split_rate",[72,45920,609],{"class":78},[72,45922,45923],{"class":362},"0.1\n",[72,45925,45926],{"class":74,"line":2193},[72,45927,2828],{"emptyLinePlaceholder":490},[72,45929,45930],{"class":74,"line":2207},[72,45931,45932],{"class":621},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[72,45934,45935],{"class":74,"line":2212},[72,45936,45937],{"class":621},"# cla_path：当前类别的原始图片路径\n",[72,45939,45940],{"class":74,"line":3005},[72,45941,45942],{"class":621},"# images：当前类别下所有图片的文件名列表\n",[72,45944,45945],{"class":74,"line":3019},[72,45946,45947],{"class":621},"# num：该类别图片总数\n",[72,45949,45950],{"class":74,"line":3027},[72,45951,45952],{"class":621},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[72,45954,45955],{"class":74,"line":3032},[72,45956,2828],{"emptyLinePlaceholder":490},[72,45958,45959,45961,45963,45965],{"class":74,"line":3038},[72,45960,3453],{"class":78},[72,45962,45817],{"class":82},[72,45964,26465],{"class":78},[72,45966,45852],{"class":82},[72,45968,45969,45972,45974,45977,45979,45982,45985,45987,45989,45991],{"class":74,"line":3044},[72,45970,45971],{"class":82},"    cla_path ",[72,45973,609],{"class":78},[72,45975,45976],{"class":82}," file_path ",[72,45978,1035],{"class":78},[72,45980,45981],{"class":366}," '\u002F'",[72,45983,45984],{"class":78}," +",[72,45986,45817],{"class":82},[72,45988,1035],{"class":78},[72,45990,45981],{"class":366},[72,45992,45993],{"class":621},"  # 某一类别的子目录\n",[72,45995,45996,45999,46001,46004],{"class":74,"line":3049},[72,45997,45998],{"class":82},"    images ",[72,46000,609],{"class":78},[72,46002,46003],{"class":82}," os.listdir(cla_path)  ",[72,46005,46006],{"class":621},"# iamges 列表存储了该目录下所有图像的名称\n",[72,46008,46009,46012,46014,46016],{"class":74,"line":8374},[72,46010,46011],{"class":82},"    num ",[72,46013,609],{"class":78},[72,46015,7757],{"class":362},[72,46017,46018],{"class":82},"(images)\n",[72,46020,46021,46024,46026,46029,46031,46033,46035,46038,46040,46043],{"class":74,"line":8398},[72,46022,46023],{"class":82},"    eval_index ",[72,46025,609],{"class":78},[72,46027,46028],{"class":82}," random.sample(images, ",[72,46030,1047],{"class":5642},[72,46032,609],{"class":78},[72,46034,567],{"class":362},[72,46036,46037],{"class":82},"(num ",[72,46039,1009],{"class":78},[72,46041,46042],{"class":82}," split_rate))  ",[72,46044,46045],{"class":621},"# 从images列表中随机抽取 k 个图像名称\n",[72,46047,46048],{"class":74,"line":8403},[72,46049,46050],{"class":621},"    # 遍历该类别下的所有图片\n",[72,46052,46053],{"class":74,"line":8409},[72,46054,46055],{"class":621},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[72,46057,46058,46060,46063,46065,46067],{"class":74,"line":8436},[72,46059,3629],{"class":78},[72,46061,46062],{"class":82}," index, image ",[72,46064,26465],{"class":78},[72,46066,32024],{"class":362},[72,46068,46069],{"class":82},"(images):\n",[72,46071,46072],{"class":74,"line":8441},[72,46073,46074],{"class":621},"        # eval_index 中保存验证集val的图像名称\n",[72,46076,46077,46079,46082,46084],{"class":74,"line":8447},[72,46078,2925],{"class":78},[72,46080,46081],{"class":82}," image ",[72,46083,26465],{"class":78},[72,46085,46086],{"class":82}," eval_index:\n",[72,46088,46089,46092,46094,46097,46099],{"class":74,"line":8459},[72,46090,46091],{"class":82},"            image_path ",[72,46093,609],{"class":78},[72,46095,46096],{"class":82}," cla_path ",[72,46098,1035],{"class":78},[72,46100,46101],{"class":82}," image\n",[72,46103,46104,46107,46109,46112,46114],{"class":74,"line":8471},[72,46105,46106],{"class":82},"            new_path ",[72,46108,609],{"class":78},[72,46110,46111],{"class":366}," 'data\u002Ftest\u002F'",[72,46113,45984],{"class":78},[72,46115,46116],{"class":82}," cla\n",[72,46118,46119,46122],{"class":74,"line":8483},[72,46120,46121],{"class":82},"            copy(image_path, new_path)  ",[72,46123,46124],{"class":621},"# 将选中的图像复制到新路径\n",[72,46126,46127],{"class":74,"line":10142},[72,46128,2828],{"emptyLinePlaceholder":490},[72,46130,46131],{"class":74,"line":10167},[72,46132,46133],{"class":621},"        # 其余的图像保存在训练集train中\n",[72,46135,46136,46138],{"class":74,"line":10190},[72,46137,2962],{"class":78},[72,46139,4167],{"class":82},[72,46141,46142,46144,46146,46148,46150],{"class":74,"line":10214},[72,46143,46091],{"class":82},[72,46145,609],{"class":78},[72,46147,46096],{"class":82},[72,46149,1035],{"class":78},[72,46151,46101],{"class":82},[72,46153,46154,46156,46158,46161,46163],{"class":74,"line":10219},[72,46155,46106],{"class":82},[72,46157,609],{"class":78},[72,46159,46160],{"class":366}," 'data\u002Ftrain\u002F'",[72,46162,45984],{"class":78},[72,46164,46116],{"class":82},[72,46166,46167],{"class":74,"line":10224},[72,46168,46169],{"class":82},"            copy(image_path, new_path)\n",[72,46171,46172],{"class":74,"line":10229},[72,46173,46174],{"class":621},"            # 打印进度条信息\n",[72,46176,46177],{"class":74,"line":10238},[72,46178,46179],{"class":621},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[72,46181,46182,46184,46186,46188,46191,46193,46195,46198,46200,46202,46204,46207,46210,46212,46214,46217,46220,46222,46224,46227],{"class":74,"line":10243},[72,46183,32869],{"class":362},[72,46185,564],{"class":82},[72,46187,805],{"class":366},[72,46189,46190],{"class":362},"\\r",[72,46192,1444],{"class":366},[72,46194,32877],{"class":362},[72,46196,46197],{"class":366},"] processing [",[72,46199,32877],{"class":362},[72,46201,1138],{"class":366},[72,46203,32877],{"class":362},[72,46205,46206],{"class":366},"]\"",[72,46208,46209],{"class":82},".format(cla, index ",[72,46211,1035],{"class":78},[72,46213,25540],{"class":362},[72,46215,46216],{"class":82},", num), ",[72,46218,46219],{"class":5642},"end",[72,46221,609],{"class":78},[72,46223,8078],{"class":366},[72,46225,46226],{"class":82},")  ",[72,46228,46229],{"class":621},"# processing bar\n",[72,46231,46232,46234],{"class":74,"line":10249},[72,46233,31717],{"class":362},[72,46235,2404],{"class":82},[72,46237,46238],{"class":74,"line":10270},[72,46239,2828],{"emptyLinePlaceholder":490},[72,46241,46242,46244,46246,46249],{"class":74,"line":10276},[72,46243,30833],{"class":362},[72,46245,564],{"class":82},[72,46247,46248],{"class":366},"\"processing done!\"",[72,46250,570],{"class":82},[15,46252,46253],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[22423,46255,46257],{"id":46256},"_242模型代码","2.4.2.模型代码",[15,46259,46260],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[63,46262,46264],{"className":65,"code":46263,"language":67,"meta":68,"style":68},"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",[34,46265,46266,46272,46282,46292,46296,46312,46320,46334,46344,46348,46378,46382,46416,46462,46466,46500,46546,46550,46554,46588,46618,46622,46630,46644,46666,46688,46706,46710,46724,46728,46732,46748,46752,46760,46774,46784,46828,46832,46860,46864,46874,46902,46906,46942,46946,46974,46978,46988,47020,47052,47080,47084,47094,47126,47158,47190,47222,47254,47282,47286,47296,47328,47360,47372,47376,47388,47392,47396,47408,47416,47436,47440,47444,47448,47452,47456,47460,47474,47482,47490,47502,47516,47524,47528,47536,47546,47556,47566,47576,47586,47592,47596,47600,47612,47632,47640],{"__ignoreMap":68},[72,46267,46268,46270],{"class":74,"line":75},[72,46269,79],{"class":78},[72,46271,30813],{"class":82},[72,46273,46274,46276,46278,46280],{"class":74,"line":370},[72,46275,31155],{"class":78},[72,46277,31158],{"class":82},[72,46279,79],{"class":78},[72,46281,31163],{"class":82},[72,46283,46284,46286,46288,46290],{"class":74,"line":1608},[72,46285,31155],{"class":78},[72,46287,31175],{"class":82},[72,46289,79],{"class":78},[72,46291,31180],{"class":82},[72,46293,46294],{"class":74,"line":1623},[72,46295,2828],{"emptyLinePlaceholder":490},[72,46297,46298,46300,46302,46304,46306,46308,46310],{"class":74,"line":1629},[72,46299,15120],{"class":78},[72,46301,41911],{"class":358},[72,46303,564],{"class":82},[72,46305,31196],{"class":358},[72,46307,1112],{"class":82},[72,46309,31201],{"class":358},[72,46311,31204],{"class":82},[72,46313,46314,46316,46318],{"class":74,"line":1643},[72,46315,31219],{"class":78},[72,46317,31222],{"class":362},[72,46319,41930],{"class":82},[72,46321,46322,46324,46326,46328,46330,46332],{"class":74,"line":1649},[72,46323,31235],{"class":362},[72,46325,41937],{"class":82},[72,46327,31241],{"class":362},[72,46329,31244],{"class":82},[72,46331,31247],{"class":362},[72,46333,2404],{"class":82},[72,46335,46336,46338,46340,46342],{"class":74,"line":1740},[72,46337,31263],{"class":362},[72,46339,35189],{"class":82},[72,46341,609],{"class":78},[72,46343,35194],{"class":82},[72,46345,46346],{"class":74,"line":1746},[72,46347,41960],{"class":621},[72,46349,46350,46352,46354,46356,46358,46360,46362,46364,46366,46368,46370,46372,46374,46376],{"class":74,"line":1758},[72,46351,31263],{"class":362},[72,46353,41967],{"class":82},[72,46355,609],{"class":78},[72,46357,31271],{"class":82},[72,46359,31274],{"class":5642},[72,46361,609],{"class":78},[72,46363,41978],{"class":82},[72,46365,31283],{"class":5642},[72,46367,609],{"class":78},[72,46369,41985],{"class":82},[72,46371,31292],{"class":5642},[72,46373,609],{"class":78},[72,46375,772],{"class":362},[72,46377,570],{"class":82},[72,46379,46380],{"class":74,"line":2041},[72,46381,41998],{"class":621},[72,46383,46384,46386,46388,46390,46392,46394,46396,46398,46400,46402,46404,46406,46408,46410,46412,46414],{"class":74,"line":2046},[72,46385,31263],{"class":362},[72,46387,42005],{"class":82},[72,46389,609],{"class":78},[72,46391,31271],{"class":82},[72,46393,31274],{"class":5642},[72,46395,609],{"class":78},[72,46397,41978],{"class":82},[72,46399,31283],{"class":5642},[72,46401,609],{"class":78},[72,46403,42022],{"class":82},[72,46405,747],{"class":362},[72,46407,42027],{"class":82},[72,46409,31292],{"class":5642},[72,46411,609],{"class":78},[72,46413,772],{"class":362},[72,46415,570],{"class":82},[72,46417,46418,46420,46422,46424,46426,46428,46430,46432,46434,46436,46438,46440,46442,46444,46446,46448,46450,46452,46454,46456,46458,46460],{"class":74,"line":2052},[72,46419,31263],{"class":362},[72,46421,42042],{"class":82},[72,46423,609],{"class":78},[72,46425,31271],{"class":82},[72,46427,31274],{"class":5642},[72,46429,609],{"class":78},[72,46431,42022],{"class":82},[72,46433,747],{"class":362},[72,46435,42027],{"class":82},[72,46437,31283],{"class":5642},[72,46439,609],{"class":78},[72,46441,42022],{"class":82},[72,46443,772],{"class":362},[72,46445,42027],{"class":82},[72,46447,31292],{"class":5642},[72,46449,609],{"class":78},[72,46451,634],{"class":362},[72,46453,932],{"class":82},[72,46455,31301],{"class":5642},[72,46457,609],{"class":78},[72,46459,772],{"class":362},[72,46461,570],{"class":82},[72,46463,46464],{"class":74,"line":2057},[72,46465,42087],{"class":621},[72,46467,46468,46470,46472,46474,46476,46478,46480,46482,46484,46486,46488,46490,46492,46494,46496,46498],{"class":74,"line":2071},[72,46469,31263],{"class":362},[72,46471,42094],{"class":82},[72,46473,609],{"class":78},[72,46475,31271],{"class":82},[72,46477,31274],{"class":5642},[72,46479,609],{"class":78},[72,46481,41978],{"class":82},[72,46483,31283],{"class":5642},[72,46485,609],{"class":78},[72,46487,42111],{"class":82},[72,46489,747],{"class":362},[72,46491,42027],{"class":82},[72,46493,31292],{"class":5642},[72,46495,609],{"class":78},[72,46497,772],{"class":362},[72,46499,570],{"class":82},[72,46501,46502,46504,46506,46508,46510,46512,46514,46516,46518,46520,46522,46524,46526,46528,46530,46532,46534,46536,46538,46540,46542,46544],{"class":74,"line":2076},[72,46503,31263],{"class":362},[72,46505,42130],{"class":82},[72,46507,609],{"class":78},[72,46509,31271],{"class":82},[72,46511,31274],{"class":5642},[72,46513,609],{"class":78},[72,46515,42111],{"class":82},[72,46517,747],{"class":362},[72,46519,42027],{"class":82},[72,46521,31283],{"class":5642},[72,46523,609],{"class":78},[72,46525,42111],{"class":82},[72,46527,772],{"class":362},[72,46529,42027],{"class":82},[72,46531,31292],{"class":5642},[72,46533,609],{"class":78},[72,46535,873],{"class":362},[72,46537,932],{"class":82},[72,46539,31301],{"class":5642},[72,46541,609],{"class":78},[72,46543,640],{"class":362},[72,46545,570],{"class":82},[72,46547,46548],{"class":74,"line":2082},[72,46549,42175],{"class":621},[72,46551,46552],{"class":74,"line":2103},[72,46553,42180],{"class":621},[72,46555,46556,46558,46560,46562,46564,46566,46568,46570,46572,46574,46576,46578,46580,46582,46584,46586],{"class":74,"line":2108},[72,46557,31263],{"class":362},[72,46559,42187],{"class":82},[72,46561,609],{"class":78},[72,46563,35247],{"class":82},[72,46565,31292],{"class":5642},[72,46567,609],{"class":78},[72,46569,634],{"class":362},[72,46571,932],{"class":82},[72,46573,31347],{"class":5642},[72,46575,609],{"class":78},[72,46577,772],{"class":362},[72,46579,932],{"class":82},[72,46581,31301],{"class":5642},[72,46583,609],{"class":78},[72,46585,772],{"class":362},[72,46587,570],{"class":82},[72,46589,46590,46592,46594,46596,46598,46600,46602,46604,46606,46608,46610,46612,46614,46616],{"class":74,"line":2122},[72,46591,31263],{"class":362},[72,46593,42222],{"class":82},[72,46595,609],{"class":78},[72,46597,31271],{"class":82},[72,46599,31274],{"class":5642},[72,46601,609],{"class":78},[72,46603,41978],{"class":82},[72,46605,31283],{"class":5642},[72,46607,609],{"class":78},[72,46609,42239],{"class":82},[72,46611,31292],{"class":5642},[72,46613,609],{"class":78},[72,46615,772],{"class":362},[72,46617,570],{"class":82},[72,46619,46620],{"class":74,"line":2127},[72,46621,2828],{"emptyLinePlaceholder":490},[72,46623,46624,46626,46628],{"class":74,"line":2156},[72,46625,31219],{"class":78},[72,46627,31511],{"class":358},[72,46629,31514],{"class":82},[72,46631,46632,46634,46636,46638,46640,46642],{"class":74,"line":2161},[72,46633,42264],{"class":82},[72,46635,609],{"class":78},[72,46637,31241],{"class":362},[72,46639,35602],{"class":82},[72,46641,31241],{"class":362},[72,46643,42275],{"class":82},[72,46645,46646,46648,46650,46652,46654,46656,46658,46660,46662,46664],{"class":74,"line":2178},[72,46647,7511],{"class":82},[72,46649,609],{"class":78},[72,46651,31241],{"class":362},[72,46653,35602],{"class":82},[72,46655,31241],{"class":362},[72,46657,42290],{"class":82},[72,46659,31241],{"class":362},[72,46661,35602],{"class":82},[72,46663,31241],{"class":362},[72,46665,42299],{"class":82},[72,46667,46668,46670,46672,46674,46676,46678,46680,46682,46684,46686],{"class":74,"line":2183},[72,46669,42304],{"class":82},[72,46671,609],{"class":78},[72,46673,31241],{"class":362},[72,46675,35602],{"class":82},[72,46677,31241],{"class":362},[72,46679,42315],{"class":82},[72,46681,31241],{"class":362},[72,46683,35602],{"class":82},[72,46685,31241],{"class":362},[72,46687,42324],{"class":82},[72,46689,46690,46692,46694,46696,46698,46700,46702,46704],{"class":74,"line":2188},[72,46691,42329],{"class":82},[72,46693,609],{"class":78},[72,46695,31241],{"class":362},[72,46697,35602],{"class":82},[72,46699,31241],{"class":362},[72,46701,42340],{"class":82},[72,46703,31241],{"class":362},[72,46705,42345],{"class":82},[72,46707,46708],{"class":74,"line":2193},[72,46709,42350],{"class":621},[72,46711,46712,46714,46716,46718,46720,46722],{"class":74,"line":2207},[72,46713,15178],{"class":78},[72,46715,42357],{"class":82},[72,46717,33103],{"class":5642},[72,46719,609],{"class":78},[72,46721,772],{"class":362},[72,46723,570],{"class":82},[72,46725,46726],{"class":74,"line":2212},[72,46727,2828],{"emptyLinePlaceholder":490},[72,46729,46730],{"class":74,"line":3005},[72,46731,42378],{"class":621},[72,46733,46734,46736,46738,46740,46742,46744,46746],{"class":74,"line":3019},[72,46735,15120],{"class":78},[72,46737,42385],{"class":358},[72,46739,564],{"class":82},[72,46741,31196],{"class":358},[72,46743,1112],{"class":82},[72,46745,31201],{"class":358},[72,46747,31204],{"class":82},[72,46749,46750],{"class":74,"line":3027},[72,46751,42400],{"class":621},[72,46753,46754,46756,46758],{"class":74,"line":3032},[72,46755,31219],{"class":78},[72,46757,31222],{"class":362},[72,46759,42409],{"class":82},[72,46761,46762,46764,46766,46768,46770,46772],{"class":74,"line":3038},[72,46763,31235],{"class":362},[72,46765,42416],{"class":82},[72,46767,31241],{"class":362},[72,46769,31244],{"class":82},[72,46771,31247],{"class":362},[72,46773,2404],{"class":82},[72,46775,46776,46778,46780,46782],{"class":74,"line":3044},[72,46777,31263],{"class":362},[72,46779,42431],{"class":82},[72,46781,609],{"class":78},[72,46783,38427],{"class":82},[72,46785,46786,46788,46790,46792,46794,46796,46798,46800,46802,46804,46806,46808,46810,46812,46814,46816,46818,46820,46822,46824,46826],{"class":74,"line":3049},[72,46787,38432],{"class":82},[72,46789,31274],{"class":5642},[72,46791,609],{"class":78},[72,46793,634],{"class":362},[72,46795,932],{"class":82},[72,46797,31283],{"class":5642},[72,46799,609],{"class":78},[72,46801,759],{"class":362},[72,46803,932],{"class":82},[72,46805,31292],{"class":5642},[72,46807,609],{"class":78},[72,46809,923],{"class":362},[72,46811,932],{"class":82},[72,46813,31347],{"class":5642},[72,46815,609],{"class":78},[72,46817,640],{"class":362},[72,46819,932],{"class":82},[72,46821,31301],{"class":5642},[72,46823,609],{"class":78},[72,46825,634],{"class":362},[72,46827,38465],{"class":82},[72,46829,46830],{"class":74,"line":8374},[72,46831,38470],{"class":82},[72,46833,46834,46836,46838,46840,46842,46844,46846,46848,46850,46852,46854,46856,46858],{"class":74,"line":8398},[72,46835,38515],{"class":82},[72,46837,31292],{"class":5642},[72,46839,609],{"class":78},[72,46841,634],{"class":362},[72,46843,932],{"class":82},[72,46845,31347],{"class":5642},[72,46847,609],{"class":78},[72,46849,640],{"class":362},[72,46851,932],{"class":82},[72,46853,31301],{"class":5642},[72,46855,609],{"class":78},[72,46857,772],{"class":362},[72,46859,570],{"class":82},[72,46861,46862],{"class":74,"line":8403},[72,46863,38544],{"class":82},[72,46865,46866,46868,46870,46872],{"class":74,"line":8409},[72,46867,31263],{"class":362},[72,46869,42522],{"class":82},[72,46871,609],{"class":78},[72,46873,38427],{"class":82},[72,46875,46876,46878,46880,46882,46884,46886,46888,46890,46892,46894,46896,46898,46900],{"class":74,"line":8436},[72,46877,38432],{"class":82},[72,46879,31274],{"class":5642},[72,46881,609],{"class":78},[72,46883,759],{"class":362},[72,46885,932],{"class":82},[72,46887,31283],{"class":5642},[72,46889,609],{"class":78},[72,46891,759],{"class":362},[72,46893,932],{"class":82},[72,46895,31292],{"class":5642},[72,46897,609],{"class":78},[72,46899,772],{"class":362},[72,46901,38465],{"class":82},[72,46903,46904],{"class":74,"line":8441},[72,46905,38470],{"class":82},[72,46907,46908,46910,46912,46914,46916,46918,46920,46922,46924,46926,46928,46930,46932,46934,46936,46938,46940],{"class":74,"line":8447},[72,46909,38432],{"class":82},[72,46911,31274],{"class":5642},[72,46913,609],{"class":78},[72,46915,759],{"class":362},[72,46917,932],{"class":82},[72,46919,31283],{"class":5642},[72,46921,609],{"class":78},[72,46923,42577],{"class":362},[72,46925,932],{"class":82},[72,46927,31292],{"class":5642},[72,46929,609],{"class":78},[72,46931,634],{"class":362},[72,46933,932],{"class":82},[72,46935,31301],{"class":5642},[72,46937,609],{"class":78},[72,46939,772],{"class":362},[72,46941,38465],{"class":82},[72,46943,46944],{"class":74,"line":8459},[72,46945,38470],{"class":82},[72,46947,46948,46950,46952,46954,46956,46958,46960,46962,46964,46966,46968,46970,46972],{"class":74,"line":8471},[72,46949,38515],{"class":82},[72,46951,31292],{"class":5642},[72,46953,609],{"class":78},[72,46955,634],{"class":362},[72,46957,932],{"class":82},[72,46959,31347],{"class":5642},[72,46961,609],{"class":78},[72,46963,640],{"class":362},[72,46965,932],{"class":82},[72,46967,31301],{"class":5642},[72,46969,609],{"class":78},[72,46971,772],{"class":362},[72,46973,570],{"class":82},[72,46975,46976],{"class":74,"line":8483},[72,46977,38544],{"class":82},[72,46979,46980,46982,46984,46986],{"class":74,"line":10142},[72,46981,31263],{"class":362},[72,46983,42638],{"class":82},[72,46985,609],{"class":78},[72,46987,38427],{"class":82},[72,46989,46990,46992,46994,46996,46998,47000,47002,47004,47006,47008,47010,47012,47014,47016,47018],{"class":74,"line":10167},[72,46991,42647],{"class":82},[72,46993,42577],{"class":362},[72,46995,932],{"class":82},[72,46997,759],{"class":362},[72,46999,42656],{"class":82},[72,47001,765],{"class":362},[72,47003,932],{"class":82},[72,47005,32488],{"class":362},[72,47007,42665],{"class":82},[72,47009,1155],{"class":362},[72,47011,932],{"class":82},[72,47013,753],{"class":362},[72,47015,42674],{"class":82},[72,47017,753],{"class":362},[72,47019,38465],{"class":82},[72,47021,47022,47024,47026,47028,47030,47032,47034,47036,47038,47040,47042,47044,47046,47048,47050],{"class":74,"line":10190},[72,47023,42647],{"class":82},[72,47025,35288],{"class":362},[72,47027,932],{"class":82},[72,47029,32488],{"class":362},[72,47031,42656],{"class":82},[72,47033,32488],{"class":362},[72,47035,932],{"class":82},[72,47037,42577],{"class":362},[72,47039,42665],{"class":82},[72,47041,753],{"class":362},[72,47043,932],{"class":82},[72,47045,765],{"class":362},[72,47047,42674],{"class":82},[72,47049,759],{"class":362},[72,47051,38465],{"class":82},[72,47053,47054,47056,47058,47060,47062,47064,47066,47068,47070,47072,47074,47076,47078],{"class":74,"line":10214},[72,47055,38515],{"class":82},[72,47057,31292],{"class":5642},[72,47059,609],{"class":78},[72,47061,634],{"class":362},[72,47063,932],{"class":82},[72,47065,31347],{"class":5642},[72,47067,609],{"class":78},[72,47069,640],{"class":362},[72,47071,932],{"class":82},[72,47073,31301],{"class":5642},[72,47075,609],{"class":78},[72,47077,772],{"class":362},[72,47079,570],{"class":82},[72,47081,47082],{"class":74,"line":10219},[72,47083,38544],{"class":82},[72,47085,47086,47088,47090,47092],{"class":74,"line":10224},[72,47087,31263],{"class":362},[72,47089,42749],{"class":82},[72,47091,609],{"class":78},[72,47093,38427],{"class":82},[72,47095,47096,47098,47100,47102,47104,47106,47108,47110,47112,47114,47116,47118,47120,47122,47124],{"class":74,"line":10229},[72,47097,42647],{"class":82},[72,47099,42760],{"class":362},[72,47101,932],{"class":82},[72,47103,42577],{"class":362},[72,47105,42656],{"class":82},[72,47107,765],{"class":362},[72,47109,932],{"class":82},[72,47111,42773],{"class":362},[72,47113,42665],{"class":82},[72,47115,1155],{"class":362},[72,47117,932],{"class":82},[72,47119,1161],{"class":362},[72,47121,42674],{"class":82},[72,47123,759],{"class":362},[72,47125,38465],{"class":82},[72,47127,47128,47130,47132,47134,47136,47138,47140,47142,47144,47146,47148,47150,47152,47154,47156],{"class":74,"line":10238},[72,47129,42647],{"class":82},[72,47131,38875],{"class":362},[72,47133,932],{"class":82},[72,47135,21474],{"class":362},[72,47137,42656],{"class":82},[72,47139,1172],{"class":362},[72,47141,932],{"class":82},[72,47143,31919],{"class":362},[72,47145,42665],{"class":82},[72,47147,1354],{"class":362},[72,47149,932],{"class":82},[72,47151,759],{"class":362},[72,47153,42674],{"class":82},[72,47155,759],{"class":362},[72,47157,38465],{"class":82},[72,47159,47160,47162,47164,47166,47168,47170,47172,47174,47176,47178,47180,47182,47184,47186,47188],{"class":74,"line":10243},[72,47161,42647],{"class":82},[72,47163,38875],{"class":362},[72,47165,932],{"class":82},[72,47167,32488],{"class":362},[72,47169,42656],{"class":82},[72,47171,32488],{"class":362},[72,47173,932],{"class":82},[72,47175,35288],{"class":362},[72,47177,42665],{"class":82},[72,47179,1354],{"class":362},[72,47181,932],{"class":82},[72,47183,759],{"class":362},[72,47185,42674],{"class":82},[72,47187,759],{"class":362},[72,47189,38465],{"class":82},[72,47191,47192,47194,47196,47198,47200,47202,47204,47206,47208,47210,47212,47214,47216,47218,47220],{"class":74,"line":10249},[72,47193,42647],{"class":82},[72,47195,38875],{"class":362},[72,47197,932],{"class":82},[72,47199,1172],{"class":362},[72,47201,42656],{"class":82},[72,47203,32488],{"class":362},[72,47205,932],{"class":82},[72,47207,42870],{"class":362},[72,47209,42665],{"class":82},[72,47211,753],{"class":362},[72,47213,932],{"class":82},[72,47215,759],{"class":362},[72,47217,42674],{"class":82},[72,47219,759],{"class":362},[72,47221,38465],{"class":82},[72,47223,47224,47226,47228,47230,47232,47234,47236,47238,47240,47242,47244,47246,47248,47250,47252],{"class":74,"line":10270},[72,47225,42647],{"class":82},[72,47227,42891],{"class":362},[72,47229,932],{"class":82},[72,47231,35288],{"class":362},[72,47233,42656],{"class":82},[72,47235,21474],{"class":362},[72,47237,932],{"class":82},[72,47239,42904],{"class":362},[72,47241,42665],{"class":82},[72,47243,753],{"class":362},[72,47245,932],{"class":82},[72,47247,32488],{"class":362},[72,47249,42674],{"class":82},[72,47251,32488],{"class":362},[72,47253,38465],{"class":82},[72,47255,47256,47258,47260,47262,47264,47266,47268,47270,47272,47274,47276,47278,47280],{"class":74,"line":10276},[72,47257,38515],{"class":82},[72,47259,31292],{"class":5642},[72,47261,609],{"class":78},[72,47263,634],{"class":362},[72,47265,932],{"class":82},[72,47267,31347],{"class":5642},[72,47269,609],{"class":78},[72,47271,640],{"class":362},[72,47273,932],{"class":82},[72,47275,31301],{"class":5642},[72,47277,609],{"class":78},[72,47279,772],{"class":362},[72,47281,570],{"class":82},[72,47283,47284],{"class":74,"line":10290},[72,47285,38544],{"class":82},[72,47287,47288,47290,47292,47294],{"class":74,"line":10296},[72,47289,31263],{"class":362},[72,47291,42957],{"class":82},[72,47293,609],{"class":78},[72,47295,38427],{"class":82},[72,47297,47298,47300,47302,47304,47306,47308,47310,47312,47314,47316,47318,47320,47322,47324,47326],{"class":74,"line":10323},[72,47299,42647],{"class":82},[72,47301,42968],{"class":362},[72,47303,932],{"class":82},[72,47305,35288],{"class":362},[72,47307,42656],{"class":82},[72,47309,21474],{"class":362},[72,47311,932],{"class":82},[72,47313,42904],{"class":362},[72,47315,42665],{"class":82},[72,47317,753],{"class":362},[72,47319,932],{"class":82},[72,47321,32488],{"class":362},[72,47323,42674],{"class":82},[72,47325,32488],{"class":362},[72,47327,38465],{"class":82},[72,47329,47330,47332,47334,47336,47338,47340,47342,47344,47346,47348,47350,47352,47354,47356,47358],{"class":74,"line":10332},[72,47331,42647],{"class":82},[72,47333,42968],{"class":362},[72,47335,932],{"class":82},[72,47337,35358],{"class":362},[72,47339,42656],{"class":82},[72,47341,42577],{"class":362},[72,47343,932],{"class":82},[72,47345,35358],{"class":362},[72,47347,42665],{"class":82},[72,47349,1161],{"class":362},[72,47351,932],{"class":82},[72,47353,32488],{"class":362},[72,47355,42674],{"class":82},[72,47357,32488],{"class":362},[72,47359,38465],{"class":82},[72,47361,47362,47364,47366,47368,47370],{"class":74,"line":10338},[72,47363,43031],{"class":82},[72,47365,772],{"class":362},[72,47367,932],{"class":82},[72,47369,772],{"class":362},[72,47371,43040],{"class":82},[72,47373,47374],{"class":74,"line":10346},[72,47375,39208],{"class":82},[72,47377,47378,47380,47382,47384,47386],{"class":74,"line":10351},[72,47379,39213],{"class":82},[72,47381,43051],{"class":362},[72,47383,932],{"class":82},[72,47385,640],{"class":362},[72,47387,570],{"class":82},[72,47389,47390],{"class":74,"line":17030},[72,47391,38544],{"class":82},[72,47393,47394],{"class":74,"line":17036},[72,47395,43066],{"class":621},[72,47397,47398,47400,47402,47404,47406],{"class":74,"line":17059},[72,47399,3831],{"class":78},[72,47401,39286],{"class":82},[72,47403,26465],{"class":78},[72,47405,39291],{"class":362},[72,47407,39294],{"class":82},[72,47409,47410,47412,47414],{"class":74,"line":17065},[72,47411,5070],{"class":78},[72,47413,39306],{"class":362},[72,47415,39309],{"class":82},[72,47417,47418,47420,47422,47424,47426,47428,47430,47432,47434],{"class":74,"line":17088},[72,47419,39319],{"class":82},[72,47421,43093],{"class":5642},[72,47423,609],{"class":78},[72,47425,43098],{"class":366},[72,47427,932],{"class":82},[72,47429,39322],{"class":5642},[72,47431,609],{"class":78},[72,47433,39327],{"class":366},[72,47435,570],{"class":82},[72,47437,47438],{"class":74,"line":17102},[72,47439,43113],{"class":621},[72,47441,47442],{"class":74,"line":17122},[72,47443,43118],{"class":621},[72,47445,47446],{"class":74,"line":17128},[72,47447,43123],{"class":621},[72,47449,47450],{"class":74,"line":17139},[72,47451,43128],{"class":621},[72,47453,47454],{"class":74,"line":17162},[72,47455,43133],{"class":621},[72,47457,47458],{"class":74,"line":17184},[72,47459,43138],{"class":621},[72,47461,47462,47464,47466,47468,47470,47472],{"class":74,"line":17189},[72,47463,39339],{"class":78},[72,47465,39342],{"class":82},[72,47467,39345],{"class":78},[72,47469,39348],{"class":78},[72,47471,39351],{"class":362},[72,47473,4167],{"class":82},[72,47475,47476,47478,47480],{"class":74,"line":17195},[72,47477,39363],{"class":82},[72,47479,747],{"class":362},[72,47481,570],{"class":82},[72,47483,47484,47486,47488],{"class":74,"line":17209},[72,47485,43165],{"class":78},[72,47487,39306],{"class":362},[72,47489,39382],{"class":82},[72,47491,47492,47494,47496,47498,47500],{"class":74,"line":17222},[72,47493,43174],{"class":82},[72,47495,747],{"class":362},[72,47497,932],{"class":82},[72,47499,39404],{"class":362},[72,47501,570],{"class":82},[72,47503,47504,47506,47508,47510,47512,47514],{"class":74,"line":17227},[72,47505,43187],{"class":78},[72,47507,39342],{"class":82},[72,47509,39345],{"class":78},[72,47511,39348],{"class":78},[72,47513,39351],{"class":362},[72,47515,4167],{"class":82},[72,47517,47518,47520,47522],{"class":74,"line":17241},[72,47519,43202],{"class":82},[72,47521,747],{"class":362},[72,47523,570],{"class":82},[72,47525,47526],{"class":74,"line":17246},[72,47527,35583],{"class":621},[72,47529,47530,47532,47534],{"class":74,"line":17252},[72,47531,31219],{"class":78},[72,47533,31511],{"class":358},[72,47535,31514],{"class":82},[72,47537,47538,47540,47542,47544],{"class":74,"line":17257},[72,47539,31519],{"class":82},[72,47541,609],{"class":78},[72,47543,31241],{"class":362},[72,47545,43229],{"class":82},[72,47547,47548,47550,47552,47554],{"class":74,"line":17271},[72,47549,31519],{"class":82},[72,47551,609],{"class":78},[72,47553,31241],{"class":362},[72,47555,43240],{"class":82},[72,47557,47558,47560,47562,47564],{"class":74,"line":17276},[72,47559,31519],{"class":82},[72,47561,609],{"class":78},[72,47563,31241],{"class":362},[72,47565,43251],{"class":82},[72,47567,47568,47570,47572,47574],{"class":74,"line":17281},[72,47569,31519],{"class":82},[72,47571,609],{"class":78},[72,47573,31241],{"class":362},[72,47575,43262],{"class":82},[72,47577,47578,47580,47582,47584],{"class":74,"line":17295},[72,47579,31519],{"class":82},[72,47581,609],{"class":78},[72,47583,31241],{"class":362},[72,47585,43273],{"class":82},[72,47587,47588,47590],{"class":74,"line":17307},[72,47589,15178],{"class":78},[72,47591,31627],{"class":82},[72,47593,47594],{"class":74,"line":17312},[72,47595,2828],{"emptyLinePlaceholder":490},[72,47597,47598],{"class":74,"line":17325},[72,47599,43288],{"class":621},[72,47601,47602,47604,47606,47608,47610],{"class":74,"line":17330},[72,47603,1960],{"class":78},[72,47605,31638],{"class":362},[72,47607,3377],{"class":78},[72,47609,31643],{"class":366},[72,47611,4167],{"class":82},[72,47613,47614,47616,47618,47620,47622,47624,47626,47628,47630],{"class":74,"line":17335},[72,47615,31655],{"class":82},[72,47617,609],{"class":78},[72,47619,30869],{"class":82},[72,47621,31662],{"class":366},[72,47623,2133],{"class":78},[72,47625,31667],{"class":82},[72,47627,2130],{"class":78},[72,47629,30894],{"class":366},[72,47631,570],{"class":82},[72,47633,47634,47636,47638],{"class":74,"line":17340},[72,47635,31707],{"class":82},[72,47637,609],{"class":78},[72,47639,43329],{"class":82},[72,47641,47642,47644,47646,47648,47650,47652,47654,47656],{"class":74,"line":17353},[72,47643,31717],{"class":362},[72,47645,31720],{"class":82},[72,47647,772],{"class":362},[72,47649,932],{"class":82},[72,47651,31919],{"class":362},[72,47653,932],{"class":82},[72,47655,31919],{"class":362},[72,47657,31733],{"class":82},[22423,47659,47661],{"id":47660},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[15,47663,47664],{},"计算图片的均值与方差，用于训练中归一化处理操作",[63,47666,47668],{"className":65,"code":47667,"language":67,"meta":68,"style":68},"# 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",[34,47669,47670,47675,47688,47693,47699,47704,47714,47718,47723,47733,47737,47742,47752,47769,47773,47778,47790,47802,47833,47842,47852,47862,47866,47871,47886,47890,47895,47900,47905,47915,47920,47945,47949,47954,47969,47973,47986,47990,47995,48000,48005,48010,48015,48025,48035,48058,48066,48074,48082,48086,48098,48102,48107,48111,48115,48122,48142,48166,48173,48187,48192,48197,48201,48215,48219,48231],{"__ignoreMap":68},[72,47671,47672],{"class":74,"line":75},[72,47673,47674],{"class":621},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[72,47676,47677,47679,47682,47685],{"class":74,"line":370},[72,47678,31155],{"class":78},[72,47680,47681],{"class":362}," PIL",[72,47683,47684],{"class":78}," import",[72,47686,47687],{"class":82}," Image\n",[72,47689,47690],{"class":74,"line":1608},[72,47691,47692],{"class":621},"# os 用来处理文件夹和文件路径\n",[72,47694,47695,47697],{"class":74,"line":1623},[72,47696,79],{"class":78},[72,47698,45723],{"class":82},[72,47700,47701],{"class":74,"line":1629},[72,47702,47703],{"class":621},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[72,47705,47706,47708,47710,47712],{"class":74,"line":1643},[72,47707,79],{"class":78},[72,47709,31798],{"class":82},[72,47711,31801],{"class":78},[72,47713,31804],{"class":82},[72,47715,47716],{"class":74,"line":1649},[72,47717,2828],{"emptyLinePlaceholder":490},[72,47719,47720],{"class":74,"line":1740},[72,47721,47722],{"class":621},"# 文件夹路径，包含所有图片文件\n",[72,47724,47725,47728,47730],{"class":74,"line":1746},[72,47726,47727],{"class":82},"folder_path ",[72,47729,609],{"class":78},[72,47731,47732],{"class":366}," 'data_cat_dog'\n",[72,47734,47735],{"class":74,"line":1758},[72,47736,2828],{"emptyLinePlaceholder":490},[72,47738,47739],{"class":74,"line":2041},[72,47740,47741],{"class":621},"# 初始化累积变量\n",[72,47743,47744,47747,47749],{"class":74,"line":2046},[72,47745,47746],{"class":82},"total_pixels ",[72,47748,609],{"class":78},[72,47750,47751],{"class":362}," 0\n",[72,47753,47754,47757,47759,47762,47764,47766],{"class":74,"line":2052},[72,47755,47756],{"class":82},"sum_normalized_pixel_values ",[72,47758,609],{"class":78},[72,47760,47761],{"class":82}," np.zeros(",[72,47763,634],{"class":362},[72,47765,46226],{"class":82},[72,47767,47768],{"class":621},"# 如果是RGB图像，需要三个通道的均值和方差\n",[72,47770,47771],{"class":74,"line":2057},[72,47772,2828],{"emptyLinePlaceholder":490},[72,47774,47775],{"class":74,"line":2071},[72,47776,47777],{"class":621},"# 遍历文件夹中的图片文件\n",[72,47779,47780,47782,47785,47787],{"class":74,"line":2076},[72,47781,3453],{"class":78},[72,47783,47784],{"class":82}," root, dirs, files ",[72,47786,26465],{"class":78},[72,47788,47789],{"class":82}," os.walk(folder_path):\n",[72,47791,47792,47794,47797,47799],{"class":74,"line":2082},[72,47793,3629],{"class":78},[72,47795,47796],{"class":82}," filename ",[72,47798,26465],{"class":78},[72,47800,47801],{"class":82}," files:\n",[72,47803,47804,47806,47809,47812,47814,47817,47819,47822,47824,47827,47830],{"class":74,"line":2103},[72,47805,2925],{"class":78},[72,47807,47808],{"class":82}," filename.endswith((",[72,47810,47811],{"class":366},"'.jpg'",[72,47813,12861],{"class":82},[72,47815,47816],{"class":366},"'.jpeg'",[72,47818,12861],{"class":82},[72,47820,47821],{"class":366},"'.png'",[72,47823,12861],{"class":82},[72,47825,47826],{"class":366},"'.bmp'",[72,47828,47829],{"class":82},")):  ",[72,47831,47832],{"class":621},"# 可根据实际情况添加其他格式\n",[72,47834,47835,47837,47839],{"class":74,"line":2108},[72,47836,46091],{"class":82},[72,47838,609],{"class":78},[72,47840,47841],{"class":82}," os.path.join(root, filename)\n",[72,47843,47844,47847,47849],{"class":74,"line":2122},[72,47845,47846],{"class":82},"            image ",[72,47848,609],{"class":78},[72,47850,47851],{"class":82}," Image.open(image_path)\n",[72,47853,47854,47857,47859],{"class":74,"line":2127},[72,47855,47856],{"class":82},"            image_array ",[72,47858,609],{"class":78},[72,47860,47861],{"class":82}," np.array(image)\n",[72,47863,47864],{"class":74,"line":2156},[72,47865,2828],{"emptyLinePlaceholder":490},[72,47867,47868],{"class":74,"line":2161},[72,47869,47870],{"class":621},"            # 归一化像素值到0-1之间\n",[72,47872,47873,47876,47878,47881,47883],{"class":74,"line":2178},[72,47874,47875],{"class":82},"            normalized_image_array ",[72,47877,609],{"class":78},[72,47879,47880],{"class":82}," image_array ",[72,47882,1138],{"class":78},[72,47884,47885],{"class":362}," 255.0\n",[72,47887,47888],{"class":74,"line":2183},[72,47889,2828],{"emptyLinePlaceholder":490},[72,47891,47892],{"class":74,"line":2188},[72,47893,47894],{"class":621},"            # print(image_path)\n",[72,47896,47897],{"class":74,"line":2193},[72,47898,47899],{"class":621},"            # print(normalized_image_array.shape)\n",[72,47901,47902],{"class":74,"line":2207},[72,47903,47904],{"class":621},"            # 累积归一化后的像素值和像素数量\n",[72,47906,47907,47910,47912],{"class":74,"line":2212},[72,47908,47909],{"class":82},"            total_pixels ",[72,47911,9903],{"class":78},[72,47913,47914],{"class":82}," normalized_image_array.size\n",[72,47916,47917],{"class":74,"line":3005},[72,47918,47919],{"class":621},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[72,47921,47922,47925,47927,47930,47933,47935,47937,47939,47941,47943],{"class":74,"line":3019},[72,47923,47924],{"class":82},"            sum_normalized_pixel_values ",[72,47926,9903],{"class":78},[72,47928,47929],{"class":82}," np.sum(normalized_image_array, ",[72,47931,47932],{"class":5642},"axis",[72,47934,609],{"class":78},[72,47936,564],{"class":82},[72,47938,747],{"class":362},[72,47940,12861],{"class":82},[72,47942,772],{"class":362},[72,47944,30915],{"class":82},[72,47946,47947],{"class":74,"line":3027},[72,47948,2828],{"emptyLinePlaceholder":490},[72,47950,47951],{"class":74,"line":3032},[72,47952,47953],{"class":621},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[72,47955,47956,47959,47961,47964,47966],{"class":74,"line":3038},[72,47957,47958],{"class":82},"mean ",[72,47960,609],{"class":78},[72,47962,47963],{"class":82}," sum_normalized_pixel_values ",[72,47965,1138],{"class":78},[72,47967,47968],{"class":82}," total_pixels\n",[72,47970,47971],{"class":74,"line":3044},[72,47972,2828],{"emptyLinePlaceholder":490},[72,47974,47975,47978,47980,47982,47984],{"class":74,"line":3049},[72,47976,47977],{"class":82},"sum_squared_diff ",[72,47979,609],{"class":78},[72,47981,47761],{"class":82},[72,47983,634],{"class":362},[72,47985,570],{"class":82},[72,47987,47988],{"class":74,"line":8374},[72,47989,2828],{"emptyLinePlaceholder":490},[72,47991,47992],{"class":74,"line":8398},[72,47993,47994],{"class":621},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[72,47996,47997],{"class":74,"line":8403},[72,47998,47999],{"class":621},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[72,48001,48002],{"class":74,"line":8409},[72,48003,48004],{"class":621},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[72,48006,48007],{"class":74,"line":8436},[72,48008,48009],{"class":621},"# Image.open(image_path)：打开图片\n",[72,48011,48012],{"class":74,"line":8441},[72,48013,48014],{"class":621},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[72,48016,48017,48019,48021,48023],{"class":74,"line":8447},[72,48018,3453],{"class":78},[72,48020,47784],{"class":82},[72,48022,26465],{"class":78},[72,48024,47789],{"class":82},[72,48026,48027,48029,48031,48033],{"class":74,"line":8459},[72,48028,3629],{"class":78},[72,48030,47796],{"class":82},[72,48032,26465],{"class":78},[72,48034,47801],{"class":82},[72,48036,48037,48039,48041,48043,48045,48047,48049,48051,48053,48055],{"class":74,"line":8471},[72,48038,2925],{"class":78},[72,48040,47808],{"class":82},[72,48042,47811],{"class":366},[72,48044,12861],{"class":82},[72,48046,47816],{"class":366},[72,48048,12861],{"class":82},[72,48050,47821],{"class":366},[72,48052,12861],{"class":82},[72,48054,47826],{"class":366},[72,48056,48057],{"class":82},")):\n",[72,48059,48060,48062,48064],{"class":74,"line":8483},[72,48061,46091],{"class":82},[72,48063,609],{"class":78},[72,48065,47841],{"class":82},[72,48067,48068,48070,48072],{"class":74,"line":10142},[72,48069,47846],{"class":82},[72,48071,609],{"class":78},[72,48073,47851],{"class":82},[72,48075,48076,48078,48080],{"class":74,"line":10167},[72,48077,47856],{"class":82},[72,48079,609],{"class":78},[72,48081,47861],{"class":82},[72,48083,48084],{"class":74,"line":10190},[72,48085,47870],{"class":621},[72,48087,48088,48090,48092,48094,48096],{"class":74,"line":10214},[72,48089,47875],{"class":82},[72,48091,609],{"class":78},[72,48093,47880],{"class":82},[72,48095,1138],{"class":78},[72,48097,47885],{"class":362},[72,48099,48100],{"class":74,"line":10219},[72,48101,47899],{"class":621},[72,48103,48104],{"class":74,"line":10224},[72,48105,48106],{"class":621},"            # print(mean.shape)\n",[72,48108,48109],{"class":74,"line":10229},[72,48110,47894],{"class":621},[72,48112,48113],{"class":74,"line":10238},[72,48114,2828],{"emptyLinePlaceholder":490},[72,48116,48117,48120],{"class":74,"line":10243},[72,48118,48119],{"class":78},"            try",[72,48121,4167],{"class":82},[72,48123,48124,48127,48129,48132,48134,48137,48139],{"class":74,"line":10249},[72,48125,48126],{"class":82},"                diff ",[72,48128,609],{"class":78},[72,48130,48131],{"class":82}," (normalized_image_array ",[72,48133,1086],{"class":78},[72,48135,48136],{"class":82}," mean) ",[72,48138,11087],{"class":78},[72,48140,48141],{"class":362}," 2\n",[72,48143,48144,48147,48149,48152,48154,48156,48158,48160,48162,48164],{"class":74,"line":10270},[72,48145,48146],{"class":82},"                sum_squared_diff ",[72,48148,9903],{"class":78},[72,48150,48151],{"class":82}," np.sum(diff, ",[72,48153,47932],{"class":5642},[72,48155,609],{"class":78},[72,48157,564],{"class":82},[72,48159,747],{"class":362},[72,48161,12861],{"class":82},[72,48163,772],{"class":362},[72,48165,30915],{"class":82},[72,48167,48168,48171],{"class":74,"line":10276},[72,48169,48170],{"class":78},"            except",[72,48172,4167],{"class":82},[72,48174,48175,48178,48180,48182,48185],{"class":74,"line":10290},[72,48176,48177],{"class":362},"                print",[72,48179,564],{"class":82},[72,48181,615],{"class":78},[72,48183,48184],{"class":366},"\"捕获到自定义异常\"",[72,48186,570],{"class":82},[72,48188,48189],{"class":74,"line":10296},[72,48190,48191],{"class":621},"            # diff = (normalized_image_array - mean) ** 2\n",[72,48193,48194],{"class":74,"line":10323},[72,48195,48196],{"class":621},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[72,48198,48199],{"class":74,"line":10332},[72,48200,2828],{"emptyLinePlaceholder":490},[72,48202,48203,48206,48208,48211,48213],{"class":74,"line":10338},[72,48204,48205],{"class":82},"variance ",[72,48207,609],{"class":78},[72,48209,48210],{"class":82}," sum_squared_diff ",[72,48212,1138],{"class":78},[72,48214,47968],{"class":82},[72,48216,48217],{"class":74,"line":10346},[72,48218,2828],{"emptyLinePlaceholder":490},[72,48220,48221,48223,48225,48228],{"class":74,"line":10351},[72,48222,30833],{"class":362},[72,48224,564],{"class":82},[72,48226,48227],{"class":366},"\"Mean:\"",[72,48229,48230],{"class":82},", mean)\n",[72,48232,48233,48235,48237,48240],{"class":74,"line":17030},[72,48234,30833],{"class":362},[72,48236,564],{"class":82},[72,48238,48239],{"class":366},"\"Variance:\"",[72,48241,48242],{"class":82},", variance)\n",[63,48244,48246],{"className":65,"code":48245,"language":67,"meta":68,"style":68},"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",[34,48247,48248,48254,48260,48270,48276,48286,48300,48310,48320,48330,48334,48344,48354,48358,48362,48370,48375,48380,48399,48403,48408,48413,48418,48423,48464,48469,48479,48484,48497,48502,48507,48512,48517,48522,48526,48531,48536,48558,48562,48594,48608,48618,48628,48632,48642,48656,48666,48676,48686,48692,48696,48700,48704,48708,48712,48720,48740,48744,48748,48752,48756,48772,48776,48780,48788,48792,48796,48804,48808,48812,48816,48824,48828,48832,48836,48844,48848,48856,48860,48868,48872,48880,48884,48892,48896,48900,48908,48912,48916,48928,48952,48966,48970,48974,48978,48986,48990,48998,49002,49010,49014,49022,49026,49034,49038,49046,49050,49062,49066,49074,49078,49086,49090,49094,49098,49102,49110,49114,49130,49134,49142,49146,49150,49154,49158,49162,49166,49170,49186,49190,49202,49206,49218,49222,49234,49238,49246,49250,49258,49262,49266,49270,49276,49280,49288,49292,49308,49312,49320,49324,49340,49352,49356,49368,49372,49376,49384,49388,49392,49400,49404,49412,49416,49424,49428,49432,49474,49516,49520,49524,49540,49544,49560,49564,49568,49576,49580,49584,49596,49634,49638,49642,49650,49654,49668,49678,49684,49690,49696,49702,49706,49710,49716,49720,49724,49732,49736,49754,49758,49762,49766,49782,49786,49790,49794,49798,49802,49822,49842,49846,49850,49854,49862,49870,49874,49890,49910,49930,49934,49939,49948,49957,49962,49967,49972,49985,49990,49999,50008,50025],{"__ignoreMap":68},[72,48249,48250,48252],{"class":74,"line":75},[72,48251,79],{"class":78},[72,48253,32240],{"class":82},[72,48255,48256,48258],{"class":74,"line":370},[72,48257,79],{"class":78},[72,48259,32247],{"class":82},[72,48261,48262,48264,48266,48268],{"class":74,"line":1608},[72,48263,79],{"class":78},[72,48265,32258],{"class":82},[72,48267,31801],{"class":78},[72,48269,32263],{"class":82},[72,48271,48272,48274],{"class":74,"line":1623},[72,48273,79],{"class":78},[72,48275,30813],{"class":82},[72,48277,48278,48280,48282,48284],{"class":74,"line":1629},[72,48279,31155],{"class":78},[72,48281,31833],{"class":82},[72,48283,79],{"class":78},[72,48285,32280],{"class":82},[72,48287,48288,48290,48292,48294,48297],{"class":74,"line":1643},[72,48289,31155],{"class":78},[72,48291,31786],{"class":82},[72,48293,79],{"class":78},[72,48295,48296],{"class":82}," ImageFolder ",[72,48298,48299],{"class":621},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[72,48301,48302,48304,48306,48308],{"class":74,"line":1649},[72,48303,31155],{"class":78},[72,48305,31816],{"class":82},[72,48307,79],{"class":78},[72,48309,31821],{"class":82},[72,48311,48312,48314,48316,48318],{"class":74,"line":1740},[72,48313,79],{"class":78},[72,48315,31833],{"class":82},[72,48317,31801],{"class":78},[72,48319,31838],{"class":82},[72,48321,48322,48324,48326,48328],{"class":74,"line":1746},[72,48323,79],{"class":78},[72,48325,31850],{"class":82},[72,48327,31801],{"class":78},[72,48329,31855],{"class":82},[72,48331,48332],{"class":74,"line":1758},[72,48333,32325],{"class":621},[72,48335,48336,48338,48340,48342],{"class":74,"line":2041},[72,48337,31155],{"class":78},[72,48339,32332],{"class":82},[72,48341,79],{"class":78},[72,48343,43449],{"class":82},[72,48345,48346,48348,48350,48352],{"class":74,"line":2046},[72,48347,31155],{"class":78},[72,48349,31158],{"class":82},[72,48351,79],{"class":78},[72,48353,31163],{"class":82},[72,48355,48356],{"class":74,"line":2052},[72,48357,2828],{"emptyLinePlaceholder":490},[72,48359,48360],{"class":74,"line":2057},[72,48361,32360],{"class":621},[72,48363,48364,48366,48368],{"class":74,"line":2071},[72,48365,32365],{"class":78},[72,48367,32368],{"class":358},[72,48369,32371],{"class":82},[72,48371,48372],{"class":74,"line":2076},[72,48373,48374],{"class":621},"    # 导入自己的数据集，并进行数据处理\n",[72,48376,48377],{"class":74,"line":2082},[72,48378,48379],{"class":621},"    # 定义数据集的路径\n",[72,48381,48382,48385,48387,48389,48391,48393,48397],{"class":74,"line":2103},[72,48383,48384],{"class":362},"    ROOT_PATH",[72,48386,609],{"class":78},[72,48388,1224],{"class":78},[72,48390,805],{"class":366},[72,48392,1112],{"class":362},[72,48394,48396],{"class":48395},"sA_wV","\u002Fdata\u002Ftrain",[72,48398,25555],{"class":366},[72,48400,48401],{"class":74,"line":2108},[72,48402,2828],{"emptyLinePlaceholder":490},[72,48404,48405],{"class":74,"line":2122},[72,48406,48407],{"class":621},"    # 定义归一化方法\n",[72,48409,48410],{"class":74,"line":2127},[72,48411,48412],{"class":621},"    # 这里需要先计算一下数据集的均值和方差\n",[72,48414,48415],{"class":74,"line":2156},[72,48416,48417],{"class":621},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[72,48419,48420],{"class":74,"line":2161},[72,48421,48422],{"class":621},"    # 第一个参数是均值，第二个参数是方差\n",[72,48424,48425,48428,48430,48433,48436,48438,48441,48443,48446,48449,48452,48454,48457,48459,48462],{"class":74,"line":2178},[72,48426,48427],{"class":82},"    normalize",[72,48429,609],{"class":78},[72,48431,48432],{"class":82},"transforms.Normalize([",[72,48434,48435],{"class":362},"0.162",[72,48437,932],{"class":82},[72,48439,48440],{"class":362},"0.151",[72,48442,932],{"class":82},[72,48444,48445],{"class":362},"0.138",[72,48447,48448],{"class":82},"],[",[72,48450,48451],{"class":362},"0.058",[72,48453,932],{"class":82},[72,48455,48456],{"class":362},"0.052",[72,48458,932],{"class":82},[72,48460,48461],{"class":362},"0.048",[72,48463,5085],{"class":82},[72,48465,48466],{"class":74,"line":2183},[72,48467,48468],{"class":621},"    # 定义数据集处理方法变量\n",[72,48470,48471,48474,48476],{"class":74,"line":2188},[72,48472,48473],{"class":82},"    train_transform",[72,48475,609],{"class":78},[72,48477,48478],{"class":82},"transforms.Compose([\n",[72,48480,48481],{"class":74,"line":2193},[72,48482,48483],{"class":621},"        # 调整图像大小为224*224\n",[72,48485,48486,48489,48491,48493,48495],{"class":74,"line":2207},[72,48487,48488],{"class":82},"        transforms.Resize((",[72,48490,31919],{"class":362},[72,48492,932],{"class":82},[72,48494,31919],{"class":362},[72,48496,43040],{"class":82},[72,48498,48499],{"class":74,"line":2212},[72,48500,48501],{"class":621},"        # 将图像转换为张量\n",[72,48503,48504],{"class":74,"line":3005},[72,48505,48506],{"class":82},"        transforms.ToTensor(),\n",[72,48508,48509],{"class":74,"line":3019},[72,48510,48511],{"class":82},"        normalize])\n",[72,48513,48514],{"class":74,"line":3027},[72,48515,48516],{"class":621},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[72,48518,48519],{"class":74,"line":3032},[72,48520,48521],{"class":621},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[72,48523,48524],{"class":74,"line":3038},[72,48525,2828],{"emptyLinePlaceholder":490},[72,48527,48528],{"class":74,"line":3044},[72,48529,48530],{"class":621},"    # 加载数据集\n",[72,48532,48533],{"class":74,"line":3049},[72,48534,48535],{"class":621},"    # 传入数据集路径与处理方法\n",[72,48537,48538,48540,48542,48545,48548,48550,48553,48555],{"class":74,"line":8374},[72,48539,32376],{"class":82},[72,48541,609],{"class":78},[72,48543,48544],{"class":82},"ImageFolder(",[72,48546,48547],{"class":362},"ROOT_PATH",[72,48549,932],{"class":82},[72,48551,48552],{"class":5642},"transform",[72,48554,609],{"class":78},[72,48556,48557],{"class":82},"train_transform)\n",[72,48559,48560],{"class":74,"line":8398},[72,48561,2828],{"emptyLinePlaceholder":490},[72,48563,48564,48566,48568,48570,48572,48574,48576,48578,48580,48582,48584,48586,48588,48590,48592],{"class":74,"line":8403},[72,48565,32428],{"class":82},[72,48567,609],{"class":78},[72,48569,32433],{"class":82},[72,48571,32436],{"class":362},[72,48573,564],{"class":82},[72,48575,32441],{"class":362},[72,48577,1009],{"class":78},[72,48579,7784],{"class":362},[72,48581,32448],{"class":82},[72,48583,32436],{"class":362},[72,48585,564],{"class":82},[72,48587,32455],{"class":362},[72,48589,1009],{"class":78},[72,48591,7784],{"class":362},[72,48593,32462],{"class":82},[72,48595,48596,48598,48600,48602,48604,48606],{"class":74,"line":8409},[72,48597,32467],{"class":82},[72,48599,609],{"class":78},[72,48601,32472],{"class":82},[72,48603,31955],{"class":5642},[72,48605,609],{"class":78},[72,48607,31960],{"class":82},[72,48609,48610,48612,48614,48616],{"class":74,"line":8436},[72,48611,32483],{"class":5642},[72,48613,609],{"class":78},[72,48615,753],{"class":362},[72,48617,31884],{"class":82},[72,48619,48620,48622,48624,48626],{"class":74,"line":8441},[72,48621,32495],{"class":5642},[72,48623,609],{"class":78},[72,48625,31894],{"class":362},[72,48627,31884],{"class":82},[72,48629,48630],{"class":74,"line":8447},[72,48631,32506],{"class":621},[72,48633,48634,48636,48638,48640],{"class":74,"line":8459},[72,48635,32511],{"class":5642},[72,48637,609],{"class":78},[72,48639,949],{"class":362},[72,48641,570],{"class":82},[72,48643,48644,48646,48648,48650,48652,48654],{"class":74,"line":8471},[72,48645,32522],{"class":82},[72,48647,609],{"class":78},[72,48649,31952],{"class":82},[72,48651,31955],{"class":5642},[72,48653,609],{"class":78},[72,48655,32533],{"class":82},[72,48657,48658,48660,48662,48664],{"class":74,"line":8483},[72,48659,32538],{"class":5642},[72,48661,609],{"class":78},[72,48663,753],{"class":362},[72,48665,31884],{"class":82},[72,48667,48668,48670,48672,48674],{"class":74,"line":10142},[72,48669,32549],{"class":5642},[72,48671,609],{"class":78},[72,48673,31894],{"class":362},[72,48675,31884],{"class":82},[72,48677,48678,48680,48682,48684],{"class":74,"line":10167},[72,48679,32560],{"class":5642},[72,48681,609],{"class":78},[72,48683,949],{"class":362},[72,48685,570],{"class":82},[72,48687,48688,48690],{"class":74,"line":10190},[72,48689,4518],{"class":78},[72,48691,32573],{"class":82},[72,48693,48694],{"class":74,"line":10214},[72,48695,2828],{"emptyLinePlaceholder":490},[72,48697,48698],{"class":74,"line":10219},[72,48699,32582],{"class":621},[72,48701,48702],{"class":74,"line":10224},[72,48703,32587],{"class":621},[72,48705,48706],{"class":74,"line":10229},[72,48707,2828],{"emptyLinePlaceholder":490},[72,48709,48710],{"class":74,"line":10238},[72,48711,32596],{"class":621},[72,48713,48714,48716,48718],{"class":74,"line":10243},[72,48715,32365],{"class":78},[72,48717,32603],{"class":358},[72,48719,32606],{"class":82},[72,48721,48722,48724,48726,48728,48730,48732,48734,48736,48738],{"class":74,"line":10249},[72,48723,31655],{"class":82},[72,48725,609],{"class":78},[72,48727,30869],{"class":82},[72,48729,31662],{"class":366},[72,48731,2133],{"class":78},[72,48733,31667],{"class":82},[72,48735,2130],{"class":78},[72,48737,32625],{"class":366},[72,48739,570],{"class":82},[72,48741,48742],{"class":74,"line":10270},[72,48743,2828],{"emptyLinePlaceholder":490},[72,48745,48746],{"class":74,"line":10276},[72,48747,32640],{"class":621},[72,48749,48750],{"class":74,"line":10290},[72,48751,32645],{"class":621},[72,48753,48754],{"class":74,"line":10296},[72,48755,32650],{"class":621},[72,48757,48758,48760,48762,48764,48766,48768,48770],{"class":74,"line":10323},[72,48759,32655],{"class":82},[72,48761,609],{"class":78},[72,48763,32660],{"class":82},[72,48765,32663],{"class":5642},[72,48767,609],{"class":78},[72,48769,32668],{"class":362},[72,48771,570],{"class":82},[72,48773,48774],{"class":74,"line":10332},[72,48775,2828],{"emptyLinePlaceholder":490},[72,48777,48778],{"class":74,"line":10338},[72,48779,32679],{"class":621},[72,48781,48782,48784,48786],{"class":74,"line":10346},[72,48783,32684],{"class":82},[72,48785,609],{"class":78},[72,48787,32689],{"class":82},[72,48789,48790],{"class":74,"line":10351},[72,48791,2828],{"emptyLinePlaceholder":490},[72,48793,48794],{"class":74,"line":17030},[72,48795,32698],{"class":621},[72,48797,48798,48800,48802],{"class":74,"line":17036},[72,48799,31707],{"class":82},[72,48801,609],{"class":78},[72,48803,32707],{"class":82},[72,48805,48806],{"class":74,"line":17059},[72,48807,32712],{"class":621},[72,48809,48810],{"class":74,"line":17065},[72,48811,32717],{"class":621},[72,48813,48814],{"class":74,"line":17088},[72,48815,32722],{"class":621},[72,48817,48818,48820,48822],{"class":74,"line":17102},[72,48819,32727],{"class":82},[72,48821,609],{"class":78},[72,48823,32732],{"class":82},[72,48825,48826],{"class":74,"line":17122},[72,48827,2828],{"emptyLinePlaceholder":490},[72,48829,48830],{"class":74,"line":17128},[72,48831,32745],{"class":621},[72,48833,48834],{"class":74,"line":17139},[72,48835,32750],{"class":621},[72,48837,48838,48840,48842],{"class":74,"line":17162},[72,48839,32755],{"class":82},[72,48841,609],{"class":78},[72,48843,32760],{"class":362},[72,48845,48846],{"class":74,"line":17184},[72,48847,32765],{"class":621},[72,48849,48850,48852,48854],{"class":74,"line":17189},[72,48851,32770],{"class":82},[72,48853,609],{"class":78},[72,48855,32775],{"class":82},[72,48857,48858],{"class":74,"line":17195},[72,48859,32780],{"class":621},[72,48861,48862,48864,48866],{"class":74,"line":17209},[72,48863,32785],{"class":82},[72,48865,609],{"class":78},[72,48867,32775],{"class":82},[72,48869,48870],{"class":74,"line":17222},[72,48871,32794],{"class":621},[72,48873,48874,48876,48878],{"class":74,"line":17227},[72,48875,32799],{"class":82},[72,48877,609],{"class":78},[72,48879,32775],{"class":82},[72,48881,48882],{"class":74,"line":17241},[72,48883,32808],{"class":621},[72,48885,48886,48888,48890],{"class":74,"line":17246},[72,48887,32813],{"class":82},[72,48889,609],{"class":78},[72,48891,32775],{"class":82},[72,48893,48894],{"class":74,"line":17252},[72,48895,2828],{"emptyLinePlaceholder":490},[72,48897,48898],{"class":74,"line":17257},[72,48899,32826],{"class":621},[72,48901,48902,48904,48906],{"class":74,"line":17271},[72,48903,32831],{"class":82},[72,48905,609],{"class":78},[72,48907,32836],{"class":82},[72,48909,48910],{"class":74,"line":17276},[72,48911,2828],{"emptyLinePlaceholder":490},[72,48913,48914],{"class":74,"line":17281},[72,48915,32849],{"class":621},[72,48917,48918,48920,48922,48924,48926],{"class":74,"line":17295},[72,48919,3629],{"class":78},[72,48921,32856],{"class":82},[72,48923,26465],{"class":78},[72,48925,32861],{"class":362},[72,48927,32864],{"class":82},[72,48929,48930,48932,48934,48936,48938,48940,48942,48944,48946,48948,48950],{"class":74,"line":17307},[72,48931,32869],{"class":362},[72,48933,564],{"class":82},[72,48935,32874],{"class":366},[72,48937,32877],{"class":362},[72,48939,1138],{"class":366},[72,48941,32877],{"class":362},[72,48943,805],{"class":366},[72,48945,32886],{"class":82},[72,48947,1086],{"class":78},[72,48949,772],{"class":362},[72,48951,30915],{"class":82},[72,48953,48954,48956,48958,48960,48962,48964],{"class":74,"line":17312},[72,48955,32869],{"class":362},[72,48957,564],{"class":82},[72,48959,32901],{"class":366},[72,48961,1009],{"class":78},[72,48963,1000],{"class":362},[72,48965,570],{"class":82},[72,48967,48968],{"class":74,"line":17325},[72,48969,2828],{"emptyLinePlaceholder":490},[72,48971,48972],{"class":74,"line":17330},[72,48973,32916],{"class":621},[72,48975,48976],{"class":74,"line":17335},[72,48977,32921],{"class":621},[72,48979,48980,48982,48984],{"class":74,"line":17340},[72,48981,32926],{"class":82},[72,48983,609],{"class":78},[72,48985,32760],{"class":362},[72,48987,48988],{"class":74,"line":17353},[72,48989,32935],{"class":621},[72,48991,48992,48994,48996],{"class":74,"line":17358},[72,48993,32940],{"class":82},[72,48995,609],{"class":78},[72,48997,3513],{"class":362},[72,48999,49000],{"class":74,"line":33051},[72,49001,32949],{"class":621},[72,49003,49004,49006,49008],{"class":74,"line":33057},[72,49005,32954],{"class":82},[72,49007,609],{"class":78},[72,49009,32760],{"class":362},[72,49011,49012],{"class":74,"line":33063},[72,49013,32963],{"class":621},[72,49015,49016,49018,49020],{"class":74,"line":33069},[72,49017,32968],{"class":82},[72,49019,609],{"class":78},[72,49021,3513],{"class":362},[72,49023,49024],{"class":74,"line":33075},[72,49025,32977],{"class":621},[72,49027,49028,49030,49032],{"class":74,"line":33086},[72,49029,32982],{"class":82},[72,49031,609],{"class":78},[72,49033,3513],{"class":362},[72,49035,49036],{"class":74,"line":33092},[72,49037,32991],{"class":621},[72,49039,49040,49042,49044],{"class":74,"line":33112},[72,49041,32996],{"class":82},[72,49043,609],{"class":78},[72,49045,3513],{"class":362},[72,49047,49048],{"class":74,"line":33118},[72,49049,33005],{"class":621},[72,49051,49052,49054,49056,49058,49060],{"class":74,"line":33129},[72,49053,3831],{"class":78},[72,49055,32019],{"class":82},[72,49057,26465],{"class":78},[72,49059,32024],{"class":362},[72,49061,33018],{"class":82},[72,49063,49064],{"class":74,"line":33135},[72,49065,33023],{"class":621},[72,49067,49068,49070,49072],{"class":74,"line":33141},[72,49069,33028],{"class":82},[72,49071,609],{"class":78},[72,49073,33033],{"class":82},[72,49075,49076],{"class":74,"line":33147},[72,49077,33038],{"class":621},[72,49079,49080,49082,49084],{"class":74,"line":33153},[72,49081,33043],{"class":82},[72,49083,609],{"class":78},[72,49085,33048],{"class":82},[72,49087,49088],{"class":74,"line":33159},[72,49089,33054],{"class":621},[72,49091,49092],{"class":74,"line":33165},[72,49093,33060],{"class":82},[72,49095,49096],{"class":74,"line":33171},[72,49097,33066],{"class":621},[72,49099,49100],{"class":74,"line":33191},[72,49101,33072],{"class":621},[72,49103,49104,49106,49108],{"class":74,"line":33197},[72,49105,33078],{"class":82},[72,49107,609],{"class":78},[72,49109,33083],{"class":82},[72,49111,49112],{"class":74,"line":33213},[72,49113,33089],{"class":621},[72,49115,49116,49118,49120,49122,49124,49126,49128],{"class":74,"line":33219},[72,49117,33095],{"class":82},[72,49119,609],{"class":78},[72,49121,33100],{"class":82},[72,49123,33103],{"class":5642},[72,49125,609],{"class":78},[72,49127,772],{"class":362},[72,49129,570],{"class":82},[72,49131,49132],{"class":74,"line":33233},[72,49133,33115],{"class":621},[72,49135,49136,49138,49140],{"class":74,"line":33239},[72,49137,33121],{"class":82},[72,49139,609],{"class":78},[72,49141,33126],{"class":82},[72,49143,49144],{"class":74,"line":33254},[72,49145,33132],{"class":621},[72,49147,49148],{"class":74,"line":33260},[72,49149,33138],{"class":82},[72,49151,49152],{"class":74,"line":33269},[72,49153,33144],{"class":621},[72,49155,49156],{"class":74,"line":33275},[72,49157,33150],{"class":82},[72,49159,49160],{"class":74,"line":33284},[72,49161,33156],{"class":621},[72,49163,49164],{"class":74,"line":33290},[72,49165,33162],{"class":82},[72,49167,49168],{"class":74,"line":33296},[72,49169,33168],{"class":621},[72,49171,49172,49174,49176,49178,49180,49182,49184],{"class":74,"line":33305},[72,49173,33174],{"class":82},[72,49175,9903],{"class":78},[72,49177,33179],{"class":82},[72,49179,1009],{"class":78},[72,49181,33184],{"class":82},[72,49183,747],{"class":362},[72,49185,570],{"class":82},[72,49187,49188],{"class":74,"line":33311},[72,49189,33194],{"class":621},[72,49191,49192,49194,49196,49198,49200],{"class":74,"line":33322},[72,49193,33200],{"class":82},[72,49195,9903],{"class":78},[72,49197,33205],{"class":82},[72,49199,3377],{"class":78},[72,49201,33210],{"class":82},[72,49203,49204],{"class":74,"line":33328},[72,49205,33216],{"class":621},[72,49207,49208,49210,49212,49214,49216],{"class":74,"line":33347},[72,49209,33222],{"class":82},[72,49211,9903],{"class":78},[72,49213,33184],{"class":82},[72,49215,747],{"class":362},[72,49217,570],{"class":82},[72,49219,49220],{"class":74,"line":33353},[72,49221,33236],{"class":621},[72,49223,49224,49226,49228,49230,49232],{"class":74,"line":33364},[72,49225,3831],{"class":78},[72,49227,33244],{"class":82},[72,49229,26465],{"class":78},[72,49231,32024],{"class":362},[72,49233,33251],{"class":82},[72,49235,49236],{"class":74,"line":33370},[72,49237,33257],{"class":621},[72,49239,49240,49242,49244],{"class":74,"line":33390},[72,49241,33028],{"class":82},[72,49243,609],{"class":78},[72,49245,33033],{"class":82},[72,49247,49248],{"class":74,"line":33406},[72,49249,33272],{"class":621},[72,49251,49252,49254,49256],{"class":74,"line":33412},[72,49253,33043],{"class":82},[72,49255,609],{"class":78},[72,49257,33048],{"class":82},[72,49259,49260],{"class":74,"line":33426},[72,49261,33287],{"class":621},[72,49263,49264],{"class":74,"line":33432},[72,49265,33293],{"class":82},[72,49267,49268],{"class":74,"line":33438},[72,49269,36774],{"class":621},[72,49271,49272,49274],{"class":74,"line":33449},[72,49273,33299],{"class":78},[72,49275,33302],{"class":82},[72,49277,49278],{"class":74,"line":33455},[72,49279,33308],{"class":621},[72,49281,49282,49284,49286],{"class":74,"line":33461},[72,49283,36789],{"class":82},[72,49285,609],{"class":78},[72,49287,33083],{"class":82},[72,49289,49290],{"class":74,"line":33471},[72,49291,33325],{"class":621},[72,49293,49294,49296,49298,49300,49302,49304,49306],{"class":74,"line":33477},[72,49295,36802],{"class":82},[72,49297,609],{"class":78},[72,49299,33100],{"class":82},[72,49301,33103],{"class":5642},[72,49303,609],{"class":78},[72,49305,772],{"class":362},[72,49307,570],{"class":82},[72,49309,49310],{"class":74,"line":33488},[72,49311,33350],{"class":621},[72,49313,49314,49316,49318],{"class":74,"line":33494},[72,49315,36823],{"class":82},[72,49317,609],{"class":78},[72,49319,33126],{"class":82},[72,49321,49322],{"class":74,"line":33504},[72,49323,33367],{"class":621},[72,49325,49326,49328,49330,49332,49334,49336,49338],{"class":74,"line":33509},[72,49327,36836],{"class":82},[72,49329,9903],{"class":78},[72,49331,36841],{"class":82},[72,49333,1009],{"class":78},[72,49335,33184],{"class":82},[72,49337,747],{"class":362},[72,49339,570],{"class":82},[72,49341,49342,49344,49346,49348,49350],{"class":74,"line":33515},[72,49343,36854],{"class":82},[72,49345,9903],{"class":78},[72,49347,33205],{"class":82},[72,49349,3377],{"class":78},[72,49351,33210],{"class":82},[72,49353,49354],{"class":74,"line":33564},[72,49355,36867],{"class":621},[72,49357,49358,49360,49362,49364,49366],{"class":74,"line":33611},[72,49359,36872],{"class":82},[72,49361,9903],{"class":78},[72,49363,33184],{"class":82},[72,49365,747],{"class":362},[72,49367,570],{"class":82},[72,49369,49370],{"class":74,"line":33616},[72,49371,33429],{"class":621},[72,49373,49374],{"class":74,"line":33622},[72,49375,33435],{"class":621},[72,49377,49378,49380,49382],{"class":74,"line":33641},[72,49379,33441],{"class":82},[72,49381,1138],{"class":78},[72,49383,33446],{"class":82},[72,49385,49386],{"class":74,"line":33647},[72,49387,33452],{"class":621},[72,49389,49390],{"class":74,"line":33667},[72,49391,33458],{"class":621},[72,49393,49394,49396,49398],{"class":74,"line":33673},[72,49395,33464],{"class":82},[72,49397,1138],{"class":78},[72,49399,33446],{"class":82},[72,49401,49402],{"class":74,"line":33679},[72,49403,33474],{"class":621},[72,49405,49406,49408,49410],{"class":74,"line":33689},[72,49407,33480],{"class":82},[72,49409,1138],{"class":78},[72,49411,33485],{"class":82},[72,49413,49414],{"class":74,"line":33694},[72,49415,33491],{"class":621},[72,49417,49418,49420,49422],{"class":74,"line":33700},[72,49419,33497],{"class":82},[72,49421,1138],{"class":78},[72,49423,33485],{"class":82},[72,49425,49426],{"class":74,"line":33716},[72,49427,2828],{"emptyLinePlaceholder":490},[72,49429,49430],{"class":74,"line":33761},[72,49431,33512],{"class":621},[72,49433,49434,49436,49438,49440,49442,49444,49446,49448,49450,49452,49454,49456,49458,49460,49462,49464,49466,49468,49470,49472],{"class":74,"line":33767},[72,49435,32869],{"class":362},[72,49437,564],{"class":82},[72,49439,4020],{"class":366},[72,49441,32877],{"class":362},[72,49443,33526],{"class":366},[72,49445,1450],{"class":362},[72,49447,33531],{"class":78},[72,49449,1500],{"class":362},[72,49451,33536],{"class":366},[72,49453,1450],{"class":362},[72,49455,33531],{"class":78},[72,49457,1500],{"class":362},[72,49459,4020],{"class":366},[72,49461,33547],{"class":82},[72,49463,1086],{"class":78},[72,49465,772],{"class":362},[72,49467,33554],{"class":82},[72,49469,1086],{"class":78},[72,49471,772],{"class":362},[72,49473,33561],{"class":82},[72,49475,49476,49478,49480,49482,49484,49486,49488,49490,49492,49494,49496,49498,49500,49502,49504,49506,49508,49510,49512,49514],{"class":74,"line":33773},[72,49477,32869],{"class":362},[72,49479,564],{"class":82},[72,49481,4020],{"class":366},[72,49483,32877],{"class":362},[72,49485,33575],{"class":366},[72,49487,1450],{"class":362},[72,49489,33531],{"class":78},[72,49491,1500],{"class":362},[72,49493,33584],{"class":366},[72,49495,1450],{"class":362},[72,49497,33531],{"class":78},[72,49499,1500],{"class":362},[72,49501,4020],{"class":366},[72,49503,33595],{"class":82},[72,49505,1086],{"class":78},[72,49507,772],{"class":362},[72,49509,33602],{"class":82},[72,49511,1086],{"class":78},[72,49513,772],{"class":362},[72,49515,33561],{"class":82},[72,49517,49518],{"class":74,"line":33779},[72,49519,2828],{"emptyLinePlaceholder":490},[72,49521,49522],{"class":74,"line":33790},[72,49523,33619],{"class":621},[72,49525,49526,49528,49530,49532,49534,49536,49538],{"class":74,"line":33796},[72,49527,2925],{"class":78},[72,49529,33627],{"class":82},[72,49531,1086],{"class":78},[72,49533,772],{"class":362},[72,49535,1494],{"class":82},[72,49537,1514],{"class":78},[72,49539,33638],{"class":82},[72,49541,49542],{"class":74,"line":33802},[72,49543,33644],{"class":621},[72,49545,49546,49548,49550,49552,49554,49556,49558],{"class":74,"line":33808},[72,49547,33650],{"class":82},[72,49549,603],{"class":362},[72,49551,609],{"class":78},[72,49553,33657],{"class":82},[72,49555,1086],{"class":78},[72,49557,772],{"class":362},[72,49559,33664],{"class":82},[72,49561,49562],{"class":74,"line":33826},[72,49563,33670],{"class":621},[72,49565,49566],{"class":74,"line":33840},[72,49567,33676],{"class":621},[72,49569,49570,49572,49574],{"class":74,"line":33849},[72,49571,33682],{"class":82},[72,49573,609],{"class":78},[72,49575,32732],{"class":82},[72,49577,49578],{"class":74,"line":33858},[72,49579,2828],{"emptyLinePlaceholder":490},[72,49581,49582],{"class":74,"line":33867},[72,49583,33697],{"class":621},[72,49585,49586,49588,49590,49592,49594],{"class":74,"line":33876},[72,49587,33703],{"class":82},[72,49589,609],{"class":78},[72,49591,33708],{"class":82},[72,49593,1086],{"class":78},[72,49595,33713],{"class":82},[72,49597,49598,49600,49602,49604,49606,49608,49610,49612,49614,49616,49618,49620,49622,49624,49626,49628,49630,49632],{"class":74,"line":33882},[72,49599,32869],{"class":362},[72,49601,564],{"class":82},[72,49603,33723],{"class":366},[72,49605,1450],{"class":362},[72,49607,33728],{"class":78},[72,49609,1500],{"class":362},[72,49611,1098],{"class":366},[72,49613,1450],{"class":362},[72,49615,33728],{"class":78},[72,49617,1500],{"class":362},[72,49619,33741],{"class":366},[72,49621,33744],{"class":82},[72,49623,33747],{"class":78},[72,49625,1461],{"class":362},[72,49627,33752],{"class":82},[72,49629,882],{"class":78},[72,49631,1461],{"class":362},[72,49633,30915],{"class":82},[72,49635,49636],{"class":74,"line":33888},[72,49637,37151],{"class":621},[72,49639,49640],{"class":74,"line":33896},[72,49641,37156],{"class":621},[72,49643,49644,49646,49648],{"class":74,"line":33901},[72,49645,37161],{"class":82},[72,49647,33785],{"class":366},[72,49649,570],{"class":82},[72,49651,49652],{"class":74,"line":33907},[72,49653,33805],{"class":621},[72,49655,49656,49658,49660,49662,49664,49666],{"class":74,"line":33918},[72,49657,33811],{"class":82},[72,49659,609],{"class":78},[72,49661,33816],{"class":82},[72,49663,33819],{"class":5642},[72,49665,609],{"class":78},[72,49667,1975],{"class":82},[72,49669,49670,49672,49674,49676],{"class":74,"line":33924},[72,49671,33829],{"class":366},[72,49673,1413],{"class":82},[72,49675,33834],{"class":362},[72,49677,33837],{"class":82},[72,49679,49680,49682],{"class":74,"line":33944},[72,49681,33843],{"class":366},[72,49683,33846],{"class":82},[72,49685,49686,49688],{"class":74,"line":33950},[72,49687,33852],{"class":366},[72,49689,33855],{"class":82},[72,49691,49692,49694],{"class":74,"line":33956},[72,49693,33861],{"class":366},[72,49695,33864],{"class":82},[72,49697,49698,49700],{"class":74,"line":33962},[72,49699,33870],{"class":366},[72,49701,33873],{"class":82},[72,49703,49704],{"class":74,"line":33979},[72,49705,33879],{"class":82},[72,49707,49708],{"class":74,"line":33985},[72,49709,33885],{"class":621},[72,49711,49712,49714],{"class":74,"line":33991},[72,49713,4518],{"class":78},[72,49715,33893],{"class":82},[72,49717,49718],{"class":74,"line":33997},[72,49719,2828],{"emptyLinePlaceholder":490},[72,49721,49722],{"class":74,"line":34003},[72,49723,33904],{"class":621},[72,49725,49726,49728,49730],{"class":74,"line":34009},[72,49727,32365],{"class":78},[72,49729,33912],{"class":358},[72,49731,33915],{"class":82},[72,49733,49734],{"class":74,"line":34036},[72,49735,33921],{"class":621},[72,49737,49738,49740,49742,49744,49746,49748,49750,49752],{"class":74,"line":34060},[72,49739,33927],{"class":82},[72,49741,32111],{"class":5642},[72,49743,609],{"class":78},[72,49745,564],{"class":82},[72,49747,1052],{"class":362},[72,49749,932],{"class":82},[72,49751,847],{"class":362},[72,49753,30915],{"class":82},[72,49755,49756],{"class":74,"line":34066},[72,49757,33947],{"class":621},[72,49759,49760],{"class":74,"line":34072},[72,49761,33953],{"class":621},[72,49763,49764],{"class":74,"line":34078},[72,49765,33959],{"class":621},[72,49767,49768,49770,49772,49774,49776,49778,49780],{"class":74,"line":34089},[72,49769,32145],{"class":82},[72,49771,772],{"class":362},[72,49773,932],{"class":82},[72,49775,640],{"class":362},[72,49777,932],{"class":82},[72,49779,772],{"class":362},[72,49781,570],{"class":82},[72,49783,49784],{"class":74,"line":34100},[72,49785,33982],{"class":621},[72,49787,49788],{"class":74,"line":34106},[72,49789,33988],{"class":621},[72,49791,49792],{"class":74,"line":34123},[72,49793,33994],{"class":621},[72,49795,49796],{"class":74,"line":34146},[72,49797,34000],{"class":621},[72,49799,49800],{"class":74,"line":34169},[72,49801,34006],{"class":621},[72,49803,49804,49806,49808,49810,49812,49814,49816,49818,49820],{"class":74,"line":34175},[72,49805,34012],{"class":82},[72,49807,34015],{"class":366},[72,49809,34018],{"class":82},[72,49811,34021],{"class":366},[72,49813,932],{"class":82},[72,49815,34026],{"class":5642},[72,49817,609],{"class":78},[72,49819,34031],{"class":366},[72,49821,570],{"class":82},[72,49823,49824,49826,49828,49830,49832,49834,49836,49838,49840],{"class":74,"line":34180},[72,49825,34012],{"class":82},[72,49827,34015],{"class":366},[72,49829,34043],{"class":82},[72,49831,34046],{"class":366},[72,49833,932],{"class":82},[72,49835,34026],{"class":5642},[72,49837,609],{"class":78},[72,49839,34055],{"class":366},[72,49841,570],{"class":82},[72,49843,49844],{"class":74,"line":34189},[72,49845,34063],{"class":621},[72,49847,49848],{"class":74,"line":34199},[72,49849,34069],{"class":82},[72,49851,49852],{"class":74,"line":34205},[72,49853,34075],{"class":621},[72,49855,49856,49858,49860],{"class":74,"line":34210},[72,49857,34081],{"class":82},[72,49859,34084],{"class":366},[72,49861,570],{"class":82},[72,49863,49864,49866,49868],{"class":74,"line":34216},[72,49865,34092],{"class":82},[72,49867,34095],{"class":366},[72,49869,570],{"class":82},[72,49871,49872],{"class":74,"line":34229},[72,49873,34103],{"class":621},[72,49875,49876,49878,49880,49882,49884,49886,49888],{"class":74,"line":34235},[72,49877,32145],{"class":82},[72,49879,772],{"class":362},[72,49881,932],{"class":82},[72,49883,640],{"class":362},[72,49885,932],{"class":82},[72,49887,640],{"class":362},[72,49889,570],{"class":82},[72,49891,49892,49894,49896,49898,49900,49902,49904,49906,49908],{"class":74,"line":34246},[72,49893,34012],{"class":82},[72,49895,34015],{"class":366},[72,49897,34130],{"class":82},[72,49899,34021],{"class":366},[72,49901,932],{"class":82},[72,49903,34026],{"class":5642},[72,49905,609],{"class":78},[72,49907,34141],{"class":366},[72,49909,570],{"class":82},[72,49911,49912,49914,49916,49918,49920,49922,49924,49926,49928],{"class":74,"line":34257},[72,49913,34012],{"class":82},[72,49915,34015],{"class":366},[72,49917,34153],{"class":82},[72,49919,34046],{"class":366},[72,49921,932],{"class":82},[72,49923,34026],{"class":5642},[72,49925,609],{"class":78},[72,49927,34164],{"class":366},[72,49929,570],{"class":82},[72,49931,49932],{"class":74,"line":34276},[72,49933,34172],{"class":621},[72,49935,49937],{"class":74,"line":49936},219,[72,49938,34069],{"class":82},[72,49940,49942,49944,49946],{"class":74,"line":49941},220,[72,49943,34081],{"class":82},[72,49945,34015],{"class":366},[72,49947,570],{"class":82},[72,49949,49951,49953,49955],{"class":74,"line":49950},221,[72,49952,34092],{"class":82},[72,49954,34194],{"class":366},[72,49956,570],{"class":82},[72,49958,49960],{"class":74,"line":49959},222,[72,49961,34202],{"class":82},[72,49963,49965],{"class":74,"line":49964},223,[72,49966,2828],{"emptyLinePlaceholder":490},[72,49968,49970],{"class":74,"line":49969},224,[72,49971,34213],{"class":621},[72,49973,49975,49977,49979,49981,49983],{"class":74,"line":49974},225,[72,49976,1960],{"class":78},[72,49978,31638],{"class":362},[72,49980,3377],{"class":78},[72,49982,31643],{"class":366},[72,49984,4167],{"class":82},[72,49986,49988],{"class":74,"line":49987},226,[72,49989,34232],{"class":621},[72,49991,49993,49995,49997],{"class":74,"line":49992},227,[72,49994,44964],{"class":82},[72,49996,609],{"class":78},[72,49998,44969],{"class":82},[72,50000,50002,50004,50006],{"class":74,"line":50001},228,[72,50003,34249],{"class":82},[72,50005,609],{"class":78},[72,50007,34254],{"class":82},[72,50009,50011,50013,50015,50017,50019,50021,50023],{"class":74,"line":50010},229,[72,50012,33811],{"class":82},[72,50014,609],{"class":78},[72,50016,44986],{"class":82},[72,50018,34267],{"class":5642},[72,50020,609],{"class":78},[72,50022,1461],{"class":362},[72,50024,570],{"class":82},[72,50026,50028],{"class":74,"line":50027},230,[72,50029,34279],{"class":82},[22423,50031,50033],{"id":50032},"_242测试代码","2.4.2.测试代码",[15,50035,50036],{},"使用测试集进行测试与推理",[63,50038,50040],{"className":65,"code":50039,"language":67,"meta":68,"style":68},"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",[34,50041,50042,50048,50058,50068,50079,50089,50093,50097,50105,50110,50114,50131,50135,50139,50143,50147,50151,50183,50187,50195,50199,50211,50215,50219,50223,50227,50231,50235,50239,50243,50261,50275,50279,50289,50299,50309,50315,50319,50323,50331,50335,50351,50359,50363,50367,50375,50383,50387,50391,50395,50399,50405,50409,50419,50427,50435,50439,50443,50447,50455,50459,50475,50479,50483,50487,50499,50503,50515,50519,50523,50535,50539,50549,50553,50557,50569,50573,50581,50585,50589,50597,50601,50609,50613,50617,50621,50625,50629,50645,50653,50657,50661,50679,50685,50689,50699,50707,50715,50719,50723,50727,50731,50739,50743,50759,50763,50771,50779],{"__ignoreMap":68},[72,50043,50044,50046],{"class":74,"line":75},[72,50045,79],{"class":78},[72,50047,30813],{"class":82},[72,50049,50050,50052,50054,50056],{"class":74,"line":370},[72,50051,79],{"class":78},[72,50053,31833],{"class":82},[72,50055,31801],{"class":78},[72,50057,31838],{"class":82},[72,50059,50060,50062,50064,50066],{"class":74,"line":1608},[72,50061,31155],{"class":78},[72,50063,31816],{"class":82},[72,50065,79],{"class":78},[72,50067,31821],{"class":82},[72,50069,50070,50072,50074,50076],{"class":74,"line":1623},[72,50071,31155],{"class":78},[72,50073,31786],{"class":82},[72,50075,79],{"class":78},[72,50077,50078],{"class":82}," ImageFolder\n",[72,50080,50081,50083,50085,50087],{"class":74,"line":1629},[72,50082,31155],{"class":78},[72,50084,32332],{"class":82},[72,50086,79],{"class":78},[72,50088,45058],{"class":82},[72,50090,50091],{"class":74,"line":1643},[72,50092,2828],{"emptyLinePlaceholder":490},[72,50094,50095],{"class":74,"line":1649},[72,50096,34369],{"class":621},[72,50098,50099,50101,50103],{"class":74,"line":1740},[72,50100,32365],{"class":78},[72,50102,34376],{"class":358},[72,50104,32371],{"class":82},[72,50106,50107],{"class":74,"line":1746},[72,50108,50109],{"class":621},"   # 导入自己的数据集，并进行数据处理\n",[72,50111,50112],{"class":74,"line":1758},[72,50113,48379],{"class":621},[72,50115,50116,50118,50120,50122,50124,50126,50129],{"class":74,"line":2041},[72,50117,48384],{"class":362},[72,50119,609],{"class":78},[72,50121,1224],{"class":78},[72,50123,805],{"class":366},[72,50125,1112],{"class":362},[72,50127,50128],{"class":48395},"\u002Fdata\u002Ftest",[72,50130,25555],{"class":366},[72,50132,50133],{"class":74,"line":2046},[72,50134,2828],{"emptyLinePlaceholder":490},[72,50136,50137],{"class":74,"line":2052},[72,50138,48407],{"class":621},[72,50140,50141],{"class":74,"line":2057},[72,50142,48412],{"class":621},[72,50144,50145],{"class":74,"line":2071},[72,50146,48417],{"class":621},[72,50148,50149],{"class":74,"line":2076},[72,50150,48422],{"class":621},[72,50152,50153,50155,50157,50159,50161,50163,50165,50167,50169,50171,50173,50175,50177,50179,50181],{"class":74,"line":2082},[72,50154,48427],{"class":82},[72,50156,609],{"class":78},[72,50158,48432],{"class":82},[72,50160,48435],{"class":362},[72,50162,932],{"class":82},[72,50164,48440],{"class":362},[72,50166,932],{"class":82},[72,50168,48445],{"class":362},[72,50170,48448],{"class":82},[72,50172,48451],{"class":362},[72,50174,932],{"class":82},[72,50176,48456],{"class":362},[72,50178,932],{"class":82},[72,50180,48461],{"class":362},[72,50182,5085],{"class":82},[72,50184,50185],{"class":74,"line":2103},[72,50186,48468],{"class":621},[72,50188,50189,50191,50193],{"class":74,"line":2108},[72,50190,48473],{"class":82},[72,50192,609],{"class":78},[72,50194,48478],{"class":82},[72,50196,50197],{"class":74,"line":2122},[72,50198,48483],{"class":621},[72,50200,50201,50203,50205,50207,50209],{"class":74,"line":2127},[72,50202,48488],{"class":82},[72,50204,31919],{"class":362},[72,50206,932],{"class":82},[72,50208,31919],{"class":362},[72,50210,43040],{"class":82},[72,50212,50213],{"class":74,"line":2156},[72,50214,48501],{"class":621},[72,50216,50217],{"class":74,"line":2161},[72,50218,48506],{"class":82},[72,50220,50221],{"class":74,"line":2178},[72,50222,48511],{"class":82},[72,50224,50225],{"class":74,"line":2183},[72,50226,48516],{"class":621},[72,50228,50229],{"class":74,"line":2188},[72,50230,48521],{"class":621},[72,50232,50233],{"class":74,"line":2193},[72,50234,2828],{"emptyLinePlaceholder":490},[72,50236,50237],{"class":74,"line":2207},[72,50238,48530],{"class":621},[72,50240,50241],{"class":74,"line":2212},[72,50242,48535],{"class":621},[72,50244,50245,50247,50249,50251,50253,50255,50257,50259],{"class":74,"line":3005},[72,50246,34383],{"class":82},[72,50248,609],{"class":78},[72,50250,48544],{"class":82},[72,50252,48547],{"class":362},[72,50254,932],{"class":82},[72,50256,48552],{"class":5642},[72,50258,609],{"class":78},[72,50260,48557],{"class":82},[72,50262,50263,50265,50267,50269,50271,50273],{"class":74,"line":3019},[72,50264,34440],{"class":82},[72,50266,609],{"class":78},[72,50268,31952],{"class":82},[72,50270,31955],{"class":5642},[72,50272,609],{"class":78},[72,50274,34451],{"class":82},[72,50276,50277],{"class":74,"line":3027},[72,50278,34456],{"class":621},[72,50280,50281,50283,50285,50287],{"class":74,"line":3032},[72,50282,34461],{"class":5642},[72,50284,609],{"class":78},[72,50286,772],{"class":362},[72,50288,31884],{"class":82},[72,50290,50291,50293,50295,50297],{"class":74,"line":3038},[72,50292,34472],{"class":5642},[72,50294,609],{"class":78},[72,50296,31894],{"class":362},[72,50298,31884],{"class":82},[72,50300,50301,50303,50305,50307],{"class":74,"line":3044},[72,50302,34483],{"class":5642},[72,50304,609],{"class":78},[72,50306,747],{"class":362},[72,50308,570],{"class":82},[72,50310,50311,50313],{"class":74,"line":3049},[72,50312,4518],{"class":78},[72,50314,34496],{"class":82},[72,50316,50317],{"class":74,"line":8374},[72,50318,2828],{"emptyLinePlaceholder":490},[72,50320,50321],{"class":74,"line":8398},[72,50322,34505],{"class":621},[72,50324,50325,50327,50329],{"class":74,"line":8403},[72,50326,32365],{"class":78},[72,50328,34512],{"class":358},[72,50330,34515],{"class":82},[72,50332,50333],{"class":74,"line":8409},[72,50334,34520],{"class":621},[72,50336,50337,50339,50341,50343,50345,50347,50349],{"class":74,"line":8436},[72,50338,31655],{"class":82},[72,50340,609],{"class":78},[72,50342,31662],{"class":366},[72,50344,2133],{"class":78},[72,50346,31667],{"class":82},[72,50348,2130],{"class":78},[72,50350,34537],{"class":366},[72,50352,50353,50355,50357],{"class":74,"line":8441},[72,50354,31707],{"class":82},[72,50356,609],{"class":78},[72,50358,32707],{"class":82},[72,50360,50361],{"class":74,"line":8447},[72,50362,2828],{"emptyLinePlaceholder":490},[72,50364,50365],{"class":74,"line":8459},[72,50366,34554],{"class":621},[72,50368,50369,50371,50373],{"class":74,"line":8471},[72,50370,34559],{"class":82},[72,50372,609],{"class":78},[72,50374,32760],{"class":362},[72,50376,50377,50379,50381],{"class":74,"line":8483},[72,50378,34568],{"class":82},[72,50380,609],{"class":78},[72,50382,3513],{"class":362},[72,50384,50385],{"class":74,"line":10142},[72,50386,2828],{"emptyLinePlaceholder":490},[72,50388,50389],{"class":74,"line":10167},[72,50390,34581],{"class":621},[72,50392,50393],{"class":74,"line":10190},[72,50394,34586],{"class":621},[72,50396,50397],{"class":74,"line":10214},[72,50398,34591],{"class":621},[72,50400,50401,50403],{"class":74,"line":10219},[72,50402,34596],{"class":78},[72,50404,33302],{"class":82},[72,50406,50407],{"class":74,"line":10224},[72,50408,34603],{"class":621},[72,50410,50411,50413,50415,50417],{"class":74,"line":10229},[72,50412,3831],{"class":78},[72,50414,34610],{"class":82},[72,50416,26465],{"class":78},[72,50418,34615],{"class":82},[72,50420,50421,50423,50425],{"class":74,"line":10238},[72,50422,34620],{"class":82},[72,50424,609],{"class":78},[72,50426,34625],{"class":82},[72,50428,50429,50431,50433],{"class":74,"line":10243},[72,50430,34630],{"class":82},[72,50432,609],{"class":78},[72,50434,34635],{"class":82},[72,50436,50437],{"class":74,"line":10249},[72,50438,34640],{"class":621},[72,50440,50441],{"class":74,"line":10270},[72,50442,33293],{"class":82},[72,50444,50445],{"class":74,"line":10276},[72,50446,34649],{"class":621},[72,50448,50449,50451,50453],{"class":74,"line":10290},[72,50450,33078],{"class":82},[72,50452,609],{"class":78},[72,50454,34658],{"class":82},[72,50456,50457],{"class":74,"line":10296},[72,50458,34663],{"class":621},[72,50460,50461,50463,50465,50467,50469,50471,50473],{"class":74,"line":10323},[72,50462,33095],{"class":82},[72,50464,609],{"class":78},[72,50466,33100],{"class":82},[72,50468,33103],{"class":5642},[72,50470,609],{"class":78},[72,50472,772],{"class":362},[72,50474,570],{"class":82},[72,50476,50477],{"class":74,"line":10332},[72,50478,34684],{"class":621},[72,50480,50481],{"class":74,"line":10338},[72,50482,34689],{"class":621},[72,50484,50485],{"class":74,"line":10346},[72,50486,34694],{"class":621},[72,50488,50489,50491,50493,50495,50497],{"class":74,"line":10351},[72,50490,34699],{"class":82},[72,50492,9903],{"class":78},[72,50494,33205],{"class":82},[72,50496,3377],{"class":78},[72,50498,34708],{"class":82},[72,50500,50501],{"class":74,"line":17030},[72,50502,34713],{"class":621},[72,50504,50505,50507,50509,50511,50513],{"class":74,"line":17036},[72,50506,34718],{"class":82},[72,50508,9903],{"class":78},[72,50510,34723],{"class":82},[72,50512,747],{"class":362},[72,50514,570],{"class":82},[72,50516,50517],{"class":74,"line":17059},[72,50518,2828],{"emptyLinePlaceholder":490},[72,50520,50521],{"class":74,"line":17065},[72,50522,34736],{"class":621},[72,50524,50525,50527,50529,50531,50533],{"class":74,"line":17088},[72,50526,34741],{"class":82},[72,50528,609],{"class":78},[72,50530,34746],{"class":82},[72,50532,1138],{"class":78},[72,50534,34751],{"class":82},[72,50536,50537],{"class":74,"line":17102},[72,50538,34756],{"class":621},[72,50540,50541,50543,50545,50547],{"class":74,"line":17122},[72,50542,32869],{"class":362},[72,50544,564],{"class":82},[72,50546,34765],{"class":366},[72,50548,34768],{"class":82},[72,50550,50551],{"class":74,"line":17128},[72,50552,2828],{"emptyLinePlaceholder":490},[72,50554,50555],{"class":74,"line":17139},[72,50556,34777],{"class":621},[72,50558,50559,50561,50563,50565,50567],{"class":74,"line":17162},[72,50560,1960],{"class":78},[72,50562,31638],{"class":362},[72,50564,3377],{"class":78},[72,50566,31643],{"class":366},[72,50568,4167],{"class":82},[72,50570,50571],{"class":74,"line":17184},[72,50572,34794],{"class":621},[72,50574,50575,50577,50579],{"class":74,"line":17189},[72,50576,31707],{"class":82},[72,50578,609],{"class":78},[72,50580,44969],{"class":82},[72,50582,50583],{"class":74,"line":17195},[72,50584,34807],{"class":621},[72,50586,50587],{"class":74,"line":17209},[72,50588,34812],{"class":621},[72,50590,50591,50593,50595],{"class":74,"line":17222},[72,50592,34817],{"class":82},[72,50594,34820],{"class":366},[72,50596,30915],{"class":82},[72,50598,50599],{"class":74,"line":17227},[72,50600,34827],{"class":621},[72,50602,50603,50605,50607],{"class":74,"line":17241},[72,50604,34440],{"class":82},[72,50606,609],{"class":78},[72,50608,34836],{"class":82},[72,50610,50611],{"class":74,"line":17246},[72,50612,34841],{"class":621},[72,50614,50615],{"class":74,"line":17252},[72,50616,34846],{"class":82},[72,50618,50619],{"class":74,"line":17257},[72,50620,2828],{"emptyLinePlaceholder":490},[72,50622,50623],{"class":74,"line":17271},[72,50624,34855],{"class":621},[72,50626,50627],{"class":74,"line":17276},[72,50628,34860],{"class":621},[72,50630,50631,50633,50635,50637,50639,50641,50643],{"class":74,"line":17281},[72,50632,31655],{"class":82},[72,50634,609],{"class":78},[72,50636,31662],{"class":366},[72,50638,2133],{"class":78},[72,50640,31667],{"class":82},[72,50642,2130],{"class":78},[72,50644,34537],{"class":366},[72,50646,50647,50649,50651],{"class":74,"line":17295},[72,50648,31707],{"class":82},[72,50650,609],{"class":78},[72,50652,32707],{"class":82},[72,50654,50655],{"class":74,"line":17307},[72,50656,34889],{"class":621},[72,50658,50659],{"class":74,"line":17312},[72,50660,34894],{"class":621},[72,50662,50663,50665,50667,50669,50672,50674,50677],{"class":74,"line":17325},[72,50664,34899],{"class":82},[72,50666,609],{"class":78},[72,50668,1444],{"class":82},[72,50670,50671],{"class":366},"'猫'",[72,50673,932],{"class":82},[72,50675,50676],{"class":366},"'狗'",[72,50678,33664],{"class":82},[72,50680,50681,50683],{"class":74,"line":17330},[72,50682,34596],{"class":78},[72,50684,33302],{"class":82},[72,50686,50687],{"class":74,"line":17335},[72,50688,34964],{"class":621},[72,50690,50691,50693,50695,50697],{"class":74,"line":17340},[72,50692,3831],{"class":78},[72,50694,34971],{"class":82},[72,50696,26465],{"class":78},[72,50698,34615],{"class":82},[72,50700,50701,50703,50705],{"class":74,"line":17353},[72,50702,33028],{"class":82},[72,50704,609],{"class":78},[72,50706,33033],{"class":82},[72,50708,50709,50711,50713],{"class":74,"line":17358},[72,50710,33043],{"class":82},[72,50712,609],{"class":78},[72,50714,33048],{"class":82},[72,50716,50717],{"class":74,"line":33051},[72,50718,2828],{"emptyLinePlaceholder":490},[72,50720,50721],{"class":74,"line":33057},[72,50722,35000],{"class":621},[72,50724,50725],{"class":74,"line":33063},[72,50726,33293],{"class":82},[72,50728,50729],{"class":74,"line":33069},[72,50730,35009],{"class":621},[72,50732,50733,50735,50737],{"class":74,"line":33075},[72,50734,33078],{"class":82},[72,50736,609],{"class":78},[72,50738,33083],{"class":82},[72,50740,50741],{"class":74,"line":33086},[72,50742,35022],{"class":621},[72,50744,50745,50747,50749,50751,50753,50755,50757],{"class":74,"line":33092},[72,50746,33095],{"class":82},[72,50748,609],{"class":78},[72,50750,33100],{"class":82},[72,50752,33103],{"class":5642},[72,50754,609],{"class":78},[72,50756,772],{"class":362},[72,50758,570],{"class":82},[72,50760,50761],{"class":74,"line":33112},[72,50762,35043],{"class":621},[72,50764,50765,50767,50769],{"class":74,"line":33118},[72,50766,35048],{"class":82},[72,50768,609],{"class":78},[72,50770,35053],{"class":82},[72,50772,50773,50775,50777],{"class":74,"line":33129},[72,50774,35058],{"class":82},[72,50776,609],{"class":78},[72,50778,35063],{"class":82},[72,50780,50781,50783,50785,50787,50789,50791,50793,50795],{"class":74,"line":33135},[72,50782,35068],{"class":362},[72,50784,564],{"class":82},[72,50786,35073],{"class":366},[72,50788,35076],{"class":82},[72,50790,35079],{"class":366},[72,50792,932],{"class":82},[72,50794,35084],{"class":366},[72,50796,35087],{"class":82},[473,50798,50799],{},"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":68,"searchDepth":370,"depth":370,"links":50801},[50802,50803,50804,50805],{"id":31009,"depth":1608,"text":31010},{"id":38257,"depth":1608,"text":38258},{"id":41690,"depth":1608,"text":41691},{"id":45699,"depth":1608,"text":45700},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":31001,"description":23802},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50812,"title":50813,"body":50814,"description":23802,"extension":487,"meta":50821,"navigation":490,"path":50822,"seo":50823,"stem":50824,"__hash__":50825},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50815,"toc":50819},[50816],[10,50817,50813],{"id":50818},"_3yolo模型学习",{"title":68,"searchDepth":370,"depth":370,"links":50820},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50813,"description":23802},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50827,"title":50828,"body":50829,"description":50836,"extension":487,"meta":50837,"navigation":490,"path":50839,"seo":50840,"stem":50841,"__hash__":50842},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50830,"toc":50834},[50831],[15,50832,50833],{},"yolo模型还未补充",{"title":68,"searchDepth":370,"depth":370,"links":50835},[],"深度学习学习",{"category":50838},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50828,"description":50836},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50844,"title":50845,"body":50846,"description":23802,"extension":487,"meta":50871,"navigation":490,"path":50872,"seo":50873,"stem":50874,"__hash__":50875},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50847,"toc":50869},[50848,50851,50854,50859,50866],[10,50849,50845],{"id":50850},"_1工具",[15,50852,50853],{},"提示错误插件：有问题会提前报错",[15,50855,50856],{},[1891,50857],{"alt":68,"src":50858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[15,50860,50861],{},[257,50862,50865],{"href":50863,"rel":50864},"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",[261],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[15,50867,50868],{},"alt键加上下箭头可以实现语句的移动",{"title":68,"searchDepth":370,"depth":370,"links":50870},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50845,"description":23802},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50877,"title":50878,"body":50879,"description":23802,"extension":487,"meta":53743,"navigation":490,"path":53744,"seo":53745,"stem":53746,"__hash__":53747},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50880,"toc":53694},[50881,50884,50888,50892,50897,50900,50905,50909,50916,50921,50928,50933,50940,50945,50949,50954,50957,50961,50966,50970,50975,50978,50981,50984,50987,50990,50993,50996,50999,51004,51009,51014,51018,51021,51024,51028,51033,51036,51044,51049,51066,51074,51079,51084,51089,51094,51099,51102,51107,51112,51116,51125,51130,51135,51139,51144,51147,51151,51156,51164,51169,51174,51177,51182,51187,51192,51195,51198,51201,51206,51211,51214,51219,51222,51227,51230,51233,51236,51241,51244,51247,51262,51267,51272,51277,51280,51283,51286,51300,51303,51308,51313,51316,51319,51322,51325,51328,51331,51334,51338,51342,51347,51351,51354,51359,51364,51367,51372,51375,51379,51384,51387,51390,51393,51396,51399,51402,51405,51408,51411,51415,51420,51425,51430,51433,51436,51440,51445,51448,51452,51455,51458,51463,51466,51469,51473,51477,51480,51485,51490,51493,51522,51527,51532,51537,51542,51546,51551,51555,51560,51563,51567,51571,51576,51580,51585,51590,51594,51599,51602,51604,51607,51612,51616,51621,51625,51629,51634,51639,51644,51649,51653,51658,51663,51668,51671,51674,51679,51682,51687,51692,51697,51702,51706,52513,52517,52860,52865,52868,52871,52874,52877,52880,52883,52886,52889,52891,52894,52896,52899,52903,52908,52911,52914,52917,52921,52926,52931,52951,52954,52958,52963,52968,52985,52989,53018,53022,53044,53046,53085,53093,53099,53103,53106,53109,53114,53119,53122,53125,53128,53133,53138,53141,53144,53147,53150,53153,53156,53159,53162,53165,53168,53171,53173,53176,53179,53182,53185,53188,53191,53194,53197,53201,53206,53209,53214,53217,53220,53223,53226,53229,53232,53235,53237,53240,53243,53246,53249,53252,53255,53259,53262,53271,53274,53279,53282,53287,53290,53293,53296,53299,53302,53305,53308,53312,53316,53319,53322,53327,53332,53337,53341,53346,53351,53354,53357,53360,53363,53366,53371,53374,53379,53381,53386,53389,53393,53398,53401,53404,53409,53413,53416,53421,53424,53427,53456,53461,53464,53467,53470,53473,53476,53480,53483,53569,53573,53576,53581,53586,53593,53596,53599,53602,53605,53608,53613,53618,53621,53624,53627,53630,53633,53636,53639,53642,53645,53647,53650,53654,53659,53664,53669,53672,53677,53682,53685,53688,53691],[10,50882,50878],{"id":50883},"_2基础语法",[85,50885,50887],{"id":50886},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[531,50889,50891],{"id":50890},"_211-js组成","2.1.1 js组成",[22,50893,50894],{},[25,50895,50896],{},"js是编程语言，html和css不是编程语言，是标记语言",[15,50898,50899],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[22,50901,50902],{"start":370},[25,50903,50904],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[531,50906,50908],{"id":50907},"_212-js书写位置","2.1.2 js书写位置",[22,50910,50911],{},[25,50912,50913],{},[707,50914,50915],{},"内部 JavaScript",[15,50917,50918],{},[1891,50919],{"alt":68,"src":50920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[22,50922,50923],{"start":370},[25,50924,50925],{},[707,50926,50927],{},"外部 JavaScript",[15,50929,50930],{},[1891,50931],{"alt":68,"src":50932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[22,50934,50935],{"start":1608},[25,50936,50937],{},[707,50938,50939],{},"内联 JavaScript",[15,50941,50942],{},[1891,50943],{"alt":68,"src":50944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[531,50946,50948],{"id":50947},"_213-javascript注释","2.1.3 JavaScript注释",[15,50950,50951],{},[1891,50952],{"alt":68,"src":50953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[15,50955,50956],{},"alt+shift+a一定要记住！",[531,50958,50960],{"id":50959},"_214-javascript结束符","2.1.4 JavaScript结束符",[15,50962,50963],{},[1891,50964],{"alt":68,"src":50965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[531,50967,50969],{"id":50968},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[22,50971,50972],{},[25,50973,50974],{},"输出语法：",[15,50976,50977],{},"①document.write('要出的内容')",[15,50979,50980],{},"向body内输出内容；",[15,50982,50983],{},"如果输出的内容写的是标签，也会被解析cheng",[15,50985,50986],{},"②alert('要出的内容')",[15,50988,50989],{},"页面弹出警告对话框",[15,50991,50992],{},"③console.log('控制台打印')",[15,50994,50995],{},"控制台输出语法，程序员调试使用",[15,50997,50998],{},"输入log就行，自动生成：",[15,51000,51001],{},[1891,51002],{"alt":68,"src":51003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[22,51005,51006],{"start":370},[25,51007,51008],{},"输入语法：",[15,51010,51011],{},[1891,51012],{"alt":68,"src":51013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[531,51015,51017],{"id":51016},"_2116-字面量","21.1.6 字面量",[15,51019,51020],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[15,51022,51023],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[85,51025,51027],{"id":51026},"_22-变量","2.2 变量",[22,51029,51030],{},[25,51031,51032],{},"变量声明",[15,51034,51035],{},"let 变量名",[251,51037,51038,51041],{},[25,51039,51040],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[25,51042,51043],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[22,51045,51046],{"start":370},[25,51047,51048],{},"变量赋值",[63,51050,51054],{"className":51051,"code":51052,"language":51053,"meta":68,"style":68},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[34,51055,51056,51061],{"__ignoreMap":68},[72,51057,51058],{"class":74,"line":75},[72,51059,51060],{"class":82},"let age\n",[72,51062,51063],{"class":74,"line":370},[72,51064,51065],{"class":82},"age=18\n",[22,51067,51068,51071],{"start":1608},[25,51069,51070],{},"连这些（变量的初始化）：let age=18",[25,51072,51073],{},"更新变量",[15,51075,51076],{},[1891,51077],{"alt":68,"src":51078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[22,51080,51081],{"start":1629},[25,51082,51083],{},"声明多个变量",[15,51085,51086],{},[1891,51087],{"alt":68,"src":51088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[22,51090,51091],{"start":1643},[25,51092,51093],{},"变量命名规则与规范",[15,51095,51096],{},[1891,51097],{"alt":68,"src":51098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[15,51100,51101],{},"遵守小驼峰！",[22,51103,51104],{"start":1649},[25,51105,51106],{},"变量拓展-let和var的区别",[15,51108,51109],{},[1891,51110],{"alt":68,"src":51111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[85,51113,51115],{"id":51114},"_23-数组","2.3 数组",[63,51117,51119],{"className":51051,"code":51118,"language":51053,"meta":68,"style":68},"let arr = []\n",[34,51120,51121],{"__ignoreMap":68},[72,51122,51123],{"class":74,"line":75},[72,51124,51118],{"class":82},[15,51126,51127],{},[1891,51128],{"alt":68,"src":51129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[15,51131,51132],{},[1891,51133],{"alt":68,"src":51134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[85,51136,51138],{"id":51137},"_24-常量","2.4 常量",[15,51140,51141],{},[1891,51142],{"alt":68,"src":51143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[15,51145,51146],{},"const — 类似于 let ，但是变量的值无法被修改",[85,51148,51150],{"id":51149},"_25-数据类型","2.5 数据类型",[15,51152,51153],{},[1891,51154],{"alt":68,"src":51155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[22,51157,51158,51161],{},[25,51159,51160],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[25,51162,51163],{},"算数运算符：",[15,51165,51166],{},[1891,51167],{"alt":68,"src":51168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[22,51170,51171],{"start":1608},[25,51172,51173],{},"数字类型（Number）",[15,51175,51176],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[15,51178,51179],{},[1891,51180],{"alt":68,"src":51181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[22,51183,51184],{"start":1623},[25,51185,51186],{},"字符串类型（string）",[15,51188,51189],{},[1891,51190],{"alt":68,"src":51191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[15,51193,51194],{},"反引号也是可以使用的",[15,51196,51197],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[15,51199,51200],{},"例如：document.write(\"我今年\"+age+\"岁\")",[22,51202,51203],{"start":1629},[25,51204,51205],{},"模板字符串",[15,51207,51208],{},[1891,51209],{"alt":68,"src":51210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[15,51212,51213],{},"类似于python的字符串格式化",[22,51215,51216],{"start":1643},[25,51217,51218],{},"布尔类型",[15,51220,51221],{},"true 和 false",[22,51223,51224],{"start":1649},[25,51225,51226],{},"未定义类型（underfined）",[15,51228,51229],{},"表示没有赋值",[15,51231,51232],{},"未定义类型是比较特殊的类型，只有一个值undefined",[15,51234,51235],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[22,51237,51238],{"start":1740},[25,51239,51240],{},"null（空类型）",[15,51242,51243],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[15,51245,51246],{},"赋值了，但是内容为空",[63,51248,51250],{"className":51051,"code":51249,"language":51053,"meta":68,"style":68},"typeof null\n输出的是'object'，是一个对象数据类型\n",[34,51251,51252,51257],{"__ignoreMap":68},[72,51253,51254],{"class":74,"line":75},[72,51255,51256],{"class":82},"typeof null\n",[72,51258,51259],{"class":74,"line":370},[72,51260,51261],{"class":82},"输出的是'object'，是一个对象数据类型\n",[22,51263,51264],{"start":1746},[25,51265,51266],{},"控制台检测数据类型",[15,51268,51269],{},[1891,51270],{"alt":68,"src":51271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[22,51273,51274],{"start":1758},[25,51275,51276],{},"类型转换",[15,51278,51279],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[15,51281,51282],{},"转换方式：隐式转换和显示转换",[15,51284,51285],{},"①隐式转换",[251,51287,51288,51291,51294,51297],{},[25,51289,51290],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[25,51292,51293],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[25,51295,51296],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[25,51298,51299],{},"任何数据和字符串相加结果都是字符串",[15,51301,51302],{},"②显示转换",[15,51304,51305],{},[1891,51306],{"alt":68,"src":51307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[15,51309,51310],{},[1891,51311],{"alt":68,"src":51312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[15,51314,51315],{},"在输入的时候要用好隐式转换，简单写起来",[15,51317,51318],{},"let num = +prompt(’请输入数字：‘)",[15,51320,51321],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[15,51323,51324],{},"console.log(parseInt('12.333px'))",[15,51326,51327],{},"输出为：12",[15,51329,51330],{},"console.log(parseInt('a'a'a12.333px'))",[15,51332,51333],{},"输出：NaN",[85,51335,51337],{"id":51336},"_26-运算符","2.6 运算符",[531,51339,51341],{"id":51340},"_261-赋值运算符","2.6.1 赋值运算符",[15,51343,51344],{},[1891,51345],{"alt":68,"src":51346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[531,51348,51350],{"id":51349},"_262-一元运算符","2.6.2 一元运算符",[15,51352,51353],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[15,51355,51356],{},[1891,51357],{"alt":68,"src":51358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[15,51360,51361],{},[1891,51362],{"alt":68,"src":51363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[15,51365,51366],{},"两者的区别：",[15,51368,51369],{},[1891,51370],{"alt":68,"src":51371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[15,51373,51374],{},"前置先自加；后置后加，代码执行完之后再加",[531,51376,51378],{"id":51377},"_263-比较运算符","2.6.3 比较运算符",[15,51380,51381],{},[1891,51382],{"alt":68,"src":51383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[15,51385,51386],{},"比较运算符也有隐式转换",[15,51388,51389],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[15,51391,51392],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[15,51394,51395],{},"要使用三等，开发的时候",[15,51397,51398],{},"NaN不等于任何人，包括它自己",[15,51400,51401],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[15,51403,51404],{},"7\u002F10=0.7",[15,51406,51407],{},"最后：0.5+0.2=0.7",[15,51409,51410],{},"字符串比较，比较的是字符对应的ASCII码",[531,51412,51414],{"id":51413},"_264-逻辑运算符","2.6.4 逻辑运算符",[15,51416,51417],{},[1891,51418],{"alt":68,"src":51419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[15,51421,51422],{},[1891,51423],{"alt":68,"src":51424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[15,51426,51427],{},[1891,51428],{"alt":68,"src":51429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[15,51431,51432],{},"上述题目选D",[15,51434,51435],{},"与真2假1；或真1假2",[531,51437,51439],{"id":51438},"_265-运算符优先级","2.6.5 运算符优先级",[15,51441,51442],{},[1891,51443],{"alt":68,"src":51444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[15,51446,51447],{},"先算逻辑与，后算逻辑或",[85,51449,51451],{"id":51450},"_27-语句","2.7 语句",[15,51453,51454],{},"表达式：是可以被求值的代码，会有结果给我们",[15,51456,51457],{},"语句：语句是可以被执行的代码，例如prompt()",[15,51459,51460],{},[1891,51461],{"alt":68,"src":51462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[15,51464,51465],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[15,51467,51468],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[531,51470,51472],{"id":51471},"_271-分支语句","2.7.1 分支语句",[22423,51474,51476],{"id":51475},"_2711-if分支语句","2.7.1.1 if分支语句",[15,51478,51479],{},"if语句单行简单的话，可以不写{}，写在一行就行",[22,51481,51482],{},[25,51483,51484],{},"单分支语句",[15,51486,51487],{},[1891,51488],{"alt":68,"src":51489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[15,51491,51492],{},"除了0，所有数字都为真",[63,51494,51496],{"className":51051,"code":51495,"language":51053,"meta":68,"style":68},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[34,51497,51498,51503,51508,51513,51517],{"__ignoreMap":68},[72,51499,51500],{"class":74,"line":75},[72,51501,51502],{"class":82},"if（0) {\n",[72,51504,51505],{"class":74,"line":370},[72,51506,51507],{"class":82},"    let a=1\n",[72,51509,51510],{"class":74,"line":1608},[72,51511,51512],{"class":82},"    alert(typeof a)\n",[72,51514,51515],{"class":74,"line":1623},[72,51516,1994],{"class":82},[72,51518,51519],{"class":74,"line":1629},[72,51520,51521],{"class":82},"不输出，括号为假\n",[22,51523,51524],{"start":370},[25,51525,51526],{},"双分支语句",[15,51528,51529],{},[1891,51530],{"alt":68,"src":51531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[22,51533,51534],{"start":1608},[25,51535,51536],{},"多分支语句",[15,51538,51539],{},[1891,51540],{"alt":68,"src":51541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[22423,51543,51545],{"id":51544},"_2712-三元运算符","2.7.1.2 三元运算符",[15,51547,51548],{},[1891,51549],{"alt":68,"src":51550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[22423,51552,51554],{"id":51553},"_2713-switch语句","2.7.1.3 switch语句",[15,51556,51557],{},[1891,51558],{"alt":68,"src":51559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[15,51561,51562],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[531,51564,51566],{"id":51565},"_272-循环语句","2.7.2 循环语句",[22423,51568,51570],{"id":51569},"_2721-断点演示","2.7.2.1 断点演示",[15,51572,51573],{},[1891,51574],{"alt":68,"src":51575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[22423,51577,51579],{"id":51578},"_2722-while循环","2.7.2.2 while循环",[15,51581,51582],{},[1891,51583],{"alt":68,"src":51584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[15,51586,51587],{},[1891,51588],{"alt":68,"src":51589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[22423,51591,51593],{"id":51592},"_2723-for循环","2.7.2.3 for循环",[15,51595,51596],{},[1891,51597],{"alt":68,"src":51598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[15,51600,51601],{},"for(;;) {",[15,51603,1500],{},[15,51605,51606],{},"表示无限循环",[15,51608,51609],{},[1891,51610],{"alt":68,"src":51611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[22423,51613,51615],{"id":51614},"_2724-循环的退出","2.7.2.4 循环的退出",[15,51617,51618],{},[1891,51619],{"alt":68,"src":51620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[85,51622,51624],{"id":51623},"_28-数组","2.8 数组",[531,51626,51628],{"id":51627},"_281-基础认识","2.8.1 基础认识",[15,51630,51631],{},[1891,51632],{"alt":68,"src":51633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[15,51635,51636],{},[1891,51637],{"alt":68,"src":51638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[15,51640,51641],{},[1891,51642],{"alt":68,"src":51643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[15,51645,51646],{},[1891,51647],{"alt":68,"src":51648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[531,51650,51652],{"id":51651},"_282-操作数组","2.8.2 操作数组",[15,51654,51655],{},[1891,51656],{"alt":68,"src":51657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[22,51659,51660],{},[25,51661,51662],{},"添加元素",[15,51664,51665],{},[1891,51666],{"alt":68,"src":51667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[15,51669,51670],{},"console.log(arr.push('green'))",[15,51672,51673],{},"输出结果：为新数组的长度",[15,51675,51676],{},[1891,51677],{"alt":68,"src":51678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[15,51680,51681],{},"push用的非常多，一定要记住",[22,51683,51684],{},[25,51685,51686],{},"删除元素",[15,51688,51689],{},[1891,51690],{"alt":68,"src":51691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[15,51693,51694],{},[1891,51695],{"alt":68,"src":51696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[15,51698,51699],{},[1891,51700],{"alt":68,"src":51701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[531,51703,51705],{"id":51704},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[63,51707,51709],{"className":51051,"code":51708,"language":51053,"meta":68,"style":68},"\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",[34,51710,51711,51726,51742,51746,51755,51773,51797,51819,51833,51841,51848,51860,51871,51875,51879,51886,51898,51913,51926,51945,51962,51977,51989,52001,52013,52017,52021,52032,52042,52054,52066,52078,52089,52093,52097,52109,52113,52127,52131,52135,52146,52160,52172,52186,52190,52199,52208,52212,52221,52225,52234,52239,52244,52257,52285,52290,52295,52320,52325,52329,52334,52339,52354,52358,52363,52393,52405,52421,52437,52451,52456,52463,52467,52472,52485,52493,52501,52505],{"__ignoreMap":68},[72,51712,51713,51716,51720,51723],{"class":74,"line":75},[72,51714,51715],{"class":82},"\u003C!",[72,51717,51719],{"class":51718},"s9eBZ","DOCTYPE",[72,51721,51722],{"class":358}," html",[72,51724,51725],{"class":82},">\n",[72,51727,51728,51730,51732,51735,51737,51740],{"class":74,"line":370},[72,51729,1464],{"class":82},[72,51731,51053],{"class":51718},[72,51733,51734],{"class":358}," lang",[72,51736,609],{"class":82},[72,51738,51739],{"class":366},"\"en\"",[72,51741,51725],{"class":82},[72,51743,51744],{"class":74,"line":1608},[72,51745,2828],{"emptyLinePlaceholder":490},[72,51747,51748,51750,51753],{"class":74,"line":1623},[72,51749,1464],{"class":82},[72,51751,51752],{"class":51718},"head",[72,51754,51725],{"class":82},[72,51756,51757,51760,51763,51766,51768,51771],{"class":74,"line":1629},[72,51758,51759],{"class":82},"    \u003C",[72,51761,51762],{"class":51718},"meta",[72,51764,51765],{"class":358}," charset",[72,51767,609],{"class":82},[72,51769,51770],{"class":366},"\"UTF-8\"",[72,51772,51725],{"class":82},[72,51774,51775,51777,51779,51782,51784,51787,51790,51792,51795],{"class":74,"line":1643},[72,51776,51759],{"class":82},[72,51778,51762],{"class":51718},[72,51780,51781],{"class":358}," http-equiv",[72,51783,609],{"class":82},[72,51785,51786],{"class":366},"\"X-UA-Compatible\"",[72,51788,51789],{"class":358}," content",[72,51791,609],{"class":82},[72,51793,51794],{"class":366},"\"IE=edge\"",[72,51796,51725],{"class":82},[72,51798,51799,51801,51803,51805,51807,51810,51812,51814,51817],{"class":74,"line":1649},[72,51800,51759],{"class":82},[72,51802,51762],{"class":51718},[72,51804,15346],{"class":358},[72,51806,609],{"class":82},[72,51808,51809],{"class":366},"\"viewport\"",[72,51811,51789],{"class":358},[72,51813,609],{"class":82},[72,51815,51816],{"class":366},"\"width=device-width, initial-scale=1.0\"",[72,51818,51725],{"class":82},[72,51820,51821,51823,51826,51829,51831],{"class":74,"line":1740},[72,51822,51759],{"class":82},[72,51824,51825],{"class":51718},"title",[72,51827,51828],{"class":82},">Document\u003C\u002F",[72,51830,51825],{"class":51718},[72,51832,51725],{"class":82},[72,51834,51835,51837,51839],{"class":74,"line":1746},[72,51836,51759],{"class":82},[72,51838,473],{"class":51718},[72,51840,51725],{"class":82},[72,51842,51843,51846],{"class":74,"line":1758},[72,51844,51845],{"class":51718},"        *",[72,51847,15998],{"class":82},[72,51849,51850,51853,51856,51858],{"class":74,"line":2041},[72,51851,51852],{"class":362},"            margin",[72,51854,51855],{"class":82},": ",[72,51857,747],{"class":362},[72,51859,1719],{"class":82},[72,51861,51862,51865,51867,51869],{"class":74,"line":2046},[72,51863,51864],{"class":362},"            padding",[72,51866,51855],{"class":82},[72,51868,747],{"class":362},[72,51870,1719],{"class":82},[72,51872,51873],{"class":74,"line":2052},[72,51874,2957],{"class":82},[72,51876,51877],{"class":74,"line":2057},[72,51878,2828],{"emptyLinePlaceholder":490},[72,51880,51881,51884],{"class":74,"line":2071},[72,51882,51883],{"class":358},"        .box",[72,51885,15998],{"class":82},[72,51887,51888,51891,51893,51896],{"class":74,"line":2076},[72,51889,51890],{"class":362},"            display",[72,51892,51855],{"class":82},[72,51894,51895],{"class":362},"flex",[72,51897,1719],{"class":82},[72,51899,51900,51903,51905,51908,51911],{"class":74,"line":2082},[72,51901,51902],{"class":362},"            width",[72,51904,51855],{"class":82},[72,51906,51907],{"class":362},"700",[72,51909,51910],{"class":78},"px",[72,51912,1719],{"class":82},[72,51914,51915,51918,51920,51922,51924],{"class":74,"line":2103},[72,51916,51917],{"class":362},"            height",[72,51919,51855],{"class":82},[72,51921,4401],{"class":362},[72,51923,51910],{"class":78},[72,51925,1719],{"class":82},[72,51927,51928,51931,51933,51935,51937,51940,51943],{"class":74,"line":2108},[72,51929,51930],{"class":362},"            border-left",[72,51932,51855],{"class":82},[72,51934,772],{"class":362},[72,51936,51910],{"class":78},[72,51938,51939],{"class":362}," solid",[72,51941,51942],{"class":362}," pink",[72,51944,1719],{"class":82},[72,51946,51947,51950,51952,51954,51956,51958,51960],{"class":74,"line":2122},[72,51948,51949],{"class":362},"            border-bottom",[72,51951,51855],{"class":82},[72,51953,772],{"class":362},[72,51955,51910],{"class":78},[72,51957,51939],{"class":362},[72,51959,51942],{"class":362},[72,51961,1719],{"class":82},[72,51963,51964,51966,51968,51970,51972,51975],{"class":74,"line":2127},[72,51965,51852],{"class":362},[72,51967,51855],{"class":82},[72,51969,1210],{"class":362},[72,51971,51910],{"class":78},[72,51973,51974],{"class":362}," auto",[72,51976,1719],{"class":82},[72,51978,51979,51982,51984,51987],{"class":74,"line":2156},[72,51980,51981],{"class":362},"            justify-content",[72,51983,51855],{"class":82},[72,51985,51986],{"class":362},"space-around",[72,51988,1719],{"class":82},[72,51990,51991,51994,51996,51999],{"class":74,"line":2161},[72,51992,51993],{"class":362},"            align-items",[72,51995,51855],{"class":82},[72,51997,51998],{"class":362},"flex-end",[72,52000,1719],{"class":82},[72,52002,52003,52006,52008,52011],{"class":74,"line":2178},[72,52004,52005],{"class":362},"            text-align",[72,52007,51855],{"class":82},[72,52009,52010],{"class":362},"center",[72,52012,1719],{"class":82},[72,52014,52015],{"class":74,"line":2183},[72,52016,2957],{"class":82},[72,52018,52019],{"class":74,"line":2188},[72,52020,2828],{"emptyLinePlaceholder":490},[72,52022,52023,52025,52027,52030],{"class":74,"line":2193},[72,52024,51883],{"class":358},[72,52026,1514],{"class":78},[72,52028,52029],{"class":51718},"div",[72,52031,15998],{"class":82},[72,52033,52034,52036,52038,52040],{"class":74,"line":2207},[72,52035,51890],{"class":362},[72,52037,51855],{"class":82},[72,52039,51895],{"class":362},[72,52041,1719],{"class":82},[72,52043,52044,52046,52048,52050,52052],{"class":74,"line":2212},[72,52045,51902],{"class":362},[72,52047,51855],{"class":82},[72,52049,1210],{"class":362},[72,52051,51910],{"class":78},[72,52053,1719],{"class":82},[72,52055,52056,52059,52061,52064],{"class":74,"line":3005},[72,52057,52058],{"class":362},"            background-color",[72,52060,51855],{"class":82},[72,52062,52063],{"class":362},"pink",[72,52065,1719],{"class":82},[72,52067,52068,52071,52073,52076],{"class":74,"line":3019},[72,52069,52070],{"class":362},"            flex-direction",[72,52072,51855],{"class":82},[72,52074,52075],{"class":362},"column",[72,52077,1719],{"class":82},[72,52079,52080,52082,52084,52087],{"class":74,"line":3027},[72,52081,51981],{"class":362},[72,52083,51855],{"class":82},[72,52085,52086],{"class":362},"space-between",[72,52088,1719],{"class":82},[72,52090,52091],{"class":74,"line":3032},[72,52092,2957],{"class":82},[72,52094,52095],{"class":74,"line":3038},[72,52096,2828],{"emptyLinePlaceholder":490},[72,52098,52099,52101,52104,52107],{"class":74,"line":3044},[72,52100,51883],{"class":358},[72,52102,52103],{"class":51718}," div",[72,52105,52106],{"class":51718}," span",[72,52108,15998],{"class":82},[72,52110,52111],{"class":74,"line":3049},[72,52112,2828],{"emptyLinePlaceholder":490},[72,52114,52115,52118,52120,52123,52125],{"class":74,"line":8374},[72,52116,52117],{"class":362},"            margin-top",[72,52119,51855],{"class":82},[72,52121,52122],{"class":362},"-20",[72,52124,51910],{"class":78},[72,52126,1719],{"class":82},[72,52128,52129],{"class":74,"line":8398},[72,52130,2957],{"class":82},[72,52132,52133],{"class":74,"line":8403},[72,52134,2828],{"emptyLinePlaceholder":490},[72,52136,52137,52139,52141,52144],{"class":74,"line":8409},[72,52138,51883],{"class":358},[72,52140,52103],{"class":51718},[72,52142,52143],{"class":51718}," h4",[72,52145,15998],{"class":82},[72,52147,52148,52151,52153,52156,52158],{"class":74,"line":8436},[72,52149,52150],{"class":362},"            margin-bottom",[72,52152,51855],{"class":82},[72,52154,52155],{"class":362},"-35",[72,52157,51910],{"class":78},[72,52159,1719],{"class":82},[72,52161,52162,52164,52166,52168,52170],{"class":74,"line":8441},[72,52163,51902],{"class":362},[72,52165,51855],{"class":82},[72,52167,910],{"class":362},[72,52169,51910],{"class":78},[72,52171,1719],{"class":82},[72,52173,52174,52177,52179,52182,52184],{"class":74,"line":8447},[72,52175,52176],{"class":362},"            margin-left",[72,52178,51855],{"class":82},[72,52180,52181],{"class":362},"-10",[72,52183,51910],{"class":78},[72,52185,1719],{"class":82},[72,52187,52188],{"class":74,"line":8459},[72,52189,2957],{"class":82},[72,52191,52192,52195,52197],{"class":74,"line":8471},[72,52193,52194],{"class":82},"    \u003C\u002F",[72,52196,473],{"class":51718},[72,52198,51725],{"class":82},[72,52200,52201,52204,52206],{"class":74,"line":8483},[72,52202,52203],{"class":82},"\u003C\u002F",[72,52205,51752],{"class":51718},[72,52207,51725],{"class":82},[72,52209,52210],{"class":74,"line":10142},[72,52211,2828],{"emptyLinePlaceholder":490},[72,52213,52214,52216,52219],{"class":74,"line":10167},[72,52215,1464],{"class":82},[72,52217,52218],{"class":51718},"body",[72,52220,51725],{"class":82},[72,52222,52223],{"class":74,"line":10190},[72,52224,2828],{"emptyLinePlaceholder":490},[72,52226,52227,52229,52232],{"class":74,"line":10214},[72,52228,51759],{"class":82},[72,52230,52231],{"class":51718},"script",[72,52233,51725],{"class":82},[72,52235,52236],{"class":74,"line":10219},[72,52237,52238],{"class":621},"        \u002F\u002F 1. 四次弹框效果\n",[72,52240,52241],{"class":74,"line":10224},[72,52242,52243],{"class":621},"        \u002F\u002F 声明一个新的数组\n",[72,52245,52246,52249,52252,52254],{"class":74,"line":10229},[72,52247,52248],{"class":78},"        let",[72,52250,52251],{"class":82}," arr ",[72,52253,609],{"class":78},[72,52255,52256],{"class":82}," []\n",[72,52258,52259,52261,52263,52266,52268,52270,52272,52274,52276,52279,52281,52283],{"class":74,"line":10238},[72,52260,3831],{"class":78},[72,52262,2087],{"class":82},[72,52264,52265],{"class":78},"let",[72,52267,9864],{"class":82},[72,52269,609],{"class":78},[72,52271,25540],{"class":362},[72,52273,9871],{"class":82},[72,52275,2017],{"class":78},[72,52277,52278],{"class":362}," 4",[72,52280,3642],{"class":82},[72,52282,2720],{"class":78},[72,52284,12868],{"class":82},[72,52286,52287],{"class":74,"line":10243},[72,52288,52289],{"class":621},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[72,52291,52292],{"class":74,"line":10249},[72,52293,52294],{"class":621},"            \u002F\u002F arr.push(num)\n",[72,52296,52297,52300,52303,52305,52308,52310,52313,52315,52318],{"class":74,"line":10270},[72,52298,52299],{"class":82},"            arr.",[72,52301,52302],{"class":358},"push",[72,52304,564],{"class":82},[72,52306,52307],{"class":358},"prompt",[72,52309,564],{"class":82},[72,52311,52312],{"class":366},"`请输入第${",[72,52314,995],{"class":82},[72,52316,52317],{"class":366},"}季度的数据:`",[72,52319,30915],{"class":82},[72,52321,52322],{"class":74,"line":10276},[72,52323,52324],{"class":621},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[72,52326,52327],{"class":74,"line":10290},[72,52328,2957],{"class":82},[72,52330,52331],{"class":74,"line":10296},[72,52332,52333],{"class":621},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[72,52335,52336],{"class":74,"line":10323},[72,52337,52338],{"class":621},"        \u002F\u002F 盒子开头\n",[72,52340,52341,52344,52347,52349,52352],{"class":74,"line":10332},[72,52342,52343],{"class":82},"        document.",[72,52345,52346],{"class":358},"write",[72,52348,564],{"class":82},[72,52350,52351],{"class":366},"` \u003Cdiv class=\"box\">`",[72,52353,570],{"class":82},[72,52355,52356],{"class":74,"line":10338},[72,52357,2828],{"emptyLinePlaceholder":490},[72,52359,52360],{"class":74,"line":10346},[72,52361,52362],{"class":621},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[72,52364,52365,52367,52369,52371,52373,52375,52377,52379,52381,52384,52387,52389,52391],{"class":74,"line":10351},[72,52366,3831],{"class":78},[72,52368,2087],{"class":82},[72,52370,52265],{"class":78},[72,52372,9864],{"class":82},[72,52374,609],{"class":78},[72,52376,4521],{"class":362},[72,52378,9871],{"class":82},[72,52380,1464],{"class":78},[72,52382,52383],{"class":82}," arr.",[72,52385,52386],{"class":362},"length",[72,52388,3642],{"class":82},[72,52390,2720],{"class":78},[72,52392,12868],{"class":82},[72,52394,52395,52398,52400,52402],{"class":74,"line":17030},[72,52396,52397],{"class":82},"            document.",[72,52399,52346],{"class":358},[72,52401,564],{"class":82},[72,52403,52404],{"class":366},"`\n",[72,52406,52407,52410,52412,52414,52416,52418],{"class":74,"line":17036},[72,52408,52409],{"class":366},"              \u003Cdiv style=\"height: ${",[72,52411,4308],{"class":82},[72,52413,1444],{"class":366},[72,52415,995],{"class":82},[72,52417,1494],{"class":366},[72,52419,52420],{"class":366},"}px;\">\n",[72,52422,52423,52426,52428,52430,52432,52434],{"class":74,"line":17059},[72,52424,52425],{"class":366},"                \u003Cspan>${",[72,52427,4308],{"class":82},[72,52429,1444],{"class":366},[72,52431,995],{"class":82},[72,52433,1494],{"class":366},[72,52435,52436],{"class":366},"}\u003C\u002Fspan>\n",[72,52438,52439,52442,52444,52446,52448],{"class":74,"line":17065},[72,52440,52441],{"class":366},"                \u003Ch4>第${",[72,52443,995],{"class":82},[72,52445,45984],{"class":78},[72,52447,25540],{"class":362},[72,52449,52450],{"class":366},"}季度\u003C\u002Fh4>\n",[72,52452,52453],{"class":74,"line":17088},[72,52454,52455],{"class":366},"              \u003C\u002Fdiv>          \n",[72,52457,52458,52461],{"class":74,"line":17102},[72,52459,52460],{"class":366},"            `",[72,52462,570],{"class":82},[72,52464,52465],{"class":74,"line":17122},[72,52466,2957],{"class":82},[72,52468,52469],{"class":74,"line":17128},[72,52470,52471],{"class":621},"        \u002F\u002F 盒子结尾\n",[72,52473,52474,52476,52478,52480,52483],{"class":74,"line":17139},[72,52475,52343],{"class":82},[72,52477,52346],{"class":358},[72,52479,564],{"class":82},[72,52481,52482],{"class":366},"` \u003C\u002Fdiv>`",[72,52484,570],{"class":82},[72,52486,52487,52489,52491],{"class":74,"line":17162},[72,52488,52194],{"class":82},[72,52490,52231],{"class":51718},[72,52492,51725],{"class":82},[72,52494,52495,52497,52499],{"class":74,"line":17184},[72,52496,52203],{"class":82},[72,52498,52218],{"class":51718},[72,52500,51725],{"class":82},[72,52502,52503],{"class":74,"line":17189},[72,52504,2828],{"emptyLinePlaceholder":490},[72,52506,52507,52509,52511],{"class":74,"line":17195},[72,52508,52203],{"class":82},[72,52510,51053],{"class":51718},[72,52512,51725],{"class":82},[531,52514,52516],{"id":52515},"_284-冒泡排序","2.8.4 冒泡排序",[63,52518,52520],{"className":51051,"code":52519,"language":51053,"meta":68,"style":68},"\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",[34,52521,52522,52532,52546,52550,52558,52573,52593,52605,52613,52617,52625,52633,52665,52698,52735,52740,52759,52764,52777,52792,52808,52812,52817,52821,52831,52840,52848,52852],{"__ignoreMap":68},[72,52523,52524,52526,52528,52530],{"class":74,"line":75},[72,52525,51715],{"class":82},[72,52527,51719],{"class":51718},[72,52529,51722],{"class":358},[72,52531,51725],{"class":82},[72,52533,52534,52536,52538,52540,52542,52544],{"class":74,"line":370},[72,52535,1464],{"class":82},[72,52537,51053],{"class":51718},[72,52539,51734],{"class":358},[72,52541,609],{"class":82},[72,52543,51739],{"class":366},[72,52545,51725],{"class":82},[72,52547,52548],{"class":74,"line":1608},[72,52549,2828],{"emptyLinePlaceholder":490},[72,52551,52552,52554,52556],{"class":74,"line":1623},[72,52553,1464],{"class":82},[72,52555,51752],{"class":51718},[72,52557,51725],{"class":82},[72,52559,52560,52563,52565,52567,52569,52571],{"class":74,"line":1629},[72,52561,52562],{"class":82},"  \u003C",[72,52564,51762],{"class":51718},[72,52566,51765],{"class":358},[72,52568,609],{"class":82},[72,52570,51770],{"class":366},[72,52572,51725],{"class":82},[72,52574,52575,52577,52579,52581,52583,52585,52587,52589,52591],{"class":74,"line":1643},[72,52576,52562],{"class":82},[72,52578,51762],{"class":51718},[72,52580,15346],{"class":358},[72,52582,609],{"class":82},[72,52584,51809],{"class":366},[72,52586,51789],{"class":358},[72,52588,609],{"class":82},[72,52590,51816],{"class":366},[72,52592,51725],{"class":82},[72,52594,52595,52597,52599,52601,52603],{"class":74,"line":1649},[72,52596,52562],{"class":82},[72,52598,51825],{"class":51718},[72,52600,51828],{"class":82},[72,52602,51825],{"class":51718},[72,52604,51725],{"class":82},[72,52606,52607,52609,52611],{"class":74,"line":1740},[72,52608,52203],{"class":82},[72,52610,51752],{"class":51718},[72,52612,51725],{"class":82},[72,52614,52615],{"class":74,"line":1746},[72,52616,2828],{"emptyLinePlaceholder":490},[72,52618,52619,52621,52623],{"class":74,"line":1758},[72,52620,1464],{"class":82},[72,52622,52218],{"class":51718},[72,52624,51725],{"class":82},[72,52626,52627,52629,52631],{"class":74,"line":2041},[72,52628,52562],{"class":82},[72,52630,52231],{"class":51718},[72,52632,51725],{"class":82},[72,52634,52635,52638,52640,52642,52645,52647,52649,52651,52653,52655,52657,52659,52661,52663],{"class":74,"line":2046},[72,52636,52637],{"class":78},"    let",[72,52639,52251],{"class":82},[72,52641,609],{"class":78},[72,52643,52644],{"class":82}," [",[72,52646,873],{"class":362},[72,52648,12861],{"class":82},[72,52650,847],{"class":362},[72,52652,12861],{"class":82},[72,52654,634],{"class":362},[72,52656,12861],{"class":82},[72,52658,640],{"class":362},[72,52660,12861],{"class":82},[72,52662,772],{"class":362},[72,52664,33664],{"class":82},[72,52666,52667,52669,52671,52673,52675,52677,52679,52681,52683,52685,52687,52690,52692,52694,52696],{"class":74,"line":2052},[72,52668,3629],{"class":78},[72,52670,2087],{"class":82},[72,52672,52265],{"class":78},[72,52674,9864],{"class":82},[72,52676,609],{"class":78},[72,52678,4521],{"class":362},[72,52680,9871],{"class":82},[72,52682,1464],{"class":78},[72,52684,52383],{"class":82},[72,52686,52386],{"class":362},[72,52688,52689],{"class":78}," -",[72,52691,25540],{"class":362},[72,52693,3642],{"class":82},[72,52695,2720],{"class":78},[72,52697,12868],{"class":82},[72,52699,52700,52703,52705,52707,52709,52711,52713,52715,52717,52719,52721,52723,52725,52727,52729,52731,52733],{"class":74,"line":2057},[72,52701,52702],{"class":78},"      for",[72,52704,2087],{"class":82},[72,52706,52265],{"class":78},[72,52708,9926],{"class":82},[72,52710,609],{"class":78},[72,52712,4521],{"class":362},[72,52714,9933],{"class":82},[72,52716,1464],{"class":78},[72,52718,52383],{"class":82},[72,52720,52386],{"class":362},[72,52722,52689],{"class":78},[72,52724,9864],{"class":82},[72,52726,1086],{"class":78},[72,52728,25540],{"class":362},[72,52730,9940],{"class":82},[72,52732,2720],{"class":78},[72,52734,12868],{"class":82},[72,52736,52737],{"class":74,"line":2071},[72,52738,52739],{"class":621},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[72,52741,52742,52744,52747,52749,52752,52754,52756],{"class":74,"line":2076},[72,52743,2925],{"class":78},[72,52745,52746],{"class":82}," (arr[j] ",[72,52748,1514],{"class":78},[72,52750,52751],{"class":82}," arr[j ",[72,52753,1035],{"class":78},[72,52755,25540],{"class":362},[72,52757,52758],{"class":82},"]) {\n",[72,52760,52761],{"class":74,"line":2082},[72,52762,52763],{"class":621},"          \u002F\u002F 交换两个变量\n",[72,52765,52766,52769,52772,52774],{"class":74,"line":2103},[72,52767,52768],{"class":78},"          let",[72,52770,52771],{"class":82}," tmp ",[72,52773,609],{"class":78},[72,52775,52776],{"class":82}," arr[j]\n",[72,52778,52779,52782,52784,52786,52788,52790],{"class":74,"line":2108},[72,52780,52781],{"class":82},"          arr[j] ",[72,52783,609],{"class":78},[72,52785,52751],{"class":82},[72,52787,1035],{"class":78},[72,52789,25540],{"class":362},[72,52791,33664],{"class":82},[72,52793,52794,52797,52799,52801,52803,52805],{"class":74,"line":2122},[72,52795,52796],{"class":82},"          arr[j ",[72,52798,1035],{"class":78},[72,52800,25540],{"class":362},[72,52802,4871],{"class":82},[72,52804,609],{"class":78},[72,52806,52807],{"class":82}," tmp\n",[72,52809,52810],{"class":74,"line":2127},[72,52811,2957],{"class":82},[72,52813,52814],{"class":74,"line":2156},[72,52815,52816],{"class":82},"      }\n",[72,52818,52819],{"class":74,"line":2161},[72,52820,2615],{"class":82},[72,52822,52823,52826,52828],{"class":74,"line":2178},[72,52824,52825],{"class":82},"    document.",[72,52827,52346],{"class":358},[72,52829,52830],{"class":82},"(arr)\n",[72,52832,52833,52836,52838],{"class":74,"line":2183},[72,52834,52835],{"class":82},"  \u003C\u002F",[72,52837,52231],{"class":51718},[72,52839,51725],{"class":82},[72,52841,52842,52844,52846],{"class":74,"line":2188},[72,52843,52203],{"class":82},[72,52845,52218],{"class":51718},[72,52847,51725],{"class":82},[72,52849,52850],{"class":74,"line":2193},[72,52851,2828],{"emptyLinePlaceholder":490},[72,52853,52854,52856,52858],{"class":74,"line":2207},[72,52855,52203],{"class":82},[72,52857,51053],{"class":51718},[72,52859,51725],{"class":82},[15,52861,52862],{},[1891,52863],{"alt":68,"src":52864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[15,52866,52867],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[15,52869,52870],{},"let arr = [4, 2, 5, 1, 3]",[15,52872,52873],{},"\u002F\u002F 1.升序排列写法",[15,52875,52876],{},"arr.sort(function (a, b) {",[15,52878,52879],{},"return a - b",[15,52881,52882],{},"})",[15,52884,52885],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[15,52887,52888],{},"\u002F\u002F 降序排列写法",[15,52890,52876],{},[15,52892,52893],{},"return b - a",[15,52895,52882],{},[15,52897,52898],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[85,52900,52902],{"id":52901},"_29-函数","2.9 函数",[15,52904,52905],{},[1891,52906],{"alt":68,"src":52907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[15,52909,52910],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[15,52912,52913],{},"函数的声明用function",[15,52915,52916],{},"函数里边可以嵌套函数",[531,52918,52920],{"id":52919},"_291-函数传参","2.9.1 函数传参",[15,52922,52923],{},[1891,52924],{"alt":68,"src":52925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[15,52927,52928],{},[1891,52929],{"alt":68,"src":52930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[251,52932,52933,52936,52939,52942,52945,52948],{},[25,52934,52935],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[25,52937,52938],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[25,52940,52941],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[25,52943,52944],{},"开发中尽量保持形参和实参个数一致",[25,52946,52947],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[25,52949,52950],{},"形参只在函数中有用，所以不需要进行声明这个变量",[15,52952,52953],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[531,52955,52957],{"id":52956},"_292-函数的返回值","2.9.2 函数的返回值",[15,52959,52960],{},[1891,52961],{"alt":68,"src":52962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[15,52964,52965],{},[1891,52966],{"alt":68,"src":52967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[251,52969,52970,52973,52976,52979,52982],{},[25,52971,52972],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[25,52974,52975],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[25,52977,52978],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[25,52980,52981],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[25,52983,52984],{},"断点调试:进入函数内部看执行过程F11",[531,52986,52988],{"id":52987},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[63,52990,52992],{"className":51051,"code":52991,"language":51053,"meta":68,"style":68},"    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",[34,52993,52994,52999,53004,53008,53013],{"__ignoreMap":68},[72,52995,52996],{"class":74,"line":75},[72,52997,52998],{"class":82},"    function fn(a, b) {\n",[72,53000,53001],{"class":74,"line":370},[72,53002,53003],{"class":82},"      console.log(a + b);\n",[72,53005,53006],{"class":74,"line":1608},[72,53007,2615],{"class":82},[72,53009,53010],{"class":74,"line":1623},[72,53011,53012],{"class":82},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[72,53014,53015],{"class":74,"line":1629},[72,53016,53017],{"class":82},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[531,53019,53021],{"id":53020},"_294-作用域","2.9.4 作用域",[251,53023,53024,53030,53035,53038,53041],{},[25,53025,53026,53027],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[707,53028,53029],{},"作用域",[25,53031,53032],{},[707,53033,53034],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[25,53036,53037],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[25,53039,53040],{},"函数内部可以直接所使用全局变量",[25,53042,53043],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[15,53045,15059],{},[63,53047,53049],{"className":51051,"code":53048,"language":51053,"meta":68,"style":68},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[34,53050,53051,53056,53061,53065,53070,53075,53080],{"__ignoreMap":68},[72,53052,53053],{"class":74,"line":75},[72,53054,53055],{"class":82},"    function fun() {\n",[72,53057,53058],{"class":74,"line":370},[72,53059,53060],{"class":82},"      num = 10\n",[72,53062,53063],{"class":74,"line":1608},[72,53064,2615],{"class":82},[72,53066,53067],{"class":74,"line":1623},[72,53068,53069],{"class":82},"    fun()\n",[72,53071,53072],{"class":74,"line":1629},[72,53073,53074],{"class":82},"    console.log(num)\n",[72,53076,53077],{"class":74,"line":1643},[72,53078,53079],{"class":82},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[72,53081,53082],{"class":74,"line":1649},[72,53083,53084],{"class":82},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[251,53086,53087,53090],{},[25,53088,53089],{},"函数内部的形参可以看做是局部变量",[25,53091,53092],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[15,53094,53095,53096],{},"变量访问原则： ",[707,53097,53098],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[531,53100,53102],{"id":53101},"_295-匿名函数","2.9.5 匿名函数",[15,53104,53105],{},"函数可以分为具名函数和匿名函数",[15,53107,53108],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[22,53110,53111],{},[25,53112,53113],{},"函数表达式",[15,53115,53116],{},[1891,53117],{"alt":68,"src":53118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[15,53120,53121],{},"里边也可以写参数",[15,53123,53124],{},"具名函数调用位置可以随意调整；",[15,53126,53127],{},"匿名函数函数表达式形式只能在声明后才可以使用",[22,53129,53130],{"start":370},[25,53131,53132],{},"立即执行函数",[15,53134,53135],{},[1891,53136],{"alt":68,"src":53137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[15,53139,53140],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[15,53142,53143],{},"写法：两个小括号，然后在第一个小括号中写function",[15,53145,53146],{},"(function () {})();",[15,53148,53149],{},"不要落下最后的;",[15,53151,53152],{},"立即执行函数必须要加;",[15,53154,53155],{},"分号写前写后都没问题",[15,53157,53158],{},"写前：",[15,53160,53161],{},"(function() {})()",[15,53163,53164],{},";(function () {})();",[15,53166,53167],{},"写后:",[15,53169,53170],{},"(function() {})();",[15,53172,53146],{},[15,53174,53175],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[15,53177,53178],{},"还有一种写法：",[15,53180,53181],{},"(function(){}());",[15,53183,53184],{},"或者:",[15,53186,53187],{},"!function(){}();",[15,53189,53190],{},"立即执行函数有时候也是可以加名字的：",[15,53192,53193],{},"(function flexible(window,document) {}(window,document));",[15,53195,53196],{},"省一些调用方法",[531,53198,53200],{"id":53199},"_296-逻辑中断","2.9.6 逻辑中断!!!",[15,53202,53203],{},[1891,53204],{"alt":68,"src":53205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[15,53207,53208],{},"这样就不用非得给x,y初始化了",[15,53210,53211],{},[1891,53212],{"alt":68,"src":53213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[15,53215,53216],{},"代码执行时先看左边",[15,53218,53219],{},"例如：console.log(false && 3+5)",[15,53221,53222],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[15,53224,53225],{},"&&都是真时，就返回最后一个真值",[15,53227,53228],{},"console.log(11 && 22)",[15,53230,53231],{},"输出22",[15,53233,53234],{},"逻辑与：遇真则真",[15,53236,15059],{},[15,53238,53239],{},"let age=1",[15,53241,53242],{},"console.log(11 || age++)",[15,53244,53245],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[15,53247,53248],{},"console.log(11 || 22)",[15,53250,53251],{},"||逻辑或遇到真就直接输出，输出结果为11",[15,53253,53254],{},"||如果都是假的话，就取最后一个假的值了",[531,53256,53258],{"id":53257},"_297-转换为boolean型","2.9.7 转换为Boolean型",[15,53260,53261],{},"显示转换：",[15,53263,53264,53267,53268],{},[707,53265,53266],{},"记忆","： ",[707,53269,53270],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[15,53272,53273],{},"空字符串为假，其他字符串全为真",[15,53275,53276],{},[1891,53277],{"alt":68,"src":53278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[15,53280,53281],{},"隐式转换：",[15,53283,53284],{},[1891,53285],{"alt":68,"src":53286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[15,53288,53289],{},"隐式转换:",[15,53291,53292],{},"null+3=3",[15,53294,53295],{},"undefined+3=NaN",[15,53297,53298],{},"null==undefined 输出true,他两个都当0看",[15,53300,53301],{},"null===undefined 输出false",[15,53303,53304],{},"undefined做任何操作都是NaN",[15,53306,53307],{},"NaN不等于NaN，NaN表示计算错误",[85,53309,53311],{"id":53310},"_210-对象","2.10 对象",[531,53313,53315],{"id":53314},"_2101-对象的介绍","2.10.1 对象的介绍",[15,53317,53318],{},"对象也是一种数据类型，里边的数据是无序的",[15,53320,53321],{},"对象由属性和方法组成",[15,53323,53324],{},[1891,53325],{"alt":68,"src":53326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[15,53328,53329],{},[1891,53330],{"alt":68,"src":53331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[15,53333,53334],{},[1891,53335],{"alt":68,"src":53336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[531,53338,53340],{"id":53339},"_2102-对象属性","2.10.2 对象属性",[15,53342,53343],{},[1891,53344],{"alt":68,"src":53345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[22,53347,53348],{},[25,53349,53350],{},"查询对象",[15,53352,53353],{},"对象名.属性 goods.uname",[15,53355,53356],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[15,53358,53359],{},"不带字符串的属性名也可以使用 对象名['属性名']",[15,53361,53362],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[15,53364,53365],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[22,53367,53368],{"start":370},[25,53369,53370],{},"重新赋值",[15,53372,53373],{},"对象名.属性=新值",[22,53375,53376],{"start":1608},[25,53377,53378],{},"增加新数据",[15,53380,53373],{},[22,53382,53383],{"start":1623},[25,53384,53385],{},"删除对象中的属性",[15,53387,53388],{},"delete 对象名.属性",[531,53390,53392],{"id":53391},"_2103-对象方法","2.10.3 对象方法",[15,53394,53395],{},[1891,53396],{"alt":68,"src":53397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[15,53399,53400],{},"后边跟的是匿名函数",[15,53402,53403],{},"对象外面的叫函数；对象内部的叫方法",[15,53405,53406],{},[1891,53407],{"alt":68,"src":53408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[531,53410,53412],{"id":53411},"_2104-遍历对象","2.10.4 遍历对象",[15,53414,53415],{},"理解为加括号的python字典遍历",[15,53417,53418],{},[1891,53419],{"alt":68,"src":53420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[15,53422,53423],{},"k是字符串类型",[15,53425,53426],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[63,53428,53430],{"className":51051,"code":53429,"language":51053,"meta":68,"style":68},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[34,53431,53432,53437,53442,53447,53452],{"__ignoreMap":68},[72,53433,53434],{"class":74,"line":75},[72,53435,53436],{"class":82},"   let arr = [1, 2, 3]\n",[72,53438,53439],{"class":74,"line":370},[72,53440,53441],{"class":82},"    for (let k in arr) {\n",[72,53443,53444],{"class":74,"line":1608},[72,53445,53446],{"class":82},"      console.log(k)\n",[72,53448,53449],{"class":74,"line":1623},[72,53450,53451],{"class":82},"      console.log(arr[k])\n",[72,53453,53454],{"class":74,"line":1629},[72,53455,2615],{"class":82},[15,53457,53458],{},[1891,53459],{"alt":68,"src":53460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[15,53462,53463],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[15,53465,53466],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[15,53468,53469],{},"for in 得到的k是属性名",[52231,53471,53472],{},"\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",[15,53474,53475],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[531,53477,53479],{"id":53478},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[15,53481,53482],{},"数组中放对象信息",[63,53484,53488],{"className":53485,"code":53486,"language":53487,"meta":68,"style":68},"language-xml shiki shiki-themes github-light github-dark","\u003Cscript>\n    let students = [\n      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n    ]\n    for (let i = 0; i \u003C students.length; i++) {\n      for (let k in students[i]) {\n        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n        \u002F\u002F输出每个人的名字：\n        \u002F\u002Fconsole.log(students[i].name)\n      }\n    }\n  \u003C\u002Fscript>\n","xml",[34,53489,53490,53498,53503,53508,53513,53518,53523,53528,53533,53538,53543,53548,53553,53557,53561],{"__ignoreMap":68},[72,53491,53492,53494,53496],{"class":74,"line":75},[72,53493,1464],{"class":82},[72,53495,52231],{"class":51718},[72,53497,51725],{"class":82},[72,53499,53500],{"class":74,"line":370},[72,53501,53502],{"class":82},"    let students = [\n",[72,53504,53505],{"class":74,"line":1608},[72,53506,53507],{"class":82},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[72,53509,53510],{"class":74,"line":1623},[72,53511,53512],{"class":82},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[72,53514,53515],{"class":74,"line":1629},[72,53516,53517],{"class":82},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[72,53519,53520],{"class":74,"line":1643},[72,53521,53522],{"class":82},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[72,53524,53525],{"class":74,"line":1649},[72,53526,53527],{"class":82},"    ]\n",[72,53529,53530],{"class":74,"line":1740},[72,53531,53532],{"class":82},"    for (let i = 0; i \u003C students.length; i++) {\n",[72,53534,53535],{"class":74,"line":1746},[72,53536,53537],{"class":82},"      for (let k in students[i]) {\n",[72,53539,53540],{"class":74,"line":1758},[72,53541,53542],{"class":82},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[72,53544,53545],{"class":74,"line":2041},[72,53546,53547],{"class":82},"        \u002F\u002F输出每个人的名字：\n",[72,53549,53550],{"class":74,"line":2046},[72,53551,53552],{"class":82},"        \u002F\u002Fconsole.log(students[i].name)\n",[72,53554,53555],{"class":74,"line":2052},[72,53556,52816],{"class":82},[72,53558,53559],{"class":74,"line":2057},[72,53560,2615],{"class":82},[72,53562,53563,53565,53567],{"class":74,"line":2071},[72,53564,52835],{"class":82},[72,53566,52231],{"class":51718},[72,53568,51725],{"class":82},[531,53570,53572],{"id":53571},"_2106-内置对象","2.10.6 内置对象",[15,53574,53575],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[22,53577,53578],{},[25,53579,53580],{},"数学对象Math",[15,53582,53583],{},[1891,53584],{"alt":68,"src":53585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[15,53587,53588],{},[257,53589,53592],{"href":53590,"rel":53591},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[261],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[15,53594,53595],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[15,53597,53598],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[15,53600,53601],{},"数组不可以使用Math中的max,min来求最大值与最小值",[15,53603,53604],{},"null是一个空对象，可以认为：null类似于let obj={}",[15,53606,53607],{},"null属于对象数据类型",[22,53609,53610],{"start":370},[25,53611,53612],{},"生成任意范围随机数",[15,53614,53615],{},[1891,53616],{"alt":68,"src":53617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[15,53619,53620],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[15,53622,53623],{},"乘以几就取不到几",[15,53625,53626],{},"取数组中的随机元素：",[15,53628,53629],{},"let arr = ['red', 'green', 'blue']",[15,53631,53632],{},"let random = Math.floor(Math.random() * arr.length)",[15,53634,53635],{},"console.log(arr[random])",[15,53637,53638],{},"这个函数得到的是全闭区间",[15,53640,53641],{},"function getRandom(N, M) {",[15,53643,53644],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[15,53646,1500],{},[15,53648,53649],{},"console.log(getRandom(4, 8))",[531,53651,53653],{"id":53652},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[15,53655,53656],{},[1891,53657],{"alt":68,"src":53658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[15,53660,53661],{},[1891,53662],{"alt":68,"src":53663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[15,53665,53666],{},[1891,53667],{"alt":68,"src":53668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[15,53670,53671],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[15,53673,53674],{},[1891,53675],{"alt":68,"src":53676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[15,53678,53679],{},[1891,53680],{"alt":68,"src":53681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[15,53683,53684],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[15,53686,53687],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[15,53689,53690],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[473,53692,53693],{},"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":68,"searchDepth":370,"depth":370,"links":53695},[53696,53704,53705,53706,53707,53708,53715,53719,53725,53734],{"id":50886,"depth":370,"text":50887,"children":53697},[53698,53699,53700,53701,53702,53703],{"id":50890,"depth":1608,"text":50891},{"id":50907,"depth":1608,"text":50908},{"id":50947,"depth":1608,"text":50948},{"id":50959,"depth":1608,"text":50960},{"id":50968,"depth":1608,"text":50969},{"id":51016,"depth":1608,"text":51017},{"id":51026,"depth":370,"text":51027},{"id":51114,"depth":370,"text":51115},{"id":51137,"depth":370,"text":51138},{"id":51149,"depth":370,"text":51150},{"id":51336,"depth":370,"text":51337,"children":53709},[53710,53711,53712,53713,53714],{"id":51340,"depth":1608,"text":51341},{"id":51349,"depth":1608,"text":51350},{"id":51377,"depth":1608,"text":51378},{"id":51413,"depth":1608,"text":51414},{"id":51438,"depth":1608,"text":51439},{"id":51450,"depth":370,"text":51451,"children":53716},[53717,53718],{"id":51471,"depth":1608,"text":51472},{"id":51565,"depth":1608,"text":51566},{"id":51623,"depth":370,"text":51624,"children":53720},[53721,53722,53723,53724],{"id":51627,"depth":1608,"text":51628},{"id":51651,"depth":1608,"text":51652},{"id":51704,"depth":1608,"text":51705},{"id":52515,"depth":1608,"text":52516},{"id":52901,"depth":370,"text":52902,"children":53726},[53727,53728,53729,53730,53731,53732,53733],{"id":52919,"depth":1608,"text":52920},{"id":52956,"depth":1608,"text":52957},{"id":52987,"depth":1608,"text":52988},{"id":53020,"depth":1608,"text":53021},{"id":53101,"depth":1608,"text":53102},{"id":53199,"depth":1608,"text":53200},{"id":53257,"depth":1608,"text":53258},{"id":53310,"depth":370,"text":53311,"children":53735},[53736,53737,53738,53739,53740,53741,53742],{"id":53314,"depth":1608,"text":53315},{"id":53339,"depth":1608,"text":53340},{"id":53391,"depth":1608,"text":53392},{"id":53411,"depth":1608,"text":53412},{"id":53478,"depth":1608,"text":53479},{"id":53571,"depth":1608,"text":53572},{"id":53652,"depth":1608,"text":53653},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50878,"description":23802},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53749,"title":53750,"body":53751,"description":23802,"extension":487,"meta":77091,"navigation":490,"path":77092,"seo":77093,"stem":77094,"__hash__":77095},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53752,"toc":77031},[53753,53756,53759,53762,53767,53770,53773,53776,53780,53784,53790,53795,53803,53810,53813,53817,53822,53827,53832,53835,53838,53849,53852,53856,53859,53862,53867,53872,53877,53880,53883,53975,53978,53983,53986,53991,53994,53997,54002,54005,54010,54014,54017,54031,54035,54040,54043,54046,54050,54055,54058,54062,54066,54071,54075,54080,54083,54086,54089,54092,54095,54098,54103,54108,54136,54139,54142,54145,54150,54153,54156,54159,54162,54166,54195,54199,54204,54209,54212,54215,54218,54223,54338,54343,54348,54509,54514,54517,54521,54526,54531,54534,54537,54540,54543,54546,54549,54552,54555,54558,54561,54564,54567,54570,54573,54575,54578,54581,54584,54589,54593,54990,54993,54999,55003,55008,56290,56295,56298,56301,56304,56309,57505,57509,57515,57520,57523,57528,57533,57537,57541,57546,57549,57554,57557,57560,57564,58472,58475,58479,58700,58703,58706,58709,58935,58938,59162,59165,59169,59174,59177,59180,59408,59411,59444,59447,59451,59456,59460,59463,59466,59469,59472,59475,59478,59481,59486,60766,60770,60773,61866,61870,61873,61876,61879,61882,61886,61889,61892,61894,61902,63383,63387,63390,63393,63396,63605,63608,63612,63616,63621,63626,63629,63632,63637,63641,63646,63649,63758,63762,63767,63772,63775,63778,63782,63787,63792,63797,63800,63803,63814,63817,63822,63827,63830,63833,63906,63910,63915,63918,63920,63931,63935,63940,65266,65269,65272,65275,65277,65280,65283,65286,65289,65292,65295,65298,65301,65304,65307,65310,65313,65315,65317,65320,65324,66418,66421,66424,66440,66454,66457,66462,66468,66473,66477,66481,66486,66490,66495,66937,66942,66945,66949,66954,66957,66960,66964,66969,66973,66978,66983,66987,66992,66997,67000,67005,67010,67014,67019,67024,67128,67131,67135,67140,67506,67509,67512,67515,67518,67521,67524,67527,67530,68826,68830,68835,68840,68843,68846,68849,68852,68854,68859,68864,68867,68871,68876,68881,68886,68889,68892,68895,68898,68901,68906,68909,68913,68918,68923,68927,68932,68935,68940,68943,68946,68949,68952,68955,68960,68963,68966,68969,68972,68976,68981,68984,68988,68993,68996,68999,69003,69032,69035,69039,69043,69048,69052,69057,69060,69063,69066,69069,69072,69075,69078,69081,69084,69087,69090,69093,69096,69099,69103,69108,69113,69116,69120,69124,69129,69132,69136,69139,69142,69147,69152,69157,69162,69167,69170,69173,69178,69183,69187,69192,69195,69200,69203,69206,69209,69212,69217,69220,69229,69233,69238,69241,69244,69248,69251,69256,69260,69263,69269,69275,69279,69305,69308,70869,70872,71368,71371,71376,71381,71386,71390,71395,71400,71405,71409,71414,71417,71420,71423,71426,71430,71433,71438,71441,71446,71450,71455,71458,71463,71468,71473,71476,71479,71484,71489,71492,71495,71499,71502,71507,71510,71515,71518,71523,71528,71533,71536,71541,71606,71609,71620,71624,71629,71801,71805,71810,71813,71816,71819,71823,71834,71838,71841,71846,71851,71854,71857,71860,71863,71866,71868,71871,71874,71877,71882,71885,71890,71893,71897,71900,71903,71917,71921,71924,71979,71984,71987,71990,71995,71998,72002,72007,72137,72141,72146,72151,72232,72237,72241,72244,72249,72254,72260,72263,72266,72269,72273,72278,72281,72292,72296,72313,75360,75364,75367,75370,75373,75394,75398,75401,75409,75412,75417,75420,75423,75428,75433,75437,75458,75462,75467,75470,75473,75476,75479,75483,75488,75491,75495,75500,75503,75508,75511,75516,75519,75524,76727,76731,76736,76739,76744,77028],[10,53754,53750],{"id":53755},"_3web-apis",[15,53757,53758],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[15,53760,53761],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[15,53763,53764],{},[1891,53765],{"alt":68,"src":53766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[15,53768,53769],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[15,53771,53772],{},"建议数组和对象使用 const 来声明",[15,53774,53775],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[85,53777,53779],{"id":53778},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[531,53781,53783],{"id":53782},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[15,53785,53786,53789],{},[34,53787,53788],{},"document"," = HTML 文件解析后的对象化表示；",[15,53791,53792,53794],{},[34,53793,53788],{}," ≠ HTML 文件本身",[15,53796,53797,53802],{},[707,53798,53799],{},[34,53800,53801],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[15,53804,53805,53809],{},[707,53806,53807],{},[34,53808,53788],{}," ：容器里的内容，代表当前加载的网页（DOM）",[15,53811,53812],{},"document实际上为window.document的简写",[531,53814,53816],{"id":53815},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[15,53818,53819],{},[1891,53820],{"alt":68,"src":53821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[15,53823,53824],{},[1891,53825],{"alt":68,"src":53826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[15,53828,53829],{},[1891,53830],{"alt":68,"src":53831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[15,53833,53834],{},"console.dir()",[15,53836,53837],{},"dir用来打印对象",[251,53839,53840,53843,53846],{},[25,53841,53842],{},"任何一个标签，都是一个对象",[25,53844,53845],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[25,53847,53848],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[15,53850,53851],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[531,53853,53855],{"id":53854},"_312-获取dom对象","3.1.2 获取DoM对象",[15,53857,53858],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[15,53860,53861],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[15,53863,53864],{},[707,53865,53866],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[22,53868,53869],{},[25,53870,53871],{},"利用CSS选择器来获取标签元素",[15,53873,53874],{},[1891,53875],{"alt":68,"src":53876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[15,53878,53879],{},"里边的选择器必须必须加引号！！！",[15,53881,53882],{},"只选择第一个元素",[63,53884,53886],{"className":53485,"code":53885,"language":53487,"meta":68,"style":68},"\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",[34,53887,53888,53896,53917,53936,53944,53949,53954,53959,53967],{"__ignoreMap":68},[72,53889,53890,53892,53894],{"class":74,"line":75},[72,53891,1464],{"class":82},[72,53893,52218],{"class":51718},[72,53895,51725],{"class":82},[72,53897,53898,53900,53902,53905,53907,53910,53913,53915],{"class":74,"line":370},[72,53899,52562],{"class":82},[72,53901,52029],{"class":51718},[72,53903,53904],{"class":358}," class",[72,53906,609],{"class":82},[72,53908,53909],{"class":366},"\"box\"",[72,53911,53912],{"class":82},">123\u003C\u002F",[72,53914,52029],{"class":51718},[72,53916,51725],{"class":82},[72,53918,53919,53921,53923,53925,53927,53929,53932,53934],{"class":74,"line":1608},[72,53920,52562],{"class":82},[72,53922,52029],{"class":51718},[72,53924,53904],{"class":358},[72,53926,609],{"class":82},[72,53928,53909],{"class":366},[72,53930,53931],{"class":82},">456\u003C\u002F",[72,53933,52029],{"class":51718},[72,53935,51725],{"class":82},[72,53937,53938,53940,53942],{"class":74,"line":1623},[72,53939,52562],{"class":82},[72,53941,52231],{"class":51718},[72,53943,51725],{"class":82},[72,53945,53946],{"class":74,"line":1629},[72,53947,53948],{"class":82},"    \u002F\u002F 1.获取匹配的第一个元素\n",[72,53950,53951],{"class":74,"line":1643},[72,53952,53953],{"class":82},"    const box = document.querySelector('div')\n",[72,53955,53956],{"class":74,"line":1649},[72,53957,53958],{"class":82},"    console.dir(box)\n",[72,53960,53961,53963,53965],{"class":74,"line":1740},[72,53962,52835],{"class":82},[72,53964,52231],{"class":51718},[72,53966,51725],{"class":82},[72,53968,53969,53971,53973],{"class":74,"line":1746},[72,53970,52203],{"class":82},[72,53972,52218],{"class":51718},[72,53974,51725],{"class":82},[15,53976,53977],{},"只选123，不选456",[15,53979,53980],{},[1891,53981],{"alt":68,"src":53982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[15,53984,53985],{},"返回的是一个数组的集合，不能对其进行直接修改",[15,53987,53988],{},[1891,53989],{"alt":68,"src":53990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[15,53992,53993],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[15,53995,53996],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[22,53998,53999],{"start":370},[25,54000,54001],{},"其他方法来获取标签元素",[15,54003,54004],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[15,54006,54007],{},[1891,54008],{"alt":68,"src":54009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[531,54011,54013],{"id":54012},"_313-操作元素的内容","3.1.3 操作元素的内容",[15,54015,54016],{},"设置修改DOM元素内容有两种方式：",[251,54018,54019,54022,54025,54028],{},[25,54020,54021],{},"元素.innerText=''",[25,54023,54024],{},"元素.innerHTML=''",[25,54026,54027],{},"不写字符串输出数字也是可以的",[25,54029,54030],{},"元素.innerHtml=1",[22423,54032,54034],{"id":54033},"_3131-innertext","3.1.3.1 innerText",[15,54036,54037],{},[1891,54038],{"alt":68,"src":54039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[15,54041,54042],{},"思路：实现了修改盒子中的内容！",[15,54044,54045],{},"它只显示纯文本，不解析标签",[22423,54047,54049],{"id":54048},"_3132-innerhtml","3.1.3.2 innerHTML",[15,54051,54052],{},[1891,54053],{"alt":68,"src":54054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[15,54056,54057],{},"相比于innerText，他的强大之处在于可以解析标签",[531,54059,54061],{"id":54060},"_314-操作元素属性","3.1.4 操作元素属性",[22423,54063,54065],{"id":54064},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[15,54067,54068],{},[1891,54069],{"alt":68,"src":54070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[22423,54072,54074],{"id":54073},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[15,54076,54077],{},[1891,54078],{"alt":68,"src":54079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[15,54081,54082],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[15,54084,54085],{},"div.style.backgroundColor = 'hotpink'",[15,54087,54088],{},"如果按照css的写法，-表示减，就会出错",[15,54090,54091],{},"body元素不需要再获取，直接用就行！！！！！！",[15,54093,54094],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[15,54096,54097],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[15,54099,54100],{},[1891,54101],{"alt":68,"src":54102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[15,54104,54105],{},[1891,54106],{"alt":68,"src":54107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[22,54109,54110,54113,54116,54119,54122,54125],{},[25,54111,54112],{},"className这个方式就是修改很多样式的时候来使用的！",[25,54114,54115],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[25,54117,54118],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[25,54120,54121],{},"className为属性名，如果还用class的话就导致与关键字冲突",[25,54123,54124],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[25,54126,54127,54128,54133],{},"解析标签的时候就变为了",[52029,54129],{"className":54130},[54131,54132],"nav","box",[54134,54135],"br",{},[15,54137,54138],{},"例子：",[52029,54140],{"className":54141},[54131],[52231,54143,54144],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[15,54146,54147],{},[1891,54148],{"alt":68,"src":54149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[15,54151,54152],{},"追加和删除类名用classList",[15,54154,54155],{},"常用于类似于开关的操作",[15,54157,54158],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[15,54160,54161],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[22423,54163,54165],{"id":54164},"_3143-牢记点","3.1.4.3 牢记点",[22,54167,54168,54171,54174,54177,54180,54183,54186,54189,54192],{},[25,54169,54170],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[25,54172,54173],{},"使用style属性操作css时不要忘记引号",[25,54175,54176],{},"使用className或者classList时也不要忘记引号",[25,54178,54179],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[25,54181,54182],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[25,54184,54185],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[25,54187,54188],{},"若： let arr=['1','2',3] arr[0]=1",[25,54190,54191],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[25,54193,54194],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[531,54196,54198],{"id":54197},"_315-操作表单元素","3.1.5 操作表单元素",[22,54200,54201],{},[25,54202,54203],{},"天生的属性",[15,54205,54206],{},[1891,54207],{"alt":68,"src":54208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[15,54210,54211],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[15,54213,54214],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[15,54216,54217],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[15,54219,54220],{},[1891,54221],{"alt":68,"src":54222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[63,54224,54226],{"className":51051,"code":54225,"language":51053,"meta":68,"style":68},"在复选框中如果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",[34,54227,54228,54233,54265,54270,54275,54280,54285,54289,54294,54299,54316,54328,54333],{"__ignoreMap":68},[72,54229,54230],{"class":74,"line":75},[72,54231,54232],{"class":82},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[72,54234,54235,54237,54240,54243,54245,54248,54250,54252,54254,54256,54258,54260,54263],{"class":74,"line":370},[72,54236,1464],{"class":82},[72,54238,54239],{"class":51718},"input",[72,54241,54242],{"class":358}," type",[72,54244,609],{"class":82},[72,54246,54247],{"class":366},"\"checkbox\"",[72,54249,15346],{"class":358},[72,54251,609],{"class":82},[72,54253,8078],{"class":366},[72,54255,15385],{"class":358},[72,54257,609],{"class":82},[72,54259,8078],{"class":366},[72,54261,54262],{"class":358}," checked",[72,54264,51725],{"class":82},[72,54266,54267],{"class":74,"line":1608},[72,54268,54269],{"class":82},"不选的话：\n",[72,54271,54272],{"class":74,"line":1623},[72,54273,54274],{"class":82},"const input = document.querySelector('input')\n",[72,54276,54277],{"class":74,"line":1629},[72,54278,54279],{"class":82},"input.checked=false\n",[72,54281,54282],{"class":74,"line":1643},[72,54283,54284],{"class":82},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[72,54286,54287],{"class":74,"line":1649},[72,54288,2828],{"emptyLinePlaceholder":490},[72,54290,54291],{"class":74,"line":1740},[72,54292,54293],{"class":82},"禁用按钮：\n",[72,54295,54296],{"class":74,"line":1746},[72,54297,54298],{"class":82},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[72,54300,54301,54303,54306,54309,54312,54314],{"class":74,"line":1758},[72,54302,1464],{"class":82},[72,54304,54305],{"class":51718},"button",[72,54307,54308],{"class":358}," disabled",[72,54310,54311],{"class":82},">点击\u003C\u002F",[72,54313,54305],{"class":51718},[72,54315,51725],{"class":82},[72,54317,54318,54320,54322,54324,54326],{"class":74,"line":2041},[72,54319,1464],{"class":82},[72,54321,54305],{"class":51718},[72,54323,54311],{"class":82},[72,54325,54305],{"class":51718},[72,54327,51725],{"class":82},[72,54329,54330],{"class":74,"line":2046},[72,54331,54332],{"class":82},"const bt = document.querySelector('button')\n",[72,54334,54335],{"class":74,"line":2052},[72,54336,54337],{"class":82},"bt.disabled = false\n",[22,54339,54340],{"start":370},[25,54341,54342],{},"自定义属性",[15,54344,54345],{},[1891,54346],{"alt":68,"src":54347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[63,54349,54351],{"className":53485,"code":54350,"language":53487,"meta":68,"style":68},"\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",[34,54352,54353,54361,54389,54408,54427,54446,54465,54473,54478,54483,54488,54493,54501],{"__ignoreMap":68},[72,54354,54355,54357,54359],{"class":74,"line":75},[72,54356,1464],{"class":82},[72,54358,52218],{"class":51718},[72,54360,51725],{"class":82},[72,54362,54363,54365,54367,54370,54372,54374,54377,54379,54382,54385,54387],{"class":74,"line":370},[72,54364,52562],{"class":82},[72,54366,52029],{"class":51718},[72,54368,54369],{"class":358}," data-id",[72,54371,609],{"class":82},[72,54373,4106],{"class":366},[72,54375,54376],{"class":358}," data-spm",[72,54378,609],{"class":82},[72,54380,54381],{"class":366},"\"我不知道\"",[72,54383,54384],{"class":82},">1\u003C\u002F",[72,54386,52029],{"class":51718},[72,54388,51725],{"class":82},[72,54390,54391,54393,54395,54397,54399,54401,54404,54406],{"class":74,"line":1608},[72,54392,52562],{"class":82},[72,54394,52029],{"class":51718},[72,54396,54369],{"class":358},[72,54398,609],{"class":82},[72,54400,4129],{"class":366},[72,54402,54403],{"class":82},">2\u003C\u002F",[72,54405,52029],{"class":51718},[72,54407,51725],{"class":82},[72,54409,54410,54412,54414,54416,54418,54420,54423,54425],{"class":74,"line":1623},[72,54411,52562],{"class":82},[72,54413,52029],{"class":51718},[72,54415,54369],{"class":358},[72,54417,609],{"class":82},[72,54419,4142],{"class":366},[72,54421,54422],{"class":82},">3\u003C\u002F",[72,54424,52029],{"class":51718},[72,54426,51725],{"class":82},[72,54428,54429,54431,54433,54435,54437,54439,54442,54444],{"class":74,"line":1629},[72,54430,52562],{"class":82},[72,54432,52029],{"class":51718},[72,54434,54369],{"class":358},[72,54436,609],{"class":82},[72,54438,4155],{"class":366},[72,54440,54441],{"class":82},">4\u003C\u002F",[72,54443,52029],{"class":51718},[72,54445,51725],{"class":82},[72,54447,54448,54450,54452,54454,54456,54458,54461,54463],{"class":74,"line":1643},[72,54449,52562],{"class":82},[72,54451,52029],{"class":51718},[72,54453,54369],{"class":358},[72,54455,609],{"class":82},[72,54457,4176],{"class":366},[72,54459,54460],{"class":82},">5\u003C\u002F",[72,54462,52029],{"class":51718},[72,54464,51725],{"class":82},[72,54466,54467,54469,54471],{"class":74,"line":1649},[72,54468,52562],{"class":82},[72,54470,52231],{"class":51718},[72,54472,51725],{"class":82},[72,54474,54475],{"class":74,"line":1740},[72,54476,54477],{"class":82},"    const one = document.querySelector('div')\n",[72,54479,54480],{"class":74,"line":1746},[72,54481,54482],{"class":82},"    console.log(one.dataset)\n",[72,54484,54485],{"class":74,"line":1758},[72,54486,54487],{"class":82},"    console.log(one.dataset.id)\n",[72,54489,54490],{"class":74,"line":2041},[72,54491,54492],{"class":82},"    console.log(one.dataset.spm)\n",[72,54494,54495,54497,54499],{"class":74,"line":2046},[72,54496,52835],{"class":82},[72,54498,52231],{"class":51718},[72,54500,51725],{"class":82},[72,54502,54503,54505,54507],{"class":74,"line":2052},[72,54504,52203],{"class":82},[72,54506,52218],{"class":51718},[72,54508,51725],{"class":82},[15,54510,54511],{},[1891,54512],{"alt":68,"src":54513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[15,54515,54516],{},"document.querySelector选择的是第一个对象（元素）",[531,54518,54520],{"id":54519},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[15,54522,54523],{},[1891,54524],{"alt":68,"src":54525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[15,54527,54528],{},[1891,54529],{"alt":68,"src":54530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[15,54532,54533],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[52231,54535,54536],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[15,54538,54539],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[52231,54541,54542],{},"\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",[15,54544,54545],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[15,54547,54548],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[15,54550,54551],{},"单位为毫秒！！！",[15,54553,54554],{},"可以搭配匿名函数来用！！！",[15,54556,54557],{},"setInterval(function () {",[15,54559,54560],{},"alert('两秒执行一次')",[15,54562,54563],{},"}, 2000)",[15,54565,54566],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[15,54568,54569],{},"function fn() {",[15,54571,54572],{},"document.write(1)",[15,54574,1500],{},[15,54576,54577],{},"setInterval(fn, 1000)",[15,54579,54580],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[15,54582,54583],{},"setInterval('fn()', 1000)",[15,54585,54586],{},[1891,54587],{"alt":68,"src":54588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[22423,54590,54592],{"id":54591},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[63,54594,54596],{"className":51051,"code":54595,"language":51053,"meta":68,"style":68},"\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",[34,54597,54598,54608,54622,54626,54634,54648,54668,54680,54688,54692,54700,54737,54742,54747,54752,54760,54768,54790,54798,54803,54825,54830,54835,54846,54851,54871,54879,54894,54909,54920,54925,54935,54945,54949,54958,54962,54970,54978,54982],{"__ignoreMap":68},[72,54599,54600,54602,54604,54606],{"class":74,"line":75},[72,54601,51715],{"class":82},[72,54603,51719],{"class":51718},[72,54605,51722],{"class":358},[72,54607,51725],{"class":82},[72,54609,54610,54612,54614,54616,54618,54620],{"class":74,"line":370},[72,54611,1464],{"class":82},[72,54613,51053],{"class":51718},[72,54615,51734],{"class":358},[72,54617,609],{"class":82},[72,54619,51739],{"class":366},[72,54621,51725],{"class":82},[72,54623,54624],{"class":74,"line":1608},[72,54625,2828],{"emptyLinePlaceholder":490},[72,54627,54628,54630,54632],{"class":74,"line":1623},[72,54629,1464],{"class":82},[72,54631,51752],{"class":51718},[72,54633,51725],{"class":82},[72,54635,54636,54638,54640,54642,54644,54646],{"class":74,"line":1629},[72,54637,52562],{"class":82},[72,54639,51762],{"class":51718},[72,54641,51765],{"class":358},[72,54643,609],{"class":82},[72,54645,51770],{"class":366},[72,54647,51725],{"class":82},[72,54649,54650,54652,54654,54656,54658,54660,54662,54664,54666],{"class":74,"line":1643},[72,54651,52562],{"class":82},[72,54653,51762],{"class":51718},[72,54655,15346],{"class":358},[72,54657,609],{"class":82},[72,54659,51809],{"class":366},[72,54661,51789],{"class":358},[72,54663,609],{"class":82},[72,54665,51816],{"class":366},[72,54667,51725],{"class":82},[72,54669,54670,54672,54674,54676,54678],{"class":74,"line":1649},[72,54671,52562],{"class":82},[72,54673,51825],{"class":51718},[72,54675,51828],{"class":82},[72,54677,51825],{"class":51718},[72,54679,51725],{"class":82},[72,54681,54682,54684,54686],{"class":74,"line":1740},[72,54683,52203],{"class":82},[72,54685,51752],{"class":51718},[72,54687,51725],{"class":82},[72,54689,54690],{"class":74,"line":1746},[72,54691,2828],{"emptyLinePlaceholder":490},[72,54693,54694,54696,54698],{"class":74,"line":1758},[72,54695,1464],{"class":82},[72,54697,52218],{"class":51718},[72,54699,51725],{"class":82},[72,54701,54702,54704,54707,54709,54711,54713,54715,54717,54719,54722,54724,54727,54730,54732,54735],{"class":74,"line":2041},[72,54703,52562],{"class":82},[72,54705,54706],{"class":51718},"textarea",[72,54708,15346],{"class":358},[72,54710,609],{"class":82},[72,54712,8078],{"class":366},[72,54714,15385],{"class":358},[72,54716,609],{"class":82},[72,54718,8078],{"class":366},[72,54720,54721],{"class":358}," cols",[72,54723,609],{"class":82},[72,54725,54726],{"class":366},"\"30\"",[72,54728,54729],{"class":358}," rows",[72,54731,609],{"class":82},[72,54733,54734],{"class":366},"\"10\"",[72,54736,51725],{"class":82},[72,54738,54739],{"class":74,"line":2046},[72,54740,54741],{"class":82},"        用户注册协议\n",[72,54743,54744],{"class":74,"line":2052},[72,54745,54746],{"class":82},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[72,54748,54749],{"class":74,"line":2057},[72,54750,54751],{"class":82},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[72,54753,54754,54756,54758],{"class":74,"line":2071},[72,54755,52194],{"class":82},[72,54757,54706],{"class":51718},[72,54759,51725],{"class":82},[72,54761,54762,54764,54766],{"class":74,"line":2076},[72,54763,52562],{"class":82},[72,54765,54134],{"class":51718},[72,54767,51725],{"class":82},[72,54769,54770,54772,54774,54776,54778,54781,54783,54786,54788],{"class":74,"line":2082},[72,54771,52562],{"class":82},[72,54773,54305],{"class":51718},[72,54775,53904],{"class":358},[72,54777,609],{"class":82},[72,54779,54780],{"class":366},"\"btn\"",[72,54782,54308],{"class":358},[72,54784,54785],{"class":82},">我已经阅读用户协议(5)\u003C\u002F",[72,54787,54305],{"class":51718},[72,54789,51725],{"class":82},[72,54791,54792,54794,54796],{"class":74,"line":2103},[72,54793,52562],{"class":82},[72,54795,52231],{"class":51718},[72,54797,51725],{"class":82},[72,54799,54800],{"class":74,"line":2108},[72,54801,54802],{"class":621},"    \u002F\u002F 1. 获取元素\n",[72,54804,54805,54807,54810,54812,54815,54818,54820,54823],{"class":74,"line":2122},[72,54806,11647],{"class":78},[72,54808,54809],{"class":362}," btn",[72,54811,13990],{"class":78},[72,54813,54814],{"class":82}," document.",[72,54816,54817],{"class":358},"querySelector",[72,54819,564],{"class":82},[72,54821,54822],{"class":366},"'.btn'",[72,54824,570],{"class":82},[72,54826,54827],{"class":74,"line":2127},[72,54828,54829],{"class":621},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[72,54831,54832],{"class":74,"line":2156},[72,54833,54834],{"class":621},"    \u002F\u002F 2. 倒计时\n",[72,54836,54837,54839,54841,54843],{"class":74,"line":2161},[72,54838,52637],{"class":78},[72,54840,9864],{"class":82},[72,54842,609],{"class":78},[72,54844,54845],{"class":362}," 5\n",[72,54847,54848],{"class":74,"line":2178},[72,54849,54850],{"class":621},"    \u002F\u002F 2.1 开启定时器\n",[72,54852,54853,54855,54858,54860,54863,54865,54868],{"class":74,"line":2183},[72,54854,52637],{"class":78},[72,54856,54857],{"class":82}," n ",[72,54859,609],{"class":78},[72,54861,54862],{"class":358}," setInterval",[72,54864,564],{"class":82},[72,54866,54867],{"class":78},"function",[72,54869,54870],{"class":82}," () {\n",[72,54872,54873,54876],{"class":74,"line":2188},[72,54874,54875],{"class":82},"      i",[72,54877,54878],{"class":78},"--\n",[72,54880,54881,54884,54886,54889,54891],{"class":74,"line":2193},[72,54882,54883],{"class":82},"      btn.innerHTML ",[72,54885,609],{"class":78},[72,54887,54888],{"class":366}," `我已经阅读用户协议(${",[72,54890,995],{"class":82},[72,54892,54893],{"class":366},"})`\n",[72,54895,54896,54899,54902,54905,54907],{"class":74,"line":2207},[72,54897,54898],{"class":78},"      if",[72,54900,54901],{"class":82}," (i ",[72,54903,54904],{"class":78},"===",[72,54906,4521],{"class":362},[72,54908,12868],{"class":82},[72,54910,54911,54914,54917],{"class":74,"line":2212},[72,54912,54913],{"class":358},"        clearInterval",[72,54915,54916],{"class":82},"(n)  ",[72,54918,54919],{"class":621},"\u002F\u002F 关闭定时器\n",[72,54921,54922],{"class":74,"line":3005},[72,54923,54924],{"class":621},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[72,54926,54927,54930,54932],{"class":74,"line":3019},[72,54928,54929],{"class":82},"        btn.disabled ",[72,54931,609],{"class":78},[72,54933,54934],{"class":362}," false\n",[72,54936,54937,54940,54942],{"class":74,"line":3027},[72,54938,54939],{"class":82},"        btn.innerHTML ",[72,54941,609],{"class":78},[72,54943,54944],{"class":366}," '同意'\n",[72,54946,54947],{"class":74,"line":3032},[72,54948,52816],{"class":82},[72,54950,54951,54954,54956],{"class":74,"line":3038},[72,54952,54953],{"class":82},"    }, ",[72,54955,6836],{"class":362},[72,54957,570],{"class":82},[72,54959,54960],{"class":74,"line":3044},[72,54961,2828],{"emptyLinePlaceholder":490},[72,54963,54964,54966,54968],{"class":74,"line":3049},[72,54965,52835],{"class":82},[72,54967,52231],{"class":51718},[72,54969,51725],{"class":82},[72,54971,54972,54974,54976],{"class":74,"line":8374},[72,54973,52203],{"class":82},[72,54975,52218],{"class":51718},[72,54977,51725],{"class":82},[72,54979,54980],{"class":74,"line":8398},[72,54981,2828],{"emptyLinePlaceholder":490},[72,54983,54984,54986,54988],{"class":74,"line":8403},[72,54985,52203],{"class":82},[72,54987,51053],{"class":51718},[72,54989,51725],{"class":82},[15,54991,54992],{},"不要一直想着用死循环,避免死循环",[15,54994,54995,54998],{},[34,54996,54997],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[22423,55000,55002],{"id":55001},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[22,55004,55005],{},[25,55006,55007],{},"法1",[63,55009,55011],{"className":51051,"code":55010,"language":51053,"meta":68,"style":68},"\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",[34,55012,55013,55023,55037,55041,55049,55063,55083,55095,55103,55109,55120,55131,55135,55139,55146,55158,55162,55166,55173,55185,55199,55212,55226,55230,55234,55241,55252,55263,55274,55286,55298,55310,55314,55318,55326,55336,55349,55361,55374,55378,55382,55389,55399,55411,55423,55434,55445,55455,55467,55479,55483,55487,55496,55508,55520,55548,55561,55565,55569,55576,55587,55591,55599,55607,55611,55619,55633,55648,55672,55680,55695,55708,55716,55737,55749,55761,55773,55785,55797,55809,55821,55830,55838,55846,55854,55866,55889,55908,55927,55946,55965,55984,56003,56023,56027,56047,56066,56086,56107,56118,56135,56145,56155,56165,56170,56175,56180,56185,56210,56223,56227,56250,56254,56262,56270,56278,56282],{"__ignoreMap":68},[72,55014,55015,55017,55019,55021],{"class":74,"line":75},[72,55016,51715],{"class":82},[72,55018,51719],{"class":51718},[72,55020,51722],{"class":358},[72,55022,51725],{"class":82},[72,55024,55025,55027,55029,55031,55033,55035],{"class":74,"line":370},[72,55026,1464],{"class":82},[72,55028,51053],{"class":51718},[72,55030,51734],{"class":358},[72,55032,609],{"class":82},[72,55034,51739],{"class":366},[72,55036,51725],{"class":82},[72,55038,55039],{"class":74,"line":1608},[72,55040,2828],{"emptyLinePlaceholder":490},[72,55042,55043,55045,55047],{"class":74,"line":1623},[72,55044,1464],{"class":82},[72,55046,51752],{"class":51718},[72,55048,51725],{"class":82},[72,55050,55051,55053,55055,55057,55059,55061],{"class":74,"line":1629},[72,55052,52562],{"class":82},[72,55054,51762],{"class":51718},[72,55056,51765],{"class":358},[72,55058,609],{"class":82},[72,55060,51770],{"class":366},[72,55062,51725],{"class":82},[72,55064,55065,55067,55069,55071,55073,55075,55077,55079,55081],{"class":74,"line":1643},[72,55066,52562],{"class":82},[72,55068,51762],{"class":51718},[72,55070,15346],{"class":358},[72,55072,609],{"class":82},[72,55074,51809],{"class":366},[72,55076,51789],{"class":358},[72,55078,609],{"class":82},[72,55080,51816],{"class":366},[72,55082,51725],{"class":82},[72,55084,55085,55087,55089,55091,55093],{"class":74,"line":1649},[72,55086,52562],{"class":82},[72,55088,51825],{"class":51718},[72,55090,51828],{"class":82},[72,55092,51825],{"class":51718},[72,55094,51725],{"class":82},[72,55096,55097,55099,55101],{"class":74,"line":1740},[72,55098,52562],{"class":82},[72,55100,473],{"class":51718},[72,55102,51725],{"class":82},[72,55104,55105,55107],{"class":74,"line":1746},[72,55106,6829],{"class":51718},[72,55108,15998],{"class":82},[72,55110,55111,55114,55116,55118],{"class":74,"line":1758},[72,55112,55113],{"class":362},"      padding",[72,55115,51855],{"class":82},[72,55117,747],{"class":362},[72,55119,1719],{"class":82},[72,55121,55122,55125,55127,55129],{"class":74,"line":2041},[72,55123,55124],{"class":362},"      margin",[72,55126,51855],{"class":82},[72,55128,747],{"class":362},[72,55130,1719],{"class":82},[72,55132,55133],{"class":74,"line":2046},[72,55134,2615],{"class":82},[72,55136,55137],{"class":74,"line":2052},[72,55138,2828],{"emptyLinePlaceholder":490},[72,55140,55141,55144],{"class":74,"line":2057},[72,55142,55143],{"class":51718},"    li",[72,55145,15998],{"class":82},[72,55147,55148,55151,55153,55156],{"class":74,"line":2071},[72,55149,55150],{"class":362},"      list-style",[72,55152,51855],{"class":82},[72,55154,55155],{"class":362},"none",[72,55157,1719],{"class":82},[72,55159,55160],{"class":74,"line":2076},[72,55161,2615],{"class":82},[72,55163,55164],{"class":74,"line":2082},[72,55165,2828],{"emptyLinePlaceholder":490},[72,55167,55168,55171],{"class":74,"line":2103},[72,55169,55170],{"class":358},"    .box",[72,55172,15998],{"class":82},[72,55174,55175,55178,55180,55183],{"class":74,"line":2108},[72,55176,55177],{"class":362},"      position",[72,55179,51855],{"class":82},[72,55181,55182],{"class":362},"relative",[72,55184,1719],{"class":82},[72,55186,55187,55190,55192,55195,55197],{"class":74,"line":2122},[72,55188,55189],{"class":362},"      width",[72,55191,51855],{"class":82},[72,55193,55194],{"class":362},"976",[72,55196,51910],{"class":78},[72,55198,1719],{"class":82},[72,55200,55201,55204,55206,55208,55210],{"class":74,"line":2127},[72,55202,55203],{"class":362},"      height",[72,55205,51855],{"class":82},[72,55207,1968],{"class":362},[72,55209,51910],{"class":78},[72,55211,1719],{"class":82},[72,55213,55214,55216,55218,55220,55222,55224],{"class":74,"line":2156},[72,55215,55124],{"class":362},[72,55217,51855],{"class":82},[72,55219,865],{"class":362},[72,55221,51910],{"class":78},[72,55223,51974],{"class":362},[72,55225,1719],{"class":82},[72,55227,55228],{"class":74,"line":2161},[72,55229,2615],{"class":82},[72,55231,55232],{"class":74,"line":2178},[72,55233,2828],{"emptyLinePlaceholder":490},[72,55235,55236,55239],{"class":74,"line":2183},[72,55237,55238],{"class":358},"    .slider-footer",[72,55240,15998],{"class":82},[72,55242,55243,55245,55247,55250],{"class":74,"line":2188},[72,55244,55177],{"class":362},[72,55246,51855],{"class":82},[72,55248,55249],{"class":362},"absolute",[72,55251,1719],{"class":82},[72,55253,55254,55257,55259,55261],{"class":74,"line":2193},[72,55255,55256],{"class":362},"      left",[72,55258,51855],{"class":82},[72,55260,747],{"class":362},[72,55262,1719],{"class":82},[72,55264,55265,55268,55270,55272],{"class":74,"line":2207},[72,55266,55267],{"class":362},"      bottom",[72,55269,51855],{"class":82},[72,55271,747],{"class":362},[72,55273,1719],{"class":82},[72,55275,55276,55278,55280,55282,55284],{"class":74,"line":2212},[72,55277,55189],{"class":362},[72,55279,51855],{"class":82},[72,55281,865],{"class":362},[72,55283,882],{"class":78},[72,55285,1719],{"class":82},[72,55287,55288,55290,55292,55294,55296],{"class":74,"line":3005},[72,55289,55203],{"class":362},[72,55291,51855],{"class":82},[72,55293,1129],{"class":362},[72,55295,882],{"class":78},[72,55297,1719],{"class":82},[72,55299,55300,55303,55305,55308],{"class":74,"line":3019},[72,55301,55302],{"class":362},"      background-color",[72,55304,51855],{"class":82},[72,55306,55307],{"class":362},"skyblue",[72,55309,1719],{"class":82},[72,55311,55312],{"class":74,"line":3027},[72,55313,2615],{"class":82},[72,55315,55316],{"class":74,"line":3032},[72,55317,2828],{"emptyLinePlaceholder":490},[72,55319,55320,55322,55324],{"class":74,"line":3038},[72,55321,55238],{"class":358},[72,55323,7251],{"class":51718},[72,55325,15998],{"class":82},[72,55327,55328,55330,55332,55334],{"class":74,"line":3044},[72,55329,55177],{"class":362},[72,55331,51855],{"class":82},[72,55333,55249],{"class":362},[72,55335,1719],{"class":82},[72,55337,55338,55341,55343,55345,55347],{"class":74,"line":3049},[72,55339,55340],{"class":362},"      font-size",[72,55342,51855],{"class":82},[72,55344,1455],{"class":362},[72,55346,51910],{"class":78},[72,55348,1719],{"class":82},[72,55350,55351,55353,55355,55357,55359],{"class":74,"line":8374},[72,55352,55256],{"class":362},[72,55354,51855],{"class":82},[72,55356,1254],{"class":362},[72,55358,51910],{"class":78},[72,55360,1719],{"class":82},[72,55362,55363,55366,55368,55370,55372],{"class":74,"line":8398},[72,55364,55365],{"class":362},"      top",[72,55367,51855],{"class":82},[72,55369,873],{"class":362},[72,55371,51910],{"class":78},[72,55373,1719],{"class":82},[72,55375,55376],{"class":74,"line":8403},[72,55377,2615],{"class":82},[72,55379,55380],{"class":74,"line":8409},[72,55381,2828],{"emptyLinePlaceholder":490},[72,55383,55384,55387],{"class":74,"line":8436},[72,55385,55386],{"class":51718},"    ul",[72,55388,15998],{"class":82},[72,55390,55391,55393,55395,55397],{"class":74,"line":8441},[72,55392,55177],{"class":362},[72,55394,51855],{"class":82},[72,55396,55249],{"class":362},[72,55398,1719],{"class":82},[72,55400,55401,55403,55405,55407,55409],{"class":74,"line":8447},[72,55402,55365],{"class":362},[72,55404,51855],{"class":82},[72,55406,1335],{"class":362},[72,55408,51910],{"class":78},[72,55410,1719],{"class":82},[72,55412,55413,55415,55417,55419,55421],{"class":74,"line":8459},[72,55414,55256],{"class":362},[72,55416,51855],{"class":82},[72,55418,1254],{"class":362},[72,55420,51910],{"class":78},[72,55422,1719],{"class":82},[72,55424,55425,55428,55430,55432],{"class":74,"line":8471},[72,55426,55427],{"class":362},"      display",[72,55429,51855],{"class":82},[72,55431,51895],{"class":362},[72,55433,1719],{"class":82},[72,55435,55436,55439,55441,55443],{"class":74,"line":8483},[72,55437,55438],{"class":362},"      justify-content",[72,55440,51855],{"class":82},[72,55442,52086],{"class":362},[72,55444,1719],{"class":82},[72,55446,55447,55449,55451,55453],{"class":74,"line":10142},[72,55448,55177],{"class":362},[72,55450,51855],{"class":82},[72,55452,55249],{"class":362},[72,55454,1719],{"class":82},[72,55456,55457,55459,55461,55463,55465],{"class":74,"line":10167},[72,55458,55189],{"class":362},[72,55460,51855],{"class":82},[72,55462,4420],{"class":362},[72,55464,51910],{"class":78},[72,55466,1719],{"class":82},[72,55468,55469,55471,55473,55475,55477],{"class":74,"line":10190},[72,55470,55203],{"class":362},[72,55472,51855],{"class":82},[72,55474,1254],{"class":362},[72,55476,51910],{"class":78},[72,55478,1719],{"class":82},[72,55480,55481],{"class":74,"line":10214},[72,55482,2615],{"class":82},[72,55484,55485],{"class":74,"line":10219},[72,55486,2828],{"emptyLinePlaceholder":490},[72,55488,55489,55491,55494],{"class":74,"line":10224},[72,55490,55386],{"class":51718},[72,55492,55493],{"class":51718}," li",[72,55495,15998],{"class":82},[72,55497,55498,55500,55502,55504,55506],{"class":74,"line":10229},[72,55499,55189],{"class":362},[72,55501,51855],{"class":82},[72,55503,1254],{"class":362},[72,55505,51910],{"class":78},[72,55507,1719],{"class":82},[72,55509,55510,55512,55514,55516,55518],{"class":74,"line":10238},[72,55511,55203],{"class":362},[72,55513,51855],{"class":82},[72,55515,1254],{"class":362},[72,55517,51910],{"class":78},[72,55519,1719],{"class":82},[72,55521,55522,55524,55526,55529,55531,55533,55535,55537,55539,55541,55543,55546],{"class":74,"line":10243},[72,55523,55302],{"class":362},[72,55525,51855],{"class":82},[72,55527,55528],{"class":362},"rgba",[72,55530,564],{"class":82},[72,55532,747],{"class":362},[72,55534,12861],{"class":82},[72,55536,747],{"class":362},[72,55538,12861],{"class":82},[72,55540,747],{"class":362},[72,55542,12861],{"class":82},[72,55544,55545],{"class":362},".4",[72,55547,3147],{"class":82},[72,55549,55550,55553,55555,55557,55559],{"class":74,"line":10249},[72,55551,55552],{"class":362},"      border-radius",[72,55554,51855],{"class":82},[72,55556,1000],{"class":362},[72,55558,51910],{"class":78},[72,55560,1719],{"class":82},[72,55562,55563],{"class":74,"line":10270},[72,55564,2615],{"class":82},[72,55566,55567],{"class":74,"line":10276},[72,55568,2828],{"emptyLinePlaceholder":490},[72,55570,55571,55574],{"class":74,"line":10290},[72,55572,55573],{"class":358},"    .activate",[72,55575,15998],{"class":82},[72,55577,55578,55580,55582,55585],{"class":74,"line":10296},[72,55579,55302],{"class":362},[72,55581,51855],{"class":82},[72,55583,55584],{"class":362},"#f7f7f7",[72,55586,1719],{"class":82},[72,55588,55589],{"class":74,"line":10323},[72,55590,2615],{"class":82},[72,55592,55593,55595,55597],{"class":74,"line":10332},[72,55594,52835],{"class":82},[72,55596,473],{"class":51718},[72,55598,51725],{"class":82},[72,55600,55601,55603,55605],{"class":74,"line":10338},[72,55602,52203],{"class":82},[72,55604,51752],{"class":51718},[72,55606,51725],{"class":82},[72,55608,55609],{"class":74,"line":10346},[72,55610,2828],{"emptyLinePlaceholder":490},[72,55612,55613,55615,55617],{"class":74,"line":10351},[72,55614,1464],{"class":82},[72,55616,52218],{"class":51718},[72,55618,51725],{"class":82},[72,55620,55621,55623,55625,55627,55629,55631],{"class":74,"line":17030},[72,55622,52562],{"class":82},[72,55624,52029],{"class":51718},[72,55626,53904],{"class":358},[72,55628,609],{"class":82},[72,55630,53909],{"class":366},[72,55632,51725],{"class":82},[72,55634,55635,55637,55639,55641,55643,55646],{"class":74,"line":17036},[72,55636,51759],{"class":82},[72,55638,52029],{"class":51718},[72,55640,53904],{"class":358},[72,55642,609],{"class":82},[72,55644,55645],{"class":366},"\"slider-wrapper\"",[72,55647,51725],{"class":82},[72,55649,55650,55653,55655,55658,55660,55663,55666,55668,55670],{"class":74,"line":17059},[72,55651,55652],{"class":82},"      \u003C",[72,55654,1891],{"class":51718},[72,55656,55657],{"class":358}," src",[72,55659,609],{"class":82},[72,55661,55662],{"class":366},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[72,55664,55665],{"class":358}," alt",[72,55667,609],{"class":82},[72,55669,8078],{"class":366},[72,55671,51725],{"class":82},[72,55673,55674,55676,55678],{"class":74,"line":17065},[72,55675,52194],{"class":82},[72,55677,52029],{"class":51718},[72,55679,51725],{"class":82},[72,55681,55682,55684,55686,55688,55690,55693],{"class":74,"line":17088},[72,55683,51759],{"class":82},[72,55685,52029],{"class":51718},[72,55687,53904],{"class":358},[72,55689,609],{"class":82},[72,55691,55692],{"class":366},"\"slider-footer\"",[72,55694,51725],{"class":82},[72,55696,55697,55699,55701,55704,55706],{"class":74,"line":17102},[72,55698,55652],{"class":82},[72,55700,15],{"class":51718},[72,55702,55703],{"class":82},">对人类来说会不会太超前了?\u003C\u002F",[72,55705,15],{"class":51718},[72,55707,51725],{"class":82},[72,55709,55710,55712,55714],{"class":74,"line":17122},[72,55711,55652],{"class":82},[72,55713,251],{"class":51718},[72,55715,51725],{"class":82},[72,55717,55718,55721,55723,55725,55727,55730,55733,55735],{"class":74,"line":17128},[72,55719,55720],{"class":82},"        \u003C",[72,55722,25],{"class":51718},[72,55724,53904],{"class":358},[72,55726,609],{"class":82},[72,55728,55729],{"class":366},"\"activate\"",[72,55731,55732],{"class":82},">\u003C\u002F",[72,55734,25],{"class":51718},[72,55736,51725],{"class":82},[72,55738,55739,55741,55743,55745,55747],{"class":74,"line":17139},[72,55740,55720],{"class":82},[72,55742,25],{"class":51718},[72,55744,55732],{"class":82},[72,55746,25],{"class":51718},[72,55748,51725],{"class":82},[72,55750,55751,55753,55755,55757,55759],{"class":74,"line":17162},[72,55752,55720],{"class":82},[72,55754,25],{"class":51718},[72,55756,55732],{"class":82},[72,55758,25],{"class":51718},[72,55760,51725],{"class":82},[72,55762,55763,55765,55767,55769,55771],{"class":74,"line":17184},[72,55764,55720],{"class":82},[72,55766,25],{"class":51718},[72,55768,55732],{"class":82},[72,55770,25],{"class":51718},[72,55772,51725],{"class":82},[72,55774,55775,55777,55779,55781,55783],{"class":74,"line":17189},[72,55776,55720],{"class":82},[72,55778,25],{"class":51718},[72,55780,55732],{"class":82},[72,55782,25],{"class":51718},[72,55784,51725],{"class":82},[72,55786,55787,55789,55791,55793,55795],{"class":74,"line":17195},[72,55788,55720],{"class":82},[72,55790,25],{"class":51718},[72,55792,55732],{"class":82},[72,55794,25],{"class":51718},[72,55796,51725],{"class":82},[72,55798,55799,55801,55803,55805,55807],{"class":74,"line":17209},[72,55800,55720],{"class":82},[72,55802,25],{"class":51718},[72,55804,55732],{"class":82},[72,55806,25],{"class":51718},[72,55808,51725],{"class":82},[72,55810,55811,55813,55815,55817,55819],{"class":74,"line":17222},[72,55812,55720],{"class":82},[72,55814,25],{"class":51718},[72,55816,55732],{"class":82},[72,55818,25],{"class":51718},[72,55820,51725],{"class":82},[72,55822,55823,55826,55828],{"class":74,"line":17227},[72,55824,55825],{"class":82},"      \u003C\u002F",[72,55827,251],{"class":51718},[72,55829,51725],{"class":82},[72,55831,55832,55834,55836],{"class":74,"line":17241},[72,55833,52194],{"class":82},[72,55835,52029],{"class":51718},[72,55837,51725],{"class":82},[72,55839,55840,55842,55844],{"class":74,"line":17246},[72,55841,52835],{"class":82},[72,55843,52029],{"class":51718},[72,55845,51725],{"class":82},[72,55847,55848,55850,55852],{"class":74,"line":17252},[72,55849,52562],{"class":82},[72,55851,52231],{"class":51718},[72,55853,51725],{"class":82},[72,55855,55856,55858,55861,55863],{"class":74,"line":17257},[72,55857,11647],{"class":78},[72,55859,55860],{"class":362}," arrImage",[72,55862,13990],{"class":78},[72,55864,55865],{"class":82}," [\n",[72,55867,55868,55871,55874,55877,55880,55883,55886],{"class":74,"line":17271},[72,55869,55870],{"class":82},"      { url: ",[72,55872,55873],{"class":366},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[72,55875,55876],{"class":82},", title: ",[72,55878,55879],{"class":366},"'对人类来说会不会太超前了?'",[72,55881,55882],{"class":82},", color: ",[72,55884,55885],{"class":366},"'rgba(100,67,68)'",[72,55887,55888],{"class":82}," },\n",[72,55890,55891,55893,55896,55898,55901,55903,55906],{"class":74,"line":17276},[72,55892,55870],{"class":82},[72,55894,55895],{"class":366},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[72,55897,55876],{"class":82},[72,55899,55900],{"class":366},"'开启剑与雪的黑暗传说!'",[72,55902,55882],{"class":82},[72,55904,55905],{"class":366},"'rgba(43,35,26)'",[72,55907,55888],{"class":82},[72,55909,55910,55912,55915,55917,55920,55922,55925],{"class":74,"line":17281},[72,55911,55870],{"class":82},[72,55913,55914],{"class":366},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[72,55916,55876],{"class":82},[72,55918,55919],{"class":366},"'真正的jo厨出现了!'",[72,55921,55882],{"class":82},[72,55923,55924],{"class":366},"'rgba(36,31,33)'",[72,55926,55888],{"class":82},[72,55928,55929,55931,55934,55936,55939,55941,55944],{"class":74,"line":17295},[72,55930,55870],{"class":82},[72,55932,55933],{"class":366},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[72,55935,55876],{"class":82},[72,55937,55938],{"class":366},"'李玉刚:让世界通过b站看到东方大国文化'",[72,55940,55882],{"class":82},[72,55942,55943],{"class":366},"'rgba(139,98,66)'",[72,55945,55888],{"class":82},[72,55947,55948,55950,55953,55955,55958,55960,55963],{"class":74,"line":17307},[72,55949,55870],{"class":82},[72,55951,55952],{"class":366},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[72,55954,55876],{"class":82},[72,55956,55957],{"class":366},"'快来分享你的寒假日常吧'",[72,55959,55882],{"class":82},[72,55961,55962],{"class":366},"'rgba(67,90,92)'",[72,55964,55888],{"class":82},[72,55966,55967,55969,55972,55974,55977,55979,55982],{"class":74,"line":17312},[72,55968,55870],{"class":82},[72,55970,55971],{"class":366},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[72,55973,55876],{"class":82},[72,55975,55976],{"class":366},"'哔哩哔哩小年YEAR'",[72,55978,55882],{"class":82},[72,55980,55981],{"class":366},"'rgba(166,131,143)'",[72,55983,55888],{"class":82},[72,55985,55986,55988,55991,55993,55996,55998,56001],{"class":74,"line":17325},[72,55987,55870],{"class":82},[72,55989,55990],{"class":366},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[72,55992,55876],{"class":82},[72,55994,55995],{"class":366},"'一站式解决你的电脑配置问题'",[72,55997,55882],{"class":82},[72,55999,56000],{"class":366},"'rgba(53,29,25)'",[72,56002,55888],{"class":82},[72,56004,56005,56007,56010,56012,56015,56017,56020],{"class":74,"line":17330},[72,56006,55870],{"class":82},[72,56008,56009],{"class":366},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[72,56011,55876],{"class":82},[72,56013,56014],{"class":366},"'谁不想和小猫咪贴贴呢?'",[72,56016,55882],{"class":82},[72,56018,56019],{"class":366},"'rgba(99,72,114)'",[72,56021,56022],{"class":82}," }\n",[72,56024,56025],{"class":74,"line":17335},[72,56026,53527],{"class":82},[72,56028,56029,56031,56034,56036,56038,56040,56042,56045],{"class":74,"line":17340},[72,56030,11647],{"class":78},[72,56032,56033],{"class":362}," img",[72,56035,13990],{"class":78},[72,56037,54814],{"class":82},[72,56039,54817],{"class":358},[72,56041,564],{"class":82},[72,56043,56044],{"class":366},"'.slider-wrapper img'",[72,56046,570],{"class":82},[72,56048,56049,56051,56053,56055,56057,56059,56061,56064],{"class":74,"line":17353},[72,56050,11647],{"class":78},[72,56052,7251],{"class":362},[72,56054,13990],{"class":78},[72,56056,54814],{"class":82},[72,56058,54817],{"class":358},[72,56060,564],{"class":82},[72,56062,56063],{"class":366},"'.slider-footer p'",[72,56065,570],{"class":82},[72,56067,56068,56070,56073,56075,56077,56079,56081,56084],{"class":74,"line":17358},[72,56069,11647],{"class":78},[72,56071,56072],{"class":362}," color",[72,56074,13990],{"class":78},[72,56076,54814],{"class":82},[72,56078,54817],{"class":358},[72,56080,564],{"class":82},[72,56082,56083],{"class":366},"'.slider-footer'",[72,56085,570],{"class":82},[72,56087,56088,56090,56093,56095,56097,56100,56102,56105],{"class":74,"line":33051},[72,56089,11647],{"class":78},[72,56091,56092],{"class":362}," lis",[72,56094,13990],{"class":78},[72,56096,54814],{"class":82},[72,56098,56099],{"class":358},"querySelectorAll",[72,56101,564],{"class":82},[72,56103,56104],{"class":366},"'.slider-footer ul li'",[72,56106,570],{"class":82},[72,56108,56109,56111,56113,56115],{"class":74,"line":33057},[72,56110,52637],{"class":78},[72,56112,9864],{"class":82},[72,56114,609],{"class":78},[72,56116,56117],{"class":362}," 1\n",[72,56119,56120,56122,56125,56127,56129,56131,56133],{"class":74,"line":33063},[72,56121,52637],{"class":78},[72,56123,56124],{"class":82}," timer ",[72,56126,609],{"class":78},[72,56128,54862],{"class":358},[72,56130,564],{"class":82},[72,56132,54867],{"class":78},[72,56134,54870],{"class":82},[72,56136,56137,56140,56142],{"class":74,"line":33069},[72,56138,56139],{"class":82},"      img.src ",[72,56141,609],{"class":78},[72,56143,56144],{"class":82}," arrImage[i].url\n",[72,56146,56147,56150,56152],{"class":74,"line":33075},[72,56148,56149],{"class":82},"      p.innerHTML ",[72,56151,609],{"class":78},[72,56153,56154],{"class":82}," arrImage[i].title\n",[72,56156,56157,56160,56162],{"class":74,"line":33086},[72,56158,56159],{"class":82},"      color.style.backgroundColor ",[72,56161,609],{"class":78},[72,56163,56164],{"class":82}," arrImage[i].color\n",[72,56166,56167],{"class":74,"line":33092},[72,56168,56169],{"class":621},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[72,56171,56172],{"class":74,"line":33112},[72,56173,56174],{"class":621},"      \u002F\u002F li.classList.add('activate')\n",[72,56176,56177],{"class":74,"line":33118},[72,56178,56179],{"class":621},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[72,56181,56182],{"class":74,"line":33129},[72,56183,56184],{"class":621},"      \u002F\u002F lis[i].classList.remove('activate')\n",[72,56186,56187,56190,56192,56194,56197,56200,56203,56205,56208],{"class":74,"line":33135},[72,56188,56189],{"class":82},"      document.",[72,56191,54817],{"class":358},[72,56193,564],{"class":82},[72,56195,56196],{"class":366},"'.activate'",[72,56198,56199],{"class":82},")?.classList.",[72,56201,56202],{"class":358},"toggle",[72,56204,564],{"class":82},[72,56206,56207],{"class":366},"'activate'",[72,56209,570],{"class":82},[72,56211,56212,56215,56217,56219,56221],{"class":74,"line":33141},[72,56213,56214],{"class":82},"      lis[i].classList.",[72,56216,5760],{"class":358},[72,56218,564],{"class":82},[72,56220,56207],{"class":366},[72,56222,570],{"class":82},[72,56224,56225],{"class":74,"line":33147},[72,56226,2828],{"emptyLinePlaceholder":490},[72,56228,56229,56232,56234,56236,56238,56240,56242,56244,56247],{"class":74,"line":33153},[72,56230,56231],{"class":82},"      i ",[72,56233,609],{"class":78},[72,56235,54901],{"class":82},[72,56237,1035],{"class":78},[72,56239,25540],{"class":362},[72,56241,14140],{"class":82},[72,56243,882],{"class":78},[72,56245,56246],{"class":82}," arrImage.",[72,56248,56249],{"class":362},"length\n",[72,56251,56252],{"class":74,"line":33159},[72,56253,2828],{"emptyLinePlaceholder":490},[72,56255,56256,56258,56260],{"class":74,"line":33165},[72,56257,54953],{"class":82},[72,56259,6836],{"class":362},[72,56261,570],{"class":82},[72,56263,56264,56266,56268],{"class":74,"line":33171},[72,56265,52835],{"class":82},[72,56267,52231],{"class":51718},[72,56269,51725],{"class":82},[72,56271,56272,56274,56276],{"class":74,"line":33191},[72,56273,52203],{"class":82},[72,56275,52218],{"class":51718},[72,56277,51725],{"class":82},[72,56279,56280],{"class":74,"line":33197},[72,56281,2828],{"emptyLinePlaceholder":490},[72,56283,56284,56286,56288],{"class":74,"line":33213},[72,56285,52203],{"class":82},[72,56287,51053],{"class":51718},[72,56289,51725],{"class":82},[15,56291,56292],{},[1891,56293],{"alt":68,"src":56294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[15,56296,56297],{},"?.就是短路保护,确保输出正常进行",[15,56299,56300],{},"不要忘记取余%,有时候可以用",[15,56302,56303],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[22,56305,56306],{"start":370},[25,56307,56308],{},"法2",[63,56310,56312],{"className":51051,"code":56311,"language":51053,"meta":68,"style":68},"\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",[34,56313,56314,56324,56338,56342,56350,56364,56384,56396,56404,56410,56420,56430,56434,56438,56444,56454,56458,56462,56468,56478,56490,56502,56516,56520,56524,56530,56540,56550,56560,56572,56584,56594,56598,56602,56610,56620,56632,56644,56656,56660,56664,56670,56680,56692,56704,56714,56724,56734,56746,56758,56762,56766,56774,56786,56798,56824,56836,56840,56844,56850,56860,56864,56872,56880,56884,56892,56906,56920,56940,56948,56962,56974,56982,57000,57012,57024,57036,57048,57060,57072,57084,57092,57100,57108,57116,57127,57143,57159,57175,57191,57207,57223,57239,57255,57259,57264,57282,57300,57310,57315,57320,57331,57337,57352,57361,57365,57370,57379,57384,57393,57398,57403,57408,57431,57461,57465,57473,57477,57485,57493,57497],{"__ignoreMap":68},[72,56315,56316,56318,56320,56322],{"class":74,"line":75},[72,56317,51715],{"class":82},[72,56319,51719],{"class":51718},[72,56321,51722],{"class":358},[72,56323,51725],{"class":82},[72,56325,56326,56328,56330,56332,56334,56336],{"class":74,"line":370},[72,56327,1464],{"class":82},[72,56329,51053],{"class":51718},[72,56331,51734],{"class":358},[72,56333,609],{"class":82},[72,56335,51739],{"class":366},[72,56337,51725],{"class":82},[72,56339,56340],{"class":74,"line":1608},[72,56341,2828],{"emptyLinePlaceholder":490},[72,56343,56344,56346,56348],{"class":74,"line":1623},[72,56345,1464],{"class":82},[72,56347,51752],{"class":51718},[72,56349,51725],{"class":82},[72,56351,56352,56354,56356,56358,56360,56362],{"class":74,"line":1629},[72,56353,52562],{"class":82},[72,56355,51762],{"class":51718},[72,56357,51765],{"class":358},[72,56359,609],{"class":82},[72,56361,51770],{"class":366},[72,56363,51725],{"class":82},[72,56365,56366,56368,56370,56372,56374,56376,56378,56380,56382],{"class":74,"line":1643},[72,56367,52562],{"class":82},[72,56369,51762],{"class":51718},[72,56371,15346],{"class":358},[72,56373,609],{"class":82},[72,56375,51809],{"class":366},[72,56377,51789],{"class":358},[72,56379,609],{"class":82},[72,56381,51816],{"class":366},[72,56383,51725],{"class":82},[72,56385,56386,56388,56390,56392,56394],{"class":74,"line":1649},[72,56387,52562],{"class":82},[72,56389,51825],{"class":51718},[72,56391,51828],{"class":82},[72,56393,51825],{"class":51718},[72,56395,51725],{"class":82},[72,56397,56398,56400,56402],{"class":74,"line":1740},[72,56399,52562],{"class":82},[72,56401,473],{"class":51718},[72,56403,51725],{"class":82},[72,56405,56406,56408],{"class":74,"line":1746},[72,56407,6829],{"class":51718},[72,56409,15998],{"class":82},[72,56411,56412,56414,56416,56418],{"class":74,"line":1758},[72,56413,55113],{"class":362},[72,56415,51855],{"class":82},[72,56417,747],{"class":362},[72,56419,1719],{"class":82},[72,56421,56422,56424,56426,56428],{"class":74,"line":2041},[72,56423,55124],{"class":362},[72,56425,51855],{"class":82},[72,56427,747],{"class":362},[72,56429,1719],{"class":82},[72,56431,56432],{"class":74,"line":2046},[72,56433,2615],{"class":82},[72,56435,56436],{"class":74,"line":2052},[72,56437,2828],{"emptyLinePlaceholder":490},[72,56439,56440,56442],{"class":74,"line":2057},[72,56441,55143],{"class":51718},[72,56443,15998],{"class":82},[72,56445,56446,56448,56450,56452],{"class":74,"line":2071},[72,56447,55150],{"class":362},[72,56449,51855],{"class":82},[72,56451,55155],{"class":362},[72,56453,1719],{"class":82},[72,56455,56456],{"class":74,"line":2076},[72,56457,2615],{"class":82},[72,56459,56460],{"class":74,"line":2082},[72,56461,2828],{"emptyLinePlaceholder":490},[72,56463,56464,56466],{"class":74,"line":2103},[72,56465,55170],{"class":358},[72,56467,15998],{"class":82},[72,56469,56470,56472,56474,56476],{"class":74,"line":2108},[72,56471,55177],{"class":362},[72,56473,51855],{"class":82},[72,56475,55182],{"class":362},[72,56477,1719],{"class":82},[72,56479,56480,56482,56484,56486,56488],{"class":74,"line":2122},[72,56481,55189],{"class":362},[72,56483,51855],{"class":82},[72,56485,55194],{"class":362},[72,56487,51910],{"class":78},[72,56489,1719],{"class":82},[72,56491,56492,56494,56496,56498,56500],{"class":74,"line":2127},[72,56493,55203],{"class":362},[72,56495,51855],{"class":82},[72,56497,1968],{"class":362},[72,56499,51910],{"class":78},[72,56501,1719],{"class":82},[72,56503,56504,56506,56508,56510,56512,56514],{"class":74,"line":2156},[72,56505,55124],{"class":362},[72,56507,51855],{"class":82},[72,56509,865],{"class":362},[72,56511,51910],{"class":78},[72,56513,51974],{"class":362},[72,56515,1719],{"class":82},[72,56517,56518],{"class":74,"line":2161},[72,56519,2615],{"class":82},[72,56521,56522],{"class":74,"line":2178},[72,56523,2828],{"emptyLinePlaceholder":490},[72,56525,56526,56528],{"class":74,"line":2183},[72,56527,55238],{"class":358},[72,56529,15998],{"class":82},[72,56531,56532,56534,56536,56538],{"class":74,"line":2188},[72,56533,55177],{"class":362},[72,56535,51855],{"class":82},[72,56537,55249],{"class":362},[72,56539,1719],{"class":82},[72,56541,56542,56544,56546,56548],{"class":74,"line":2193},[72,56543,55256],{"class":362},[72,56545,51855],{"class":82},[72,56547,747],{"class":362},[72,56549,1719],{"class":82},[72,56551,56552,56554,56556,56558],{"class":74,"line":2207},[72,56553,55267],{"class":362},[72,56555,51855],{"class":82},[72,56557,747],{"class":362},[72,56559,1719],{"class":82},[72,56561,56562,56564,56566,56568,56570],{"class":74,"line":2212},[72,56563,55189],{"class":362},[72,56565,51855],{"class":82},[72,56567,865],{"class":362},[72,56569,882],{"class":78},[72,56571,1719],{"class":82},[72,56573,56574,56576,56578,56580,56582],{"class":74,"line":3005},[72,56575,55203],{"class":362},[72,56577,51855],{"class":82},[72,56579,1129],{"class":362},[72,56581,882],{"class":78},[72,56583,1719],{"class":82},[72,56585,56586,56588,56590,56592],{"class":74,"line":3019},[72,56587,55302],{"class":362},[72,56589,51855],{"class":82},[72,56591,55307],{"class":362},[72,56593,1719],{"class":82},[72,56595,56596],{"class":74,"line":3027},[72,56597,2615],{"class":82},[72,56599,56600],{"class":74,"line":3032},[72,56601,2828],{"emptyLinePlaceholder":490},[72,56603,56604,56606,56608],{"class":74,"line":3038},[72,56605,55238],{"class":358},[72,56607,7251],{"class":51718},[72,56609,15998],{"class":82},[72,56611,56612,56614,56616,56618],{"class":74,"line":3044},[72,56613,55177],{"class":362},[72,56615,51855],{"class":82},[72,56617,55249],{"class":362},[72,56619,1719],{"class":82},[72,56621,56622,56624,56626,56628,56630],{"class":74,"line":3049},[72,56623,55340],{"class":362},[72,56625,51855],{"class":82},[72,56627,1455],{"class":362},[72,56629,51910],{"class":78},[72,56631,1719],{"class":82},[72,56633,56634,56636,56638,56640,56642],{"class":74,"line":8374},[72,56635,55256],{"class":362},[72,56637,51855],{"class":82},[72,56639,1254],{"class":362},[72,56641,51910],{"class":78},[72,56643,1719],{"class":82},[72,56645,56646,56648,56650,56652,56654],{"class":74,"line":8398},[72,56647,55365],{"class":362},[72,56649,51855],{"class":82},[72,56651,873],{"class":362},[72,56653,51910],{"class":78},[72,56655,1719],{"class":82},[72,56657,56658],{"class":74,"line":8403},[72,56659,2615],{"class":82},[72,56661,56662],{"class":74,"line":8409},[72,56663,2828],{"emptyLinePlaceholder":490},[72,56665,56666,56668],{"class":74,"line":8436},[72,56667,55386],{"class":51718},[72,56669,15998],{"class":82},[72,56671,56672,56674,56676,56678],{"class":74,"line":8441},[72,56673,55177],{"class":362},[72,56675,51855],{"class":82},[72,56677,55249],{"class":362},[72,56679,1719],{"class":82},[72,56681,56682,56684,56686,56688,56690],{"class":74,"line":8447},[72,56683,55365],{"class":362},[72,56685,51855],{"class":82},[72,56687,1335],{"class":362},[72,56689,51910],{"class":78},[72,56691,1719],{"class":82},[72,56693,56694,56696,56698,56700,56702],{"class":74,"line":8459},[72,56695,55256],{"class":362},[72,56697,51855],{"class":82},[72,56699,1254],{"class":362},[72,56701,51910],{"class":78},[72,56703,1719],{"class":82},[72,56705,56706,56708,56710,56712],{"class":74,"line":8471},[72,56707,55427],{"class":362},[72,56709,51855],{"class":82},[72,56711,51895],{"class":362},[72,56713,1719],{"class":82},[72,56715,56716,56718,56720,56722],{"class":74,"line":8483},[72,56717,55438],{"class":362},[72,56719,51855],{"class":82},[72,56721,52086],{"class":362},[72,56723,1719],{"class":82},[72,56725,56726,56728,56730,56732],{"class":74,"line":10142},[72,56727,55177],{"class":362},[72,56729,51855],{"class":82},[72,56731,55249],{"class":362},[72,56733,1719],{"class":82},[72,56735,56736,56738,56740,56742,56744],{"class":74,"line":10167},[72,56737,55189],{"class":362},[72,56739,51855],{"class":82},[72,56741,4420],{"class":362},[72,56743,51910],{"class":78},[72,56745,1719],{"class":82},[72,56747,56748,56750,56752,56754,56756],{"class":74,"line":10190},[72,56749,55203],{"class":362},[72,56751,51855],{"class":82},[72,56753,1254],{"class":362},[72,56755,51910],{"class":78},[72,56757,1719],{"class":82},[72,56759,56760],{"class":74,"line":10214},[72,56761,2615],{"class":82},[72,56763,56764],{"class":74,"line":10219},[72,56765,2828],{"emptyLinePlaceholder":490},[72,56767,56768,56770,56772],{"class":74,"line":10224},[72,56769,55386],{"class":51718},[72,56771,55493],{"class":51718},[72,56773,15998],{"class":82},[72,56775,56776,56778,56780,56782,56784],{"class":74,"line":10229},[72,56777,55189],{"class":362},[72,56779,51855],{"class":82},[72,56781,1254],{"class":362},[72,56783,51910],{"class":78},[72,56785,1719],{"class":82},[72,56787,56788,56790,56792,56794,56796],{"class":74,"line":10238},[72,56789,55203],{"class":362},[72,56791,51855],{"class":82},[72,56793,1254],{"class":362},[72,56795,51910],{"class":78},[72,56797,1719],{"class":82},[72,56799,56800,56802,56804,56806,56808,56810,56812,56814,56816,56818,56820,56822],{"class":74,"line":10243},[72,56801,55302],{"class":362},[72,56803,51855],{"class":82},[72,56805,55528],{"class":362},[72,56807,564],{"class":82},[72,56809,747],{"class":362},[72,56811,12861],{"class":82},[72,56813,747],{"class":362},[72,56815,12861],{"class":82},[72,56817,747],{"class":362},[72,56819,12861],{"class":82},[72,56821,55545],{"class":362},[72,56823,3147],{"class":82},[72,56825,56826,56828,56830,56832,56834],{"class":74,"line":10249},[72,56827,55552],{"class":362},[72,56829,51855],{"class":82},[72,56831,1000],{"class":362},[72,56833,51910],{"class":78},[72,56835,1719],{"class":82},[72,56837,56838],{"class":74,"line":10270},[72,56839,2615],{"class":82},[72,56841,56842],{"class":74,"line":10276},[72,56843,2828],{"emptyLinePlaceholder":490},[72,56845,56846,56848],{"class":74,"line":10290},[72,56847,55573],{"class":358},[72,56849,15998],{"class":82},[72,56851,56852,56854,56856,56858],{"class":74,"line":10296},[72,56853,55302],{"class":362},[72,56855,51855],{"class":82},[72,56857,55584],{"class":362},[72,56859,1719],{"class":82},[72,56861,56862],{"class":74,"line":10323},[72,56863,2615],{"class":82},[72,56865,56866,56868,56870],{"class":74,"line":10332},[72,56867,52835],{"class":82},[72,56869,473],{"class":51718},[72,56871,51725],{"class":82},[72,56873,56874,56876,56878],{"class":74,"line":10338},[72,56875,52203],{"class":82},[72,56877,51752],{"class":51718},[72,56879,51725],{"class":82},[72,56881,56882],{"class":74,"line":10346},[72,56883,2828],{"emptyLinePlaceholder":490},[72,56885,56886,56888,56890],{"class":74,"line":10351},[72,56887,1464],{"class":82},[72,56889,52218],{"class":51718},[72,56891,51725],{"class":82},[72,56893,56894,56896,56898,56900,56902,56904],{"class":74,"line":17030},[72,56895,52562],{"class":82},[72,56897,52029],{"class":51718},[72,56899,53904],{"class":358},[72,56901,609],{"class":82},[72,56903,53909],{"class":366},[72,56905,51725],{"class":82},[72,56907,56908,56910,56912,56914,56916,56918],{"class":74,"line":17036},[72,56909,51759],{"class":82},[72,56911,52029],{"class":51718},[72,56913,53904],{"class":358},[72,56915,609],{"class":82},[72,56917,55645],{"class":366},[72,56919,51725],{"class":82},[72,56921,56922,56924,56926,56928,56930,56932,56934,56936,56938],{"class":74,"line":17059},[72,56923,55652],{"class":82},[72,56925,1891],{"class":51718},[72,56927,55657],{"class":358},[72,56929,609],{"class":82},[72,56931,55662],{"class":366},[72,56933,55665],{"class":358},[72,56935,609],{"class":82},[72,56937,8078],{"class":366},[72,56939,51725],{"class":82},[72,56941,56942,56944,56946],{"class":74,"line":17065},[72,56943,52194],{"class":82},[72,56945,52029],{"class":51718},[72,56947,51725],{"class":82},[72,56949,56950,56952,56954,56956,56958,56960],{"class":74,"line":17088},[72,56951,51759],{"class":82},[72,56953,52029],{"class":51718},[72,56955,53904],{"class":358},[72,56957,609],{"class":82},[72,56959,55692],{"class":366},[72,56961,51725],{"class":82},[72,56963,56964,56966,56968,56970,56972],{"class":74,"line":17102},[72,56965,55652],{"class":82},[72,56967,15],{"class":51718},[72,56969,55703],{"class":82},[72,56971,15],{"class":51718},[72,56973,51725],{"class":82},[72,56975,56976,56978,56980],{"class":74,"line":17122},[72,56977,55652],{"class":82},[72,56979,251],{"class":51718},[72,56981,51725],{"class":82},[72,56983,56984,56986,56988,56990,56992,56994,56996,56998],{"class":74,"line":17128},[72,56985,55720],{"class":82},[72,56987,25],{"class":51718},[72,56989,53904],{"class":358},[72,56991,609],{"class":82},[72,56993,55729],{"class":366},[72,56995,55732],{"class":82},[72,56997,25],{"class":51718},[72,56999,51725],{"class":82},[72,57001,57002,57004,57006,57008,57010],{"class":74,"line":17139},[72,57003,55720],{"class":82},[72,57005,25],{"class":51718},[72,57007,55732],{"class":82},[72,57009,25],{"class":51718},[72,57011,51725],{"class":82},[72,57013,57014,57016,57018,57020,57022],{"class":74,"line":17162},[72,57015,55720],{"class":82},[72,57017,25],{"class":51718},[72,57019,55732],{"class":82},[72,57021,25],{"class":51718},[72,57023,51725],{"class":82},[72,57025,57026,57028,57030,57032,57034],{"class":74,"line":17184},[72,57027,55720],{"class":82},[72,57029,25],{"class":51718},[72,57031,55732],{"class":82},[72,57033,25],{"class":51718},[72,57035,51725],{"class":82},[72,57037,57038,57040,57042,57044,57046],{"class":74,"line":17189},[72,57039,55720],{"class":82},[72,57041,25],{"class":51718},[72,57043,55732],{"class":82},[72,57045,25],{"class":51718},[72,57047,51725],{"class":82},[72,57049,57050,57052,57054,57056,57058],{"class":74,"line":17195},[72,57051,55720],{"class":82},[72,57053,25],{"class":51718},[72,57055,55732],{"class":82},[72,57057,25],{"class":51718},[72,57059,51725],{"class":82},[72,57061,57062,57064,57066,57068,57070],{"class":74,"line":17209},[72,57063,55720],{"class":82},[72,57065,25],{"class":51718},[72,57067,55732],{"class":82},[72,57069,25],{"class":51718},[72,57071,51725],{"class":82},[72,57073,57074,57076,57078,57080,57082],{"class":74,"line":17222},[72,57075,55720],{"class":82},[72,57077,25],{"class":51718},[72,57079,55732],{"class":82},[72,57081,25],{"class":51718},[72,57083,51725],{"class":82},[72,57085,57086,57088,57090],{"class":74,"line":17227},[72,57087,55825],{"class":82},[72,57089,251],{"class":51718},[72,57091,51725],{"class":82},[72,57093,57094,57096,57098],{"class":74,"line":17241},[72,57095,52194],{"class":82},[72,57097,52029],{"class":51718},[72,57099,51725],{"class":82},[72,57101,57102,57104,57106],{"class":74,"line":17246},[72,57103,52835],{"class":82},[72,57105,52029],{"class":51718},[72,57107,51725],{"class":82},[72,57109,57110,57112,57114],{"class":74,"line":17252},[72,57111,52562],{"class":82},[72,57113,52231],{"class":51718},[72,57115,51725],{"class":82},[72,57117,57118,57120,57123,57125],{"class":74,"line":17257},[72,57119,11647],{"class":78},[72,57121,57122],{"class":362}," sliderData",[72,57124,13990],{"class":78},[72,57126,55865],{"class":82},[72,57128,57129,57131,57133,57135,57137,57139,57141],{"class":74,"line":17271},[72,57130,55870],{"class":82},[72,57132,55873],{"class":366},[72,57134,55876],{"class":82},[72,57136,55879],{"class":366},[72,57138,55882],{"class":82},[72,57140,55885],{"class":366},[72,57142,55888],{"class":82},[72,57144,57145,57147,57149,57151,57153,57155,57157],{"class":74,"line":17276},[72,57146,55870],{"class":82},[72,57148,55895],{"class":366},[72,57150,55876],{"class":82},[72,57152,55900],{"class":366},[72,57154,55882],{"class":82},[72,57156,55905],{"class":366},[72,57158,55888],{"class":82},[72,57160,57161,57163,57165,57167,57169,57171,57173],{"class":74,"line":17281},[72,57162,55870],{"class":82},[72,57164,55914],{"class":366},[72,57166,55876],{"class":82},[72,57168,55919],{"class":366},[72,57170,55882],{"class":82},[72,57172,55924],{"class":366},[72,57174,55888],{"class":82},[72,57176,57177,57179,57181,57183,57185,57187,57189],{"class":74,"line":17295},[72,57178,55870],{"class":82},[72,57180,55933],{"class":366},[72,57182,55876],{"class":82},[72,57184,55938],{"class":366},[72,57186,55882],{"class":82},[72,57188,55943],{"class":366},[72,57190,55888],{"class":82},[72,57192,57193,57195,57197,57199,57201,57203,57205],{"class":74,"line":17307},[72,57194,55870],{"class":82},[72,57196,55952],{"class":366},[72,57198,55876],{"class":82},[72,57200,55957],{"class":366},[72,57202,55882],{"class":82},[72,57204,55962],{"class":366},[72,57206,55888],{"class":82},[72,57208,57209,57211,57213,57215,57217,57219,57221],{"class":74,"line":17312},[72,57210,55870],{"class":82},[72,57212,55971],{"class":366},[72,57214,55876],{"class":82},[72,57216,55976],{"class":366},[72,57218,55882],{"class":82},[72,57220,55981],{"class":366},[72,57222,55888],{"class":82},[72,57224,57225,57227,57229,57231,57233,57235,57237],{"class":74,"line":17325},[72,57226,55870],{"class":82},[72,57228,55990],{"class":366},[72,57230,55876],{"class":82},[72,57232,55995],{"class":366},[72,57234,55882],{"class":82},[72,57236,56000],{"class":366},[72,57238,55888],{"class":82},[72,57240,57241,57243,57245,57247,57249,57251,57253],{"class":74,"line":17330},[72,57242,55870],{"class":82},[72,57244,56009],{"class":366},[72,57246,55876],{"class":82},[72,57248,56014],{"class":366},[72,57250,55882],{"class":82},[72,57252,56019],{"class":366},[72,57254,56022],{"class":82},[72,57256,57257],{"class":74,"line":17335},[72,57258,53527],{"class":82},[72,57260,57261],{"class":74,"line":17340},[72,57262,57263],{"class":621},"    \u002F\u002F 1.获取元素\n",[72,57265,57266,57268,57270,57272,57274,57276,57278,57280],{"class":74,"line":17353},[72,57267,11647],{"class":78},[72,57269,56033],{"class":362},[72,57271,13990],{"class":78},[72,57273,54814],{"class":82},[72,57275,54817],{"class":358},[72,57277,564],{"class":82},[72,57279,56044],{"class":366},[72,57281,570],{"class":82},[72,57283,57284,57286,57288,57290,57292,57294,57296,57298],{"class":74,"line":17358},[72,57285,11647],{"class":78},[72,57287,7251],{"class":362},[72,57289,13990],{"class":78},[72,57291,54814],{"class":82},[72,57293,54817],{"class":358},[72,57295,564],{"class":82},[72,57297,56063],{"class":366},[72,57299,570],{"class":82},[72,57301,57302,57304,57306,57308],{"class":74,"line":33051},[72,57303,52637],{"class":78},[72,57305,9864],{"class":82},[72,57307,609],{"class":78},[72,57309,47751],{"class":362},[72,57311,57312],{"class":74,"line":33057},[72,57313,57314],{"class":621},"    \u002F\u002F 2.开启定时器\n",[72,57316,57317],{"class":74,"line":33063},[72,57318,57319],{"class":621},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[72,57321,57322,57325,57327,57329],{"class":74,"line":33069},[72,57323,57324],{"class":358},"    setInterval",[72,57326,564],{"class":82},[72,57328,54867],{"class":78},[72,57330,54870],{"class":82},[72,57332,57333,57335],{"class":74,"line":33075},[72,57334,54875],{"class":82},[72,57336,3130],{"class":78},[72,57338,57339,57341,57343,57345,57348,57350],{"class":74,"line":33086},[72,57340,54898],{"class":78},[72,57342,54901],{"class":82},[72,57344,2139],{"class":78},[72,57346,57347],{"class":82}," sliderData.",[72,57349,52386],{"class":362},[72,57351,12868],{"class":82},[72,57353,57354,57357,57359],{"class":74,"line":33092},[72,57355,57356],{"class":82},"        i ",[72,57358,609],{"class":78},[72,57360,47751],{"class":362},[72,57362,57363],{"class":74,"line":33112},[72,57364,52816],{"class":82},[72,57366,57367],{"class":74,"line":33118},[72,57368,57369],{"class":621},"      \u002F\u002F 更换图片路径\n",[72,57371,57372,57374,57376],{"class":74,"line":33129},[72,57373,56139],{"class":82},[72,57375,609],{"class":78},[72,57377,57378],{"class":82}," sliderData[i].url\n",[72,57380,57381],{"class":74,"line":33135},[72,57382,57383],{"class":621},"      \u002F\u002F 把文字写到p里面\n",[72,57385,57386,57388,57390],{"class":74,"line":33141},[72,57387,56149],{"class":82},[72,57389,609],{"class":78},[72,57391,57392],{"class":82}," sliderData[i].title\n",[72,57394,57395],{"class":74,"line":33147},[72,57396,57397],{"class":621},"      \u002F\u002F 小圆点\n",[72,57399,57400],{"class":74,"line":33153},[72,57401,57402],{"class":621},"      \u002F\u002F 先删除以前的active\n",[72,57404,57405],{"class":74,"line":33159},[72,57406,57407],{"class":621},"      \u002F\u002F 只让当前li添加active\n",[72,57409,57410,57412,57414,57416,57419,57422,57425,57427,57429],{"class":74,"line":33165},[72,57411,56189],{"class":82},[72,57413,54817],{"class":358},[72,57415,564],{"class":82},[72,57417,57418],{"class":366},"'.slider-footer .activate'",[72,57420,57421],{"class":82},").classList.",[72,57423,57424],{"class":358},"remove",[72,57426,564],{"class":82},[72,57428,56207],{"class":366},[72,57430,570],{"class":82},[72,57432,57433,57435,57437,57439,57442,57444,57446,57448,57451,57453,57455,57457,57459],{"class":74,"line":33171},[72,57434,56189],{"class":82},[72,57436,54817],{"class":358},[72,57438,564],{"class":82},[72,57440,57441],{"class":366},"`.slider-footer ul li:nth-child(${",[72,57443,995],{"class":82},[72,57445,45984],{"class":78},[72,57447,25540],{"class":362},[72,57449,57450],{"class":366},"})`",[72,57452,57421],{"class":82},[72,57454,5760],{"class":358},[72,57456,564],{"class":82},[72,57458,56207],{"class":366},[72,57460,570],{"class":82},[72,57462,57463],{"class":74,"line":33191},[72,57464,2828],{"emptyLinePlaceholder":490},[72,57466,57467,57469,57471],{"class":74,"line":33197},[72,57468,54953],{"class":82},[72,57470,6836],{"class":362},[72,57472,570],{"class":82},[72,57474,57475],{"class":74,"line":33213},[72,57476,2828],{"emptyLinePlaceholder":490},[72,57478,57479,57481,57483],{"class":74,"line":33219},[72,57480,52835],{"class":82},[72,57482,52231],{"class":51718},[72,57484,51725],{"class":82},[72,57486,57487,57489,57491],{"class":74,"line":33233},[72,57488,52203],{"class":82},[72,57490,52218],{"class":51718},[72,57492,51725],{"class":82},[72,57494,57495],{"class":74,"line":33239},[72,57496,2828],{"emptyLinePlaceholder":490},[72,57498,57499,57501,57503],{"class":74,"line":33254},[72,57500,52203],{"class":82},[72,57502,51053],{"class":51718},[72,57504,51725],{"class":82},[531,57506,57508],{"id":57507},"_317-重要知识点","3.1.7 重要知识点",[15,57510,57511,57512],{},"浏览器在渲染文本时， ",[707,57513,57514],{},"没有空格或换行符就没有“断行点”",[15,57516,57517],{},[1891,57518],{"alt":68,"src":57519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[15,57521,57522],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[15,57524,57525],{},[1891,57526],{"alt":68,"src":57527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[15,57529,57530],{},[1891,57531],{"alt":68,"src":57532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[85,57534,57536],{"id":57535},"_32-dom事件基础","3.2 DOM事件基础",[531,57538,57540],{"id":57539},"_321-事件监听","3.2.1 事件监听",[15,57542,57543],{},[1891,57544],{"alt":68,"src":57545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[15,57547,57548],{},"事件监听有响应的发生",[15,57550,57551],{},[1891,57552],{"alt":68,"src":57553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[15,57555,57556],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[15,57558,57559],{},"对于有名函数,要执行的函数名后边不要加()",[531,57561,57563],{"id":57562},"_322-随机点名案例","3.2.2 随机点名案例",[63,57565,57567],{"className":51051,"code":57566,"language":51053,"meta":68,"style":68},"\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",[34,57568,57569,57579,57593,57597,57605,57619,57639,57651,57659,57665,57675,57685,57689,57693,57700,57711,57715,57719,57725,57737,57751,57761,57773,57786,57790,57794,57801,57805,57818,57830,57842,57846,57850,57854,57861,57871,57875,57879,57888,57900,57912,57927,57931,57939,57947,57951,57959,57972,57986,57999,58019,58027,58042,58062,58082,58090,58094,58102,58107,58143,58163,58168,58187,58192,58203,58208,58219,58224,58243,58258,58263,58289,58299,58308,58313,58329,58334,58339,58344,58359,58363,58367,58372,58391,58408,58416,58421,58436,58440,58444,58452,58460,58464],{"__ignoreMap":68},[72,57570,57571,57573,57575,57577],{"class":74,"line":75},[72,57572,51715],{"class":82},[72,57574,51719],{"class":51718},[72,57576,51722],{"class":358},[72,57578,51725],{"class":82},[72,57580,57581,57583,57585,57587,57589,57591],{"class":74,"line":370},[72,57582,1464],{"class":82},[72,57584,51053],{"class":51718},[72,57586,51734],{"class":358},[72,57588,609],{"class":82},[72,57590,51739],{"class":366},[72,57592,51725],{"class":82},[72,57594,57595],{"class":74,"line":1608},[72,57596,2828],{"emptyLinePlaceholder":490},[72,57598,57599,57601,57603],{"class":74,"line":1623},[72,57600,1464],{"class":82},[72,57602,51752],{"class":51718},[72,57604,51725],{"class":82},[72,57606,57607,57609,57611,57613,57615,57617],{"class":74,"line":1629},[72,57608,52562],{"class":82},[72,57610,51762],{"class":51718},[72,57612,51765],{"class":358},[72,57614,609],{"class":82},[72,57616,51770],{"class":366},[72,57618,51725],{"class":82},[72,57620,57621,57623,57625,57627,57629,57631,57633,57635,57637],{"class":74,"line":1643},[72,57622,52562],{"class":82},[72,57624,51762],{"class":51718},[72,57626,15346],{"class":358},[72,57628,609],{"class":82},[72,57630,51809],{"class":366},[72,57632,51789],{"class":358},[72,57634,609],{"class":82},[72,57636,51816],{"class":366},[72,57638,51725],{"class":82},[72,57640,57641,57643,57645,57647,57649],{"class":74,"line":1649},[72,57642,52562],{"class":82},[72,57644,51825],{"class":51718},[72,57646,51828],{"class":82},[72,57648,51825],{"class":51718},[72,57650,51725],{"class":82},[72,57652,57653,57655,57657],{"class":74,"line":1740},[72,57654,52562],{"class":82},[72,57656,473],{"class":51718},[72,57658,51725],{"class":82},[72,57660,57661,57663],{"class":74,"line":1746},[72,57662,6829],{"class":51718},[72,57664,15998],{"class":82},[72,57666,57667,57669,57671,57673],{"class":74,"line":1758},[72,57668,55124],{"class":362},[72,57670,51855],{"class":82},[72,57672,747],{"class":362},[72,57674,1719],{"class":82},[72,57676,57677,57679,57681,57683],{"class":74,"line":2041},[72,57678,55113],{"class":362},[72,57680,51855],{"class":82},[72,57682,747],{"class":362},[72,57684,1719],{"class":82},[72,57686,57687],{"class":74,"line":2046},[72,57688,2615],{"class":82},[72,57690,57691],{"class":74,"line":2052},[72,57692,2828],{"emptyLinePlaceholder":490},[72,57694,57695,57698],{"class":74,"line":2057},[72,57696,57697],{"class":51718},"    h2",[72,57699,15998],{"class":82},[72,57701,57702,57705,57707,57709],{"class":74,"line":2071},[72,57703,57704],{"class":362},"      text-align",[72,57706,51855],{"class":82},[72,57708,52010],{"class":362},[72,57710,1719],{"class":82},[72,57712,57713],{"class":74,"line":2076},[72,57714,2615],{"class":82},[72,57716,57717],{"class":74,"line":2082},[72,57718,2828],{"emptyLinePlaceholder":490},[72,57720,57721,57723],{"class":74,"line":2103},[72,57722,55170],{"class":358},[72,57724,15998],{"class":82},[72,57726,57727,57729,57731,57733,57735],{"class":74,"line":2108},[72,57728,55189],{"class":362},[72,57730,51855],{"class":82},[72,57732,1968],{"class":362},[72,57734,51910],{"class":78},[72,57736,1719],{"class":82},[72,57738,57739,57741,57743,57745,57747,57749],{"class":74,"line":2122},[72,57740,55124],{"class":362},[72,57742,51855],{"class":82},[72,57744,1210],{"class":362},[72,57746,51910],{"class":78},[72,57748,51974],{"class":362},[72,57750,1719],{"class":82},[72,57752,57753,57755,57757,57759],{"class":74,"line":2127},[72,57754,55427],{"class":362},[72,57756,51855],{"class":82},[72,57758,51895],{"class":362},[72,57760,1719],{"class":82},[72,57762,57763,57765,57767,57769,57771],{"class":74,"line":2156},[72,57764,55340],{"class":362},[72,57766,51855],{"class":82},[72,57768,1379],{"class":362},[72,57770,51910],{"class":78},[72,57772,1719],{"class":82},[72,57774,57775,57778,57780,57782,57784],{"class":74,"line":2161},[72,57776,57777],{"class":362},"      line-height",[72,57779,51855],{"class":82},[72,57781,955],{"class":362},[72,57783,51910],{"class":78},[72,57785,1719],{"class":82},[72,57787,57788],{"class":74,"line":2178},[72,57789,2615],{"class":82},[72,57791,57792],{"class":74,"line":2183},[72,57793,2828],{"emptyLinePlaceholder":490},[72,57795,57796,57799],{"class":74,"line":2188},[72,57797,57798],{"class":358},"    .qs",[72,57800,15998],{"class":82},[72,57802,57803],{"class":74,"line":2193},[72,57804,2828],{"emptyLinePlaceholder":490},[72,57806,57807,57809,57811,57814,57816],{"class":74,"line":2207},[72,57808,55189],{"class":362},[72,57810,51855],{"class":82},[72,57812,57813],{"class":362},"450",[72,57815,51910],{"class":78},[72,57817,1719],{"class":82},[72,57819,57820,57822,57824,57826,57828],{"class":74,"line":2212},[72,57821,55203],{"class":362},[72,57823,51855],{"class":82},[72,57825,955],{"class":362},[72,57827,51910],{"class":78},[72,57829,1719],{"class":82},[72,57831,57832,57835,57837,57840],{"class":74,"line":3005},[72,57833,57834],{"class":362},"      color",[72,57836,51855],{"class":82},[72,57838,57839],{"class":362},"red",[72,57841,1719],{"class":82},[72,57843,57844],{"class":74,"line":3019},[72,57845,2828],{"emptyLinePlaceholder":490},[72,57847,57848],{"class":74,"line":3027},[72,57849,2615],{"class":82},[72,57851,57852],{"class":74,"line":3032},[72,57853,2828],{"emptyLinePlaceholder":490},[72,57855,57856,57859],{"class":74,"line":3038},[72,57857,57858],{"class":358},"    .btns",[72,57860,15998],{"class":82},[72,57862,57863,57865,57867,57869],{"class":74,"line":3044},[72,57864,57704],{"class":362},[72,57866,51855],{"class":82},[72,57868,52010],{"class":362},[72,57870,1719],{"class":82},[72,57872,57873],{"class":74,"line":3049},[72,57874,2615],{"class":82},[72,57876,57877],{"class":74,"line":8374},[72,57878,2828],{"emptyLinePlaceholder":490},[72,57880,57881,57883,57886],{"class":74,"line":8398},[72,57882,57858],{"class":358},[72,57884,57885],{"class":51718}," button",[72,57887,15998],{"class":82},[72,57889,57890,57892,57894,57896,57898],{"class":74,"line":8403},[72,57891,55189],{"class":362},[72,57893,51855],{"class":82},[72,57895,1371],{"class":362},[72,57897,51910],{"class":78},[72,57899,1719],{"class":82},[72,57901,57902,57904,57906,57908,57910],{"class":74,"line":8409},[72,57903,55203],{"class":362},[72,57905,51855],{"class":82},[72,57907,827],{"class":362},[72,57909,51910],{"class":78},[72,57911,1719],{"class":82},[72,57913,57914,57916,57918,57920,57923,57925],{"class":74,"line":8436},[72,57915,55124],{"class":362},[72,57917,51855],{"class":82},[72,57919,747],{"class":362},[72,57921,57922],{"class":362}," 50",[72,57924,51910],{"class":78},[72,57926,1719],{"class":82},[72,57928,57929],{"class":74,"line":8441},[72,57930,2615],{"class":82},[72,57932,57933,57935,57937],{"class":74,"line":8447},[72,57934,52835],{"class":82},[72,57936,473],{"class":51718},[72,57938,51725],{"class":82},[72,57940,57941,57943,57945],{"class":74,"line":8459},[72,57942,52203],{"class":82},[72,57944,51752],{"class":51718},[72,57946,51725],{"class":82},[72,57948,57949],{"class":74,"line":8471},[72,57950,2828],{"emptyLinePlaceholder":490},[72,57952,57953,57955,57957],{"class":74,"line":8483},[72,57954,1464],{"class":82},[72,57956,52218],{"class":51718},[72,57958,51725],{"class":82},[72,57960,57961,57963,57965,57968,57970],{"class":74,"line":10142},[72,57962,52562],{"class":82},[72,57964,85],{"class":51718},[72,57966,57967],{"class":82},">随机点名\u003C\u002F",[72,57969,85],{"class":51718},[72,57971,51725],{"class":82},[72,57973,57974,57976,57978,57980,57982,57984],{"class":74,"line":10167},[72,57975,52562],{"class":82},[72,57977,52029],{"class":51718},[72,57979,53904],{"class":358},[72,57981,609],{"class":82},[72,57983,53909],{"class":366},[72,57985,51725],{"class":82},[72,57987,57988,57990,57992,57995,57997],{"class":74,"line":10190},[72,57989,51759],{"class":82},[72,57991,72],{"class":51718},[72,57993,57994],{"class":82},">名字是：\u003C\u002F",[72,57996,72],{"class":51718},[72,57998,51725],{"class":82},[72,58000,58001,58003,58005,58007,58009,58012,58015,58017],{"class":74,"line":10214},[72,58002,51759],{"class":82},[72,58004,52029],{"class":51718},[72,58006,53904],{"class":358},[72,58008,609],{"class":82},[72,58010,58011],{"class":366},"\"qs\"",[72,58013,58014],{"class":82},">这里显示姓名\u003C\u002F",[72,58016,52029],{"class":51718},[72,58018,51725],{"class":82},[72,58020,58021,58023,58025],{"class":74,"line":10219},[72,58022,52835],{"class":82},[72,58024,52029],{"class":51718},[72,58026,51725],{"class":82},[72,58028,58029,58031,58033,58035,58037,58040],{"class":74,"line":10224},[72,58030,52562],{"class":82},[72,58032,52029],{"class":51718},[72,58034,53904],{"class":358},[72,58036,609],{"class":82},[72,58038,58039],{"class":366},"\"btns\"",[72,58041,51725],{"class":82},[72,58043,58044,58046,58048,58050,58052,58055,58058,58060],{"class":74,"line":10229},[72,58045,51759],{"class":82},[72,58047,54305],{"class":51718},[72,58049,53904],{"class":358},[72,58051,609],{"class":82},[72,58053,58054],{"class":366},"\"start\"",[72,58056,58057],{"class":82},">开始\u003C\u002F",[72,58059,54305],{"class":51718},[72,58061,51725],{"class":82},[72,58063,58064,58066,58068,58070,58072,58075,58078,58080],{"class":74,"line":10238},[72,58065,51759],{"class":82},[72,58067,54305],{"class":51718},[72,58069,53904],{"class":358},[72,58071,609],{"class":82},[72,58073,58074],{"class":366},"\"end\"",[72,58076,58077],{"class":82},">结束\u003C\u002F",[72,58079,54305],{"class":51718},[72,58081,51725],{"class":82},[72,58083,58084,58086,58088],{"class":74,"line":10243},[72,58085,52835],{"class":82},[72,58087,52029],{"class":51718},[72,58089,51725],{"class":82},[72,58091,58092],{"class":74,"line":10249},[72,58093,2828],{"emptyLinePlaceholder":490},[72,58095,58096,58098,58100],{"class":74,"line":10270},[72,58097,52562],{"class":82},[72,58099,52231],{"class":51718},[72,58101,51725],{"class":82},[72,58103,58104],{"class":74,"line":10276},[72,58105,58106],{"class":621},"    \u002F\u002F 数据数组\n",[72,58108,58109,58111,58114,58116,58118,58121,58123,58126,58128,58131,58133,58136,58138,58141],{"class":74,"line":10290},[72,58110,11647],{"class":78},[72,58112,58113],{"class":362}," arr",[72,58115,13990],{"class":78},[72,58117,52644],{"class":82},[72,58119,58120],{"class":366},"'马超'",[72,58122,12861],{"class":82},[72,58124,58125],{"class":366},"'黄忠'",[72,58127,12861],{"class":82},[72,58129,58130],{"class":366},"'赵云'",[72,58132,12861],{"class":82},[72,58134,58135],{"class":366},"'关羽'",[72,58137,12861],{"class":82},[72,58139,58140],{"class":366},"'张飞'",[72,58142,33664],{"class":82},[72,58144,58145,58147,58150,58152,58154,58156,58158,58161],{"class":74,"line":10296},[72,58146,11647],{"class":78},[72,58148,58149],{"class":362}," qs",[72,58151,13990],{"class":78},[72,58153,54814],{"class":82},[72,58155,54817],{"class":358},[72,58157,564],{"class":82},[72,58159,58160],{"class":366},"'.qs'",[72,58162,570],{"class":82},[72,58164,58165],{"class":74,"line":10323},[72,58166,58167],{"class":621},"    \u002F\u002F 1.业务1.开始按钮模块\n",[72,58169,58170,58172,58174,58176,58178,58180,58182,58185],{"class":74,"line":10332},[72,58171,11647],{"class":78},[72,58173,4612],{"class":362},[72,58175,13990],{"class":78},[72,58177,54814],{"class":82},[72,58179,54817],{"class":358},[72,58181,564],{"class":82},[72,58183,58184],{"class":366},"'.start'",[72,58186,570],{"class":82},[72,58188,58189],{"class":74,"line":10338},[72,58190,58191],{"class":621},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[72,58193,58194,58196,58199,58201],{"class":74,"line":10346},[72,58195,52637],{"class":78},[72,58197,58198],{"class":82}," timerId ",[72,58200,609],{"class":78},[72,58202,47751],{"class":362},[72,58204,58205],{"class":74,"line":10351},[72,58206,58207],{"class":621},"    \u002F\u002F 随机号要全局变量\n",[72,58209,58210,58212,58215,58217],{"class":74,"line":17030},[72,58211,52637],{"class":78},[72,58213,58214],{"class":82}," random ",[72,58216,609],{"class":78},[72,58218,47751],{"class":362},[72,58220,58221],{"class":74,"line":17036},[72,58222,58223],{"class":621},"    \u002F\u002F 1.1 添加点击事件\n",[72,58225,58226,58229,58232,58234,58237,58239,58241],{"class":74,"line":17059},[72,58227,58228],{"class":82},"    start.",[72,58230,58231],{"class":358},"addEventListener",[72,58233,564],{"class":82},[72,58235,58236],{"class":366},"'click'",[72,58238,12861],{"class":82},[72,58240,54867],{"class":78},[72,58242,54870],{"class":82},[72,58244,58245,58248,58250,58252,58254,58256],{"class":74,"line":17065},[72,58246,58247],{"class":82},"      timerId ",[72,58249,609],{"class":78},[72,58251,54862],{"class":358},[72,58253,564],{"class":82},[72,58255,54867],{"class":78},[72,58257,54870],{"class":82},[72,58259,58260],{"class":74,"line":17088},[72,58261,58262],{"class":621},"        \u002F\u002F 随机数\n",[72,58264,58265,58268,58270,58273,58276,58279,58281,58283,58285,58287],{"class":74,"line":17102},[72,58266,58267],{"class":82},"        random ",[72,58269,609],{"class":78},[72,58271,58272],{"class":358}," parseInt",[72,58274,58275],{"class":82},"(Math.",[72,58277,58278],{"class":358},"random",[72,58280,13476],{"class":82},[72,58282,1009],{"class":78},[72,58284,52383],{"class":82},[72,58286,52386],{"class":362},[72,58288,570],{"class":82},[72,58290,58291,58294,58296],{"class":74,"line":17122},[72,58292,58293],{"class":82},"        qs.innerHTML ",[72,58295,609],{"class":78},[72,58297,58298],{"class":82}," arr[random]\n",[72,58300,58301,58304,58306],{"class":74,"line":17128},[72,58302,58303],{"class":82},"      }, ",[72,58305,827],{"class":362},[72,58307,570],{"class":82},[72,58309,58310],{"class":74,"line":17139},[72,58311,58312],{"class":621},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[72,58314,58315,58317,58320,58322,58325,58327],{"class":74,"line":17162},[72,58316,54898],{"class":78},[72,58318,58319],{"class":82}," (arr.",[72,58321,52386],{"class":362},[72,58323,58324],{"class":78}," ===",[72,58326,25540],{"class":362},[72,58328,12868],{"class":82},[72,58330,58331],{"class":74,"line":17184},[72,58332,58333],{"class":621},"        \u002F\u002F start.disabled = true\n",[72,58335,58336],{"class":74,"line":17189},[72,58337,58338],{"class":621},"        \u002F\u002F end.disabled = true\n",[72,58340,58341],{"class":74,"line":17195},[72,58342,58343],{"class":621},"        \u002F\u002F 可以合起来写\n",[72,58345,58346,58349,58351,58354,58356],{"class":74,"line":17209},[72,58347,58348],{"class":82},"        start.disabled ",[72,58350,609],{"class":78},[72,58352,58353],{"class":82}," end.disabled ",[72,58355,609],{"class":78},[72,58357,58358],{"class":362}," true\n",[72,58360,58361],{"class":74,"line":17222},[72,58362,52816],{"class":82},[72,58364,58365],{"class":74,"line":17227},[72,58366,33879],{"class":82},[72,58368,58369],{"class":74,"line":17241},[72,58370,58371],{"class":621},"    \u002F\u002F 1.2 关闭按钮模块\n",[72,58373,58374,58376,58378,58380,58382,58384,58386,58389],{"class":74,"line":17246},[72,58375,11647],{"class":78},[72,58377,4628],{"class":362},[72,58379,13990],{"class":78},[72,58381,54814],{"class":82},[72,58383,54817],{"class":358},[72,58385,564],{"class":82},[72,58387,58388],{"class":366},"'.end'",[72,58390,570],{"class":82},[72,58392,58393,58396,58398,58400,58402,58404,58406],{"class":74,"line":17252},[72,58394,58395],{"class":82},"    end.",[72,58397,58231],{"class":358},[72,58399,564],{"class":82},[72,58401,58236],{"class":366},[72,58403,12861],{"class":82},[72,58405,54867],{"class":78},[72,58407,54870],{"class":82},[72,58409,58410,58413],{"class":74,"line":17257},[72,58411,58412],{"class":358},"      clearInterval",[72,58414,58415],{"class":82},"(timerId)\n",[72,58417,58418],{"class":74,"line":17271},[72,58419,58420],{"class":621},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[72,58422,58423,58426,58429,58432,58434],{"class":74,"line":17276},[72,58424,58425],{"class":82},"      arr.",[72,58427,58428],{"class":358},"splice",[72,58430,58431],{"class":82},"(random, ",[72,58433,772],{"class":362},[72,58435,570],{"class":82},[72,58437,58438],{"class":74,"line":17281},[72,58439,33879],{"class":82},[72,58441,58442],{"class":74,"line":17295},[72,58443,2828],{"emptyLinePlaceholder":490},[72,58445,58446,58448,58450],{"class":74,"line":17307},[72,58447,52835],{"class":82},[72,58449,52231],{"class":51718},[72,58451,51725],{"class":82},[72,58453,58454,58456,58458],{"class":74,"line":17312},[72,58455,52203],{"class":82},[72,58457,52218],{"class":51718},[72,58459,51725],{"class":82},[72,58461,58462],{"class":74,"line":17325},[72,58463,2828],{"emptyLinePlaceholder":490},[72,58465,58466,58468,58470],{"class":74,"line":17330},[72,58467,52203],{"class":82},[72,58469,51053],{"class":51718},[72,58471,51725],{"class":82},[15,58473,58474],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[531,58476,58478],{"id":58477},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[63,58480,58482],{"className":51051,"code":58481,"language":51053,"meta":68,"style":68},"\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",[34,58483,58484,58494,58508,58512,58520,58534,58554,58566,58574,58578,58586,58598,58606,58625,58642,58658,58668,58672,58680,58688,58692],{"__ignoreMap":68},[72,58485,58486,58488,58490,58492],{"class":74,"line":75},[72,58487,51715],{"class":82},[72,58489,51719],{"class":51718},[72,58491,51722],{"class":358},[72,58493,51725],{"class":82},[72,58495,58496,58498,58500,58502,58504,58506],{"class":74,"line":370},[72,58497,1464],{"class":82},[72,58499,51053],{"class":51718},[72,58501,51734],{"class":358},[72,58503,609],{"class":82},[72,58505,51739],{"class":366},[72,58507,51725],{"class":82},[72,58509,58510],{"class":74,"line":1608},[72,58511,2828],{"emptyLinePlaceholder":490},[72,58513,58514,58516,58518],{"class":74,"line":1623},[72,58515,1464],{"class":82},[72,58517,51752],{"class":51718},[72,58519,51725],{"class":82},[72,58521,58522,58524,58526,58528,58530,58532],{"class":74,"line":1629},[72,58523,52562],{"class":82},[72,58525,51762],{"class":51718},[72,58527,51765],{"class":358},[72,58529,609],{"class":82},[72,58531,51770],{"class":366},[72,58533,51725],{"class":82},[72,58535,58536,58538,58540,58542,58544,58546,58548,58550,58552],{"class":74,"line":1643},[72,58537,52562],{"class":82},[72,58539,51762],{"class":51718},[72,58541,15346],{"class":358},[72,58543,609],{"class":82},[72,58545,51809],{"class":366},[72,58547,51789],{"class":358},[72,58549,609],{"class":82},[72,58551,51816],{"class":366},[72,58553,51725],{"class":82},[72,58555,58556,58558,58560,58562,58564],{"class":74,"line":1649},[72,58557,52562],{"class":82},[72,58559,51825],{"class":51718},[72,58561,51828],{"class":82},[72,58563,51825],{"class":51718},[72,58565,51725],{"class":82},[72,58567,58568,58570,58572],{"class":74,"line":1740},[72,58569,52203],{"class":82},[72,58571,51752],{"class":51718},[72,58573,51725],{"class":82},[72,58575,58576],{"class":74,"line":1746},[72,58577,2828],{"emptyLinePlaceholder":490},[72,58579,58580,58582,58584],{"class":74,"line":1758},[72,58581,1464],{"class":82},[72,58583,52218],{"class":51718},[72,58585,51725],{"class":82},[72,58587,58588,58590,58592,58594,58596],{"class":74,"line":2041},[72,58589,52562],{"class":82},[72,58591,54305],{"class":51718},[72,58593,54311],{"class":82},[72,58595,54305],{"class":51718},[72,58597,51725],{"class":82},[72,58599,58600,58602,58604],{"class":74,"line":2046},[72,58601,52562],{"class":82},[72,58603,52231],{"class":51718},[72,58605,51725],{"class":82},[72,58607,58608,58610,58612,58614,58616,58618,58620,58623],{"class":74,"line":2052},[72,58609,11647],{"class":78},[72,58611,54809],{"class":362},[72,58613,13990],{"class":78},[72,58615,54814],{"class":82},[72,58617,54817],{"class":358},[72,58619,564],{"class":82},[72,58621,58622],{"class":366},"'button'",[72,58624,570],{"class":82},[72,58626,58627,58630,58632,58634,58636,58638,58640],{"class":74,"line":2057},[72,58628,58629],{"class":82},"    btn.",[72,58631,58231],{"class":358},[72,58633,564],{"class":82},[72,58635,58236],{"class":366},[72,58637,12861],{"class":82},[72,58639,54867],{"class":78},[72,58641,54870],{"class":82},[72,58643,58644,58647,58649,58651,58654,58656],{"class":74,"line":2071},[72,58645,58646],{"class":78},"      const",[72,58648,2668],{"class":362},[72,58650,13990],{"class":78},[72,58652,58653],{"class":82}," Math.",[72,58655,58278],{"class":358},[72,58657,2404],{"class":82},[72,58659,58660,58663,58666],{"class":74,"line":2076},[72,58661,58662],{"class":82},"      console.",[72,58664,58665],{"class":358},"log",[72,58667,577],{"class":82},[72,58669,58670],{"class":74,"line":2082},[72,58671,33879],{"class":82},[72,58673,58674,58676,58678],{"class":74,"line":2103},[72,58675,52835],{"class":82},[72,58677,52231],{"class":51718},[72,58679,51725],{"class":82},[72,58681,58682,58684,58686],{"class":74,"line":2108},[72,58683,52203],{"class":82},[72,58685,52218],{"class":51718},[72,58687,51725],{"class":82},[72,58689,58690],{"class":74,"line":2122},[72,58691,2828],{"emptyLinePlaceholder":490},[72,58693,58694,58696,58698],{"class":74,"line":2127},[72,58695,52203],{"class":82},[72,58697,51053],{"class":51718},[72,58699,51725],{"class":82},[15,58701,58702],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[15,58704,58705],{},"常量不可以重新赋值",[15,58707,58708],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[63,58710,58712],{"className":51051,"code":58711,"language":51053,"meta":68,"style":68},"\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",[34,58713,58714,58724,58738,58742,58750,58764,58784,58796,58804,58808,58816,58828,58836,58847,58865,58881,58895,58903,58907,58915,58923,58927],{"__ignoreMap":68},[72,58715,58716,58718,58720,58722],{"class":74,"line":75},[72,58717,51715],{"class":82},[72,58719,51719],{"class":51718},[72,58721,51722],{"class":358},[72,58723,51725],{"class":82},[72,58725,58726,58728,58730,58732,58734,58736],{"class":74,"line":370},[72,58727,1464],{"class":82},[72,58729,51053],{"class":51718},[72,58731,51734],{"class":358},[72,58733,609],{"class":82},[72,58735,51739],{"class":366},[72,58737,51725],{"class":82},[72,58739,58740],{"class":74,"line":1608},[72,58741,2828],{"emptyLinePlaceholder":490},[72,58743,58744,58746,58748],{"class":74,"line":1623},[72,58745,1464],{"class":82},[72,58747,51752],{"class":51718},[72,58749,51725],{"class":82},[72,58751,58752,58754,58756,58758,58760,58762],{"class":74,"line":1629},[72,58753,52562],{"class":82},[72,58755,51762],{"class":51718},[72,58757,51765],{"class":358},[72,58759,609],{"class":82},[72,58761,51770],{"class":366},[72,58763,51725],{"class":82},[72,58765,58766,58768,58770,58772,58774,58776,58778,58780,58782],{"class":74,"line":1643},[72,58767,52562],{"class":82},[72,58769,51762],{"class":51718},[72,58771,15346],{"class":358},[72,58773,609],{"class":82},[72,58775,51809],{"class":366},[72,58777,51789],{"class":358},[72,58779,609],{"class":82},[72,58781,51816],{"class":366},[72,58783,51725],{"class":82},[72,58785,58786,58788,58790,58792,58794],{"class":74,"line":1649},[72,58787,52562],{"class":82},[72,58789,51825],{"class":51718},[72,58791,51828],{"class":82},[72,58793,51825],{"class":51718},[72,58795,51725],{"class":82},[72,58797,58798,58800,58802],{"class":74,"line":1740},[72,58799,52203],{"class":82},[72,58801,51752],{"class":51718},[72,58803,51725],{"class":82},[72,58805,58806],{"class":74,"line":1746},[72,58807,2828],{"emptyLinePlaceholder":490},[72,58809,58810,58812,58814],{"class":74,"line":1758},[72,58811,1464],{"class":82},[72,58813,52218],{"class":51718},[72,58815,51725],{"class":82},[72,58817,58818,58820,58822,58824,58826],{"class":74,"line":2041},[72,58819,52562],{"class":82},[72,58821,54305],{"class":51718},[72,58823,54311],{"class":82},[72,58825,54305],{"class":51718},[72,58827,51725],{"class":82},[72,58829,58830,58832,58834],{"class":74,"line":2046},[72,58831,52562],{"class":82},[72,58833,52231],{"class":51718},[72,58835,51725],{"class":82},[72,58837,58838,58840,58842,58844],{"class":74,"line":2052},[72,58839,11647],{"class":78},[72,58841,2668],{"class":362},[72,58843,13990],{"class":78},[72,58845,58846],{"class":362}," 10\n",[72,58848,58849,58851,58853,58855,58857,58859,58861,58863],{"class":74,"line":2057},[72,58850,11647],{"class":78},[72,58852,54809],{"class":362},[72,58854,13990],{"class":78},[72,58856,54814],{"class":82},[72,58858,54817],{"class":358},[72,58860,564],{"class":82},[72,58862,58622],{"class":366},[72,58864,570],{"class":82},[72,58866,58867,58869,58871,58873,58875,58877,58879],{"class":74,"line":2071},[72,58868,58629],{"class":82},[72,58870,58231],{"class":358},[72,58872,564],{"class":82},[72,58874,58236],{"class":366},[72,58876,12861],{"class":82},[72,58878,54867],{"class":78},[72,58880,54870],{"class":82},[72,58882,58883,58885,58887,58889,58891,58893],{"class":74,"line":2076},[72,58884,58646],{"class":78},[72,58886,2668],{"class":362},[72,58888,13990],{"class":78},[72,58890,58653],{"class":82},[72,58892,58278],{"class":358},[72,58894,2404],{"class":82},[72,58896,58897,58899,58901],{"class":74,"line":2082},[72,58898,58662],{"class":82},[72,58900,58665],{"class":358},[72,58902,577],{"class":82},[72,58904,58905],{"class":74,"line":2103},[72,58906,33879],{"class":82},[72,58908,58909,58911,58913],{"class":74,"line":2108},[72,58910,52835],{"class":82},[72,58912,52231],{"class":51718},[72,58914,51725],{"class":82},[72,58916,58917,58919,58921],{"class":74,"line":2122},[72,58918,52203],{"class":82},[72,58920,52218],{"class":51718},[72,58922,51725],{"class":82},[72,58924,58925],{"class":74,"line":2127},[72,58926,2828],{"emptyLinePlaceholder":490},[72,58928,58929,58931,58933],{"class":74,"line":2156},[72,58930,52203],{"class":82},[72,58932,51053],{"class":51718},[72,58934,51725],{"class":82},[15,58936,58937],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[63,58939,58941],{"className":51051,"code":58940,"language":51053,"meta":68,"style":68},"\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",[34,58942,58943,58953,58967,58971,58979,58993,59013,59025,59033,59037,59045,59057,59065,59075,59093,59109,59122,59130,59134,59142,59150,59154],{"__ignoreMap":68},[72,58944,58945,58947,58949,58951],{"class":74,"line":75},[72,58946,51715],{"class":82},[72,58948,51719],{"class":51718},[72,58950,51722],{"class":358},[72,58952,51725],{"class":82},[72,58954,58955,58957,58959,58961,58963,58965],{"class":74,"line":370},[72,58956,1464],{"class":82},[72,58958,51053],{"class":51718},[72,58960,51734],{"class":358},[72,58962,609],{"class":82},[72,58964,51739],{"class":366},[72,58966,51725],{"class":82},[72,58968,58969],{"class":74,"line":1608},[72,58970,2828],{"emptyLinePlaceholder":490},[72,58972,58973,58975,58977],{"class":74,"line":1623},[72,58974,1464],{"class":82},[72,58976,51752],{"class":51718},[72,58978,51725],{"class":82},[72,58980,58981,58983,58985,58987,58989,58991],{"class":74,"line":1629},[72,58982,52562],{"class":82},[72,58984,51762],{"class":51718},[72,58986,51765],{"class":358},[72,58988,609],{"class":82},[72,58990,51770],{"class":366},[72,58992,51725],{"class":82},[72,58994,58995,58997,58999,59001,59003,59005,59007,59009,59011],{"class":74,"line":1643},[72,58996,52562],{"class":82},[72,58998,51762],{"class":51718},[72,59000,15346],{"class":358},[72,59002,609],{"class":82},[72,59004,51809],{"class":366},[72,59006,51789],{"class":358},[72,59008,609],{"class":82},[72,59010,51816],{"class":366},[72,59012,51725],{"class":82},[72,59014,59015,59017,59019,59021,59023],{"class":74,"line":1649},[72,59016,52562],{"class":82},[72,59018,51825],{"class":51718},[72,59020,51828],{"class":82},[72,59022,51825],{"class":51718},[72,59024,51725],{"class":82},[72,59026,59027,59029,59031],{"class":74,"line":1740},[72,59028,52203],{"class":82},[72,59030,51752],{"class":51718},[72,59032,51725],{"class":82},[72,59034,59035],{"class":74,"line":1746},[72,59036,2828],{"emptyLinePlaceholder":490},[72,59038,59039,59041,59043],{"class":74,"line":1758},[72,59040,1464],{"class":82},[72,59042,52218],{"class":51718},[72,59044,51725],{"class":82},[72,59046,59047,59049,59051,59053,59055],{"class":74,"line":2041},[72,59048,52562],{"class":82},[72,59050,54305],{"class":51718},[72,59052,54311],{"class":82},[72,59054,54305],{"class":51718},[72,59056,51725],{"class":82},[72,59058,59059,59061,59063],{"class":74,"line":2046},[72,59060,52562],{"class":82},[72,59062,52231],{"class":51718},[72,59064,51725],{"class":82},[72,59066,59067,59069,59071,59073],{"class":74,"line":2052},[72,59068,11647],{"class":78},[72,59070,2668],{"class":362},[72,59072,13990],{"class":78},[72,59074,58846],{"class":362},[72,59076,59077,59079,59081,59083,59085,59087,59089,59091],{"class":74,"line":2057},[72,59078,11647],{"class":78},[72,59080,54809],{"class":362},[72,59082,13990],{"class":78},[72,59084,54814],{"class":82},[72,59086,54817],{"class":358},[72,59088,564],{"class":82},[72,59090,58622],{"class":366},[72,59092,570],{"class":82},[72,59094,59095,59097,59099,59101,59103,59105,59107],{"class":74,"line":2071},[72,59096,58629],{"class":82},[72,59098,58231],{"class":358},[72,59100,564],{"class":82},[72,59102,58236],{"class":366},[72,59104,12861],{"class":82},[72,59106,54867],{"class":78},[72,59108,54870],{"class":82},[72,59110,59111,59114,59116,59118,59120],{"class":74,"line":2076},[72,59112,59113],{"class":82},"      num ",[72,59115,609],{"class":78},[72,59117,58653],{"class":82},[72,59119,58278],{"class":358},[72,59121,2404],{"class":82},[72,59123,59124,59126,59128],{"class":74,"line":2082},[72,59125,58662],{"class":82},[72,59127,58665],{"class":358},[72,59129,577],{"class":82},[72,59131,59132],{"class":74,"line":2103},[72,59133,33879],{"class":82},[72,59135,59136,59138,59140],{"class":74,"line":2108},[72,59137,52835],{"class":82},[72,59139,52231],{"class":51718},[72,59141,51725],{"class":82},[72,59143,59144,59146,59148],{"class":74,"line":2122},[72,59145,52203],{"class":82},[72,59147,52218],{"class":51718},[72,59149,51725],{"class":82},[72,59151,59152],{"class":74,"line":2127},[72,59153,2828],{"emptyLinePlaceholder":490},[72,59155,59156,59158,59160],{"class":74,"line":2156},[72,59157,52203],{"class":82},[72,59159,51053],{"class":51718},[72,59161,51725],{"class":82},[15,59163,59164],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[531,59166,59168],{"id":59167},"_324-事件监听版本","3.2.4 事件监听版本",[15,59170,59171],{},[1891,59172],{"alt":68,"src":59173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[15,59175,59176],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[15,59178,59179],{},"这种方式会覆盖前边的事件监听:",[63,59181,59183],{"className":51051,"code":59182,"language":51053,"meta":68,"style":68},"\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",[34,59184,59185,59195,59209,59213,59221,59235,59255,59267,59275,59279,59287,59299,59307,59325,59339,59350,59354,59366,59376,59380,59388,59396,59400],{"__ignoreMap":68},[72,59186,59187,59189,59191,59193],{"class":74,"line":75},[72,59188,51715],{"class":82},[72,59190,51719],{"class":51718},[72,59192,51722],{"class":358},[72,59194,51725],{"class":82},[72,59196,59197,59199,59201,59203,59205,59207],{"class":74,"line":370},[72,59198,1464],{"class":82},[72,59200,51053],{"class":51718},[72,59202,51734],{"class":358},[72,59204,609],{"class":82},[72,59206,51739],{"class":366},[72,59208,51725],{"class":82},[72,59210,59211],{"class":74,"line":1608},[72,59212,2828],{"emptyLinePlaceholder":490},[72,59214,59215,59217,59219],{"class":74,"line":1623},[72,59216,1464],{"class":82},[72,59218,51752],{"class":51718},[72,59220,51725],{"class":82},[72,59222,59223,59225,59227,59229,59231,59233],{"class":74,"line":1629},[72,59224,52562],{"class":82},[72,59226,51762],{"class":51718},[72,59228,51765],{"class":358},[72,59230,609],{"class":82},[72,59232,51770],{"class":366},[72,59234,51725],{"class":82},[72,59236,59237,59239,59241,59243,59245,59247,59249,59251,59253],{"class":74,"line":1643},[72,59238,52562],{"class":82},[72,59240,51762],{"class":51718},[72,59242,15346],{"class":358},[72,59244,609],{"class":82},[72,59246,51809],{"class":366},[72,59248,51789],{"class":358},[72,59250,609],{"class":82},[72,59252,51816],{"class":366},[72,59254,51725],{"class":82},[72,59256,59257,59259,59261,59263,59265],{"class":74,"line":1649},[72,59258,52562],{"class":82},[72,59260,51825],{"class":51718},[72,59262,51828],{"class":82},[72,59264,51825],{"class":51718},[72,59266,51725],{"class":82},[72,59268,59269,59271,59273],{"class":74,"line":1740},[72,59270,52203],{"class":82},[72,59272,51752],{"class":51718},[72,59274,51725],{"class":82},[72,59276,59277],{"class":74,"line":1746},[72,59278,2828],{"emptyLinePlaceholder":490},[72,59280,59281,59283,59285],{"class":74,"line":1758},[72,59282,1464],{"class":82},[72,59284,52218],{"class":51718},[72,59286,51725],{"class":82},[72,59288,59289,59291,59293,59295,59297],{"class":74,"line":2041},[72,59290,52562],{"class":82},[72,59292,54305],{"class":51718},[72,59294,54311],{"class":82},[72,59296,54305],{"class":51718},[72,59298,51725],{"class":82},[72,59300,59301,59303,59305],{"class":74,"line":2046},[72,59302,52562],{"class":82},[72,59304,52231],{"class":51718},[72,59306,51725],{"class":82},[72,59308,59309,59311,59313,59315,59317,59319,59321,59323],{"class":74,"line":2052},[72,59310,11647],{"class":78},[72,59312,54809],{"class":362},[72,59314,13990],{"class":78},[72,59316,54814],{"class":82},[72,59318,54817],{"class":358},[72,59320,564],{"class":82},[72,59322,58622],{"class":366},[72,59324,570],{"class":82},[72,59326,59327,59329,59332,59334,59337],{"class":74,"line":2057},[72,59328,58629],{"class":82},[72,59330,59331],{"class":358},"onclick",[72,59333,13990],{"class":78},[72,59335,59336],{"class":78}," function",[72,59338,54870],{"class":82},[72,59340,59341,59344,59346,59348],{"class":74,"line":2071},[72,59342,59343],{"class":358},"      alert",[72,59345,564],{"class":82},[72,59347,1026],{"class":362},[72,59349,570],{"class":82},[72,59351,59352],{"class":74,"line":2076},[72,59353,2615],{"class":82},[72,59355,59356,59358,59360,59362,59364],{"class":74,"line":2082},[72,59357,58629],{"class":82},[72,59359,59331],{"class":358},[72,59361,13990],{"class":78},[72,59363,59336],{"class":78},[72,59365,54870],{"class":82},[72,59367,59368,59370,59372,59374],{"class":74,"line":2103},[72,59369,59343],{"class":358},[72,59371,564],{"class":82},[72,59373,1304],{"class":362},[72,59375,570],{"class":82},[72,59377,59378],{"class":74,"line":2108},[72,59379,2615],{"class":82},[72,59381,59382,59384,59386],{"class":74,"line":2122},[72,59383,52835],{"class":82},[72,59385,52231],{"class":51718},[72,59387,51725],{"class":82},[72,59389,59390,59392,59394],{"class":74,"line":2127},[72,59391,52203],{"class":82},[72,59393,52218],{"class":51718},[72,59395,51725],{"class":82},[72,59397,59398],{"class":74,"line":2156},[72,59399,2828],{"emptyLinePlaceholder":490},[72,59401,59402,59404,59406],{"class":74,"line":2161},[72,59403,52203],{"class":82},[72,59405,51053],{"class":51718},[72,59407,51725],{"class":82},[15,59409,59410],{},"只要点击就输出结果为22,前边11被覆盖了",[63,59412,59414],{"className":51051,"code":59413,"language":51053,"meta":68,"style":68},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[34,59415,59416,59421,59426,59430,59435,59440],{"__ignoreMap":68},[72,59417,59418],{"class":74,"line":75},[72,59419,59420],{"class":82},"  btn.addEventListener('click', function () {\n",[72,59422,59423],{"class":74,"line":370},[72,59424,59425],{"class":82},"      alert(11)\n",[72,59427,59428],{"class":74,"line":1608},[72,59429,33879],{"class":82},[72,59431,59432],{"class":74,"line":1623},[72,59433,59434],{"class":82},"    btn.addEventListener('click', function () {\n",[72,59436,59437],{"class":74,"line":1629},[72,59438,59439],{"class":82},"      alert(22)\n",[72,59441,59442],{"class":74,"line":1643},[72,59443,33879],{"class":82},[15,59445,59446],{},"点击第一次输出11,第二次点击为22",[531,59448,59450],{"id":59449},"_325-事件类型","3.2.5 事件类型",[15,59452,59453],{},[1891,59454],{"alt":68,"src":59455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[22423,59457,59459],{"id":59458},"_3251-鼠标事件","3.2.5.1 鼠标事件",[15,59461,59462],{},"补充知识:",[15,59464,59465],{},"轮播图自动播放模块,可以使用",[15,59467,59468],{},"let timerId = setInterval(function () {",[15,59470,59471],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[15,59473,59474],{},"用js方法模拟进行点击事件,click必须加()",[15,59476,59477],{},"next.click()",[15,59479,59480],{},"}, 1000)",[15,59482,59483],{},[1891,59484],{"alt":68,"src":59485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[63,59487,59489],{"className":53485,"code":59488,"language":53487,"meta":68,"style":68},"\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",[34,59490,59491,59495,59505,59519,59523,59531,59546,59566,59586,59599,59607,59612,59617,59621,59625,59630,59635,59640,59645,59649,59653,59658,59663,59668,59672,59676,59681,59685,59690,59695,59699,59703,59708,59713,59718,59723,59728,59732,59736,59741,59746,59751,59756,59761,59765,59769,59774,59779,59784,59789,59794,59799,59804,59809,59814,59819,59823,59827,59832,59837,59841,59845,59850,59855,59859,59864,59869,59873,59877,59882,59886,59891,59896,59900,59905,59909,59913,59918,59923,59928,59933,59938,59943,59948,59952,59956,59960,59965,59970,59975,59980,59984,59992,60000,60004,60012,60027,60041,60062,60070,60084,60097,60112,60131,60143,60155,60167,60179,60191,60203,60215,60223,60238,60262,60286,60294,60302,60310,60318,60323,60328,60333,60338,60343,60348,60353,60358,60363,60368,60372,60377,60382,60387,60392,60397,60402,60407,60412,60417,60421,60426,60431,60436,60441,60446,60451,60456,60461,60466,60471,60476,60481,60485,60489,60494,60499,60504,60508,60513,60518,60523,60528,60533,60537,60542,60546,60550,60554,60558,60562,60566,60571,60576,60581,60586,60591,60596,60601,60606,60611,60615,60619,60624,60629,60634,60639,60644,60648,60653,60658,60663,60668,60673,60678,60682,60686,60691,60695,60700,60704,60709,60714,60719,60724,60729,60734,60738,60746,60754,60758],{"__ignoreMap":68},[72,59492,59493],{"class":74,"line":75},[72,59494,2828],{"emptyLinePlaceholder":490},[72,59496,59497,59499,59501,59503],{"class":74,"line":370},[72,59498,51715],{"class":82},[72,59500,51719],{"class":78},[72,59502,51722],{"class":362},[72,59504,51725],{"class":82},[72,59506,59507,59509,59511,59513,59515,59517],{"class":74,"line":1608},[72,59508,1464],{"class":82},[72,59510,51053],{"class":51718},[72,59512,51734],{"class":358},[72,59514,609],{"class":82},[72,59516,51739],{"class":366},[72,59518,51725],{"class":82},[72,59520,59521],{"class":74,"line":1623},[72,59522,2828],{"emptyLinePlaceholder":490},[72,59524,59525,59527,59529],{"class":74,"line":1629},[72,59526,1464],{"class":82},[72,59528,51752],{"class":51718},[72,59530,51725],{"class":82},[72,59532,59533,59535,59537,59539,59541,59543],{"class":74,"line":1643},[72,59534,52562],{"class":82},[72,59536,51762],{"class":51718},[72,59538,51765],{"class":358},[72,59540,609],{"class":82},[72,59542,51770],{"class":366},[72,59544,59545],{"class":82}," \u002F>\n",[72,59547,59548,59550,59552,59554,59556,59558,59560,59562,59564],{"class":74,"line":1649},[72,59549,52562],{"class":82},[72,59551,51762],{"class":51718},[72,59553,51781],{"class":358},[72,59555,609],{"class":82},[72,59557,51786],{"class":366},[72,59559,51789],{"class":358},[72,59561,609],{"class":82},[72,59563,51794],{"class":366},[72,59565,59545],{"class":82},[72,59567,59568,59570,59572,59574,59576,59578,59580,59582,59584],{"class":74,"line":1740},[72,59569,52562],{"class":82},[72,59571,51762],{"class":51718},[72,59573,15346],{"class":358},[72,59575,609],{"class":82},[72,59577,51809],{"class":366},[72,59579,51789],{"class":358},[72,59581,609],{"class":82},[72,59583,51816],{"class":366},[72,59585,59545],{"class":82},[72,59587,59588,59590,59592,59595,59597],{"class":74,"line":1746},[72,59589,52562],{"class":82},[72,59591,51825],{"class":51718},[72,59593,59594],{"class":82},">轮播图点击切换\u003C\u002F",[72,59596,51825],{"class":51718},[72,59598,51725],{"class":82},[72,59600,59601,59603,59605],{"class":74,"line":1758},[72,59602,52562],{"class":82},[72,59604,473],{"class":51718},[72,59606,51725],{"class":82},[72,59608,59609],{"class":74,"line":2041},[72,59610,59611],{"class":82},"    * {\n",[72,59613,59614],{"class":74,"line":2046},[72,59615,59616],{"class":82},"      box-sizing: border-box;\n",[72,59618,59619],{"class":74,"line":2052},[72,59620,2615],{"class":82},[72,59622,59623],{"class":74,"line":2057},[72,59624,2828],{"emptyLinePlaceholder":490},[72,59626,59627],{"class":74,"line":2071},[72,59628,59629],{"class":82},"    .slider {\n",[72,59631,59632],{"class":74,"line":2076},[72,59633,59634],{"class":82},"      width: 560px;\n",[72,59636,59637],{"class":74,"line":2082},[72,59638,59639],{"class":82},"      height: 400px;\n",[72,59641,59642],{"class":74,"line":2103},[72,59643,59644],{"class":82},"      overflow: hidden;\n",[72,59646,59647],{"class":74,"line":2108},[72,59648,2615],{"class":82},[72,59650,59651],{"class":74,"line":2122},[72,59652,2828],{"emptyLinePlaceholder":490},[72,59654,59655],{"class":74,"line":2127},[72,59656,59657],{"class":82},"    .slider-wrapper {\n",[72,59659,59660],{"class":74,"line":2156},[72,59661,59662],{"class":82},"      width: 100%;\n",[72,59664,59665],{"class":74,"line":2161},[72,59666,59667],{"class":82},"      height: 320px;\n",[72,59669,59670],{"class":74,"line":2178},[72,59671,2615],{"class":82},[72,59673,59674],{"class":74,"line":2183},[72,59675,2828],{"emptyLinePlaceholder":490},[72,59677,59678],{"class":74,"line":2188},[72,59679,59680],{"class":82},"    .slider-wrapper img {\n",[72,59682,59683],{"class":74,"line":2193},[72,59684,59662],{"class":82},[72,59686,59687],{"class":74,"line":2207},[72,59688,59689],{"class":82},"      height: 100%;\n",[72,59691,59692],{"class":74,"line":2212},[72,59693,59694],{"class":82},"      display: block;\n",[72,59696,59697],{"class":74,"line":3005},[72,59698,2615],{"class":82},[72,59700,59701],{"class":74,"line":3019},[72,59702,2828],{"emptyLinePlaceholder":490},[72,59704,59705],{"class":74,"line":3027},[72,59706,59707],{"class":82},"    .slider-footer {\n",[72,59709,59710],{"class":74,"line":3032},[72,59711,59712],{"class":82},"      height: 80px;\n",[72,59714,59715],{"class":74,"line":3038},[72,59716,59717],{"class":82},"      background-color: rgb(100, 67, 68);\n",[72,59719,59720],{"class":74,"line":3044},[72,59721,59722],{"class":82},"      padding: 12px 12px 0 12px;\n",[72,59724,59725],{"class":74,"line":3049},[72,59726,59727],{"class":82},"      position: relative;\n",[72,59729,59730],{"class":74,"line":8374},[72,59731,2615],{"class":82},[72,59733,59734],{"class":74,"line":8398},[72,59735,2828],{"emptyLinePlaceholder":490},[72,59737,59738],{"class":74,"line":8403},[72,59739,59740],{"class":82},"    .slider-footer .toggle {\n",[72,59742,59743],{"class":74,"line":8409},[72,59744,59745],{"class":82},"      position: absolute;\n",[72,59747,59748],{"class":74,"line":8436},[72,59749,59750],{"class":82},"      right: 0;\n",[72,59752,59753],{"class":74,"line":8441},[72,59754,59755],{"class":82},"      top: 12px;\n",[72,59757,59758],{"class":74,"line":8447},[72,59759,59760],{"class":82},"      display: flex;\n",[72,59762,59763],{"class":74,"line":8459},[72,59764,2615],{"class":82},[72,59766,59767],{"class":74,"line":8471},[72,59768,2828],{"emptyLinePlaceholder":490},[72,59770,59771],{"class":74,"line":8483},[72,59772,59773],{"class":82},"    .slider-footer .toggle button {\n",[72,59775,59776],{"class":74,"line":10142},[72,59777,59778],{"class":82},"      margin-right: 12px;\n",[72,59780,59781],{"class":74,"line":10167},[72,59782,59783],{"class":82},"      width: 28px;\n",[72,59785,59786],{"class":74,"line":10190},[72,59787,59788],{"class":82},"      height: 28px;\n",[72,59790,59791],{"class":74,"line":10214},[72,59792,59793],{"class":82},"      appearance: none;\n",[72,59795,59796],{"class":74,"line":10219},[72,59797,59798],{"class":82},"      border: none;\n",[72,59800,59801],{"class":74,"line":10224},[72,59802,59803],{"class":82},"      background: rgba(255, 255, 255, 0.1);\n",[72,59805,59806],{"class":74,"line":10229},[72,59807,59808],{"class":82},"      color: #fff;\n",[72,59810,59811],{"class":74,"line":10238},[72,59812,59813],{"class":82},"      border-radius: 4px;\n",[72,59815,59816],{"class":74,"line":10243},[72,59817,59818],{"class":82},"      cursor: pointer;\n",[72,59820,59821],{"class":74,"line":10249},[72,59822,2615],{"class":82},[72,59824,59825],{"class":74,"line":10270},[72,59826,2828],{"emptyLinePlaceholder":490},[72,59828,59829],{"class":74,"line":10276},[72,59830,59831],{"class":82},"    .slider-footer .toggle button:hover {\n",[72,59833,59834],{"class":74,"line":10290},[72,59835,59836],{"class":82},"      background: rgba(255, 255, 255, 0.2);\n",[72,59838,59839],{"class":74,"line":10296},[72,59840,2615],{"class":82},[72,59842,59843],{"class":74,"line":10323},[72,59844,2828],{"emptyLinePlaceholder":490},[72,59846,59847],{"class":74,"line":10332},[72,59848,59849],{"class":82},"    .slider-footer p {\n",[72,59851,59852],{"class":74,"line":10338},[72,59853,59854],{"class":82},"      margin: 0;\n",[72,59856,59857],{"class":74,"line":10346},[72,59858,59808],{"class":82},[72,59860,59861],{"class":74,"line":10351},[72,59862,59863],{"class":82},"      font-size: 18px;\n",[72,59865,59866],{"class":74,"line":17030},[72,59867,59868],{"class":82},"      margin-bottom: 10px;\n",[72,59870,59871],{"class":74,"line":17036},[72,59872,2615],{"class":82},[72,59874,59875],{"class":74,"line":17059},[72,59876,2828],{"emptyLinePlaceholder":490},[72,59878,59879],{"class":74,"line":17065},[72,59880,59881],{"class":82},"    .slider-indicator {\n",[72,59883,59884],{"class":74,"line":17088},[72,59885,59854],{"class":82},[72,59887,59888],{"class":74,"line":17102},[72,59889,59890],{"class":82},"      padding: 0;\n",[72,59892,59893],{"class":74,"line":17122},[72,59894,59895],{"class":82},"      list-style: none;\n",[72,59897,59898],{"class":74,"line":17128},[72,59899,59760],{"class":82},[72,59901,59902],{"class":74,"line":17139},[72,59903,59904],{"class":82},"      align-items: center;\n",[72,59906,59907],{"class":74,"line":17162},[72,59908,2615],{"class":82},[72,59910,59911],{"class":74,"line":17184},[72,59912,2828],{"emptyLinePlaceholder":490},[72,59914,59915],{"class":74,"line":17189},[72,59916,59917],{"class":82},"    .slider-indicator li {\n",[72,59919,59920],{"class":74,"line":17195},[72,59921,59922],{"class":82},"      width: 8px;\n",[72,59924,59925],{"class":74,"line":17209},[72,59926,59927],{"class":82},"      height: 8px;\n",[72,59929,59930],{"class":74,"line":17222},[72,59931,59932],{"class":82},"      margin: 4px;\n",[72,59934,59935],{"class":74,"line":17227},[72,59936,59937],{"class":82},"      border-radius: 50%;\n",[72,59939,59940],{"class":74,"line":17241},[72,59941,59942],{"class":82},"      background: #fff;\n",[72,59944,59945],{"class":74,"line":17246},[72,59946,59947],{"class":82},"      opacity: 0.4;\n",[72,59949,59950],{"class":74,"line":17252},[72,59951,59818],{"class":82},[72,59953,59954],{"class":74,"line":17257},[72,59955,2615],{"class":82},[72,59957,59958],{"class":74,"line":17271},[72,59959,2828],{"emptyLinePlaceholder":490},[72,59961,59962],{"class":74,"line":17276},[72,59963,59964],{"class":82},"    .slider-indicator li.active {\n",[72,59966,59967],{"class":74,"line":17281},[72,59968,59969],{"class":82},"      width: 12px;\n",[72,59971,59972],{"class":74,"line":17295},[72,59973,59974],{"class":82},"      height: 12px;\n",[72,59976,59977],{"class":74,"line":17307},[72,59978,59979],{"class":82},"      opacity: 1;\n",[72,59981,59982],{"class":74,"line":17312},[72,59983,2615],{"class":82},[72,59985,59986,59988,59990],{"class":74,"line":17325},[72,59987,52835],{"class":82},[72,59989,473],{"class":51718},[72,59991,51725],{"class":82},[72,59993,59994,59996,59998],{"class":74,"line":17330},[72,59995,52203],{"class":82},[72,59997,51752],{"class":51718},[72,59999,51725],{"class":82},[72,60001,60002],{"class":74,"line":17335},[72,60003,2828],{"emptyLinePlaceholder":490},[72,60005,60006,60008,60010],{"class":74,"line":17340},[72,60007,1464],{"class":82},[72,60009,52218],{"class":51718},[72,60011,51725],{"class":82},[72,60013,60014,60016,60018,60020,60022,60025],{"class":74,"line":17353},[72,60015,52562],{"class":82},[72,60017,52029],{"class":51718},[72,60019,53904],{"class":358},[72,60021,609],{"class":82},[72,60023,60024],{"class":366},"\"slider\"",[72,60026,51725],{"class":82},[72,60028,60029,60031,60033,60035,60037,60039],{"class":74,"line":17358},[72,60030,51759],{"class":82},[72,60032,52029],{"class":51718},[72,60034,53904],{"class":358},[72,60036,609],{"class":82},[72,60038,55645],{"class":366},[72,60040,51725],{"class":82},[72,60042,60043,60045,60047,60049,60051,60054,60056,60058,60060],{"class":74,"line":33051},[72,60044,55652],{"class":82},[72,60046,1891],{"class":51718},[72,60048,55657],{"class":358},[72,60050,609],{"class":82},[72,60052,60053],{"class":366},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[72,60055,55665],{"class":358},[72,60057,609],{"class":82},[72,60059,8078],{"class":366},[72,60061,59545],{"class":82},[72,60063,60064,60066,60068],{"class":74,"line":33057},[72,60065,52194],{"class":82},[72,60067,52029],{"class":51718},[72,60069,51725],{"class":82},[72,60071,60072,60074,60076,60078,60080,60082],{"class":74,"line":33063},[72,60073,51759],{"class":82},[72,60075,52029],{"class":51718},[72,60077,53904],{"class":358},[72,60079,609],{"class":82},[72,60081,55692],{"class":366},[72,60083,51725],{"class":82},[72,60085,60086,60088,60090,60093,60095],{"class":74,"line":33069},[72,60087,55652],{"class":82},[72,60089,15],{"class":51718},[72,60091,60092],{"class":82},">对人类来说会不会太超前了？\u003C\u002F",[72,60094,15],{"class":51718},[72,60096,51725],{"class":82},[72,60098,60099,60101,60103,60105,60107,60110],{"class":74,"line":33075},[72,60100,55652],{"class":82},[72,60102,251],{"class":51718},[72,60104,53904],{"class":358},[72,60106,609],{"class":82},[72,60108,60109],{"class":366},"\"slider-indicator\"",[72,60111,51725],{"class":82},[72,60113,60114,60116,60118,60120,60122,60125,60127,60129],{"class":74,"line":33086},[72,60115,55720],{"class":82},[72,60117,25],{"class":51718},[72,60119,53904],{"class":358},[72,60121,609],{"class":82},[72,60123,60124],{"class":366},"\"active\"",[72,60126,55732],{"class":82},[72,60128,25],{"class":51718},[72,60130,51725],{"class":82},[72,60132,60133,60135,60137,60139,60141],{"class":74,"line":33092},[72,60134,55720],{"class":82},[72,60136,25],{"class":51718},[72,60138,55732],{"class":82},[72,60140,25],{"class":51718},[72,60142,51725],{"class":82},[72,60144,60145,60147,60149,60151,60153],{"class":74,"line":33112},[72,60146,55720],{"class":82},[72,60148,25],{"class":51718},[72,60150,55732],{"class":82},[72,60152,25],{"class":51718},[72,60154,51725],{"class":82},[72,60156,60157,60159,60161,60163,60165],{"class":74,"line":33118},[72,60158,55720],{"class":82},[72,60160,25],{"class":51718},[72,60162,55732],{"class":82},[72,60164,25],{"class":51718},[72,60166,51725],{"class":82},[72,60168,60169,60171,60173,60175,60177],{"class":74,"line":33129},[72,60170,55720],{"class":82},[72,60172,25],{"class":51718},[72,60174,55732],{"class":82},[72,60176,25],{"class":51718},[72,60178,51725],{"class":82},[72,60180,60181,60183,60185,60187,60189],{"class":74,"line":33135},[72,60182,55720],{"class":82},[72,60184,25],{"class":51718},[72,60186,55732],{"class":82},[72,60188,25],{"class":51718},[72,60190,51725],{"class":82},[72,60192,60193,60195,60197,60199,60201],{"class":74,"line":33141},[72,60194,55720],{"class":82},[72,60196,25],{"class":51718},[72,60198,55732],{"class":82},[72,60200,25],{"class":51718},[72,60202,51725],{"class":82},[72,60204,60205,60207,60209,60211,60213],{"class":74,"line":33147},[72,60206,55720],{"class":82},[72,60208,25],{"class":51718},[72,60210,55732],{"class":82},[72,60212,25],{"class":51718},[72,60214,51725],{"class":82},[72,60216,60217,60219,60221],{"class":74,"line":33153},[72,60218,55825],{"class":82},[72,60220,251],{"class":51718},[72,60222,51725],{"class":82},[72,60224,60225,60227,60229,60231,60233,60236],{"class":74,"line":33159},[72,60226,55652],{"class":82},[72,60228,52029],{"class":51718},[72,60230,53904],{"class":358},[72,60232,609],{"class":82},[72,60234,60235],{"class":366},"\"toggle\"",[72,60237,51725],{"class":82},[72,60239,60240,60242,60244,60246,60248,60251,60253,60256,60258,60260],{"class":74,"line":33165},[72,60241,55720],{"class":82},[72,60243,54305],{"class":51718},[72,60245,53904],{"class":358},[72,60247,609],{"class":82},[72,60249,60250],{"class":366},"\"prev\"",[72,60252,1514],{"class":82},[72,60254,60255],{"class":362},"&lt;",[72,60257,52203],{"class":82},[72,60259,54305],{"class":51718},[72,60261,51725],{"class":82},[72,60263,60264,60266,60268,60270,60272,60275,60277,60280,60282,60284],{"class":74,"line":33171},[72,60265,55720],{"class":82},[72,60267,54305],{"class":51718},[72,60269,53904],{"class":358},[72,60271,609],{"class":82},[72,60273,60274],{"class":366},"\"next\"",[72,60276,1514],{"class":82},[72,60278,60279],{"class":362},"&gt;",[72,60281,52203],{"class":82},[72,60283,54305],{"class":51718},[72,60285,51725],{"class":82},[72,60287,60288,60290,60292],{"class":74,"line":33191},[72,60289,55825],{"class":82},[72,60291,52029],{"class":51718},[72,60293,51725],{"class":82},[72,60295,60296,60298,60300],{"class":74,"line":33197},[72,60297,52194],{"class":82},[72,60299,52029],{"class":51718},[72,60301,51725],{"class":82},[72,60303,60304,60306,60308],{"class":74,"line":33213},[72,60305,52835],{"class":82},[72,60307,52029],{"class":51718},[72,60309,51725],{"class":82},[72,60311,60312,60314,60316],{"class":74,"line":33219},[72,60313,52562],{"class":82},[72,60315,52231],{"class":51718},[72,60317,51725],{"class":82},[72,60319,60320],{"class":74,"line":33233},[72,60321,60322],{"class":82},"    \u002F\u002F 1. 初始数据\n",[72,60324,60325],{"class":74,"line":33239},[72,60326,60327],{"class":82},"    const data = [\n",[72,60329,60330],{"class":74,"line":33254},[72,60331,60332],{"class":82},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[72,60334,60335],{"class":74,"line":33260},[72,60336,60337],{"class":82},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[72,60339,60340],{"class":74,"line":33269},[72,60341,60342],{"class":82},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[72,60344,60345],{"class":74,"line":33275},[72,60346,60347],{"class":82},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[72,60349,60350],{"class":74,"line":33284},[72,60351,60352],{"class":82},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[72,60354,60355],{"class":74,"line":33290},[72,60356,60357],{"class":82},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[72,60359,60360],{"class":74,"line":33296},[72,60361,60362],{"class":82},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[72,60364,60365],{"class":74,"line":33305},[72,60366,60367],{"class":82},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[72,60369,60370],{"class":74,"line":33311},[72,60371,53527],{"class":82},[72,60373,60374],{"class":74,"line":33322},[72,60375,60376],{"class":82},"    \u002F\u002F 获取元素\n",[72,60378,60379],{"class":74,"line":33328},[72,60380,60381],{"class":82},"    const img = document.querySelector('.slider-wrapper img')\n",[72,60383,60384],{"class":74,"line":33347},[72,60385,60386],{"class":82},"    const p = document.querySelector('.slider-footer p')\n",[72,60388,60389],{"class":74,"line":33353},[72,60390,60391],{"class":82},"    const footer = document.querySelector('.slider-footer')\n",[72,60393,60394],{"class":74,"line":33364},[72,60395,60396],{"class":82},"    \u002F\u002F 1. 右按钮业务\n",[72,60398,60399],{"class":74,"line":33370},[72,60400,60401],{"class":82},"    \u002F\u002F 1.1 获取右侧按钮 \n",[72,60403,60404],{"class":74,"line":33390},[72,60405,60406],{"class":82},"    const next = document.querySelector('.next')\n",[72,60408,60409],{"class":74,"line":33406},[72,60410,60411],{"class":82},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[72,60413,60414],{"class":74,"line":33412},[72,60415,60416],{"class":82},"    \u002F\u002F 1.2 注册点击事件\n",[72,60418,60419],{"class":74,"line":33426},[72,60420,2828],{"emptyLinePlaceholder":490},[72,60422,60423],{"class":74,"line":33432},[72,60424,60425],{"class":82},"    next.addEventListener('click', function () {\n",[72,60427,60428],{"class":74,"line":33438},[72,60429,60430],{"class":82},"      \u002F\u002F console.log(11)\n",[72,60432,60433],{"class":74,"line":33449},[72,60434,60435],{"class":82},"      i++\n",[72,60437,60438],{"class":74,"line":33455},[72,60439,60440],{"class":82},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[72,60442,60443],{"class":74,"line":33461},[72,60444,60445],{"class":82},"      \u002F\u002F if (i >= 8) {\n",[72,60447,60448],{"class":74,"line":33471},[72,60449,60450],{"class":82},"      \u002F\u002F   i = 0\n",[72,60452,60453],{"class":74,"line":33477},[72,60454,60455],{"class":82},"      \u002F\u002F }\n",[72,60457,60458],{"class":74,"line":33488},[72,60459,60460],{"class":82},"      i = i >= data.length ? 0 : i\n",[72,60462,60463],{"class":74,"line":33494},[72,60464,60465],{"class":82},"      \u002F\u002F 1.3 得到对应的对象\n",[72,60467,60468],{"class":74,"line":33504},[72,60469,60470],{"class":82},"      \u002F\u002F console.log(data[i])\n",[72,60472,60473],{"class":74,"line":33509},[72,60474,60475],{"class":82},"      \u002F\u002F 调用函数\n",[72,60477,60478],{"class":74,"line":33515},[72,60479,60480],{"class":82},"      toggle()\n",[72,60482,60483],{"class":74,"line":33564},[72,60484,33879],{"class":82},[72,60486,60487],{"class":74,"line":33611},[72,60488,2828],{"emptyLinePlaceholder":490},[72,60490,60491],{"class":74,"line":33616},[72,60492,60493],{"class":82},"    \u002F\u002F 2. 左侧按钮业务\n",[72,60495,60496],{"class":74,"line":33622},[72,60497,60498],{"class":82},"    \u002F\u002F 2.1 获取左侧按钮 \n",[72,60500,60501],{"class":74,"line":33641},[72,60502,60503],{"class":82},"    const prev = document.querySelector('.prev')\n",[72,60505,60506],{"class":74,"line":33647},[72,60507,60416],{"class":82},[72,60509,60510],{"class":74,"line":33667},[72,60511,60512],{"class":82},"    prev.addEventListener('click', function () {\n",[72,60514,60515],{"class":74,"line":33673},[72,60516,60517],{"class":82},"      i--\n",[72,60519,60520],{"class":74,"line":33679},[72,60521,60522],{"class":82},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[72,60524,60525],{"class":74,"line":33689},[72,60526,60527],{"class":82},"      \u002F\u002F if (i \u003C 0) {\n",[72,60529,60530],{"class":74,"line":33694},[72,60531,60532],{"class":82},"      \u002F\u002F   i = 7\n",[72,60534,60535],{"class":74,"line":33700},[72,60536,60455],{"class":82},[72,60538,60539],{"class":74,"line":33716},[72,60540,60541],{"class":82},"      i = i \u003C 0 ? data.length - 1 : i\n",[72,60543,60544],{"class":74,"line":33761},[72,60545,60465],{"class":82},[72,60547,60548],{"class":74,"line":33767},[72,60549,60470],{"class":82},[72,60551,60552],{"class":74,"line":33773},[72,60553,60475],{"class":82},[72,60555,60556],{"class":74,"line":33779},[72,60557,60480],{"class":82},[72,60559,60560],{"class":74,"line":33790},[72,60561,33879],{"class":82},[72,60563,60564],{"class":74,"line":33796},[72,60565,2828],{"emptyLinePlaceholder":490},[72,60567,60568],{"class":74,"line":33802},[72,60569,60570],{"class":82},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[72,60572,60573],{"class":74,"line":33808},[72,60574,60575],{"class":82},"    function toggle() {\n",[72,60577,60578],{"class":74,"line":33826},[72,60579,60580],{"class":82},"      \u002F\u002F 1.4 渲染对应的数据\n",[72,60582,60583],{"class":74,"line":33840},[72,60584,60585],{"class":82},"      img.src = data[i].url\n",[72,60587,60588],{"class":74,"line":33849},[72,60589,60590],{"class":82},"      p.innerHTML = data[i].title\n",[72,60592,60593],{"class":74,"line":33858},[72,60594,60595],{"class":82},"      footer.style.backgroundColor = data[i].color\n",[72,60597,60598],{"class":74,"line":33867},[72,60599,60600],{"class":82},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[72,60602,60603],{"class":74,"line":33876},[72,60604,60605],{"class":82},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[72,60607,60608],{"class":74,"line":33882},[72,60609,60610],{"class":82},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[72,60612,60613],{"class":74,"line":33888},[72,60614,2615],{"class":82},[72,60616,60617],{"class":74,"line":33896},[72,60618,2828],{"emptyLinePlaceholder":490},[72,60620,60621],{"class":74,"line":33901},[72,60622,60623],{"class":82},"    \u002F\u002F 3. 自动播放模块\n",[72,60625,60626],{"class":74,"line":33907},[72,60627,60628],{"class":82},"    let timerId = setInterval(function () {\n",[72,60630,60631],{"class":74,"line":33918},[72,60632,60633],{"class":82},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[72,60635,60636],{"class":74,"line":33924},[72,60637,60638],{"class":82},"      next.click()\n",[72,60640,60641],{"class":74,"line":33944},[72,60642,60643],{"class":82},"    }, 1000)\n",[72,60645,60646],{"class":74,"line":33950},[72,60647,2828],{"emptyLinePlaceholder":490},[72,60649,60650],{"class":74,"line":33956},[72,60651,60652],{"class":82},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[72,60654,60655],{"class":74,"line":33962},[72,60656,60657],{"class":82},"    const slider = document.querySelector('.slider')\n",[72,60659,60660],{"class":74,"line":33979},[72,60661,60662],{"class":82},"    \u002F\u002F 注册事件\n",[72,60664,60665],{"class":74,"line":33985},[72,60666,60667],{"class":82},"    slider.addEventListener('mouseenter', function () {\n",[72,60669,60670],{"class":74,"line":33991},[72,60671,60672],{"class":82},"      \u002F\u002F 停止定时器\n",[72,60674,60675],{"class":74,"line":33997},[72,60676,60677],{"class":82},"      clearInterval(timerId)\n",[72,60679,60680],{"class":74,"line":34003},[72,60681,33879],{"class":82},[72,60683,60684],{"class":74,"line":34009},[72,60685,2828],{"emptyLinePlaceholder":490},[72,60687,60688],{"class":74,"line":34036},[72,60689,60690],{"class":82},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[72,60692,60693],{"class":74,"line":34060},[72,60694,60662],{"class":82},[72,60696,60697],{"class":74,"line":34066},[72,60698,60699],{"class":82},"    slider.addEventListener('mouseleave', function () {\n",[72,60701,60702],{"class":74,"line":34072},[72,60703,60672],{"class":82},[72,60705,60706],{"class":74,"line":34078},[72,60707,60708],{"class":82},"      if (timerId) clearInterval(timerId)\n",[72,60710,60711],{"class":74,"line":34089},[72,60712,60713],{"class":82},"      \u002F\u002F 开启定时器\n",[72,60715,60716],{"class":74,"line":34100},[72,60717,60718],{"class":82},"      timerId = setInterval(function () {\n",[72,60720,60721],{"class":74,"line":34106},[72,60722,60723],{"class":82},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[72,60725,60726],{"class":74,"line":34123},[72,60727,60728],{"class":82},"        next.click()\n",[72,60730,60731],{"class":74,"line":34146},[72,60732,60733],{"class":82},"      }, 1000)\n",[72,60735,60736],{"class":74,"line":34169},[72,60737,33879],{"class":82},[72,60739,60740,60742,60744],{"class":74,"line":34175},[72,60741,52835],{"class":82},[72,60743,52231],{"class":51718},[72,60745,51725],{"class":82},[72,60747,60748,60750,60752],{"class":74,"line":34180},[72,60749,52203],{"class":82},[72,60751,52218],{"class":51718},[72,60753,51725],{"class":82},[72,60755,60756],{"class":74,"line":34189},[72,60757,2828],{"emptyLinePlaceholder":490},[72,60759,60760,60762,60764],{"class":74,"line":34199},[72,60761,52203],{"class":82},[72,60763,51053],{"class":51718},[72,60765,51725],{"class":82},[22423,60767,60769],{"id":60768},"_3252-焦点事件","3.2.5.2 焦点事件",[15,60771,60772],{},"小米搜索框案例：",[63,60774,60776],{"className":51051,"code":60775,"language":51053,"meta":68,"style":68},"\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",[34,60777,60778,60788,60802,60806,60814,60828,60848,60868,60880,60888,60894,60904,60914,60926,60930,60934,60941,60945,60956,60960,60964,60971,60982,60995,61009,61013,61017,61026,61038,61050,61064,61077,61090,61108,61119,61123,61127,61136,61153,61157,61161,61168,61178,61188,61199,61212,61224,61240,61251,61263,61267,61271,61279,61290,61307,61319,61331,61342,61346,61350,61361,61372,61376,61384,61388,61396,61400,61408,61423,61446,61461,61492,61519,61546,61573,61600,61627,61654,61663,61671,61679,61684,61704,61724,61729,61734,61752,61757,61767,61772,61786,61791,61796,61813,61822,61834,61838,61846,61854,61858],{"__ignoreMap":68},[72,60779,60780,60782,60784,60786],{"class":74,"line":75},[72,60781,51715],{"class":82},[72,60783,51719],{"class":51718},[72,60785,51722],{"class":358},[72,60787,51725],{"class":82},[72,60789,60790,60792,60794,60796,60798,60800],{"class":74,"line":370},[72,60791,1464],{"class":82},[72,60793,51053],{"class":51718},[72,60795,51734],{"class":358},[72,60797,609],{"class":82},[72,60799,51739],{"class":366},[72,60801,51725],{"class":82},[72,60803,60804],{"class":74,"line":1608},[72,60805,2828],{"emptyLinePlaceholder":490},[72,60807,60808,60810,60812],{"class":74,"line":1623},[72,60809,1464],{"class":82},[72,60811,51752],{"class":51718},[72,60813,51725],{"class":82},[72,60815,60816,60818,60820,60822,60824,60826],{"class":74,"line":1629},[72,60817,51759],{"class":82},[72,60819,51762],{"class":51718},[72,60821,51765],{"class":358},[72,60823,609],{"class":82},[72,60825,51770],{"class":366},[72,60827,51725],{"class":82},[72,60829,60830,60832,60834,60836,60838,60840,60842,60844,60846],{"class":74,"line":1643},[72,60831,51759],{"class":82},[72,60833,51762],{"class":51718},[72,60835,51781],{"class":358},[72,60837,609],{"class":82},[72,60839,51786],{"class":366},[72,60841,51789],{"class":358},[72,60843,609],{"class":82},[72,60845,51794],{"class":366},[72,60847,51725],{"class":82},[72,60849,60850,60852,60854,60856,60858,60860,60862,60864,60866],{"class":74,"line":1649},[72,60851,51759],{"class":82},[72,60853,51762],{"class":51718},[72,60855,15346],{"class":358},[72,60857,609],{"class":82},[72,60859,51809],{"class":366},[72,60861,51789],{"class":358},[72,60863,609],{"class":82},[72,60865,51816],{"class":366},[72,60867,51725],{"class":82},[72,60869,60870,60872,60874,60876,60878],{"class":74,"line":1740},[72,60871,51759],{"class":82},[72,60873,51825],{"class":51718},[72,60875,51828],{"class":82},[72,60877,51825],{"class":51718},[72,60879,51725],{"class":82},[72,60881,60882,60884,60886],{"class":74,"line":1746},[72,60883,51759],{"class":82},[72,60885,473],{"class":51718},[72,60887,51725],{"class":82},[72,60889,60890,60892],{"class":74,"line":1758},[72,60891,51845],{"class":51718},[72,60893,15998],{"class":82},[72,60895,60896,60898,60900,60902],{"class":74,"line":2041},[72,60897,51852],{"class":362},[72,60899,51855],{"class":82},[72,60901,747],{"class":362},[72,60903,1719],{"class":82},[72,60905,60906,60908,60910,60912],{"class":74,"line":2046},[72,60907,51864],{"class":362},[72,60909,51855],{"class":82},[72,60911,747],{"class":362},[72,60913,1719],{"class":82},[72,60915,60916,60919,60921,60924],{"class":74,"line":2052},[72,60917,60918],{"class":362},"            box-sizing",[72,60920,51855],{"class":82},[72,60922,60923],{"class":362},"border-box",[72,60925,1719],{"class":82},[72,60927,60928],{"class":74,"line":2057},[72,60929,2957],{"class":82},[72,60931,60932],{"class":74,"line":2071},[72,60933,2828],{"emptyLinePlaceholder":490},[72,60935,60936,60939],{"class":74,"line":2076},[72,60937,60938],{"class":51718},"        ul",[72,60940,15998],{"class":82},[72,60942,60943],{"class":74,"line":2082},[72,60944,2828],{"emptyLinePlaceholder":490},[72,60946,60947,60950,60952,60954],{"class":74,"line":2103},[72,60948,60949],{"class":362},"            list-style",[72,60951,51855],{"class":82},[72,60953,55155],{"class":362},[72,60955,1719],{"class":82},[72,60957,60958],{"class":74,"line":2108},[72,60959,2957],{"class":82},[72,60961,60962],{"class":74,"line":2122},[72,60963,2828],{"emptyLinePlaceholder":490},[72,60965,60966,60969],{"class":74,"line":2127},[72,60967,60968],{"class":358},"        .mi",[72,60970,15998],{"class":82},[72,60972,60973,60976,60978,60980],{"class":74,"line":2156},[72,60974,60975],{"class":362},"            position",[72,60977,51855],{"class":82},[72,60979,55182],{"class":362},[72,60981,1719],{"class":82},[72,60983,60984,60986,60988,60991,60993],{"class":74,"line":2161},[72,60985,51902],{"class":362},[72,60987,51855],{"class":82},[72,60989,60990],{"class":362},"223",[72,60992,51910],{"class":78},[72,60994,1719],{"class":82},[72,60996,60997,60999,61001,61003,61005,61007],{"class":74,"line":2178},[72,60998,51852],{"class":362},[72,61000,51855],{"class":82},[72,61002,865],{"class":362},[72,61004,51910],{"class":78},[72,61006,51974],{"class":362},[72,61008,1719],{"class":82},[72,61010,61011],{"class":74,"line":2183},[72,61012,2957],{"class":82},[72,61014,61015],{"class":74,"line":2188},[72,61016,2828],{"emptyLinePlaceholder":490},[72,61018,61019,61021,61024],{"class":74,"line":2193},[72,61020,60968],{"class":358},[72,61022,61023],{"class":51718}," input",[72,61025,15998],{"class":82},[72,61027,61028,61030,61032,61034,61036],{"class":74,"line":2207},[72,61029,51902],{"class":362},[72,61031,51855],{"class":82},[72,61033,60990],{"class":362},[72,61035,51910],{"class":78},[72,61037,1719],{"class":82},[72,61039,61040,61042,61044,61046,61048],{"class":74,"line":2212},[72,61041,51917],{"class":362},[72,61043,51855],{"class":82},[72,61045,1161],{"class":362},[72,61047,51910],{"class":78},[72,61049,1719],{"class":82},[72,61051,61052,61054,61056,61058,61060,61062],{"class":74,"line":3005},[72,61053,51864],{"class":362},[72,61055,51855],{"class":82},[72,61057,747],{"class":362},[72,61059,2466],{"class":362},[72,61061,51910],{"class":78},[72,61063,1719],{"class":82},[72,61065,61066,61069,61071,61073,61075],{"class":74,"line":3019},[72,61067,61068],{"class":362},"            font-size",[72,61070,51855],{"class":82},[72,61072,1103],{"class":362},[72,61074,51910],{"class":78},[72,61076,1719],{"class":82},[72,61078,61079,61082,61084,61086,61088],{"class":74,"line":3027},[72,61080,61081],{"class":362},"            line-height",[72,61083,51855],{"class":82},[72,61085,1161],{"class":362},[72,61087,51910],{"class":78},[72,61089,1719],{"class":82},[72,61091,61092,61095,61097,61099,61101,61103,61106],{"class":74,"line":3032},[72,61093,61094],{"class":362},"            border",[72,61096,51855],{"class":82},[72,61098,772],{"class":362},[72,61100,51910],{"class":78},[72,61102,51939],{"class":362},[72,61104,61105],{"class":362}," #e0e0e0",[72,61107,1719],{"class":82},[72,61109,61110,61113,61115,61117],{"class":74,"line":3038},[72,61111,61112],{"class":362},"            outline",[72,61114,51855],{"class":82},[72,61116,55155],{"class":362},[72,61118,1719],{"class":82},[72,61120,61121],{"class":74,"line":3044},[72,61122,2957],{"class":82},[72,61124,61125],{"class":74,"line":3049},[72,61126,2828],{"emptyLinePlaceholder":490},[72,61128,61129,61131,61134],{"class":74,"line":8374},[72,61130,60968],{"class":358},[72,61132,61133],{"class":358}," .search",[72,61135,15998],{"class":82},[72,61137,61138,61140,61142,61144,61146,61148,61151],{"class":74,"line":8398},[72,61139,61094],{"class":362},[72,61141,51855],{"class":82},[72,61143,772],{"class":362},[72,61145,51910],{"class":78},[72,61147,51939],{"class":362},[72,61149,61150],{"class":362}," #ff6700",[72,61152,1719],{"class":82},[72,61154,61155],{"class":74,"line":8403},[72,61156,2957],{"class":82},[72,61158,61159],{"class":74,"line":8409},[72,61160,2828],{"emptyLinePlaceholder":490},[72,61162,61163,61166],{"class":74,"line":8436},[72,61164,61165],{"class":358},"        .result-list",[72,61167,15998],{"class":82},[72,61169,61170,61172,61174,61176],{"class":74,"line":8441},[72,61171,51890],{"class":362},[72,61173,51855],{"class":82},[72,61175,55155],{"class":362},[72,61177,1719],{"class":82},[72,61179,61180,61182,61184,61186],{"class":74,"line":8447},[72,61181,60975],{"class":362},[72,61183,51855],{"class":82},[72,61185,55249],{"class":362},[72,61187,1719],{"class":82},[72,61189,61190,61193,61195,61197],{"class":74,"line":8459},[72,61191,61192],{"class":362},"            left",[72,61194,51855],{"class":82},[72,61196,747],{"class":362},[72,61198,1719],{"class":82},[72,61200,61201,61204,61206,61208,61210],{"class":74,"line":8471},[72,61202,61203],{"class":362},"            top",[72,61205,51855],{"class":82},[72,61207,1161],{"class":362},[72,61209,51910],{"class":78},[72,61211,1719],{"class":82},[72,61213,61214,61216,61218,61220,61222],{"class":74,"line":8483},[72,61215,51902],{"class":362},[72,61217,51855],{"class":82},[72,61219,60990],{"class":362},[72,61221,51910],{"class":78},[72,61223,1719],{"class":82},[72,61225,61226,61228,61230,61232,61234,61236,61238],{"class":74,"line":10142},[72,61227,61094],{"class":362},[72,61229,51855],{"class":82},[72,61231,772],{"class":362},[72,61233,51910],{"class":78},[72,61235,51939],{"class":362},[72,61237,61150],{"class":362},[72,61239,1719],{"class":82},[72,61241,61242,61245,61247,61249],{"class":74,"line":10167},[72,61243,61244],{"class":362},"            border-top",[72,61246,51855],{"class":82},[72,61248,747],{"class":362},[72,61250,1719],{"class":82},[72,61252,61253,61256,61258,61261],{"class":74,"line":10190},[72,61254,61255],{"class":362},"            background",[72,61257,51855],{"class":82},[72,61259,61260],{"class":362},"#fff",[72,61262,1719],{"class":82},[72,61264,61265],{"class":74,"line":10214},[72,61266,2957],{"class":82},[72,61268,61269],{"class":74,"line":10219},[72,61270,2828],{"emptyLinePlaceholder":490},[72,61272,61273,61275,61277],{"class":74,"line":10224},[72,61274,61165],{"class":358},[72,61276,1827],{"class":51718},[72,61278,15998],{"class":82},[72,61280,61281,61283,61285,61288],{"class":74,"line":10229},[72,61282,51890],{"class":362},[72,61284,51855],{"class":82},[72,61286,61287],{"class":362},"block",[72,61289,1719],{"class":82},[72,61291,61292,61294,61296,61298,61300,61303,61305],{"class":74,"line":10238},[72,61293,51864],{"class":362},[72,61295,51855],{"class":82},[72,61297,898],{"class":362},[72,61299,51910],{"class":78},[72,61301,61302],{"class":362}," 15",[72,61304,51910],{"class":78},[72,61306,1719],{"class":82},[72,61308,61309,61311,61313,61315,61317],{"class":74,"line":10243},[72,61310,61068],{"class":362},[72,61312,51855],{"class":82},[72,61314,1052],{"class":362},[72,61316,51910],{"class":78},[72,61318,1719],{"class":82},[72,61320,61321,61324,61326,61329],{"class":74,"line":10249},[72,61322,61323],{"class":362},"            color",[72,61325,51855],{"class":82},[72,61327,61328],{"class":362},"#424242",[72,61330,1719],{"class":82},[72,61332,61333,61336,61338,61340],{"class":74,"line":10270},[72,61334,61335],{"class":362},"            text-decoration",[72,61337,51855],{"class":82},[72,61339,55155],{"class":362},[72,61341,1719],{"class":82},[72,61343,61344],{"class":74,"line":10276},[72,61345,2957],{"class":82},[72,61347,61348],{"class":74,"line":10290},[72,61349,2828],{"emptyLinePlaceholder":490},[72,61351,61352,61354,61356,61359],{"class":74,"line":10296},[72,61353,61165],{"class":358},[72,61355,1827],{"class":51718},[72,61357,61358],{"class":358},":hover",[72,61360,15998],{"class":82},[72,61362,61363,61365,61367,61370],{"class":74,"line":10323},[72,61364,52058],{"class":362},[72,61366,51855],{"class":82},[72,61368,61369],{"class":362},"#eee",[72,61371,1719],{"class":82},[72,61373,61374],{"class":74,"line":10332},[72,61375,2957],{"class":82},[72,61377,61378,61380,61382],{"class":74,"line":10338},[72,61379,52194],{"class":82},[72,61381,473],{"class":51718},[72,61383,51725],{"class":82},[72,61385,61386],{"class":74,"line":10346},[72,61387,2828],{"emptyLinePlaceholder":490},[72,61389,61390,61392,61394],{"class":74,"line":10351},[72,61391,52203],{"class":82},[72,61393,51752],{"class":51718},[72,61395,51725],{"class":82},[72,61397,61398],{"class":74,"line":17030},[72,61399,2828],{"emptyLinePlaceholder":490},[72,61401,61402,61404,61406],{"class":74,"line":17036},[72,61403,1464],{"class":82},[72,61405,52218],{"class":51718},[72,61407,51725],{"class":82},[72,61409,61410,61412,61414,61416,61418,61421],{"class":74,"line":17059},[72,61411,51759],{"class":82},[72,61413,52029],{"class":51718},[72,61415,53904],{"class":358},[72,61417,609],{"class":82},[72,61419,61420],{"class":366},"\"mi\"",[72,61422,51725],{"class":82},[72,61424,61425,61427,61429,61431,61433,61436,61439,61441,61444],{"class":74,"line":17065},[72,61426,55720],{"class":82},[72,61428,54239],{"class":51718},[72,61430,54242],{"class":358},[72,61432,609],{"class":82},[72,61434,61435],{"class":366},"\"search\"",[72,61437,61438],{"class":358}," placeholder",[72,61440,609],{"class":82},[72,61442,61443],{"class":366},"\"小米笔记本\"",[72,61445,51725],{"class":82},[72,61447,61448,61450,61452,61454,61456,61459],{"class":74,"line":17088},[72,61449,55720],{"class":82},[72,61451,251],{"class":51718},[72,61453,53904],{"class":358},[72,61455,609],{"class":82},[72,61457,61458],{"class":366},"\"result-list\"",[72,61460,51725],{"class":82},[72,61462,61463,61466,61468,61471,61473,61476,61478,61481,61484,61486,61488,61490],{"class":74,"line":17102},[72,61464,61465],{"class":82},"            \u003C",[72,61467,25],{"class":51718},[72,61469,61470],{"class":82},">\u003C",[72,61472,257],{"class":51718},[72,61474,61475],{"class":358}," href",[72,61477,609],{"class":82},[72,61479,61480],{"class":366},"\"#\"",[72,61482,61483],{"class":82},">全部商品\u003C\u002F",[72,61485,257],{"class":51718},[72,61487,55732],{"class":82},[72,61489,25],{"class":51718},[72,61491,51725],{"class":82},[72,61493,61494,61496,61498,61500,61502,61504,61506,61508,61511,61513,61515,61517],{"class":74,"line":17122},[72,61495,61465],{"class":82},[72,61497,25],{"class":51718},[72,61499,61470],{"class":82},[72,61501,257],{"class":51718},[72,61503,61475],{"class":358},[72,61505,609],{"class":82},[72,61507,61480],{"class":366},[72,61509,61510],{"class":82},">小米11\u003C\u002F",[72,61512,257],{"class":51718},[72,61514,55732],{"class":82},[72,61516,25],{"class":51718},[72,61518,51725],{"class":82},[72,61520,61521,61523,61525,61527,61529,61531,61533,61535,61538,61540,61542,61544],{"class":74,"line":17128},[72,61522,61465],{"class":82},[72,61524,25],{"class":51718},[72,61526,61470],{"class":82},[72,61528,257],{"class":51718},[72,61530,61475],{"class":358},[72,61532,609],{"class":82},[72,61534,61480],{"class":366},[72,61536,61537],{"class":82},">小米10S\u003C\u002F",[72,61539,257],{"class":51718},[72,61541,55732],{"class":82},[72,61543,25],{"class":51718},[72,61545,51725],{"class":82},[72,61547,61548,61550,61552,61554,61556,61558,61560,61562,61565,61567,61569,61571],{"class":74,"line":17139},[72,61549,61465],{"class":82},[72,61551,25],{"class":51718},[72,61553,61470],{"class":82},[72,61555,257],{"class":51718},[72,61557,61475],{"class":358},[72,61559,609],{"class":82},[72,61561,61480],{"class":366},[72,61563,61564],{"class":82},">小米笔记本\u003C\u002F",[72,61566,257],{"class":51718},[72,61568,55732],{"class":82},[72,61570,25],{"class":51718},[72,61572,51725],{"class":82},[72,61574,61575,61577,61579,61581,61583,61585,61587,61589,61592,61594,61596,61598],{"class":74,"line":17162},[72,61576,61465],{"class":82},[72,61578,25],{"class":51718},[72,61580,61470],{"class":82},[72,61582,257],{"class":51718},[72,61584,61475],{"class":358},[72,61586,609],{"class":82},[72,61588,61480],{"class":366},[72,61590,61591],{"class":82},">小米手机\u003C\u002F",[72,61593,257],{"class":51718},[72,61595,55732],{"class":82},[72,61597,25],{"class":51718},[72,61599,51725],{"class":82},[72,61601,61602,61604,61606,61608,61610,61612,61614,61616,61619,61621,61623,61625],{"class":74,"line":17184},[72,61603,61465],{"class":82},[72,61605,25],{"class":51718},[72,61607,61470],{"class":82},[72,61609,257],{"class":51718},[72,61611,61475],{"class":358},[72,61613,609],{"class":82},[72,61615,61480],{"class":366},[72,61617,61618],{"class":82},">黑鲨4\u003C\u002F",[72,61620,257],{"class":51718},[72,61622,55732],{"class":82},[72,61624,25],{"class":51718},[72,61626,51725],{"class":82},[72,61628,61629,61631,61633,61635,61637,61639,61641,61643,61646,61648,61650,61652],{"class":74,"line":17189},[72,61630,61465],{"class":82},[72,61632,25],{"class":51718},[72,61634,61470],{"class":82},[72,61636,257],{"class":51718},[72,61638,61475],{"class":358},[72,61640,609],{"class":82},[72,61642,61480],{"class":366},[72,61644,61645],{"class":82},">空调\u003C\u002F",[72,61647,257],{"class":51718},[72,61649,55732],{"class":82},[72,61651,25],{"class":51718},[72,61653,51725],{"class":82},[72,61655,61656,61659,61661],{"class":74,"line":17195},[72,61657,61658],{"class":82},"        \u003C\u002F",[72,61660,251],{"class":51718},[72,61662,51725],{"class":82},[72,61664,61665,61667,61669],{"class":74,"line":17209},[72,61666,52194],{"class":82},[72,61668,52029],{"class":51718},[72,61670,51725],{"class":82},[72,61672,61673,61675,61677],{"class":74,"line":17222},[72,61674,51759],{"class":82},[72,61676,52231],{"class":51718},[72,61678,51725],{"class":82},[72,61680,61681],{"class":74,"line":17227},[72,61682,61683],{"class":621},"        \u002F\u002F 1. 获取元素\n",[72,61685,61686,61689,61691,61693,61695,61697,61699,61702],{"class":74,"line":17241},[72,61687,61688],{"class":78},"        const",[72,61690,61023],{"class":362},[72,61692,13990],{"class":78},[72,61694,54814],{"class":82},[72,61696,54817],{"class":358},[72,61698,564],{"class":82},[72,61700,61701],{"class":366},"'[type=search]'",[72,61703,570],{"class":82},[72,61705,61706,61708,61711,61713,61715,61717,61719,61722],{"class":74,"line":17246},[72,61707,61688],{"class":78},[72,61709,61710],{"class":362}," ul",[72,61712,13990],{"class":78},[72,61714,54814],{"class":82},[72,61716,54817],{"class":358},[72,61718,564],{"class":82},[72,61720,61721],{"class":366},"'.result-list'",[72,61723,570],{"class":82},[72,61725,61726],{"class":74,"line":17252},[72,61727,61728],{"class":621},"        \u002F\u002F console.log(input)\n",[72,61730,61731],{"class":74,"line":17257},[72,61732,61733],{"class":621},"        \u002F\u002F 2. 监听事件 获得焦点\n",[72,61735,61736,61739,61741,61743,61746,61748,61750],{"class":74,"line":17271},[72,61737,61738],{"class":82},"        input.",[72,61740,58231],{"class":358},[72,61742,564],{"class":82},[72,61744,61745],{"class":366},"'focus'",[72,61747,12861],{"class":82},[72,61749,54867],{"class":78},[72,61751,54870],{"class":82},[72,61753,61754],{"class":74,"line":17276},[72,61755,61756],{"class":621},"            \u002F\u002F ul显示\n",[72,61758,61759,61762,61764],{"class":74,"line":17281},[72,61760,61761],{"class":82},"            ul.style.display ",[72,61763,609],{"class":78},[72,61765,61766],{"class":366}," 'block'\n",[72,61768,61769],{"class":74,"line":17295},[72,61770,61771],{"class":621},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[72,61773,61774,61777,61779,61781,61784],{"class":74,"line":17307},[72,61775,61776],{"class":82},"            input.classList.",[72,61778,5760],{"class":358},[72,61780,564],{"class":82},[72,61782,61783],{"class":366},"'search'",[72,61785,570],{"class":82},[72,61787,61788],{"class":74,"line":17312},[72,61789,61790],{"class":82},"        })\n",[72,61792,61793],{"class":74,"line":17325},[72,61794,61795],{"class":621},"        \u002F\u002F 3. 监听事件 失去焦点\n",[72,61797,61798,61800,61802,61804,61807,61809,61811],{"class":74,"line":17330},[72,61799,61738],{"class":82},[72,61801,58231],{"class":358},[72,61803,564],{"class":82},[72,61805,61806],{"class":366},"'blur'",[72,61808,12861],{"class":82},[72,61810,54867],{"class":78},[72,61812,54870],{"class":82},[72,61814,61815,61817,61819],{"class":74,"line":17335},[72,61816,61761],{"class":82},[72,61818,609],{"class":78},[72,61820,61821],{"class":366}," 'none'\n",[72,61823,61824,61826,61828,61830,61832],{"class":74,"line":17340},[72,61825,61776],{"class":82},[72,61827,57424],{"class":358},[72,61829,564],{"class":82},[72,61831,61783],{"class":366},[72,61833,570],{"class":82},[72,61835,61836],{"class":74,"line":17353},[72,61837,61790],{"class":82},[72,61839,61840,61842,61844],{"class":74,"line":17358},[72,61841,52194],{"class":82},[72,61843,52231],{"class":51718},[72,61845,51725],{"class":82},[72,61847,61848,61850,61852],{"class":74,"line":33051},[72,61849,52203],{"class":82},[72,61851,52218],{"class":51718},[72,61853,51725],{"class":82},[72,61855,61856],{"class":74,"line":33057},[72,61857,2828],{"emptyLinePlaceholder":490},[72,61859,61860,61862,61864],{"class":74,"line":33063},[72,61861,52203],{"class":82},[72,61863,51053],{"class":51718},[72,61865,51725],{"class":82},[22423,61867,61869],{"id":61868},"_3253-键盘事件","3.2.5.3 键盘事件",[15,61871,61872],{},"评论字数统计案例",[15,61874,61875],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[15,61877,61878],{},"牢记focus伪类选择器",[51762,61880],{"charSet":61881},"UTF-8",[51762,61883],{"name":61884,"content":61885},"viewport","width=device-width, initial-scale=1.0",[51825,61887,61888],{},"Document",[473,61890,61891],{},"\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",[54239,61893],{"type":127},[251,61895,61896,61899],{},[25,61897,61898],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[25,61900,61901],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[63,61903,61905],{"className":51051,"code":61904,"language":51053,"meta":68,"style":68},"\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",[34,61906,61907,61917,61931,61935,61943,61957,61977,61997,62010,62018,62025,62038,62052,62062,62072,62076,62080,62087,62099,62111,62123,62135,62164,62177,62181,62185,62194,62205,62217,62228,62239,62251,62262,62274,62290,62302,62306,62310,62321,62332,62342,62354,62358,62362,62370,62381,62391,62402,62414,62427,62439,62451,62455,62459,62468,62480,62491,62504,62515,62529,62533,62537,62544,62556,62568,62578,62582,62586,62595,62607,62617,62621,62625,62636,62646,62665,62678,62682,62686,62696,62706,62710,62714,62725,62736,62748,62760,62764,62768,62779,62790,62804,62808,62812,62823,62833,62845,62849,62857,62865,62869,62877,62892,62911,62951,62964,62972,62986,63006,63014,63029,63052,63070,63085,63105,63125,63145,63153,63161,63169,63177,63197,63217,63222,63239,63248,63252,63257,63273,63281,63285,63290,63307,63312,63337,63341,63345,63350,63355,63363,63371,63375],{"__ignoreMap":68},[72,61908,61909,61911,61913,61915],{"class":74,"line":75},[72,61910,51715],{"class":82},[72,61912,51719],{"class":51718},[72,61914,51722],{"class":358},[72,61916,51725],{"class":82},[72,61918,61919,61921,61923,61925,61927,61929],{"class":74,"line":370},[72,61920,1464],{"class":82},[72,61922,51053],{"class":51718},[72,61924,51734],{"class":358},[72,61926,609],{"class":82},[72,61928,51739],{"class":366},[72,61930,51725],{"class":82},[72,61932,61933],{"class":74,"line":1608},[72,61934,2828],{"emptyLinePlaceholder":490},[72,61936,61937,61939,61941],{"class":74,"line":1623},[72,61938,1464],{"class":82},[72,61940,51752],{"class":51718},[72,61942,51725],{"class":82},[72,61944,61945,61947,61949,61951,61953,61955],{"class":74,"line":1629},[72,61946,52562],{"class":82},[72,61948,51762],{"class":51718},[72,61950,51765],{"class":358},[72,61952,609],{"class":82},[72,61954,51770],{"class":366},[72,61956,51725],{"class":82},[72,61958,61959,61961,61963,61965,61967,61969,61971,61973,61975],{"class":74,"line":1643},[72,61960,52562],{"class":82},[72,61962,51762],{"class":51718},[72,61964,51781],{"class":358},[72,61966,609],{"class":82},[72,61968,51786],{"class":366},[72,61970,51789],{"class":358},[72,61972,609],{"class":82},[72,61974,51794],{"class":366},[72,61976,51725],{"class":82},[72,61978,61979,61981,61983,61985,61987,61989,61991,61993,61995],{"class":74,"line":1649},[72,61980,52562],{"class":82},[72,61982,51762],{"class":51718},[72,61984,15346],{"class":358},[72,61986,609],{"class":82},[72,61988,51809],{"class":366},[72,61990,51789],{"class":358},[72,61992,609],{"class":82},[72,61994,51816],{"class":366},[72,61996,51725],{"class":82},[72,61998,61999,62001,62003,62006,62008],{"class":74,"line":1740},[72,62000,52562],{"class":82},[72,62002,51825],{"class":51718},[72,62004,62005],{"class":82},">评论回车发布\u003C\u002F",[72,62007,51825],{"class":51718},[72,62009,51725],{"class":82},[72,62011,62012,62014,62016],{"class":74,"line":1746},[72,62013,52562],{"class":82},[72,62015,473],{"class":51718},[72,62017,51725],{"class":82},[72,62019,62020,62023],{"class":74,"line":1758},[72,62021,62022],{"class":358},"    .wrapper",[72,62024,15998],{"class":82},[72,62026,62027,62030,62032,62034,62036],{"class":74,"line":2041},[72,62028,62029],{"class":362},"      min-width",[72,62031,51855],{"class":82},[72,62033,4415],{"class":362},[72,62035,51910],{"class":78},[72,62037,1719],{"class":82},[72,62039,62040,62043,62045,62048,62050],{"class":74,"line":2046},[72,62041,62042],{"class":362},"      max-width",[72,62044,51855],{"class":82},[72,62046,62047],{"class":362},"800",[72,62049,51910],{"class":78},[72,62051,1719],{"class":82},[72,62053,62054,62056,62058,62060],{"class":74,"line":2052},[72,62055,55427],{"class":362},[72,62057,51855],{"class":82},[72,62059,51895],{"class":362},[72,62061,1719],{"class":82},[72,62063,62064,62066,62068,62070],{"class":74,"line":2057},[72,62065,55438],{"class":362},[72,62067,51855],{"class":82},[72,62069,51998],{"class":362},[72,62071,1719],{"class":82},[72,62073,62074],{"class":74,"line":2071},[72,62075,2615],{"class":82},[72,62077,62078],{"class":74,"line":2076},[72,62079,2828],{"emptyLinePlaceholder":490},[72,62081,62082,62085],{"class":74,"line":2082},[72,62083,62084],{"class":358},"    .avatar",[72,62086,15998],{"class":82},[72,62088,62089,62091,62093,62095,62097],{"class":74,"line":2103},[72,62090,55189],{"class":362},[72,62092,51855],{"class":82},[72,62094,1161],{"class":362},[72,62096,51910],{"class":78},[72,62098,1719],{"class":82},[72,62100,62101,62103,62105,62107,62109],{"class":74,"line":2108},[72,62102,55203],{"class":362},[72,62104,51855],{"class":82},[72,62106,1161],{"class":362},[72,62108,51910],{"class":78},[72,62110,1719],{"class":82},[72,62112,62113,62115,62117,62119,62121],{"class":74,"line":2122},[72,62114,55552],{"class":362},[72,62116,51855],{"class":82},[72,62118,1210],{"class":362},[72,62120,882],{"class":78},[72,62122,1719],{"class":82},[72,62124,62125,62128,62130,62133],{"class":74,"line":2127},[72,62126,62127],{"class":362},"      overflow",[72,62129,51855],{"class":82},[72,62131,62132],{"class":362},"hidden",[72,62134,1719],{"class":82},[72,62136,62137,62140,62142,62145,62147,62150,62152,62155,62157,62159,62162],{"class":74,"line":2156},[72,62138,62139],{"class":362},"      background",[72,62141,51855],{"class":82},[72,62143,62144],{"class":362},"url",[72,62146,564],{"class":82},[72,62148,62149],{"class":5642},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[72,62151,14140],{"class":82},[72,62153,62154],{"class":362},"no-repeat",[72,62156,17570],{"class":362},[72,62158,25400],{"class":82},[72,62160,62161],{"class":362},"cover",[72,62163,1719],{"class":82},[72,62165,62166,62169,62171,62173,62175],{"class":74,"line":2161},[72,62167,62168],{"class":362},"      margin-right",[72,62170,51855],{"class":82},[72,62172,1254],{"class":362},[72,62174,51910],{"class":78},[72,62176,1719],{"class":82},[72,62178,62179],{"class":74,"line":2178},[72,62180,2615],{"class":82},[72,62182,62183],{"class":74,"line":2183},[72,62184,2828],{"emptyLinePlaceholder":490},[72,62186,62187,62189,62192],{"class":74,"line":2188},[72,62188,62022],{"class":358},[72,62190,62191],{"class":51718}," textarea",[72,62193,15998],{"class":82},[72,62195,62196,62199,62201,62203],{"class":74,"line":2193},[72,62197,62198],{"class":362},"      outline",[72,62200,51855],{"class":82},[72,62202,55155],{"class":362},[72,62204,1719],{"class":82},[72,62206,62207,62210,62212,62215],{"class":74,"line":2207},[72,62208,62209],{"class":362},"      border-color",[72,62211,51855],{"class":82},[72,62213,62214],{"class":362},"transparent",[72,62216,1719],{"class":82},[72,62218,62219,62222,62224,62226],{"class":74,"line":2212},[72,62220,62221],{"class":362},"      resize",[72,62223,51855],{"class":82},[72,62225,55155],{"class":362},[72,62227,1719],{"class":82},[72,62229,62230,62232,62234,62237],{"class":74,"line":3005},[72,62231,62139],{"class":362},[72,62233,51855],{"class":82},[72,62235,62236],{"class":362},"#f5f5f5",[72,62238,1719],{"class":82},[72,62240,62241,62243,62245,62247,62249],{"class":74,"line":3019},[72,62242,55552],{"class":362},[72,62244,51855],{"class":82},[72,62246,847],{"class":362},[72,62248,51910],{"class":78},[72,62250,1719],{"class":82},[72,62252,62253,62256,62258,62260],{"class":74,"line":3027},[72,62254,62255],{"class":362},"      flex",[72,62257,51855],{"class":82},[72,62259,772],{"class":362},[72,62261,1719],{"class":82},[72,62263,62264,62266,62268,62270,62272],{"class":74,"line":3032},[72,62265,55113],{"class":362},[72,62267,51855],{"class":82},[72,62269,1000],{"class":362},[72,62271,51910],{"class":78},[72,62273,1719],{"class":82},[72,62275,62276,62279,62281,62283,62286,62288],{"class":74,"line":3038},[72,62277,62278],{"class":362},"      transition",[72,62280,51855],{"class":82},[72,62282,28543],{"class":362},[72,62284,62285],{"class":362}," 0.5",[72,62287,1249],{"class":78},[72,62289,1719],{"class":82},[72,62291,62292,62294,62296,62298,62300],{"class":74,"line":3044},[72,62293,55203],{"class":362},[72,62295,51855],{"class":82},[72,62297,1505],{"class":362},[72,62299,51910],{"class":78},[72,62301,1719],{"class":82},[72,62303,62304],{"class":74,"line":3049},[72,62305,2615],{"class":82},[72,62307,62308],{"class":74,"line":8374},[72,62309,2828],{"emptyLinePlaceholder":490},[72,62311,62312,62314,62316,62319],{"class":74,"line":8398},[72,62313,62022],{"class":358},[72,62315,62191],{"class":51718},[72,62317,62318],{"class":358},":focus",[72,62320,15998],{"class":82},[72,62322,62323,62325,62327,62330],{"class":74,"line":8403},[72,62324,62209],{"class":362},[72,62326,51855],{"class":82},[72,62328,62329],{"class":362},"#e4e4e4",[72,62331,1719],{"class":82},[72,62333,62334,62336,62338,62340],{"class":74,"line":8409},[72,62335,62139],{"class":362},[72,62337,51855],{"class":82},[72,62339,61260],{"class":362},[72,62341,1719],{"class":82},[72,62343,62344,62346,62348,62350,62352],{"class":74,"line":8436},[72,62345,55203],{"class":362},[72,62347,51855],{"class":82},[72,62349,1210],{"class":362},[72,62351,51910],{"class":78},[72,62353,1719],{"class":82},[72,62355,62356],{"class":74,"line":8441},[72,62357,2615],{"class":82},[72,62359,62360],{"class":74,"line":8447},[72,62361,2828],{"emptyLinePlaceholder":490},[72,62363,62364,62366,62368],{"class":74,"line":8459},[72,62365,62022],{"class":358},[72,62367,57885],{"class":51718},[72,62369,15998],{"class":82},[72,62371,62372,62374,62376,62379],{"class":74,"line":8471},[72,62373,62139],{"class":362},[72,62375,51855],{"class":82},[72,62377,62378],{"class":362},"#00aeec",[72,62380,1719],{"class":82},[72,62382,62383,62385,62387,62389],{"class":74,"line":8483},[72,62384,57834],{"class":362},[72,62386,51855],{"class":82},[72,62388,61260],{"class":362},[72,62390,1719],{"class":82},[72,62392,62393,62396,62398,62400],{"class":74,"line":10142},[72,62394,62395],{"class":362},"      border",[72,62397,51855],{"class":82},[72,62399,55155],{"class":362},[72,62401,1719],{"class":82},[72,62403,62404,62406,62408,62410,62412],{"class":74,"line":10167},[72,62405,55552],{"class":362},[72,62407,51855],{"class":82},[72,62409,847],{"class":362},[72,62411,51910],{"class":78},[72,62413,1719],{"class":82},[72,62415,62416,62419,62421,62423,62425],{"class":74,"line":10190},[72,62417,62418],{"class":362},"      margin-left",[72,62420,51855],{"class":82},[72,62422,1000],{"class":362},[72,62424,51910],{"class":78},[72,62426,1719],{"class":82},[72,62428,62429,62431,62433,62435,62437],{"class":74,"line":10214},[72,62430,55189],{"class":362},[72,62432,51855],{"class":82},[72,62434,910],{"class":362},[72,62436,51910],{"class":78},[72,62438,1719],{"class":82},[72,62440,62441,62444,62446,62449],{"class":74,"line":10219},[72,62442,62443],{"class":362},"      cursor",[72,62445,51855],{"class":82},[72,62447,62448],{"class":362},"pointer",[72,62450,1719],{"class":82},[72,62452,62453],{"class":74,"line":10224},[72,62454,2615],{"class":82},[72,62456,62457],{"class":74,"line":10229},[72,62458,2828],{"emptyLinePlaceholder":490},[72,62460,62461,62463,62466],{"class":74,"line":10238},[72,62462,62022],{"class":358},[72,62464,62465],{"class":358}," .total",[72,62467,15998],{"class":82},[72,62469,62470,62472,62474,62476,62478],{"class":74,"line":10243},[72,62471,62168],{"class":362},[72,62473,51855],{"class":82},[72,62475,1166],{"class":362},[72,62477,51910],{"class":78},[72,62479,1719],{"class":82},[72,62481,62482,62484,62486,62489],{"class":74,"line":10249},[72,62483,57834],{"class":362},[72,62485,51855],{"class":82},[72,62487,62488],{"class":362},"#999",[72,62490,1719],{"class":82},[72,62492,62493,62496,62498,62500,62502],{"class":74,"line":10270},[72,62494,62495],{"class":362},"      margin-top",[72,62497,51855],{"class":82},[72,62499,873],{"class":362},[72,62501,51910],{"class":78},[72,62503,1719],{"class":82},[72,62505,62506,62509,62511,62513],{"class":74,"line":10276},[72,62507,62508],{"class":362},"      opacity",[72,62510,51855],{"class":82},[72,62512,747],{"class":362},[72,62514,1719],{"class":82},[72,62516,62517,62519,62521,62523,62525,62527],{"class":74,"line":10290},[72,62518,62278],{"class":362},[72,62520,51855],{"class":82},[72,62522,28543],{"class":362},[72,62524,62285],{"class":362},[72,62526,1249],{"class":78},[72,62528,1719],{"class":82},[72,62530,62531],{"class":74,"line":10296},[72,62532,2615],{"class":82},[72,62534,62535],{"class":74,"line":10323},[72,62536,2828],{"emptyLinePlaceholder":490},[72,62538,62539,62542],{"class":74,"line":10332},[72,62540,62541],{"class":358},"    .list",[72,62543,15998],{"class":82},[72,62545,62546,62548,62550,62552,62554],{"class":74,"line":10338},[72,62547,62029],{"class":362},[72,62549,51855],{"class":82},[72,62551,4415],{"class":362},[72,62553,51910],{"class":78},[72,62555,1719],{"class":82},[72,62557,62558,62560,62562,62564,62566],{"class":74,"line":10346},[72,62559,62042],{"class":362},[72,62561,51855],{"class":82},[72,62563,62047],{"class":362},[72,62565,51910],{"class":78},[72,62567,1719],{"class":82},[72,62569,62570,62572,62574,62576],{"class":74,"line":10351},[72,62571,55427],{"class":362},[72,62573,51855],{"class":82},[72,62575,51895],{"class":362},[72,62577,1719],{"class":82},[72,62579,62580],{"class":74,"line":17030},[72,62581,2615],{"class":82},[72,62583,62584],{"class":74,"line":17036},[72,62585,2828],{"emptyLinePlaceholder":490},[72,62587,62588,62590,62593],{"class":74,"line":17059},[72,62589,62541],{"class":358},[72,62591,62592],{"class":358}," .item",[72,62594,15998],{"class":82},[72,62596,62597,62599,62601,62603,62605],{"class":74,"line":17065},[72,62598,55189],{"class":362},[72,62600,51855],{"class":82},[72,62602,865],{"class":362},[72,62604,882],{"class":78},[72,62606,1719],{"class":82},[72,62608,62609,62611,62613,62615],{"class":74,"line":17088},[72,62610,55427],{"class":362},[72,62612,51855],{"class":82},[72,62614,51895],{"class":362},[72,62616,1719],{"class":82},[72,62618,62619],{"class":74,"line":17102},[72,62620,2615],{"class":82},[72,62622,62623],{"class":74,"line":17122},[72,62624,2828],{"emptyLinePlaceholder":490},[72,62626,62627,62629,62631,62634],{"class":74,"line":17128},[72,62628,62541],{"class":358},[72,62630,62592],{"class":358},[72,62632,62633],{"class":358}," .info",[72,62635,15998],{"class":82},[72,62637,62638,62640,62642,62644],{"class":74,"line":17139},[72,62639,62255],{"class":362},[72,62641,51855],{"class":82},[72,62643,772],{"class":362},[72,62645,1719],{"class":82},[72,62647,62648,62651,62653,62655,62657,62660,62663],{"class":74,"line":17162},[72,62649,62650],{"class":362},"      border-bottom",[72,62652,51855],{"class":82},[72,62654,772],{"class":362},[72,62656,51910],{"class":78},[72,62658,62659],{"class":362}," dashed",[72,62661,62662],{"class":362}," #e4e4e4",[72,62664,1719],{"class":82},[72,62666,62667,62670,62672,62674,62676],{"class":74,"line":17184},[72,62668,62669],{"class":362},"      padding-bottom",[72,62671,51855],{"class":82},[72,62673,1000],{"class":362},[72,62675,51910],{"class":78},[72,62677,1719],{"class":82},[72,62679,62680],{"class":74,"line":17189},[72,62681,2615],{"class":82},[72,62683,62684],{"class":74,"line":17195},[72,62685,2828],{"emptyLinePlaceholder":490},[72,62687,62688,62690,62692,62694],{"class":74,"line":17209},[72,62689,62541],{"class":358},[72,62691,62592],{"class":358},[72,62693,7251],{"class":51718},[72,62695,15998],{"class":82},[72,62697,62698,62700,62702,62704],{"class":74,"line":17222},[72,62699,55124],{"class":362},[72,62701,51855],{"class":82},[72,62703,747],{"class":362},[72,62705,1719],{"class":82},[72,62707,62708],{"class":74,"line":17227},[72,62709,2615],{"class":82},[72,62711,62712],{"class":74,"line":17241},[72,62713,2828],{"emptyLinePlaceholder":490},[72,62715,62716,62718,62720,62723],{"class":74,"line":17246},[72,62717,62541],{"class":358},[72,62719,62592],{"class":358},[72,62721,62722],{"class":358}," .name",[72,62724,15998],{"class":82},[72,62726,62727,62729,62731,62734],{"class":74,"line":17252},[72,62728,57834],{"class":362},[72,62730,51855],{"class":82},[72,62732,62733],{"class":362},"#FB7299",[72,62735,1719],{"class":82},[72,62737,62738,62740,62742,62744,62746],{"class":74,"line":17257},[72,62739,55340],{"class":362},[72,62741,51855],{"class":82},[72,62743,1103],{"class":362},[72,62745,51910],{"class":78},[72,62747,1719],{"class":82},[72,62749,62750,62753,62755,62758],{"class":74,"line":17271},[72,62751,62752],{"class":362},"      font-weight",[72,62754,51855],{"class":82},[72,62756,62757],{"class":362},"bold",[72,62759,1719],{"class":82},[72,62761,62762],{"class":74,"line":17276},[72,62763,2615],{"class":82},[72,62765,62766],{"class":74,"line":17281},[72,62767,2828],{"emptyLinePlaceholder":490},[72,62769,62770,62772,62774,62777],{"class":74,"line":17295},[72,62771,62541],{"class":358},[72,62773,62592],{"class":358},[72,62775,62776],{"class":358}," .text",[72,62778,15998],{"class":82},[72,62780,62781,62783,62785,62788],{"class":74,"line":17307},[72,62782,57834],{"class":362},[72,62784,51855],{"class":82},[72,62786,62787],{"class":362},"#333",[72,62789,1719],{"class":82},[72,62791,62792,62794,62796,62798,62800,62802],{"class":74,"line":17312},[72,62793,55113],{"class":362},[72,62795,51855],{"class":82},[72,62797,1000],{"class":362},[72,62799,51910],{"class":78},[72,62801,4521],{"class":362},[72,62803,1719],{"class":82},[72,62805,62806],{"class":74,"line":17325},[72,62807,2615],{"class":82},[72,62809,62810],{"class":74,"line":17330},[72,62811,2828],{"emptyLinePlaceholder":490},[72,62813,62814,62816,62818,62821],{"class":74,"line":17335},[72,62815,62541],{"class":358},[72,62817,62592],{"class":358},[72,62819,62820],{"class":358}," .time",[72,62822,15998],{"class":82},[72,62824,62825,62827,62829,62831],{"class":74,"line":17340},[72,62826,57834],{"class":362},[72,62828,51855],{"class":82},[72,62830,62488],{"class":362},[72,62832,1719],{"class":82},[72,62834,62835,62837,62839,62841,62843],{"class":74,"line":17353},[72,62836,55340],{"class":362},[72,62838,51855],{"class":82},[72,62840,1052],{"class":362},[72,62842,51910],{"class":78},[72,62844,1719],{"class":82},[72,62846,62847],{"class":74,"line":17358},[72,62848,2615],{"class":82},[72,62850,62851,62853,62855],{"class":74,"line":33051},[72,62852,52835],{"class":82},[72,62854,473],{"class":51718},[72,62856,51725],{"class":82},[72,62858,62859,62861,62863],{"class":74,"line":33057},[72,62860,52203],{"class":82},[72,62862,51752],{"class":51718},[72,62864,51725],{"class":82},[72,62866,62867],{"class":74,"line":33063},[72,62868,2828],{"emptyLinePlaceholder":490},[72,62870,62871,62873,62875],{"class":74,"line":33069},[72,62872,1464],{"class":82},[72,62874,52218],{"class":51718},[72,62876,51725],{"class":82},[72,62878,62879,62881,62883,62885,62887,62890],{"class":74,"line":33075},[72,62880,52562],{"class":82},[72,62882,52029],{"class":51718},[72,62884,53904],{"class":358},[72,62886,609],{"class":82},[72,62888,62889],{"class":366},"\"wrapper\"",[72,62891,51725],{"class":82},[72,62893,62894,62896,62898,62900,62902,62905,62907,62909],{"class":74,"line":33086},[72,62895,51759],{"class":82},[72,62897,995],{"class":51718},[72,62899,53904],{"class":358},[72,62901,609],{"class":82},[72,62903,62904],{"class":366},"\"avatar\"",[72,62906,55732],{"class":82},[72,62908,995],{"class":51718},[72,62910,51725],{"class":82},[72,62912,62913,62915,62917,62919,62921,62924,62926,62928,62931,62933,62935,62937,62940,62942,62945,62947,62949],{"class":74,"line":33092},[72,62914,51759],{"class":82},[72,62916,54706],{"class":51718},[72,62918,15385],{"class":358},[72,62920,609],{"class":82},[72,62922,62923],{"class":366},"\"tx\"",[72,62925,61438],{"class":358},[72,62927,609],{"class":82},[72,62929,62930],{"class":366},"\"发一条友善的评论\"",[72,62932,54729],{"class":358},[72,62934,609],{"class":82},[72,62936,4129],{"class":366},[72,62938,62939],{"class":358}," maxlength",[72,62941,609],{"class":82},[72,62943,62944],{"class":366},"\"200\"",[72,62946,55732],{"class":82},[72,62948,54706],{"class":51718},[72,62950,51725],{"class":82},[72,62952,62953,62955,62957,62960,62962],{"class":74,"line":33112},[72,62954,51759],{"class":82},[72,62956,54305],{"class":51718},[72,62958,62959],{"class":82},">发布\u003C\u002F",[72,62961,54305],{"class":51718},[72,62963,51725],{"class":82},[72,62965,62966,62968,62970],{"class":74,"line":33118},[72,62967,52835],{"class":82},[72,62969,52029],{"class":51718},[72,62971,51725],{"class":82},[72,62973,62974,62976,62978,62980,62982,62984],{"class":74,"line":33129},[72,62975,52562],{"class":82},[72,62977,52029],{"class":51718},[72,62979,53904],{"class":358},[72,62981,609],{"class":82},[72,62983,62889],{"class":366},[72,62985,51725],{"class":82},[72,62987,62988,62990,62992,62994,62996,62999,63002,63004],{"class":74,"line":33135},[72,62989,51759],{"class":82},[72,62991,72],{"class":51718},[72,62993,53904],{"class":358},[72,62995,609],{"class":82},[72,62997,62998],{"class":366},"\"total\"",[72,63000,63001],{"class":82},">0\u002F200字\u003C\u002F",[72,63003,72],{"class":51718},[72,63005,51725],{"class":82},[72,63007,63008,63010,63012],{"class":74,"line":33141},[72,63009,52835],{"class":82},[72,63011,52029],{"class":51718},[72,63013,51725],{"class":82},[72,63015,63016,63018,63020,63022,63024,63027],{"class":74,"line":33147},[72,63017,52562],{"class":82},[72,63019,52029],{"class":51718},[72,63021,53904],{"class":358},[72,63023,609],{"class":82},[72,63025,63026],{"class":366},"\"list\"",[72,63028,51725],{"class":82},[72,63030,63031,63033,63035,63037,63039,63042,63045,63047,63050],{"class":74,"line":33153},[72,63032,51759],{"class":82},[72,63034,52029],{"class":51718},[72,63036,53904],{"class":358},[72,63038,609],{"class":82},[72,63040,63041],{"class":366},"\"item\"",[72,63043,63044],{"class":358}," style",[72,63046,609],{"class":82},[72,63048,63049],{"class":366},"\"display: none;\"",[72,63051,51725],{"class":82},[72,63053,63054,63056,63058,63060,63062,63064,63066,63068],{"class":74,"line":33159},[72,63055,55652],{"class":82},[72,63057,995],{"class":51718},[72,63059,53904],{"class":358},[72,63061,609],{"class":82},[72,63063,62904],{"class":366},[72,63065,55732],{"class":82},[72,63067,995],{"class":51718},[72,63069,51725],{"class":82},[72,63071,63072,63074,63076,63078,63080,63083],{"class":74,"line":33165},[72,63073,55652],{"class":82},[72,63075,52029],{"class":51718},[72,63077,53904],{"class":358},[72,63079,609],{"class":82},[72,63081,63082],{"class":366},"\"info\"",[72,63084,51725],{"class":82},[72,63086,63087,63089,63091,63093,63095,63098,63101,63103],{"class":74,"line":33171},[72,63088,55720],{"class":82},[72,63090,15],{"class":51718},[72,63092,53904],{"class":358},[72,63094,609],{"class":82},[72,63096,63097],{"class":366},"\"name\"",[72,63099,63100],{"class":82},">清风徐来\u003C\u002F",[72,63102,15],{"class":51718},[72,63104,51725],{"class":82},[72,63106,63107,63109,63111,63113,63115,63118,63121,63123],{"class":74,"line":33191},[72,63108,55720],{"class":82},[72,63110,15],{"class":51718},[72,63112,53904],{"class":358},[72,63114,609],{"class":82},[72,63116,63117],{"class":366},"\"text\"",[72,63119,63120],{"class":82},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[72,63122,15],{"class":51718},[72,63124,51725],{"class":82},[72,63126,63127,63129,63131,63133,63135,63138,63141,63143],{"class":74,"line":33197},[72,63128,55720],{"class":82},[72,63130,15],{"class":51718},[72,63132,53904],{"class":358},[72,63134,609],{"class":82},[72,63136,63137],{"class":366},"\"time\"",[72,63139,63140],{"class":82},">2022-10-10 20:29:21\u003C\u002F",[72,63142,15],{"class":51718},[72,63144,51725],{"class":82},[72,63146,63147,63149,63151],{"class":74,"line":33213},[72,63148,55825],{"class":82},[72,63150,52029],{"class":51718},[72,63152,51725],{"class":82},[72,63154,63155,63157,63159],{"class":74,"line":33219},[72,63156,52194],{"class":82},[72,63158,52029],{"class":51718},[72,63160,51725],{"class":82},[72,63162,63163,63165,63167],{"class":74,"line":33233},[72,63164,52835],{"class":82},[72,63166,52029],{"class":51718},[72,63168,51725],{"class":82},[72,63170,63171,63173,63175],{"class":74,"line":33239},[72,63172,52562],{"class":82},[72,63174,52231],{"class":51718},[72,63176,51725],{"class":82},[72,63178,63179,63181,63184,63186,63188,63190,63192,63195],{"class":74,"line":33254},[72,63180,11647],{"class":78},[72,63182,63183],{"class":362}," tx",[72,63185,13990],{"class":78},[72,63187,54814],{"class":82},[72,63189,54817],{"class":358},[72,63191,564],{"class":82},[72,63193,63194],{"class":366},"'#tx'",[72,63196,570],{"class":82},[72,63198,63199,63201,63204,63206,63208,63210,63212,63215],{"class":74,"line":33260},[72,63200,11647],{"class":78},[72,63202,63203],{"class":362}," total",[72,63205,13990],{"class":78},[72,63207,54814],{"class":82},[72,63209,54817],{"class":358},[72,63211,564],{"class":82},[72,63213,63214],{"class":366},"'.total'",[72,63216,570],{"class":82},[72,63218,63219],{"class":74,"line":33269},[72,63220,63221],{"class":621},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[72,63223,63224,63227,63229,63231,63233,63235,63237],{"class":74,"line":33275},[72,63225,63226],{"class":82},"    tx.",[72,63228,58231],{"class":358},[72,63230,564],{"class":82},[72,63232,61745],{"class":366},[72,63234,12861],{"class":82},[72,63236,54867],{"class":78},[72,63238,54870],{"class":82},[72,63240,63241,63244,63246],{"class":74,"line":33284},[72,63242,63243],{"class":82},"      total.style.opacity ",[72,63245,609],{"class":78},[72,63247,56117],{"class":362},[72,63249,63250],{"class":74,"line":33290},[72,63251,33879],{"class":82},[72,63253,63254],{"class":74,"line":33296},[72,63255,63256],{"class":621},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[72,63258,63259,63261,63263,63265,63267,63269,63271],{"class":74,"line":33305},[72,63260,63226],{"class":82},[72,63262,58231],{"class":358},[72,63264,564],{"class":82},[72,63266,61806],{"class":366},[72,63268,12861],{"class":82},[72,63270,54867],{"class":78},[72,63272,54870],{"class":82},[72,63274,63275,63277,63279],{"class":74,"line":33311},[72,63276,63243],{"class":82},[72,63278,609],{"class":78},[72,63280,47751],{"class":362},[72,63282,63283],{"class":74,"line":33322},[72,63284,33879],{"class":82},[72,63286,63287],{"class":74,"line":33328},[72,63288,63289],{"class":621},"    \u002F\u002F 3. 检测用户输入\n",[72,63291,63292,63294,63296,63298,63301,63303,63305],{"class":74,"line":33347},[72,63293,63226],{"class":82},[72,63295,58231],{"class":358},[72,63297,564],{"class":82},[72,63299,63300],{"class":366},"'input'",[72,63302,12861],{"class":82},[72,63304,54867],{"class":78},[72,63306,54870],{"class":82},[72,63308,63309],{"class":74,"line":33353},[72,63310,63311],{"class":621},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[72,63313,63314,63317,63319,63322,63325,63327,63330,63332,63334],{"class":74,"line":33364},[72,63315,63316],{"class":82},"      total.innerHTML ",[72,63318,609],{"class":78},[72,63320,63321],{"class":366}," `${",[72,63323,63324],{"class":82},"tx",[72,63326,1112],{"class":366},[72,63328,63329],{"class":82},"value",[72,63331,1112],{"class":366},[72,63333,52386],{"class":362},[72,63335,63336],{"class":366},"}\u002F200字`\n",[72,63338,63339],{"class":74,"line":33370},[72,63340,33879],{"class":82},[72,63342,63343],{"class":74,"line":33390},[72,63344,2828],{"emptyLinePlaceholder":490},[72,63346,63347],{"class":74,"line":33406},[72,63348,63349],{"class":621},"    \u002F\u002F const str = 'andy'\n",[72,63351,63352],{"class":74,"line":33412},[72,63353,63354],{"class":621},"    \u002F\u002F console.log(str.length)\n",[72,63356,63357,63359,63361],{"class":74,"line":33426},[72,63358,52835],{"class":82},[72,63360,52231],{"class":51718},[72,63362,51725],{"class":82},[72,63364,63365,63367,63369],{"class":74,"line":33432},[72,63366,52203],{"class":82},[72,63368,52218],{"class":51718},[72,63370,51725],{"class":82},[72,63372,63373],{"class":74,"line":33438},[72,63374,2828],{"emptyLinePlaceholder":490},[72,63376,63377,63379,63381],{"class":74,"line":33449},[72,63378,52203],{"class":82},[72,63380,51053],{"class":51718},[72,63382,51725],{"class":82},[22423,63384,63386],{"id":63385},"_3254-change事件","3.2.5.4 change事件",[15,63388,63389],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[15,63391,63392],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[15,63394,63395],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[63,63397,63399],{"className":51051,"code":63398,"language":51053,"meta":68,"style":68},"\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",[34,63400,63401,63411,63425,63429,63437,63451,63471,63483,63491,63495,63503,63517,63525,63543,63561,63573,63577,63585,63593,63597],{"__ignoreMap":68},[72,63402,63403,63405,63407,63409],{"class":74,"line":75},[72,63404,51715],{"class":82},[72,63406,51719],{"class":51718},[72,63408,51722],{"class":358},[72,63410,51725],{"class":82},[72,63412,63413,63415,63417,63419,63421,63423],{"class":74,"line":370},[72,63414,1464],{"class":82},[72,63416,51053],{"class":51718},[72,63418,51734],{"class":358},[72,63420,609],{"class":82},[72,63422,51739],{"class":366},[72,63424,51725],{"class":82},[72,63426,63427],{"class":74,"line":1608},[72,63428,2828],{"emptyLinePlaceholder":490},[72,63430,63431,63433,63435],{"class":74,"line":1623},[72,63432,1464],{"class":82},[72,63434,51752],{"class":51718},[72,63436,51725],{"class":82},[72,63438,63439,63441,63443,63445,63447,63449],{"class":74,"line":1629},[72,63440,52562],{"class":82},[72,63442,51762],{"class":51718},[72,63444,51765],{"class":358},[72,63446,609],{"class":82},[72,63448,51770],{"class":366},[72,63450,51725],{"class":82},[72,63452,63453,63455,63457,63459,63461,63463,63465,63467,63469],{"class":74,"line":1643},[72,63454,52562],{"class":82},[72,63456,51762],{"class":51718},[72,63458,15346],{"class":358},[72,63460,609],{"class":82},[72,63462,51809],{"class":366},[72,63464,51789],{"class":358},[72,63466,609],{"class":82},[72,63468,51816],{"class":366},[72,63470,51725],{"class":82},[72,63472,63473,63475,63477,63479,63481],{"class":74,"line":1649},[72,63474,52562],{"class":82},[72,63476,51825],{"class":51718},[72,63478,51828],{"class":82},[72,63480,51825],{"class":51718},[72,63482,51725],{"class":82},[72,63484,63485,63487,63489],{"class":74,"line":1740},[72,63486,52203],{"class":82},[72,63488,51752],{"class":51718},[72,63490,51725],{"class":82},[72,63492,63493],{"class":74,"line":1746},[72,63494,2828],{"emptyLinePlaceholder":490},[72,63496,63497,63499,63501],{"class":74,"line":1758},[72,63498,1464],{"class":82},[72,63500,52218],{"class":51718},[72,63502,51725],{"class":82},[72,63504,63505,63507,63509,63511,63513,63515],{"class":74,"line":2041},[72,63506,52562],{"class":82},[72,63508,54239],{"class":51718},[72,63510,54242],{"class":358},[72,63512,609],{"class":82},[72,63514,63117],{"class":366},[72,63516,51725],{"class":82},[72,63518,63519,63521,63523],{"class":74,"line":2046},[72,63520,52562],{"class":82},[72,63522,52231],{"class":51718},[72,63524,51725],{"class":82},[72,63526,63527,63529,63531,63533,63535,63537,63539,63541],{"class":74,"line":2052},[72,63528,11647],{"class":78},[72,63530,61023],{"class":362},[72,63532,13990],{"class":78},[72,63534,54814],{"class":82},[72,63536,54817],{"class":358},[72,63538,564],{"class":82},[72,63540,63300],{"class":366},[72,63542,570],{"class":82},[72,63544,63545,63548,63550,63552,63555,63557,63559],{"class":74,"line":2057},[72,63546,63547],{"class":82},"    input.",[72,63549,58231],{"class":358},[72,63551,564],{"class":82},[72,63553,63554],{"class":366},"'change'",[72,63556,12861],{"class":82},[72,63558,54867],{"class":78},[72,63560,54870],{"class":82},[72,63562,63563,63565,63567,63569,63571],{"class":74,"line":2071},[72,63564,58662],{"class":82},[72,63566,58665],{"class":358},[72,63568,564],{"class":82},[72,63570,1147],{"class":362},[72,63572,570],{"class":82},[72,63574,63575],{"class":74,"line":2076},[72,63576,33879],{"class":82},[72,63578,63579,63581,63583],{"class":74,"line":2082},[72,63580,52835],{"class":82},[72,63582,52231],{"class":51718},[72,63584,51725],{"class":82},[72,63586,63587,63589,63591],{"class":74,"line":2103},[72,63588,52203],{"class":82},[72,63590,52218],{"class":51718},[72,63592,51725],{"class":82},[72,63594,63595],{"class":74,"line":2108},[72,63596,2828],{"emptyLinePlaceholder":490},[72,63598,63599,63601,63603],{"class":74,"line":2122},[72,63600,52203],{"class":82},[72,63602,51053],{"class":51718},[72,63604,51725],{"class":82},[15,63606,63607],{},"总结：内容发生改变才回去触发",[531,63609,63611],{"id":63610},"_326-事件对象","3.2.6 事件对象",[22423,63613,63615],{"id":63614},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[15,63617,63618],{},[1891,63619],{"alt":68,"src":63620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[15,63622,63623],{},[1891,63624],{"alt":68,"src":63625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[15,63627,63628],{},"点击一次，就输出了事件对象，它是个对象",[15,63630,63631],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[15,63633,63634],{},[1891,63635],{"alt":68,"src":63636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[22423,63638,63640],{"id":63639},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[15,63642,63643],{},[1891,63644],{"alt":68,"src":63645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[15,63647,63648],{},"实现按特殊字符才是实现打印输出效果：",[63,63650,63652],{"className":53485,"code":63651,"language":53487,"meta":68,"style":68},"\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",[34,63653,63654,63662,63667,63681,63689,63694,63699,63704,63709,63714,63719,63724,63729,63734,63738,63742,63750],{"__ignoreMap":68},[72,63655,63656,63658,63660],{"class":74,"line":75},[72,63657,1464],{"class":82},[72,63659,52218],{"class":51718},[72,63661,51725],{"class":82},[72,63663,63664],{"class":74,"line":370},[72,63665,63666],{"class":621},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[72,63668,63669,63671,63673,63675,63677,63679],{"class":74,"line":1608},[72,63670,52562],{"class":82},[72,63672,54239],{"class":51718},[72,63674,54242],{"class":358},[72,63676,609],{"class":82},[72,63678,63117],{"class":366},[72,63680,51725],{"class":82},[72,63682,63683,63685,63687],{"class":74,"line":1623},[72,63684,52562],{"class":82},[72,63686,52231],{"class":51718},[72,63688,51725],{"class":82},[72,63690,63691],{"class":74,"line":1629},[72,63692,63693],{"class":82},"    \u002F\u002F const btn = document.querySelector('button')\n",[72,63695,63696],{"class":74,"line":1643},[72,63697,63698],{"class":82},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[72,63700,63701],{"class":74,"line":1649},[72,63702,63703],{"class":82},"    \u002F\u002F   console.log(e);\n",[72,63705,63706],{"class":74,"line":1740},[72,63707,63708],{"class":82},"    \u002F\u002F })\n",[72,63710,63711],{"class":74,"line":1746},[72,63712,63713],{"class":82},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[72,63715,63716],{"class":74,"line":1758},[72,63717,63718],{"class":82},"    const input = document.querySelector('input')\n",[72,63720,63721],{"class":74,"line":2041},[72,63722,63723],{"class":82},"    input.addEventListener('keyup', function (e) {\n",[72,63725,63726],{"class":74,"line":2046},[72,63727,63728],{"class":82},"      if (e.key === 'Enter') {\n",[72,63730,63731],{"class":74,"line":2052},[72,63732,63733],{"class":82},"        console.log('我按下了回车键')\n",[72,63735,63736],{"class":74,"line":2057},[72,63737,52816],{"class":82},[72,63739,63740],{"class":74,"line":2071},[72,63741,33879],{"class":82},[72,63743,63744,63746,63748],{"class":74,"line":2076},[72,63745,52835],{"class":82},[72,63747,52231],{"class":51718},[72,63749,51725],{"class":82},[72,63751,63752,63754,63756],{"class":74,"line":2082},[72,63753,52203],{"class":82},[72,63755,52218],{"class":51718},[72,63757,51725],{"class":82},[22423,63759,63761],{"id":63760},"_3263-trim方法","3.2.6.3 trim方法",[15,63763,63764],{},[1891,63765],{"alt":68,"src":63766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[15,63768,63769],{},[1891,63770],{"alt":68,"src":63771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[15,63773,63774],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[15,63776,63777],{},"str.trim()",[531,63779,63781],{"id":63780},"_327-环境对象","3.2.7 环境对象",[15,63783,63784],{},[1891,63785],{"alt":68,"src":63786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[15,63788,63789],{},[1891,63790],{"alt":68,"src":63791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[15,63793,63794],{},[1891,63795],{"alt":68,"src":63796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[15,63798,63799],{},"实际函数调用是window.fn()",[15,63801,63802],{},"普通函数里面this指向的是window",[251,63804,63805,63808,63811],{},[25,63806,63807],{},"在普通函数下，this指向的是window",[25,63809,63810],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[25,63812,63813],{},"箭头函数没有this",[15,63815,63816],{},"粗略记法就是：谁调用，this就指向谁",[15,63818,63819],{},[1891,63820],{"alt":68,"src":63821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[15,63823,63824],{},[1891,63825],{"alt":68,"src":63826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[15,63828,63829],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[15,63831,63832],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[63,63834,63836],{"className":53485,"code":63835,"language":53487,"meta":68,"style":68},"\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",[34,63837,63838,63846,63858,63866,63871,63876,63881,63886,63890,63898],{"__ignoreMap":68},[72,63839,63840,63842,63844],{"class":74,"line":75},[72,63841,1464],{"class":82},[72,63843,52218],{"class":51718},[72,63845,51725],{"class":82},[72,63847,63848,63850,63852,63854,63856],{"class":74,"line":370},[72,63849,52562],{"class":82},[72,63851,54305],{"class":51718},[72,63853,54311],{"class":82},[72,63855,54305],{"class":51718},[72,63857,51725],{"class":82},[72,63859,63860,63862,63864],{"class":74,"line":1608},[72,63861,52562],{"class":82},[72,63863,52231],{"class":51718},[72,63865,51725],{"class":82},[72,63867,63868],{"class":74,"line":1623},[72,63869,63870],{"class":82},"    const button = document.querySelector('button')\n",[72,63872,63873],{"class":74,"line":1629},[72,63874,63875],{"class":82},"    button.addEventListener('click', function () {\n",[72,63877,63878],{"class":74,"line":1643},[72,63879,63880],{"class":82},"      \u002F\u002F console.log(this);\n",[72,63882,63883],{"class":74,"line":1649},[72,63884,63885],{"class":82},"      this.style.color = 'pink'\n",[72,63887,63888],{"class":74,"line":1740},[72,63889,33879],{"class":82},[72,63891,63892,63894,63896],{"class":74,"line":1746},[72,63893,52835],{"class":82},[72,63895,52231],{"class":51718},[72,63897,51725],{"class":82},[72,63899,63900,63902,63904],{"class":74,"line":1758},[72,63901,52203],{"class":82},[72,63903,52218],{"class":51718},[72,63905,51725],{"class":82},[531,63907,63909],{"id":63908},"_328-回调函数","3.2.8 回调函数",[15,63911,63912],{},[1891,63913],{"alt":68,"src":63914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[15,63916,63917],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[15,63919,11758],{},[251,63921,63922,63925,63928],{},[25,63923,63924],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[25,63926,63927],{},"回调函数本质还是函数，只不过把它当成参数使用",[25,63929,63930],{},"使用匿名函数做为回调函数比较常见",[531,63932,63934],{"id":63933},"_329-tab栏切换","3.2.9 tab栏切换",[15,63936,63937],{},[1891,63938],{"alt":68,"src":63939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[63,63941,63943],{"className":51051,"code":63942,"language":51053,"meta":68,"style":68},"\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",[34,63944,63945,63955,63969,63973,63981,63995,64015,64035,64048,64056,64062,64072,64082,64086,64090,64097,64110,64123,64135,64151,64155,64159,64166,64178,64190,64202,64212,64222,64226,64230,64239,64251,64262,64274,64278,64282,64290,64300,64310,64320,64324,64328,64338,64352,64364,64368,64372,64384,64395,64412,64422,64426,64430,64445,64456,64466,64470,64474,64481,64496,64500,64504,64512,64522,64526,64530,64539,64549,64553,64561,64569,64573,64581,64596,64611,64624,64632,64666,64693,64720,64747,64774,64782,64790,64805,64842,64877,64912,64947,64982,64990,64998,65006,65011,65016,65036,65041,65070,65075,65080,65098,65103,65108,65113,65135,65140,65156,65160,65165,65170,65191,65196,65225,65229,65234,65238,65246,65254,65258],{"__ignoreMap":68},[72,63946,63947,63949,63951,63953],{"class":74,"line":75},[72,63948,51715],{"class":82},[72,63950,51719],{"class":51718},[72,63952,51722],{"class":358},[72,63954,51725],{"class":82},[72,63956,63957,63959,63961,63963,63965,63967],{"class":74,"line":370},[72,63958,1464],{"class":82},[72,63960,51053],{"class":51718},[72,63962,51734],{"class":358},[72,63964,609],{"class":82},[72,63966,51739],{"class":366},[72,63968,51725],{"class":82},[72,63970,63971],{"class":74,"line":1608},[72,63972,2828],{"emptyLinePlaceholder":490},[72,63974,63975,63977,63979],{"class":74,"line":1623},[72,63976,1464],{"class":82},[72,63978,51752],{"class":51718},[72,63980,51725],{"class":82},[72,63982,63983,63985,63987,63989,63991,63993],{"class":74,"line":1629},[72,63984,52562],{"class":82},[72,63986,51762],{"class":51718},[72,63988,51765],{"class":358},[72,63990,609],{"class":82},[72,63992,51770],{"class":366},[72,63994,59545],{"class":82},[72,63996,63997,63999,64001,64003,64005,64007,64009,64011,64013],{"class":74,"line":1643},[72,63998,52562],{"class":82},[72,64000,51762],{"class":51718},[72,64002,51781],{"class":358},[72,64004,609],{"class":82},[72,64006,51786],{"class":366},[72,64008,51789],{"class":358},[72,64010,609],{"class":82},[72,64012,51794],{"class":366},[72,64014,59545],{"class":82},[72,64016,64017,64019,64021,64023,64025,64027,64029,64031,64033],{"class":74,"line":1649},[72,64018,52562],{"class":82},[72,64020,51762],{"class":51718},[72,64022,15346],{"class":358},[72,64024,609],{"class":82},[72,64026,51809],{"class":366},[72,64028,51789],{"class":358},[72,64030,609],{"class":82},[72,64032,51816],{"class":366},[72,64034,59545],{"class":82},[72,64036,64037,64039,64041,64044,64046],{"class":74,"line":1740},[72,64038,52562],{"class":82},[72,64040,51825],{"class":51718},[72,64042,64043],{"class":82},">tab栏切换\u003C\u002F",[72,64045,51825],{"class":51718},[72,64047,51725],{"class":82},[72,64049,64050,64052,64054],{"class":74,"line":1746},[72,64051,52562],{"class":82},[72,64053,473],{"class":51718},[72,64055,51725],{"class":82},[72,64057,64058,64060],{"class":74,"line":1758},[72,64059,6829],{"class":51718},[72,64061,15998],{"class":82},[72,64063,64064,64066,64068,64070],{"class":74,"line":2041},[72,64065,55124],{"class":362},[72,64067,51855],{"class":82},[72,64069,747],{"class":362},[72,64071,1719],{"class":82},[72,64073,64074,64076,64078,64080],{"class":74,"line":2046},[72,64075,55113],{"class":362},[72,64077,51855],{"class":82},[72,64079,747],{"class":362},[72,64081,1719],{"class":82},[72,64083,64084],{"class":74,"line":2052},[72,64085,2615],{"class":82},[72,64087,64088],{"class":74,"line":2057},[72,64089,2828],{"emptyLinePlaceholder":490},[72,64091,64092,64095],{"class":74,"line":2071},[72,64093,64094],{"class":358},"    .tab",[72,64096,15998],{"class":82},[72,64098,64099,64101,64103,64106,64108],{"class":74,"line":2076},[72,64100,55189],{"class":362},[72,64102,51855],{"class":82},[72,64104,64105],{"class":362},"590",[72,64107,51910],{"class":78},[72,64109,1719],{"class":82},[72,64111,64112,64114,64116,64119,64121],{"class":74,"line":2082},[72,64113,55203],{"class":362},[72,64115,51855],{"class":82},[72,64117,64118],{"class":362},"340",[72,64120,51910],{"class":78},[72,64122,1719],{"class":82},[72,64124,64125,64127,64129,64131,64133],{"class":74,"line":2103},[72,64126,55124],{"class":362},[72,64128,51855],{"class":82},[72,64130,1254],{"class":362},[72,64132,51910],{"class":78},[72,64134,1719],{"class":82},[72,64136,64137,64139,64141,64143,64145,64147,64149],{"class":74,"line":2108},[72,64138,62395],{"class":362},[72,64140,51855],{"class":82},[72,64142,772],{"class":362},[72,64144,51910],{"class":78},[72,64146,51939],{"class":362},[72,64148,62662],{"class":362},[72,64150,1719],{"class":82},[72,64152,64153],{"class":74,"line":2122},[72,64154,2615],{"class":82},[72,64156,64157],{"class":74,"line":2127},[72,64158,2828],{"emptyLinePlaceholder":490},[72,64160,64161,64164],{"class":74,"line":2156},[72,64162,64163],{"class":358},"    .tab-nav",[72,64165,15998],{"class":82},[72,64167,64168,64170,64172,64174,64176],{"class":74,"line":2161},[72,64169,55189],{"class":362},[72,64171,51855],{"class":82},[72,64173,865],{"class":362},[72,64175,882],{"class":78},[72,64177,1719],{"class":82},[72,64179,64180,64182,64184,64186,64188],{"class":74,"line":2178},[72,64181,55203],{"class":362},[72,64183,51855],{"class":82},[72,64185,1461],{"class":362},[72,64187,51910],{"class":78},[72,64189,1719],{"class":82},[72,64191,64192,64194,64196,64198,64200],{"class":74,"line":2183},[72,64193,57777],{"class":362},[72,64195,51855],{"class":82},[72,64197,1461],{"class":362},[72,64199,51910],{"class":78},[72,64201,1719],{"class":82},[72,64203,64204,64206,64208,64210],{"class":74,"line":2188},[72,64205,55427],{"class":362},[72,64207,51855],{"class":82},[72,64209,51895],{"class":362},[72,64211,1719],{"class":82},[72,64213,64214,64216,64218,64220],{"class":74,"line":2193},[72,64215,55438],{"class":362},[72,64217,51855],{"class":82},[72,64219,52086],{"class":362},[72,64221,1719],{"class":82},[72,64223,64224],{"class":74,"line":2207},[72,64225,2615],{"class":82},[72,64227,64228],{"class":74,"line":2212},[72,64229,2828],{"emptyLinePlaceholder":490},[72,64231,64232,64234,64237],{"class":74,"line":3005},[72,64233,64163],{"class":358},[72,64235,64236],{"class":51718}," h3",[72,64238,15998],{"class":82},[72,64240,64241,64243,64245,64247,64249],{"class":74,"line":3019},[72,64242,55340],{"class":362},[72,64244,51855],{"class":82},[72,64246,1354],{"class":362},[72,64248,51910],{"class":78},[72,64250,1719],{"class":82},[72,64252,64253,64255,64257,64260],{"class":74,"line":3027},[72,64254,62752],{"class":362},[72,64256,51855],{"class":82},[72,64258,64259],{"class":362},"normal",[72,64261,1719],{"class":82},[72,64263,64264,64266,64268,64270,64272],{"class":74,"line":3032},[72,64265,62418],{"class":362},[72,64267,51855],{"class":82},[72,64269,1254],{"class":362},[72,64271,51910],{"class":78},[72,64273,1719],{"class":82},[72,64275,64276],{"class":74,"line":3038},[72,64277,2615],{"class":82},[72,64279,64280],{"class":74,"line":3044},[72,64281,2828],{"emptyLinePlaceholder":490},[72,64283,64284,64286,64288],{"class":74,"line":3049},[72,64285,64163],{"class":358},[72,64287,61710],{"class":51718},[72,64289,15998],{"class":82},[72,64291,64292,64294,64296,64298],{"class":74,"line":8374},[72,64293,55150],{"class":362},[72,64295,51855],{"class":82},[72,64297,55155],{"class":362},[72,64299,1719],{"class":82},[72,64301,64302,64304,64306,64308],{"class":74,"line":8398},[72,64303,55427],{"class":362},[72,64305,51855],{"class":82},[72,64307,51895],{"class":362},[72,64309,1719],{"class":82},[72,64311,64312,64314,64316,64318],{"class":74,"line":8403},[72,64313,55438],{"class":362},[72,64315,51855],{"class":82},[72,64317,51998],{"class":362},[72,64319,1719],{"class":82},[72,64321,64322],{"class":74,"line":8409},[72,64323,2615],{"class":82},[72,64325,64326],{"class":74,"line":8436},[72,64327,2828],{"emptyLinePlaceholder":490},[72,64329,64330,64332,64334,64336],{"class":74,"line":8441},[72,64331,64163],{"class":358},[72,64333,61710],{"class":51718},[72,64335,55493],{"class":51718},[72,64337,15998],{"class":82},[72,64339,64340,64342,64344,64346,64348,64350],{"class":74,"line":8447},[72,64341,55124],{"class":362},[72,64343,51855],{"class":82},[72,64345,747],{"class":362},[72,64347,9376],{"class":362},[72,64349,51910],{"class":78},[72,64351,1719],{"class":82},[72,64353,64354,64356,64358,64360,64362],{"class":74,"line":8459},[72,64355,55340],{"class":362},[72,64357,51855],{"class":82},[72,64359,1103],{"class":362},[72,64361,51910],{"class":78},[72,64363,1719],{"class":82},[72,64365,64366],{"class":74,"line":8471},[72,64367,2615],{"class":82},[72,64369,64370],{"class":74,"line":8483},[72,64371,2828],{"emptyLinePlaceholder":490},[72,64373,64374,64376,64378,64380,64382],{"class":74,"line":10142},[72,64375,64163],{"class":358},[72,64377,61710],{"class":51718},[72,64379,55493],{"class":51718},[72,64381,1827],{"class":51718},[72,64383,15998],{"class":82},[72,64385,64386,64389,64391,64393],{"class":74,"line":10167},[72,64387,64388],{"class":362},"      text-decoration",[72,64390,51855],{"class":82},[72,64392,55155],{"class":362},[72,64394,1719],{"class":82},[72,64396,64397,64399,64401,64403,64405,64407,64410],{"class":74,"line":10190},[72,64398,62650],{"class":362},[72,64400,51855],{"class":82},[72,64402,640],{"class":362},[72,64404,51910],{"class":78},[72,64406,51939],{"class":362},[72,64408,64409],{"class":362}," transparent",[72,64411,1719],{"class":82},[72,64413,64414,64416,64418,64420],{"class":74,"line":10214},[72,64415,57834],{"class":362},[72,64417,51855],{"class":82},[72,64419,62787],{"class":362},[72,64421,1719],{"class":82},[72,64423,64424],{"class":74,"line":10219},[72,64425,2615],{"class":82},[72,64427,64428],{"class":74,"line":10224},[72,64429,2828],{"emptyLinePlaceholder":490},[72,64431,64432,64434,64436,64438,64440,64443],{"class":74,"line":10229},[72,64433,64163],{"class":358},[72,64435,61710],{"class":51718},[72,64437,55493],{"class":51718},[72,64439,1827],{"class":51718},[72,64441,64442],{"class":358},".active",[72,64444,15998],{"class":82},[72,64446,64447,64449,64451,64454],{"class":74,"line":10238},[72,64448,62209],{"class":362},[72,64450,51855],{"class":82},[72,64452,64453],{"class":362},"#e1251b",[72,64455,1719],{"class":82},[72,64457,64458,64460,64462,64464],{"class":74,"line":10243},[72,64459,57834],{"class":362},[72,64461,51855],{"class":82},[72,64463,64453],{"class":362},[72,64465,1719],{"class":82},[72,64467,64468],{"class":74,"line":10249},[72,64469,2615],{"class":82},[72,64471,64472],{"class":74,"line":10270},[72,64473,2828],{"emptyLinePlaceholder":490},[72,64475,64476,64479],{"class":74,"line":10276},[72,64477,64478],{"class":358},"    .tab-content",[72,64480,15998],{"class":82},[72,64482,64483,64485,64487,64489,64492,64494],{"class":74,"line":10290},[72,64484,55113],{"class":362},[72,64486,51855],{"class":82},[72,64488,747],{"class":362},[72,64490,64491],{"class":362}," 16",[72,64493,51910],{"class":78},[72,64495,1719],{"class":82},[72,64497,64498],{"class":74,"line":10296},[72,64499,2615],{"class":82},[72,64501,64502],{"class":74,"line":10323},[72,64503,2828],{"emptyLinePlaceholder":490},[72,64505,64506,64508,64510],{"class":74,"line":10332},[72,64507,64478],{"class":358},[72,64509,62592],{"class":358},[72,64511,15998],{"class":82},[72,64513,64514,64516,64518,64520],{"class":74,"line":10338},[72,64515,55427],{"class":362},[72,64517,51855],{"class":82},[72,64519,55155],{"class":362},[72,64521,1719],{"class":82},[72,64523,64524],{"class":74,"line":10346},[72,64525,2615],{"class":82},[72,64527,64528],{"class":74,"line":10351},[72,64529,2828],{"emptyLinePlaceholder":490},[72,64531,64532,64534,64537],{"class":74,"line":17030},[72,64533,64478],{"class":358},[72,64535,64536],{"class":358}," .item.active",[72,64538,15998],{"class":82},[72,64540,64541,64543,64545,64547],{"class":74,"line":17036},[72,64542,55427],{"class":362},[72,64544,51855],{"class":82},[72,64546,61287],{"class":362},[72,64548,1719],{"class":82},[72,64550,64551],{"class":74,"line":17059},[72,64552,2615],{"class":82},[72,64554,64555,64557,64559],{"class":74,"line":17065},[72,64556,52835],{"class":82},[72,64558,473],{"class":51718},[72,64560,51725],{"class":82},[72,64562,64563,64565,64567],{"class":74,"line":17088},[72,64564,52203],{"class":82},[72,64566,51752],{"class":51718},[72,64568,51725],{"class":82},[72,64570,64571],{"class":74,"line":17102},[72,64572,2828],{"emptyLinePlaceholder":490},[72,64574,64575,64577,64579],{"class":74,"line":17122},[72,64576,1464],{"class":82},[72,64578,52218],{"class":51718},[72,64580,51725],{"class":82},[72,64582,64583,64585,64587,64589,64591,64594],{"class":74,"line":17128},[72,64584,52562],{"class":82},[72,64586,52029],{"class":51718},[72,64588,53904],{"class":358},[72,64590,609],{"class":82},[72,64592,64593],{"class":366},"\"tab\"",[72,64595,51725],{"class":82},[72,64597,64598,64600,64602,64604,64606,64609],{"class":74,"line":17139},[72,64599,51759],{"class":82},[72,64601,52029],{"class":51718},[72,64603,53904],{"class":358},[72,64605,609],{"class":82},[72,64607,64608],{"class":366},"\"tab-nav\"",[72,64610,51725],{"class":82},[72,64612,64613,64615,64617,64620,64622],{"class":74,"line":17162},[72,64614,55652],{"class":82},[72,64616,531],{"class":51718},[72,64618,64619],{"class":82},">每日特价\u003C\u002F",[72,64621,531],{"class":51718},[72,64623,51725],{"class":82},[72,64625,64626,64628,64630],{"class":74,"line":17184},[72,64627,55652],{"class":82},[72,64629,251],{"class":51718},[72,64631,51725],{"class":82},[72,64633,64634,64636,64638,64640,64642,64644,64646,64648,64650,64652,64655,64658,64660,64662,64664],{"class":74,"line":17189},[72,64635,55720],{"class":82},[72,64637,25],{"class":51718},[72,64639,61470],{"class":82},[72,64641,257],{"class":51718},[72,64643,53904],{"class":358},[72,64645,609],{"class":82},[72,64647,60124],{"class":366},[72,64649,61475],{"class":358},[72,64651,609],{"class":82},[72,64653,64654],{"class":366},"\"javascript:;\"",[72,64656,64657],{"class":82},">精选\u003C\u002F",[72,64659,257],{"class":51718},[72,64661,55732],{"class":82},[72,64663,25],{"class":51718},[72,64665,51725],{"class":82},[72,64667,64668,64670,64672,64674,64676,64678,64680,64682,64685,64687,64689,64691],{"class":74,"line":17195},[72,64669,55720],{"class":82},[72,64671,25],{"class":51718},[72,64673,61470],{"class":82},[72,64675,257],{"class":51718},[72,64677,61475],{"class":358},[72,64679,609],{"class":82},[72,64681,64654],{"class":366},[72,64683,64684],{"class":82},">美食\u003C\u002F",[72,64686,257],{"class":51718},[72,64688,55732],{"class":82},[72,64690,25],{"class":51718},[72,64692,51725],{"class":82},[72,64694,64695,64697,64699,64701,64703,64705,64707,64709,64712,64714,64716,64718],{"class":74,"line":17209},[72,64696,55720],{"class":82},[72,64698,25],{"class":51718},[72,64700,61470],{"class":82},[72,64702,257],{"class":51718},[72,64704,61475],{"class":358},[72,64706,609],{"class":82},[72,64708,64654],{"class":366},[72,64710,64711],{"class":82},">百货\u003C\u002F",[72,64713,257],{"class":51718},[72,64715,55732],{"class":82},[72,64717,25],{"class":51718},[72,64719,51725],{"class":82},[72,64721,64722,64724,64726,64728,64730,64732,64734,64736,64739,64741,64743,64745],{"class":74,"line":17222},[72,64723,55720],{"class":82},[72,64725,25],{"class":51718},[72,64727,61470],{"class":82},[72,64729,257],{"class":51718},[72,64731,61475],{"class":358},[72,64733,609],{"class":82},[72,64735,64654],{"class":366},[72,64737,64738],{"class":82},">个护\u003C\u002F",[72,64740,257],{"class":51718},[72,64742,55732],{"class":82},[72,64744,25],{"class":51718},[72,64746,51725],{"class":82},[72,64748,64749,64751,64753,64755,64757,64759,64761,64763,64766,64768,64770,64772],{"class":74,"line":17227},[72,64750,55720],{"class":82},[72,64752,25],{"class":51718},[72,64754,61470],{"class":82},[72,64756,257],{"class":51718},[72,64758,61475],{"class":358},[72,64760,609],{"class":82},[72,64762,64654],{"class":366},[72,64764,64765],{"class":82},">预告\u003C\u002F",[72,64767,257],{"class":51718},[72,64769,55732],{"class":82},[72,64771,25],{"class":51718},[72,64773,51725],{"class":82},[72,64775,64776,64778,64780],{"class":74,"line":17241},[72,64777,55825],{"class":82},[72,64779,251],{"class":51718},[72,64781,51725],{"class":82},[72,64783,64784,64786,64788],{"class":74,"line":17246},[72,64785,52194],{"class":82},[72,64787,52029],{"class":51718},[72,64789,51725],{"class":82},[72,64791,64792,64794,64796,64798,64800,64803],{"class":74,"line":17252},[72,64793,51759],{"class":82},[72,64795,52029],{"class":51718},[72,64797,53904],{"class":358},[72,64799,609],{"class":82},[72,64801,64802],{"class":366},"\"tab-content\"",[72,64804,51725],{"class":82},[72,64806,64807,64809,64811,64813,64815,64818,64820,64822,64824,64826,64829,64831,64833,64835,64838,64840],{"class":74,"line":17257},[72,64808,55652],{"class":82},[72,64810,52029],{"class":51718},[72,64812,53904],{"class":358},[72,64814,609],{"class":82},[72,64816,64817],{"class":366},"\"item active\"",[72,64819,61470],{"class":82},[72,64821,1891],{"class":51718},[72,64823,55657],{"class":358},[72,64825,609],{"class":82},[72,64827,64828],{"class":366},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[72,64830,55665],{"class":358},[72,64832,609],{"class":82},[72,64834,8078],{"class":366},[72,64836,64837],{"class":82}," \u002F>\u003C\u002F",[72,64839,52029],{"class":51718},[72,64841,51725],{"class":82},[72,64843,64844,64846,64848,64850,64852,64854,64856,64858,64860,64862,64865,64867,64869,64871,64873,64875],{"class":74,"line":17271},[72,64845,55652],{"class":82},[72,64847,52029],{"class":51718},[72,64849,53904],{"class":358},[72,64851,609],{"class":82},[72,64853,63041],{"class":366},[72,64855,61470],{"class":82},[72,64857,1891],{"class":51718},[72,64859,55657],{"class":358},[72,64861,609],{"class":82},[72,64863,64864],{"class":366},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[72,64866,55665],{"class":358},[72,64868,609],{"class":82},[72,64870,8078],{"class":366},[72,64872,64837],{"class":82},[72,64874,52029],{"class":51718},[72,64876,51725],{"class":82},[72,64878,64879,64881,64883,64885,64887,64889,64891,64893,64895,64897,64900,64902,64904,64906,64908,64910],{"class":74,"line":17276},[72,64880,55652],{"class":82},[72,64882,52029],{"class":51718},[72,64884,53904],{"class":358},[72,64886,609],{"class":82},[72,64888,63041],{"class":366},[72,64890,61470],{"class":82},[72,64892,1891],{"class":51718},[72,64894,55657],{"class":358},[72,64896,609],{"class":82},[72,64898,64899],{"class":366},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[72,64901,55665],{"class":358},[72,64903,609],{"class":82},[72,64905,8078],{"class":366},[72,64907,64837],{"class":82},[72,64909,52029],{"class":51718},[72,64911,51725],{"class":82},[72,64913,64914,64916,64918,64920,64922,64924,64926,64928,64930,64932,64935,64937,64939,64941,64943,64945],{"class":74,"line":17281},[72,64915,55652],{"class":82},[72,64917,52029],{"class":51718},[72,64919,53904],{"class":358},[72,64921,609],{"class":82},[72,64923,63041],{"class":366},[72,64925,61470],{"class":82},[72,64927,1891],{"class":51718},[72,64929,55657],{"class":358},[72,64931,609],{"class":82},[72,64933,64934],{"class":366},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[72,64936,55665],{"class":358},[72,64938,609],{"class":82},[72,64940,8078],{"class":366},[72,64942,64837],{"class":82},[72,64944,52029],{"class":51718},[72,64946,51725],{"class":82},[72,64948,64949,64951,64953,64955,64957,64959,64961,64963,64965,64967,64970,64972,64974,64976,64978,64980],{"class":74,"line":17295},[72,64950,55652],{"class":82},[72,64952,52029],{"class":51718},[72,64954,53904],{"class":358},[72,64956,609],{"class":82},[72,64958,63041],{"class":366},[72,64960,61470],{"class":82},[72,64962,1891],{"class":51718},[72,64964,55657],{"class":358},[72,64966,609],{"class":82},[72,64968,64969],{"class":366},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[72,64971,55665],{"class":358},[72,64973,609],{"class":82},[72,64975,8078],{"class":366},[72,64977,64837],{"class":82},[72,64979,52029],{"class":51718},[72,64981,51725],{"class":82},[72,64983,64984,64986,64988],{"class":74,"line":17307},[72,64985,52194],{"class":82},[72,64987,52029],{"class":51718},[72,64989,51725],{"class":82},[72,64991,64992,64994,64996],{"class":74,"line":17312},[72,64993,52835],{"class":82},[72,64995,52029],{"class":51718},[72,64997,51725],{"class":82},[72,64999,65000,65002,65004],{"class":74,"line":17325},[72,65001,52562],{"class":82},[72,65003,52231],{"class":51718},[72,65005,51725],{"class":82},[72,65007,65008],{"class":74,"line":17330},[72,65009,65010],{"class":621},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[72,65012,65013],{"class":74,"line":17335},[72,65014,65015],{"class":621},"    \u002F\u002F 1.1 获取 a 元素 \n",[72,65017,65018,65020,65023,65025,65027,65029,65031,65034],{"class":74,"line":17340},[72,65019,11647],{"class":78},[72,65021,65022],{"class":362}," as",[72,65024,13990],{"class":78},[72,65026,54814],{"class":82},[72,65028,56099],{"class":358},[72,65030,564],{"class":82},[72,65032,65033],{"class":366},"'.tab-nav a'",[72,65035,570],{"class":82},[72,65037,65038],{"class":74,"line":17353},[72,65039,65040],{"class":621},"    \u002F\u002F console.log(as) \n",[72,65042,65043,65045,65047,65049,65051,65053,65055,65057,65059,65062,65064,65066,65068],{"class":74,"line":17358},[72,65044,3629],{"class":78},[72,65046,2087],{"class":82},[72,65048,52265],{"class":78},[72,65050,9864],{"class":82},[72,65052,609],{"class":78},[72,65054,4521],{"class":362},[72,65056,9871],{"class":82},[72,65058,1464],{"class":78},[72,65060,65061],{"class":82}," as.",[72,65063,52386],{"class":362},[72,65065,3642],{"class":82},[72,65067,2720],{"class":78},[72,65069,12868],{"class":82},[72,65071,65072],{"class":74,"line":33051},[72,65073,65074],{"class":621},"      \u002F\u002F console.log(as[i])\n",[72,65076,65077],{"class":74,"line":33057},[72,65078,65079],{"class":621},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[72,65081,65082,65085,65087,65089,65092,65094,65096],{"class":74,"line":33063},[72,65083,65084],{"class":82},"      as[i].",[72,65086,58231],{"class":358},[72,65088,564],{"class":82},[72,65090,65091],{"class":366},"'mouseenter'",[72,65093,12861],{"class":82},[72,65095,54867],{"class":78},[72,65097,54870],{"class":82},[72,65099,65100],{"class":74,"line":33069},[72,65101,65102],{"class":621},"        \u002F\u002F console.log('鼠标经过')\n",[72,65104,65105],{"class":74,"line":33075},[72,65106,65107],{"class":621},"        \u002F\u002F 排他思想  \n",[72,65109,65110],{"class":74,"line":33086},[72,65111,65112],{"class":621},"        \u002F\u002F 干掉别人 移除类active\n",[72,65114,65115,65117,65119,65121,65124,65126,65128,65130,65133],{"class":74,"line":33092},[72,65116,52343],{"class":82},[72,65118,54817],{"class":358},[72,65120,564],{"class":82},[72,65122,65123],{"class":366},"'.tab-nav .active'",[72,65125,57421],{"class":82},[72,65127,57424],{"class":358},[72,65129,564],{"class":82},[72,65131,65132],{"class":366},"'active'",[72,65134,570],{"class":82},[72,65136,65137],{"class":74,"line":33112},[72,65138,65139],{"class":621},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[72,65141,65142,65145,65148,65150,65152,65154],{"class":74,"line":33118},[72,65143,65144],{"class":362},"        this",[72,65146,65147],{"class":82},".classList.",[72,65149,5760],{"class":358},[72,65151,564],{"class":82},[72,65153,65132],{"class":366},[72,65155,570],{"class":82},[72,65157,65158],{"class":74,"line":33129},[72,65159,2828],{"emptyLinePlaceholder":490},[72,65161,65162],{"class":74,"line":33135},[72,65163,65164],{"class":621},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[72,65166,65167],{"class":74,"line":33141},[72,65168,65169],{"class":621},"        \u002F\u002F 干掉别人\n",[72,65171,65172,65174,65176,65178,65181,65183,65185,65187,65189],{"class":74,"line":33147},[72,65173,52343],{"class":82},[72,65175,54817],{"class":358},[72,65177,564],{"class":82},[72,65179,65180],{"class":366},"'.tab-content .active'",[72,65182,57421],{"class":82},[72,65184,57424],{"class":358},[72,65186,564],{"class":82},[72,65188,65132],{"class":366},[72,65190,570],{"class":82},[72,65192,65193],{"class":74,"line":33153},[72,65194,65195],{"class":621},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[72,65197,65198,65200,65202,65204,65207,65209,65211,65213,65215,65217,65219,65221,65223],{"class":74,"line":33159},[72,65199,52343],{"class":82},[72,65201,54817],{"class":358},[72,65203,564],{"class":82},[72,65205,65206],{"class":366},"`.tab-content .item:nth-child(${",[72,65208,995],{"class":82},[72,65210,45984],{"class":78},[72,65212,25540],{"class":362},[72,65214,57450],{"class":366},[72,65216,57421],{"class":82},[72,65218,5760],{"class":358},[72,65220,564],{"class":82},[72,65222,65132],{"class":366},[72,65224,570],{"class":82},[72,65226,65227],{"class":74,"line":33165},[72,65228,2828],{"emptyLinePlaceholder":490},[72,65230,65231],{"class":74,"line":33171},[72,65232,65233],{"class":82},"      })\n",[72,65235,65236],{"class":74,"line":33191},[72,65237,2615],{"class":82},[72,65239,65240,65242,65244],{"class":74,"line":33197},[72,65241,52835],{"class":82},[72,65243,52231],{"class":51718},[72,65245,51725],{"class":82},[72,65247,65248,65250,65252],{"class":74,"line":33213},[72,65249,52203],{"class":82},[72,65251,52218],{"class":51718},[72,65253,51725],{"class":82},[72,65255,65256],{"class":74,"line":33219},[72,65257,2828],{"emptyLinePlaceholder":490},[72,65259,65260,65262,65264],{"class":74,"line":33233},[72,65261,52203],{"class":82},[72,65263,51053],{"class":51718},[72,65265,51725],{"class":82},[15,65267,65268],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[15,65270,65271],{},"在监听事件中，this指向的就是他的调用者",[15,65273,65274],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[15,65276,54138],{},[15,65278,65279],{},"(function () {",[15,65281,65282],{},"const list = document.querySelector('.xtx-elevator-list')",[15,65284,65285],{},"list.addEventListener('click', function (e) {",[15,65287,65288],{},"if (e.target.tagName === 'A') {",[15,65290,65291],{},"\u002F\u002F 排他思想",[15,65293,65294],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[15,65296,65297],{},"const old = document.querySelector('.xtx-elevator-list .active')",[15,65299,65300],{},"\u002F\u002F console.log(old);",[15,65302,65303],{},"\u002F\u002F 判断",[15,65305,65306],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[15,65308,65309],{},"if (old) old.classList.remove('active')",[15,65311,65312],{},"e.target.classList.add('active')",[15,65314,1500],{},[15,65316,52882],{},[15,65318,65319],{},"})();",[531,65321,65323],{"id":65322},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[63,65325,65327],{"className":51051,"code":65326,"language":51053,"meta":68,"style":68},"\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",[34,65328,65329,65339,65343,65351,65355,65369,65383,65395,65403,65409,65419,65429,65433,65437,65444,65456,65467,65484,65497,65511,65521,65525,65529,65536,65547,65565,65575,65587,65591,65595,65602,65619,65630,65642,65646,65650,65657,65669,65673,65681,65689,65693,65701,65709,65717,65732,65776,65784,65797,65810,65823,65831,65839,65847,65875,65883,65895,65908,65921,65929,65937,65945,65971,65979,65992,66004,66017,66025,66033,66041,66067,66075,66088,66100,66113,66121,66129,66137,66142,66162,66167,66187,66192,66209,66214,66222,66227,66256,66269,66273,66277,66282,66286,66314,66319,66336,66341,66346,66351,66356,66382,66386,66390,66398,66406,66410],{"__ignoreMap":68},[72,65330,65331,65333,65335,65337],{"class":74,"line":75},[72,65332,51715],{"class":82},[72,65334,51719],{"class":51718},[72,65336,51722],{"class":358},[72,65338,51725],{"class":82},[72,65340,65341],{"class":74,"line":370},[72,65342,2828],{"emptyLinePlaceholder":490},[72,65344,65345,65347,65349],{"class":74,"line":1608},[72,65346,1464],{"class":82},[72,65348,51053],{"class":51718},[72,65350,51725],{"class":82},[72,65352,65353],{"class":74,"line":1623},[72,65354,2828],{"emptyLinePlaceholder":490},[72,65356,65357,65359,65361,65363,65365,65367],{"class":74,"line":1629},[72,65358,1464],{"class":82},[72,65360,51752],{"class":51718},[72,65362,51734],{"class":358},[72,65364,609],{"class":82},[72,65366,51739],{"class":366},[72,65368,51725],{"class":82},[72,65370,65371,65373,65375,65377,65379,65381],{"class":74,"line":1643},[72,65372,52562],{"class":82},[72,65374,51762],{"class":51718},[72,65376,51765],{"class":358},[72,65378,609],{"class":82},[72,65380,51770],{"class":366},[72,65382,51725],{"class":82},[72,65384,65385,65387,65389,65391,65393],{"class":74,"line":1649},[72,65386,52562],{"class":82},[72,65388,51825],{"class":51718},[72,65390,55732],{"class":82},[72,65392,51825],{"class":51718},[72,65394,51725],{"class":82},[72,65396,65397,65399,65401],{"class":74,"line":1740},[72,65398,52562],{"class":82},[72,65400,473],{"class":51718},[72,65402,51725],{"class":82},[72,65404,65405,65407],{"class":74,"line":1746},[72,65406,6829],{"class":51718},[72,65408,15998],{"class":82},[72,65410,65411,65413,65415,65417],{"class":74,"line":1758},[72,65412,55124],{"class":362},[72,65414,51855],{"class":82},[72,65416,747],{"class":362},[72,65418,1719],{"class":82},[72,65420,65421,65423,65425,65427],{"class":74,"line":2041},[72,65422,55113],{"class":362},[72,65424,51855],{"class":82},[72,65426,747],{"class":362},[72,65428,1719],{"class":82},[72,65430,65431],{"class":74,"line":2046},[72,65432,2615],{"class":82},[72,65434,65435],{"class":74,"line":2052},[72,65436,2828],{"emptyLinePlaceholder":490},[72,65438,65439,65442],{"class":74,"line":2057},[72,65440,65441],{"class":51718},"    table",[72,65443,15998],{"class":82},[72,65445,65446,65449,65451,65454],{"class":74,"line":2071},[72,65447,65448],{"class":362},"      border-collapse",[72,65450,51855],{"class":82},[72,65452,65453],{"class":362},"collapse",[72,65455,1719],{"class":82},[72,65457,65458,65461,65463,65465],{"class":74,"line":2076},[72,65459,65460],{"class":362},"      border-spacing",[72,65462,51855],{"class":82},[72,65464,747],{"class":362},[72,65466,1719],{"class":82},[72,65468,65469,65471,65473,65475,65477,65479,65482],{"class":74,"line":2082},[72,65470,62395],{"class":362},[72,65472,51855],{"class":82},[72,65474,772],{"class":362},[72,65476,51910],{"class":78},[72,65478,51939],{"class":362},[72,65480,65481],{"class":362}," #c0c0c0",[72,65483,1719],{"class":82},[72,65485,65486,65488,65490,65493,65495],{"class":74,"line":2103},[72,65487,55189],{"class":362},[72,65489,51855],{"class":82},[72,65491,65492],{"class":362},"500",[72,65494,51910],{"class":78},[72,65496,1719],{"class":82},[72,65498,65499,65501,65503,65505,65507,65509],{"class":74,"line":2108},[72,65500,55124],{"class":362},[72,65502,51855],{"class":82},[72,65504,865],{"class":362},[72,65506,51910],{"class":78},[72,65508,51974],{"class":362},[72,65510,1719],{"class":82},[72,65512,65513,65515,65517,65519],{"class":74,"line":2122},[72,65514,57704],{"class":362},[72,65516,51855],{"class":82},[72,65518,52010],{"class":362},[72,65520,1719],{"class":82},[72,65522,65523],{"class":74,"line":2127},[72,65524,2615],{"class":82},[72,65526,65527],{"class":74,"line":2156},[72,65528,2828],{"emptyLinePlaceholder":490},[72,65530,65531,65534],{"class":74,"line":2161},[72,65532,65533],{"class":51718},"    th",[72,65535,15998],{"class":82},[72,65537,65538,65540,65542,65545],{"class":74,"line":2178},[72,65539,55302],{"class":362},[72,65541,51855],{"class":82},[72,65543,65544],{"class":362},"#09c",[72,65546,1719],{"class":82},[72,65548,65549,65552,65554,65556,65558,65560,65563],{"class":74,"line":2183},[72,65550,65551],{"class":362},"      font",[72,65553,51855],{"class":82},[72,65555,62757],{"class":362},[72,65557,64491],{"class":362},[72,65559,51910],{"class":78},[72,65561,65562],{"class":366}," \"微软雅黑\"",[72,65564,1719],{"class":82},[72,65566,65567,65569,65571,65573],{"class":74,"line":2188},[72,65568,57834],{"class":362},[72,65570,51855],{"class":82},[72,65572,61260],{"class":362},[72,65574,1719],{"class":82},[72,65576,65577,65579,65581,65583,65585],{"class":74,"line":2193},[72,65578,55203],{"class":362},[72,65580,51855],{"class":82},[72,65582,1354],{"class":362},[72,65584,51910],{"class":78},[72,65586,1719],{"class":82},[72,65588,65589],{"class":74,"line":2207},[72,65590,2615],{"class":82},[72,65592,65593],{"class":74,"line":2212},[72,65594,2828],{"emptyLinePlaceholder":490},[72,65596,65597,65600],{"class":74,"line":3005},[72,65598,65599],{"class":51718},"    td",[72,65601,15998],{"class":82},[72,65603,65604,65606,65608,65610,65612,65614,65617],{"class":74,"line":3019},[72,65605,62395],{"class":362},[72,65607,51855],{"class":82},[72,65609,772],{"class":362},[72,65611,51910],{"class":78},[72,65613,51939],{"class":362},[72,65615,65616],{"class":362}," #d0d0d0",[72,65618,1719],{"class":82},[72,65620,65621,65623,65625,65628],{"class":74,"line":3027},[72,65622,57834],{"class":362},[72,65624,51855],{"class":82},[72,65626,65627],{"class":362},"#404060",[72,65629,1719],{"class":82},[72,65631,65632,65634,65636,65638,65640],{"class":74,"line":3032},[72,65633,55113],{"class":362},[72,65635,51855],{"class":82},[72,65637,1000],{"class":362},[72,65639,51910],{"class":78},[72,65641,1719],{"class":82},[72,65643,65644],{"class":74,"line":3038},[72,65645,2615],{"class":82},[72,65647,65648],{"class":74,"line":3044},[72,65649,2828],{"emptyLinePlaceholder":490},[72,65651,65652,65655],{"class":74,"line":3049},[72,65653,65654],{"class":358},"    .allCheck",[72,65656,15998],{"class":82},[72,65658,65659,65661,65663,65665,65667],{"class":74,"line":8374},[72,65660,55189],{"class":362},[72,65662,51855],{"class":82},[72,65664,1166],{"class":362},[72,65666,51910],{"class":78},[72,65668,1719],{"class":82},[72,65670,65671],{"class":74,"line":8398},[72,65672,2615],{"class":82},[72,65674,65675,65677,65679],{"class":74,"line":8403},[72,65676,52835],{"class":82},[72,65678,473],{"class":51718},[72,65680,51725],{"class":82},[72,65682,65683,65685,65687],{"class":74,"line":8409},[72,65684,52203],{"class":82},[72,65686,51752],{"class":51718},[72,65688,51725],{"class":82},[72,65690,65691],{"class":74,"line":8436},[72,65692,2828],{"emptyLinePlaceholder":490},[72,65694,65695,65697,65699],{"class":74,"line":8441},[72,65696,1464],{"class":82},[72,65698,52218],{"class":51718},[72,65700,51725],{"class":82},[72,65702,65703,65705,65707],{"class":74,"line":8447},[72,65704,52562],{"class":82},[72,65706,154],{"class":51718},[72,65708,51725],{"class":82},[72,65710,65711,65713,65715],{"class":74,"line":8459},[72,65712,51759],{"class":82},[72,65714,160],{"class":51718},[72,65716,51725],{"class":82},[72,65718,65719,65721,65723,65725,65727,65730],{"class":74,"line":8471},[72,65720,55652],{"class":82},[72,65722,163],{"class":51718},[72,65724,53904],{"class":358},[72,65726,609],{"class":82},[72,65728,65729],{"class":366},"\"allCheck\"",[72,65731,51725],{"class":82},[72,65733,65734,65736,65738,65740,65742,65744,65746,65748,65750,65752,65754,65757,65760,65762,65764,65766,65769,65772,65774],{"class":74,"line":8483},[72,65735,55720],{"class":82},[72,65737,54239],{"class":51718},[72,65739,54242],{"class":358},[72,65741,609],{"class":82},[72,65743,54247],{"class":366},[72,65745,15346],{"class":358},[72,65747,609],{"class":82},[72,65749,8078],{"class":366},[72,65751,15385],{"class":358},[72,65753,609],{"class":82},[72,65755,65756],{"class":366},"\"checkAll\"",[72,65758,65759],{"class":82},"> \u003C",[72,65761,72],{"class":51718},[72,65763,53904],{"class":358},[72,65765,609],{"class":82},[72,65767,65768],{"class":366},"\"all\"",[72,65770,65771],{"class":82},">全选\u003C\u002F",[72,65773,72],{"class":51718},[72,65775,51725],{"class":82},[72,65777,65778,65780,65782],{"class":74,"line":10142},[72,65779,55825],{"class":82},[72,65781,163],{"class":51718},[72,65783,51725],{"class":82},[72,65785,65786,65788,65790,65793,65795],{"class":74,"line":10167},[72,65787,55652],{"class":82},[72,65789,163],{"class":51718},[72,65791,65792],{"class":82},">商品\u003C\u002F",[72,65794,163],{"class":51718},[72,65796,51725],{"class":82},[72,65798,65799,65801,65803,65806,65808],{"class":74,"line":10190},[72,65800,55652],{"class":82},[72,65802,163],{"class":51718},[72,65804,65805],{"class":82},">商家\u003C\u002F",[72,65807,163],{"class":51718},[72,65809,51725],{"class":82},[72,65811,65812,65814,65816,65819,65821],{"class":74,"line":10214},[72,65813,55652],{"class":82},[72,65815,163],{"class":51718},[72,65817,65818],{"class":82},">价格\u003C\u002F",[72,65820,163],{"class":51718},[72,65822,51725],{"class":82},[72,65824,65825,65827,65829],{"class":74,"line":10219},[72,65826,52194],{"class":82},[72,65828,160],{"class":51718},[72,65830,51725],{"class":82},[72,65832,65833,65835,65837],{"class":74,"line":10224},[72,65834,51759],{"class":82},[72,65836,160],{"class":51718},[72,65838,51725],{"class":82},[72,65840,65841,65843,65845],{"class":74,"line":10229},[72,65842,55652],{"class":82},[72,65844,179],{"class":51718},[72,65846,51725],{"class":82},[72,65848,65849,65851,65853,65855,65857,65859,65861,65863,65866,65868,65870,65873],{"class":74,"line":10238},[72,65850,55720],{"class":82},[72,65852,54239],{"class":51718},[72,65854,54242],{"class":358},[72,65856,609],{"class":82},[72,65858,54247],{"class":366},[72,65860,15346],{"class":358},[72,65862,609],{"class":82},[72,65864,65865],{"class":366},"\"check\"",[72,65867,53904],{"class":358},[72,65869,609],{"class":82},[72,65871,65872],{"class":366},"\"ck\"",[72,65874,51725],{"class":82},[72,65876,65877,65879,65881],{"class":74,"line":10243},[72,65878,55825],{"class":82},[72,65880,179],{"class":51718},[72,65882,51725],{"class":82},[72,65884,65885,65887,65889,65891,65893],{"class":74,"line":10249},[72,65886,55652],{"class":82},[72,65888,179],{"class":51718},[72,65890,61591],{"class":82},[72,65892,179],{"class":51718},[72,65894,51725],{"class":82},[72,65896,65897,65899,65901,65904,65906],{"class":74,"line":10270},[72,65898,55652],{"class":82},[72,65900,179],{"class":51718},[72,65902,65903],{"class":82},">小米\u003C\u002F",[72,65905,179],{"class":51718},[72,65907,51725],{"class":82},[72,65909,65910,65912,65914,65917,65919],{"class":74,"line":10276},[72,65911,55652],{"class":82},[72,65913,179],{"class":51718},[72,65915,65916],{"class":82},">￥1999\u003C\u002F",[72,65918,179],{"class":51718},[72,65920,51725],{"class":82},[72,65922,65923,65925,65927],{"class":74,"line":10290},[72,65924,52194],{"class":82},[72,65926,160],{"class":51718},[72,65928,51725],{"class":82},[72,65930,65931,65933,65935],{"class":74,"line":10296},[72,65932,51759],{"class":82},[72,65934,160],{"class":51718},[72,65936,51725],{"class":82},[72,65938,65939,65941,65943],{"class":74,"line":10323},[72,65940,55652],{"class":82},[72,65942,179],{"class":51718},[72,65944,51725],{"class":82},[72,65946,65947,65949,65951,65953,65955,65957,65959,65961,65963,65965,65967,65969],{"class":74,"line":10332},[72,65948,55720],{"class":82},[72,65950,54239],{"class":51718},[72,65952,54242],{"class":358},[72,65954,609],{"class":82},[72,65956,54247],{"class":366},[72,65958,15346],{"class":358},[72,65960,609],{"class":82},[72,65962,65865],{"class":366},[72,65964,53904],{"class":358},[72,65966,609],{"class":82},[72,65968,65872],{"class":366},[72,65970,51725],{"class":82},[72,65972,65973,65975,65977],{"class":74,"line":10338},[72,65974,55825],{"class":82},[72,65976,179],{"class":51718},[72,65978,51725],{"class":82},[72,65980,65981,65983,65985,65988,65990],{"class":74,"line":10346},[72,65982,55652],{"class":82},[72,65984,179],{"class":51718},[72,65986,65987],{"class":82},">小米净水器\u003C\u002F",[72,65989,179],{"class":51718},[72,65991,51725],{"class":82},[72,65993,65994,65996,65998,66000,66002],{"class":74,"line":10351},[72,65995,55652],{"class":82},[72,65997,179],{"class":51718},[72,65999,65903],{"class":82},[72,66001,179],{"class":51718},[72,66003,51725],{"class":82},[72,66005,66006,66008,66010,66013,66015],{"class":74,"line":17030},[72,66007,55652],{"class":82},[72,66009,179],{"class":51718},[72,66011,66012],{"class":82},">￥4999\u003C\u002F",[72,66014,179],{"class":51718},[72,66016,51725],{"class":82},[72,66018,66019,66021,66023],{"class":74,"line":17036},[72,66020,52194],{"class":82},[72,66022,160],{"class":51718},[72,66024,51725],{"class":82},[72,66026,66027,66029,66031],{"class":74,"line":17059},[72,66028,51759],{"class":82},[72,66030,160],{"class":51718},[72,66032,51725],{"class":82},[72,66034,66035,66037,66039],{"class":74,"line":17065},[72,66036,55652],{"class":82},[72,66038,179],{"class":51718},[72,66040,51725],{"class":82},[72,66042,66043,66045,66047,66049,66051,66053,66055,66057,66059,66061,66063,66065],{"class":74,"line":17088},[72,66044,55720],{"class":82},[72,66046,54239],{"class":51718},[72,66048,54242],{"class":358},[72,66050,609],{"class":82},[72,66052,54247],{"class":366},[72,66054,15346],{"class":358},[72,66056,609],{"class":82},[72,66058,65865],{"class":366},[72,66060,53904],{"class":358},[72,66062,609],{"class":82},[72,66064,65872],{"class":366},[72,66066,51725],{"class":82},[72,66068,66069,66071,66073],{"class":74,"line":17102},[72,66070,55825],{"class":82},[72,66072,179],{"class":51718},[72,66074,51725],{"class":82},[72,66076,66077,66079,66081,66084,66086],{"class":74,"line":17122},[72,66078,55652],{"class":82},[72,66080,179],{"class":51718},[72,66082,66083],{"class":82},">小米电视\u003C\u002F",[72,66085,179],{"class":51718},[72,66087,51725],{"class":82},[72,66089,66090,66092,66094,66096,66098],{"class":74,"line":17128},[72,66091,55652],{"class":82},[72,66093,179],{"class":51718},[72,66095,65903],{"class":82},[72,66097,179],{"class":51718},[72,66099,51725],{"class":82},[72,66101,66102,66104,66106,66109,66111],{"class":74,"line":17139},[72,66103,55652],{"class":82},[72,66105,179],{"class":51718},[72,66107,66108],{"class":82},">￥5999\u003C\u002F",[72,66110,179],{"class":51718},[72,66112,51725],{"class":82},[72,66114,66115,66117,66119],{"class":74,"line":17162},[72,66116,52194],{"class":82},[72,66118,160],{"class":51718},[72,66120,51725],{"class":82},[72,66122,66123,66125,66127],{"class":74,"line":17184},[72,66124,52835],{"class":82},[72,66126,154],{"class":51718},[72,66128,51725],{"class":82},[72,66130,66131,66133,66135],{"class":74,"line":17189},[72,66132,52562],{"class":82},[72,66134,52231],{"class":51718},[72,66136,51725],{"class":82},[72,66138,66139],{"class":74,"line":17195},[72,66140,66141],{"class":621},"    \u002F\u002F 1. 获取大复选框\n",[72,66143,66144,66146,66149,66151,66153,66155,66157,66160],{"class":74,"line":17209},[72,66145,11647],{"class":78},[72,66147,66148],{"class":362}," checkAll",[72,66150,13990],{"class":78},[72,66152,54814],{"class":82},[72,66154,54817],{"class":358},[72,66156,564],{"class":82},[72,66158,66159],{"class":366},"'#checkAll'",[72,66161,570],{"class":82},[72,66163,66164],{"class":74,"line":17222},[72,66165,66166],{"class":621},"    \u002F\u002F 2. 获取所有的小复选框\n",[72,66168,66169,66171,66174,66176,66178,66180,66182,66185],{"class":74,"line":17227},[72,66170,11647],{"class":78},[72,66172,66173],{"class":362}," cks",[72,66175,13990],{"class":78},[72,66177,54814],{"class":82},[72,66179,56099],{"class":358},[72,66181,564],{"class":82},[72,66183,66184],{"class":366},"'.ck'",[72,66186,570],{"class":82},[72,66188,66189],{"class":74,"line":17241},[72,66190,66191],{"class":621},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[72,66193,66194,66197,66199,66201,66203,66205,66207],{"class":74,"line":17246},[72,66195,66196],{"class":82},"    checkAll.",[72,66198,58231],{"class":358},[72,66200,564],{"class":82},[72,66202,58236],{"class":366},[72,66204,12861],{"class":82},[72,66206,54867],{"class":78},[72,66208,54870],{"class":82},[72,66210,66211],{"class":74,"line":17252},[72,66212,66213],{"class":621},"      \u002F\u002F 得到当前大复选框的选中状态\n",[72,66215,66216,66219],{"class":74,"line":17257},[72,66217,66218],{"class":621},"      \u002F\u002F console.log(checkAll.checked)",[72,66220,66221],{"class":621},"  \u002F\u002F 得到 是 true 或者是 false\n",[72,66223,66224],{"class":74,"line":17271},[72,66225,66226],{"class":621},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[72,66228,66229,66231,66233,66235,66237,66239,66241,66243,66245,66248,66250,66252,66254],{"class":74,"line":17276},[72,66230,52702],{"class":78},[72,66232,2087],{"class":82},[72,66234,52265],{"class":78},[72,66236,9864],{"class":82},[72,66238,609],{"class":78},[72,66240,4521],{"class":362},[72,66242,9871],{"class":82},[72,66244,1464],{"class":78},[72,66246,66247],{"class":82}," cks.",[72,66249,52386],{"class":362},[72,66251,3642],{"class":82},[72,66253,2720],{"class":78},[72,66255,12868],{"class":82},[72,66257,66258,66261,66263,66266],{"class":74,"line":17281},[72,66259,66260],{"class":82},"        cks[i].checked ",[72,66262,609],{"class":78},[72,66264,66265],{"class":362}," this",[72,66267,66268],{"class":82},".checked\n",[72,66270,66271],{"class":74,"line":17295},[72,66272,52816],{"class":82},[72,66274,66275],{"class":74,"line":17307},[72,66276,33879],{"class":82},[72,66278,66279],{"class":74,"line":17312},[72,66280,66281],{"class":621},"    \u002F\u002F 5. 小复选框控制大复选框\n",[72,66283,66284],{"class":74,"line":17325},[72,66285,2828],{"emptyLinePlaceholder":490},[72,66287,66288,66290,66292,66294,66296,66298,66300,66302,66304,66306,66308,66310,66312],{"class":74,"line":17330},[72,66289,3629],{"class":78},[72,66291,2087],{"class":82},[72,66293,52265],{"class":78},[72,66295,9864],{"class":82},[72,66297,609],{"class":78},[72,66299,4521],{"class":362},[72,66301,9871],{"class":82},[72,66303,1464],{"class":78},[72,66305,66247],{"class":82},[72,66307,52386],{"class":362},[72,66309,3642],{"class":82},[72,66311,2720],{"class":78},[72,66313,12868],{"class":82},[72,66315,66316],{"class":74,"line":17335},[72,66317,66318],{"class":621},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[72,66320,66321,66324,66326,66328,66330,66332,66334],{"class":74,"line":17340},[72,66322,66323],{"class":82},"      cks[i].",[72,66325,58231],{"class":358},[72,66327,564],{"class":82},[72,66329,58236],{"class":366},[72,66331,12861],{"class":82},[72,66333,54867],{"class":78},[72,66335,54870],{"class":82},[72,66337,66338],{"class":74,"line":17353},[72,66339,66340],{"class":621},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[72,66342,66343],{"class":74,"line":17358},[72,66344,66345],{"class":621},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[72,66347,66348],{"class":74,"line":33051},[72,66349,66350],{"class":621},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[72,66352,66353],{"class":74,"line":33057},[72,66354,66355],{"class":621},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[72,66357,66358,66361,66363,66365,66367,66369,66372,66374,66376,66378,66380],{"class":74,"line":33063},[72,66359,66360],{"class":82},"        checkAll.checked ",[72,66362,609],{"class":78},[72,66364,54814],{"class":82},[72,66366,56099],{"class":358},[72,66368,564],{"class":82},[72,66370,66371],{"class":366},"'.ck:checked'",[72,66373,31244],{"class":82},[72,66375,52386],{"class":362},[72,66377,58324],{"class":78},[72,66379,66247],{"class":82},[72,66381,56249],{"class":362},[72,66383,66384],{"class":74,"line":33069},[72,66385,65233],{"class":82},[72,66387,66388],{"class":74,"line":33075},[72,66389,2615],{"class":82},[72,66391,66392,66394,66396],{"class":74,"line":33086},[72,66393,52835],{"class":82},[72,66395,52231],{"class":51718},[72,66397,51725],{"class":82},[72,66399,66400,66402,66404],{"class":74,"line":33092},[72,66401,52203],{"class":82},[72,66403,52218],{"class":51718},[72,66405,51725],{"class":82},[72,66407,66408],{"class":74,"line":33112},[72,66409,2828],{"emptyLinePlaceholder":490},[72,66411,66412,66414,66416],{"class":74,"line":33118},[72,66413,52203],{"class":82},[72,66415,51053],{"class":51718},[72,66417,51725],{"class":82},[15,66419,66420],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[15,66422,66423],{},"用好之间比较得到的布尔值！！！",[15,66425,66426,66427,66430,66431,2087,66434,1138,66436,66439],{},"在 JS 里访问的时候，",[34,66428,66429],{},"checkbox.checked"," 是一个 ",[707,66432,66433],{},"布尔值",[34,66435,1791],{},[34,66437,66438],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[15,66441,66442,66443,66446,66447],{},"HTML 的 ",[34,66444,66445],{},"checked=\"checked\""," 只是 ",[707,66448,66449,66450,66453],{},"初始值；JS 的 ",[34,66451,66452],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[15,66455,66456],{},"：checked是一个伪类选择器",[15,66458,66459],{},[1891,66460],{"alt":68,"src":66461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[15,66463,66464,66467],{},[66465,66466],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[15,66469,66470],{},[1891,66471],{"alt":68,"src":66472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[85,66474,66476],{"id":66475},"_33-dom事件进阶","3.3 DOM事件进阶",[531,66478,66480],{"id":66479},"_331-事件流","3.3.1 事件流",[15,66482,66483],{},[1891,66484],{"alt":68,"src":66485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[22423,66487,66489],{"id":66488},"_3311-事件捕获","3.3.1.1 事件捕获",[15,66491,66492],{},[1891,66493],{"alt":68,"src":66494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[63,66496,66498],{"className":51051,"code":66497,"language":51053,"meta":68,"style":68},"\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",[34,66499,66500,66510,66524,66528,66536,66550,66570,66582,66590,66597,66609,66621,66631,66635,66639,66646,66658,66670,66680,66684,66692,66700,66704,66712,66727,66746,66754,66762,66782,66802,66818,66829,66837,66854,66865,66873,66890,66901,66909,66917,66925,66929],{"__ignoreMap":68},[72,66501,66502,66504,66506,66508],{"class":74,"line":75},[72,66503,51715],{"class":82},[72,66505,51719],{"class":51718},[72,66507,51722],{"class":358},[72,66509,51725],{"class":82},[72,66511,66512,66514,66516,66518,66520,66522],{"class":74,"line":370},[72,66513,1464],{"class":82},[72,66515,51053],{"class":51718},[72,66517,51734],{"class":358},[72,66519,609],{"class":82},[72,66521,51739],{"class":366},[72,66523,51725],{"class":82},[72,66525,66526],{"class":74,"line":1608},[72,66527,2828],{"emptyLinePlaceholder":490},[72,66529,66530,66532,66534],{"class":74,"line":1623},[72,66531,1464],{"class":82},[72,66533,51752],{"class":51718},[72,66535,51725],{"class":82},[72,66537,66538,66540,66542,66544,66546,66548],{"class":74,"line":1629},[72,66539,52562],{"class":82},[72,66541,51762],{"class":51718},[72,66543,51765],{"class":358},[72,66545,609],{"class":82},[72,66547,51770],{"class":366},[72,66549,51725],{"class":82},[72,66551,66552,66554,66556,66558,66560,66562,66564,66566,66568],{"class":74,"line":1643},[72,66553,52562],{"class":82},[72,66555,51762],{"class":51718},[72,66557,15346],{"class":358},[72,66559,609],{"class":82},[72,66561,51809],{"class":366},[72,66563,51789],{"class":358},[72,66565,609],{"class":82},[72,66567,51816],{"class":366},[72,66569,51725],{"class":82},[72,66571,66572,66574,66576,66578,66580],{"class":74,"line":1649},[72,66573,52562],{"class":82},[72,66575,51825],{"class":51718},[72,66577,51828],{"class":82},[72,66579,51825],{"class":51718},[72,66581,51725],{"class":82},[72,66583,66584,66586,66588],{"class":74,"line":1740},[72,66585,52562],{"class":82},[72,66587,473],{"class":51718},[72,66589,51725],{"class":82},[72,66591,66592,66595],{"class":74,"line":1746},[72,66593,66594],{"class":358},"    .father",[72,66596,15998],{"class":82},[72,66598,66599,66601,66603,66605,66607],{"class":74,"line":1758},[72,66600,55189],{"class":362},[72,66602,51855],{"class":82},[72,66604,65492],{"class":362},[72,66606,51910],{"class":78},[72,66608,1719],{"class":82},[72,66610,66611,66613,66615,66617,66619],{"class":74,"line":2041},[72,66612,55203],{"class":362},[72,66614,51855],{"class":82},[72,66616,65492],{"class":362},[72,66618,51910],{"class":78},[72,66620,1719],{"class":82},[72,66622,66623,66625,66627,66629],{"class":74,"line":2046},[72,66624,55302],{"class":362},[72,66626,51855],{"class":82},[72,66628,52063],{"class":362},[72,66630,1719],{"class":82},[72,66632,66633],{"class":74,"line":2052},[72,66634,2615],{"class":82},[72,66636,66637],{"class":74,"line":2057},[72,66638,2828],{"emptyLinePlaceholder":490},[72,66640,66641,66644],{"class":74,"line":2071},[72,66642,66643],{"class":358},"    .son",[72,66645,15998],{"class":82},[72,66647,66648,66650,66652,66654,66656],{"class":74,"line":2076},[72,66649,55189],{"class":362},[72,66651,51855],{"class":82},[72,66653,2151],{"class":362},[72,66655,51910],{"class":78},[72,66657,1719],{"class":82},[72,66659,66660,66662,66664,66666,66668],{"class":74,"line":2082},[72,66661,55203],{"class":362},[72,66663,51855],{"class":82},[72,66665,2151],{"class":362},[72,66667,51910],{"class":78},[72,66669,1719],{"class":82},[72,66671,66672,66674,66676,66678],{"class":74,"line":2103},[72,66673,55302],{"class":362},[72,66675,51855],{"class":82},[72,66677,55307],{"class":362},[72,66679,1719],{"class":82},[72,66681,66682],{"class":74,"line":2108},[72,66683,2615],{"class":82},[72,66685,66686,66688,66690],{"class":74,"line":2122},[72,66687,52835],{"class":82},[72,66689,473],{"class":51718},[72,66691,51725],{"class":82},[72,66693,66694,66696,66698],{"class":74,"line":2127},[72,66695,52203],{"class":82},[72,66697,51752],{"class":51718},[72,66699,51725],{"class":82},[72,66701,66702],{"class":74,"line":2156},[72,66703,2828],{"emptyLinePlaceholder":490},[72,66705,66706,66708,66710],{"class":74,"line":2161},[72,66707,1464],{"class":82},[72,66709,52218],{"class":51718},[72,66711,51725],{"class":82},[72,66713,66714,66716,66718,66720,66722,66725],{"class":74,"line":2178},[72,66715,52562],{"class":82},[72,66717,52029],{"class":51718},[72,66719,53904],{"class":358},[72,66721,609],{"class":82},[72,66723,66724],{"class":366},"\"father\"",[72,66726,51725],{"class":82},[72,66728,66729,66731,66733,66735,66737,66740,66742,66744],{"class":74,"line":2183},[72,66730,51759],{"class":82},[72,66732,52029],{"class":51718},[72,66734,53904],{"class":358},[72,66736,609],{"class":82},[72,66738,66739],{"class":366},"\"son\"",[72,66741,55732],{"class":82},[72,66743,52029],{"class":51718},[72,66745,51725],{"class":82},[72,66747,66748,66750,66752],{"class":74,"line":2188},[72,66749,52835],{"class":82},[72,66751,52029],{"class":51718},[72,66753,51725],{"class":82},[72,66755,66756,66758,66760],{"class":74,"line":2193},[72,66757,52562],{"class":82},[72,66759,52231],{"class":51718},[72,66761,51725],{"class":82},[72,66763,66764,66766,66769,66771,66773,66775,66777,66780],{"class":74,"line":2207},[72,66765,11647],{"class":78},[72,66767,66768],{"class":362}," fa",[72,66770,13990],{"class":78},[72,66772,54814],{"class":82},[72,66774,54817],{"class":358},[72,66776,564],{"class":82},[72,66778,66779],{"class":366},"'.father'",[72,66781,570],{"class":82},[72,66783,66784,66786,66789,66791,66793,66795,66797,66800],{"class":74,"line":2212},[72,66785,11647],{"class":78},[72,66787,66788],{"class":362}," son",[72,66790,13990],{"class":78},[72,66792,54814],{"class":82},[72,66794,54817],{"class":358},[72,66796,564],{"class":82},[72,66798,66799],{"class":366},"'.son'",[72,66801,570],{"class":82},[72,66803,66804,66806,66808,66810,66812,66814,66816],{"class":74,"line":3005},[72,66805,52825],{"class":82},[72,66807,58231],{"class":358},[72,66809,564],{"class":82},[72,66811,58236],{"class":366},[72,66813,12861],{"class":82},[72,66815,54867],{"class":78},[72,66817,54870],{"class":82},[72,66819,66820,66822,66824,66827],{"class":74,"line":3019},[72,66821,59343],{"class":358},[72,66823,564],{"class":82},[72,66825,66826],{"class":366},"'woshiu1'",[72,66828,570],{"class":82},[72,66830,66831,66833,66835],{"class":74,"line":3027},[72,66832,54953],{"class":82},[72,66834,1791],{"class":362},[72,66836,570],{"class":82},[72,66838,66839,66842,66844,66846,66848,66850,66852],{"class":74,"line":3032},[72,66840,66841],{"class":82},"    fa.",[72,66843,58231],{"class":358},[72,66845,564],{"class":82},[72,66847,58236],{"class":366},[72,66849,12861],{"class":82},[72,66851,54867],{"class":78},[72,66853,54870],{"class":82},[72,66855,66856,66858,66860,66863],{"class":74,"line":3038},[72,66857,59343],{"class":358},[72,66859,564],{"class":82},[72,66861,66862],{"class":366},"'1'",[72,66864,570],{"class":82},[72,66866,66867,66869,66871],{"class":74,"line":3044},[72,66868,54953],{"class":82},[72,66870,1791],{"class":362},[72,66872,570],{"class":82},[72,66874,66875,66878,66880,66882,66884,66886,66888],{"class":74,"line":3049},[72,66876,66877],{"class":82},"    son.",[72,66879,58231],{"class":358},[72,66881,564],{"class":82},[72,66883,58236],{"class":366},[72,66885,12861],{"class":82},[72,66887,54867],{"class":78},[72,66889,54870],{"class":82},[72,66891,66892,66894,66896,66899],{"class":74,"line":8374},[72,66893,59343],{"class":358},[72,66895,564],{"class":82},[72,66897,66898],{"class":366},"'2'",[72,66900,570],{"class":82},[72,66902,66903,66905,66907],{"class":74,"line":8398},[72,66904,54953],{"class":82},[72,66906,1791],{"class":362},[72,66908,570],{"class":82},[72,66910,66911,66913,66915],{"class":74,"line":8403},[72,66912,52835],{"class":82},[72,66914,52231],{"class":51718},[72,66916,51725],{"class":82},[72,66918,66919,66921,66923],{"class":74,"line":8409},[72,66920,52203],{"class":82},[72,66922,52218],{"class":51718},[72,66924,51725],{"class":82},[72,66926,66927],{"class":74,"line":8436},[72,66928,2828],{"emptyLinePlaceholder":490},[72,66930,66931,66933,66935],{"class":74,"line":8441},[72,66932,52203],{"class":82},[72,66934,51053],{"class":51718},[72,66936,51725],{"class":82},[15,66938,66939],{},[1891,66940],{"alt":68,"src":66941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[15,66943,66944],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[22423,66946,66948],{"id":66947},"_3312-事件冒泡","3.3.1.2 事件冒泡",[15,66950,66951],{},[1891,66952],{"alt":68,"src":66953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[15,66955,66956],{},"反着来",[15,66958,66959],{},"注意是同名事件，比如都是‘click’",[22423,66961,66963],{"id":66962},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[15,66965,66966],{},[1891,66967],{"alt":68,"src":66968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[22423,66970,66972],{"id":66971},"_3314-解绑事件","3.3.1.4 解绑事件",[15,66974,66975],{},[1891,66976],{"alt":68,"src":66977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[15,66979,66980],{},[1891,66981],{"alt":68,"src":66982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[22423,66984,66986],{"id":66985},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[22,66988,66989],{},[25,66990,66991],{},"事件类型的区别",[15,66993,66994],{},[1891,66995],{"alt":68,"src":66996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[15,66998,66999],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[22,67001,67002],{"start":370},[25,67003,67004],{},"注册事件的区别",[15,67006,67007],{},[1891,67008],{"alt":68,"src":67009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[22423,67011,67013],{"id":67012},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[15,67015,67016],{},[1891,67017],{"alt":68,"src":67018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[15,67020,67021],{},[1891,67022],{"alt":68,"src":67023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[63,67025,67027],{"className":53485,"code":67026,"language":53487,"meta":68,"style":68},"\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",[34,67028,67029,67037,67054,67077,67085,67090,67095,67100,67104,67112,67120],{"__ignoreMap":68},[72,67030,67031,67033,67035],{"class":74,"line":75},[72,67032,1464],{"class":82},[72,67034,52218],{"class":51718},[72,67036,51725],{"class":82},[72,67038,67039,67041,67044,67047,67049,67052],{"class":74,"line":370},[72,67040,52562],{"class":82},[72,67042,67043],{"class":51718},"form",[72,67045,67046],{"class":358}," action",[72,67048,609],{"class":82},[72,67050,67051],{"class":366},"\"http:\u002F\u002Fwww.itcast.cn\"",[72,67053,51725],{"class":82},[72,67055,67056,67058,67060,67062,67064,67067,67070,67072,67075],{"class":74,"line":1608},[72,67057,51759],{"class":82},[72,67059,54239],{"class":51718},[72,67061,54242],{"class":358},[72,67063,609],{"class":82},[72,67065,67066],{"class":366},"\"submit\"",[72,67068,67069],{"class":358}," value",[72,67071,609],{"class":82},[72,67073,67074],{"class":366},"\"免费注册\"",[72,67076,51725],{"class":82},[72,67078,67079,67081,67083],{"class":74,"line":1623},[72,67080,51759],{"class":82},[72,67082,52231],{"class":51718},[72,67084,51725],{"class":82},[72,67086,67087],{"class":74,"line":1629},[72,67088,67089],{"class":82},"      const form = document.querySelector('form')\n",[72,67091,67092],{"class":74,"line":1643},[72,67093,67094],{"class":82},"      form.addEventListener('submit', function (e) {\n",[72,67096,67097],{"class":74,"line":1649},[72,67098,67099],{"class":82},"        e.preventDefault()\n",[72,67101,67102],{"class":74,"line":1740},[72,67103,65233],{"class":82},[72,67105,67106,67108,67110],{"class":74,"line":1746},[72,67107,52194],{"class":82},[72,67109,52231],{"class":51718},[72,67111,51725],{"class":82},[72,67113,67114,67116,67118],{"class":74,"line":1758},[72,67115,52835],{"class":82},[72,67117,67043],{"class":51718},[72,67119,51725],{"class":82},[72,67121,67122,67124,67126],{"class":74,"line":2041},[72,67123,52203],{"class":82},[72,67125,52218],{"class":51718},[72,67127,51725],{"class":82},[15,67129,67130],{},"点击不在跳转！！！",[531,67132,67134],{"id":67133},"_332-事件委托","3.3.2 事件委托",[15,67136,67137],{},[1891,67138],{"alt":68,"src":67139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[63,67141,67143],{"className":51051,"code":67142,"language":51053,"meta":68,"style":68},"\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",[34,67144,67145,67155,67169,67173,67181,67195,67215,67227,67235,67239,67247,67255,67267,67279,67291,67303,67315,67328,67336,67344,67349,67368,67389,67394,67399,67404,67409,67418,67422,67432,67436,67441,67446,67460,67470,67474,67478,67486,67494,67498],{"__ignoreMap":68},[72,67146,67147,67149,67151,67153],{"class":74,"line":75},[72,67148,51715],{"class":82},[72,67150,51719],{"class":51718},[72,67152,51722],{"class":358},[72,67154,51725],{"class":82},[72,67156,67157,67159,67161,67163,67165,67167],{"class":74,"line":370},[72,67158,1464],{"class":82},[72,67160,51053],{"class":51718},[72,67162,51734],{"class":358},[72,67164,609],{"class":82},[72,67166,51739],{"class":366},[72,67168,51725],{"class":82},[72,67170,67171],{"class":74,"line":1608},[72,67172,2828],{"emptyLinePlaceholder":490},[72,67174,67175,67177,67179],{"class":74,"line":1623},[72,67176,1464],{"class":82},[72,67178,51752],{"class":51718},[72,67180,51725],{"class":82},[72,67182,67183,67185,67187,67189,67191,67193],{"class":74,"line":1629},[72,67184,52562],{"class":82},[72,67186,51762],{"class":51718},[72,67188,51765],{"class":358},[72,67190,609],{"class":82},[72,67192,51770],{"class":366},[72,67194,51725],{"class":82},[72,67196,67197,67199,67201,67203,67205,67207,67209,67211,67213],{"class":74,"line":1643},[72,67198,52562],{"class":82},[72,67200,51762],{"class":51718},[72,67202,15346],{"class":358},[72,67204,609],{"class":82},[72,67206,51809],{"class":366},[72,67208,51789],{"class":358},[72,67210,609],{"class":82},[72,67212,51816],{"class":366},[72,67214,51725],{"class":82},[72,67216,67217,67219,67221,67223,67225],{"class":74,"line":1649},[72,67218,52562],{"class":82},[72,67220,51825],{"class":51718},[72,67222,51828],{"class":82},[72,67224,51825],{"class":51718},[72,67226,51725],{"class":82},[72,67228,67229,67231,67233],{"class":74,"line":1740},[72,67230,52203],{"class":82},[72,67232,51752],{"class":51718},[72,67234,51725],{"class":82},[72,67236,67237],{"class":74,"line":1746},[72,67238,2828],{"emptyLinePlaceholder":490},[72,67240,67241,67243,67245],{"class":74,"line":1758},[72,67242,1464],{"class":82},[72,67244,52218],{"class":51718},[72,67246,51725],{"class":82},[72,67248,67249,67251,67253],{"class":74,"line":2041},[72,67250,52562],{"class":82},[72,67252,251],{"class":51718},[72,67254,51725],{"class":82},[72,67256,67257,67259,67261,67263,67265],{"class":74,"line":2046},[72,67258,51759],{"class":82},[72,67260,25],{"class":51718},[72,67262,54384],{"class":82},[72,67264,25],{"class":51718},[72,67266,51725],{"class":82},[72,67268,67269,67271,67273,67275,67277],{"class":74,"line":2052},[72,67270,51759],{"class":82},[72,67272,25],{"class":51718},[72,67274,54403],{"class":82},[72,67276,25],{"class":51718},[72,67278,51725],{"class":82},[72,67280,67281,67283,67285,67287,67289],{"class":74,"line":2057},[72,67282,51759],{"class":82},[72,67284,25],{"class":51718},[72,67286,54422],{"class":82},[72,67288,25],{"class":51718},[72,67290,51725],{"class":82},[72,67292,67293,67295,67297,67299,67301],{"class":74,"line":2071},[72,67294,51759],{"class":82},[72,67296,25],{"class":51718},[72,67298,54441],{"class":82},[72,67300,25],{"class":51718},[72,67302,51725],{"class":82},[72,67304,67305,67307,67309,67311,67313],{"class":74,"line":2076},[72,67306,51759],{"class":82},[72,67308,25],{"class":51718},[72,67310,54460],{"class":82},[72,67312,25],{"class":51718},[72,67314,51725],{"class":82},[72,67316,67317,67319,67321,67324,67326],{"class":74,"line":2082},[72,67318,51759],{"class":82},[72,67320,15],{"class":51718},[72,67322,67323],{"class":82},">我不需要变色\u003C\u002F",[72,67325,15],{"class":51718},[72,67327,51725],{"class":82},[72,67329,67330,67332,67334],{"class":74,"line":2103},[72,67331,52835],{"class":82},[72,67333,251],{"class":51718},[72,67335,51725],{"class":82},[72,67337,67338,67340,67342],{"class":74,"line":2108},[72,67339,52562],{"class":82},[72,67341,52231],{"class":51718},[72,67343,51725],{"class":82},[72,67345,67346],{"class":74,"line":2122},[72,67347,67348],{"class":621},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[72,67350,67351,67353,67355,67357,67359,67361,67363,67366],{"class":74,"line":2127},[72,67352,11647],{"class":78},[72,67354,61710],{"class":362},[72,67356,13990],{"class":78},[72,67358,54814],{"class":82},[72,67360,54817],{"class":358},[72,67362,564],{"class":82},[72,67364,67365],{"class":366},"'ul'",[72,67367,570],{"class":82},[72,67369,67370,67373,67375,67377,67379,67381,67383,67385,67387],{"class":74,"line":2156},[72,67371,67372],{"class":82},"    ul.",[72,67374,58231],{"class":358},[72,67376,564],{"class":82},[72,67378,58236],{"class":366},[72,67380,12861],{"class":82},[72,67382,54867],{"class":78},[72,67384,2087],{"class":82},[72,67386,637],{"class":5642},[72,67388,12868],{"class":82},[72,67390,67391],{"class":74,"line":2161},[72,67392,67393],{"class":621},"      \u002F\u002F alert(1)\n",[72,67395,67396],{"class":74,"line":2178},[72,67397,67398],{"class":621},"      \u002F\u002F e.target就是我们点击的对象\n",[72,67400,67401],{"class":74,"line":2183},[72,67402,67403],{"class":621},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[72,67405,67406],{"class":74,"line":2188},[72,67407,67408],{"class":621},"      \u002F\u002F e.target.style.color = 'red'\n",[72,67410,67411,67413,67415],{"class":74,"line":2193},[72,67412,58662],{"class":82},[72,67414,58665],{"class":358},[72,67416,67417],{"class":82},"(e)\n",[72,67419,67420],{"class":74,"line":2207},[72,67421,2828],{"emptyLinePlaceholder":490},[72,67423,67424,67426,67429],{"class":74,"line":2212},[72,67425,58662],{"class":82},[72,67427,67428],{"class":358},"dir",[72,67430,67431],{"class":82},"(e.target)\n",[72,67433,67434],{"class":74,"line":3005},[72,67435,2828],{"emptyLinePlaceholder":490},[72,67437,67438],{"class":74,"line":3019},[72,67439,67440],{"class":621},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[72,67442,67443],{"class":74,"line":3027},[72,67444,67445],{"class":621},"      \u002F\u002F 通过tagName来进行判断\n",[72,67447,67448,67450,67453,67455,67458],{"class":74,"line":3032},[72,67449,54898],{"class":78},[72,67451,67452],{"class":82}," (e.target.tagName ",[72,67454,54904],{"class":78},[72,67456,67457],{"class":366}," 'LI'",[72,67459,12868],{"class":82},[72,67461,67462,67465,67467],{"class":74,"line":3038},[72,67463,67464],{"class":82},"        e.target.style.color ",[72,67466,609],{"class":78},[72,67468,67469],{"class":366}," 'red'\n",[72,67471,67472],{"class":74,"line":3044},[72,67473,52816],{"class":82},[72,67475,67476],{"class":74,"line":3049},[72,67477,33879],{"class":82},[72,67479,67480,67482,67484],{"class":74,"line":8374},[72,67481,52835],{"class":82},[72,67483,52231],{"class":51718},[72,67485,51725],{"class":82},[72,67487,67488,67490,67492],{"class":74,"line":8398},[72,67489,52203],{"class":82},[72,67491,52218],{"class":51718},[72,67493,51725],{"class":82},[72,67495,67496],{"class":74,"line":8403},[72,67497,2828],{"emptyLinePlaceholder":490},[72,67499,67500,67502,67504],{"class":74,"line":8409},[72,67501,52203],{"class":82},[72,67503,51053],{"class":51718},[72,67505,51725],{"class":82},[15,67507,67508],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[15,67510,67511],{},"if(e.target.ragName==='P') {}",[15,67513,67514],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[15,67516,67517],{},"通过事件委托的方式实现tab栏切换改造：",[15,67519,67520],{},"一定要记住自定义属性！！！！！！",[15,67522,67523],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[15,67525,67526],{},"id是自定义的属性名",[15,67528,67529],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[63,67531,67533],{"className":51051,"code":67532,"language":51053,"meta":68,"style":68},"\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",[34,67534,67535,67545,67559,67563,67571,67585,67605,67625,67637,67645,67651,67661,67671,67675,67679,67685,67697,67709,67721,67737,67741,67745,67751,67763,67775,67787,67797,67807,67811,67815,67823,67835,67845,67857,67861,67865,67873,67883,67893,67903,67907,67911,67921,67935,67947,67951,67955,67967,67977,67993,68003,68007,68011,68025,68035,68045,68049,68053,68059,68073,68077,68081,68089,68099,68103,68107,68116,68126,68130,68138,68146,68150,68158,68172,68186,68198,68206,68245,68277,68309,68341,68373,68381,68389,68403,68437,68471,68505,68539,68573,68581,68589,68597,68602,68607,68626,68631,68651,68659,68664,68677,68698,68711,68715,68720,68725,68738,68758,68786,68790,68794,68798,68806,68814,68818],{"__ignoreMap":68},[72,67536,67537,67539,67541,67543],{"class":74,"line":75},[72,67538,51715],{"class":82},[72,67540,51719],{"class":51718},[72,67542,51722],{"class":358},[72,67544,51725],{"class":82},[72,67546,67547,67549,67551,67553,67555,67557],{"class":74,"line":370},[72,67548,1464],{"class":82},[72,67550,51053],{"class":51718},[72,67552,51734],{"class":358},[72,67554,609],{"class":82},[72,67556,51739],{"class":366},[72,67558,51725],{"class":82},[72,67560,67561],{"class":74,"line":1608},[72,67562,2828],{"emptyLinePlaceholder":490},[72,67564,67565,67567,67569],{"class":74,"line":1623},[72,67566,1464],{"class":82},[72,67568,51752],{"class":51718},[72,67570,51725],{"class":82},[72,67572,67573,67575,67577,67579,67581,67583],{"class":74,"line":1629},[72,67574,52562],{"class":82},[72,67576,51762],{"class":51718},[72,67578,51765],{"class":358},[72,67580,609],{"class":82},[72,67582,51770],{"class":366},[72,67584,59545],{"class":82},[72,67586,67587,67589,67591,67593,67595,67597,67599,67601,67603],{"class":74,"line":1643},[72,67588,52562],{"class":82},[72,67590,51762],{"class":51718},[72,67592,51781],{"class":358},[72,67594,609],{"class":82},[72,67596,51786],{"class":366},[72,67598,51789],{"class":358},[72,67600,609],{"class":82},[72,67602,51794],{"class":366},[72,67604,59545],{"class":82},[72,67606,67607,67609,67611,67613,67615,67617,67619,67621,67623],{"class":74,"line":1649},[72,67608,52562],{"class":82},[72,67610,51762],{"class":51718},[72,67612,15346],{"class":358},[72,67614,609],{"class":82},[72,67616,51809],{"class":366},[72,67618,51789],{"class":358},[72,67620,609],{"class":82},[72,67622,51816],{"class":366},[72,67624,59545],{"class":82},[72,67626,67627,67629,67631,67633,67635],{"class":74,"line":1740},[72,67628,52562],{"class":82},[72,67630,51825],{"class":51718},[72,67632,64043],{"class":82},[72,67634,51825],{"class":51718},[72,67636,51725],{"class":82},[72,67638,67639,67641,67643],{"class":74,"line":1746},[72,67640,52562],{"class":82},[72,67642,473],{"class":51718},[72,67644,51725],{"class":82},[72,67646,67647,67649],{"class":74,"line":1758},[72,67648,6829],{"class":51718},[72,67650,15998],{"class":82},[72,67652,67653,67655,67657,67659],{"class":74,"line":2041},[72,67654,55124],{"class":362},[72,67656,51855],{"class":82},[72,67658,747],{"class":362},[72,67660,1719],{"class":82},[72,67662,67663,67665,67667,67669],{"class":74,"line":2046},[72,67664,55113],{"class":362},[72,67666,51855],{"class":82},[72,67668,747],{"class":362},[72,67670,1719],{"class":82},[72,67672,67673],{"class":74,"line":2052},[72,67674,2615],{"class":82},[72,67676,67677],{"class":74,"line":2057},[72,67678,2828],{"emptyLinePlaceholder":490},[72,67680,67681,67683],{"class":74,"line":2071},[72,67682,64094],{"class":358},[72,67684,15998],{"class":82},[72,67686,67687,67689,67691,67693,67695],{"class":74,"line":2076},[72,67688,55189],{"class":362},[72,67690,51855],{"class":82},[72,67692,64105],{"class":362},[72,67694,51910],{"class":78},[72,67696,1719],{"class":82},[72,67698,67699,67701,67703,67705,67707],{"class":74,"line":2082},[72,67700,55203],{"class":362},[72,67702,51855],{"class":82},[72,67704,64118],{"class":362},[72,67706,51910],{"class":78},[72,67708,1719],{"class":82},[72,67710,67711,67713,67715,67717,67719],{"class":74,"line":2103},[72,67712,55124],{"class":362},[72,67714,51855],{"class":82},[72,67716,1254],{"class":362},[72,67718,51910],{"class":78},[72,67720,1719],{"class":82},[72,67722,67723,67725,67727,67729,67731,67733,67735],{"class":74,"line":2108},[72,67724,62395],{"class":362},[72,67726,51855],{"class":82},[72,67728,772],{"class":362},[72,67730,51910],{"class":78},[72,67732,51939],{"class":362},[72,67734,62662],{"class":362},[72,67736,1719],{"class":82},[72,67738,67739],{"class":74,"line":2122},[72,67740,2615],{"class":82},[72,67742,67743],{"class":74,"line":2127},[72,67744,2828],{"emptyLinePlaceholder":490},[72,67746,67747,67749],{"class":74,"line":2156},[72,67748,64163],{"class":358},[72,67750,15998],{"class":82},[72,67752,67753,67755,67757,67759,67761],{"class":74,"line":2161},[72,67754,55189],{"class":362},[72,67756,51855],{"class":82},[72,67758,865],{"class":362},[72,67760,882],{"class":78},[72,67762,1719],{"class":82},[72,67764,67765,67767,67769,67771,67773],{"class":74,"line":2178},[72,67766,55203],{"class":362},[72,67768,51855],{"class":82},[72,67770,1461],{"class":362},[72,67772,51910],{"class":78},[72,67774,1719],{"class":82},[72,67776,67777,67779,67781,67783,67785],{"class":74,"line":2183},[72,67778,57777],{"class":362},[72,67780,51855],{"class":82},[72,67782,1461],{"class":362},[72,67784,51910],{"class":78},[72,67786,1719],{"class":82},[72,67788,67789,67791,67793,67795],{"class":74,"line":2188},[72,67790,55427],{"class":362},[72,67792,51855],{"class":82},[72,67794,51895],{"class":362},[72,67796,1719],{"class":82},[72,67798,67799,67801,67803,67805],{"class":74,"line":2193},[72,67800,55438],{"class":362},[72,67802,51855],{"class":82},[72,67804,52086],{"class":362},[72,67806,1719],{"class":82},[72,67808,67809],{"class":74,"line":2207},[72,67810,2615],{"class":82},[72,67812,67813],{"class":74,"line":2212},[72,67814,2828],{"emptyLinePlaceholder":490},[72,67816,67817,67819,67821],{"class":74,"line":3005},[72,67818,64163],{"class":358},[72,67820,64236],{"class":51718},[72,67822,15998],{"class":82},[72,67824,67825,67827,67829,67831,67833],{"class":74,"line":3019},[72,67826,55340],{"class":362},[72,67828,51855],{"class":82},[72,67830,1354],{"class":362},[72,67832,51910],{"class":78},[72,67834,1719],{"class":82},[72,67836,67837,67839,67841,67843],{"class":74,"line":3027},[72,67838,62752],{"class":362},[72,67840,51855],{"class":82},[72,67842,64259],{"class":362},[72,67844,1719],{"class":82},[72,67846,67847,67849,67851,67853,67855],{"class":74,"line":3032},[72,67848,62418],{"class":362},[72,67850,51855],{"class":82},[72,67852,1254],{"class":362},[72,67854,51910],{"class":78},[72,67856,1719],{"class":82},[72,67858,67859],{"class":74,"line":3038},[72,67860,2615],{"class":82},[72,67862,67863],{"class":74,"line":3044},[72,67864,2828],{"emptyLinePlaceholder":490},[72,67866,67867,67869,67871],{"class":74,"line":3049},[72,67868,64163],{"class":358},[72,67870,61710],{"class":51718},[72,67872,15998],{"class":82},[72,67874,67875,67877,67879,67881],{"class":74,"line":8374},[72,67876,55150],{"class":362},[72,67878,51855],{"class":82},[72,67880,55155],{"class":362},[72,67882,1719],{"class":82},[72,67884,67885,67887,67889,67891],{"class":74,"line":8398},[72,67886,55427],{"class":362},[72,67888,51855],{"class":82},[72,67890,51895],{"class":362},[72,67892,1719],{"class":82},[72,67894,67895,67897,67899,67901],{"class":74,"line":8403},[72,67896,55438],{"class":362},[72,67898,51855],{"class":82},[72,67900,51998],{"class":362},[72,67902,1719],{"class":82},[72,67904,67905],{"class":74,"line":8409},[72,67906,2615],{"class":82},[72,67908,67909],{"class":74,"line":8436},[72,67910,2828],{"emptyLinePlaceholder":490},[72,67912,67913,67915,67917,67919],{"class":74,"line":8441},[72,67914,64163],{"class":358},[72,67916,61710],{"class":51718},[72,67918,55493],{"class":51718},[72,67920,15998],{"class":82},[72,67922,67923,67925,67927,67929,67931,67933],{"class":74,"line":8447},[72,67924,55124],{"class":362},[72,67926,51855],{"class":82},[72,67928,747],{"class":362},[72,67930,9376],{"class":362},[72,67932,51910],{"class":78},[72,67934,1719],{"class":82},[72,67936,67937,67939,67941,67943,67945],{"class":74,"line":8459},[72,67938,55340],{"class":362},[72,67940,51855],{"class":82},[72,67942,1103],{"class":362},[72,67944,51910],{"class":78},[72,67946,1719],{"class":82},[72,67948,67949],{"class":74,"line":8471},[72,67950,2615],{"class":82},[72,67952,67953],{"class":74,"line":8483},[72,67954,2828],{"emptyLinePlaceholder":490},[72,67956,67957,67959,67961,67963,67965],{"class":74,"line":10142},[72,67958,64163],{"class":358},[72,67960,61710],{"class":51718},[72,67962,55493],{"class":51718},[72,67964,1827],{"class":51718},[72,67966,15998],{"class":82},[72,67968,67969,67971,67973,67975],{"class":74,"line":10167},[72,67970,64388],{"class":362},[72,67972,51855],{"class":82},[72,67974,55155],{"class":362},[72,67976,1719],{"class":82},[72,67978,67979,67981,67983,67985,67987,67989,67991],{"class":74,"line":10190},[72,67980,62650],{"class":362},[72,67982,51855],{"class":82},[72,67984,640],{"class":362},[72,67986,51910],{"class":78},[72,67988,51939],{"class":362},[72,67990,64409],{"class":362},[72,67992,1719],{"class":82},[72,67994,67995,67997,67999,68001],{"class":74,"line":10214},[72,67996,57834],{"class":362},[72,67998,51855],{"class":82},[72,68000,62787],{"class":362},[72,68002,1719],{"class":82},[72,68004,68005],{"class":74,"line":10219},[72,68006,2615],{"class":82},[72,68008,68009],{"class":74,"line":10224},[72,68010,2828],{"emptyLinePlaceholder":490},[72,68012,68013,68015,68017,68019,68021,68023],{"class":74,"line":10229},[72,68014,64163],{"class":358},[72,68016,61710],{"class":51718},[72,68018,55493],{"class":51718},[72,68020,1827],{"class":51718},[72,68022,64442],{"class":358},[72,68024,15998],{"class":82},[72,68026,68027,68029,68031,68033],{"class":74,"line":10238},[72,68028,62209],{"class":362},[72,68030,51855],{"class":82},[72,68032,64453],{"class":362},[72,68034,1719],{"class":82},[72,68036,68037,68039,68041,68043],{"class":74,"line":10243},[72,68038,57834],{"class":362},[72,68040,51855],{"class":82},[72,68042,64453],{"class":362},[72,68044,1719],{"class":82},[72,68046,68047],{"class":74,"line":10249},[72,68048,2615],{"class":82},[72,68050,68051],{"class":74,"line":10270},[72,68052,2828],{"emptyLinePlaceholder":490},[72,68054,68055,68057],{"class":74,"line":10276},[72,68056,64478],{"class":358},[72,68058,15998],{"class":82},[72,68060,68061,68063,68065,68067,68069,68071],{"class":74,"line":10290},[72,68062,55113],{"class":362},[72,68064,51855],{"class":82},[72,68066,747],{"class":362},[72,68068,64491],{"class":362},[72,68070,51910],{"class":78},[72,68072,1719],{"class":82},[72,68074,68075],{"class":74,"line":10296},[72,68076,2615],{"class":82},[72,68078,68079],{"class":74,"line":10323},[72,68080,2828],{"emptyLinePlaceholder":490},[72,68082,68083,68085,68087],{"class":74,"line":10332},[72,68084,64478],{"class":358},[72,68086,62592],{"class":358},[72,68088,15998],{"class":82},[72,68090,68091,68093,68095,68097],{"class":74,"line":10338},[72,68092,55427],{"class":362},[72,68094,51855],{"class":82},[72,68096,55155],{"class":362},[72,68098,1719],{"class":82},[72,68100,68101],{"class":74,"line":10346},[72,68102,2615],{"class":82},[72,68104,68105],{"class":74,"line":10351},[72,68106,2828],{"emptyLinePlaceholder":490},[72,68108,68109,68111,68114],{"class":74,"line":17030},[72,68110,64478],{"class":358},[72,68112,68113],{"class":358}," .active",[72,68115,15998],{"class":82},[72,68117,68118,68120,68122,68124],{"class":74,"line":17036},[72,68119,55427],{"class":362},[72,68121,51855],{"class":82},[72,68123,61287],{"class":362},[72,68125,1719],{"class":82},[72,68127,68128],{"class":74,"line":17059},[72,68129,2615],{"class":82},[72,68131,68132,68134,68136],{"class":74,"line":17065},[72,68133,52835],{"class":82},[72,68135,473],{"class":51718},[72,68137,51725],{"class":82},[72,68139,68140,68142,68144],{"class":74,"line":17088},[72,68141,52203],{"class":82},[72,68143,51752],{"class":51718},[72,68145,51725],{"class":82},[72,68147,68148],{"class":74,"line":17102},[72,68149,2828],{"emptyLinePlaceholder":490},[72,68151,68152,68154,68156],{"class":74,"line":17122},[72,68153,1464],{"class":82},[72,68155,52218],{"class":51718},[72,68157,51725],{"class":82},[72,68159,68160,68162,68164,68166,68168,68170],{"class":74,"line":17128},[72,68161,52562],{"class":82},[72,68163,52029],{"class":51718},[72,68165,53904],{"class":358},[72,68167,609],{"class":82},[72,68169,64593],{"class":366},[72,68171,51725],{"class":82},[72,68173,68174,68176,68178,68180,68182,68184],{"class":74,"line":17139},[72,68175,51759],{"class":82},[72,68177,52029],{"class":51718},[72,68179,53904],{"class":358},[72,68181,609],{"class":82},[72,68183,64608],{"class":366},[72,68185,51725],{"class":82},[72,68187,68188,68190,68192,68194,68196],{"class":74,"line":17162},[72,68189,55652],{"class":82},[72,68191,531],{"class":51718},[72,68193,64619],{"class":82},[72,68195,531],{"class":51718},[72,68197,51725],{"class":82},[72,68199,68200,68202,68204],{"class":74,"line":17184},[72,68201,55652],{"class":82},[72,68203,251],{"class":51718},[72,68205,51725],{"class":82},[72,68207,68208,68210,68212,68214,68216,68218,68220,68222,68224,68226,68228,68230,68232,68235,68237,68239,68241,68243],{"class":74,"line":17189},[72,68209,55720],{"class":82},[72,68211,25],{"class":51718},[72,68213,61470],{"class":82},[72,68215,257],{"class":51718},[72,68217,53904],{"class":358},[72,68219,609],{"class":82},[72,68221,60124],{"class":366},[72,68223,61475],{"class":358},[72,68225,609],{"class":82},[72,68227,64654],{"class":366},[72,68229,54369],{"class":358},[72,68231,609],{"class":82},[72,68233,68234],{"class":366},"\"0\"",[72,68236,64657],{"class":82},[72,68238,257],{"class":51718},[72,68240,55732],{"class":82},[72,68242,25],{"class":51718},[72,68244,51725],{"class":82},[72,68246,68247,68249,68251,68253,68255,68257,68259,68261,68263,68265,68267,68269,68271,68273,68275],{"class":74,"line":17195},[72,68248,55720],{"class":82},[72,68250,25],{"class":51718},[72,68252,61470],{"class":82},[72,68254,257],{"class":51718},[72,68256,61475],{"class":358},[72,68258,609],{"class":82},[72,68260,64654],{"class":366},[72,68262,54369],{"class":358},[72,68264,609],{"class":82},[72,68266,4106],{"class":366},[72,68268,64684],{"class":82},[72,68270,257],{"class":51718},[72,68272,55732],{"class":82},[72,68274,25],{"class":51718},[72,68276,51725],{"class":82},[72,68278,68279,68281,68283,68285,68287,68289,68291,68293,68295,68297,68299,68301,68303,68305,68307],{"class":74,"line":17209},[72,68280,55720],{"class":82},[72,68282,25],{"class":51718},[72,68284,61470],{"class":82},[72,68286,257],{"class":51718},[72,68288,61475],{"class":358},[72,68290,609],{"class":82},[72,68292,64654],{"class":366},[72,68294,54369],{"class":358},[72,68296,609],{"class":82},[72,68298,4129],{"class":366},[72,68300,64711],{"class":82},[72,68302,257],{"class":51718},[72,68304,55732],{"class":82},[72,68306,25],{"class":51718},[72,68308,51725],{"class":82},[72,68310,68311,68313,68315,68317,68319,68321,68323,68325,68327,68329,68331,68333,68335,68337,68339],{"class":74,"line":17222},[72,68312,55720],{"class":82},[72,68314,25],{"class":51718},[72,68316,61470],{"class":82},[72,68318,257],{"class":51718},[72,68320,61475],{"class":358},[72,68322,609],{"class":82},[72,68324,64654],{"class":366},[72,68326,54369],{"class":358},[72,68328,609],{"class":82},[72,68330,4142],{"class":366},[72,68332,64738],{"class":82},[72,68334,257],{"class":51718},[72,68336,55732],{"class":82},[72,68338,25],{"class":51718},[72,68340,51725],{"class":82},[72,68342,68343,68345,68347,68349,68351,68353,68355,68357,68359,68361,68363,68365,68367,68369,68371],{"class":74,"line":17227},[72,68344,55720],{"class":82},[72,68346,25],{"class":51718},[72,68348,61470],{"class":82},[72,68350,257],{"class":51718},[72,68352,61475],{"class":358},[72,68354,609],{"class":82},[72,68356,64654],{"class":366},[72,68358,54369],{"class":358},[72,68360,609],{"class":82},[72,68362,4155],{"class":366},[72,68364,64765],{"class":82},[72,68366,257],{"class":51718},[72,68368,55732],{"class":82},[72,68370,25],{"class":51718},[72,68372,51725],{"class":82},[72,68374,68375,68377,68379],{"class":74,"line":17241},[72,68376,55825],{"class":82},[72,68378,251],{"class":51718},[72,68380,51725],{"class":82},[72,68382,68383,68385,68387],{"class":74,"line":17246},[72,68384,52194],{"class":82},[72,68386,52029],{"class":51718},[72,68388,51725],{"class":82},[72,68390,68391,68393,68395,68397,68399,68401],{"class":74,"line":17252},[72,68392,51759],{"class":82},[72,68394,52029],{"class":51718},[72,68396,53904],{"class":358},[72,68398,609],{"class":82},[72,68400,64802],{"class":366},[72,68402,51725],{"class":82},[72,68404,68405,68407,68409,68411,68413,68415,68417,68419,68421,68423,68425,68427,68429,68431,68433,68435],{"class":74,"line":17257},[72,68406,55652],{"class":82},[72,68408,52029],{"class":51718},[72,68410,53904],{"class":358},[72,68412,609],{"class":82},[72,68414,64817],{"class":366},[72,68416,61470],{"class":82},[72,68418,1891],{"class":51718},[72,68420,55657],{"class":358},[72,68422,609],{"class":82},[72,68424,64828],{"class":366},[72,68426,55665],{"class":358},[72,68428,609],{"class":82},[72,68430,8078],{"class":366},[72,68432,64837],{"class":82},[72,68434,52029],{"class":51718},[72,68436,51725],{"class":82},[72,68438,68439,68441,68443,68445,68447,68449,68451,68453,68455,68457,68459,68461,68463,68465,68467,68469],{"class":74,"line":17271},[72,68440,55652],{"class":82},[72,68442,52029],{"class":51718},[72,68444,53904],{"class":358},[72,68446,609],{"class":82},[72,68448,63041],{"class":366},[72,68450,61470],{"class":82},[72,68452,1891],{"class":51718},[72,68454,55657],{"class":358},[72,68456,609],{"class":82},[72,68458,64864],{"class":366},[72,68460,55665],{"class":358},[72,68462,609],{"class":82},[72,68464,8078],{"class":366},[72,68466,64837],{"class":82},[72,68468,52029],{"class":51718},[72,68470,51725],{"class":82},[72,68472,68473,68475,68477,68479,68481,68483,68485,68487,68489,68491,68493,68495,68497,68499,68501,68503],{"class":74,"line":17276},[72,68474,55652],{"class":82},[72,68476,52029],{"class":51718},[72,68478,53904],{"class":358},[72,68480,609],{"class":82},[72,68482,63041],{"class":366},[72,68484,61470],{"class":82},[72,68486,1891],{"class":51718},[72,68488,55657],{"class":358},[72,68490,609],{"class":82},[72,68492,64899],{"class":366},[72,68494,55665],{"class":358},[72,68496,609],{"class":82},[72,68498,8078],{"class":366},[72,68500,64837],{"class":82},[72,68502,52029],{"class":51718},[72,68504,51725],{"class":82},[72,68506,68507,68509,68511,68513,68515,68517,68519,68521,68523,68525,68527,68529,68531,68533,68535,68537],{"class":74,"line":17281},[72,68508,55652],{"class":82},[72,68510,52029],{"class":51718},[72,68512,53904],{"class":358},[72,68514,609],{"class":82},[72,68516,63041],{"class":366},[72,68518,61470],{"class":82},[72,68520,1891],{"class":51718},[72,68522,55657],{"class":358},[72,68524,609],{"class":82},[72,68526,64934],{"class":366},[72,68528,55665],{"class":358},[72,68530,609],{"class":82},[72,68532,8078],{"class":366},[72,68534,64837],{"class":82},[72,68536,52029],{"class":51718},[72,68538,51725],{"class":82},[72,68540,68541,68543,68545,68547,68549,68551,68553,68555,68557,68559,68561,68563,68565,68567,68569,68571],{"class":74,"line":17295},[72,68542,55652],{"class":82},[72,68544,52029],{"class":51718},[72,68546,53904],{"class":358},[72,68548,609],{"class":82},[72,68550,63041],{"class":366},[72,68552,61470],{"class":82},[72,68554,1891],{"class":51718},[72,68556,55657],{"class":358},[72,68558,609],{"class":82},[72,68560,64969],{"class":366},[72,68562,55665],{"class":358},[72,68564,609],{"class":82},[72,68566,8078],{"class":366},[72,68568,64837],{"class":82},[72,68570,52029],{"class":51718},[72,68572,51725],{"class":82},[72,68574,68575,68577,68579],{"class":74,"line":17307},[72,68576,52194],{"class":82},[72,68578,52029],{"class":51718},[72,68580,51725],{"class":82},[72,68582,68583,68585,68587],{"class":74,"line":17312},[72,68584,52835],{"class":82},[72,68586,52029],{"class":51718},[72,68588,51725],{"class":82},[72,68590,68591,68593,68595],{"class":74,"line":17325},[72,68592,52562],{"class":82},[72,68594,52231],{"class":51718},[72,68596,51725],{"class":82},[72,68598,68599],{"class":74,"line":17330},[72,68600,68601],{"class":621},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[72,68603,68604],{"class":74,"line":17335},[72,68605,68606],{"class":621},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[72,68608,68609,68611,68613,68615,68617,68619,68621,68624],{"class":74,"line":17340},[72,68610,11647],{"class":78},[72,68612,61710],{"class":362},[72,68614,13990],{"class":78},[72,68616,54814],{"class":82},[72,68618,54817],{"class":358},[72,68620,564],{"class":82},[72,68622,68623],{"class":366},"'.tab-nav ul'",[72,68625,570],{"class":82},[72,68627,68628],{"class":74,"line":17353},[72,68629,68630],{"class":621},"    \u002F\u002F 2.添加事件\n",[72,68632,68633,68635,68637,68639,68641,68643,68645,68647,68649],{"class":74,"line":17358},[72,68634,67372],{"class":82},[72,68636,58231],{"class":358},[72,68638,564],{"class":82},[72,68640,58236],{"class":366},[72,68642,12861],{"class":82},[72,68644,54867],{"class":78},[72,68646,2087],{"class":82},[72,68648,637],{"class":5642},[72,68650,12868],{"class":82},[72,68652,68653,68655,68657],{"class":74,"line":33051},[72,68654,58662],{"class":82},[72,68656,67428],{"class":358},[72,68658,67431],{"class":82},[72,68660,68661],{"class":74,"line":33057},[72,68662,68663],{"class":621},"      \u002F\u002Fe.targer是我们点击的对象\n",[72,68665,68666,68668,68670,68672,68675],{"class":74,"line":33063},[72,68667,54898],{"class":78},[72,68669,67452],{"class":82},[72,68671,54904],{"class":78},[72,68673,68674],{"class":366}," 'A'",[72,68676,12868],{"class":82},[72,68678,68679,68681,68683,68685,68688,68690,68692,68694,68696],{"class":74,"line":33069},[72,68680,52343],{"class":82},[72,68682,54817],{"class":358},[72,68684,564],{"class":82},[72,68686,68687],{"class":366},"'.active'",[72,68689,57421],{"class":82},[72,68691,57424],{"class":358},[72,68693,564],{"class":82},[72,68695,65132],{"class":366},[72,68697,570],{"class":82},[72,68699,68700,68703,68705,68707,68709],{"class":74,"line":33075},[72,68701,68702],{"class":82},"        e.target.classList.",[72,68704,5760],{"class":358},[72,68706,564],{"class":82},[72,68708,65132],{"class":366},[72,68710,570],{"class":82},[72,68712,68713],{"class":74,"line":33086},[72,68714,2828],{"emptyLinePlaceholder":490},[72,68716,68717],{"class":74,"line":33092},[72,68718,68719],{"class":621},"        \u002F\u002F 下面大盒子模块\n",[72,68721,68722],{"class":74,"line":33112},[72,68723,68724],{"class":621},"        \u002F\u002F console.log(e.target.dataset.id)\n",[72,68726,68727,68729,68731,68733,68735],{"class":74,"line":33118},[72,68728,61688],{"class":78},[72,68730,3460],{"class":362},[72,68732,13990],{"class":78},[72,68734,45984],{"class":78},[72,68736,68737],{"class":82},"e.target.dataset.id\n",[72,68739,68740,68742,68744,68746,68748,68750,68752,68754,68756],{"class":74,"line":33129},[72,68741,52343],{"class":82},[72,68743,54817],{"class":358},[72,68745,564],{"class":82},[72,68747,65180],{"class":366},[72,68749,57421],{"class":82},[72,68751,57424],{"class":358},[72,68753,564],{"class":82},[72,68755,65132],{"class":366},[72,68757,570],{"class":82},[72,68759,68760,68762,68764,68766,68768,68770,68772,68774,68776,68778,68780,68782,68784],{"class":74,"line":33135},[72,68761,52343],{"class":82},[72,68763,54817],{"class":358},[72,68765,564],{"class":82},[72,68767,65206],{"class":366},[72,68769,995],{"class":82},[72,68771,45984],{"class":78},[72,68773,25540],{"class":362},[72,68775,57450],{"class":366},[72,68777,57421],{"class":82},[72,68779,5760],{"class":358},[72,68781,564],{"class":82},[72,68783,65132],{"class":366},[72,68785,570],{"class":82},[72,68787,68788],{"class":74,"line":33141},[72,68789,2828],{"emptyLinePlaceholder":490},[72,68791,68792],{"class":74,"line":33147},[72,68793,52816],{"class":82},[72,68795,68796],{"class":74,"line":33153},[72,68797,33879],{"class":82},[72,68799,68800,68802,68804],{"class":74,"line":33159},[72,68801,52835],{"class":82},[72,68803,52231],{"class":51718},[72,68805,51725],{"class":82},[72,68807,68808,68810,68812],{"class":74,"line":33165},[72,68809,52203],{"class":82},[72,68811,52218],{"class":51718},[72,68813,51725],{"class":82},[72,68815,68816],{"class":74,"line":33171},[72,68817,2828],{"emptyLinePlaceholder":490},[72,68819,68820,68822,68824],{"class":74,"line":33191},[72,68821,52203],{"class":82},[72,68823,51053],{"class":51718},[72,68825,51725],{"class":82},[531,68827,68829],{"id":68828},"_333-页面加载事件","3.3.3 页面加载事件",[22,68831,68832],{},[25,68833,68834],{},"load",[15,68836,68837],{},[1891,68838],{"alt":68,"src":68839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[15,68841,68842],{},"window代表整个窗口，比document还要大",[15,68844,68845],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[15,68847,68848],{},"img.addEventListener('load', function () {",[15,68850,68851],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[15,68853,52882],{},[22,68855,68856],{"start":370},[25,68857,68858],{},"DOMContentLoaded",[15,68860,68861],{},[1891,68862],{"alt":68,"src":68863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[15,68865,68866],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[531,68868,68870],{"id":68869},"_334-元素滚动事件","3.3.4 元素滚动事件",[15,68872,68873],{},[1891,68874],{"alt":68,"src":68875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[15,68877,68878],{},[1891,68879],{"alt":68,"src":68880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[15,68882,68883],{},[1891,68884],{"alt":68,"src":68885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[15,68887,68888],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[15,68890,68891],{},"获得的是数字型数据，不带单位",[15,68893,68894],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[15,68896,68897],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[15,68899,68900],{},"它是通过document.documentElement来获取",[15,68902,68903],{},[1891,68904],{"alt":68,"src":68905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[15,68907,68908],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[531,68910,68912],{"id":68911},"_335-页面缩放事件","3.3.5 页面缩放事件",[15,68914,68915],{},[1891,68916],{"alt":68,"src":68917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[15,68919,68920],{},[1891,68921],{"alt":68,"src":68922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[531,68924,68926],{"id":68925},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[15,68928,68929],{},[1891,68930],{"alt":68,"src":68931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[15,68933,68934],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[15,68936,68937],{},[1891,68938],{"alt":68,"src":68939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[15,68941,68942],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[15,68944,68945],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[15,68947,68948],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[15,68950,68951],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[15,68953,68954],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[15,68956,68957],{},[1891,68958],{"alt":68,"src":68959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[15,68961,68962],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[15,68964,68965],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[15,68967,68968],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[15,68970,68971],{},"e.pageX-box.getBoundingClientRect()",[531,68973,68975],{"id":68974},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[15,68977,68978],{},[1891,68979],{"alt":68,"src":68980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[15,68982,68983],{},"这个是相对于视口来说的，它是个方法，不是属性值",[531,68985,68987],{"id":68986},"_338-总结","3.3.8 总结",[15,68989,68990],{},[1891,68991],{"alt":68,"src":68992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[15,68994,68995],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[15,68997,68998],{},"修改盒子的宽高只能通过width和height来实现",[531,69000,69002],{"id":69001},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[63,69004,69006],{"className":51051,"code":69005,"language":51053,"meta":68,"style":68},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[34,69007,69008,69013,69018,69023,69028],{"__ignoreMap":68},[72,69009,69010],{"class":74,"line":75},[72,69011,69012],{"class":82},"\u002F* 页面滑动 *\u002F\n",[72,69014,69015],{"class":74,"line":370},[72,69016,69017],{"class":82},"html {\n",[72,69019,69020],{"class":74,"line":1608},[72,69021,69022],{"class":82},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[72,69024,69025],{"class":74,"line":1623},[72,69026,69027],{"class":82},"  scroll-behavior: smooth;\n",[72,69029,69030],{"class":74,"line":1629},[72,69031,1994],{"class":82},[15,69033,69034],{},"默认是auto",[531,69036,69038],{"id":69037},"_3310-日期对象","3.3.10 日期对象",[22423,69040,69042],{"id":69041},"_33101-实例化","3.3.10.1 实例化",[15,69044,69045],{},[1891,69046],{"alt":68,"src":69047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[22423,69049,69051],{"id":69050},"_33102-时期对象方法","3.3.10.2 时期对象方法",[15,69053,69054],{},[1891,69055],{"alt":68,"src":69056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[15,69058,69059],{},"月份+1",[15,69061,69062],{},"老外认为第一天为0，星期天",[15,69064,69065],{},"方法使用的时候必须要跟括号",[15,69067,69068],{},"快速获得日期",[15,69070,69071],{},"\u002F\u002F 得到年月日",[15,69073,69074],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[15,69076,69077],{},"\u002F\u002F 得到当地日期",[15,69079,69080],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[15,69082,69083],{},"\u002F\u002F 得到当地时间",[15,69085,69086],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[15,69088,69089],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[15,69091,69092],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[52231,69094,69095],{},"\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",[15,69097,69098],{},"学会去封装函数！",[22423,69100,69102],{"id":69101},"_33103-时间戳","3.3.10.3 时间戳",[15,69104,69105],{},[1891,69106],{"alt":68,"src":69107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[15,69109,69110],{},[1891,69111],{"alt":68,"src":69112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[15,69114,69115],{},"三种方法记住一个就可以",[531,69117,69119],{"id":69118},"_3311-节点操作","3.3.11 节点操作",[22423,69121,69123],{"id":69122},"_33111-dom节点","3.3.11.1 DOM节点",[15,69125,69126],{},[1891,69127],{"alt":68,"src":69128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[15,69130,69131],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[22423,69133,69135],{"id":69134},"_33112-查找节点","3.3.11.2 查找节点",[15,69137,69138],{},"前边的document.querySelector()是获取的元素",[15,69140,69141],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[15,69143,69144],{},[1891,69145],{"alt":68,"src":69146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[22,69148,69149],{},[25,69150,69151],{},"父节点",[15,69153,69154],{},[1891,69155],{"alt":68,"src":69156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[22,69158,69159],{"start":370},[25,69160,69161],{},"子节点",[15,69163,69164],{},[1891,69165],{"alt":68,"src":69166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[15,69168,69169],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[15,69171,69172],{},"children获得的是伪数组，是亲儿子",[22,69174,69175],{"start":1608},[25,69176,69177],{},"兄弟节点",[15,69179,69180],{},[1891,69181],{"alt":68,"src":69182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[22423,69184,69186],{"id":69185},"_33113-增加节点","3.3.11.3 增加节点",[15,69188,69189],{},[1891,69190],{"alt":68,"src":69191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[15,69193,69194],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[15,69196,69197],{},[1891,69198],{"alt":68,"src":69199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[15,69201,69202],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[15,69204,69205],{},"下面是写法的部分展示，就按照下边的格式来写",[15,69207,69208],{},"例：",[52231,69210,69211],{},"\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",[15,69213,69214],{},[1891,69215],{"alt":68,"src":69216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[15,69218,69219],{},"false只克隆标签，里边的内容不会克隆过来",[63,69221,69223],{"className":51051,"code":69222,"language":51053,"meta":68,"style":68},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[34,69224,69225],{"__ignoreMap":68},[72,69226,69227],{"class":74,"line":75},[72,69228,69222],{"class":82},[22423,69230,69232],{"id":69231},"_33114-删除节点","3.3.11.4 删除节点",[15,69234,69235],{},[1891,69236],{"alt":68,"src":69237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[15,69239,69240],{},"父亲删儿子",[15,69242,69243],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[531,69245,69247],{"id":69246},"_3312-m端事件","3.3.12 M端事件",[15,69249,69250],{},"M端就是移动端",[15,69252,69253],{},[1891,69254],{"alt":68,"src":69255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[531,69257,69259],{"id":69258},"_3313-插件","3.3.13 插件",[15,69261,69262],{},"要熟悉官网！！！",[15,69264,69265],{},[257,69266,69267],{"href":69267,"rel":69268},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[261],[15,69270,69271],{},[257,69272,69273],{"href":69273,"rel":69274},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[261],[531,69276,69278],{"id":69277},"_3314-学生信息表","3.3.14 学生信息表",[22,69280,69281,69284,69287,69290,69293,69296,69299,69302],{},[25,69282,69283],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[25,69285,69286],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[25,69288,69289],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[25,69291,69292],{},"用好表单元素自带的属性，value,name等",[25,69294,69295],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[25,69297,69298],{},"不要忘记事件对象",[25,69300,69301],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[25,69303,69304],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[15,69306,69307],{},"结构：",[63,69309,69311],{"className":51051,"code":69310,"language":51053,"meta":68,"style":68},"\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",[34,69312,69313,69323,69337,69341,69349,69363,69383,69404,69417,69441,69449,69453,69461,69474,69495,69523,69551,69556,69578,69598,69617,69625,69653,69675,69695,69715,69735,69755,69775,69783,69803,69811,69815,69828,69836,69844,69852,69865,69878,69891,69904,69917,69930,69943,69951,69959,69967,69972,69977,69982,69987,69992,69997,70002,70007,70012,70017,70022,70027,70032,70040,70048,70056,70060,70080,70099,70119,70139,70159,70179,70183,70188,70208,70213,70223,70228,70233,70253,70275,70280,70290,70294,70298,70303,70308,70337,70351,70366,70370,70374,70378,70383,70394,70407,70412,70417,70422,70427,70432,70436,70441,70446,70455,70460,70465,70477,70482,70489,70493,70498,70508,70513,70523,70528,70556,70577,70587,70607,70625,70642,70659,70676,70693,70697,70707,70712,70717,70722,70733,70737,70741,70745,70750,70755,70776,70788,70793,70798,70803,70817,70822,70829,70833,70837,70845,70849,70857,70861],{"__ignoreMap":68},[72,69314,69315,69317,69319,69321],{"class":74,"line":75},[72,69316,51715],{"class":82},[72,69318,51719],{"class":51718},[72,69320,51722],{"class":358},[72,69322,51725],{"class":82},[72,69324,69325,69327,69329,69331,69333,69335],{"class":74,"line":370},[72,69326,1464],{"class":82},[72,69328,51053],{"class":51718},[72,69330,51734],{"class":358},[72,69332,609],{"class":82},[72,69334,51739],{"class":366},[72,69336,51725],{"class":82},[72,69338,69339],{"class":74,"line":1608},[72,69340,2828],{"emptyLinePlaceholder":490},[72,69342,69343,69345,69347],{"class":74,"line":1623},[72,69344,1464],{"class":82},[72,69346,51752],{"class":51718},[72,69348,51725],{"class":82},[72,69350,69351,69353,69355,69357,69359,69361],{"class":74,"line":1629},[72,69352,52562],{"class":82},[72,69354,51762],{"class":51718},[72,69356,51765],{"class":358},[72,69358,609],{"class":82},[72,69360,51770],{"class":366},[72,69362,59545],{"class":82},[72,69364,69365,69367,69369,69371,69373,69375,69377,69379,69381],{"class":74,"line":1643},[72,69366,52562],{"class":82},[72,69368,51762],{"class":51718},[72,69370,15346],{"class":358},[72,69372,609],{"class":82},[72,69374,51809],{"class":366},[72,69376,51789],{"class":358},[72,69378,609],{"class":82},[72,69380,51816],{"class":366},[72,69382,59545],{"class":82},[72,69384,69385,69387,69389,69391,69393,69395,69397,69399,69402],{"class":74,"line":1649},[72,69386,52562],{"class":82},[72,69388,51762],{"class":51718},[72,69390,51781],{"class":358},[72,69392,609],{"class":82},[72,69394,51786],{"class":366},[72,69396,51789],{"class":358},[72,69398,609],{"class":82},[72,69400,69401],{"class":366},"\"ie=edge\"",[72,69403,59545],{"class":82},[72,69405,69406,69408,69410,69413,69415],{"class":74,"line":1740},[72,69407,52562],{"class":82},[72,69409,51825],{"class":51718},[72,69411,69412],{"class":82},">学生信息管理\u003C\u002F",[72,69414,51825],{"class":51718},[72,69416,51725],{"class":82},[72,69418,69419,69421,69424,69427,69429,69432,69434,69436,69439],{"class":74,"line":1746},[72,69420,52562],{"class":82},[72,69422,69423],{"class":51718},"link",[72,69425,69426],{"class":358}," rel",[72,69428,609],{"class":82},[72,69430,69431],{"class":366},"\"stylesheet\"",[72,69433,61475],{"class":358},[72,69435,609],{"class":82},[72,69437,69438],{"class":366},"\"css\u002Findex.css\"",[72,69440,59545],{"class":82},[72,69442,69443,69445,69447],{"class":74,"line":1758},[72,69444,52203],{"class":82},[72,69446,51752],{"class":51718},[72,69448,51725],{"class":82},[72,69450,69451],{"class":74,"line":2041},[72,69452,2828],{"emptyLinePlaceholder":490},[72,69454,69455,69457,69459],{"class":74,"line":2046},[72,69456,1464],{"class":82},[72,69458,52218],{"class":51718},[72,69460,51725],{"class":82},[72,69462,69463,69465,69467,69470,69472],{"class":74,"line":2052},[72,69464,52562],{"class":82},[72,69466,10],{"class":51718},[72,69468,69469],{"class":82},">新增学员\u003C\u002F",[72,69471,10],{"class":51718},[72,69473,51725],{"class":82},[72,69475,69476,69478,69480,69482,69484,69486,69489,69491,69493],{"class":74,"line":2057},[72,69477,52562],{"class":82},[72,69479,67043],{"class":51718},[72,69481,53904],{"class":358},[72,69483,609],{"class":82},[72,69485,63082],{"class":366},[72,69487,69488],{"class":358}," autocomplete",[72,69490,609],{"class":82},[72,69492,32194],{"class":366},[72,69494,51725],{"class":82},[72,69496,69497,69500,69502,69504,69506,69508,69510,69512,69515,69517,69519,69521],{"class":74,"line":2071},[72,69498,69499],{"class":82},"    姓名：\u003C",[72,69501,54239],{"class":51718},[72,69503,54242],{"class":358},[72,69505,609],{"class":82},[72,69507,63117],{"class":366},[72,69509,53904],{"class":358},[72,69511,609],{"class":82},[72,69513,69514],{"class":366},"\"uname\"",[72,69516,15346],{"class":358},[72,69518,609],{"class":82},[72,69520,69514],{"class":366},[72,69522,59545],{"class":82},[72,69524,69525,69528,69530,69532,69534,69536,69538,69540,69543,69545,69547,69549],{"class":74,"line":2076},[72,69526,69527],{"class":82},"    年龄：\u003C",[72,69529,54239],{"class":51718},[72,69531,54242],{"class":358},[72,69533,609],{"class":82},[72,69535,63117],{"class":366},[72,69537,53904],{"class":358},[72,69539,609],{"class":82},[72,69541,69542],{"class":366},"\"age\"",[72,69544,15346],{"class":358},[72,69546,609],{"class":82},[72,69548,69542],{"class":366},[72,69550,59545],{"class":82},[72,69552,69553],{"class":74,"line":2082},[72,69554,69555],{"class":82},"    性别:\n",[72,69557,69558,69560,69563,69565,69567,69570,69572,69574,69576],{"class":74,"line":2103},[72,69559,51759],{"class":82},[72,69561,69562],{"class":51718},"select",[72,69564,15346],{"class":358},[72,69566,609],{"class":82},[72,69568,69569],{"class":366},"\"gender\"",[72,69571,53904],{"class":358},[72,69573,609],{"class":82},[72,69575,69569],{"class":366},[72,69577,51725],{"class":82},[72,69579,69580,69582,69585,69587,69589,69591,69594,69596],{"class":74,"line":2108},[72,69581,55652],{"class":82},[72,69583,69584],{"class":51718},"option",[72,69586,67069],{"class":358},[72,69588,609],{"class":82},[72,69590,10387],{"class":366},[72,69592,69593],{"class":82},">男\u003C\u002F",[72,69595,69584],{"class":51718},[72,69597,51725],{"class":82},[72,69599,69600,69602,69604,69606,69608,69610,69613,69615],{"class":74,"line":2122},[72,69601,55652],{"class":82},[72,69603,69584],{"class":51718},[72,69605,67069],{"class":358},[72,69607,609],{"class":82},[72,69609,10456],{"class":366},[72,69611,69612],{"class":82},">女\u003C\u002F",[72,69614,69584],{"class":51718},[72,69616,51725],{"class":82},[72,69618,69619,69621,69623],{"class":74,"line":2127},[72,69620,52194],{"class":82},[72,69622,69562],{"class":51718},[72,69624,51725],{"class":82},[72,69626,69627,69630,69632,69634,69636,69638,69640,69642,69645,69647,69649,69651],{"class":74,"line":2156},[72,69628,69629],{"class":82},"    薪资：\u003C",[72,69631,54239],{"class":51718},[72,69633,54242],{"class":358},[72,69635,609],{"class":82},[72,69637,63117],{"class":366},[72,69639,53904],{"class":358},[72,69641,609],{"class":82},[72,69643,69644],{"class":366},"\"salary\"",[72,69646,15346],{"class":358},[72,69648,609],{"class":82},[72,69650,69644],{"class":366},[72,69652,59545],{"class":82},[72,69654,69655,69658,69660,69662,69664,69667,69669,69671,69673],{"class":74,"line":2161},[72,69656,69657],{"class":82},"    就业城市：\u003C",[72,69659,69562],{"class":51718},[72,69661,15346],{"class":358},[72,69663,609],{"class":82},[72,69665,69666],{"class":366},"\"city\"",[72,69668,53904],{"class":358},[72,69670,609],{"class":82},[72,69672,69666],{"class":366},[72,69674,51725],{"class":82},[72,69676,69677,69679,69681,69683,69685,69688,69691,69693],{"class":74,"line":2178},[72,69678,55652],{"class":82},[72,69680,69584],{"class":51718},[72,69682,67069],{"class":358},[72,69684,609],{"class":82},[72,69686,69687],{"class":366},"\"北京\"",[72,69689,69690],{"class":82},">北京\u003C\u002F",[72,69692,69584],{"class":51718},[72,69694,51725],{"class":82},[72,69696,69697,69699,69701,69703,69705,69708,69711,69713],{"class":74,"line":2183},[72,69698,55652],{"class":82},[72,69700,69584],{"class":51718},[72,69702,67069],{"class":358},[72,69704,609],{"class":82},[72,69706,69707],{"class":366},"\"上海\"",[72,69709,69710],{"class":82},">上海\u003C\u002F",[72,69712,69584],{"class":51718},[72,69714,51725],{"class":82},[72,69716,69717,69719,69721,69723,69725,69728,69731,69733],{"class":74,"line":2188},[72,69718,55652],{"class":82},[72,69720,69584],{"class":51718},[72,69722,67069],{"class":358},[72,69724,609],{"class":82},[72,69726,69727],{"class":366},"\"广州\"",[72,69729,69730],{"class":82},">广州\u003C\u002F",[72,69732,69584],{"class":51718},[72,69734,51725],{"class":82},[72,69736,69737,69739,69741,69743,69745,69748,69751,69753],{"class":74,"line":2193},[72,69738,55652],{"class":82},[72,69740,69584],{"class":51718},[72,69742,67069],{"class":358},[72,69744,609],{"class":82},[72,69746,69747],{"class":366},"\"深圳\"",[72,69749,69750],{"class":82},">深圳\u003C\u002F",[72,69752,69584],{"class":51718},[72,69754,51725],{"class":82},[72,69756,69757,69759,69761,69763,69765,69768,69771,69773],{"class":74,"line":2207},[72,69758,55652],{"class":82},[72,69760,69584],{"class":51718},[72,69762,67069],{"class":358},[72,69764,609],{"class":82},[72,69766,69767],{"class":366},"\"曹县\"",[72,69769,69770],{"class":82},">曹县\u003C\u002F",[72,69772,69584],{"class":51718},[72,69774,51725],{"class":82},[72,69776,69777,69779,69781],{"class":74,"line":2212},[72,69778,52194],{"class":82},[72,69780,69562],{"class":51718},[72,69782,51725],{"class":82},[72,69784,69785,69787,69789,69791,69793,69796,69799,69801],{"class":74,"line":3005},[72,69786,51759],{"class":82},[72,69788,54305],{"class":51718},[72,69790,53904],{"class":358},[72,69792,609],{"class":82},[72,69794,69795],{"class":366},"\"add\"",[72,69797,69798],{"class":82},">录入\u003C\u002F",[72,69800,54305],{"class":51718},[72,69802,51725],{"class":82},[72,69804,69805,69807,69809],{"class":74,"line":3019},[72,69806,52835],{"class":82},[72,69808,67043],{"class":51718},[72,69810,51725],{"class":82},[72,69812,69813],{"class":74,"line":3027},[72,69814,2828],{"emptyLinePlaceholder":490},[72,69816,69817,69819,69821,69824,69826],{"class":74,"line":3032},[72,69818,52562],{"class":82},[72,69820,10],{"class":51718},[72,69822,69823],{"class":82},">就业榜\u003C\u002F",[72,69825,10],{"class":51718},[72,69827,51725],{"class":82},[72,69829,69830,69832,69834],{"class":74,"line":3038},[72,69831,52562],{"class":82},[72,69833,154],{"class":51718},[72,69835,51725],{"class":82},[72,69837,69838,69840,69842],{"class":74,"line":3044},[72,69839,51759],{"class":82},[72,69841,157],{"class":51718},[72,69843,51725],{"class":82},[72,69845,69846,69848,69850],{"class":74,"line":3049},[72,69847,55652],{"class":82},[72,69849,160],{"class":51718},[72,69851,51725],{"class":82},[72,69853,69854,69856,69858,69861,69863],{"class":74,"line":8374},[72,69855,55720],{"class":82},[72,69857,163],{"class":51718},[72,69859,69860],{"class":82},">序号\u003C\u002F",[72,69862,163],{"class":51718},[72,69864,51725],{"class":82},[72,69866,69867,69869,69871,69874,69876],{"class":74,"line":8398},[72,69868,55720],{"class":82},[72,69870,163],{"class":51718},[72,69872,69873],{"class":82},">姓名\u003C\u002F",[72,69875,163],{"class":51718},[72,69877,51725],{"class":82},[72,69879,69880,69882,69884,69887,69889],{"class":74,"line":8403},[72,69881,55720],{"class":82},[72,69883,163],{"class":51718},[72,69885,69886],{"class":82},">年龄\u003C\u002F",[72,69888,163],{"class":51718},[72,69890,51725],{"class":82},[72,69892,69893,69895,69897,69900,69902],{"class":74,"line":8409},[72,69894,55720],{"class":82},[72,69896,163],{"class":51718},[72,69898,69899],{"class":82},">性别\u003C\u002F",[72,69901,163],{"class":51718},[72,69903,51725],{"class":82},[72,69905,69906,69908,69910,69913,69915],{"class":74,"line":8436},[72,69907,55720],{"class":82},[72,69909,163],{"class":51718},[72,69911,69912],{"class":82},">薪资\u003C\u002F",[72,69914,163],{"class":51718},[72,69916,51725],{"class":82},[72,69918,69919,69921,69923,69926,69928],{"class":74,"line":8441},[72,69920,55720],{"class":82},[72,69922,163],{"class":51718},[72,69924,69925],{"class":82},">就业城市\u003C\u002F",[72,69927,163],{"class":51718},[72,69929,51725],{"class":82},[72,69931,69932,69934,69936,69939,69941],{"class":74,"line":8447},[72,69933,55720],{"class":82},[72,69935,163],{"class":51718},[72,69937,69938],{"class":82},">操作\u003C\u002F",[72,69940,163],{"class":51718},[72,69942,51725],{"class":82},[72,69944,69945,69947,69949],{"class":74,"line":8459},[72,69946,55825],{"class":82},[72,69948,160],{"class":51718},[72,69950,51725],{"class":82},[72,69952,69953,69955,69957],{"class":74,"line":8471},[72,69954,52194],{"class":82},[72,69956,157],{"class":51718},[72,69958,51725],{"class":82},[72,69960,69961,69963,69965],{"class":74,"line":8483},[72,69962,51759],{"class":82},[72,69964,174],{"class":51718},[72,69966,51725],{"class":82},[72,69968,69969],{"class":74,"line":10142},[72,69970,69971],{"class":621},"      \u003C!-- \n",[72,69973,69974],{"class":74,"line":10167},[72,69975,69976],{"class":621},"        \u003Ctr>\n",[72,69978,69979],{"class":74,"line":10190},[72,69980,69981],{"class":621},"          \u003Ctd>1001\u003C\u002Ftd>\n",[72,69983,69984],{"class":74,"line":10214},[72,69985,69986],{"class":621},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[72,69988,69989],{"class":74,"line":10219},[72,69990,69991],{"class":621},"          \u003Ctd>19\u003C\u002Ftd>\n",[72,69993,69994],{"class":74,"line":10224},[72,69995,69996],{"class":621},"          \u003Ctd>男\u003C\u002Ftd>\n",[72,69998,69999],{"class":74,"line":10229},[72,70000,70001],{"class":621},"          \u003Ctd>15000\u003C\u002Ftd>\n",[72,70003,70004],{"class":74,"line":10238},[72,70005,70006],{"class":621},"          \u003Ctd>上海\u003C\u002Ftd>\n",[72,70008,70009],{"class":74,"line":10243},[72,70010,70011],{"class":621},"          \u003Ctd>\n",[72,70013,70014],{"class":74,"line":10249},[72,70015,70016],{"class":621},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[72,70018,70019],{"class":74,"line":10270},[72,70020,70021],{"class":621},"          \u003C\u002Ftd>\n",[72,70023,70024],{"class":74,"line":10276},[72,70025,70026],{"class":621},"        \u003C\u002Ftr> \n",[72,70028,70029],{"class":74,"line":10290},[72,70030,70031],{"class":621},"        -->\n",[72,70033,70034,70036,70038],{"class":74,"line":10296},[72,70035,52194],{"class":82},[72,70037,174],{"class":51718},[72,70039,51725],{"class":82},[72,70041,70042,70044,70046],{"class":74,"line":10323},[72,70043,52835],{"class":82},[72,70045,154],{"class":51718},[72,70047,51725],{"class":82},[72,70049,70050,70052,70054],{"class":74,"line":10332},[72,70051,52562],{"class":82},[72,70053,52231],{"class":51718},[72,70055,51725],{"class":82},[72,70057,70058],{"class":74,"line":10338},[72,70059,60376],{"class":621},[72,70061,70062,70064,70067,70069,70071,70073,70075,70078],{"class":74,"line":10346},[72,70063,11647],{"class":78},[72,70065,70066],{"class":362}," uname",[72,70068,13990],{"class":78},[72,70070,54814],{"class":82},[72,70072,54817],{"class":358},[72,70074,564],{"class":82},[72,70076,70077],{"class":366},"'.uname'",[72,70079,570],{"class":82},[72,70081,70082,70084,70086,70088,70090,70092,70094,70097],{"class":74,"line":10351},[72,70083,11647],{"class":78},[72,70085,16115],{"class":362},[72,70087,13990],{"class":78},[72,70089,54814],{"class":82},[72,70091,54817],{"class":358},[72,70093,564],{"class":82},[72,70095,70096],{"class":366},"'.age'",[72,70098,570],{"class":82},[72,70100,70101,70103,70106,70108,70110,70112,70114,70117],{"class":74,"line":17030},[72,70102,11647],{"class":78},[72,70104,70105],{"class":362}," gender",[72,70107,13990],{"class":78},[72,70109,54814],{"class":82},[72,70111,54817],{"class":358},[72,70113,564],{"class":82},[72,70115,70116],{"class":366},"'.gender'",[72,70118,570],{"class":82},[72,70120,70121,70123,70126,70128,70130,70132,70134,70137],{"class":74,"line":17036},[72,70122,11647],{"class":78},[72,70124,70125],{"class":362}," salary",[72,70127,13990],{"class":78},[72,70129,54814],{"class":82},[72,70131,54817],{"class":358},[72,70133,564],{"class":82},[72,70135,70136],{"class":366},"'.salary'",[72,70138,570],{"class":82},[72,70140,70141,70143,70146,70148,70150,70152,70154,70157],{"class":74,"line":17059},[72,70142,11647],{"class":78},[72,70144,70145],{"class":362}," city",[72,70147,13990],{"class":78},[72,70149,54814],{"class":82},[72,70151,54817],{"class":358},[72,70153,564],{"class":82},[72,70155,70156],{"class":366},"'.city'",[72,70158,570],{"class":82},[72,70160,70161,70163,70166,70168,70170,70172,70174,70177],{"class":74,"line":17065},[72,70162,11647],{"class":78},[72,70164,70165],{"class":362}," tbody",[72,70167,13990],{"class":78},[72,70169,54814],{"class":82},[72,70171,54817],{"class":358},[72,70173,564],{"class":82},[72,70175,70176],{"class":366},"'tbody'",[72,70178,570],{"class":82},[72,70180,70181],{"class":74,"line":17088},[72,70182,2828],{"emptyLinePlaceholder":490},[72,70184,70185],{"class":74,"line":17102},[72,70186,70187],{"class":621},"    \u002F\u002F 获取所有带有name属性的元素\n",[72,70189,70190,70192,70195,70197,70199,70201,70203,70206],{"class":74,"line":17122},[72,70191,11647],{"class":78},[72,70193,70194],{"class":362}," items",[72,70196,13990],{"class":78},[72,70198,54814],{"class":82},[72,70200,56099],{"class":358},[72,70202,564],{"class":82},[72,70204,70205],{"class":366},"'[name]'",[72,70207,570],{"class":82},[72,70209,70210],{"class":74,"line":17128},[72,70211,70212],{"class":621},"    \u002F\u002F 声明一个空的数组\n",[72,70214,70215,70217,70219,70221],{"class":74,"line":17139},[72,70216,11647],{"class":78},[72,70218,58113],{"class":362},[72,70220,13990],{"class":78},[72,70222,52256],{"class":82},[72,70224,70225],{"class":74,"line":17162},[72,70226,70227],{"class":621},"    \u002F\u002F 1.录入模块\n",[72,70229,70230],{"class":74,"line":17184},[72,70231,70232],{"class":621},"    \u002F\u002F 1.1这是一个表单提交事件\n",[72,70234,70235,70237,70240,70242,70244,70246,70248,70251],{"class":74,"line":17189},[72,70236,11647],{"class":78},[72,70238,70239],{"class":362}," info",[72,70241,13990],{"class":78},[72,70243,54814],{"class":82},[72,70245,54817],{"class":358},[72,70247,564],{"class":82},[72,70249,70250],{"class":366},"'.info'",[72,70252,570],{"class":82},[72,70254,70255,70258,70260,70262,70265,70267,70269,70271,70273],{"class":74,"line":17195},[72,70256,70257],{"class":82},"    info.",[72,70259,58231],{"class":358},[72,70261,564],{"class":82},[72,70263,70264],{"class":366},"'submit'",[72,70266,12861],{"class":82},[72,70268,54867],{"class":78},[72,70270,2087],{"class":82},[72,70272,637],{"class":5642},[72,70274,12868],{"class":82},[72,70276,70277],{"class":74,"line":17209},[72,70278,70279],{"class":621},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[72,70281,70282,70285,70288],{"class":74,"line":17222},[72,70283,70284],{"class":82},"      e.",[72,70286,70287],{"class":358},"preventDefault",[72,70289,2404],{"class":82},[72,70291,70292],{"class":74,"line":17227},[72,70293,60430],{"class":621},[72,70295,70296],{"class":74,"line":17241},[72,70297,2828],{"emptyLinePlaceholder":490},[72,70299,70300],{"class":74,"line":17246},[72,70301,70302],{"class":621},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[72,70304,70305],{"class":74,"line":17252},[72,70306,70307],{"class":621},"      \u002F\u002F 先遍历循环\n",[72,70309,70310,70312,70314,70316,70318,70320,70322,70324,70326,70329,70331,70333,70335],{"class":74,"line":17257},[72,70311,52702],{"class":78},[72,70313,2087],{"class":82},[72,70315,52265],{"class":78},[72,70317,9864],{"class":82},[72,70319,609],{"class":78},[72,70321,4521],{"class":362},[72,70323,9871],{"class":82},[72,70325,1464],{"class":78},[72,70327,70328],{"class":82}," items.",[72,70330,52386],{"class":362},[72,70332,3642],{"class":82},[72,70334,2720],{"class":78},[72,70336,12868],{"class":82},[72,70338,70339,70341,70344,70346,70349],{"class":74,"line":17271},[72,70340,2925],{"class":78},[72,70342,70343],{"class":82}," (items[i].value ",[72,70345,54904],{"class":78},[72,70347,70348],{"class":366}," ''",[72,70350,12868],{"class":82},[72,70352,70353,70356,70359,70361,70364],{"class":74,"line":17276},[72,70354,70355],{"class":78},"          return",[72,70357,70358],{"class":358}," alert",[72,70360,564],{"class":82},[72,70362,70363],{"class":366},"'输入内容不能为空'",[72,70365,570],{"class":82},[72,70367,70368],{"class":74,"line":17281},[72,70369,2957],{"class":82},[72,70371,70372],{"class":74,"line":17295},[72,70373,52816],{"class":82},[72,70375,70376],{"class":74,"line":17307},[72,70377,2828],{"emptyLinePlaceholder":490},[72,70379,70380],{"class":74,"line":17312},[72,70381,70382],{"class":621},"      \u002F\u002F 创建新的对象\n",[72,70384,70385,70387,70390,70392],{"class":74,"line":17325},[72,70386,58646],{"class":78},[72,70388,70389],{"class":362}," obj",[72,70391,13990],{"class":78},[72,70393,15998],{"class":82},[72,70395,70396,70399,70401,70403,70405],{"class":74,"line":17330},[72,70397,70398],{"class":82},"        stuID: arr.",[72,70400,52386],{"class":362},[72,70402,45984],{"class":78},[72,70404,25540],{"class":362},[72,70406,31884],{"class":82},[72,70408,70409],{"class":74,"line":17335},[72,70410,70411],{"class":82},"        uname: uname.value,\n",[72,70413,70414],{"class":74,"line":17340},[72,70415,70416],{"class":82},"        age: age.value,\n",[72,70418,70419],{"class":74,"line":17353},[72,70420,70421],{"class":82},"        gender: gender.value,\n",[72,70423,70424],{"class":74,"line":17358},[72,70425,70426],{"class":82},"        salary: salary.value,\n",[72,70428,70429],{"class":74,"line":33051},[72,70430,70431],{"class":82},"        city: city.value\n",[72,70433,70434],{"class":74,"line":33057},[72,70435,52816],{"class":82},[72,70437,70438],{"class":74,"line":33063},[72,70439,70440],{"class":621},"      \u002F\u002F console.log(obj);\n",[72,70442,70443],{"class":74,"line":33069},[72,70444,70445],{"class":621},"      \u002F\u002F 追加到数组里面\n",[72,70447,70448,70450,70452],{"class":74,"line":33075},[72,70449,58425],{"class":82},[72,70451,52302],{"class":358},[72,70453,70454],{"class":82},"(obj)\n",[72,70456,70457],{"class":74,"line":33086},[72,70458,70459],{"class":621},"      \u002F\u002F console.log(arr);\n",[72,70461,70462],{"class":74,"line":33092},[72,70463,70464],{"class":621},"      \u002F\u002F 清空表单  reset重置表单\n",[72,70466,70467,70470,70472,70475],{"class":74,"line":33112},[72,70468,70469],{"class":362},"      this",[72,70471,1112],{"class":82},[72,70473,70474],{"class":358},"reset",[72,70476,2404],{"class":82},[72,70478,70479],{"class":74,"line":33118},[72,70480,70481],{"class":621},"      \u002F\u002F 调用渲染函数\n",[72,70483,70484,70487],{"class":74,"line":33129},[72,70485,70486],{"class":358},"      render",[72,70488,2404],{"class":82},[72,70490,70491],{"class":74,"line":33135},[72,70492,33879],{"class":82},[72,70494,70495],{"class":74,"line":33141},[72,70496,70497],{"class":621},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[72,70499,70500,70503,70506],{"class":74,"line":33147},[72,70501,70502],{"class":78},"    function",[72,70504,70505],{"class":358}," render",[72,70507,11279],{"class":82},[72,70509,70510],{"class":74,"line":33153},[72,70511,70512],{"class":621},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[72,70514,70515,70518,70520],{"class":74,"line":33159},[72,70516,70517],{"class":82},"      tbody.innerHTML ",[72,70519,609],{"class":78},[72,70521,70522],{"class":366}," ''\n",[72,70524,70525],{"class":74,"line":33165},[72,70526,70527],{"class":621},"      \u002F\u002F 遍历数组\n",[72,70529,70530,70532,70534,70536,70538,70540,70542,70544,70546,70548,70550,70552,70554],{"class":74,"line":33171},[72,70531,52702],{"class":78},[72,70533,2087],{"class":82},[72,70535,52265],{"class":78},[72,70537,9864],{"class":82},[72,70539,609],{"class":78},[72,70541,4521],{"class":362},[72,70543,9871],{"class":82},[72,70545,1464],{"class":78},[72,70547,52383],{"class":82},[72,70549,52386],{"class":362},[72,70551,3642],{"class":82},[72,70553,2720],{"class":78},[72,70555,12868],{"class":82},[72,70557,70558,70560,70563,70565,70567,70570,70572,70575],{"class":74,"line":33191},[72,70559,61688],{"class":78},[72,70561,70562],{"class":362}," tr",[72,70564,13990],{"class":78},[72,70566,54814],{"class":82},[72,70568,70569],{"class":358},"createElement",[72,70571,564],{"class":82},[72,70573,70574],{"class":366},"'tr'",[72,70576,570],{"class":82},[72,70578,70579,70582,70584],{"class":74,"line":33197},[72,70580,70581],{"class":82},"        tr.innerHTML ",[72,70583,609],{"class":78},[72,70585,70586],{"class":366}," `\n",[72,70588,70589,70592,70594,70596,70598,70601,70604],{"class":74,"line":33213},[72,70590,70591],{"class":366},"        \u003Ctd>${",[72,70593,4308],{"class":82},[72,70595,1444],{"class":366},[72,70597,995],{"class":82},[72,70599,70600],{"class":366},"].",[72,70602,70603],{"class":82},"stuID",[72,70605,70606],{"class":366},"}\u003C\u002Ftd>\n",[72,70608,70609,70612,70614,70616,70618,70620,70623],{"class":74,"line":33219},[72,70610,70611],{"class":366},"          \u003Ctd>${",[72,70613,4308],{"class":82},[72,70615,1444],{"class":366},[72,70617,995],{"class":82},[72,70619,70600],{"class":366},[72,70621,70622],{"class":82},"uname",[72,70624,70606],{"class":366},[72,70626,70627,70629,70631,70633,70635,70637,70640],{"class":74,"line":33233},[72,70628,70611],{"class":366},[72,70630,4308],{"class":82},[72,70632,1444],{"class":366},[72,70634,995],{"class":82},[72,70636,70600],{"class":366},[72,70638,70639],{"class":82},"age",[72,70641,70606],{"class":366},[72,70643,70644,70646,70648,70650,70652,70654,70657],{"class":74,"line":33239},[72,70645,70611],{"class":366},[72,70647,4308],{"class":82},[72,70649,1444],{"class":366},[72,70651,995],{"class":82},[72,70653,70600],{"class":366},[72,70655,70656],{"class":82},"gender",[72,70658,70606],{"class":366},[72,70660,70661,70663,70665,70667,70669,70671,70674],{"class":74,"line":33254},[72,70662,70611],{"class":366},[72,70664,4308],{"class":82},[72,70666,1444],{"class":366},[72,70668,995],{"class":82},[72,70670,70600],{"class":366},[72,70672,70673],{"class":82},"salary",[72,70675,70606],{"class":366},[72,70677,70678,70680,70682,70684,70686,70688,70691],{"class":74,"line":33260},[72,70679,70611],{"class":366},[72,70681,4308],{"class":82},[72,70683,1444],{"class":366},[72,70685,995],{"class":82},[72,70687,70600],{"class":366},[72,70689,70690],{"class":82},"city",[72,70692,70606],{"class":366},[72,70694,70695],{"class":74,"line":33269},[72,70696,70011],{"class":366},[72,70698,70699,70702,70704],{"class":74,"line":33275},[72,70700,70701],{"class":366},"            \u003Ca href=\"javascript:\" data-id=${",[72,70703,995],{"class":82},[72,70705,70706],{"class":366},"}>删除\u003C\u002Fa>\n",[72,70708,70709],{"class":74,"line":33284},[72,70710,70711],{"class":366},"          \u003C\u002Ftd> \n",[72,70713,70714],{"class":74,"line":33290},[72,70715,70716],{"class":366},"          `\n",[72,70718,70719],{"class":74,"line":33296},[72,70720,70721],{"class":621},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[72,70723,70724,70727,70730],{"class":74,"line":33305},[72,70725,70726],{"class":82},"        tbody.",[72,70728,70729],{"class":358},"appendChild",[72,70731,70732],{"class":82},"(tr)\n",[72,70734,70735],{"class":74,"line":33311},[72,70736,52816],{"class":82},[72,70738,70739],{"class":74,"line":33322},[72,70740,2615],{"class":82},[72,70742,70743],{"class":74,"line":33328},[72,70744,2828],{"emptyLinePlaceholder":490},[72,70746,70747],{"class":74,"line":33347},[72,70748,70749],{"class":621},"    \u002F\u002F 3.删除委托\n",[72,70751,70752],{"class":74,"line":33353},[72,70753,70754],{"class":621},"    \u002F\u002F 3.1 事件委托 tbody\n",[72,70756,70757,70760,70762,70764,70766,70768,70770,70772,70774],{"class":74,"line":33364},[72,70758,70759],{"class":82},"    tbody.",[72,70761,58231],{"class":358},[72,70763,564],{"class":82},[72,70765,58236],{"class":366},[72,70767,12861],{"class":82},[72,70769,54867],{"class":78},[72,70771,2087],{"class":82},[72,70773,637],{"class":5642},[72,70775,12868],{"class":82},[72,70777,70778,70780,70782,70784,70786],{"class":74,"line":33370},[72,70779,54898],{"class":78},[72,70781,67452],{"class":82},[72,70783,54904],{"class":78},[72,70785,68674],{"class":366},[72,70787,12868],{"class":82},[72,70789,70790],{"class":74,"line":33390},[72,70791,70792],{"class":621},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[72,70794,70795],{"class":74,"line":33406},[72,70796,70797],{"class":621},"        \u002F\u002F console.log(e.target.dataset.id);\n",[72,70799,70800],{"class":74,"line":33412},[72,70801,70802],{"class":621},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[72,70804,70805,70808,70810,70813,70815],{"class":74,"line":33426},[72,70806,70807],{"class":82},"        arr.",[72,70809,58428],{"class":358},[72,70811,70812],{"class":82},"(e.target.dataset.id, ",[72,70814,772],{"class":362},[72,70816,570],{"class":82},[72,70818,70819],{"class":74,"line":33432},[72,70820,70821],{"class":621},"        \u002F\u002F 重新渲染一次\n",[72,70823,70824,70827],{"class":74,"line":33438},[72,70825,70826],{"class":358},"        render",[72,70828,2404],{"class":82},[72,70830,70831],{"class":74,"line":33449},[72,70832,52816],{"class":82},[72,70834,70835],{"class":74,"line":33455},[72,70836,33879],{"class":82},[72,70838,70839,70841,70843],{"class":74,"line":33461},[72,70840,52835],{"class":82},[72,70842,52231],{"class":51718},[72,70844,51725],{"class":82},[72,70846,70847],{"class":74,"line":33471},[72,70848,2828],{"emptyLinePlaceholder":490},[72,70850,70851,70853,70855],{"class":74,"line":33477},[72,70852,52203],{"class":82},[72,70854,52218],{"class":51718},[72,70856,51725],{"class":82},[72,70858,70859],{"class":74,"line":33488},[72,70860,2828],{"emptyLinePlaceholder":490},[72,70862,70863,70865,70867],{"class":74,"line":33494},[72,70864,52203],{"class":82},[72,70866,51053],{"class":51718},[72,70868,51725],{"class":82},[15,70870,70871],{},"样式：",[63,70873,70877],{"className":70874,"code":70875,"language":70876,"meta":68,"style":68},"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",[34,70878,70879,70884,70894,70903,70907,70911,70916,70926,70931,70935,70940,70950,70955,70964,70968,70972,70977,70982,70992,71002,71007,71011,71016,71025,71035,71040,71050,71060,71064,71069,71077,71081,71086,71091,71096,71104,71113,71117,71122,71131,71135,71140,71149,71153,71158,71167,71176,71184,71188,71193,71202,71212,71221,71231,71237,71246,71256,71266,71270,71275,71284,71292,71302,71310,71319,71328,71338,71346,71350,71355,71364],{"__ignoreMap":68},[72,70880,70881],{"class":74,"line":75},[72,70882,70883],{"class":82},"* {\n",[72,70885,70886,70889,70891],{"class":74,"line":370},[72,70887,70888],{"class":51718},"  margin",[72,70890,51855],{"class":82},[72,70892,70893],{"class":366},"0;\n",[72,70895,70896,70899,70901],{"class":74,"line":1608},[72,70897,70898],{"class":366},"  padding",[72,70900,51855],{"class":82},[72,70902,70893],{"class":366},[72,70904,70905],{"class":74,"line":1623},[72,70906,1994],{"class":82},[72,70908,70909],{"class":74,"line":1629},[72,70910,2828],{"emptyLinePlaceholder":490},[72,70912,70913],{"class":74,"line":1643},[72,70914,70915],{"class":366},"a {\n",[72,70917,70918,70921,70923],{"class":74,"line":1649},[72,70919,70920],{"class":51718},"  text-decoration",[72,70922,51855],{"class":82},[72,70924,70925],{"class":366},"none;\n",[72,70927,70928],{"class":74,"line":1740},[72,70929,70930],{"class":366},"  color:#721c24;\n",[72,70932,70933],{"class":74,"line":1746},[72,70934,1994],{"class":82},[72,70936,70937],{"class":74,"line":1758},[72,70938,70939],{"class":366},"h1 {\n",[72,70941,70942,70945,70947],{"class":74,"line":2041},[72,70943,70944],{"class":51718},"  text-align",[72,70946,51855],{"class":82},[72,70948,70949],{"class":366},"center;\n",[72,70951,70952],{"class":74,"line":2046},[72,70953,70954],{"class":366},"  color:#333;\n",[72,70956,70957,70959,70961],{"class":74,"line":2052},[72,70958,70888],{"class":51718},[72,70960,51855],{"class":82},[72,70962,70963],{"class":366},"20px 0;\n",[72,70965,70966],{"class":74,"line":2057},[72,70967,3102],{"class":82},[72,70969,70970],{"class":74,"line":2071},[72,70971,1994],{"class":82},[72,70973,70974],{"class":74,"line":2076},[72,70975,70976],{"class":366},"table {\n",[72,70978,70979],{"class":74,"line":2082},[72,70980,70981],{"class":366},"  margin:0 auto;\n",[72,70983,70984,70987,70989],{"class":74,"line":2103},[72,70985,70986],{"class":51718},"  width",[72,70988,51855],{"class":82},[72,70990,70991],{"class":366},"800px;\n",[72,70993,70994,70997,70999],{"class":74,"line":2108},[72,70995,70996],{"class":51718},"  border-collapse",[72,70998,51855],{"class":82},[72,71000,71001],{"class":366},"collapse;\n",[72,71003,71004],{"class":74,"line":2122},[72,71005,71006],{"class":366},"  color:#004085;\n",[72,71008,71009],{"class":74,"line":2127},[72,71010,1994],{"class":82},[72,71012,71013],{"class":74,"line":2156},[72,71014,71015],{"class":366},"th {\n",[72,71017,71018,71020,71022],{"class":74,"line":2161},[72,71019,70898],{"class":51718},[72,71021,51855],{"class":82},[72,71023,71024],{"class":366},"10px;\n",[72,71026,71027,71030,71032],{"class":74,"line":2178},[72,71028,71029],{"class":51718},"  background",[72,71031,51855],{"class":82},[72,71033,71034],{"class":621},"#cfe5ff;\n",[72,71036,71037],{"class":74,"line":2183},[72,71038,71039],{"class":82},"  \n",[72,71041,71042,71045,71047],{"class":74,"line":2188},[72,71043,71044],{"class":51718},"  font-size",[72,71046,51855],{"class":82},[72,71048,71049],{"class":366},"20px;\n",[72,71051,71052,71055,71057],{"class":74,"line":2193},[72,71053,71054],{"class":51718},"  font-weight",[72,71056,51855],{"class":82},[72,71058,71059],{"class":366},"400;\n",[72,71061,71062],{"class":74,"line":2207},[72,71063,1994],{"class":82},[72,71065,71066],{"class":74,"line":2212},[72,71067,71068],{"class":366},"td,th {\n",[72,71070,71071,71074],{"class":74,"line":3005},[72,71072,71073],{"class":366},"  border:1px solid",[72,71075,71076],{"class":621}," #b8daff;\n",[72,71078,71079],{"class":74,"line":3019},[72,71080,1994],{"class":82},[72,71082,71083],{"class":74,"line":3027},[72,71084,71085],{"class":366},"td {\n",[72,71087,71088],{"class":74,"line":3032},[72,71089,71090],{"class":366},"  padding:10px;\n",[72,71092,71093],{"class":74,"line":3038},[72,71094,71095],{"class":366},"  color:#666;\n",[72,71097,71098,71100,71102],{"class":74,"line":3044},[72,71099,70944],{"class":51718},[72,71101,51855],{"class":82},[72,71103,70949],{"class":366},[72,71105,71106,71108,71110],{"class":74,"line":3049},[72,71107,71044],{"class":51718},[72,71109,51855],{"class":82},[72,71111,71112],{"class":366},"16px;\n",[72,71114,71115],{"class":74,"line":8374},[72,71116,1994],{"class":82},[72,71118,71119],{"class":74,"line":8398},[72,71120,71121],{"class":366},"tbody tr {\n",[72,71123,71124,71126,71128],{"class":74,"line":8403},[72,71125,71029],{"class":51718},[72,71127,51855],{"class":82},[72,71129,71130],{"class":621},"#fff;\n",[72,71132,71133],{"class":74,"line":8409},[72,71134,1994],{"class":82},[72,71136,71137],{"class":74,"line":8436},[72,71138,71139],{"class":366},"tbody tr:hover {\n",[72,71141,71142,71144,71146],{"class":74,"line":8441},[72,71143,71029],{"class":51718},[72,71145,51855],{"class":82},[72,71147,71148],{"class":621},"#e1ecf8;\n",[72,71150,71151],{"class":74,"line":8447},[72,71152,1994],{"class":82},[72,71154,71155],{"class":74,"line":8459},[72,71156,71157],{"class":366},".info {\n",[72,71159,71160,71162,71164],{"class":74,"line":8471},[72,71161,70986],{"class":51718},[72,71163,51855],{"class":82},[72,71165,71166],{"class":366},"900px;\n",[72,71168,71169,71171,71173],{"class":74,"line":8483},[72,71170,70888],{"class":51718},[72,71172,51855],{"class":82},[72,71174,71175],{"class":366},"50px auto;\n",[72,71177,71178,71180,71182],{"class":74,"line":10142},[72,71179,70944],{"class":51718},[72,71181,51855],{"class":82},[72,71183,70949],{"class":366},[72,71185,71186],{"class":74,"line":10167},[72,71187,1994],{"class":82},[72,71189,71190],{"class":74,"line":10190},[72,71191,71192],{"class":366},".info  input, .info select {\n",[72,71194,71195,71197,71199],{"class":74,"line":10214},[72,71196,70986],{"class":51718},[72,71198,51855],{"class":82},[72,71200,71201],{"class":366},"80px;\n",[72,71203,71204,71207,71209],{"class":74,"line":10219},[72,71205,71206],{"class":51718},"  height",[72,71208,51855],{"class":82},[72,71210,71211],{"class":366},"27px;\n",[72,71213,71214,71217,71219],{"class":74,"line":10224},[72,71215,71216],{"class":51718},"  outline",[72,71218,51855],{"class":82},[72,71220,70925],{"class":366},[72,71222,71223,71226,71228],{"class":74,"line":10229},[72,71224,71225],{"class":51718},"  border-radius",[72,71227,51855],{"class":82},[72,71229,71230],{"class":366},"5px;\n",[72,71232,71233,71235],{"class":74,"line":10238},[72,71234,71073],{"class":366},[72,71236,71076],{"class":621},[72,71238,71239,71242,71244],{"class":74,"line":10243},[72,71240,71241],{"class":51718},"  padding-left",[72,71243,51855],{"class":82},[72,71245,71230],{"class":366},[72,71247,71248,71251,71253],{"class":74,"line":10249},[72,71249,71250],{"class":51718},"  box-sizing",[72,71252,51855],{"class":82},[72,71254,71255],{"class":366},"border-box;\n",[72,71257,71258,71261,71263],{"class":74,"line":10270},[72,71259,71260],{"class":51718},"  margin-right",[72,71262,51855],{"class":82},[72,71264,71265],{"class":366},"15px;\n",[72,71267,71268],{"class":74,"line":10276},[72,71269,1994],{"class":82},[72,71271,71272],{"class":74,"line":10290},[72,71273,71274],{"class":366},".info button {\n",[72,71276,71277,71279,71281],{"class":74,"line":10296},[72,71278,70986],{"class":51718},[72,71280,51855],{"class":82},[72,71282,71283],{"class":366},"60px;\n",[72,71285,71286,71288,71290],{"class":74,"line":10323},[72,71287,71206],{"class":51718},[72,71289,51855],{"class":82},[72,71291,71211],{"class":366},[72,71293,71294,71297,71299],{"class":74,"line":10332},[72,71295,71296],{"class":51718},"  background-color",[72,71298,51855],{"class":82},[72,71300,71301],{"class":621},"#004085;\n",[72,71303,71304,71306,71308],{"class":74,"line":10338},[72,71305,71216],{"class":51718},[72,71307,51855],{"class":82},[72,71309,70925],{"class":366},[72,71311,71312,71315,71317],{"class":74,"line":10346},[72,71313,71314],{"class":51718},"  border",[72,71316,51855],{"class":82},[72,71318,70893],{"class":366},[72,71320,71321,71324,71326],{"class":74,"line":10351},[72,71322,71323],{"class":51718},"  color",[72,71325,51855],{"class":82},[72,71327,71130],{"class":621},[72,71329,71330,71333,71335],{"class":74,"line":17030},[72,71331,71332],{"class":51718},"  cursor",[72,71334,51855],{"class":82},[72,71336,71337],{"class":366},"pointer;\n",[72,71339,71340,71342,71344],{"class":74,"line":17036},[72,71341,71225],{"class":51718},[72,71343,51855],{"class":82},[72,71345,71230],{"class":366},[72,71347,71348],{"class":74,"line":17059},[72,71349,1994],{"class":82},[72,71351,71352],{"class":74,"line":17065},[72,71353,71354],{"class":366},".info .age {\n",[72,71356,71357,71359,71361],{"class":74,"line":17088},[72,71358,70986],{"class":51718},[72,71360,51855],{"class":82},[72,71362,71363],{"class":366},"50px;\n",[72,71365,71366],{"class":74,"line":17102},[72,71367,1994],{"class":82},[15,71369,71370],{},"思路：",[15,71372,71373],{},[1891,71374],{"alt":68,"src":71375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[15,71377,71378],{},[1891,71379],{"alt":68,"src":71380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[15,71382,71383],{},[1891,71384],{"alt":68,"src":71385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[531,71387,71389],{"id":71388},"_3315-重绘回流","3.3.15 重绘回流",[15,71391,71392],{},[1891,71393],{"alt":68,"src":71394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[15,71396,71397],{},[1891,71398],{"alt":68,"src":71399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[15,71401,71402],{},[1891,71403],{"alt":68,"src":71404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[85,71406,71408],{"id":71407},"_34-bom","3.4 BOM",[15,71410,71411],{},[1891,71412],{"alt":68,"src":71413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[15,71415,71416],{},"平时写的document省略了window而已，实际上是window.document",[15,71418,71419],{},"函数也是这样，调用的时候实际为window.fn()",[15,71421,71422],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[15,71424,71425],{},"window大部分情况下可以省略",[531,71427,71429],{"id":71428},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[15,71431,71432],{},"只执行一次",[15,71434,71435],{},[1891,71436],{"alt":68,"src":71437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[15,71439,71440],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[15,71442,71443],{},[1891,71444],{"alt":68,"src":71445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[531,71447,71449],{"id":71448},"_342-js执行机制","3.4.2 JS执行机制",[15,71451,71452],{},[1891,71453],{"alt":68,"src":71454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[15,71456,71457],{},"两个的结果都是1111 3333 2222",[15,71459,71460],{},[1891,71461],{"alt":68,"src":71462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[15,71464,71465],{},[1891,71466],{"alt":68,"src":71467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[15,71469,71470],{},[1891,71471],{"alt":68,"src":71472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[15,71474,71475],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[15,71477,71478],{},"工作流程：",[15,71480,71481],{},[1891,71482],{"alt":68,"src":71483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[15,71485,71486],{},[1891,71487],{"alt":68,"src":71488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[15,71490,71491],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[15,71493,71494],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[531,71496,71498],{"id":71497},"_343-location对象","3.4.3 location对象",[15,71500,71501],{},"location对象属于window这个全局对象下的，可以 省略window",[15,71503,71504],{},[1891,71505],{"alt":68,"src":71506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[15,71508,71509],{},"href可以跳转页面",[22,71511,71512],{},[25,71513,71514],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[15,71516,71517],{},"search得到提交信息之后网站后边的地址",[15,71519,71520],{},[1891,71521],{"alt":68,"src":71522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[15,71524,71525],{},[1891,71526],{"alt":68,"src":71527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[22,71529,71530],{"start":370},[25,71531,71532],{},"hash:这个获取单页面应用#后边的地址",[15,71534,71535],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[15,71537,71538],{},[1891,71539],{"alt":68,"src":71540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[63,71542,71544],{"className":53485,"code":71543,"language":53487,"meta":68,"style":68},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[34,71545,71546,71566,71586],{"__ignoreMap":68},[72,71547,71548,71550,71552,71554,71556,71559,71562,71564],{"class":74,"line":75},[72,71549,52562],{"class":82},[72,71551,257],{"class":51718},[72,71553,61475],{"class":358},[72,71555,609],{"class":82},[72,71557,71558],{"class":366},"\"#\u002Fmy\"",[72,71560,71561],{"class":82},">我的\u003C\u002F",[72,71563,257],{"class":51718},[72,71565,51725],{"class":82},[72,71567,71568,71570,71572,71574,71576,71579,71582,71584],{"class":74,"line":370},[72,71569,52562],{"class":82},[72,71571,257],{"class":51718},[72,71573,61475],{"class":358},[72,71575,609],{"class":82},[72,71577,71578],{"class":366},"\"#\u002Ffriend\"",[72,71580,71581],{"class":82},">关注\u003C\u002F",[72,71583,257],{"class":51718},[72,71585,51725],{"class":82},[72,71587,71588,71590,71592,71594,71596,71599,71602,71604],{"class":74,"line":1608},[72,71589,52562],{"class":82},[72,71591,257],{"class":51718},[72,71593,61475],{"class":358},[72,71595,609],{"class":82},[72,71597,71598],{"class":366},"\"#\u002Fdownload\"",[72,71600,71601],{"class":82},">下载\u003C\u002F",[72,71603,257],{"class":51718},[72,71605,51725],{"class":82},[15,71607,71608],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[22,71610,71611],{"start":1608},[25,71612,71613,71614,71616,71617,71619],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[54134,71615],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[54134,71618],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[531,71621,71623],{"id":71622},"_345-navigator对象","3.4.5 navigator对象",[15,71625,71626],{},[1891,71627],{"alt":68,"src":71628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[63,71630,71634],{"className":71631,"code":71632,"language":71633,"meta":68,"style":68},"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",[34,71635,71636,71641,71652,71664,71669,71720,71761,71766,71779,71791,71796],{"__ignoreMap":68},[72,71637,71638],{"class":74,"line":75},[72,71639,71640],{"class":621},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[72,71642,71643,71645,71647,71649],{"class":74,"line":370},[72,71644,781],{"class":78},[72,71646,564],{"class":82},[72,71648,54867],{"class":78},[72,71650,71651],{"class":82}," () { \n",[72,71653,71654,71656,71659,71661],{"class":74,"line":1608},[72,71655,7218],{"class":78},[72,71657,71658],{"class":362}," userAgent",[72,71660,13990],{"class":78},[72,71662,71663],{"class":82}," navigator.userAgent \n",[72,71665,71666],{"class":74,"line":1623},[72,71667,71668],{"class":621},"\u002F\u002F 验证是否为Android或iPhone \n",[72,71670,71671,71673,71676,71678,71681,71684,71686,71688,71691,71693,71696,71700,71702,71704,71706,71709,71711,71713,71715,71717],{"class":74,"line":1629},[72,71672,7218],{"class":78},[72,71674,71675],{"class":362}," android",[72,71677,13990],{"class":78},[72,71679,71680],{"class":82}," userAgent.",[72,71682,71683],{"class":358},"match",[72,71685,564],{"class":82},[72,71687,1138],{"class":366},[72,71689,71690],{"class":48395},"(Android);",[72,71692,1540],{"class":78},[72,71694,71695],{"class":362},"[\\s",[72,71697,71699],{"class":71698},"snhLl","\\\u002F",[72,71701,1494],{"class":362},[72,71703,1035],{"class":78},[72,71705,564],{"class":48395},[72,71707,71708],{"class":362},"[\\d.]",[72,71710,1035],{"class":78},[72,71712,983],{"class":48395},[72,71714,1540],{"class":78},[72,71716,1138],{"class":366},[72,71718,71719],{"class":82},") \n",[72,71721,71722,71724,71727,71729,71731,71733,71735,71737,71740,71743,71746,71748,71750,71753,71755,71757,71759],{"class":74,"line":1643},[72,71723,7218],{"class":78},[72,71725,71726],{"class":362}," iphone",[72,71728,13990],{"class":78},[72,71730,71680],{"class":82},[72,71732,71683],{"class":358},[72,71734,564],{"class":82},[72,71736,1138],{"class":366},[72,71738,71739],{"class":48395},"(iPhone",[72,71741,71742],{"class":362},"\\s",[72,71744,71745],{"class":48395},"OS)",[72,71747,71742],{"class":362},[72,71749,564],{"class":48395},[72,71751,71752],{"class":362},"[\\d_]",[72,71754,1035],{"class":78},[72,71756,983],{"class":48395},[72,71758,1138],{"class":366},[72,71760,71719],{"class":82},[72,71762,71763],{"class":74,"line":1649},[72,71764,71765],{"class":621},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[72,71767,71768,71770,71773,71776],{"class":74,"line":1740},[72,71769,1960],{"class":78},[72,71771,71772],{"class":82}," (android ",[72,71774,71775],{"class":78},"||",[72,71777,71778],{"class":82}," iphone) { \n",[72,71780,71781,71784,71786,71789],{"class":74,"line":1746},[72,71782,71783],{"class":82},"location.href ",[72,71785,609],{"class":78},[72,71787,71788],{"class":366}," 'http:\u002F\u002Fm.itcast.cn'",[72,71790,3102],{"class":82},[72,71792,71793],{"class":74,"line":1758},[72,71794,71795],{"class":82},"} \n",[72,71797,71798],{"class":74,"line":2041},[72,71799,71800],{"class":82},"})()\n",[531,71802,71804],{"id":71803},"_346-histroy对象","3.4.6 histroy对象",[15,71806,71807],{},[1891,71808],{"alt":68,"src":71809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[15,71811,71812],{},"浏览器地址的前进与后退!!!",[15,71814,71815],{},"history.back() 等效于 history.go(-1)",[15,71817,71818],{},"history.forward() 等效于 history.go(1)",[85,71820,71822],{"id":71821},"_35-本地存储","3.5 本地存储",[22,71824,71825,71828,71831],{},[25,71826,71827],{},"数据存储在用户浏览器中",[25,71829,71830],{},"设置、读取方便、甚至页面刷新不丢失数据",[25,71832,71833],{},"容量较大，sessionStorage和localStorage约 5M 左右",[531,71835,71837],{"id":71836},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[15,71839,71840],{},"只能存储字符串",[15,71842,71843],{},[1891,71844],{"alt":68,"src":71845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[15,71847,71848],{},[1891,71849],{"alt":68,"src":71850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[15,71852,71853],{},"键值对要加引号,不然就会当变量来看了",[15,71855,71856],{},"localStorage.setItem('uname', 'pink')",[15,71858,71859],{},"刷新之后信息不再丢失",[15,71861,71862],{},"操作key,value会跟着变",[15,71864,71865],{},"删除只删除键就可以,即名字",[15,71867,71856],{},[15,71869,71870],{},"改:",[15,71872,71873],{},"localStorage.setItem('uname','red')",[15,71875,71876],{},"有这个键就是改,没有这个键就是改",[15,71878,71879],{},[1891,71880],{"alt":68,"src":71881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[15,71883,71884],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[15,71886,71887],{},[1891,71888],{"alt":68,"src":71889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[15,71891,71892],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[531,71894,71896],{"id":71895},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[15,71898,71899],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[15,71901,71902],{},"特性:",[22,71904,71905,71908,71911,71914],{},[25,71906,71907],{},"生命周期为关闭浏览器窗口",[25,71909,71910],{},"在同一个窗口(页面)下数据可以共享",[25,71912,71913],{},"以键值对的形式存储使用",[25,71915,71916],{},"用法跟localStorage 基本相同",[531,71918,71920],{"id":71919},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[15,71922,71923],{},"本地只能存储字符串,无法直接存储复杂数据类型",[63,71925,71927],{"className":53485,"code":71926,"language":53487,"meta":68,"style":68},"\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",[34,71928,71929,71937,71942,71947,71952,71957,71961,71966,71971],{"__ignoreMap":68},[72,71930,71931,71933,71935],{"class":74,"line":75},[72,71932,1464],{"class":82},[72,71934,52231],{"class":51718},[72,71936,51725],{"class":82},[72,71938,71939],{"class":74,"line":370},[72,71940,71941],{"class":82},"    const obj = {\n",[72,71943,71944],{"class":74,"line":1608},[72,71945,71946],{"class":82},"      uname: 'pink老师',\n",[72,71948,71949],{"class":74,"line":1623},[72,71950,71951],{"class":82},"      age: 18,\n",[72,71953,71954],{"class":74,"line":1629},[72,71955,71956],{"class":82},"      gender: '女'\n",[72,71958,71959],{"class":74,"line":1643},[72,71960,2615],{"class":82},[72,71962,71963],{"class":74,"line":1649},[72,71964,71965],{"class":82},"    \u002F\u002F 存储复杂数据类型\n",[72,71967,71968],{"class":74,"line":1740},[72,71969,71970],{"class":82},"    localStorage.setItem('obj', obj)\n",[72,71972,71973,71975,71977],{"class":74,"line":1746},[72,71974,52835],{"class":82},[72,71976,52231],{"class":51718},[72,71978,51725],{"class":82},[15,71980,71981],{},[1891,71982],{"alt":68,"src":71983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[15,71985,71986],{},"如果获取一下数据:",[15,71988,71989],{},"log(localStorage.getItem('obj'))",[15,71991,71992],{},[1891,71993],{"alt":68,"src":71994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[15,71996,71997],{},"发现直接存对象是使用不了的!!!",[22423,71999,72001],{"id":72000},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[15,72003,72004],{},[1891,72005],{"alt":68,"src":72006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[63,72008,72010],{"className":51051,"code":72009,"language":51053,"meta":68,"style":68},"\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",[34,72011,72012,72020,72030,72040,72049,72057,72061,72065,72091,72110,72118,72122,72127,72132],{"__ignoreMap":68},[72,72013,72014,72016,72018],{"class":74,"line":75},[72,72015,1464],{"class":82},[72,72017,52231],{"class":51718},[72,72019,51725],{"class":82},[72,72021,72022,72024,72026,72028],{"class":74,"line":370},[72,72023,11647],{"class":78},[72,72025,70389],{"class":362},[72,72027,13990],{"class":78},[72,72029,15998],{"class":82},[72,72031,72032,72035,72038],{"class":74,"line":1608},[72,72033,72034],{"class":82},"      uname: ",[72,72036,72037],{"class":366},"'pink老师'",[72,72039,31884],{"class":82},[72,72041,72042,72045,72047],{"class":74,"line":1623},[72,72043,72044],{"class":82},"      age: ",[72,72046,1204],{"class":362},[72,72048,31884],{"class":82},[72,72050,72051,72054],{"class":74,"line":1629},[72,72052,72053],{"class":82},"      gender: ",[72,72055,72056],{"class":366},"'女'\n",[72,72058,72059],{"class":74,"line":1643},[72,72060,2615],{"class":82},[72,72062,72063],{"class":74,"line":1649},[72,72064,71965],{"class":621},[72,72066,72067,72070,72073,72075,72078,72080,72083,72085,72088],{"class":74,"line":1740},[72,72068,72069],{"class":82},"  localStorage.",[72,72071,72072],{"class":358},"setItem",[72,72074,564],{"class":82},[72,72076,72077],{"class":366},"'obj'",[72,72079,12861],{"class":82},[72,72081,72082],{"class":362},"JSON",[72,72084,1112],{"class":82},[72,72086,72087],{"class":358},"stringify",[72,72089,72090],{"class":82},"(obj))\n",[72,72092,72093,72096,72098,72101,72104,72106,72108],{"class":74,"line":1746},[72,72094,72095],{"class":82},"  console.",[72,72097,58665],{"class":358},[72,72099,72100],{"class":82},"(localStorage.",[72,72102,72103],{"class":358},"getItem",[72,72105,564],{"class":82},[72,72107,72077],{"class":366},[72,72109,30915],{"class":82},[72,72111,72112,72114,72116],{"class":74,"line":1758},[72,72113,52835],{"class":82},[72,72115,52231],{"class":51718},[72,72117,51725],{"class":82},[72,72119,72120],{"class":74,"line":2041},[72,72121,71039],{"class":82},[72,72123,72124],{"class":74,"line":2046},[72,72125,72126],{"class":82},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[72,72128,72129],{"class":74,"line":2052},[72,72130,72131],{"class":82},"  类型是字符串的\n",[72,72133,72134],{"class":74,"line":2057},[72,72135,72136],{"class":82},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[22423,72138,72140],{"id":72139},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[15,72142,72143],{},[1891,72144],{"alt":68,"src":72145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[15,72147,72148],{},[1891,72149],{"alt":68,"src":72150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[63,72152,72154],{"className":53485,"code":72153,"language":53487,"meta":68,"style":68},"  \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",[34,72155,72156,72164,72168,72172,72176,72180,72184,72189,72194,72199,72204,72209,72214,72219,72224],{"__ignoreMap":68},[72,72157,72158,72160,72162],{"class":74,"line":75},[72,72159,52562],{"class":82},[72,72161,52231],{"class":51718},[72,72163,51725],{"class":82},[72,72165,72166],{"class":74,"line":370},[72,72167,71941],{"class":82},[72,72169,72170],{"class":74,"line":1608},[72,72171,71946],{"class":82},[72,72173,72174],{"class":74,"line":1623},[72,72175,71951],{"class":82},[72,72177,72178],{"class":74,"line":1629},[72,72179,71956],{"class":82},[72,72181,72182],{"class":74,"line":1643},[72,72183,2615],{"class":82},[72,72185,72186],{"class":74,"line":1649},[72,72187,72188],{"class":82},"    \u002F\u002F 1.存储复杂数据类型\n",[72,72190,72191],{"class":74,"line":1740},[72,72192,72193],{"class":82},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[72,72195,72196],{"class":74,"line":1746},[72,72197,72198],{"class":82},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[72,72200,72201],{"class":74,"line":1758},[72,72202,72203],{"class":82},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[72,72205,72206],{"class":74,"line":2041},[72,72207,72208],{"class":82},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[72,72210,72211],{"class":74,"line":2046},[72,72212,72213],{"class":82},"    \u002F\u002F 取\n",[72,72215,72216],{"class":74,"line":2052},[72,72217,72218],{"class":82},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[72,72220,72221],{"class":74,"line":2057},[72,72222,72223],{"class":82},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[72,72225,72226,72228,72230],{"class":74,"line":2071},[72,72227,52835],{"class":82},[72,72229,52231],{"class":51718},[72,72231,51725],{"class":82},[15,72233,72234],{},[1891,72235],{"alt":68,"src":72236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[531,72238,72240],{"id":72239},"_356-数组map方法","3.5.6 数组map方法",[15,72242,72243],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[15,72245,72246],{},[1891,72247],{"alt":68,"src":72248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[15,72250,72251],{},[1891,72252],{"alt":68,"src":72253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[15,72255,72256,72259],{},[707,72257,72258],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[15,72261,72262],{},"map有返回值，但是forEach没有返回值",[15,72264,72265],{},"map是个方法。用的时候要加 ()",[15,72267,72268],{},"map返回的是一个数组",[531,72270,72272],{"id":72271},"_357-数组中join方法","3.5.7 数组中join方法",[15,72274,72275],{},[1891,72276],{"alt":68,"src":72277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[15,72279,72280],{},"类似于python中拼接字符串一样！",[22,72282,72283,72286,72289],{},[25,72284,72285],{},"小括号为空则逗号分开",[25,72287,72288],{},"小括号为空字符串 ''，则元素之间没有分隔符",[25,72290,72291],{},"小括号用啥符号就用进行分割",[531,72293,72295],{"id":72294},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[22,72297,72298,72301,72304,72307,72310],{},[25,72299,72300],{},"记住本地时间获取快速方式：new Date().toDateString()",[25,72302,72303],{},"尽量减少DOM操作，用好map+join的渲染方式",[25,72305,72306],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[25,72308,72309],{},"return可以实现函数的结束",[25,72311,72312],{},"禁止跳转是 preventDefault() 不要忘记",[63,72314,72316],{"className":51051,"code":72315,"language":51053,"meta":68,"style":68},"\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",[34,72317,72318,72328,72342,72346,72354,72368,72388,72400,72408,72414,72424,72434,72438,72442,72448,72458,72470,72474,72478,72485,72497,72511,72521,72525,72529,72536,72543,72550,72562,72574,72584,72596,72600,72604,72611,72618,72630,72642,72652,72664,72694,72698,72702,72709,72721,72733,72757,72767,72777,72781,72785,72793,72804,72816,72828,72840,72857,72869,72881,72885,72889,72896,72908,72920,72932,72943,72961,72974,72986,73010,73021,73025,73029,73037,73047,73051,73055,73061,73073,73084,73094,73098,73102,73108,73130,73134,73138,73144,73150,73162,73172,73184,73214,73227,73244,73248,73252,73263,73285,73295,73299,73303,73316,73326,73338,73350,73362,73374,73384,73394,73404,73415,73428,73432,73440,73448,73452,73460,73473,73493,73526,73559,73592,73618,73636,73654,73662,73688,73706,73724,73742,73760,73778,73786,73794,73812,73820,73849,73857,73865,73873,73886,73898,73910,73922,73934,73946,73959,73971,73979,73987,73995,74000,74005,74009,74013,74017,74021,74025,74029,74034,74039,74044,74049,74057,74065,74073,74078,74083,74088,74093,74098,74103,74108,74113,74118,74123,74128,74133,74138,74143,74147,74152,74157,74167,74176,74180,74185,74194,74210,74252,74292,74331,74396,74404,74408,74413,74431,74439,74444,74449,74479,74485,74490,74503,74515,74527,74539,74551,74563,74575,74579,74589,74593,74598,74603,74607,74616,74620,74625,74630,74649,74654,74674,74678,74683,74687,74692,74710,74728,74746,74765,74784,74803,74808,74814,74835,74841,74850,74856,74862,74868,74895,74908,74913,74923,74929,74935,74941,74947,74952,74958,74964,74970,74976,75009,75014,75019,75024,75029,75035,75041,75047,75058,75063,75069,75076,75090,75096,75120,75125,75130,75136,75142,75163,75169,75182,75188,75194,75200,75206,75211,75217,75223,75229,75247,75261,75267,75275,75281,75303,75308,75313,75318,75323,75328,75337,75346,75351],{"__ignoreMap":68},[72,72319,72320,72322,72324,72326],{"class":74,"line":75},[72,72321,51715],{"class":82},[72,72323,51719],{"class":51718},[72,72325,51722],{"class":358},[72,72327,51725],{"class":82},[72,72329,72330,72332,72334,72336,72338,72340],{"class":74,"line":370},[72,72331,1464],{"class":82},[72,72333,51053],{"class":51718},[72,72335,51734],{"class":358},[72,72337,609],{"class":82},[72,72339,51739],{"class":366},[72,72341,51725],{"class":82},[72,72343,72344],{"class":74,"line":1608},[72,72345,2828],{"emptyLinePlaceholder":490},[72,72347,72348,72350,72352],{"class":74,"line":1623},[72,72349,1464],{"class":82},[72,72351,51752],{"class":51718},[72,72353,51725],{"class":82},[72,72355,72356,72358,72360,72362,72364,72366],{"class":74,"line":1629},[72,72357,52562],{"class":82},[72,72359,51762],{"class":51718},[72,72361,51765],{"class":358},[72,72363,609],{"class":82},[72,72365,51770],{"class":366},[72,72367,51725],{"class":82},[72,72369,72370,72372,72374,72376,72378,72380,72382,72384,72386],{"class":74,"line":1643},[72,72371,52562],{"class":82},[72,72373,51762],{"class":51718},[72,72375,15346],{"class":358},[72,72377,609],{"class":82},[72,72379,51809],{"class":366},[72,72381,51789],{"class":358},[72,72383,609],{"class":82},[72,72385,51816],{"class":366},[72,72387,51725],{"class":82},[72,72389,72390,72392,72394,72396,72398],{"class":74,"line":1649},[72,72391,52562],{"class":82},[72,72393,51825],{"class":51718},[72,72395,51828],{"class":82},[72,72397,51825],{"class":51718},[72,72399,51725],{"class":82},[72,72401,72402,72404,72406],{"class":74,"line":1740},[72,72403,52562],{"class":82},[72,72405,473],{"class":51718},[72,72407,51725],{"class":82},[72,72409,72410,72412],{"class":74,"line":1746},[72,72411,6829],{"class":51718},[72,72413,15998],{"class":82},[72,72415,72416,72418,72420,72422],{"class":74,"line":1758},[72,72417,55113],{"class":362},[72,72419,51855],{"class":82},[72,72421,747],{"class":362},[72,72423,1719],{"class":82},[72,72425,72426,72428,72430,72432],{"class":74,"line":2041},[72,72427,55124],{"class":362},[72,72429,51855],{"class":82},[72,72431,747],{"class":362},[72,72433,1719],{"class":82},[72,72435,72436],{"class":74,"line":2046},[72,72437,2615],{"class":82},[72,72439,72440],{"class":74,"line":2052},[72,72441,2828],{"emptyLinePlaceholder":490},[72,72443,72444,72446],{"class":74,"line":2057},[72,72445,57697],{"class":51718},[72,72447,15998],{"class":82},[72,72449,72450,72452,72454,72456],{"class":74,"line":2071},[72,72451,57704],{"class":362},[72,72453,51855],{"class":82},[72,72455,52010],{"class":362},[72,72457,1719],{"class":82},[72,72459,72460,72462,72464,72466,72468],{"class":74,"line":2076},[72,72461,62495],{"class":362},[72,72463,51855],{"class":82},[72,72465,1254],{"class":362},[72,72467,51910],{"class":78},[72,72469,1719],{"class":82},[72,72471,72472],{"class":74,"line":2082},[72,72473,2615],{"class":82},[72,72475,72476],{"class":74,"line":2103},[72,72477,2828],{"emptyLinePlaceholder":490},[72,72479,72480,72483],{"class":74,"line":2108},[72,72481,72482],{"class":358},"    .info",[72,72484,15998],{"class":82},[72,72486,72487,72489,72491,72493,72495],{"class":74,"line":2122},[72,72488,55189],{"class":362},[72,72490,51855],{"class":82},[72,72492,51907],{"class":362},[72,72494,51910],{"class":78},[72,72496,1719],{"class":82},[72,72498,72499,72501,72503,72505,72507,72509],{"class":74,"line":2127},[72,72500,55124],{"class":362},[72,72502,51855],{"class":82},[72,72504,1000],{"class":362},[72,72506,51910],{"class":78},[72,72508,51974],{"class":362},[72,72510,1719],{"class":82},[72,72512,72513,72515,72517,72519],{"class":74,"line":2156},[72,72514,57704],{"class":362},[72,72516,51855],{"class":82},[72,72518,52010],{"class":362},[72,72520,1719],{"class":82},[72,72522,72523],{"class":74,"line":2161},[72,72524,2615],{"class":82},[72,72526,72527],{"class":74,"line":2178},[72,72528,2828],{"emptyLinePlaceholder":490},[72,72530,72531,72534],{"class":74,"line":2183},[72,72532,72533],{"class":358},"    .uname",[72,72535,31884],{"class":82},[72,72537,72538,72541],{"class":74,"line":2188},[72,72539,72540],{"class":358},"    .age",[72,72542,31884],{"class":82},[72,72544,72545,72548],{"class":74,"line":2193},[72,72546,72547],{"class":358},"    .salary",[72,72549,15998],{"class":82},[72,72551,72552,72554,72556,72558,72560],{"class":74,"line":2207},[72,72553,55189],{"class":362},[72,72555,51855],{"class":82},[72,72557,865],{"class":362},[72,72559,51910],{"class":78},[72,72561,1719],{"class":82},[72,72563,72564,72566,72568,72570,72572],{"class":74,"line":2212},[72,72565,55203],{"class":362},[72,72567,51855],{"class":82},[72,72569,1254],{"class":362},[72,72571,51910],{"class":78},[72,72573,1719],{"class":82},[72,72575,72576,72578,72580,72582],{"class":74,"line":3005},[72,72577,62198],{"class":362},[72,72579,51855],{"class":82},[72,72581,55155],{"class":362},[72,72583,1719],{"class":82},[72,72585,72586,72588,72590,72592,72594],{"class":74,"line":3019},[72,72587,62168],{"class":362},[72,72589,51855],{"class":82},[72,72591,1129],{"class":362},[72,72593,51910],{"class":78},[72,72595,1719],{"class":82},[72,72597,72598],{"class":74,"line":3027},[72,72599,2615],{"class":82},[72,72601,72602],{"class":74,"line":3032},[72,72603,2828],{"emptyLinePlaceholder":490},[72,72605,72606,72609],{"class":74,"line":3038},[72,72607,72608],{"class":358},"    .gender",[72,72610,31884],{"class":82},[72,72612,72613,72616],{"class":74,"line":3044},[72,72614,72615],{"class":358},"    .city",[72,72617,15998],{"class":82},[72,72619,72620,72622,72624,72626,72628],{"class":74,"line":3049},[72,72621,55189],{"class":362},[72,72623,51855],{"class":82},[72,72625,865],{"class":362},[72,72627,51910],{"class":78},[72,72629,1719],{"class":82},[72,72631,72632,72634,72636,72638,72640],{"class":74,"line":8374},[72,72633,55203],{"class":362},[72,72635,51855],{"class":82},[72,72637,1379],{"class":362},[72,72639,51910],{"class":78},[72,72641,1719],{"class":82},[72,72643,72644,72646,72648,72650],{"class":74,"line":8398},[72,72645,62198],{"class":362},[72,72647,51855],{"class":82},[72,72649,55155],{"class":362},[72,72651,1719],{"class":82},[72,72653,72654,72656,72658,72660,72662],{"class":74,"line":8403},[72,72655,62168],{"class":362},[72,72657,51855],{"class":82},[72,72659,1129],{"class":362},[72,72661,51910],{"class":78},[72,72663,1719],{"class":82},[72,72665,72666,72668,72670,72672,72674,72676,72679,72681,72683,72685,72688,72690,72692],{"class":74,"line":8409},[72,72667,62395],{"class":362},[72,72669,51855],{"class":82},[72,72671,772],{"class":362},[72,72673,51910],{"class":78},[72,72675,51939],{"class":362},[72,72677,72678],{"class":362}," rgb",[72,72680,564],{"class":82},[72,72682,2151],{"class":362},[72,72684,12861],{"class":82},[72,72686,72687],{"class":362},"197",[72,72689,12861],{"class":82},[72,72691,72687],{"class":362},[72,72693,3147],{"class":82},[72,72695,72696],{"class":74,"line":8436},[72,72697,2615],{"class":82},[72,72699,72700],{"class":74,"line":8441},[72,72701,2828],{"emptyLinePlaceholder":490},[72,72703,72704,72707],{"class":74,"line":8447},[72,72705,72706],{"class":51718},"    button",[72,72708,15998],{"class":82},[72,72710,72711,72713,72715,72717,72719],{"class":74,"line":8459},[72,72712,55203],{"class":362},[72,72714,51855],{"class":82},[72,72716,1379],{"class":362},[72,72718,51910],{"class":78},[72,72720,1719],{"class":82},[72,72722,72723,72725,72727,72729,72731],{"class":74,"line":8471},[72,72724,55189],{"class":362},[72,72726,51855],{"class":82},[72,72728,1038],{"class":362},[72,72730,51910],{"class":78},[72,72732,1719],{"class":82},[72,72734,72735,72737,72739,72742,72744,72746,72748,72751,72753,72755],{"class":74,"line":8483},[72,72736,55302],{"class":362},[72,72738,51855],{"class":82},[72,72740,72741],{"class":362},"rgb",[72,72743,564],{"class":82},[72,72745,1523],{"class":362},[72,72747,12861],{"class":82},[72,72749,72750],{"class":362},"187",[72,72752,12861],{"class":82},[72,72754,853],{"class":362},[72,72756,3147],{"class":82},[72,72758,72759,72761,72763,72765],{"class":74,"line":10142},[72,72760,57834],{"class":362},[72,72762,51855],{"class":82},[72,72764,61260],{"class":362},[72,72766,1719],{"class":82},[72,72768,72769,72771,72773,72775],{"class":74,"line":10167},[72,72770,62395],{"class":362},[72,72772,51855],{"class":82},[72,72774,747],{"class":362},[72,72776,1719],{"class":82},[72,72778,72779],{"class":74,"line":10190},[72,72780,2615],{"class":82},[72,72782,72783],{"class":74,"line":10214},[72,72784,2828],{"emptyLinePlaceholder":490},[72,72786,72787,72789,72791],{"class":74,"line":10219},[72,72788,72706],{"class":51718},[72,72790,52106],{"class":51718},[72,72792,15998],{"class":82},[72,72794,72795,72797,72799,72802],{"class":74,"line":10224},[72,72796,55427],{"class":362},[72,72798,51855],{"class":82},[72,72800,72801],{"class":362},"inline-block",[72,72803,1719],{"class":82},[72,72805,72806,72808,72810,72812,72814],{"class":74,"line":10229},[72,72807,55189],{"class":362},[72,72809,51855],{"class":82},[72,72811,1000],{"class":362},[72,72813,51910],{"class":78},[72,72815,1719],{"class":82},[72,72817,72818,72820,72822,72824,72826],{"class":74,"line":10238},[72,72819,55203],{"class":362},[72,72821,51855],{"class":82},[72,72823,1000],{"class":362},[72,72825,51910],{"class":78},[72,72827,1719],{"class":82},[72,72829,72830,72832,72834,72836,72838],{"class":74,"line":10243},[72,72831,57777],{"class":362},[72,72833,51855],{"class":82},[72,72835,1026],{"class":362},[72,72837,51910],{"class":78},[72,72839,1719],{"class":82},[72,72841,72842,72844,72846,72848,72850,72852,72855],{"class":74,"line":10249},[72,72843,62395],{"class":362},[72,72845,51855],{"class":82},[72,72847,772],{"class":362},[72,72849,51910],{"class":78},[72,72851,51939],{"class":362},[72,72853,72854],{"class":362}," #fff",[72,72856,1719],{"class":82},[72,72858,72859,72861,72863,72865,72867],{"class":74,"line":10270},[72,72860,55552],{"class":362},[72,72862,51855],{"class":82},[72,72864,873],{"class":362},[72,72866,51910],{"class":78},[72,72868,1719],{"class":82},[72,72870,72871,72873,72875,72877,72879],{"class":74,"line":10276},[72,72872,62168],{"class":362},[72,72874,51855],{"class":82},[72,72876,772],{"class":362},[72,72878,51910],{"class":78},[72,72880,1719],{"class":82},[72,72882,72883],{"class":74,"line":10290},[72,72884,2615],{"class":82},[72,72886,72887],{"class":74,"line":10296},[72,72888,2828],{"emptyLinePlaceholder":490},[72,72890,72891,72894],{"class":74,"line":10323},[72,72892,72893],{"class":358},"    .total",[72,72895,15998],{"class":82},[72,72897,72898,72900,72902,72904,72906],{"class":74,"line":10332},[72,72899,55189],{"class":362},[72,72901,51855],{"class":82},[72,72903,62047],{"class":362},[72,72905,51910],{"class":78},[72,72907,1719],{"class":82},[72,72909,72910,72912,72914,72916,72918],{"class":74,"line":10338},[72,72911,55203],{"class":362},[72,72913,51855],{"class":82},[72,72915,955],{"class":362},[72,72917,51910],{"class":78},[72,72919,1719],{"class":82},[72,72921,72922,72924,72926,72928,72930],{"class":74,"line":10346},[72,72923,57777],{"class":362},[72,72925,51855],{"class":82},[72,72927,955],{"class":362},[72,72929,51910],{"class":78},[72,72931,1719],{"class":82},[72,72933,72934,72936,72938,72941],{"class":74,"line":10351},[72,72935,57704],{"class":362},[72,72937,51855],{"class":82},[72,72939,72940],{"class":362},"right",[72,72942,1719],{"class":82},[72,72944,72945,72947,72949,72951,72953,72955,72957,72959],{"class":74,"line":17030},[72,72946,55124],{"class":362},[72,72948,51855],{"class":82},[72,72950,955],{"class":362},[72,72952,51910],{"class":78},[72,72954,51974],{"class":362},[72,72956,2466],{"class":362},[72,72958,51910],{"class":78},[72,72960,1719],{"class":82},[72,72962,72963,72966,72968,72970,72972],{"class":74,"line":17036},[72,72964,72965],{"class":362},"      padding-right",[72,72967,51855],{"class":82},[72,72969,1000],{"class":362},[72,72971,51910],{"class":78},[72,72973,1719],{"class":82},[72,72975,72976,72978,72980,72982,72984],{"class":74,"line":17059},[72,72977,55340],{"class":362},[72,72979,51855],{"class":82},[72,72981,1077],{"class":362},[72,72983,51910],{"class":78},[72,72985,1719],{"class":82},[72,72987,72988,72990,72992,72994,72996,72999,73001,73004,73006,73008],{"class":74,"line":17065},[72,72989,55302],{"class":362},[72,72991,51855],{"class":82},[72,72993,72741],{"class":362},[72,72995,564],{"class":82},[72,72997,72998],{"class":362},"237",[72,73000,12861],{"class":82},[72,73002,73003],{"class":362},"235",[72,73005,12861],{"class":82},[72,73007,73003],{"class":362},[72,73009,3147],{"class":82},[72,73011,73012,73015,73017,73019],{"class":74,"line":17088},[72,73013,73014],{"class":362},"      box-sizing",[72,73016,51855],{"class":82},[72,73018,60923],{"class":362},[72,73020,1719],{"class":82},[72,73022,73023],{"class":74,"line":17102},[72,73024,2615],{"class":82},[72,73026,73027],{"class":74,"line":17122},[72,73028,2828],{"emptyLinePlaceholder":490},[72,73030,73031,73033,73035],{"class":74,"line":17128},[72,73032,72893],{"class":358},[72,73034,52106],{"class":51718},[72,73036,15998],{"class":82},[72,73038,73039,73041,73043,73045],{"class":74,"line":17139},[72,73040,57834],{"class":362},[72,73042,51855],{"class":82},[72,73044,57839],{"class":362},[72,73046,1719],{"class":82},[72,73048,73049],{"class":74,"line":17162},[72,73050,2615],{"class":82},[72,73052,73053],{"class":74,"line":17184},[72,73054,2828],{"emptyLinePlaceholder":490},[72,73056,73057,73059],{"class":74,"line":17189},[72,73058,65441],{"class":51718},[72,73060,15998],{"class":82},[72,73062,73063,73065,73067,73069,73071],{"class":74,"line":17195},[72,73064,55189],{"class":362},[72,73066,51855],{"class":82},[72,73068,62047],{"class":362},[72,73070,51910],{"class":78},[72,73072,1719],{"class":82},[72,73074,73075,73077,73079,73082],{"class":74,"line":17209},[72,73076,55124],{"class":362},[72,73078,51855],{"class":82},[72,73080,73081],{"class":362},"auto",[72,73083,1719],{"class":82},[72,73085,73086,73088,73090,73092],{"class":74,"line":17222},[72,73087,65448],{"class":362},[72,73089,51855],{"class":82},[72,73091,65453],{"class":362},[72,73093,1719],{"class":82},[72,73095,73096],{"class":74,"line":17227},[72,73097,2615],{"class":82},[72,73099,73100],{"class":74,"line":17241},[72,73101,2828],{"emptyLinePlaceholder":490},[72,73103,73104,73106],{"class":74,"line":17246},[72,73105,65533],{"class":51718},[72,73107,15998],{"class":82},[72,73109,73110,73112,73114,73116,73118,73120,73122,73124,73126,73128],{"class":74,"line":17252},[72,73111,55302],{"class":362},[72,73113,51855],{"class":82},[72,73115,72741],{"class":362},[72,73117,564],{"class":82},[72,73119,72998],{"class":362},[72,73121,12861],{"class":82},[72,73123,73003],{"class":362},[72,73125,12861],{"class":82},[72,73127,73003],{"class":362},[72,73129,3147],{"class":82},[72,73131,73132],{"class":74,"line":17257},[72,73133,2615],{"class":82},[72,73135,73136],{"class":74,"line":17271},[72,73137,2828],{"emptyLinePlaceholder":490},[72,73139,73140,73142],{"class":74,"line":17276},[72,73141,65533],{"class":51718},[72,73143,31884],{"class":82},[72,73145,73146,73148],{"class":74,"line":17281},[72,73147,65599],{"class":51718},[72,73149,15998],{"class":82},[72,73151,73152,73154,73156,73158,73160],{"class":74,"line":17295},[72,73153,55203],{"class":362},[72,73155,51855],{"class":82},[72,73157,827],{"class":362},[72,73159,51910],{"class":78},[72,73161,1719],{"class":82},[72,73163,73164,73166,73168,73170],{"class":74,"line":17307},[72,73165,57704],{"class":362},[72,73167,51855],{"class":82},[72,73169,165],{"class":362},[72,73171,1719],{"class":82},[72,73173,73174,73176,73178,73180,73182],{"class":74,"line":17312},[72,73175,55340],{"class":362},[72,73177,51855],{"class":82},[72,73179,1103],{"class":362},[72,73181,51910],{"class":78},[72,73183,1719],{"class":82},[72,73185,73186,73188,73190,73192,73194,73196,73198,73200,73203,73205,73208,73210,73212],{"class":74,"line":17325},[72,73187,62395],{"class":362},[72,73189,51855],{"class":82},[72,73191,772],{"class":362},[72,73193,51910],{"class":78},[72,73195,51939],{"class":362},[72,73197,72678],{"class":362},[72,73199,564],{"class":82},[72,73201,73202],{"class":362},"228",[72,73204,12861],{"class":82},[72,73206,73207],{"class":362},"225",[72,73209,12861],{"class":82},[72,73211,73207],{"class":362},[72,73213,3147],{"class":82},[72,73215,73216,73219,73221,73223,73225],{"class":74,"line":17330},[72,73217,73218],{"class":362},"      padding-left",[72,73220,51855],{"class":82},[72,73222,873],{"class":362},[72,73224,51910],{"class":78},[72,73226,1719],{"class":82},[72,73228,73229,73231,73233,73235,73238,73240,73242],{"class":74,"line":17335},[72,73230,62278],{"class":362},[72,73232,51855],{"class":82},[72,73234,28543],{"class":362},[72,73236,73237],{"class":362}," linear",[72,73239,62285],{"class":362},[72,73241,1249],{"class":78},[72,73243,1719],{"class":82},[72,73245,73246],{"class":74,"line":17340},[72,73247,2615],{"class":82},[72,73249,73250],{"class":74,"line":17353},[72,73251,2828],{"emptyLinePlaceholder":490},[72,73253,73254,73257,73259,73261],{"class":74,"line":17358},[72,73255,73256],{"class":51718},"    tbody",[72,73258,70562],{"class":51718},[72,73260,61358],{"class":358},[72,73262,15998],{"class":82},[72,73264,73265,73267,73269,73271,73273,73275,73277,73279,73281,73283],{"class":74,"line":33051},[72,73266,55302],{"class":362},[72,73268,51855],{"class":82},[72,73270,72741],{"class":362},[72,73272,564],{"class":82},[72,73274,72998],{"class":362},[72,73276,12861],{"class":82},[72,73278,73003],{"class":362},[72,73280,12861],{"class":82},[72,73282,73003],{"class":362},[72,73284,3147],{"class":82},[72,73286,73287,73289,73291,73293],{"class":74,"line":33057},[72,73288,62443],{"class":362},[72,73290,51855],{"class":82},[72,73292,62448],{"class":362},[72,73294,1719],{"class":82},[72,73296,73297],{"class":74,"line":33063},[72,73298,2615],{"class":82},[72,73300,73301],{"class":74,"line":33069},[72,73302,2828],{"emptyLinePlaceholder":490},[72,73304,73305,73307,73309,73312,73314],{"class":74,"line":33075},[72,73306,73256],{"class":51718},[72,73308,70562],{"class":51718},[72,73310,73311],{"class":51718}," td",[72,73313,1827],{"class":51718},[72,73315,15998],{"class":82},[72,73317,73318,73320,73322,73324],{"class":74,"line":33086},[72,73319,55427],{"class":362},[72,73321,51855],{"class":82},[72,73323,61287],{"class":362},[72,73325,1719],{"class":82},[72,73327,73328,73330,73332,73334,73336],{"class":74,"line":33092},[72,73329,55189],{"class":362},[72,73331,51855],{"class":82},[72,73333,1461],{"class":362},[72,73335,51910],{"class":78},[72,73337,1719],{"class":82},[72,73339,73340,73342,73344,73346,73348],{"class":74,"line":33112},[72,73341,55203],{"class":362},[72,73343,51855],{"class":82},[72,73345,1379],{"class":362},[72,73347,51910],{"class":78},[72,73349,1719],{"class":82},[72,73351,73352,73354,73356,73358,73360],{"class":74,"line":33118},[72,73353,57777],{"class":362},[72,73355,51855],{"class":82},[72,73357,1379],{"class":362},[72,73359,51910],{"class":78},[72,73361,1719],{"class":82},[72,73363,73364,73366,73368,73370,73372],{"class":74,"line":33129},[72,73365,62495],{"class":362},[72,73367,51855],{"class":82},[72,73369,640],{"class":362},[72,73371,51910],{"class":78},[72,73373,1719],{"class":82},[72,73375,73376,73378,73380,73382],{"class":74,"line":33135},[72,73377,57834],{"class":362},[72,73379,51855],{"class":82},[72,73381,61260],{"class":362},[72,73383,1719],{"class":82},[72,73385,73386,73388,73390,73392],{"class":74,"line":33141},[72,73387,57704],{"class":362},[72,73389,51855],{"class":82},[72,73391,52010],{"class":362},[72,73393,1719],{"class":82},[72,73395,73396,73398,73400,73402],{"class":74,"line":33147},[72,73397,64388],{"class":362},[72,73399,51855],{"class":82},[72,73401,55155],{"class":362},[72,73403,1719],{"class":82},[72,73405,73406,73408,73410,73413],{"class":74,"line":33153},[72,73407,55302],{"class":362},[72,73409,51855],{"class":82},[72,73411,73412],{"class":362},"orange",[72,73414,1719],{"class":82},[72,73416,73417,73419,73421,73424,73426],{"class":74,"line":33159},[72,73418,55552],{"class":362},[72,73420,51855],{"class":82},[72,73422,73423],{"class":362},"12.5",[72,73425,51910],{"class":78},[72,73427,1719],{"class":82},[72,73429,73430],{"class":74,"line":33165},[72,73431,2615],{"class":82},[72,73433,73434,73436,73438],{"class":74,"line":33171},[72,73435,52835],{"class":82},[72,73437,473],{"class":51718},[72,73439,51725],{"class":82},[72,73441,73442,73444,73446],{"class":74,"line":33191},[72,73443,52203],{"class":82},[72,73445,51752],{"class":51718},[72,73447,51725],{"class":82},[72,73449,73450],{"class":74,"line":33197},[72,73451,2828],{"emptyLinePlaceholder":490},[72,73453,73454,73456,73458],{"class":74,"line":33213},[72,73455,1464],{"class":82},[72,73457,52218],{"class":51718},[72,73459,51725],{"class":82},[72,73461,73462,73464,73466,73469,73471],{"class":74,"line":33219},[72,73463,52562],{"class":82},[72,73465,85],{"class":51718},[72,73467,73468],{"class":82},">学生就业统计表\u003C\u002F",[72,73470,85],{"class":51718},[72,73472,51725],{"class":82},[72,73474,73475,73477,73479,73481,73483,73485,73487,73489,73491],{"class":74,"line":33233},[72,73476,52562],{"class":82},[72,73478,67043],{"class":51718},[72,73480,53904],{"class":358},[72,73482,609],{"class":82},[72,73484,63082],{"class":366},[72,73486,69488],{"class":358},[72,73488,609],{"class":82},[72,73490,32194],{"class":366},[72,73492,51725],{"class":82},[72,73494,73495,73497,73499,73501,73503,73505,73507,73509,73511,73513,73515,73518,73520,73522,73524],{"class":74,"line":33239},[72,73496,51759],{"class":82},[72,73498,54239],{"class":51718},[72,73500,54242],{"class":358},[72,73502,609],{"class":82},[72,73504,63117],{"class":366},[72,73506,15346],{"class":358},[72,73508,609],{"class":82},[72,73510,69514],{"class":366},[72,73512,61438],{"class":358},[72,73514,609],{"class":82},[72,73516,73517],{"class":366},"\"姓名\"",[72,73519,53904],{"class":358},[72,73521,609],{"class":82},[72,73523,69514],{"class":366},[72,73525,51725],{"class":82},[72,73527,73528,73530,73532,73534,73536,73538,73540,73542,73544,73546,73548,73551,73553,73555,73557],{"class":74,"line":33254},[72,73529,51759],{"class":82},[72,73531,54239],{"class":51718},[72,73533,54242],{"class":358},[72,73535,609],{"class":82},[72,73537,63117],{"class":366},[72,73539,15346],{"class":358},[72,73541,609],{"class":82},[72,73543,69542],{"class":366},[72,73545,61438],{"class":358},[72,73547,609],{"class":82},[72,73549,73550],{"class":366},"\"年龄\"",[72,73552,53904],{"class":358},[72,73554,609],{"class":82},[72,73556,69542],{"class":366},[72,73558,51725],{"class":82},[72,73560,73561,73563,73565,73567,73569,73571,73573,73575,73577,73579,73581,73584,73586,73588,73590],{"class":74,"line":33260},[72,73562,51759],{"class":82},[72,73564,54239],{"class":51718},[72,73566,54242],{"class":358},[72,73568,609],{"class":82},[72,73570,63117],{"class":366},[72,73572,15346],{"class":358},[72,73574,609],{"class":82},[72,73576,69644],{"class":366},[72,73578,61438],{"class":358},[72,73580,609],{"class":82},[72,73582,73583],{"class":366},"\"薪资\"",[72,73585,53904],{"class":358},[72,73587,609],{"class":82},[72,73589,69644],{"class":366},[72,73591,51725],{"class":82},[72,73593,73594,73596,73598,73600,73602,73604,73606,73608,73610,73612,73614,73616],{"class":74,"line":33269},[72,73595,51759],{"class":82},[72,73597,69562],{"class":51718},[72,73599,15346],{"class":358},[72,73601,609],{"class":82},[72,73603,69569],{"class":366},[72,73605,15385],{"class":358},[72,73607,609],{"class":82},[72,73609,8078],{"class":366},[72,73611,53904],{"class":358},[72,73613,609],{"class":82},[72,73615,69569],{"class":366},[72,73617,51725],{"class":82},[72,73619,73620,73622,73624,73626,73628,73630,73632,73634],{"class":74,"line":33275},[72,73621,55652],{"class":82},[72,73623,69584],{"class":51718},[72,73625,67069],{"class":358},[72,73627,609],{"class":82},[72,73629,10387],{"class":366},[72,73631,69593],{"class":82},[72,73633,69584],{"class":51718},[72,73635,51725],{"class":82},[72,73637,73638,73640,73642,73644,73646,73648,73650,73652],{"class":74,"line":33284},[72,73639,55652],{"class":82},[72,73641,69584],{"class":51718},[72,73643,67069],{"class":358},[72,73645,609],{"class":82},[72,73647,10456],{"class":366},[72,73649,69612],{"class":82},[72,73651,69584],{"class":51718},[72,73653,51725],{"class":82},[72,73655,73656,73658,73660],{"class":74,"line":33290},[72,73657,52194],{"class":82},[72,73659,69562],{"class":51718},[72,73661,51725],{"class":82},[72,73663,73664,73666,73668,73670,73672,73674,73676,73678,73680,73682,73684,73686],{"class":74,"line":33296},[72,73665,51759],{"class":82},[72,73667,69562],{"class":51718},[72,73669,15346],{"class":358},[72,73671,609],{"class":82},[72,73673,69666],{"class":366},[72,73675,15385],{"class":358},[72,73677,609],{"class":82},[72,73679,8078],{"class":366},[72,73681,53904],{"class":358},[72,73683,609],{"class":82},[72,73685,69666],{"class":366},[72,73687,51725],{"class":82},[72,73689,73690,73692,73694,73696,73698,73700,73702,73704],{"class":74,"line":33305},[72,73691,55652],{"class":82},[72,73693,69584],{"class":51718},[72,73695,67069],{"class":358},[72,73697,609],{"class":82},[72,73699,69687],{"class":366},[72,73701,69690],{"class":82},[72,73703,69584],{"class":51718},[72,73705,51725],{"class":82},[72,73707,73708,73710,73712,73714,73716,73718,73720,73722],{"class":74,"line":33311},[72,73709,55652],{"class":82},[72,73711,69584],{"class":51718},[72,73713,67069],{"class":358},[72,73715,609],{"class":82},[72,73717,69707],{"class":366},[72,73719,69710],{"class":82},[72,73721,69584],{"class":51718},[72,73723,51725],{"class":82},[72,73725,73726,73728,73730,73732,73734,73736,73738,73740],{"class":74,"line":33322},[72,73727,55652],{"class":82},[72,73729,69584],{"class":51718},[72,73731,67069],{"class":358},[72,73733,609],{"class":82},[72,73735,69727],{"class":366},[72,73737,69730],{"class":82},[72,73739,69584],{"class":51718},[72,73741,51725],{"class":82},[72,73743,73744,73746,73748,73750,73752,73754,73756,73758],{"class":74,"line":33328},[72,73745,55652],{"class":82},[72,73747,69584],{"class":51718},[72,73749,67069],{"class":358},[72,73751,609],{"class":82},[72,73753,69747],{"class":366},[72,73755,69750],{"class":82},[72,73757,69584],{"class":51718},[72,73759,51725],{"class":82},[72,73761,73762,73764,73766,73768,73770,73772,73774,73776],{"class":74,"line":33347},[72,73763,55652],{"class":82},[72,73765,69584],{"class":51718},[72,73767,67069],{"class":358},[72,73769,609],{"class":82},[72,73771,69767],{"class":366},[72,73773,69770],{"class":82},[72,73775,69584],{"class":51718},[72,73777,51725],{"class":82},[72,73779,73780,73782,73784],{"class":74,"line":33353},[72,73781,52194],{"class":82},[72,73783,69562],{"class":51718},[72,73785,51725],{"class":82},[72,73787,73788,73790,73792],{"class":74,"line":33364},[72,73789,51759],{"class":82},[72,73791,54305],{"class":51718},[72,73793,51725],{"class":82},[72,73795,73796,73798,73800,73803,73805,73808,73810],{"class":74,"line":33370},[72,73797,55652],{"class":82},[72,73799,72],{"class":51718},[72,73801,73802],{"class":82},">+\u003C\u002F",[72,73804,72],{"class":51718},[72,73806,73807],{"class":82},">添加\u003C\u002F",[72,73809,54305],{"class":51718},[72,73811,51725],{"class":82},[72,73813,73814,73816,73818],{"class":74,"line":33390},[72,73815,52835],{"class":82},[72,73817,67043],{"class":51718},[72,73819,51725],{"class":82},[72,73821,73822,73824,73826,73828,73830,73832,73835,73837,73840,73842,73845,73847],{"class":74,"line":33406},[72,73823,52562],{"class":82},[72,73825,52029],{"class":51718},[72,73827,53904],{"class":358},[72,73829,609],{"class":82},[72,73831,62998],{"class":366},[72,73833,73834],{"class":82},">共有数据 \u003C",[72,73836,72],{"class":51718},[72,73838,73839],{"class":82},">0\u003C\u002F",[72,73841,72],{"class":51718},[72,73843,73844],{"class":82},"> 条\u003C\u002F",[72,73846,52029],{"class":51718},[72,73848,51725],{"class":82},[72,73850,73851,73853,73855],{"class":74,"line":33412},[72,73852,52562],{"class":82},[72,73854,154],{"class":51718},[72,73856,51725],{"class":82},[72,73858,73859,73861,73863],{"class":74,"line":33426},[72,73860,51759],{"class":82},[72,73862,157],{"class":51718},[72,73864,51725],{"class":82},[72,73866,73867,73869,73871],{"class":74,"line":33432},[72,73868,55652],{"class":82},[72,73870,160],{"class":51718},[72,73872,51725],{"class":82},[72,73874,73875,73877,73879,73882,73884],{"class":74,"line":33438},[72,73876,55720],{"class":82},[72,73878,163],{"class":51718},[72,73880,73881],{"class":82},">ID\u003C\u002F",[72,73883,163],{"class":51718},[72,73885,51725],{"class":82},[72,73887,73888,73890,73892,73894,73896],{"class":74,"line":33449},[72,73889,55720],{"class":82},[72,73891,163],{"class":51718},[72,73893,69873],{"class":82},[72,73895,163],{"class":51718},[72,73897,51725],{"class":82},[72,73899,73900,73902,73904,73906,73908],{"class":74,"line":33455},[72,73901,55720],{"class":82},[72,73903,163],{"class":51718},[72,73905,69886],{"class":82},[72,73907,163],{"class":51718},[72,73909,51725],{"class":82},[72,73911,73912,73914,73916,73918,73920],{"class":74,"line":33461},[72,73913,55720],{"class":82},[72,73915,163],{"class":51718},[72,73917,69899],{"class":82},[72,73919,163],{"class":51718},[72,73921,51725],{"class":82},[72,73923,73924,73926,73928,73930,73932],{"class":74,"line":33471},[72,73925,55720],{"class":82},[72,73927,163],{"class":51718},[72,73929,69912],{"class":82},[72,73931,163],{"class":51718},[72,73933,51725],{"class":82},[72,73935,73936,73938,73940,73942,73944],{"class":74,"line":33477},[72,73937,55720],{"class":82},[72,73939,163],{"class":51718},[72,73941,69925],{"class":82},[72,73943,163],{"class":51718},[72,73945,51725],{"class":82},[72,73947,73948,73950,73952,73955,73957],{"class":74,"line":33488},[72,73949,55720],{"class":82},[72,73951,163],{"class":51718},[72,73953,73954],{"class":82},">录入时间\u003C\u002F",[72,73956,163],{"class":51718},[72,73958,51725],{"class":82},[72,73960,73961,73963,73965,73967,73969],{"class":74,"line":33494},[72,73962,55720],{"class":82},[72,73964,163],{"class":51718},[72,73966,69938],{"class":82},[72,73968,163],{"class":51718},[72,73970,51725],{"class":82},[72,73972,73973,73975,73977],{"class":74,"line":33504},[72,73974,55825],{"class":82},[72,73976,160],{"class":51718},[72,73978,51725],{"class":82},[72,73980,73981,73983,73985],{"class":74,"line":33509},[72,73982,52194],{"class":82},[72,73984,157],{"class":51718},[72,73986,51725],{"class":82},[72,73988,73989,73991,73993],{"class":74,"line":33515},[72,73990,51759],{"class":82},[72,73992,174],{"class":51718},[72,73994,51725],{"class":82},[72,73996,73997],{"class":74,"line":33564},[72,73998,73999],{"class":621},"      \u003C!-- \u003Ctr>\n",[72,74001,74002],{"class":74,"line":33611},[72,74003,74004],{"class":621},"        \u003Ctd>1\u003C\u002Ftd>\n",[72,74006,74007],{"class":74,"line":33616},[72,74008,74004],{"class":621},[72,74010,74011],{"class":74,"line":33622},[72,74012,74004],{"class":621},[72,74014,74015],{"class":74,"line":33641},[72,74016,74004],{"class":621},[72,74018,74019],{"class":74,"line":33647},[72,74020,74004],{"class":621},[72,74022,74023],{"class":74,"line":33667},[72,74024,74004],{"class":621},[72,74026,74027],{"class":74,"line":33673},[72,74028,74004],{"class":621},[72,74030,74031],{"class":74,"line":33679},[72,74032,74033],{"class":621},"        \u003Ctd>\n",[72,74035,74036],{"class":74,"line":33689},[72,74037,74038],{"class":621},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[72,74040,74041],{"class":74,"line":33694},[72,74042,74043],{"class":621},"        \u003C\u002Ftd>\n",[72,74045,74046],{"class":74,"line":33700},[72,74047,74048],{"class":621},"      \u003C\u002Ftr> -->\n",[72,74050,74051,74053,74055],{"class":74,"line":33716},[72,74052,52194],{"class":82},[72,74054,174],{"class":51718},[72,74056,51725],{"class":82},[72,74058,74059,74061,74063],{"class":74,"line":33761},[72,74060,52835],{"class":82},[72,74062,154],{"class":51718},[72,74064,51725],{"class":82},[72,74066,74067,74069,74071],{"class":74,"line":33767},[72,74068,52562],{"class":82},[72,74070,52231],{"class":51718},[72,74072,51725],{"class":82},[72,74074,74075],{"class":74,"line":33773},[72,74076,74077],{"class":621},"    \u002F\u002F const initData = [{\n",[72,74079,74080],{"class":74,"line":33779},[72,74081,74082],{"class":621},"    \u002F\u002F   unameId: 1,\n",[72,74084,74085],{"class":74,"line":33790},[72,74086,74087],{"class":621},"    \u002F\u002F   uname: '华晨宇',\n",[72,74089,74090],{"class":74,"line":33796},[72,74091,74092],{"class":621},"    \u002F\u002F   age: 22,\n",[72,74094,74095],{"class":74,"line":33802},[72,74096,74097],{"class":621},"    \u002F\u002F   salary: 12000,\n",[72,74099,74100],{"class":74,"line":33808},[72,74101,74102],{"class":621},"    \u002F\u002F   gender: '男',\n",[72,74104,74105],{"class":74,"line":33826},[72,74106,74107],{"class":621},"    \u002F\u002F   city: '北京',\n",[72,74109,74110],{"class":74,"line":33840},[72,74111,74112],{"class":621},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[72,74114,74115],{"class":74,"line":33849},[72,74116,74117],{"class":621},"    \u002F\u002F }]\n",[72,74119,74120],{"class":74,"line":33858},[72,74121,74122],{"class":621},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[72,74124,74125],{"class":74,"line":33867},[72,74126,74127],{"class":621},"    \u002F\u002F 1.渲染业务\n",[72,74129,74130],{"class":74,"line":33876},[72,74131,74132],{"class":621},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[72,74134,74135],{"class":74,"line":33882},[72,74136,74137],{"class":621},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[72,74139,74140],{"class":74,"line":33888},[72,74141,74142],{"class":621},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[72,74144,74145],{"class":74,"line":33896},[72,74146,2828],{"emptyLinePlaceholder":490},[72,74148,74149],{"class":74,"line":33901},[72,74150,74151],{"class":621},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[72,74153,74154],{"class":74,"line":33907},[72,74155,74156],{"class":621},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[72,74158,74159,74161,74163,74165],{"class":74,"line":33918},[72,74160,11647],{"class":78},[72,74162,58113],{"class":362},[72,74164,13990],{"class":78},[72,74166,52256],{"class":82},[72,74168,74169,74172,74174],{"class":74,"line":33924},[72,74170,74171],{"class":82},"    console.",[72,74173,58665],{"class":358},[72,74175,52830],{"class":82},[72,74177,74178],{"class":74,"line":33944},[72,74179,2828],{"emptyLinePlaceholder":490},[72,74181,74182],{"class":74,"line":33950},[72,74183,74184],{"class":621},"    \u002F\u002F 时间函数\n",[72,74186,74187,74189,74192],{"class":74,"line":33956},[72,74188,70502],{"class":78},[72,74190,74191],{"class":358}," getTime",[72,74193,11279],{"class":82},[72,74195,74196,74198,74201,74203,74205,74208],{"class":74,"line":33962},[72,74197,58646],{"class":78},[72,74199,74200],{"class":362}," date",[72,74202,13990],{"class":78},[72,74204,12004],{"class":78},[72,74206,74207],{"class":358}," Date",[72,74209,2404],{"class":82},[72,74211,74212,74214,74216,74218,74221,74224,74226,74228,74230,74233,74236,74238,74240,74242,74244,74246,74248,74250],{"class":74,"line":33979},[72,74213,58646],{"class":78},[72,74215,16517],{"class":362},[72,74217,13990],{"class":78},[72,74219,74220],{"class":82}," date.",[72,74222,74223],{"class":358},"getHours",[72,74225,13476],{"class":82},[72,74227,1464],{"class":78},[72,74229,2466],{"class":362},[72,74231,74232],{"class":78}," ?",[72,74234,74235],{"class":366}," '0'",[72,74237,45984],{"class":78},[72,74239,74220],{"class":82},[72,74241,74223],{"class":358},[72,74243,13476],{"class":82},[72,74245,1413],{"class":78},[72,74247,74220],{"class":82},[72,74249,74223],{"class":358},[72,74251,2404],{"class":82},[72,74253,74254,74256,74259,74261,74263,74266,74268,74270,74272,74274,74276,74278,74280,74282,74284,74286,74288,74290],{"class":74,"line":33985},[72,74255,58646],{"class":78},[72,74257,74258],{"class":362}," m",[72,74260,13990],{"class":78},[72,74262,74220],{"class":82},[72,74264,74265],{"class":358},"getMinutes",[72,74267,13476],{"class":82},[72,74269,1464],{"class":78},[72,74271,2466],{"class":362},[72,74273,74232],{"class":78},[72,74275,74235],{"class":366},[72,74277,45984],{"class":78},[72,74279,74220],{"class":82},[72,74281,74265],{"class":358},[72,74283,13476],{"class":82},[72,74285,1413],{"class":78},[72,74287,74220],{"class":82},[72,74289,74265],{"class":358},[72,74291,2404],{"class":82},[72,74293,74294,74296,74298,74300,74302,74305,74307,74309,74311,74313,74315,74317,74319,74321,74323,74325,74327,74329],{"class":74,"line":33991},[72,74295,58646],{"class":78},[72,74297,8854],{"class":362},[72,74299,13990],{"class":78},[72,74301,74220],{"class":82},[72,74303,74304],{"class":358},"getSeconds",[72,74306,13476],{"class":82},[72,74308,1464],{"class":78},[72,74310,2466],{"class":362},[72,74312,74232],{"class":78},[72,74314,74235],{"class":366},[72,74316,45984],{"class":78},[72,74318,74220],{"class":82},[72,74320,74304],{"class":358},[72,74322,13476],{"class":82},[72,74324,1413],{"class":78},[72,74326,74220],{"class":82},[72,74328,74304],{"class":358},[72,74330,2404],{"class":82},[72,74332,74333,74335,74338,74340,74342,74345,74347,74350,74352,74355,74357,74359,74362,74364,74366,74368,74370,74372,74374,74377,74379,74382,74384,74387,74389,74391,74393],{"class":74,"line":33997},[72,74334,58646],{"class":78},[72,74336,74337],{"class":362}," str",[72,74339,13990],{"class":78},[72,74341,63321],{"class":366},[72,74343,74344],{"class":82},"date",[72,74346,1112],{"class":366},[72,74348,74349],{"class":358},"getFullYear",[72,74351,2855],{"class":366},[72,74353,74354],{"class":366},"}\u002F${",[72,74356,74344],{"class":82},[72,74358,1112],{"class":366},[72,74360,74361],{"class":358},"getMonth",[72,74363,13476],{"class":366},[72,74365,1035],{"class":78},[72,74367,25540],{"class":362},[72,74369,74354],{"class":366},[72,74371,74344],{"class":82},[72,74373,1112],{"class":366},[72,74375,74376],{"class":358},"getDate",[72,74378,2855],{"class":366},[72,74380,74381],{"class":366},"} ${",[72,74383,969],{"class":82},[72,74385,74386],{"class":366},"}:${",[72,74388,1098],{"class":82},[72,74390,74386],{"class":366},[72,74392,1249],{"class":82},[72,74394,74395],{"class":366},"}`\n",[72,74397,74398,74401],{"class":74,"line":34003},[72,74399,74400],{"class":78},"      return",[72,74402,74403],{"class":82}," str\n",[72,74405,74406],{"class":74,"line":34009},[72,74407,2615],{"class":82},[72,74409,74410],{"class":74,"line":34036},[72,74411,74412],{"class":621},"    \u002F\u002F 渲染函数\n",[72,74414,74415,74417,74419,74421,74423,74425,74427,74429],{"class":74,"line":34060},[72,74416,11647],{"class":78},[72,74418,70165],{"class":362},[72,74420,13990],{"class":78},[72,74422,54814],{"class":82},[72,74424,54817],{"class":358},[72,74426,564],{"class":82},[72,74428,70176],{"class":366},[72,74430,570],{"class":82},[72,74432,74433,74435,74437],{"class":74,"line":34066},[72,74434,70502],{"class":78},[72,74436,70505],{"class":358},[72,74438,11279],{"class":82},[72,74440,74441],{"class":74,"line":34072},[72,74442,74443],{"class":621},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[72,74445,74446],{"class":74,"line":34078},[72,74447,74448],{"class":621},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[72,74450,74451,74453,74456,74458,74460,74463,74465,74467,74469,74472,74474,74477],{"class":74,"line":34089},[72,74452,58646],{"class":78},[72,74454,74455],{"class":362}," trArr",[72,74457,13990],{"class":78},[72,74459,52383],{"class":82},[72,74461,74462],{"class":358},"map",[72,74464,564],{"class":82},[72,74466,54867],{"class":78},[72,74468,2087],{"class":82},[72,74470,74471],{"class":5642},"ele",[72,74473,12861],{"class":82},[72,74475,74476],{"class":5642},"index",[72,74478,12868],{"class":82},[72,74480,74481,74483],{"class":74,"line":34100},[72,74482,15178],{"class":78},[72,74484,70586],{"class":366},[72,74486,74487],{"class":74,"line":34106},[72,74488,74489],{"class":366},"      \u003Ctr>\n",[72,74491,74492,74494,74496,74498,74501],{"class":74,"line":34123},[72,74493,70591],{"class":366},[72,74495,74471],{"class":82},[72,74497,1112],{"class":366},[72,74499,74500],{"class":82},"unameId",[72,74502,70606],{"class":366},[72,74504,74505,74507,74509,74511,74513],{"class":74,"line":34146},[72,74506,70591],{"class":366},[72,74508,74471],{"class":82},[72,74510,1112],{"class":366},[72,74512,70622],{"class":82},[72,74514,70606],{"class":366},[72,74516,74517,74519,74521,74523,74525],{"class":74,"line":34169},[72,74518,70591],{"class":366},[72,74520,74471],{"class":82},[72,74522,1112],{"class":366},[72,74524,70639],{"class":82},[72,74526,70606],{"class":366},[72,74528,74529,74531,74533,74535,74537],{"class":74,"line":34175},[72,74530,70591],{"class":366},[72,74532,74471],{"class":82},[72,74534,1112],{"class":366},[72,74536,70656],{"class":82},[72,74538,70606],{"class":366},[72,74540,74541,74543,74545,74547,74549],{"class":74,"line":34180},[72,74542,70591],{"class":366},[72,74544,74471],{"class":82},[72,74546,1112],{"class":366},[72,74548,70673],{"class":82},[72,74550,70606],{"class":366},[72,74552,74553,74555,74557,74559,74561],{"class":74,"line":34189},[72,74554,70591],{"class":366},[72,74556,74471],{"class":82},[72,74558,1112],{"class":366},[72,74560,70690],{"class":82},[72,74562,70606],{"class":366},[72,74564,74565,74567,74569,74571,74573],{"class":74,"line":34199},[72,74566,70591],{"class":366},[72,74568,74471],{"class":82},[72,74570,1112],{"class":366},[72,74572,2815],{"class":82},[72,74574,70606],{"class":366},[72,74576,74577],{"class":74,"line":34205},[72,74578,74033],{"class":366},[72,74580,74581,74584,74586],{"class":74,"line":34210},[72,74582,74583],{"class":366},"          \u003Ca href=\"#\" data-id=\"${",[72,74585,74476],{"class":82},[72,74587,74588],{"class":366},"}\">删除\u003C\u002Fa>\n",[72,74590,74591],{"class":74,"line":34216},[72,74592,74043],{"class":366},[72,74594,74595],{"class":74,"line":34229},[72,74596,74597],{"class":366},"      \u003C\u002Ftr>\n",[72,74599,74600],{"class":74,"line":34235},[72,74601,74602],{"class":366},"  `\n",[72,74604,74605],{"class":74,"line":34246},[72,74606,65233],{"class":82},[72,74608,74609,74611,74613],{"class":74,"line":34257},[72,74610,58662],{"class":82},[72,74612,58665],{"class":358},[72,74614,74615],{"class":82},"(trArr)\n",[72,74617,74618],{"class":74,"line":34276},[72,74619,2828],{"emptyLinePlaceholder":490},[72,74621,74622],{"class":74,"line":49936},[72,74623,74624],{"class":621},"      \u002F\u002F (2) 把数组转换为字符串join\n",[72,74626,74627],{"class":74,"line":49941},[72,74628,74629],{"class":621},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[72,74631,74632,74634,74636,74639,74642,74644,74647],{"class":74,"line":49950},[72,74633,70517],{"class":82},[72,74635,609],{"class":78},[72,74637,74638],{"class":82}," trArr.",[72,74640,74641],{"class":358},"join",[72,74643,564],{"class":82},[72,74645,74646],{"class":366},"''",[72,74648,570],{"class":82},[72,74650,74651],{"class":74,"line":49959},[72,74652,74653],{"class":621},"      \u002F\u002F 显示共有几条\n",[72,74655,74656,74658,74660,74662,74665,74668,74670,74672],{"class":74,"line":49964},[72,74657,56189],{"class":82},[72,74659,54817],{"class":358},[72,74661,564],{"class":82},[72,74663,74664],{"class":366},"'.total span'",[72,74666,74667],{"class":82},").innerHTML ",[72,74669,609],{"class":78},[72,74671,52383],{"class":82},[72,74673,56249],{"class":362},[72,74675,74676],{"class":74,"line":49969},[72,74677,2615],{"class":82},[72,74679,74680],{"class":74,"line":49974},[72,74681,74682],{"class":621},"    \u002F\u002F render()\n",[72,74684,74685],{"class":74,"line":49987},[72,74686,2828],{"emptyLinePlaceholder":490},[72,74688,74689],{"class":74,"line":49992},[72,74690,74691],{"class":621},"    \u002F\u002F 获取DOM对象\n",[72,74693,74694,74696,74698,74700,74702,74704,74706,74708],{"class":74,"line":50001},[72,74695,11647],{"class":78},[72,74697,70239],{"class":362},[72,74699,13990],{"class":78},[72,74701,54814],{"class":82},[72,74703,54817],{"class":358},[72,74705,564],{"class":82},[72,74707,70250],{"class":366},[72,74709,570],{"class":82},[72,74711,74712,74714,74716,74718,74720,74722,74724,74726],{"class":74,"line":50010},[72,74713,11647],{"class":78},[72,74715,70066],{"class":362},[72,74717,13990],{"class":78},[72,74719,54814],{"class":82},[72,74721,54817],{"class":358},[72,74723,564],{"class":82},[72,74725,70077],{"class":366},[72,74727,570],{"class":82},[72,74729,74730,74732,74734,74736,74738,74740,74742,74744],{"class":74,"line":50027},[72,74731,11647],{"class":78},[72,74733,16115],{"class":362},[72,74735,13990],{"class":78},[72,74737,54814],{"class":82},[72,74739,54817],{"class":358},[72,74741,564],{"class":82},[72,74743,70096],{"class":366},[72,74745,570],{"class":82},[72,74747,74749,74751,74753,74755,74757,74759,74761,74763],{"class":74,"line":74748},231,[72,74750,11647],{"class":78},[72,74752,70125],{"class":362},[72,74754,13990],{"class":78},[72,74756,54814],{"class":82},[72,74758,54817],{"class":358},[72,74760,564],{"class":82},[72,74762,70136],{"class":366},[72,74764,570],{"class":82},[72,74766,74768,74770,74772,74774,74776,74778,74780,74782],{"class":74,"line":74767},232,[72,74769,11647],{"class":78},[72,74771,70105],{"class":362},[72,74773,13990],{"class":78},[72,74775,54814],{"class":82},[72,74777,54817],{"class":358},[72,74779,564],{"class":82},[72,74781,70116],{"class":366},[72,74783,570],{"class":82},[72,74785,74787,74789,74791,74793,74795,74797,74799,74801],{"class":74,"line":74786},233,[72,74788,11647],{"class":78},[72,74790,70145],{"class":362},[72,74792,13990],{"class":78},[72,74794,54814],{"class":82},[72,74796,54817],{"class":358},[72,74798,564],{"class":82},[72,74800,70156],{"class":366},[72,74802,570],{"class":82},[72,74804,74806],{"class":74,"line":74805},234,[72,74807,2828],{"emptyLinePlaceholder":490},[72,74809,74811],{"class":74,"line":74810},235,[72,74812,74813],{"class":621},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[72,74815,74817,74819,74821,74823,74825,74827,74829,74831,74833],{"class":74,"line":74816},236,[72,74818,70257],{"class":82},[72,74820,58231],{"class":358},[72,74822,564],{"class":82},[72,74824,70264],{"class":366},[72,74826,12861],{"class":82},[72,74828,54867],{"class":78},[72,74830,2087],{"class":82},[72,74832,637],{"class":5642},[72,74834,12868],{"class":82},[72,74836,74838],{"class":74,"line":74837},237,[72,74839,74840],{"class":621},"      \u002F\u002F 禁止浏览器跳转\n",[72,74842,74844,74846,74848],{"class":74,"line":74843},238,[72,74845,70284],{"class":82},[72,74847,70287],{"class":358},[72,74849,2404],{"class":82},[72,74851,74853],{"class":74,"line":74852},239,[72,74854,74855],{"class":621},"      \u002F\u002F 非空判断\n",[72,74857,74859],{"class":74,"line":74858},240,[72,74860,74861],{"class":621},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[72,74863,74865],{"class":74,"line":74864},241,[72,74866,74867],{"class":621},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[72,74869,74871,74873,74875,74877,74880,74882,74885,74888,74890,74892],{"class":74,"line":74870},242,[72,74872,54898],{"class":78},[72,74874,2087],{"class":82},[72,74876,781],{"class":78},[72,74878,74879],{"class":82},"uname.value ",[72,74881,71775],{"class":78},[72,74883,74884],{"class":78}," !",[72,74886,74887],{"class":82},"age.value ",[72,74889,71775],{"class":78},[72,74891,74884],{"class":78},[72,74893,74894],{"class":82},"salary.value) {\n",[72,74896,74898,74900,74902,74904,74906],{"class":74,"line":74897},243,[72,74899,15178],{"class":78},[72,74901,70358],{"class":358},[72,74903,564],{"class":82},[72,74905,70363],{"class":366},[72,74907,570],{"class":82},[72,74909,74911],{"class":74,"line":74910},244,[72,74912,52816],{"class":82},[72,74914,74916,74918,74920],{"class":74,"line":74915},245,[72,74917,58425],{"class":82},[72,74919,52302],{"class":358},[72,74921,74922],{"class":82},"({\n",[72,74924,74926],{"class":74,"line":74925},246,[72,74927,74928],{"class":621},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[72,74930,74932],{"class":74,"line":74931},247,[72,74933,74934],{"class":621},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[72,74936,74938],{"class":74,"line":74937},248,[72,74939,74940],{"class":621},"        \u002F\u002F 对象的序号应为数组长度+1\n",[72,74942,74944],{"class":74,"line":74943},249,[72,74945,74946],{"class":621},"        \u002F\u002F unameId: arr.length + 1,\n",[72,74948,74950],{"class":74,"line":74949},250,[72,74951,2828],{"emptyLinePlaceholder":490},[72,74953,74955],{"class":74,"line":74954},251,[72,74956,74957],{"class":621},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[72,74959,74961],{"class":74,"line":74960},252,[72,74962,74963],{"class":621},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[72,74965,74967],{"class":74,"line":74966},253,[72,74968,74969],{"class":621},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[72,74971,74973],{"class":74,"line":74972},254,[72,74974,74975],{"class":621},"        \u002F\u002F 0当假看\n",[72,74977,74979,74982,74984,74986,74989,74991,74993,74995,74998,75000,75002,75005,75007],{"class":74,"line":74978},255,[72,74980,74981],{"class":82},"        unameId: arr.",[72,74983,52386],{"class":362},[72,74985,74232],{"class":78},[72,74987,74988],{"class":82}," arr[arr.",[72,74990,52386],{"class":362},[72,74992,52689],{"class":78},[72,74994,25540],{"class":362},[72,74996,74997],{"class":82},"].unameId ",[72,74999,1035],{"class":78},[72,75001,25540],{"class":362},[72,75003,75004],{"class":78}," :",[72,75006,25540],{"class":362},[72,75008,31884],{"class":82},[72,75010,75012],{"class":74,"line":75011},256,[72,75013,70411],{"class":82},[72,75015,75017],{"class":74,"line":75016},257,[72,75018,70416],{"class":82},[72,75020,75022],{"class":74,"line":75021},258,[72,75023,70426],{"class":82},[72,75025,75027],{"class":74,"line":75026},259,[72,75028,70421],{"class":82},[72,75030,75032],{"class":74,"line":75031},260,[72,75033,75034],{"class":82},"        city: city.value,\n",[72,75036,75038],{"class":74,"line":75037},261,[72,75039,75040],{"class":621},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[72,75042,75044],{"class":74,"line":75043},262,[72,75045,75046],{"class":621},"        \u002F\u002F time: new Date().toDateString()\n",[72,75048,75050,75053,75056],{"class":74,"line":75049},263,[72,75051,75052],{"class":82},"        time: ",[72,75054,75055],{"class":358},"getTime",[72,75057,2404],{"class":82},[72,75059,75061],{"class":74,"line":75060},264,[72,75062,65233],{"class":82},[72,75064,75066],{"class":74,"line":75065},265,[72,75067,75068],{"class":621},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[72,75070,75072,75074],{"class":74,"line":75071},266,[72,75073,70486],{"class":358},[72,75075,2404],{"class":82},[72,75077,75079,75081,75083,75085,75087],{"class":74,"line":75078},267,[72,75080,70469],{"class":362},[72,75082,1112],{"class":82},[72,75084,70474],{"class":358},[72,75086,13476],{"class":82},[72,75088,75089],{"class":621},"\u002F\u002F重置表单\n",[72,75091,75093],{"class":74,"line":75092},268,[72,75094,75095],{"class":621},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[72,75097,75099,75102,75104,75106,75109,75111,75113,75115,75117],{"class":74,"line":75098},269,[72,75100,75101],{"class":82},"      localStorage.",[72,75103,72072],{"class":358},[72,75105,564],{"class":82},[72,75107,75108],{"class":366},"'data'",[72,75110,12861],{"class":82},[72,75112,72082],{"class":362},[72,75114,1112],{"class":82},[72,75116,72087],{"class":358},[72,75118,75119],{"class":82},"(arr))\n",[72,75121,75123],{"class":74,"line":75122},270,[72,75124,33879],{"class":82},[72,75126,75128],{"class":74,"line":75127},271,[72,75129,2828],{"emptyLinePlaceholder":490},[72,75131,75133],{"class":74,"line":75132},272,[72,75134,75135],{"class":621},"    \u002F\u002F 3.删除业务\n",[72,75137,75139],{"class":74,"line":75138},273,[72,75140,75141],{"class":621},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[72,75143,75145,75147,75149,75151,75153,75155,75157,75159,75161],{"class":74,"line":75144},274,[72,75146,70759],{"class":82},[72,75148,58231],{"class":358},[72,75150,564],{"class":82},[72,75152,58236],{"class":366},[72,75154,12861],{"class":82},[72,75156,54867],{"class":78},[72,75158,2087],{"class":82},[72,75160,637],{"class":5642},[72,75162,12868],{"class":82},[72,75164,75166],{"class":74,"line":75165},275,[72,75167,75168],{"class":621},"      \u002F\u002F 判断是否点击的是删除按钮\n",[72,75170,75172,75174,75176,75178,75180],{"class":74,"line":75171},276,[72,75173,54898],{"class":78},[72,75175,67452],{"class":82},[72,75177,54904],{"class":78},[72,75179,68674],{"class":366},[72,75181,12868],{"class":82},[72,75183,75185],{"class":74,"line":75184},277,[72,75186,75187],{"class":621},"        \u002F\u002F alert(1)\n",[72,75189,75191],{"class":74,"line":75190},278,[72,75192,75193],{"class":621},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[72,75195,75197],{"class":74,"line":75196},279,[72,75198,75199],{"class":621},"        \u002F\u002F console.log(e.target)\n",[72,75201,75203],{"class":74,"line":75202},280,[72,75204,75205],{"class":621},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[72,75207,75209],{"class":74,"line":75208},281,[72,75210,2828],{"emptyLinePlaceholder":490},[72,75212,75214],{"class":74,"line":75213},282,[72,75215,75216],{"class":621},"        \u002F\u002F 确认框，确然是否真的要删除\n",[72,75218,75220],{"class":74,"line":75219},283,[72,75221,75222],{"class":621},"        \u002F\u002F confirm()为确认框\n",[72,75224,75226],{"class":74,"line":75225},284,[72,75227,75228],{"class":621},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[72,75230,75232,75234,75236,75239,75241,75244],{"class":74,"line":75231},285,[72,75233,2925],{"class":78},[72,75235,2087],{"class":82},[72,75237,75238],{"class":358},"confirm",[72,75240,564],{"class":82},[72,75242,75243],{"class":366},"'您确定要删除这条数据吗？'",[72,75245,75246],{"class":82},")) {\n",[72,75248,75250,75253,75255,75257,75259],{"class":74,"line":75249},286,[72,75251,75252],{"class":82},"          arr.",[72,75254,58428],{"class":358},[72,75256,70812],{"class":82},[72,75258,772],{"class":362},[72,75260,570],{"class":82},[72,75262,75264],{"class":74,"line":75263},287,[72,75265,75266],{"class":621},"          \u002F\u002F 3.4 重新渲染页面\n",[72,75268,75270,75273],{"class":74,"line":75269},288,[72,75271,75272],{"class":358},"          render",[72,75274,2404],{"class":82},[72,75276,75278],{"class":74,"line":75277},289,[72,75279,75280],{"class":621},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[72,75282,75284,75287,75289,75291,75293,75295,75297,75299,75301],{"class":74,"line":75283},290,[72,75285,75286],{"class":82},"          localStorage.",[72,75288,72072],{"class":358},[72,75290,564],{"class":82},[72,75292,75108],{"class":366},[72,75294,12861],{"class":82},[72,75296,72082],{"class":362},[72,75298,1112],{"class":82},[72,75300,72087],{"class":358},[72,75302,75119],{"class":82},[72,75304,75306],{"class":74,"line":75305},291,[72,75307,2957],{"class":82},[72,75309,75311],{"class":74,"line":75310},292,[72,75312,52816],{"class":82},[72,75314,75316],{"class":74,"line":75315},293,[72,75317,2828],{"emptyLinePlaceholder":490},[72,75319,75321],{"class":74,"line":75320},294,[72,75322,33879],{"class":82},[72,75324,75326],{"class":74,"line":75325},295,[72,75327,2828],{"emptyLinePlaceholder":490},[72,75329,75331,75333,75335],{"class":74,"line":75330},296,[72,75332,52835],{"class":82},[72,75334,52231],{"class":51718},[72,75336,51725],{"class":82},[72,75338,75340,75342,75344],{"class":74,"line":75339},297,[72,75341,52203],{"class":82},[72,75343,52218],{"class":51718},[72,75345,51725],{"class":82},[72,75347,75349],{"class":74,"line":75348},298,[72,75350,2828],{"emptyLinePlaceholder":490},[72,75352,75354,75356,75358],{"class":74,"line":75353},299,[72,75355,52203],{"class":82},[72,75357,51053],{"class":51718},[72,75359,51725],{"class":82},[85,75361,75363],{"id":75362},"_36-正则表达式","3.6 正则表达式",[15,75365,75366],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[15,75368,75369],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[15,75371,75372],{},"正则表达式的作用：",[251,75374,75375,75382,75388],{},[25,75376,75377,75378,75381],{},"表单验证（ ",[707,75379,75380],{},"匹配"," ）",[25,75383,75384,75385,75381],{},"过滤敏感词（ ",[707,75386,75387],{},"替换",[25,75389,75390,75391,75381],{},"字符串中提取我们想要的部分（ ",[707,75392,75393],{},"提取",[531,75395,75397],{"id":75396},"_361-语法","3.6.1 语法",[15,75399,75400],{},"正则表达式使用步骤：",[22,75402,75403,75406],{},[25,75404,75405],{},"定义规则",[25,75407,75408],{},"查找是否匹配",[15,75410,75411],{},"正则表达式里边不需要写引号",[15,75413,75414],{},[1891,75415],{"alt":68,"src":75416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[15,75418,75419],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[15,75421,75422],{},"reg.test(str)",[15,75424,75425],{},[1891,75426],{"alt":68,"src":75427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[15,75429,75430],{},[1891,75431],{"alt":68,"src":75432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[531,75434,75436],{"id":75435},"_362-元字符","3.6.2 元字符",[22,75438,75439,75442,75445,75448,75455],{},[25,75440,75441],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[25,75443,75444],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[25,75446,75447],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[25,75449,75450,75451],{},"正则验证工具：",[257,75452,75453],{"href":75453,"rel":75454},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[261],[25,75456,75457],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[22423,75459,75461],{"id":75460},"_3621-边界符","3.6.2.1 边界符",[15,75463,75464],{},[1891,75465],{"alt":68,"src":75466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[15,75468,75469],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[15,75471,75472],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[15,75474,75475],{},"只匹配一次",[15,75477,75478],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[22423,75480,75482],{"id":75481},"_3622-量词","3.6.2.2 量词",[15,75484,75485],{},[1891,75486],{"alt":68,"src":75487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[15,75489,75490],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[22423,75492,75494],{"id":75493},"_3623-元字符","3.6.2.3 元字符",[15,75496,75497],{},[1891,75498],{"alt":68,"src":75499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[15,75501,75502],{},"匹配的是a或b或c []只选一个",[15,75504,75505],{},[1891,75506],{"alt":68,"src":75507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[15,75509,75510],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[15,75512,75513],{},[1891,75514],{"alt":68,"src":75515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[15,75517,75518],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[15,75520,75521],{},[1891,75522],{"alt":68,"src":75523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[63,75525,75527],{"className":51051,"code":75526,"language":51053,"meta":68,"style":68},"\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",[34,75528,75529,75539,75553,75557,75565,75579,75599,75611,75619,75623,75631,75639,75644,75675,75702,75730,75734,75739,75767,75798,75803,75808,75839,75871,75903,75907,75912,75943,75973,76003,76007,76012,76043,76074,76104,76134,76138,76143,76176,76180,76185,76216,76247,76251,76256,76287,76317,76348,76352,76357,76389,76420,76451,76478,76509,76541,76574,76605,76636,76668,76699,76707,76715,76719],{"__ignoreMap":68},[72,75530,75531,75533,75535,75537],{"class":74,"line":75},[72,75532,51715],{"class":82},[72,75534,51719],{"class":51718},[72,75536,51722],{"class":358},[72,75538,51725],{"class":82},[72,75540,75541,75543,75545,75547,75549,75551],{"class":74,"line":370},[72,75542,1464],{"class":82},[72,75544,51053],{"class":51718},[72,75546,51734],{"class":358},[72,75548,609],{"class":82},[72,75550,51739],{"class":366},[72,75552,51725],{"class":82},[72,75554,75555],{"class":74,"line":1608},[72,75556,2828],{"emptyLinePlaceholder":490},[72,75558,75559,75561,75563],{"class":74,"line":1623},[72,75560,1464],{"class":82},[72,75562,51752],{"class":51718},[72,75564,51725],{"class":82},[72,75566,75567,75569,75571,75573,75575,75577],{"class":74,"line":1629},[72,75568,52562],{"class":82},[72,75570,51762],{"class":51718},[72,75572,51765],{"class":358},[72,75574,609],{"class":82},[72,75576,51770],{"class":366},[72,75578,51725],{"class":82},[72,75580,75581,75583,75585,75587,75589,75591,75593,75595,75597],{"class":74,"line":1643},[72,75582,52562],{"class":82},[72,75584,51762],{"class":51718},[72,75586,15346],{"class":358},[72,75588,609],{"class":82},[72,75590,51809],{"class":366},[72,75592,51789],{"class":358},[72,75594,609],{"class":82},[72,75596,51816],{"class":366},[72,75598,51725],{"class":82},[72,75600,75601,75603,75605,75607,75609],{"class":74,"line":1649},[72,75602,52562],{"class":82},[72,75604,51825],{"class":51718},[72,75606,51828],{"class":82},[72,75608,51825],{"class":51718},[72,75610,51725],{"class":82},[72,75612,75613,75615,75617],{"class":74,"line":1740},[72,75614,52203],{"class":82},[72,75616,51752],{"class":51718},[72,75618,51725],{"class":82},[72,75620,75621],{"class":74,"line":1746},[72,75622,2828],{"emptyLinePlaceholder":490},[72,75624,75625,75627,75629],{"class":74,"line":1758},[72,75626,1464],{"class":82},[72,75628,52218],{"class":51718},[72,75630,51725],{"class":82},[72,75632,75633,75635,75637],{"class":74,"line":2041},[72,75634,52562],{"class":82},[72,75636,52231],{"class":51718},[72,75638,51725],{"class":82},[72,75640,75641],{"class":74,"line":2046},[72,75642,75643],{"class":621},"    \u002F\u002F 元字符中\n",[72,75645,75646,75648,75650,75652,75654,75657,75659,75661,75664,75666,75669,75672],{"class":74,"line":2052},[72,75647,74171],{"class":82},[72,75649,58665],{"class":358},[72,75651,564],{"class":82},[72,75653,1138],{"class":366},[72,75655,75656],{"class":48395},"哈",[72,75658,1138],{"class":366},[72,75660,1112],{"class":82},[72,75662,75663],{"class":358},"test",[72,75665,564],{"class":82},[72,75667,75668],{"class":366},"'哈'",[72,75670,75671],{"class":82},"))  ",[72,75673,75674],{"class":621},"\u002F\u002Ftrue\n",[72,75676,75677,75679,75681,75683,75685,75687,75689,75691,75693,75695,75698,75700],{"class":74,"line":2057},[72,75678,74171],{"class":82},[72,75680,58665],{"class":358},[72,75682,564],{"class":82},[72,75684,1138],{"class":366},[72,75686,75656],{"class":48395},[72,75688,1138],{"class":366},[72,75690,1112],{"class":82},[72,75692,75663],{"class":358},[72,75694,564],{"class":82},[72,75696,75697],{"class":366},"'哈哈'",[72,75699,75671],{"class":82},[72,75701,75674],{"class":621},[72,75703,75704,75706,75708,75710,75712,75714,75716,75718,75720,75722,75725,75728],{"class":74,"line":2071},[72,75705,74171],{"class":82},[72,75707,58665],{"class":358},[72,75709,564],{"class":82},[72,75711,1138],{"class":366},[72,75713,75656],{"class":48395},[72,75715,1138],{"class":366},[72,75717,1112],{"class":82},[72,75719,75663],{"class":358},[72,75721,564],{"class":82},[72,75723,75724],{"class":366},"'二哈'",[72,75726,75727],{"class":82},"))   ",[72,75729,75674],{"class":621},[72,75731,75732],{"class":74,"line":2076},[72,75733,2828],{"emptyLinePlaceholder":490},[72,75735,75736],{"class":74,"line":2082},[72,75737,75738],{"class":621},"    \u002F\u002F 1.边界符\n",[72,75740,75741,75743,75745,75747,75749,75751,75753,75755,75757,75759,75761,75763,75765],{"class":74,"line":2103},[72,75742,74171],{"class":82},[72,75744,58665],{"class":358},[72,75746,564],{"class":82},[72,75748,1138],{"class":366},[72,75750,1520],{"class":78},[72,75752,75656],{"class":48395},[72,75754,1138],{"class":366},[72,75756,1112],{"class":82},[72,75758,75663],{"class":358},[72,75760,564],{"class":82},[72,75762,75668],{"class":366},[72,75764,75671],{"class":82},[72,75766,75674],{"class":621},[72,75768,75769,75771,75773,75775,75777,75779,75781,75783,75785,75787,75789,75791,75793,75795],{"class":74,"line":2108},[72,75770,74171],{"class":82},[72,75772,58665],{"class":358},[72,75774,564],{"class":82},[72,75776,1138],{"class":366},[72,75778,1520],{"class":78},[72,75780,75656],{"class":48395},[72,75782,856],{"class":78},[72,75784,1138],{"class":366},[72,75786,1112],{"class":82},[72,75788,75663],{"class":358},[72,75790,564],{"class":82},[72,75792,75697],{"class":366},[72,75794,75671],{"class":82},[72,75796,75797],{"class":621},"\u002F\u002Ffalse\n",[72,75799,75800],{"class":74,"line":2122},[72,75801,75802],{"class":621},"    \u002F\u002F 2.量词\n",[72,75804,75805],{"class":74,"line":2127},[72,75806,75807],{"class":621},"    \u002F\u002F 量词 * 类似于 >= 0\n",[72,75809,75810,75812,75814,75816,75818,75820,75822,75825,75827,75829,75831,75833,75835,75837],{"class":74,"line":2156},[72,75811,74171],{"class":82},[72,75813,58665],{"class":358},[72,75815,564],{"class":82},[72,75817,1138],{"class":366},[72,75819,1520],{"class":78},[72,75821,75656],{"class":48395},[72,75823,75824],{"class":78},"*$",[72,75826,1138],{"class":366},[72,75828,1112],{"class":82},[72,75830,75663],{"class":358},[72,75832,564],{"class":82},[72,75834,75697],{"class":366},[72,75836,75671],{"class":82},[72,75838,75674],{"class":621},[72,75840,75841,75843,75845,75847,75849,75851,75853,75855,75857,75859,75861,75863,75866,75868],{"class":74,"line":2161},[72,75842,74171],{"class":82},[72,75844,58665],{"class":358},[72,75846,564],{"class":82},[72,75848,1138],{"class":366},[72,75850,1520],{"class":78},[72,75852,75656],{"class":48395},[72,75854,75824],{"class":78},[72,75856,1138],{"class":366},[72,75858,1112],{"class":82},[72,75860,75663],{"class":358},[72,75862,564],{"class":82},[72,75864,75865],{"class":366},"'二哈好傻'",[72,75867,75671],{"class":82},[72,75869,75870],{"class":621},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[72,75872,75873,75875,75877,75879,75881,75883,75885,75887,75889,75891,75893,75895,75898,75900],{"class":74,"line":2178},[72,75874,74171],{"class":82},[72,75876,58665],{"class":358},[72,75878,564],{"class":82},[72,75880,1138],{"class":366},[72,75882,1520],{"class":78},[72,75884,75656],{"class":48395},[72,75886,75824],{"class":78},[72,75888,1138],{"class":366},[72,75890,1112],{"class":82},[72,75892,75663],{"class":358},[72,75894,564],{"class":82},[72,75896,75897],{"class":366},"'哈好哈'",[72,75899,75727],{"class":82},[72,75901,75902],{"class":621},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[72,75904,75905],{"class":74,"line":2183},[72,75906,2828],{"emptyLinePlaceholder":490},[72,75908,75909],{"class":74,"line":2188},[72,75910,75911],{"class":621},"    \u002F\u002F +类似于>=1\n",[72,75913,75914,75916,75918,75920,75922,75924,75926,75929,75931,75933,75935,75937,75939,75941],{"class":74,"line":2193},[72,75915,74171],{"class":82},[72,75917,58665],{"class":358},[72,75919,564],{"class":82},[72,75921,1138],{"class":366},[72,75923,1520],{"class":78},[72,75925,75656],{"class":48395},[72,75927,75928],{"class":78},"+$",[72,75930,1138],{"class":366},[72,75932,1112],{"class":82},[72,75934,75663],{"class":358},[72,75936,564],{"class":82},[72,75938,75697],{"class":366},[72,75940,75671],{"class":82},[72,75942,75674],{"class":621},[72,75944,75945,75947,75949,75951,75953,75955,75957,75959,75961,75963,75965,75967,75969,75971],{"class":74,"line":2207},[72,75946,74171],{"class":82},[72,75948,58665],{"class":358},[72,75950,564],{"class":82},[72,75952,1138],{"class":366},[72,75954,1520],{"class":78},[72,75956,75656],{"class":48395},[72,75958,75928],{"class":78},[72,75960,1138],{"class":366},[72,75962,1112],{"class":82},[72,75964,75663],{"class":358},[72,75966,564],{"class":82},[72,75968,75865],{"class":366},[72,75970,75671],{"class":82},[72,75972,75870],{"class":621},[72,75974,75975,75977,75979,75981,75983,75985,75987,75989,75991,75993,75995,75997,75999,76001],{"class":74,"line":2212},[72,75976,74171],{"class":82},[72,75978,58665],{"class":358},[72,75980,564],{"class":82},[72,75982,1138],{"class":366},[72,75984,1520],{"class":78},[72,75986,75656],{"class":48395},[72,75988,75928],{"class":78},[72,75990,1138],{"class":366},[72,75992,1112],{"class":82},[72,75994,75663],{"class":358},[72,75996,564],{"class":82},[72,75998,75897],{"class":366},[72,76000,75727],{"class":82},[72,76002,75797],{"class":621},[72,76004,76005],{"class":74,"line":3005},[72,76006,2828],{"emptyLinePlaceholder":490},[72,76008,76009],{"class":74,"line":3019},[72,76010,76011],{"class":621},"    \u002F\u002F ?类似于0次或一次\n",[72,76013,76014,76016,76018,76020,76022,76024,76027,76029,76031,76033,76035,76037,76039,76041],{"class":74,"line":3027},[72,76015,74171],{"class":82},[72,76017,58665],{"class":358},[72,76019,564],{"class":82},[72,76021,1138],{"class":366},[72,76023,1520],{"class":78},[72,76025,76026],{"class":48395},"哈？",[72,76028,856],{"class":78},[72,76030,1138],{"class":366},[72,76032,1112],{"class":82},[72,76034,75663],{"class":358},[72,76036,564],{"class":82},[72,76038,74646],{"class":366},[72,76040,75727],{"class":82},[72,76042,75674],{"class":621},[72,76044,76045,76047,76049,76051,76053,76055,76057,76060,76062,76064,76066,76068,76070,76072],{"class":74,"line":3032},[72,76046,74171],{"class":82},[72,76048,58665],{"class":358},[72,76050,564],{"class":82},[72,76052,1138],{"class":366},[72,76054,1520],{"class":78},[72,76056,75656],{"class":48395},[72,76058,76059],{"class":78},"?$",[72,76061,1138],{"class":366},[72,76063,1112],{"class":82},[72,76065,75663],{"class":358},[72,76067,564],{"class":82},[72,76069,75697],{"class":366},[72,76071,75671],{"class":82},[72,76073,75797],{"class":621},[72,76075,76076,76078,76080,76082,76084,76086,76088,76090,76092,76094,76096,76098,76100,76102],{"class":74,"line":3038},[72,76077,74171],{"class":82},[72,76079,58665],{"class":358},[72,76081,564],{"class":82},[72,76083,1138],{"class":366},[72,76085,1520],{"class":78},[72,76087,75656],{"class":48395},[72,76089,76059],{"class":78},[72,76091,1138],{"class":366},[72,76093,1112],{"class":82},[72,76095,75663],{"class":358},[72,76097,564],{"class":82},[72,76099,75865],{"class":366},[72,76101,75671],{"class":82},[72,76103,75870],{"class":621},[72,76105,76106,76108,76110,76112,76114,76116,76118,76120,76122,76124,76126,76128,76130,76132],{"class":74,"line":3044},[72,76107,74171],{"class":82},[72,76109,58665],{"class":358},[72,76111,564],{"class":82},[72,76113,1138],{"class":366},[72,76115,1520],{"class":78},[72,76117,75656],{"class":48395},[72,76119,76059],{"class":78},[72,76121,1138],{"class":366},[72,76123,1112],{"class":82},[72,76125,75663],{"class":358},[72,76127,564],{"class":82},[72,76129,75897],{"class":366},[72,76131,75671],{"class":82},[72,76133,75797],{"class":621},[72,76135,76136],{"class":74,"line":3049},[72,76137,2828],{"emptyLinePlaceholder":490},[72,76139,76140],{"class":74,"line":8374},[72,76141,76142],{"class":621},"    \u002F\u002F {n}写几，就必须出现几次\n",[72,76144,76145,76147,76149,76151,76153,76155,76157,76160,76162,76164,76166,76168,76171,76174],{"class":74,"line":8398},[72,76146,74171],{"class":82},[72,76148,58665],{"class":358},[72,76150,564],{"class":82},[72,76152,1138],{"class":366},[72,76154,1520],{"class":78},[72,76156,75656],{"class":48395},[72,76158,76159],{"class":78},"{4}$",[72,76161,1138],{"class":366},[72,76163,1112],{"class":82},[72,76165,75663],{"class":358},[72,76167,564],{"class":82},[72,76169,76170],{"class":366},"'哈哈哈哈'",[72,76172,76173],{"class":82},")) ",[72,76175,75674],{"class":621},[72,76177,76178],{"class":74,"line":8403},[72,76179,2828],{"emptyLinePlaceholder":490},[72,76181,76182],{"class":74,"line":8409},[72,76183,76184],{"class":621},"    \u002F\u002F {n,}大于等于n次\n",[72,76186,76187,76189,76191,76193,76195,76197,76199,76202,76204,76206,76208,76210,76212,76214],{"class":74,"line":8436},[72,76188,74171],{"class":82},[72,76190,58665],{"class":358},[72,76192,564],{"class":82},[72,76194,1138],{"class":366},[72,76196,1520],{"class":78},[72,76198,75656],{"class":48395},[72,76200,76201],{"class":78},"{4,}$",[72,76203,1138],{"class":366},[72,76205,1112],{"class":82},[72,76207,75663],{"class":358},[72,76209,564],{"class":82},[72,76211,76170],{"class":366},[72,76213,76173],{"class":82},[72,76215,75674],{"class":621},[72,76217,76218,76220,76222,76224,76226,76228,76230,76232,76234,76236,76238,76240,76243,76245],{"class":74,"line":8441},[72,76219,74171],{"class":82},[72,76221,58665],{"class":358},[72,76223,564],{"class":82},[72,76225,1138],{"class":366},[72,76227,1520],{"class":78},[72,76229,75656],{"class":48395},[72,76231,76201],{"class":78},[72,76233,1138],{"class":366},[72,76235,1112],{"class":82},[72,76237,75663],{"class":358},[72,76239,564],{"class":82},[72,76241,76242],{"class":366},"'哈哈哈哈哈'",[72,76244,76173],{"class":82},[72,76246,75674],{"class":621},[72,76248,76249],{"class":74,"line":8447},[72,76250,2828],{"emptyLinePlaceholder":490},[72,76252,76253],{"class":74,"line":8459},[72,76254,76255],{"class":621},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[72,76257,76258,76260,76262,76264,76266,76268,76270,76273,76275,76277,76279,76281,76283,76285],{"class":74,"line":8471},[72,76259,74171],{"class":82},[72,76261,58665],{"class":358},[72,76263,564],{"class":82},[72,76265,1138],{"class":366},[72,76267,1520],{"class":78},[72,76269,75656],{"class":48395},[72,76271,76272],{"class":78},"{4,6}$",[72,76274,1138],{"class":366},[72,76276,1112],{"class":82},[72,76278,75663],{"class":358},[72,76280,564],{"class":82},[72,76282,76170],{"class":366},[72,76284,76173],{"class":82},[72,76286,75674],{"class":621},[72,76288,76289,76291,76293,76295,76297,76299,76301,76303,76305,76307,76309,76311,76313,76315],{"class":74,"line":8483},[72,76290,74171],{"class":82},[72,76292,58665],{"class":358},[72,76294,564],{"class":82},[72,76296,1138],{"class":366},[72,76298,1520],{"class":78},[72,76300,75656],{"class":48395},[72,76302,76272],{"class":78},[72,76304,1138],{"class":366},[72,76306,1112],{"class":82},[72,76308,75663],{"class":358},[72,76310,564],{"class":82},[72,76312,76242],{"class":366},[72,76314,76173],{"class":82},[72,76316,75674],{"class":621},[72,76318,76319,76321,76323,76325,76327,76329,76331,76333,76335,76337,76339,76341,76344,76346],{"class":74,"line":10142},[72,76320,74171],{"class":82},[72,76322,58665],{"class":358},[72,76324,564],{"class":82},[72,76326,1138],{"class":366},[72,76328,1520],{"class":78},[72,76330,75656],{"class":48395},[72,76332,76272],{"class":78},[72,76334,1138],{"class":366},[72,76336,1112],{"class":82},[72,76338,75663],{"class":358},[72,76340,564],{"class":82},[72,76342,76343],{"class":366},"'哈哈哈哈哈哈哈'",[72,76345,76173],{"class":82},[72,76347,75797],{"class":621},[72,76349,76350],{"class":74,"line":10167},[72,76351,2828],{"emptyLinePlaceholder":490},[72,76353,76354],{"class":74,"line":10190},[72,76355,76356],{"class":621},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[72,76358,76359,76361,76363,76365,76367,76369,76372,76374,76376,76378,76380,76382,76385,76387],{"class":74,"line":10214},[72,76360,74171],{"class":82},[72,76362,58665],{"class":358},[72,76364,564],{"class":82},[72,76366,1138],{"class":366},[72,76368,1520],{"class":78},[72,76370,76371],{"class":362},"[abc]",[72,76373,856],{"class":78},[72,76375,1138],{"class":366},[72,76377,1112],{"class":82},[72,76379,75663],{"class":358},[72,76381,564],{"class":82},[72,76383,76384],{"class":366},"'a'",[72,76386,75671],{"class":82},[72,76388,75674],{"class":621},[72,76390,76391,76393,76395,76397,76399,76401,76403,76405,76407,76409,76411,76413,76416,76418],{"class":74,"line":10219},[72,76392,74171],{"class":82},[72,76394,58665],{"class":358},[72,76396,564],{"class":82},[72,76398,1138],{"class":366},[72,76400,1520],{"class":78},[72,76402,76371],{"class":362},[72,76404,856],{"class":78},[72,76406,1138],{"class":366},[72,76408,1112],{"class":82},[72,76410,75663],{"class":358},[72,76412,564],{"class":82},[72,76414,76415],{"class":366},"'b'",[72,76417,75671],{"class":82},[72,76419,75674],{"class":621},[72,76421,76422,76424,76426,76428,76430,76432,76434,76436,76438,76440,76442,76444,76447,76449],{"class":74,"line":10224},[72,76423,74171],{"class":82},[72,76425,58665],{"class":358},[72,76427,564],{"class":82},[72,76429,1138],{"class":366},[72,76431,1520],{"class":78},[72,76433,76371],{"class":362},[72,76435,856],{"class":78},[72,76437,1138],{"class":366},[72,76439,1112],{"class":82},[72,76441,75663],{"class":358},[72,76443,564],{"class":82},[72,76445,76446],{"class":366},"'c'",[72,76448,75671],{"class":82},[72,76450,75674],{"class":621},[72,76452,76453,76455,76457,76459,76461,76463,76465,76467,76469,76471,76474,76476],{"class":74,"line":10229},[72,76454,74171],{"class":82},[72,76456,58665],{"class":358},[72,76458,564],{"class":82},[72,76460,1138],{"class":366},[72,76462,76371],{"class":362},[72,76464,1138],{"class":366},[72,76466,1112],{"class":82},[72,76468,75663],{"class":358},[72,76470,564],{"class":82},[72,76472,76473],{"class":366},"'ab'",[72,76475,75671],{"class":82},[72,76477,75674],{"class":621},[72,76479,76480,76482,76484,76486,76488,76490,76492,76494,76496,76498,76500,76502,76504,76506],{"class":74,"line":10238},[72,76481,74171],{"class":82},[72,76483,58665],{"class":358},[72,76485,564],{"class":82},[72,76487,1138],{"class":366},[72,76489,1520],{"class":78},[72,76491,76371],{"class":362},[72,76493,856],{"class":78},[72,76495,1138],{"class":366},[72,76497,1112],{"class":82},[72,76499,75663],{"class":358},[72,76501,564],{"class":82},[72,76503,76473],{"class":366},[72,76505,75671],{"class":82},[72,76507,76508],{"class":621},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[72,76510,76511,76513,76515,76517,76519,76521,76523,76526,76528,76530,76532,76534,76536,76538],{"class":74,"line":10243},[72,76512,74171],{"class":82},[72,76514,58665],{"class":358},[72,76516,564],{"class":82},[72,76518,1138],{"class":366},[72,76520,1520],{"class":78},[72,76522,76371],{"class":362},[72,76524,76525],{"class":78},"{2}$",[72,76527,1138],{"class":366},[72,76529,1112],{"class":82},[72,76531,75663],{"class":358},[72,76533,564],{"class":82},[72,76535,76473],{"class":366},[72,76537,75671],{"class":82},[72,76539,76540],{"class":621},"\u002F\u002Ftrue   可以选两个\n",[72,76542,76543,76545,76547,76549,76551,76553,76556,76558,76560,76562,76564,76566,76569,76571],{"class":74,"line":10249},[72,76544,74171],{"class":82},[72,76546,58665],{"class":358},[72,76548,564],{"class":82},[72,76550,1138],{"class":366},[72,76552,1520],{"class":78},[72,76554,76555],{"class":362},"[a-z]",[72,76557,856],{"class":78},[72,76559,1138],{"class":366},[72,76561,1112],{"class":82},[72,76563,75663],{"class":358},[72,76565,564],{"class":82},[72,76567,76568],{"class":366},"'p'",[72,76570,75727],{"class":82},[72,76572,76573],{"class":621},"\u002F\u002Ftrue   依然只能选一个\n",[72,76575,76576,76578,76580,76582,76584,76586,76589,76591,76593,76595,76597,76599,76601,76603],{"class":74,"line":10270},[72,76577,74171],{"class":82},[72,76579,58665],{"class":358},[72,76581,564],{"class":82},[72,76583,1138],{"class":366},[72,76585,1520],{"class":78},[72,76587,76588],{"class":362},"[A-Z]",[72,76590,856],{"class":78},[72,76592,1138],{"class":366},[72,76594,1112],{"class":82},[72,76596,75663],{"class":358},[72,76598,564],{"class":82},[72,76600,76568],{"class":366},[72,76602,75727],{"class":82},[72,76604,75797],{"class":621},[72,76606,76607,76609,76611,76613,76615,76617,76619,76621,76623,76625,76627,76629,76632,76634],{"class":74,"line":10276},[72,76608,74171],{"class":82},[72,76610,58665],{"class":358},[72,76612,564],{"class":82},[72,76614,1138],{"class":366},[72,76616,1520],{"class":78},[72,76618,76588],{"class":362},[72,76620,856],{"class":78},[72,76622,1138],{"class":366},[72,76624,1112],{"class":82},[72,76626,75663],{"class":358},[72,76628,564],{"class":82},[72,76630,76631],{"class":366},"'P'",[72,76633,75727],{"class":82},[72,76635,75674],{"class":621},[72,76637,76638,76640,76642,76644,76646,76648,76651,76653,76655,76657,76659,76661,76664,76666],{"class":74,"line":10290},[72,76639,74171],{"class":82},[72,76641,58665],{"class":358},[72,76643,564],{"class":82},[72,76645,1138],{"class":366},[72,76647,1520],{"class":78},[72,76649,76650],{"class":362},"[0-9]",[72,76652,856],{"class":78},[72,76654,1138],{"class":366},[72,76656,1112],{"class":82},[72,76658,75663],{"class":358},[72,76660,564],{"class":82},[72,76662,76663],{"class":366},"'0'",[72,76665,75727],{"class":82},[72,76667,75674],{"class":621},[72,76669,76670,76672,76674,76676,76678,76680,76683,76685,76687,76689,76691,76693,76695,76697],{"class":74,"line":10296},[72,76671,74171],{"class":82},[72,76673,58665],{"class":358},[72,76675,564],{"class":82},[72,76677,1138],{"class":366},[72,76679,1520],{"class":78},[72,76681,76682],{"class":362},"[a-zA-Z0-9]",[72,76684,856],{"class":78},[72,76686,1138],{"class":366},[72,76688,1112],{"class":82},[72,76690,75663],{"class":358},[72,76692,564],{"class":82},[72,76694,76568],{"class":366},[72,76696,75671],{"class":82},[72,76698,75674],{"class":621},[72,76700,76701,76703,76705],{"class":74,"line":10323},[72,76702,52835],{"class":82},[72,76704,52231],{"class":51718},[72,76706,51725],{"class":82},[72,76708,76709,76711,76713],{"class":74,"line":10332},[72,76710,52203],{"class":82},[72,76712,52218],{"class":51718},[72,76714,51725],{"class":82},[72,76716,76717],{"class":74,"line":10338},[72,76718,2828],{"emptyLinePlaceholder":490},[72,76720,76721,76723,76725],{"class":74,"line":10346},[72,76722,52203],{"class":82},[72,76724,51053],{"class":51718},[72,76726,51725],{"class":82},[22423,76728,76730],{"id":76729},"_3624-修饰符","3.6.2.4 修饰符",[15,76732,76733],{},[1891,76734],{"alt":68,"src":76735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[15,76737,76738],{},"replace是个方法，使用的时候一定不要忘记括号()",[15,76740,76741],{},[1891,76742],{"alt":68,"src":76743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[63,76745,76747],{"className":51051,"code":76746,"language":51053,"meta":68,"style":68},"\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",[34,76748,76749,76759,76773,76781,76795,76815,76827,76835,76843,76851,76883,76914,76919,76951,76962,76995,77004,77012,77020],{"__ignoreMap":68},[72,76750,76751,76753,76755,76757],{"class":74,"line":75},[72,76752,51715],{"class":82},[72,76754,51719],{"class":51718},[72,76756,51722],{"class":358},[72,76758,51725],{"class":82},[72,76760,76761,76763,76765,76767,76769,76771],{"class":74,"line":370},[72,76762,1464],{"class":82},[72,76764,51053],{"class":51718},[72,76766,51734],{"class":358},[72,76768,609],{"class":82},[72,76770,51739],{"class":366},[72,76772,51725],{"class":82},[72,76774,76775,76777,76779],{"class":74,"line":1608},[72,76776,1464],{"class":82},[72,76778,51752],{"class":51718},[72,76780,51725],{"class":82},[72,76782,76783,76785,76787,76789,76791,76793],{"class":74,"line":1623},[72,76784,52562],{"class":82},[72,76786,51762],{"class":51718},[72,76788,51765],{"class":358},[72,76790,609],{"class":82},[72,76792,51770],{"class":366},[72,76794,51725],{"class":82},[72,76796,76797,76799,76801,76803,76805,76807,76809,76811,76813],{"class":74,"line":1629},[72,76798,52562],{"class":82},[72,76800,51762],{"class":51718},[72,76802,15346],{"class":358},[72,76804,609],{"class":82},[72,76806,51809],{"class":366},[72,76808,51789],{"class":358},[72,76810,609],{"class":82},[72,76812,51816],{"class":366},[72,76814,51725],{"class":82},[72,76816,76817,76819,76821,76823,76825],{"class":74,"line":1643},[72,76818,52562],{"class":82},[72,76820,51825],{"class":51718},[72,76822,51828],{"class":82},[72,76824,51825],{"class":51718},[72,76826,51725],{"class":82},[72,76828,76829,76831,76833],{"class":74,"line":1649},[72,76830,52203],{"class":82},[72,76832,51752],{"class":51718},[72,76834,51725],{"class":82},[72,76836,76837,76839,76841],{"class":74,"line":1740},[72,76838,1464],{"class":82},[72,76840,52218],{"class":51718},[72,76842,51725],{"class":82},[72,76844,76845,76847,76849],{"class":74,"line":1746},[72,76846,52562],{"class":82},[72,76848,52231],{"class":51718},[72,76850,51725],{"class":82},[72,76852,76853,76855,76857,76859,76861,76863,76866,76868,76870,76872,76874,76876,76879,76881],{"class":74,"line":1758},[72,76854,74171],{"class":82},[72,76856,58665],{"class":358},[72,76858,564],{"class":82},[72,76860,1138],{"class":366},[72,76862,1520],{"class":78},[72,76864,76865],{"class":48395},"java",[72,76867,856],{"class":78},[72,76869,1138],{"class":366},[72,76871,1112],{"class":82},[72,76873,75663],{"class":358},[72,76875,564],{"class":82},[72,76877,76878],{"class":366},"'java'",[72,76880,76173],{"class":82},[72,76882,75674],{"class":621},[72,76884,76885,76887,76889,76891,76893,76895,76897,76899,76901,76903,76905,76907,76910,76912],{"class":74,"line":2041},[72,76886,74171],{"class":82},[72,76888,58665],{"class":358},[72,76890,564],{"class":82},[72,76892,1138],{"class":366},[72,76894,1520],{"class":78},[72,76896,76865],{"class":48395},[72,76898,856],{"class":78},[72,76900,1138],{"class":366},[72,76902,1112],{"class":82},[72,76904,75663],{"class":358},[72,76906,564],{"class":82},[72,76908,76909],{"class":366},"'Java'",[72,76911,76173],{"class":82},[72,76913,75797],{"class":621},[72,76915,76916],{"class":74,"line":2046},[72,76917,76918],{"class":621},"    \u002F\u002F 不区分大小写、\n",[72,76920,76921,76923,76925,76927,76929,76931,76933,76935,76937,76939,76941,76943,76945,76947,76949],{"class":74,"line":2052},[72,76922,74171],{"class":82},[72,76924,58665],{"class":358},[72,76926,564],{"class":82},[72,76928,1138],{"class":366},[72,76930,1520],{"class":78},[72,76932,76865],{"class":48395},[72,76934,856],{"class":78},[72,76936,1138],{"class":366},[72,76938,995],{"class":78},[72,76940,1112],{"class":82},[72,76942,75663],{"class":358},[72,76944,564],{"class":82},[72,76946,76909],{"class":366},[72,76948,76173],{"class":82},[72,76950,75674],{"class":621},[72,76952,76953,76955,76957,76959],{"class":74,"line":2057},[72,76954,11647],{"class":78},[72,76956,74337],{"class":362},[72,76958,13990],{"class":78},[72,76960,76961],{"class":366}," 'java是一门编程语言，学完java工资很高'\n",[72,76963,76964,76966,76969,76971,76974,76977,76979,76981,76983,76985,76988,76990,76993],{"class":74,"line":2071},[72,76965,11647],{"class":78},[72,76967,76968],{"class":362}," result",[72,76970,13990],{"class":78},[72,76972,76973],{"class":82}," str.",[72,76975,76976],{"class":358},"replace",[72,76978,564],{"class":82},[72,76980,1138],{"class":366},[72,76982,76865],{"class":48395},[72,76984,1138],{"class":366},[72,76986,76987],{"class":78},"ig",[72,76989,12861],{"class":82},[72,76991,76992],{"class":366},"'前端'",[72,76994,570],{"class":82},[72,76996,76997,76999,77001],{"class":74,"line":2076},[72,76998,74171],{"class":82},[72,77000,58665],{"class":358},[72,77002,77003],{"class":82},"(result)\n",[72,77005,77006,77008,77010],{"class":74,"line":2082},[72,77007,52835],{"class":82},[72,77009,52231],{"class":51718},[72,77011,51725],{"class":82},[72,77013,77014,77016,77018],{"class":74,"line":2103},[72,77015,52203],{"class":82},[72,77017,52218],{"class":51718},[72,77019,51725],{"class":82},[72,77021,77022,77024,77026],{"class":74,"line":2108},[72,77023,52203],{"class":82},[72,77025,51053],{"class":51718},[72,77027,51725],{"class":82},[473,77029,77030],{},"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":68,"searchDepth":370,"depth":370,"links":77032},[77033,77043,77055,77072,77079,77087],{"id":53778,"depth":370,"text":53779,"children":77034},[77035,77036,77037,77038,77039,77040,77041,77042],{"id":53782,"depth":1608,"text":53783},{"id":53815,"depth":1608,"text":53816},{"id":53854,"depth":1608,"text":53855},{"id":54012,"depth":1608,"text":54013},{"id":54060,"depth":1608,"text":54061},{"id":54197,"depth":1608,"text":54198},{"id":54519,"depth":1608,"text":54520},{"id":57507,"depth":1608,"text":57508},{"id":57535,"depth":370,"text":57536,"children":77044},[77045,77046,77047,77048,77049,77050,77051,77052,77053,77054],{"id":57539,"depth":1608,"text":57540},{"id":57562,"depth":1608,"text":57563},{"id":58477,"depth":1608,"text":58478},{"id":59167,"depth":1608,"text":59168},{"id":59449,"depth":1608,"text":59450},{"id":63610,"depth":1608,"text":63611},{"id":63780,"depth":1608,"text":63781},{"id":63908,"depth":1608,"text":63909},{"id":63933,"depth":1608,"text":63934},{"id":65322,"depth":1608,"text":65323},{"id":66475,"depth":370,"text":66476,"children":77056},[77057,77058,77059,77060,77061,77062,77063,77064,77065,77066,77067,77068,77069,77070,77071],{"id":66479,"depth":1608,"text":66480},{"id":67133,"depth":1608,"text":67134},{"id":68828,"depth":1608,"text":68829},{"id":68869,"depth":1608,"text":68870},{"id":68911,"depth":1608,"text":68912},{"id":68925,"depth":1608,"text":68926},{"id":68974,"depth":1608,"text":68975},{"id":68986,"depth":1608,"text":68987},{"id":69001,"depth":1608,"text":69002},{"id":69037,"depth":1608,"text":69038},{"id":69118,"depth":1608,"text":69119},{"id":69246,"depth":1608,"text":69247},{"id":69258,"depth":1608,"text":69259},{"id":69277,"depth":1608,"text":69278},{"id":71388,"depth":1608,"text":71389},{"id":71407,"depth":370,"text":71408,"children":77073},[77074,77075,77076,77077,77078],{"id":71428,"depth":1608,"text":71429},{"id":71448,"depth":1608,"text":71449},{"id":71497,"depth":1608,"text":71498},{"id":71622,"depth":1608,"text":71623},{"id":71803,"depth":1608,"text":71804},{"id":71821,"depth":370,"text":71822,"children":77080},[77081,77082,77083,77084,77085,77086],{"id":71836,"depth":1608,"text":71837},{"id":71895,"depth":1608,"text":71896},{"id":71919,"depth":1608,"text":71920},{"id":72239,"depth":1608,"text":72240},{"id":72271,"depth":1608,"text":72272},{"id":72294,"depth":1608,"text":72295},{"id":75362,"depth":370,"text":75363,"children":77088},[77089,77090],{"id":75396,"depth":1608,"text":75397},{"id":75435,"depth":1608,"text":75436},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53750,"description":23802},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":77097,"title":77098,"body":77099,"description":23802,"extension":487,"meta":93235,"navigation":490,"path":93236,"seo":93237,"stem":93238,"__hash__":93239},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":77100,"toc":93171},[77101,77104,77107,77111,77115,77120,77125,77136,77140,77145,77148,77152,77155,77160,77164,77168,77171,77176,77179,77183,77186,77194,77197,77201,77206,77211,77214,77218,77223,77228,77231,77235,77240,77243,77248,77251,77256,77259,77264,77269,77272,77275,77279,77284,77289,77292,77296,77300,77303,77306,77309,77313,77317,77322,77327,77330,77334,77339,77344,77347,77350,77353,77356,77359,77362,77365,77368,77371,77376,77380,77385,77390,77393,77396,77399,77402,77405,77408,77411,77414,77418,77422,77425,77428,77431,77436,77438,77441,77444,77447,77450,77453,77456,77459,77462,77465,77468,77471,77474,77477,77482,77487,77492,77495,77499,77502,77507,77511,77513,77524,77529,77630,77633,77636,77639,77642,77645,77648,77651,77654,77656,77659,77662,77665,77668,77671,77673,77676,77679,77682,77685,77688,77691,77693,77696,77698,77700,77703,77707,77711,77714,77717,77720,77723,77726,77729,77732,77735,77738,77743,77863,77866,77869,77874,77877,77880,77883,77886,77891,77894,77897,77900,77903,77908,77911,78011,78076,78150,78154,78157,78160,78164,78167,78181,78210,78213,78216,78219,78222,78225,78228,78231,78233,78236,78239,78242,78245,78249,78254,78258,78263,78338,78341,78524,78527,78530,78533,78536,78539,78541,78544,78547,78550,78553,78556,78559,78561,78565,78568,78573,78576,78579,78582,78585,78587,78592,78595,78598,78601,78604,78606,78611,78614,78617,78619,78621,78624,78628,78631,78634,78639,78642,78645,78648,78698,78703,78707,78712,78715,78784,78787,78796,78800,78805,78808,78811,78819,78822,78839,80641,80645,80649,80654,80657,80661,80667,80673,80825,80830,80835,80838,80841,80844,80847,80850,80853,80856,80859,80862,80865,80868,80871,80876,80880,80883,80894,80898,80903,80906,80909,80912,80915,80918,80920,80923,80926,80929,80932,80934,80951,80954,80958,80961,80966,80971,80974,80977,80981,80984,80987,80996,80999,81003,81006,81011,81016,81083,81087,81090,81093,81098,81103,81189,81194,81198,81201,81204,81219,81222,81227,81231,81236,81345,81348,81359,81509,81513,81518,81627,81631,81636,81641,81646,81649,81656,81676,81712,81876,81881,81884,81889,81896,81899,81902,81905,81964,82020,82076,82080,82085,82400,82403,82407,82410,82415,82524,82529,82533,82538,82542,82613,82617,82619,82622,82625,82663,82939,82943,82959,83025,83059,83063,83066,83071,83100,83107,83116,83121,83136,83141,83150,83153,83290,83294,83356,83360,83365,83610,83614,83619,83622,83625,83628,83631,83635,83640,85221,85225,85229,85235,85238,85243,85247,85250,85255,85258,85269,85273,85278,85282,85287,85292,85295,85300,85304,85308,85311,85316,85321,85324,85327,85330,85452,85457,85559,85562,85565,85569,85574,85746,85751,85755,85758,85763,85829,85834,85837,85968,85971,85976,85979,85982,86073,86078,86081,86084,86087,86090,86095,86100,86103,86108,86113,86118,86122,86125,86128,86133,86138,86143,86148,86202,86205,86208,86213,86216,86219,86224,86229,86234,86238,86243,86257,86262,86265,86270,86274,86279,86284,86289,86294,86299,86304,86309,86314,86317,86321,86326,86329,86332,86335,86340,86345,86348,86351,86355,86358,86361,86366,86371,86376,86381,86384,86389,86394,86455,86460,86463,86468,87709,87714,87718,87722,87727,87730,87735,87740,87743,87748,87750,87755,87759,87762,87765,87776,87780,87785,87790,87845,87850,87855,87860,88071,88076,88080,88085,88088,88090,88093,88096,88543,88548,88555,88561,88564,88567,88831,88836,88840,89105,89110,89114,89119,89124,89129,89134,89465,89468,89473,89478,89481,89485,89489,89494,89499,89504,89509,89514,89519,89523,89526,89531,89536,89539,89613,89618,89623,89628,89630,89633,90003,90008,90013,90018,90021,90024,90126,90131,90136,90239,90243,90248,90252,90256,90261,90266,90269,90274,90277,90280,90673,90678,90681,90684,90687,90690,91210,91214,91219,91224,91229,91232,91237,91240,91243,91625,91630,91632,91634,91637,91640,92152,92156,92217,92220,92223,92226,92230,92233,92238,92243,93168],[10,77102,77098],{"id":77103},"_4js进阶",[15,77105,77106],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[85,77108,77110],{"id":77109},"_41-作用域","4.1 作用域",[531,77112,77114],{"id":77113},"_411-局部作用域","4.1.1 局部作用域",[15,77116,77117],{},[1891,77118],{"alt":68,"src":77119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[15,77121,77122],{},[1891,77123],{"alt":68,"src":77124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[251,77126,77127,77130,77133],{},[25,77128,77129],{},"函数作用域在函数内部",[25,77131,77132],{},"块级作用域在{}",[25,77134,77135],{},"对象的那个{}不是作用域，不是块作用域",[531,77137,77139],{"id":77138},"_412-全局作用域","4.1.2 全局作用域",[15,77141,77142],{},[1891,77143],{"alt":68,"src":77144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[15,77146,77147],{},"window.a=10不要这样写",[531,77149,77151],{"id":77150},"_413-作用域链","4.1.3 作用域链",[15,77153,77154],{},"变量查找机制",[15,77156,77157],{},[1891,77158],{"alt":68,"src":77159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[85,77161,77163],{"id":77162},"_42-垃圾回收机制","4.2 垃圾回收机制",[531,77165,77167],{"id":77166},"_421-大体介绍","4.2.1 大体介绍",[15,77169,77170],{},"垃圾回收机制(Garbage Collection) 简称 GC",[15,77172,77173],{},[1891,77174],{"alt":68,"src":77175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[15,77177,77178],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[531,77180,77182],{"id":77181},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[15,77184,77185],{},"堆栈空间分配区别：",[22,77187,77188,77191],{},[25,77189,77190],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[25,77192,77193],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[15,77195,77196],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[22423,77198,77200],{"id":77199},"_4221-引用计数","4.2.2.1 引用计数",[15,77202,77203],{},[1891,77204],{"alt":68,"src":77205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[15,77207,77208],{},[1891,77209],{"alt":68,"src":77210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[15,77212,77213],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[22423,77215,77217],{"id":77216},"_4222-标记清除法","4.2.2.2 标记清除法",[15,77219,77220],{},[1891,77221],{"alt":68,"src":77222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[15,77224,77225],{},[1891,77226],{"alt":68,"src":77227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[15,77229,77230],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[85,77232,77234],{"id":77233},"_43-闭包","4.3 闭包",[15,77236,77237],{},[1891,77238],{"alt":68,"src":77239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[15,77241,77242],{},"闭包：内层函数+外层函数的变量",[15,77244,77245],{},[1891,77246],{"alt":68,"src":77247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[15,77249,77250],{},"closure就是闭包",[15,77252,77253],{},[1891,77254],{"alt":68,"src":77255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[15,77257,77258],{},"内层函数必须包含外层函数的变量才是闭包",[15,77260,77261],{},[1891,77262],{"alt":68,"src":77263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[15,77265,77266],{},[1891,77267],{"alt":68,"src":77268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[15,77270,77271],{},"闭包可能会引起内存泄漏",[15,77273,77274],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[85,77276,77278],{"id":77277},"_44-变量提升","4.4 变量提升",[15,77280,77281],{},[1891,77282],{"alt":68,"src":77283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[15,77285,77286],{},[1891,77287],{"alt":68,"src":77288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[15,77290,77291],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[85,77293,77295],{"id":77294},"_45-函数进阶","4.5 函数进阶",[531,77297,77299],{"id":77298},"_451-函数提升","4.5.1 函数提升",[15,77301,77302],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[15,77304,77305],{},"只提升函数声明，不提升函数调用",[52231,77307,77308],{},"\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",[531,77310,77312],{"id":77311},"_452-函数参数","4.5.2 函数参数",[22423,77314,77316],{"id":77315},"_4521-动态参数","4.5.2.1 动态参数",[15,77318,77319],{},[1891,77320],{"alt":68,"src":77321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[15,77323,77324],{},[1891,77325],{"alt":68,"src":77326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[15,77328,77329],{},"箭头函数里边没有arguments",[22423,77331,77333],{"id":77332},"_4522-剩余参数","4.5.2.2 剩余参数",[15,77335,77336],{},[1891,77337],{"alt":68,"src":77338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[15,77340,77341],{},[1891,77342],{"alt":68,"src":77343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[15,77345,77346],{},"剩余参数使用的时候不需要写...",[15,77348,77349],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[15,77351,77352],{},"  function getSum(a,b,...arr) {",[15,77354,77355],{},"  console.log(11)",[15,77357,77358],{},"  }",[15,77360,77361],{},"  getSum(1,2,3,4)",[15,77363,77364],{},"  将1传给a，2传给b，剩下的传给剩余参数",[15,77366,77367],{},"  getSum(1,2)",[15,77369,77370],{},"  将1传给a，2传给b，剩余参数为一个空数组",[15,77372,77373],{},[1891,77374],{"alt":68,"src":77375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[22423,77377,77379],{"id":77378},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[15,77381,77382],{},[1891,77383],{"alt":68,"src":77384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[15,77386,77387],{},[1891,77388],{"alt":68,"src":77389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[15,77391,77392],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[15,77394,77395],{},"展开运算符可以用于数组之间的合并：",[15,77397,77398],{},"const arr1 = [1, 2, 3]",[15,77400,77401],{},"const arr2 = [3, 4, 5]",[15,77403,77404],{},"const arr = [...arr1, ...arr2]",[15,77406,77407],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[15,77409,77410],{},"剩余参数：函数参数使用，得到真数组",[15,77412,77413],{},"展开运算符：数组中使用，数组展开",[531,77415,77417],{"id":77416},"_453-箭头函数","4.5.3 箭头函数",[22423,77419,77421],{"id":77420},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[15,77423,77424],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[15,77426,77427],{},"它不是万能的！！！",[15,77429,77430],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[15,77432,77433],{},[1891,77434],{"alt":68,"src":77435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[15,77437,593],{},[15,77439,77440],{},"① 只有一个形参的时候，可以省略小括号：",[15,77442,77443],{},"const fn=x=>{console.log(x)}",[15,77445,77446],{},"② 只有一行代码时可以省略大括号：",[15,77448,77449],{},"const fn=x=>console.log(11)",[15,77451,77452],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[15,77454,77455],{},"const fn=x=>x+x",[15,77457,77458],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[15,77460,77461],{},"⑤ 阻止表单默认提交：",[15,77463,77464],{},"const form = document.querySelector('form')",[15,77466,77467],{},"form.addEventListener('click', ev => ev.preventDefault())",[15,77469,77470],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[15,77472,77473],{},"const fn=uname=>({uname:uname})",[15,77475,77476],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[15,77478,77479],{},[1891,77480],{"alt":68,"src":77481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[15,77483,77484],{},[1891,77485],{"alt":68,"src":77486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[15,77488,77489],{},[1891,77490],{"alt":68,"src":77491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[15,77493,77494],{},"一定不要忘记用()，有()就理解为自带return",[22423,77496,77498],{"id":77497},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[15,77500,77501],{},"箭头函数是没有动态参数的arguments",[15,77503,77504],{},[1891,77505],{"alt":68,"src":77506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[22423,77508,77510],{"id":77509},"_4533-箭头函数this","4.5.3.3 箭头函数this",[15,77512,11758],{},[22,77514,77515,77518,77521],{},[25,77516,77517],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[25,77519,77520],{},"事件回调函数使用箭头函数时，this 为全局的 window",[25,77522,77523],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[15,77525,77526],{},[1891,77527],{"alt":68,"src":77528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[63,77530,77532],{"className":53485,"code":77531,"language":53487,"meta":68,"style":68},"  \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",[34,77533,77534,77542,77547,77552,77557,77562,77567,77571,77576,77580,77584,77589,77594,77599,77603,77607,77612,77617,77622],{"__ignoreMap":68},[72,77535,77536,77538,77540],{"class":74,"line":75},[72,77537,52562],{"class":82},[72,77539,52231],{"class":51718},[72,77541,51725],{"class":82},[72,77543,77544],{"class":74,"line":370},[72,77545,77546],{"class":82},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[72,77548,77549],{"class":74,"line":1608},[72,77550,77551],{"class":82},"    console.log(this) \u002F\u002F指向window\n",[72,77553,77554],{"class":74,"line":1623},[72,77555,77556],{"class":82},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[72,77558,77559],{"class":74,"line":1629},[72,77560,77561],{"class":82},"    function fn() {\n",[72,77563,77564],{"class":74,"line":1643},[72,77565,77566],{"class":82},"      console.log(this)  \u002F\u002F指向window\n",[72,77568,77569],{"class":74,"line":1649},[72,77570,2615],{"class":82},[72,77572,77573],{"class":74,"line":1740},[72,77574,77575],{"class":82},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[72,77577,77578],{"class":74,"line":1746},[72,77579,2828],{"emptyLinePlaceholder":490},[72,77581,77582],{"class":74,"line":1758},[72,77583,71941],{"class":82},[72,77585,77586],{"class":74,"line":2041},[72,77587,77588],{"class":82},"      name: 'andy',\n",[72,77590,77591],{"class":74,"line":2046},[72,77592,77593],{"class":82},"      sayHai: function () {\n",[72,77595,77596],{"class":74,"line":2052},[72,77597,77598],{"class":82},"        console.log(this)\n",[72,77600,77601],{"class":74,"line":2057},[72,77602,52816],{"class":82},[72,77604,77605],{"class":74,"line":2071},[72,77606,2615],{"class":82},[72,77608,77609],{"class":74,"line":2076},[72,77610,77611],{"class":82},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[72,77613,77614],{"class":74,"line":2082},[72,77615,77616],{"class":82},"    \u002F\u002F 2.箭头函数的this\n",[72,77618,77619],{"class":74,"line":2103},[72,77620,77621],{"class":82},"    const fn = () => console.log(this)\n",[72,77623,77624,77626,77628],{"class":74,"line":2108},[72,77625,52835],{"class":82},[72,77627,52231],{"class":51718},[72,77629,51725],{"class":82},[15,77631,77632],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[15,77634,77635],{},"const fn = () => console.log(this)",[15,77637,77638],{},"fn() \u002F\u002F指向window",[15,77640,77641],{},"\u002F\u002F 3.对象方法箭头函数 this",[15,77643,77644],{},"①",[15,77646,77647],{},"const obj = {",[15,77649,77650],{},"uname: 'pink老师',",[15,77652,77653],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[15,77655,1500],{},[15,77657,77658],{},"调用对象里边的函数",[15,77660,77661],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[15,77663,77664],{},"obj.sayHai()",[15,77666,77667],{},"②",[15,77669,77670],{},"const obj1 = {",[15,77672,77650],{},[15,77674,77675],{},"sayHai: function () {",[15,77677,77678],{},"let i = 10",[15,77680,77681],{},"const count = () => {",[15,77683,77684],{},"console.log(this)",[15,77686,77687],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[15,77689,77690],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[15,77692,1500],{},[15,77694,77695],{},"count()",[15,77697,1500],{},[15,77699,1500],{},[15,77701,77702],{},"obj1.sayHai()",[85,77704,77706],{"id":77705},"_46-解构赋值","4.6 解构赋值",[531,77708,77710],{"id":77709},"_461-数组解构","4.6.1 数组解构",[15,77712,77713],{},"以前要是使用数组中的值的话：",[15,77715,77716],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[15,77718,77719],{},"const arr=[100,60,80]",[15,77721,77722],{},"const max=arr[0]",[15,77724,77725],{},"const min=arr[1]",[15,77727,77728],{},"const avg=arr[2]",[15,77730,77731],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[15,77733,77734],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[15,77736,77737],{},"这个写法就类似于上边的那种用很多const的方法",[15,77739,77740],{},[1891,77741],{"alt":68,"src":77742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[63,77744,77746],{"className":51051,"code":77745,"language":51053,"meta":68,"style":68},"①变量之间交换值:\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",[34,77747,77748,77753,77758,77763,77768,77773,77777,77781,77786,77790,77795,77800,77804,77809,77814,77825,77835,77840,77845,77850,77854,77858],{"__ignoreMap":68},[72,77749,77750],{"class":74,"line":75},[72,77751,77752],{"class":82},"①变量之间交换值:\n",[72,77754,77755],{"class":74,"line":370},[72,77756,77757],{"class":82},"let a=1\n",[72,77759,77760],{"class":74,"line":1608},[72,77761,77762],{"class":82},"let b=2;\n",[72,77764,77765],{"class":74,"line":1623},[72,77766,77767],{"class":82},"必须加这行代码，不然就会报错\n",[72,77769,77770],{"class":74,"line":1629},[72,77771,77772],{"class":82},"[b,a]=[a,b]\n",[72,77774,77775],{"class":74,"line":1643},[72,77776,2828],{"emptyLinePlaceholder":490},[72,77778,77779],{"class":74,"line":1649},[72,77780,2828],{"emptyLinePlaceholder":490},[72,77782,77783],{"class":74,"line":1740},[72,77784,77785],{"class":82},"可以写成下面的方式：\n",[72,77787,77788],{"class":74,"line":1746},[72,77789,77757],{"class":82},[72,77791,77792],{"class":74,"line":1758},[72,77793,77794],{"class":82},"let b=2\n",[72,77796,77797],{"class":74,"line":2041},[72,77798,77799],{"class":82},";[b,a]=[a,b]\n",[72,77801,77802],{"class":74,"line":2046},[72,77803,2828],{"emptyLinePlaceholder":490},[72,77805,77806],{"class":74,"line":2052},[72,77807,77808],{"class":82},"②排序\n",[72,77810,77811],{"class":74,"line":2057},[72,77812,77813],{"class":82},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[72,77815,77816,77819,77822],{"class":74,"line":2071},[72,77817,77818],{"class":82},"for (let i = 0; i ",[72,77820,1464],{"class":77821},"s7hpK",[72,77823,77824],{"class":82}," arr1.length; i++) {\n",[72,77826,77827,77830,77832],{"class":74,"line":2076},[72,77828,77829],{"class":82},"   for (let j = 0; j ",[72,77831,1464],{"class":77821},[72,77833,77834],{"class":82}," arr1.length - 1; j++) {\n",[72,77836,77837],{"class":74,"line":2082},[72,77838,77839],{"class":82},"      if (arr1[j] > arr1[j + 1]) {\n",[72,77841,77842],{"class":74,"line":2103},[72,77843,77844],{"class":82},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[72,77846,77847],{"class":74,"line":2108},[72,77848,77849],{"class":82},"       }\n",[72,77851,77852],{"class":74,"line":2122},[72,77853,4737],{"class":82},[72,77855,77856],{"class":74,"line":2127},[72,77857,1994],{"class":82},[72,77859,77860],{"class":74,"line":2156},[72,77861,77862],{"class":82},"console.log(arr1)\n",[15,77864,77865],{},"数组解构的细节：",[15,77867,77868],{},"①变量多，单元值少",[15,77870,77871],{},[1891,77872],{"alt":68,"src":77873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[15,77875,77876],{},"防止出现undefined的方法：",[15,77878,77879],{},"const [a=0,b=0] =[1]",[15,77881,77882],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[15,77884,77885],{},"②变量少，单元值多",[15,77887,77888],{},[1891,77889],{"alt":68,"src":77890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[15,77892,77893],{},"此时可以使用剩余参数来接收多余的值",[15,77895,77896],{},"const [a,b,...c]=[1,2,3,4]",[15,77898,77899],{},"console.log(c) 输出[3,4]",[15,77901,77902],{},"③可以按需导入，忽略某些返回值",[15,77904,77905],{},[1891,77906],{"alt":68,"src":77907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[15,77909,77910],{},"④支持多维数组的结构",[63,77912,77916],{"className":77913,"code":77914,"language":77915,"meta":68,"style":68},"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",[34,77917,77918,77946,77962,77977,77992],{"__ignoreMap":68},[72,77919,77920,77922,77924,77926,77928,77930,77932,77934,77937,77939,77941,77943],{"class":74,"line":75},[72,77921,7218],{"class":78},[72,77923,52251],{"class":82},[72,77925,609],{"class":78},[72,77927,52644],{"class":82},[72,77929,772],{"class":362},[72,77931,12861],{"class":82},[72,77933,640],{"class":362},[72,77935,77936],{"class":82},", [",[72,77938,634],{"class":362},[72,77940,12861],{"class":82},[72,77942,847],{"class":362},[72,77944,77945],{"class":82},"]]\n",[72,77947,77948,77951,77953,77955,77957,77959],{"class":74,"line":370},[72,77949,77950],{"class":82},"console.",[72,77952,58665],{"class":358},[72,77954,4279],{"class":82},[72,77956,747],{"class":362},[72,77958,4644],{"class":82},[72,77960,77961],{"class":621},"  \u002F\u002F1\n",[72,77963,77964,77966,77968,77970,77972,77974],{"class":74,"line":1608},[72,77965,77950],{"class":82},[72,77967,58665],{"class":358},[72,77969,4279],{"class":82},[72,77971,772],{"class":362},[72,77973,4644],{"class":82},[72,77975,77976],{"class":621},"  \u002F\u002F2\n",[72,77978,77979,77981,77983,77985,77987,77989],{"class":74,"line":1623},[72,77980,77950],{"class":82},[72,77982,58665],{"class":358},[72,77984,4279],{"class":82},[72,77986,640],{"class":362},[72,77988,4644],{"class":82},[72,77990,77991],{"class":621},"  \u002F\u002F[3,4]\n",[72,77993,77994,77996,77998,78000,78002,78004,78006,78008],{"class":74,"line":1629},[72,77995,77950],{"class":82},[72,77997,58665],{"class":358},[72,77999,4279],{"class":82},[72,78001,640],{"class":362},[72,78003,5329],{"class":82},[72,78005,747],{"class":362},[72,78007,4644],{"class":82},[72,78009,78010],{"class":621},"  \u002F\u002F3\n",[63,78012,78014],{"className":77913,"code":78013,"language":77915,"meta":68,"style":68},"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",[34,78015,78016,78043,78054,78065],{"__ignoreMap":68},[72,78017,78018,78020,78023,78025,78027,78029,78031,78033,78035,78037,78039,78041],{"class":74,"line":75},[72,78019,7218],{"class":78},[72,78021,78022],{"class":82}," [a, b, c] ",[72,78024,609],{"class":78},[72,78026,52644],{"class":82},[72,78028,772],{"class":362},[72,78030,12861],{"class":82},[72,78032,640],{"class":362},[72,78034,77936],{"class":82},[72,78036,634],{"class":362},[72,78038,12861],{"class":82},[72,78040,847],{"class":362},[72,78042,77945],{"class":82},[72,78044,78045,78047,78049,78052],{"class":74,"line":370},[72,78046,77950],{"class":82},[72,78048,58665],{"class":358},[72,78050,78051],{"class":82},"(a)",[72,78053,77961],{"class":621},[72,78055,78056,78058,78060,78063],{"class":74,"line":1608},[72,78057,77950],{"class":82},[72,78059,58665],{"class":358},[72,78061,78062],{"class":82},"(b)",[72,78064,77976],{"class":621},[72,78066,78067,78069,78071,78074],{"class":74,"line":1623},[72,78068,77950],{"class":82},[72,78070,58665],{"class":358},[72,78072,78073],{"class":82},"(c)",[72,78075,77991],{"class":621},[63,78077,78079],{"className":77913,"code":78078,"language":77915,"meta":68,"style":68},"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",[34,78080,78081,78108,78118,78128,78138],{"__ignoreMap":68},[72,78082,78083,78085,78088,78090,78092,78094,78096,78098,78100,78102,78104,78106],{"class":74,"line":75},[72,78084,7218],{"class":78},[72,78086,78087],{"class":82}," [a, b, [c, d]] ",[72,78089,609],{"class":78},[72,78091,52644],{"class":82},[72,78093,772],{"class":362},[72,78095,12861],{"class":82},[72,78097,640],{"class":362},[72,78099,77936],{"class":82},[72,78101,634],{"class":362},[72,78103,12861],{"class":82},[72,78105,847],{"class":362},[72,78107,77945],{"class":82},[72,78109,78110,78112,78114,78116],{"class":74,"line":370},[72,78111,77950],{"class":82},[72,78113,58665],{"class":358},[72,78115,78051],{"class":82},[72,78117,77961],{"class":621},[72,78119,78120,78122,78124,78126],{"class":74,"line":1608},[72,78121,77950],{"class":82},[72,78123,58665],{"class":358},[72,78125,78062],{"class":82},[72,78127,77976],{"class":621},[72,78129,78130,78132,78134,78136],{"class":74,"line":1623},[72,78131,77950],{"class":82},[72,78133,58665],{"class":358},[72,78135,78073],{"class":82},[72,78137,78010],{"class":621},[72,78139,78140,78142,78144,78147],{"class":74,"line":1629},[72,78141,77950],{"class":82},[72,78143,58665],{"class":358},[72,78145,78146],{"class":82},"(d)",[72,78148,78149],{"class":621},"  \u002F\u002F4\n",[531,78151,78153],{"id":78152},"_462-对象解构","4.6.2 对象解构",[15,78155,78156],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[15,78158,78159],{},"用的非常非常多！！！！！！",[22423,78161,78163],{"id":78162},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[15,78165,78166],{},"基本语法：",[22,78168,78169,78172,78175,78178],{},[25,78170,78171],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[25,78173,78174],{},"对象属性的值将被赋值给与属性名相同的变量",[25,78176,78177],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[25,78179,78180],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[63,78182,78184],{"className":51051,"code":78183,"language":51053,"meta":68,"style":68},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[34,78185,78186,78191,78196,78201,78205],{"__ignoreMap":68},[72,78187,78188],{"class":74,"line":75},[72,78189,78190],{"class":82},"const obj = {\n",[72,78192,78193],{"class":74,"line":370},[72,78194,78195],{"class":82},"   uname: 'pink老师',\n",[72,78197,78198],{"class":74,"line":1608},[72,78199,78200],{"class":82},"   age: 18,\n",[72,78202,78203],{"class":74,"line":1623},[72,78204,1994],{"class":82},[72,78206,78207],{"class":74,"line":1629},[72,78208,78209],{"class":82},"const { uname, age } = obj\n",[15,78211,78212],{},"上方代码这样写等价于：",[15,78214,78215],{},"const uname等价于obj.uname",[15,78217,78218],{},"变量名可以重新改名：",[15,78220,78221],{},"const uname='red老师'",[15,78223,78224],{},"const user={",[15,78226,78227],{},"  uname:'pink老师',",[15,78229,78230],{},"  age:18",[15,78232,1500],{},[15,78234,78235],{},"const {uname,age}=user",[15,78237,78238],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[15,78240,78241],{},"const {旧变量名：新变量名}=对象",[15,78243,78244],{},"const {uname:username,age}=user",[22423,78246,78248],{"id":78247},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[15,78250,78251],{},[1891,78252],{"alt":68,"src":78253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[22423,78255,78257],{"id":78256},"_4623-多级对象解构","4.6.2.3 多级对象解构",[15,78259,78260],{},[1891,78261],{"alt":68,"src":78262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[63,78264,78266],{"className":53485,"code":78265,"language":53487,"meta":68,"style":68},"  \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",[34,78267,78268,78276,78281,78286,78291,78296,78301,78306,78311,78316,78320,78325,78330],{"__ignoreMap":68},[72,78269,78270,78272,78274],{"class":74,"line":75},[72,78271,52562],{"class":82},[72,78273,52231],{"class":51718},[72,78275,51725],{"class":82},[72,78277,78278],{"class":74,"line":370},[72,78279,78280],{"class":82},"    const pig = {\n",[72,78282,78283],{"class":74,"line":1608},[72,78284,78285],{"class":82},"      name: '佩奇',\n",[72,78287,78288],{"class":74,"line":1623},[72,78289,78290],{"class":82},"      family: {\n",[72,78292,78293],{"class":74,"line":1629},[72,78294,78295],{"class":82},"        mother: '猪妈妈',\n",[72,78297,78298],{"class":74,"line":1643},[72,78299,78300],{"class":82},"        father: '猪爸爸',\n",[72,78302,78303],{"class":74,"line":1649},[72,78304,78305],{"class":82},"        sister: '乔治'\n",[72,78307,78308],{"class":74,"line":1740},[72,78309,78310],{"class":82},"      },\n",[72,78312,78313],{"class":74,"line":1746},[72,78314,78315],{"class":82},"      age: 6\n",[72,78317,78318],{"class":74,"line":1758},[72,78319,2615],{"class":82},[72,78321,78322],{"class":74,"line":2041},[72,78323,78324],{"class":82},"    \u002F\u002F 多级对象解构\n",[72,78326,78327],{"class":74,"line":2046},[72,78328,78329],{"class":82},"    const { name, family: { mother, father, sister }, age } = pig\n",[72,78331,78332,78334,78336],{"class":74,"line":2052},[72,78333,52835],{"class":82},[72,78335,52231],{"class":51718},[72,78337,51725],{"class":82},[15,78339,78340],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[63,78342,78345],{"className":78343,"code":78344,"language":76865,"meta":68,"style":68},"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",[34,78346,78347,78352,78363,78375,78387,78396,78400,78411,78423,78433,78438,78442,78452,78463,78472,78476,78480,78491,78502,78511,78515,78520],{"__ignoreMap":68},[72,78348,78349],{"class":74,"line":75},[72,78350,78351],{"class":621},"    \u002F\u002F 这是后台传递过来的数据\n",[72,78353,78354,78356,78359,78361],{"class":74,"line":370},[72,78355,11647],{"class":78},[72,78357,78358],{"class":82}," msg ",[72,78360,609],{"class":78},[72,78362,15998],{"class":82},[72,78364,78365,78368,78370,78373],{"class":74,"line":1608},[72,78366,78367],{"class":366},"      \"code\"",[72,78369,1413],{"class":78},[72,78371,78372],{"class":362}," 200",[72,78374,31884],{"class":82},[72,78376,78377,78380,78382,78385],{"class":74,"line":1623},[72,78378,78379],{"class":366},"      \"msg\"",[72,78381,1413],{"class":78},[72,78383,78384],{"class":366}," \"获取新闻列表成功\"",[72,78386,31884],{"class":82},[72,78388,78389,78392,78394],{"class":74,"line":1629},[72,78390,78391],{"class":366},"      \"data\"",[72,78393,1413],{"class":78},[72,78395,55865],{"class":82},[72,78397,78398],{"class":74,"line":1643},[72,78399,2938],{"class":82},[72,78401,78402,78405,78407,78409],{"class":74,"line":1649},[72,78403,78404],{"class":366},"          \"id\"",[72,78406,1413],{"class":78},[72,78408,25540],{"class":362},[72,78410,31884],{"class":82},[72,78412,78413,78416,78418,78421],{"class":74,"line":1740},[72,78414,78415],{"class":366},"          \"title\"",[72,78417,1413],{"class":78},[72,78419,78420],{"class":366}," \"5G商用自己，三大运用商收入下降\"",[72,78422,31884],{"class":82},[72,78424,78425,78428,78430],{"class":74,"line":1746},[72,78426,78427],{"class":366},"          \"count\"",[72,78429,1413],{"class":78},[72,78431,78432],{"class":362}," 58\n",[72,78434,78435],{"class":74,"line":1758},[72,78436,78437],{"class":82},"        },\n",[72,78439,78440],{"class":74,"line":2041},[72,78441,2938],{"class":82},[72,78443,78444,78446,78448,78450],{"class":74,"line":2046},[72,78445,78404],{"class":366},[72,78447,1413],{"class":78},[72,78449,15181],{"class":362},[72,78451,31884],{"class":82},[72,78453,78454,78456,78458,78461],{"class":74,"line":2052},[72,78455,78415],{"class":366},[72,78457,1413],{"class":78},[72,78459,78460],{"class":366}," \"国际媒体头条速览\"",[72,78462,31884],{"class":82},[72,78464,78465,78467,78469],{"class":74,"line":2057},[72,78466,78427],{"class":366},[72,78468,1413],{"class":78},[72,78470,78471],{"class":362}," 56\n",[72,78473,78474],{"class":74,"line":2071},[72,78475,78437],{"class":82},[72,78477,78478],{"class":74,"line":2076},[72,78479,2938],{"class":82},[72,78481,78482,78484,78486,78489],{"class":74,"line":2082},[72,78483,78404],{"class":366},[72,78485,1413],{"class":78},[72,78487,78488],{"class":362}," 3",[72,78490,31884],{"class":82},[72,78492,78493,78495,78497,78500],{"class":74,"line":2103},[72,78494,78415],{"class":366},[72,78496,1413],{"class":78},[72,78498,78499],{"class":366}," \"乌克兰和俄罗斯持续冲突\"",[72,78501,31884],{"class":82},[72,78503,78504,78506,78508],{"class":74,"line":2108},[72,78505,78427],{"class":366},[72,78507,1413],{"class":78},[72,78509,78510],{"class":362}," 1669\n",[72,78512,78513],{"class":74,"line":2122},[72,78514,78437],{"class":82},[72,78516,78517],{"class":74,"line":2127},[72,78518,78519],{"class":82},"      ]\n",[72,78521,78522],{"class":74,"line":2156},[72,78523,2615],{"class":82},[15,78525,78526],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[15,78528,78529],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[15,78531,78532],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[15,78534,78535],{},"function({data}) {",[15,78537,78538],{},"console.log(data)",[15,78540,1500],{},[15,78542,78543],{},"render(msg)",[15,78545,78546],{},"实参传递给形参的时候解构了",[15,78548,78549],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[15,78551,78552],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[15,78554,78555],{},"function render({data:mydata}) {",[15,78557,78558],{},"  console.log(data)",[15,78560,1500],{},[531,78562,78564],{"id":78563},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[15,78566,78567],{},"有两种情况：一个是数组结构，一个是立即执行函数",[22,78569,78570],{},[25,78571,78572],{},"如果对一个数组进行遍历，有两种方式：",[15,78574,78575],{},"①法1",[15,78577,78578],{},"const arr=[1,2,3]",[15,78580,78581],{},"arr.map(function(item,index) {",[15,78583,78584],{},"  console.log(item)",[15,78586,52882],{},[15,78588,78589],{},[1891,78590],{"alt":68,"src":78591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[15,78593,78594],{},"②法2",[15,78596,78597],{},"const str='pink'",[15,78599,78600],{},"[1,2,3].map(function(item,index) {",[15,78602,78603],{},"console.log(item)",[15,78605,52882],{},[15,78607,78608],{},[1891,78609],{"alt":68,"src":78610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[15,78612,78613],{},"此时会报错",[15,78615,78616],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[15,78618,78603],{},[15,78620,52882],{},[15,78622,78623],{},"内部会当成这样处理，所以我们用分号进行隔开",[85,78625,78627],{"id":78626},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[15,78629,78630],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[15,78632,78633],{},"可以理解为加强版的for循环",[15,78635,78636],{},[1891,78637],{"alt":68,"src":78638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[15,78640,78641],{},"里边不写return，不返回数组，只遍历不返回",[15,78643,78644],{},"map是返回数组",[15,78646,78647],{},"forEach主要用于遍历数组对象",[63,78649,78651],{"className":53485,"code":78650,"language":53487,"meta":68,"style":68},"  \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",[34,78652,78653,78661,78666,78671,78676,78681,78685,78690],{"__ignoreMap":68},[72,78654,78655,78657,78659],{"class":74,"line":75},[72,78656,52562],{"class":82},[72,78658,52231],{"class":51718},[72,78660,51725],{"class":82},[72,78662,78663],{"class":74,"line":370},[72,78664,78665],{"class":82},"    const arr = ['red', 'green', 'pink']\n",[72,78667,78668],{"class":74,"line":1608},[72,78669,78670],{"class":82},"    const result = arr.forEach(function (item, index) {\n",[72,78672,78673],{"class":74,"line":1623},[72,78674,78675],{"class":82},"      console.log(item)\n",[72,78677,78678],{"class":74,"line":1629},[72,78679,78680],{"class":82},"      console.log(index)\n",[72,78682,78683],{"class":74,"line":1643},[72,78684,33879],{"class":82},[72,78686,78687],{"class":74,"line":1649},[72,78688,78689],{"class":82},"    console.log(result)\n",[72,78691,78692,78694,78696],{"class":74,"line":1740},[72,78693,52835],{"class":82},[72,78695,52231],{"class":51718},[72,78697,51725],{"class":82},[15,78699,78700],{},[1891,78701],{"alt":68,"src":78702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[85,78704,78706],{"id":78705},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[15,78708,78709],{},[1891,78710],{"alt":68,"src":78711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[15,78713,78714],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[63,78716,78718],{"className":53485,"code":78717,"language":53487,"meta":68,"style":68},"\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",[34,78719,78720,78728,78736,78741,78746,78750,78754,78759,78763,78768,78776],{"__ignoreMap":68},[72,78721,78722,78724,78726],{"class":74,"line":75},[72,78723,1464],{"class":82},[72,78725,52218],{"class":51718},[72,78727,51725],{"class":82},[72,78729,78730,78732,78734],{"class":74,"line":370},[72,78731,52562],{"class":82},[72,78733,52231],{"class":51718},[72,78735,51725],{"class":82},[72,78737,78738],{"class":74,"line":1608},[72,78739,78740],{"class":82},"    const arr = [10, 20, 30]\n",[72,78742,78743],{"class":74,"line":1623},[72,78744,78745],{"class":82},"    const newArr = arr.filter(function (item, index) {\n",[72,78747,78748],{"class":74,"line":1629},[72,78749,78675],{"class":82},[72,78751,78752],{"class":74,"line":1643},[72,78753,78680],{"class":82},[72,78755,78756],{"class":74,"line":1649},[72,78757,78758],{"class":82},"      return item >= 20\n",[72,78760,78761],{"class":74,"line":1740},[72,78762,33879],{"class":82},[72,78764,78765],{"class":74,"line":1746},[72,78766,78767],{"class":82},"    console.log(newArr)\n",[72,78769,78770,78772,78774],{"class":74,"line":1758},[72,78771,52835],{"class":82},[72,78773,52231],{"class":51718},[72,78775,51725],{"class":82},[72,78777,78778,78780,78782],{"class":74,"line":2041},[72,78779,52203],{"class":82},[72,78781,52218],{"class":51718},[72,78783,51725],{"class":82},[15,78785,78786],{},"这个也可以写成箭头函数：",[63,78788,78790],{"className":51051,"code":78789,"language":51053,"meta":68,"style":68},"const newArr = arr.filter(item => item >= 20)\n",[34,78791,78792],{"__ignoreMap":68},[72,78793,78794],{"class":74,"line":75},[72,78795,78789],{"class":82},[85,78797,78799],{"id":78798},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[15,78801,78802],{},[1891,78803],{"alt":68,"src":78804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[15,78806,78807],{},"步骤：",[15,78809,78810],{},"①：渲染页面模块",[251,78812,78813,78816],{},[25,78814,78815],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[25,78817,78818],{},"用forEach+字符串的形式",[15,78820,78821],{},"②：点击不同需求，显示不同页面内容",[251,78823,78824,78827,78830,78833,78836],{},[25,78825,78826],{},"点击采取事件委托方式 .filter",[25,78828,78829],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[25,78831,78832],{},"筛选条件是根据点击的 data-index 来判断",[25,78834,78835],{},"可以使用对象解构，把事件对象解构",[25,78837,78838],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[63,78840,78842],{"className":51051,"code":78841,"language":51053,"meta":68,"style":68},"\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",[34,78843,78844,78854,78868,78872,78880,78894,78914,78926,78934,78940,78950,78960,78970,78974,78978,78984,78997,79009,79019,79031,79035,79039,79046,79059,79071,79088,79106,79119,79123,79127,79139,79149,79153,79157,79164,79205,79232,79242,79246,79250,79258,79270,79274,79278,79286,79298,79310,79321,79325,79329,79338,79350,79361,79365,79369,79378,79390,79402,79406,79410,79417,79427,79439,79451,79466,79470,79474,79482,79498,79508,79518,79528,79540,79544,79548,79558,79569,79579,79583,79591,79599,79603,79611,79626,79652,79677,79702,79721,79729,79743,79748,79753,79758,79763,79768,79776,79784,79789,79800,79805,79815,79825,79835,79845,79849,79853,79862,79871,79880,79889,79893,79897,79906,79915,79924,79933,79937,79941,79950,79959,79968,79977,79981,79985,79994,80003,80012,80021,80025,80029,80038,80047,80056,80065,80069,80073,80082,80091,80100,80109,80113,80117,80126,80135,80143,80152,80156,80160,80164,80169,80181,80186,80198,80202,80219,80247,80256,80261,80271,80281,80290,80295,80300,80304,80309,80326,80330,80335,80343,80348,80375,80380,80400,80405,80417,80422,80427,80432,80443,80457,80494,80512,80545,80562,80586,80590,80595,80601,80605,80609,80613,80621,80629,80633],{"__ignoreMap":68},[72,78845,78846,78848,78850,78852],{"class":74,"line":75},[72,78847,51715],{"class":82},[72,78849,51719],{"class":51718},[72,78851,51722],{"class":358},[72,78853,51725],{"class":82},[72,78855,78856,78858,78860,78862,78864,78866],{"class":74,"line":370},[72,78857,1464],{"class":82},[72,78859,51053],{"class":51718},[72,78861,51734],{"class":358},[72,78863,609],{"class":82},[72,78865,51739],{"class":366},[72,78867,51725],{"class":82},[72,78869,78870],{"class":74,"line":1608},[72,78871,2828],{"emptyLinePlaceholder":490},[72,78873,78874,78876,78878],{"class":74,"line":1623},[72,78875,1464],{"class":82},[72,78877,51752],{"class":51718},[72,78879,51725],{"class":82},[72,78881,78882,78884,78886,78888,78890,78892],{"class":74,"line":1629},[72,78883,52562],{"class":82},[72,78885,51762],{"class":51718},[72,78887,51765],{"class":358},[72,78889,609],{"class":82},[72,78891,51770],{"class":366},[72,78893,51725],{"class":82},[72,78895,78896,78898,78900,78902,78904,78906,78908,78910,78912],{"class":74,"line":1643},[72,78897,52562],{"class":82},[72,78899,51762],{"class":51718},[72,78901,15346],{"class":358},[72,78903,609],{"class":82},[72,78905,51809],{"class":366},[72,78907,51789],{"class":358},[72,78909,609],{"class":82},[72,78911,51816],{"class":366},[72,78913,51725],{"class":82},[72,78915,78916,78918,78920,78922,78924],{"class":74,"line":1649},[72,78917,52562],{"class":82},[72,78919,51825],{"class":51718},[72,78921,51828],{"class":82},[72,78923,51825],{"class":51718},[72,78925,51725],{"class":82},[72,78927,78928,78930,78932],{"class":74,"line":1740},[72,78929,52562],{"class":82},[72,78931,473],{"class":51718},[72,78933,51725],{"class":82},[72,78935,78936,78938],{"class":74,"line":1746},[72,78937,6829],{"class":51718},[72,78939,15998],{"class":82},[72,78941,78942,78944,78946,78948],{"class":74,"line":1758},[72,78943,55113],{"class":362},[72,78945,51855],{"class":82},[72,78947,747],{"class":362},[72,78949,1719],{"class":82},[72,78951,78952,78954,78956,78958],{"class":74,"line":2041},[72,78953,55124],{"class":362},[72,78955,51855],{"class":82},[72,78957,747],{"class":362},[72,78959,1719],{"class":82},[72,78961,78962,78964,78966,78968],{"class":74,"line":2046},[72,78963,73014],{"class":362},[72,78965,51855],{"class":82},[72,78967,60923],{"class":362},[72,78969,1719],{"class":82},[72,78971,78972],{"class":74,"line":2052},[72,78973,2615],{"class":82},[72,78975,78976],{"class":74,"line":2057},[72,78977,2828],{"emptyLinePlaceholder":490},[72,78979,78980,78982],{"class":74,"line":2071},[72,78981,62541],{"class":358},[72,78983,15998],{"class":82},[72,78985,78986,78988,78990,78993,78995],{"class":74,"line":2076},[72,78987,55189],{"class":362},[72,78989,51855],{"class":82},[72,78991,78992],{"class":362},"990",[72,78994,51910],{"class":78},[72,78996,1719],{"class":82},[72,78998,78999,79001,79003,79005,79007],{"class":74,"line":2082},[72,79000,55124],{"class":362},[72,79002,51855],{"class":82},[72,79004,747],{"class":362},[72,79006,51974],{"class":362},[72,79008,1719],{"class":82},[72,79010,79011,79013,79015,79017],{"class":74,"line":2103},[72,79012,55427],{"class":362},[72,79014,51855],{"class":82},[72,79016,51895],{"class":362},[72,79018,1719],{"class":82},[72,79020,79021,79024,79026,79029],{"class":74,"line":2108},[72,79022,79023],{"class":362},"      flex-wrap",[72,79025,51855],{"class":82},[72,79027,79028],{"class":362},"wrap",[72,79030,1719],{"class":82},[72,79032,79033],{"class":74,"line":2122},[72,79034,2615],{"class":82},[72,79036,79037],{"class":74,"line":2127},[72,79038,2828],{"emptyLinePlaceholder":490},[72,79040,79041,79044],{"class":74,"line":2156},[72,79042,79043],{"class":358},"    .item",[72,79045,15998],{"class":82},[72,79047,79048,79050,79052,79055,79057],{"class":74,"line":2161},[72,79049,55189],{"class":362},[72,79051,51855],{"class":82},[72,79053,79054],{"class":362},"240",[72,79056,51910],{"class":78},[72,79058,1719],{"class":82},[72,79060,79061,79063,79065,79067,79069],{"class":74,"line":2178},[72,79062,62418],{"class":362},[72,79064,51855],{"class":82},[72,79066,1000],{"class":362},[72,79068,51910],{"class":78},[72,79070,1719],{"class":82},[72,79072,79073,79075,79077,79079,79081,79084,79086],{"class":74,"line":2183},[72,79074,55113],{"class":362},[72,79076,51855],{"class":82},[72,79078,1254],{"class":362},[72,79080,51910],{"class":78},[72,79082,79083],{"class":362}," 30",[72,79085,51910],{"class":78},[72,79087,1719],{"class":82},[72,79089,79090,79092,79094,79096,79099,79102,79104],{"class":74,"line":2188},[72,79091,62278],{"class":362},[72,79093,51855],{"class":82},[72,79095,28543],{"class":362},[72,79097,79098],{"class":362}," ease",[72,79100,79101],{"class":362}," .5",[72,79103,1249],{"class":78},[72,79105,1719],{"class":82},[72,79107,79108,79111,79113,79115,79117],{"class":74,"line":2193},[72,79109,79110],{"class":362},"      margin-bottom",[72,79112,51855],{"class":82},[72,79114,1254],{"class":362},[72,79116,51910],{"class":78},[72,79118,1719],{"class":82},[72,79120,79121],{"class":74,"line":2207},[72,79122,2615],{"class":82},[72,79124,79125],{"class":74,"line":2212},[72,79126,2828],{"emptyLinePlaceholder":490},[72,79128,79129,79132,79134,79137],{"class":74,"line":3005},[72,79130,79131],{"class":358},"    .item:nth-child",[72,79133,564],{"class":82},[72,79135,79136],{"class":362},"4n",[72,79138,12868],{"class":82},[72,79140,79141,79143,79145,79147],{"class":74,"line":3019},[72,79142,62418],{"class":362},[72,79144,51855],{"class":82},[72,79146,747],{"class":362},[72,79148,1719],{"class":82},[72,79150,79151],{"class":74,"line":3027},[72,79152,2615],{"class":82},[72,79154,79155],{"class":74,"line":3032},[72,79156,2828],{"emptyLinePlaceholder":490},[72,79158,79159,79162],{"class":74,"line":3038},[72,79160,79161],{"class":358},"    .item:hover",[72,79163,15998],{"class":82},[72,79165,79166,79169,79171,79173,79175,79177,79179,79181,79183,79186,79188,79190,79192,79194,79196,79198,79200,79203],{"class":74,"line":3044},[72,79167,79168],{"class":362},"      box-shadow",[72,79170,51855],{"class":82},[72,79172,747],{"class":362},[72,79174,51910],{"class":78},[72,79176,4521],{"class":362},[72,79178,51910],{"class":78},[72,79180,2576],{"class":362},[72,79182,51910],{"class":78},[72,79184,79185],{"class":362}," rgba",[72,79187,564],{"class":82},[72,79189,747],{"class":362},[72,79191,12861],{"class":82},[72,79193,747],{"class":362},[72,79195,12861],{"class":82},[72,79197,747],{"class":362},[72,79199,12861],{"class":82},[72,79201,79202],{"class":362},".2",[72,79204,3147],{"class":82},[72,79206,79207,79210,79212,79215,79217,79219,79221,79224,79226,79228,79230],{"class":74,"line":3049},[72,79208,79209],{"class":362},"      transform",[72,79211,51855],{"class":82},[72,79213,79214],{"class":362},"translate3d",[72,79216,564],{"class":82},[72,79218,747],{"class":362},[72,79220,12861],{"class":82},[72,79222,79223],{"class":362},"-4",[72,79225,51910],{"class":78},[72,79227,12861],{"class":82},[72,79229,747],{"class":362},[72,79231,3147],{"class":82},[72,79233,79234,79236,79238,79240],{"class":74,"line":8374},[72,79235,62443],{"class":362},[72,79237,51855],{"class":82},[72,79239,62448],{"class":362},[72,79241,1719],{"class":82},[72,79243,79244],{"class":74,"line":8398},[72,79245,2615],{"class":82},[72,79247,79248],{"class":74,"line":8403},[72,79249,2828],{"emptyLinePlaceholder":490},[72,79251,79252,79254,79256],{"class":74,"line":8409},[72,79253,79043],{"class":358},[72,79255,56033],{"class":51718},[72,79257,15998],{"class":82},[72,79259,79260,79262,79264,79266,79268],{"class":74,"line":8436},[72,79261,55189],{"class":362},[72,79263,51855],{"class":82},[72,79265,865],{"class":362},[72,79267,882],{"class":78},[72,79269,1719],{"class":82},[72,79271,79272],{"class":74,"line":8441},[72,79273,2615],{"class":82},[72,79275,79276],{"class":74,"line":8447},[72,79277,2828],{"emptyLinePlaceholder":490},[72,79279,79280,79282,79284],{"class":74,"line":8459},[72,79281,79043],{"class":358},[72,79283,62722],{"class":358},[72,79285,15998],{"class":82},[72,79287,79288,79290,79292,79294,79296],{"class":74,"line":8471},[72,79289,55340],{"class":362},[72,79291,51855],{"class":82},[72,79293,1204],{"class":362},[72,79295,51910],{"class":78},[72,79297,1719],{"class":82},[72,79299,79300,79302,79304,79306,79308],{"class":74,"line":8483},[72,79301,79110],{"class":362},[72,79303,51855],{"class":82},[72,79305,1000],{"class":362},[72,79307,51910],{"class":78},[72,79309,1719],{"class":82},[72,79311,79312,79314,79316,79319],{"class":74,"line":10142},[72,79313,57834],{"class":362},[72,79315,51855],{"class":82},[72,79317,79318],{"class":362},"#666",[72,79320,1719],{"class":82},[72,79322,79323],{"class":74,"line":10167},[72,79324,2615],{"class":82},[72,79326,79327],{"class":74,"line":10190},[72,79328,2828],{"emptyLinePlaceholder":490},[72,79330,79331,79333,79336],{"class":74,"line":10214},[72,79332,79043],{"class":358},[72,79334,79335],{"class":358}," .price",[72,79337,15998],{"class":82},[72,79339,79340,79342,79344,79346,79348],{"class":74,"line":10219},[72,79341,55340],{"class":362},[72,79343,51855],{"class":82},[72,79345,1304],{"class":362},[72,79347,51910],{"class":78},[72,79349,1719],{"class":82},[72,79351,79352,79354,79356,79359],{"class":74,"line":10224},[72,79353,57834],{"class":362},[72,79355,51855],{"class":82},[72,79357,79358],{"class":362},"firebrick",[72,79360,1719],{"class":82},[72,79362,79363],{"class":74,"line":10229},[72,79364,2615],{"class":82},[72,79366,79367],{"class":74,"line":10238},[72,79368,2828],{"emptyLinePlaceholder":490},[72,79370,79371,79373,79376],{"class":74,"line":10243},[72,79372,79043],{"class":358},[72,79374,79375],{"class":358}," .price::before",[72,79377,15998],{"class":82},[72,79379,79380,79383,79385,79388],{"class":74,"line":10249},[72,79381,79382],{"class":362},"      content",[72,79384,51855],{"class":82},[72,79386,79387],{"class":366},"'￥'",[72,79389,1719],{"class":82},[72,79391,79392,79394,79396,79398,79400],{"class":74,"line":10270},[72,79393,55340],{"class":362},[72,79395,51855],{"class":82},[72,79397,1103],{"class":362},[72,79399,51910],{"class":78},[72,79401,1719],{"class":82},[72,79403,79404],{"class":74,"line":10276},[72,79405,2615],{"class":82},[72,79407,79408],{"class":74,"line":10290},[72,79409,2828],{"emptyLinePlaceholder":490},[72,79411,79412,79415],{"class":74,"line":10296},[72,79413,79414],{"class":358},"    .filter",[72,79416,15998],{"class":82},[72,79418,79419,79421,79423,79425],{"class":74,"line":10323},[72,79420,55427],{"class":362},[72,79422,51855],{"class":82},[72,79424,51895],{"class":362},[72,79426,1719],{"class":82},[72,79428,79429,79431,79433,79435,79437],{"class":74,"line":10332},[72,79430,55189],{"class":362},[72,79432,51855],{"class":82},[72,79434,78992],{"class":362},[72,79436,51910],{"class":78},[72,79438,1719],{"class":82},[72,79440,79441,79443,79445,79447,79449],{"class":74,"line":10338},[72,79442,55124],{"class":362},[72,79444,51855],{"class":82},[72,79446,747],{"class":362},[72,79448,51974],{"class":362},[72,79450,1719],{"class":82},[72,79452,79453,79455,79457,79459,79461,79463],{"class":74,"line":10346},[72,79454,55113],{"class":362},[72,79456,51855],{"class":82},[72,79458,1210],{"class":362},[72,79460,51910],{"class":78},[72,79462,79083],{"class":362},[72,79464,79465],{"class":78},"px\n",[72,79467,79468],{"class":74,"line":10351},[72,79469,2615],{"class":82},[72,79471,79472],{"class":74,"line":17030},[72,79473,2828],{"emptyLinePlaceholder":490},[72,79475,79476,79478,79480],{"class":74,"line":17036},[72,79477,79414],{"class":358},[72,79479,1827],{"class":51718},[72,79481,15998],{"class":82},[72,79483,79484,79486,79488,79490,79492,79494,79496],{"class":74,"line":17059},[72,79485,55113],{"class":362},[72,79487,51855],{"class":82},[72,79489,1000],{"class":362},[72,79491,51910],{"class":78},[72,79493,9376],{"class":362},[72,79495,51910],{"class":78},[72,79497,1719],{"class":82},[72,79499,79500,79502,79504,79506],{"class":74,"line":17065},[72,79501,62139],{"class":362},[72,79503,51855],{"class":82},[72,79505,62236],{"class":362},[72,79507,1719],{"class":82},[72,79509,79510,79512,79514,79516],{"class":74,"line":17088},[72,79511,57834],{"class":362},[72,79513,51855],{"class":82},[72,79515,79318],{"class":362},[72,79517,1719],{"class":82},[72,79519,79520,79522,79524,79526],{"class":74,"line":17102},[72,79521,64388],{"class":362},[72,79523,51855],{"class":82},[72,79525,55155],{"class":362},[72,79527,1719],{"class":82},[72,79529,79530,79532,79534,79536,79538],{"class":74,"line":17122},[72,79531,62168],{"class":362},[72,79533,51855],{"class":82},[72,79535,1254],{"class":362},[72,79537,51910],{"class":78},[72,79539,1719],{"class":82},[72,79541,79542],{"class":74,"line":17128},[72,79543,2615],{"class":82},[72,79545,79546],{"class":74,"line":17139},[72,79547,2828],{"emptyLinePlaceholder":490},[72,79549,79550,79552,79554,79556],{"class":74,"line":17162},[72,79551,79414],{"class":358},[72,79553,1827],{"class":51718},[72,79555,62318],{"class":358},[72,79557,15998],{"class":82},[72,79559,79560,79562,79564,79567],{"class":74,"line":17184},[72,79561,55302],{"class":362},[72,79563,51855],{"class":82},[72,79565,79566],{"class":362},"#05943c",[72,79568,1719],{"class":82},[72,79570,79571,79573,79575,79577],{"class":74,"line":17189},[72,79572,57834],{"class":362},[72,79574,51855],{"class":82},[72,79576,61260],{"class":362},[72,79578,1719],{"class":82},[72,79580,79581],{"class":74,"line":17195},[72,79582,2615],{"class":82},[72,79584,79585,79587,79589],{"class":74,"line":17209},[72,79586,52835],{"class":82},[72,79588,473],{"class":51718},[72,79590,51725],{"class":82},[72,79592,79593,79595,79597],{"class":74,"line":17222},[72,79594,52203],{"class":82},[72,79596,51752],{"class":51718},[72,79598,51725],{"class":82},[72,79600,79601],{"class":74,"line":17227},[72,79602,2828],{"emptyLinePlaceholder":490},[72,79604,79605,79607,79609],{"class":74,"line":17241},[72,79606,1464],{"class":82},[72,79608,52218],{"class":51718},[72,79610,51725],{"class":82},[72,79612,79613,79615,79617,79619,79621,79624],{"class":74,"line":17246},[72,79614,52562],{"class":82},[72,79616,52029],{"class":51718},[72,79618,53904],{"class":358},[72,79620,609],{"class":82},[72,79622,79623],{"class":366},"\"filter\"",[72,79625,51725],{"class":82},[72,79627,79628,79630,79632,79634,79636,79638,79641,79643,79645,79648,79650],{"class":74,"line":17252},[72,79629,51759],{"class":82},[72,79631,257],{"class":51718},[72,79633,61475],{"class":358},[72,79635,609],{"class":82},[72,79637,61480],{"class":366},[72,79639,79640],{"class":358}," data-index",[72,79642,609],{"class":82},[72,79644,4106],{"class":366},[72,79646,79647],{"class":82},">0-100元\u003C\u002F",[72,79649,257],{"class":51718},[72,79651,51725],{"class":82},[72,79653,79654,79656,79658,79660,79662,79664,79666,79668,79670,79673,79675],{"class":74,"line":17257},[72,79655,51759],{"class":82},[72,79657,257],{"class":51718},[72,79659,61475],{"class":358},[72,79661,609],{"class":82},[72,79663,61480],{"class":366},[72,79665,79640],{"class":358},[72,79667,609],{"class":82},[72,79669,4129],{"class":366},[72,79671,79672],{"class":82},">100-300元\u003C\u002F",[72,79674,257],{"class":51718},[72,79676,51725],{"class":82},[72,79678,79679,79681,79683,79685,79687,79689,79691,79693,79695,79698,79700],{"class":74,"line":17271},[72,79680,51759],{"class":82},[72,79682,257],{"class":51718},[72,79684,61475],{"class":358},[72,79686,609],{"class":82},[72,79688,61480],{"class":366},[72,79690,79640],{"class":358},[72,79692,609],{"class":82},[72,79694,4142],{"class":366},[72,79696,79697],{"class":82},">300元以上\u003C\u002F",[72,79699,257],{"class":51718},[72,79701,51725],{"class":82},[72,79703,79704,79706,79708,79710,79712,79714,79717,79719],{"class":74,"line":17276},[72,79705,51759],{"class":82},[72,79707,257],{"class":51718},[72,79709,61475],{"class":358},[72,79711,609],{"class":82},[72,79713,61480],{"class":366},[72,79715,79716],{"class":82},">全部区间\u003C\u002F",[72,79718,257],{"class":51718},[72,79720,51725],{"class":82},[72,79722,79723,79725,79727],{"class":74,"line":17281},[72,79724,52835],{"class":82},[72,79726,52029],{"class":51718},[72,79728,51725],{"class":82},[72,79730,79731,79733,79735,79737,79739,79741],{"class":74,"line":17295},[72,79732,52562],{"class":82},[72,79734,52029],{"class":51718},[72,79736,53904],{"class":358},[72,79738,609],{"class":82},[72,79740,63026],{"class":366},[72,79742,51725],{"class":82},[72,79744,79745],{"class":74,"line":17307},[72,79746,79747],{"class":621},"    \u003C!-- \u003Cdiv class=\"item\">\n",[72,79749,79750],{"class":74,"line":17312},[72,79751,79752],{"class":621},"      \u003Cimg src=\"\" alt=\"\">\n",[72,79754,79755],{"class":74,"line":17325},[72,79756,79757],{"class":621},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[72,79759,79760],{"class":74,"line":17330},[72,79761,79762],{"class":621},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[72,79764,79765],{"class":74,"line":17335},[72,79766,79767],{"class":621},"    \u003C\u002Fdiv> -->\n",[72,79769,79770,79772,79774],{"class":74,"line":17340},[72,79771,52835],{"class":82},[72,79773,52029],{"class":51718},[72,79775,51725],{"class":82},[72,79777,79778,79780,79782],{"class":74,"line":17353},[72,79779,52562],{"class":82},[72,79781,52231],{"class":51718},[72,79783,51725],{"class":82},[72,79785,79786],{"class":74,"line":17358},[72,79787,79788],{"class":621},"    \u002F\u002F 2. 初始化数据\n",[72,79790,79791,79793,79796,79798],{"class":74,"line":33051},[72,79792,11647],{"class":78},[72,79794,79795],{"class":362}," goodsList",[72,79797,13990],{"class":78},[72,79799,55865],{"class":82},[72,79801,79802],{"class":74,"line":33057},[72,79803,79804],{"class":82},"      {\n",[72,79806,79807,79810,79813],{"class":74,"line":33063},[72,79808,79809],{"class":82},"        id: ",[72,79811,79812],{"class":366},"'4001172'",[72,79814,31884],{"class":82},[72,79816,79817,79820,79823],{"class":74,"line":33069},[72,79818,79819],{"class":82},"        name: ",[72,79821,79822],{"class":366},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[72,79824,31884],{"class":82},[72,79826,79827,79830,79833],{"class":74,"line":33075},[72,79828,79829],{"class":82},"        price: ",[72,79831,79832],{"class":366},"'289.00'",[72,79834,31884],{"class":82},[72,79836,79837,79840,79843],{"class":74,"line":33086},[72,79838,79839],{"class":82},"        picture: ",[72,79841,79842],{"class":366},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[72,79844,31884],{"class":82},[72,79846,79847],{"class":74,"line":33092},[72,79848,78310],{"class":82},[72,79850,79851],{"class":74,"line":33112},[72,79852,79804],{"class":82},[72,79854,79855,79857,79860],{"class":74,"line":33118},[72,79856,79809],{"class":82},[72,79858,79859],{"class":366},"'4001594'",[72,79861,31884],{"class":82},[72,79863,79864,79866,79869],{"class":74,"line":33129},[72,79865,79819],{"class":82},[72,79867,79868],{"class":366},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[72,79870,31884],{"class":82},[72,79872,79873,79875,79878],{"class":74,"line":33135},[72,79874,79829],{"class":82},[72,79876,79877],{"class":366},"'288.00'",[72,79879,31884],{"class":82},[72,79881,79882,79884,79887],{"class":74,"line":33141},[72,79883,79839],{"class":82},[72,79885,79886],{"class":366},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[72,79888,31884],{"class":82},[72,79890,79891],{"class":74,"line":33147},[72,79892,78310],{"class":82},[72,79894,79895],{"class":74,"line":33153},[72,79896,79804],{"class":82},[72,79898,79899,79901,79904],{"class":74,"line":33159},[72,79900,79809],{"class":82},[72,79902,79903],{"class":366},"'4001009'",[72,79905,31884],{"class":82},[72,79907,79908,79910,79913],{"class":74,"line":33165},[72,79909,79819],{"class":82},[72,79911,79912],{"class":366},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[72,79914,31884],{"class":82},[72,79916,79917,79919,79922],{"class":74,"line":33171},[72,79918,79829],{"class":82},[72,79920,79921],{"class":366},"'109.00'",[72,79923,31884],{"class":82},[72,79925,79926,79928,79931],{"class":74,"line":33191},[72,79927,79839],{"class":82},[72,79929,79930],{"class":366},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[72,79932,31884],{"class":82},[72,79934,79935],{"class":74,"line":33197},[72,79936,78310],{"class":82},[72,79938,79939],{"class":74,"line":33213},[72,79940,79804],{"class":82},[72,79942,79943,79945,79948],{"class":74,"line":33219},[72,79944,79809],{"class":82},[72,79946,79947],{"class":366},"'4001874'",[72,79949,31884],{"class":82},[72,79951,79952,79954,79957],{"class":74,"line":33233},[72,79953,79819],{"class":82},[72,79955,79956],{"class":366},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[72,79958,31884],{"class":82},[72,79960,79961,79963,79966],{"class":74,"line":33239},[72,79962,79829],{"class":82},[72,79964,79965],{"class":366},"'488.00'",[72,79967,31884],{"class":82},[72,79969,79970,79972,79975],{"class":74,"line":33254},[72,79971,79839],{"class":82},[72,79973,79974],{"class":366},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[72,79976,31884],{"class":82},[72,79978,79979],{"class":74,"line":33260},[72,79980,78310],{"class":82},[72,79982,79983],{"class":74,"line":33269},[72,79984,79804],{"class":82},[72,79986,79987,79989,79992],{"class":74,"line":33275},[72,79988,79809],{"class":82},[72,79990,79991],{"class":366},"'4001649'",[72,79993,31884],{"class":82},[72,79995,79996,79998,80001],{"class":74,"line":33284},[72,79997,79819],{"class":82},[72,79999,80000],{"class":366},"'大师监制龙泉青瓷茶叶罐'",[72,80002,31884],{"class":82},[72,80004,80005,80007,80010],{"class":74,"line":33290},[72,80006,79829],{"class":82},[72,80008,80009],{"class":366},"'139.00'",[72,80011,31884],{"class":82},[72,80013,80014,80016,80019],{"class":74,"line":33296},[72,80015,79839],{"class":82},[72,80017,80018],{"class":366},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[72,80020,31884],{"class":82},[72,80022,80023],{"class":74,"line":33305},[72,80024,78310],{"class":82},[72,80026,80027],{"class":74,"line":33311},[72,80028,79804],{"class":82},[72,80030,80031,80033,80036],{"class":74,"line":33322},[72,80032,79809],{"class":82},[72,80034,80035],{"class":366},"'3997185'",[72,80037,31884],{"class":82},[72,80039,80040,80042,80045],{"class":74,"line":33328},[72,80041,79819],{"class":82},[72,80043,80044],{"class":366},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[72,80046,31884],{"class":82},[72,80048,80049,80051,80054],{"class":74,"line":33347},[72,80050,79829],{"class":82},[72,80052,80053],{"class":366},"'108.00'",[72,80055,31884],{"class":82},[72,80057,80058,80060,80063],{"class":74,"line":33353},[72,80059,79839],{"class":82},[72,80061,80062],{"class":366},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[72,80064,31884],{"class":82},[72,80066,80067],{"class":74,"line":33364},[72,80068,78310],{"class":82},[72,80070,80071],{"class":74,"line":33370},[72,80072,79804],{"class":82},[72,80074,80075,80077,80080],{"class":74,"line":33390},[72,80076,79809],{"class":82},[72,80078,80079],{"class":366},"'3997403'",[72,80081,31884],{"class":82},[72,80083,80084,80086,80089],{"class":74,"line":33406},[72,80085,79819],{"class":82},[72,80087,80088],{"class":366},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[72,80090,31884],{"class":82},[72,80092,80093,80095,80098],{"class":74,"line":33412},[72,80094,79829],{"class":82},[72,80096,80097],{"class":366},"'100.00'",[72,80099,31884],{"class":82},[72,80101,80102,80104,80107],{"class":74,"line":33426},[72,80103,79839],{"class":82},[72,80105,80106],{"class":366},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[72,80108,31884],{"class":82},[72,80110,80111],{"class":74,"line":33432},[72,80112,78310],{"class":82},[72,80114,80115],{"class":74,"line":33438},[72,80116,79804],{"class":82},[72,80118,80119,80121,80124],{"class":74,"line":33449},[72,80120,79809],{"class":82},[72,80122,80123],{"class":366},"'3998274'",[72,80125,31884],{"class":82},[72,80127,80128,80130,80133],{"class":74,"line":33455},[72,80129,79819],{"class":82},[72,80131,80132],{"class":366},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[72,80134,31884],{"class":82},[72,80136,80137,80139,80141],{"class":74,"line":33461},[72,80138,79829],{"class":82},[72,80140,80009],{"class":366},[72,80142,31884],{"class":82},[72,80144,80145,80147,80150],{"class":74,"line":33471},[72,80146,79839],{"class":82},[72,80148,80149],{"class":366},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[72,80151,31884],{"class":82},[72,80153,80154],{"class":74,"line":33477},[72,80155,78310],{"class":82},[72,80157,80158],{"class":74,"line":33488},[72,80159,53527],{"class":82},[72,80161,80162],{"class":74,"line":33494},[72,80163,2828],{"emptyLinePlaceholder":490},[72,80165,80166],{"class":74,"line":33504},[72,80167,80168],{"class":621},"    \u002F\u002F 1.渲染函数\n",[72,80170,80171,80173,80175,80177,80179],{"class":74,"line":33509},[72,80172,70502],{"class":78},[72,80174,70505],{"class":358},[72,80176,564],{"class":82},[72,80178,4308],{"class":5642},[72,80180,12868],{"class":82},[72,80182,80183],{"class":74,"line":33515},[72,80184,80185],{"class":621},"      \u002F\u002F 声明空字符串\n",[72,80187,80188,80191,80194,80196],{"class":74,"line":33564},[72,80189,80190],{"class":78},"      let",[72,80192,80193],{"class":82}," str ",[72,80195,609],{"class":78},[72,80197,70522],{"class":366},[72,80199,80200],{"class":74,"line":33611},[72,80201,70527],{"class":621},[72,80203,80204,80206,80209,80211,80214,80217],{"class":74,"line":33616},[72,80205,58425],{"class":82},[72,80207,80208],{"class":358},"forEach",[72,80210,564],{"class":82},[72,80212,80213],{"class":5642},"item",[72,80215,80216],{"class":78}," =>",[72,80218,15998],{"class":82},[72,80220,80221,80223,80226,80229,80231,80234,80236,80239,80242,80244],{"class":74,"line":33622},[72,80222,61688],{"class":78},[72,80224,80225],{"class":82}," { ",[72,80227,80228],{"class":362},"name",[72,80230,12861],{"class":82},[72,80232,80233],{"class":362},"price",[72,80235,12861],{"class":82},[72,80237,80238],{"class":362},"picture",[72,80240,80241],{"class":82}," } ",[72,80243,609],{"class":78},[72,80245,80246],{"class":82}," item\n",[72,80248,80249,80252,80254],{"class":74,"line":33641},[72,80250,80251],{"class":82},"        str ",[72,80253,9903],{"class":78},[72,80255,70586],{"class":366},[72,80257,80258],{"class":74,"line":33647},[72,80259,80260],{"class":366},"          \u003Cdiv class=\"item\">\n",[72,80262,80263,80266,80268],{"class":74,"line":33667},[72,80264,80265],{"class":366},"            \u003Cimg src=\"${",[72,80267,80238],{"class":82},[72,80269,80270],{"class":366},"}\" alt=\"\">\n",[72,80272,80273,80276,80278],{"class":74,"line":33673},[72,80274,80275],{"class":366},"            \u003Cp class=\"name\">${",[72,80277,80228],{"class":82},[72,80279,80280],{"class":366},"}\u003C\u002Fp>\n",[72,80282,80283,80286,80288],{"class":74,"line":33679},[72,80284,80285],{"class":366},"            \u003Cp class=\"price\">${",[72,80287,80233],{"class":82},[72,80289,80280],{"class":366},[72,80291,80292],{"class":74,"line":33689},[72,80293,80294],{"class":366},"          \u003C\u002Fdiv>\n",[72,80296,80297],{"class":74,"line":33694},[72,80298,80299],{"class":366},"        `\n",[72,80301,80302],{"class":74,"line":33700},[72,80303,65233],{"class":82},[72,80305,80306],{"class":74,"line":33716},[72,80307,80308],{"class":621},"      \u002F\u002F 追加给List\n",[72,80310,80311,80313,80315,80317,80320,80322,80324],{"class":74,"line":33761},[72,80312,56189],{"class":82},[72,80314,54817],{"class":358},[72,80316,564],{"class":82},[72,80318,80319],{"class":366},"'.list'",[72,80321,74667],{"class":82},[72,80323,609],{"class":78},[72,80325,74403],{"class":82},[72,80327,80328],{"class":74,"line":33767},[72,80329,2615],{"class":82},[72,80331,80332],{"class":74,"line":33773},[72,80333,80334],{"class":621},"    \u002F\u002F 页面一打开就需要渲染\n",[72,80336,80337,80340],{"class":74,"line":33779},[72,80338,80339],{"class":358},"    render",[72,80341,80342],{"class":82},"(goodsList)\n",[72,80344,80345],{"class":74,"line":33790},[72,80346,80347],{"class":621},"    \u002F\u002F 2.过滤筛选\n",[72,80349,80350,80352,80354,80356,80359,80361,80363,80365,80367,80369,80371,80373],{"class":74,"line":33796},[72,80351,52825],{"class":82},[72,80353,54817],{"class":358},[72,80355,564],{"class":82},[72,80357,80358],{"class":366},"'.filter'",[72,80360,31244],{"class":82},[72,80362,58231],{"class":358},[72,80364,564],{"class":82},[72,80366,58236],{"class":366},[72,80368,12861],{"class":82},[72,80370,637],{"class":5642},[72,80372,80216],{"class":78},[72,80374,15998],{"class":82},[72,80376,80377],{"class":74,"line":33802},[72,80378,80379],{"class":621},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[72,80381,80382,80384,80386,80389,80391,80393,80395,80397],{"class":74,"line":33808},[72,80383,58646],{"class":78},[72,80385,80225],{"class":82},[72,80387,80388],{"class":362},"tagName",[72,80390,12861],{"class":82},[72,80392,31955],{"class":362},[72,80394,80241],{"class":82},[72,80396,609],{"class":78},[72,80398,80399],{"class":82}," e.target\n",[72,80401,80402],{"class":74,"line":33826},[72,80403,80404],{"class":621},"      \u002F\u002F 判断\n",[72,80406,80407,80409,80411,80413,80415],{"class":74,"line":33840},[72,80408,54898],{"class":78},[72,80410,67452],{"class":82},[72,80412,54904],{"class":78},[72,80414,68674],{"class":366},[72,80416,12868],{"class":82},[72,80418,80419],{"class":74,"line":33849},[72,80420,80421],{"class":621},"        \u002F\u002F console.log(11)\n",[72,80423,80424],{"class":74,"line":33858},[72,80425,80426],{"class":621},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[72,80428,80429],{"class":74,"line":33867},[72,80430,80431],{"class":621},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[72,80433,80434,80436,80438,80440],{"class":74,"line":33876},[72,80435,52248],{"class":78},[72,80437,52251],{"class":82},[72,80439,609],{"class":78},[72,80441,80442],{"class":82}," goodsList\n",[72,80444,80445,80447,80450,80452,80455],{"class":74,"line":33882},[72,80446,2925],{"class":78},[72,80448,80449],{"class":82}," (dataset.index ",[72,80451,54904],{"class":78},[72,80453,80454],{"class":366}," '1'",[72,80456,12868],{"class":82},[72,80458,80459,80462,80464,80467,80470,80472,80474,80476,80479,80481,80483,80486,80488,80490,80492],{"class":74,"line":33888},[72,80460,80461],{"class":82},"          arr ",[72,80463,609],{"class":78},[72,80465,80466],{"class":82}," goodsList.",[72,80468,80469],{"class":358},"filter",[72,80471,564],{"class":82},[72,80473,80213],{"class":5642},[72,80475,80216],{"class":78},[72,80477,80478],{"class":82}," item.price ",[72,80480,2139],{"class":78},[72,80482,4521],{"class":362},[72,80484,80485],{"class":78}," &&",[72,80487,80478],{"class":82},[72,80489,2017],{"class":78},[72,80491,6180],{"class":362},[72,80493,570],{"class":82},[72,80495,80496,80499,80501,80503,80505,80507,80510],{"class":74,"line":33896},[72,80497,80498],{"class":82},"        } ",[72,80500,2130],{"class":78},[72,80502,2133],{"class":78},[72,80504,80449],{"class":82},[72,80506,54904],{"class":78},[72,80508,80509],{"class":366}," '2'",[72,80511,12868],{"class":82},[72,80513,80514,80516,80518,80520,80522,80524,80526,80528,80530,80532,80534,80536,80538,80540,80543],{"class":74,"line":33901},[72,80515,80461],{"class":82},[72,80517,609],{"class":78},[72,80519,80466],{"class":82},[72,80521,80469],{"class":358},[72,80523,564],{"class":82},[72,80525,80213],{"class":5642},[72,80527,80216],{"class":78},[72,80529,80478],{"class":82},[72,80531,2139],{"class":78},[72,80533,6180],{"class":362},[72,80535,80485],{"class":78},[72,80537,80478],{"class":82},[72,80539,2017],{"class":78},[72,80541,80542],{"class":362}," 300",[72,80544,570],{"class":82},[72,80546,80547,80549,80551,80553,80555,80557,80560],{"class":74,"line":33907},[72,80548,80498],{"class":82},[72,80550,2130],{"class":78},[72,80552,2133],{"class":78},[72,80554,80449],{"class":82},[72,80556,54904],{"class":78},[72,80558,80559],{"class":366}," '3'",[72,80561,12868],{"class":82},[72,80563,80564,80566,80568,80570,80572,80574,80576,80578,80580,80582,80584],{"class":74,"line":33918},[72,80565,80461],{"class":82},[72,80567,609],{"class":78},[72,80569,80466],{"class":82},[72,80571,80469],{"class":358},[72,80573,564],{"class":82},[72,80575,80213],{"class":5642},[72,80577,80216],{"class":78},[72,80579,80478],{"class":82},[72,80581,2139],{"class":78},[72,80583,80542],{"class":362},[72,80585,570],{"class":82},[72,80587,80588],{"class":74,"line":33924},[72,80589,2957],{"class":82},[72,80591,80592],{"class":74,"line":33944},[72,80593,80594],{"class":621},"        \u002F\u002F 渲染函数\n",[72,80596,80597,80599],{"class":74,"line":33950},[72,80598,70826],{"class":358},[72,80600,52830],{"class":82},[72,80602,80603],{"class":74,"line":33956},[72,80604,52816],{"class":82},[72,80606,80607],{"class":74,"line":33962},[72,80608,2828],{"emptyLinePlaceholder":490},[72,80610,80611],{"class":74,"line":33979},[72,80612,33879],{"class":82},[72,80614,80615,80617,80619],{"class":74,"line":33985},[72,80616,52835],{"class":82},[72,80618,52231],{"class":51718},[72,80620,51725],{"class":82},[72,80622,80623,80625,80627],{"class":74,"line":33991},[72,80624,52203],{"class":82},[72,80626,52218],{"class":51718},[72,80628,51725],{"class":82},[72,80630,80631],{"class":74,"line":33997},[72,80632,2828],{"emptyLinePlaceholder":490},[72,80634,80635,80637,80639],{"class":74,"line":34003},[72,80636,52203],{"class":82},[72,80638,51053],{"class":51718},[72,80640,51725],{"class":82},[85,80642,80644],{"id":80643},"_410-深入了解对象","4.10 深入了解对象",[531,80646,80648],{"id":80647},"_4101-创建对象","4.10.1 创建对象",[15,80650,80651],{},[1891,80652],{"alt":68,"src":80653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[15,80655,80656],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[531,80658,80660],{"id":80659},"_4102-构造函数","4.10.2 构造函数",[15,80662,80663,80666],{},[707,80664,80665],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[15,80668,80669,80672],{},[707,80670,80671],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[63,80674,80676],{"className":51051,"code":80675,"language":51053,"meta":68,"style":68},"\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",[34,80677,80678,80686,80691,80712,80725,80737,80749,80753,80758,80785,80790,80817],{"__ignoreMap":68},[72,80679,80680,80682,80684],{"class":74,"line":75},[72,80681,1464],{"class":82},[72,80683,52231],{"class":51718},[72,80685,51725],{"class":82},[72,80687,80688],{"class":74,"line":370},[72,80689,80690],{"class":621},"\u002F\u002F例：\n",[72,80692,80693,80695,80698,80700,80702,80704,80706,80708,80710],{"class":74,"line":1608},[72,80694,54867],{"class":78},[72,80696,80697],{"class":358}," Pig",[72,80699,564],{"class":82},[72,80701,80228],{"class":5642},[72,80703,932],{"class":82},[72,80705,70639],{"class":5642},[72,80707,932],{"class":82},[72,80709,70656],{"class":5642},[72,80711,12868],{"class":82},[72,80713,80714,80717,80720,80722],{"class":74,"line":1623},[72,80715,80716],{"class":362},"    this",[72,80718,80719],{"class":82},".name",[72,80721,609],{"class":78},[72,80723,80724],{"class":82},"name\n",[72,80726,80727,80729,80732,80734],{"class":74,"line":1629},[72,80728,80716],{"class":362},[72,80730,80731],{"class":82},".age",[72,80733,609],{"class":78},[72,80735,80736],{"class":82},"age\n",[72,80738,80739,80741,80744,80746],{"class":74,"line":1643},[72,80740,80716],{"class":362},[72,80742,80743],{"class":82},".gender",[72,80745,609],{"class":78},[72,80747,80748],{"class":82},"gender    \n",[72,80750,80751],{"class":74,"line":1649},[72,80752,1994],{"class":82},[72,80754,80755],{"class":74,"line":1740},[72,80756,80757],{"class":621},"\u002F\u002F创建佩奇对象\n",[72,80759,80760,80762,80765,80767,80769,80771,80774,80776,80778,80780,80783],{"class":74,"line":1746},[72,80761,7218],{"class":78},[72,80763,80764],{"class":362}," Peppa",[72,80766,12143],{"class":78},[72,80768,80697],{"class":358},[72,80770,564],{"class":82},[72,80772,80773],{"class":366},"'佩奇'",[72,80775,932],{"class":82},[72,80777,898],{"class":362},[72,80779,932],{"class":82},[72,80781,80782],{"class":366},"'女'",[72,80784,570],{"class":82},[72,80786,80787],{"class":74,"line":1758},[72,80788,80789],{"class":621},"\u002F\u002F创建乔治对象\n",[72,80791,80792,80794,80797,80799,80801,80803,80806,80808,80810,80812,80815],{"class":74,"line":2041},[72,80793,7218],{"class":78},[72,80795,80796],{"class":362}," George",[72,80798,12143],{"class":78},[72,80800,80697],{"class":358},[72,80802,564],{"class":82},[72,80804,80805],{"class":366},"'乔治'",[72,80807,932],{"class":82},[72,80809,634],{"class":362},[72,80811,932],{"class":82},[72,80813,80814],{"class":366},"'男'",[72,80816,570],{"class":82},[72,80818,80819,80821,80823],{"class":74,"line":2046},[72,80820,52203],{"class":82},[72,80822,52231],{"class":51718},[72,80824,51725],{"class":82},[15,80826,80827],{},[1891,80828],{"alt":68,"src":80829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[15,80831,80832],{},[1891,80833],{"alt":68,"src":80834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[15,80836,80837],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[15,80839,80840],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[15,80842,80843],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[15,80845,80846],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[15,80848,80849],{},"这里用等号是因为：对象.属性=值",[15,80851,80852],{},"①利用对象字面量创建对象",[15,80854,80855],{},"const o={",[15,80857,80858],{},"name:'pink'",[15,80860,80861],{},"} ②利用new Object创建对象",[15,80863,80864],{},"const o=new Object({name:'pink'})",[15,80866,80867],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[15,80869,80870],{},"构造函数创建对象的执行过程：",[15,80872,80873],{},[1891,80874],{"alt":68,"src":80875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[531,80877,80879],{"id":80878},"_4103-实例成员","4.10.3 实例成员",[15,80881,80882],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[22,80884,80885,80888,80891],{},[25,80886,80887],{},"实例对象的属性和方法即为实例成员",[25,80889,80890],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[25,80892,80893],{},"构造函数创建的实例对象彼此独立互不影响",[531,80895,80897],{"id":80896},"_4104-静态成员","4.10.4 静态成员",[15,80899,80900],{},[1891,80901],{"alt":68,"src":80902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[15,80904,80905],{},"静态成员有Date.now() Math.PI Math.random()",[15,80907,80908],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[15,80910,80911],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[15,80913,80914],{},"function Pig(name) n {",[15,80916,80917],{},"this.name=name",[15,80919,1500],{},[15,80921,80922],{},"Pig.eyes=2",[15,80924,80925],{},"Pig.sayHai=function () { console.log(this) }",[15,80927,80928],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[15,80930,80931],{},"console.log(Pig.eyes) \u002F\u002F2",[15,80933,11758],{},[22,80935,80936,80939,80942,80945,80948],{},[25,80937,80938],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[25,80940,80941],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[25,80943,80944],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[25,80946,80947],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[25,80949,80950],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[15,80952,80953],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[531,80955,80957],{"id":80956},"_4105-内置构造函数","4.10.5 内置构造函数",[15,80959,80960],{},"内置构造函数包含：",[15,80962,80963],{},[1891,80964],{"alt":68,"src":80965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[15,80967,80968],{},[1891,80969],{"alt":68,"src":80970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[15,80972,80973],{},"这些基本数据类型，js对他们进行了包装",[52231,80975,80976],{},"\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",[22423,80978,80980],{"id":80979},"_41051-object","4.10.5.1 Object",[15,80982,80983],{},"Object 是内置的构造函数，用于创建普通对象",[15,80985,80986],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[63,80988,80990],{"className":51051,"code":80989,"language":51053,"meta":68,"style":68},"const user=new Object({name:'小明',age:15})\n",[34,80991,80992],{"__ignoreMap":68},[72,80993,80994],{"class":74,"line":75},[72,80995,80989],{"class":82},[15,80997,80998],{},"三个常用的静态方法：",[23335,81000,81002],{"id":81001},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[15,81004,81005],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[15,81007,81008],{},[1891,81009],{"alt":68,"src":81010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[15,81012,81013],{},[1891,81014],{"alt":68,"src":81015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[63,81017,81019],{"className":53485,"code":81018,"language":53487,"meta":68,"style":68},"\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",[34,81020,81021,81029,81037,81042,81047,81052,81057,81062,81067,81075],{"__ignoreMap":68},[72,81022,81023,81025,81027],{"class":74,"line":75},[72,81024,1464],{"class":82},[72,81026,52218],{"class":51718},[72,81028,51725],{"class":82},[72,81030,81031,81033,81035],{"class":74,"line":370},[72,81032,52562],{"class":82},[72,81034,52231],{"class":51718},[72,81036,51725],{"class":82},[72,81038,81039],{"class":74,"line":1608},[72,81040,81041],{"class":82},"    const o = { name: 'pink', age: 6 }\n",[72,81043,81044],{"class":74,"line":1623},[72,81045,81046],{"class":82},"    \u002F\u002F 获得所有属性名\n",[72,81048,81049],{"class":74,"line":1629},[72,81050,81051],{"class":82},"    const arr = Object.keys(o)\n",[72,81053,81054],{"class":74,"line":1643},[72,81055,81056],{"class":82},"    console.log(arr)\n",[72,81058,81059],{"class":74,"line":1649},[72,81060,81061],{"class":82},"    \u002F\u002F 获得所有属性值\n",[72,81063,81064],{"class":74,"line":1740},[72,81065,81066],{"class":82},"    console.log(Object.values(o))\n",[72,81068,81069,81071,81073],{"class":74,"line":1746},[72,81070,52835],{"class":82},[72,81072,52231],{"class":51718},[72,81074,51725],{"class":82},[72,81076,81077,81079,81081],{"class":74,"line":1758},[72,81078,52203],{"class":82},[72,81080,52218],{"class":51718},[72,81082,51725],{"class":82},[23335,81084,81086],{"id":81085},"_410512-object-assign","4.10.5.1.2 Object. assign",[15,81088,81089],{},"Object.assign(oo,o)",[15,81091,81092],{},"后的东西添加给前 是追加",[15,81094,81095],{},[1891,81096],{"alt":68,"src":81097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[15,81099,81100],{},[1891,81101],{"alt":68,"src":81102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[63,81104,81106],{"className":53485,"code":81105,"language":53487,"meta":68,"style":68},"\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",[34,81107,81108,81116,81124,81128,81132,81136,81140,81144,81148,81153,81158,81163,81168,81173,81181],{"__ignoreMap":68},[72,81109,81110,81112,81114],{"class":74,"line":75},[72,81111,1464],{"class":82},[72,81113,52218],{"class":51718},[72,81115,51725],{"class":82},[72,81117,81118,81120,81122],{"class":74,"line":370},[72,81119,52562],{"class":82},[72,81121,52231],{"class":51718},[72,81123,51725],{"class":82},[72,81125,81126],{"class":74,"line":1608},[72,81127,81041],{"class":82},[72,81129,81130],{"class":74,"line":1623},[72,81131,81046],{"class":82},[72,81133,81134],{"class":74,"line":1629},[72,81135,81051],{"class":82},[72,81137,81138],{"class":74,"line":1643},[72,81139,81056],{"class":82},[72,81141,81142],{"class":74,"line":1649},[72,81143,81061],{"class":82},[72,81145,81146],{"class":74,"line":1740},[72,81147,81066],{"class":82},[72,81149,81150],{"class":74,"line":1746},[72,81151,81152],{"class":82},"    const oo = {}\n",[72,81154,81155],{"class":74,"line":1758},[72,81156,81157],{"class":82},"    Object.assign(oo, o)\n",[72,81159,81160],{"class":74,"line":2041},[72,81161,81162],{"class":82},"    console.log(oo)\n",[72,81164,81165],{"class":74,"line":2046},[72,81166,81167],{"class":82},"    Object.assign(o, { gender: '女' })\n",[72,81169,81170],{"class":74,"line":2052},[72,81171,81172],{"class":82},"    console.log(o)\n",[72,81174,81175,81177,81179],{"class":74,"line":2057},[72,81176,52835],{"class":82},[72,81178,52231],{"class":51718},[72,81180,51725],{"class":82},[72,81182,81183,81185,81187],{"class":74,"line":2071},[72,81184,52203],{"class":82},[72,81186,52218],{"class":51718},[72,81188,51725],{"class":82},[15,81190,81191],{},[1891,81192],{"alt":68,"src":81193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[22423,81195,81197],{"id":81196},"_41052-array","4.10.5.2 Array",[15,81199,81200],{},"Array 是内置的构造函数，用于创建数组",[15,81202,81203],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[63,81205,81207],{"className":51051,"code":81206,"language":51053,"meta":68,"style":68},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[34,81208,81209,81214],{"__ignoreMap":68},[72,81210,81211],{"class":74,"line":75},[72,81212,81213],{"class":82},"const arr=new Array(3,5)\n",[72,81215,81216],{"class":74,"line":370},[72,81217,81218],{"class":82},"console.log(arr)  \u002F\u002F[3,5]\n",[15,81220,81221],{},"Array的实例方法，这个方法是实例成员",[15,81223,81224],{},[1891,81225],{"alt":68,"src":81226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[23335,81228,81230],{"id":81229},"_410521-reduce","4.10.5.2.1 reduce",[15,81232,81233],{},[1891,81234],{"alt":68,"src":81235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[63,81237,81239],{"className":53485,"code":81238,"language":53487,"meta":68,"style":68},"\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",[34,81240,81241,81249,81257,81262,81267,81272,81277,81281,81286,81291,81296,81300,81305,81310,81314,81319,81324,81329,81337],{"__ignoreMap":68},[72,81242,81243,81245,81247],{"class":74,"line":75},[72,81244,1464],{"class":82},[72,81246,52218],{"class":51718},[72,81248,51725],{"class":82},[72,81250,81251,81253,81255],{"class":74,"line":370},[72,81252,52562],{"class":82},[72,81254,52231],{"class":51718},[72,81256,51725],{"class":82},[72,81258,81259],{"class":74,"line":1608},[72,81260,81261],{"class":82},"    const arr = [1, 5, 8]\n",[72,81263,81264],{"class":74,"line":1623},[72,81265,81266],{"class":82},"    \u002F\u002F 1.没有初始值\n",[72,81268,81269],{"class":74,"line":1629},[72,81270,81271],{"class":82},"    const total = arr.reduce(function (prev, current) {\n",[72,81273,81274],{"class":74,"line":1643},[72,81275,81276],{"class":82},"      return prev + current\n",[72,81278,81279],{"class":74,"line":1649},[72,81280,33879],{"class":82},[72,81282,81283],{"class":74,"line":1740},[72,81284,81285],{"class":82},"    console.log(total)   \u002F\u002F14\n",[72,81287,81288],{"class":74,"line":1746},[72,81289,81290],{"class":82},"    \u002F\u002F 2.有初始值\n",[72,81292,81293],{"class":74,"line":1758},[72,81294,81295],{"class":82},"    const total1 = arr.reduce(function (prev, current) {\n",[72,81297,81298],{"class":74,"line":2041},[72,81299,81276],{"class":82},[72,81301,81302],{"class":74,"line":2046},[72,81303,81304],{"class":82},"    }, 10)\n",[72,81306,81307],{"class":74,"line":2052},[72,81308,81309],{"class":82},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[72,81311,81312],{"class":74,"line":2057},[72,81313,2828],{"emptyLinePlaceholder":490},[72,81315,81316],{"class":74,"line":2071},[72,81317,81318],{"class":82},"    \u002F\u002F 3.箭头函数写法\n",[72,81320,81321],{"class":74,"line":2076},[72,81322,81323],{"class":82},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[72,81325,81326],{"class":74,"line":2082},[72,81327,81328],{"class":82},"    console.log(total2)   \u002F\u002F24\n",[72,81330,81331,81333,81335],{"class":74,"line":2103},[72,81332,52835],{"class":82},[72,81334,52231],{"class":51718},[72,81336,51725],{"class":82},[72,81338,81339,81341,81343],{"class":74,"line":2108},[72,81340,52203],{"class":82},[72,81342,52218],{"class":51718},[72,81344,51725],{"class":82},[15,81346,81347],{},"执行过程：",[22,81349,81350,81353,81356],{},[25,81351,81352],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[25,81354,81355],{},"每一次循环，把返回值给作为下一次循环的上一次值",[25,81357,81358],{},"如果有起始值，则起始值作为上一次值",[63,81360,81362],{"className":53485,"code":81361,"language":53487,"meta":68,"style":68},"\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",[34,81363,81364,81372,81380,81384,81388,81392,81396,81400,81404,81409,81414,81419,81424,81429,81433,81437,81441,81445,81449,81453,81458,81462,81467,81471,81476,81481,81485,81489,81493,81501],{"__ignoreMap":68},[72,81365,81366,81368,81370],{"class":74,"line":75},[72,81367,1464],{"class":82},[72,81369,52218],{"class":51718},[72,81371,51725],{"class":82},[72,81373,81374,81376,81378],{"class":74,"line":370},[72,81375,52562],{"class":82},[72,81377,52231],{"class":51718},[72,81379,51725],{"class":82},[72,81381,81382],{"class":74,"line":1608},[72,81383,81261],{"class":82},[72,81385,81386],{"class":74,"line":1623},[72,81387,81266],{"class":82},[72,81389,81390],{"class":74,"line":1629},[72,81391,81271],{"class":82},[72,81393,81394],{"class":74,"line":1643},[72,81395,81276],{"class":82},[72,81397,81398],{"class":74,"line":1649},[72,81399,33879],{"class":82},[72,81401,81402],{"class":74,"line":1740},[72,81403,81285],{"class":82},[72,81405,81406],{"class":74,"line":1746},[72,81407,81408],{"class":82},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[72,81410,81411],{"class":74,"line":1758},[72,81412,81413],{"class":82},"    \u002F\u002F     1              5                    6\n",[72,81415,81416],{"class":74,"line":2041},[72,81417,81418],{"class":82},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[72,81420,81421],{"class":74,"line":2046},[72,81422,81423],{"class":82},"    \u002F\u002F     6              8                    14\n",[72,81425,81426],{"class":74,"line":2052},[72,81427,81428],{"class":82},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[72,81430,81431],{"class":74,"line":2057},[72,81432,81290],{"class":82},[72,81434,81435],{"class":74,"line":2071},[72,81436,81295],{"class":82},[72,81438,81439],{"class":74,"line":2076},[72,81440,81276],{"class":82},[72,81442,81443],{"class":74,"line":2082},[72,81444,81304],{"class":82},[72,81446,81447],{"class":74,"line":2103},[72,81448,81309],{"class":82},[72,81450,81451],{"class":74,"line":2108},[72,81452,81408],{"class":82},[72,81454,81455],{"class":74,"line":2122},[72,81456,81457],{"class":82},"    \u002F\u002F     10             1                     11\n",[72,81459,81460],{"class":74,"line":2127},[72,81461,81418],{"class":82},[72,81463,81464],{"class":74,"line":2156},[72,81465,81466],{"class":82},"    \u002F\u002F     11             5                    16\n",[72,81468,81469],{"class":74,"line":2161},[72,81470,81418],{"class":82},[72,81472,81473],{"class":74,"line":2178},[72,81474,81475],{"class":82},"    \u002F\u002F     16             8                    24\n",[72,81477,81478],{"class":74,"line":2183},[72,81479,81480],{"class":82},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[72,81482,81483],{"class":74,"line":2188},[72,81484,81318],{"class":82},[72,81486,81487],{"class":74,"line":2193},[72,81488,81323],{"class":82},[72,81490,81491],{"class":74,"line":2207},[72,81492,81328],{"class":82},[72,81494,81495,81497,81499],{"class":74,"line":2212},[72,81496,52835],{"class":82},[72,81498,52231],{"class":51718},[72,81500,51725],{"class":82},[72,81502,81503,81505,81507],{"class":74,"line":3005},[72,81504,52203],{"class":82},[72,81506,52218],{"class":51718},[72,81508,51725],{"class":82},[23335,81510,81512],{"id":81511},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[15,81514,81515],{},[1891,81516],{"alt":68,"src":81517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[63,81519,81521],{"className":53485,"code":81520,"language":53487,"meta":68,"style":68},"\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",[34,81522,81523,81531,81539,81544,81549,81554,81559,81563,81568,81573,81578,81583,81588,81593,81597,81602,81606,81611,81619],{"__ignoreMap":68},[72,81524,81525,81527,81529],{"class":74,"line":75},[72,81526,1464],{"class":82},[72,81528,52218],{"class":51718},[72,81530,51725],{"class":82},[72,81532,81533,81535,81537],{"class":74,"line":370},[72,81534,52562],{"class":82},[72,81536,52231],{"class":51718},[72,81538,51725],{"class":82},[72,81540,81541],{"class":74,"line":1608},[72,81542,81543],{"class":82},"    const arr = [\n",[72,81545,81546],{"class":74,"line":1623},[72,81547,81548],{"class":82},"      { name: '张三', salary: 10000 },\n",[72,81550,81551],{"class":74,"line":1629},[72,81552,81553],{"class":82},"      { name: '李四', salary: 10000 },\n",[72,81555,81556],{"class":74,"line":1643},[72,81557,81558],{"class":82},"      { name: '王五', salary: 10000 }\n",[72,81560,81561],{"class":74,"line":1649},[72,81562,53527],{"class":82},[72,81564,81565],{"class":74,"line":1740},[72,81566,81567],{"class":82},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[72,81569,81570],{"class":74,"line":1746},[72,81571,81572],{"class":82},"    \u002F\u002F prev是累计值\n",[72,81574,81575],{"class":74,"line":1758},[72,81576,81577],{"class":82},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[72,81579,81580],{"class":74,"line":2041},[72,81581,81582],{"class":82},"    console.log(total)\n",[72,81584,81585],{"class":74,"line":2046},[72,81586,81587],{"class":82},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[72,81589,81590],{"class":74,"line":2052},[72,81591,81592],{"class":82},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[72,81594,81595],{"class":74,"line":2057},[72,81596,81587],{"class":82},[72,81598,81599],{"class":74,"line":2071},[72,81600,81601],{"class":82},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[72,81603,81604],{"class":74,"line":2076},[72,81605,81587],{"class":82},[72,81607,81608],{"class":74,"line":2082},[72,81609,81610],{"class":82},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[72,81612,81613,81615,81617],{"class":74,"line":2103},[72,81614,52835],{"class":82},[72,81616,52231],{"class":51718},[72,81618,51725],{"class":82},[72,81620,81621,81623,81625],{"class":74,"line":2108},[72,81622,52203],{"class":82},[72,81624,52218],{"class":51718},[72,81626,51725],{"class":82},[23335,81628,81630],{"id":81629},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[15,81632,81633],{},[1891,81634],{"alt":68,"src":81635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[15,81637,81638],{},[1891,81639],{"alt":68,"src":81640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[22,81642,81643],{},[25,81644,81645],{},"find()",[15,81647,81648],{},"循环查找，找到第一个就ok",[15,81650,81651],{},[257,81652,81655],{"href":81653,"rel":81654},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[261],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[63,81657,81659],{"className":51051,"code":81658,"language":51053,"meta":68,"style":68},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[34,81660,81661,81666,81671],{"__ignoreMap":68},[72,81662,81663],{"class":74,"line":75},[72,81664,81665],{"class":82},"const array1 = [5, 12, 8, 130, 44]\n",[72,81667,81668],{"class":74,"line":370},[72,81669,81670],{"class":82},"const found = array1.find((element) => element > 10)\n",[72,81672,81673],{"class":74,"line":1608},[72,81674,81675],{"class":82},"console.log(found)  \u002F\u002F12\n",[15,81677,81678,81680,81681,81686,81687,81690,81691,81693,81694,81699,81700,81702,81703,81705,81706,81708,81709],{},[34,81679,81645],{}," 方法是一个",[257,81682,81685],{"href":81683,"rel":81684},"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",[261],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[34,81688,81689],{},"callbackFn"," 函数，直到 ",[34,81692,81689],{}," 返回一个",[257,81695,81698],{"href":81696,"rel":81697},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[261],"真值","。然后 ",[34,81701,81645],{}," 返回该元素并停止迭代数组。如果 ",[34,81704,81689],{}," 从未返回真值，则 ",[34,81707,81645],{}," 返回 ",[34,81710,81711],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[63,81713,81715],{"className":53485,"code":81714,"language":53487,"meta":68,"style":68},"\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",[34,81716,81717,81725,81733,81738,81743,81748,81752,81757,81762,81766,81771,81776,81780,81784,81789,81794,81798,81802,81807,81812,81817,81822,81827,81831,81836,81841,81846,81851,81855,81860,81868],{"__ignoreMap":68},[72,81718,81719,81721,81723],{"class":74,"line":75},[72,81720,1464],{"class":82},[72,81722,52218],{"class":51718},[72,81724,51725],{"class":82},[72,81726,81727,81729,81731],{"class":74,"line":370},[72,81728,52562],{"class":82},[72,81730,52231],{"class":51718},[72,81732,51725],{"class":82},[72,81734,81735],{"class":74,"line":1608},[72,81736,81737],{"class":82},"    const arr = ['red', 'blue', 'green']\n",[72,81739,81740],{"class":74,"line":1623},[72,81741,81742],{"class":82},"    const found = arr.find(item => item === 'pink')\n",[72,81744,81745],{"class":74,"line":1629},[72,81746,81747],{"class":82},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[72,81749,81750],{"class":74,"line":1643},[72,81751,2828],{"emptyLinePlaceholder":490},[72,81753,81754],{"class":74,"line":1649},[72,81755,81756],{"class":82},"    \u002F\u002F 使用场景，用于查找数据\n",[72,81758,81759],{"class":74,"line":1740},[72,81760,81761],{"class":82},"    const arr1 = [\n",[72,81763,81764],{"class":74,"line":1746},[72,81765,79804],{"class":82},[72,81767,81768],{"class":74,"line":1758},[72,81769,81770],{"class":82},"        name: '小米',\n",[72,81772,81773],{"class":74,"line":2041},[72,81774,81775],{"class":82},"        price: 1999\n",[72,81777,81778],{"class":74,"line":2046},[72,81779,78310],{"class":82},[72,81781,81782],{"class":74,"line":2052},[72,81783,79804],{"class":82},[72,81785,81786],{"class":74,"line":2057},[72,81787,81788],{"class":82},"        name: '华为',\n",[72,81790,81791],{"class":74,"line":2071},[72,81792,81793],{"class":82},"        price: 3999\n",[72,81795,81796],{"class":74,"line":2076},[72,81797,52816],{"class":82},[72,81799,81800],{"class":74,"line":2082},[72,81801,53527],{"class":82},[72,81803,81804],{"class":74,"line":2103},[72,81805,81806],{"class":82},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[72,81808,81809],{"class":74,"line":2108},[72,81810,81811],{"class":82},"    \u002F\u002F const found1 = arr1.find(item => {\n",[72,81813,81814],{"class":74,"line":2122},[72,81815,81816],{"class":82},"    \u002F\u002F   if (item.name === '小米') {\n",[72,81818,81819],{"class":74,"line":2127},[72,81820,81821],{"class":82},"    \u002F\u002F     return item\n",[72,81823,81824],{"class":74,"line":2156},[72,81825,81826],{"class":82},"    \u002F\u002F   }\n",[72,81828,81829],{"class":74,"line":2161},[72,81830,63708],{"class":82},[72,81832,81833],{"class":74,"line":2178},[72,81834,81835],{"class":82},"    \u002F\u002F 另一种写法\n",[72,81837,81838],{"class":74,"line":2183},[72,81839,81840],{"class":82},"    const found1 = arr1.find(item => {\n",[72,81842,81843],{"class":74,"line":2188},[72,81844,81845],{"class":82},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[72,81847,81848],{"class":74,"line":2193},[72,81849,81850],{"class":82},"      return item.name = '小米'\n",[72,81852,81853],{"class":74,"line":2207},[72,81854,33879],{"class":82},[72,81856,81857],{"class":74,"line":2212},[72,81858,81859],{"class":82},"    console.log(found1)\n",[72,81861,81862,81864,81866],{"class":74,"line":3005},[72,81863,52835],{"class":82},[72,81865,52231],{"class":51718},[72,81867,51725],{"class":82},[72,81869,81870,81872,81874],{"class":74,"line":3019},[72,81871,52203],{"class":82},[72,81873,52218],{"class":51718},[72,81875,51725],{"class":82},[15,81877,81878],{},[1891,81879],{"alt":68,"src":81880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[15,81882,81883],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[22,81885,81886],{"start":370},[25,81887,81888],{},"every()返回的是布尔值",[15,81890,81891],{},[257,81892,81895],{"href":81893,"rel":81894},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[261],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[15,81897,81898],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[15,81900,81901],{},"some是只有有一个就没问题",[15,81903,81904],{},"every是必须全是才行",[63,81906,81910],{"className":81907,"code":81908,"language":81909,"meta":68,"style":68},"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",[34,81911,81912,81928,81942,81946,81955],{"__ignoreMap":68},[72,81913,81914,81916,81919,81921,81923,81926],{"class":74,"line":75},[72,81915,54867],{"class":78},[72,81917,81918],{"class":82}," isBigEnough(element, ",[72,81920,74476],{"class":78},[72,81922,12861],{"class":82},[72,81924,81925],{"class":78},"array",[72,81927,12868],{"class":82},[72,81929,81930,81933,81936,81938,81940],{"class":74,"line":370},[72,81931,81932],{"class":78},"  return",[72,81934,81935],{"class":82}," element ",[72,81937,2139],{"class":78},[72,81939,2466],{"class":362},[72,81941,1719],{"class":82},[72,81943,81944],{"class":74,"line":1608},[72,81945,1994],{"class":82},[72,81947,81948,81951,81953],{"class":74,"line":1623},[72,81949,81950],{"class":82},"[12, 5, 8, 130, 44].every(isBigEnough); ",[72,81952,33747],{"class":78},[72,81954,54934],{"class":82},[72,81956,81957,81960,81962],{"class":74,"line":1629},[72,81958,81959],{"class":82},"[12, 54, 18, 130, 44].every(isBigEnough); ",[72,81961,33747],{"class":78},[72,81963,58358],{"class":82},[63,81965,81967],{"className":53485,"code":81966,"language":53487,"meta":68,"style":68},"\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",[34,81968,81969,81977,81985,81990,81994,81999,82004,82012],{"__ignoreMap":68},[72,81970,81971,81973,81975],{"class":74,"line":75},[72,81972,1464],{"class":82},[72,81974,52218],{"class":51718},[72,81976,51725],{"class":82},[72,81978,81979,81981,81983],{"class":74,"line":370},[72,81980,52562],{"class":82},[72,81982,52231],{"class":51718},[72,81984,51725],{"class":82},[72,81986,81987],{"class":74,"line":1608},[72,81988,81989],{"class":82},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[72,81991,81992],{"class":74,"line":1623},[72,81993,78740],{"class":82},[72,81995,81996],{"class":74,"line":1629},[72,81997,81998],{"class":82},"    const flag = arr.every(item => item >= 10)\n",[72,82000,82001],{"class":74,"line":1643},[72,82002,82003],{"class":82},"    console.log(flag)    \u002F\u002Ftrue\n",[72,82005,82006,82008,82010],{"class":74,"line":1649},[72,82007,52835],{"class":82},[72,82009,52231],{"class":51718},[72,82011,51725],{"class":82},[72,82013,82014,82016,82018],{"class":74,"line":1740},[72,82015,52203],{"class":82},[72,82017,52218],{"class":51718},[72,82019,51725],{"class":82},[63,82021,82023],{"className":53485,"code":82022,"language":53487,"meta":68,"style":68},"\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",[34,82024,82025,82033,82041,82045,82050,82055,82060,82068],{"__ignoreMap":68},[72,82026,82027,82029,82031],{"class":74,"line":75},[72,82028,1464],{"class":82},[72,82030,52218],{"class":51718},[72,82032,51725],{"class":82},[72,82034,82035,82037,82039],{"class":74,"line":370},[72,82036,52562],{"class":82},[72,82038,52231],{"class":51718},[72,82040,51725],{"class":82},[72,82042,82043],{"class":74,"line":1608},[72,82044,81989],{"class":82},[72,82046,82047],{"class":74,"line":1623},[72,82048,82049],{"class":82},"    const arr = [10, 0, 5]\n",[72,82051,82052],{"class":74,"line":1629},[72,82053,82054],{"class":82},"    const flag = arr.some(item => item >= 10)\n",[72,82056,82057],{"class":74,"line":1643},[72,82058,82059],{"class":82},"    console.log(flag)   \u002F\u002Ftrue\n",[72,82061,82062,82064,82066],{"class":74,"line":1649},[72,82063,52835],{"class":82},[72,82065,52231],{"class":51718},[72,82067,51725],{"class":82},[72,82069,82070,82072,82074],{"class":74,"line":1740},[72,82071,52203],{"class":82},[72,82073,52218],{"class":51718},[72,82075,51725],{"class":82},[23335,82077,82079],{"id":82078},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[15,82081,82082],{},[1891,82083],{"alt":68,"src":82084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[63,82086,82088],{"className":51051,"code":82087,"language":51053,"meta":68,"style":68},"\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",[34,82089,82090,82100,82114,82118,82126,82140,82160,82172,82180,82187,82199,82211,82223,82235,82245,82255,82259,82267,82275,82279,82287,82299,82307,82329,82334,82339,82372,82380,82388,82392],{"__ignoreMap":68},[72,82091,82092,82094,82096,82098],{"class":74,"line":75},[72,82093,51715],{"class":82},[72,82095,51719],{"class":51718},[72,82097,51722],{"class":358},[72,82099,51725],{"class":82},[72,82101,82102,82104,82106,82108,82110,82112],{"class":74,"line":370},[72,82103,1464],{"class":82},[72,82105,51053],{"class":51718},[72,82107,51734],{"class":358},[72,82109,609],{"class":82},[72,82111,51739],{"class":366},[72,82113,51725],{"class":82},[72,82115,82116],{"class":74,"line":1608},[72,82117,2828],{"emptyLinePlaceholder":490},[72,82119,82120,82122,82124],{"class":74,"line":1623},[72,82121,1464],{"class":82},[72,82123,51752],{"class":51718},[72,82125,51725],{"class":82},[72,82127,82128,82130,82132,82134,82136,82138],{"class":74,"line":1629},[72,82129,52562],{"class":82},[72,82131,51762],{"class":51718},[72,82133,51765],{"class":358},[72,82135,609],{"class":82},[72,82137,51770],{"class":366},[72,82139,51725],{"class":82},[72,82141,82142,82144,82146,82148,82150,82152,82154,82156,82158],{"class":74,"line":1643},[72,82143,52562],{"class":82},[72,82145,51762],{"class":51718},[72,82147,15346],{"class":358},[72,82149,609],{"class":82},[72,82151,51809],{"class":366},[72,82153,51789],{"class":358},[72,82155,609],{"class":82},[72,82157,51816],{"class":366},[72,82159,51725],{"class":82},[72,82161,82162,82164,82166,82168,82170],{"class":74,"line":1649},[72,82163,52562],{"class":82},[72,82165,51825],{"class":51718},[72,82167,51828],{"class":82},[72,82169,51825],{"class":51718},[72,82171,51725],{"class":82},[72,82173,82174,82176,82178],{"class":74,"line":1740},[72,82175,52562],{"class":82},[72,82177,473],{"class":51718},[72,82179,51725],{"class":82},[72,82181,82182,82185],{"class":74,"line":1746},[72,82183,82184],{"class":51718},"    div",[72,82186,15998],{"class":82},[72,82188,82189,82191,82193,82195,82197],{"class":74,"line":1758},[72,82190,55189],{"class":362},[72,82192,51855],{"class":82},[72,82194,2151],{"class":362},[72,82196,51910],{"class":78},[72,82198,1719],{"class":82},[72,82200,82201,82203,82205,82207,82209],{"class":74,"line":2041},[72,82202,55203],{"class":362},[72,82204,51855],{"class":82},[72,82206,955],{"class":362},[72,82208,51910],{"class":78},[72,82210,1719],{"class":82},[72,82212,82213,82215,82217,82219,82221],{"class":74,"line":2046},[72,82214,57777],{"class":362},[72,82216,51855],{"class":82},[72,82218,955],{"class":362},[72,82220,51910],{"class":78},[72,82222,1719],{"class":82},[72,82224,82225,82227,82229,82231,82233],{"class":74,"line":2052},[72,82226,65551],{"class":362},[72,82228,51855],{"class":82},[72,82230,1052],{"class":362},[72,82232,51910],{"class":78},[72,82234,1719],{"class":82},[72,82236,82237,82239,82241,82243],{"class":74,"line":2057},[72,82238,57704],{"class":362},[72,82240,51855],{"class":82},[72,82242,52010],{"class":362},[72,82244,1719],{"class":82},[72,82246,82247,82249,82251,82253],{"class":74,"line":2071},[72,82248,55302],{"class":362},[72,82250,51855],{"class":82},[72,82252,52063],{"class":362},[72,82254,1719],{"class":82},[72,82256,82257],{"class":74,"line":2076},[72,82258,2615],{"class":82},[72,82260,82261,82263,82265],{"class":74,"line":2082},[72,82262,52835],{"class":82},[72,82264,473],{"class":51718},[72,82266,51725],{"class":82},[72,82268,82269,82271,82273],{"class":74,"line":2103},[72,82270,52203],{"class":82},[72,82272,51752],{"class":51718},[72,82274,51725],{"class":82},[72,82276,82277],{"class":74,"line":2108},[72,82278,2828],{"emptyLinePlaceholder":490},[72,82280,82281,82283,82285],{"class":74,"line":2122},[72,82282,1464],{"class":82},[72,82284,52218],{"class":51718},[72,82286,51725],{"class":82},[72,82288,82289,82291,82293,82295,82297],{"class":74,"line":2127},[72,82290,52562],{"class":82},[72,82292,52029],{"class":51718},[72,82294,55732],{"class":82},[72,82296,52029],{"class":51718},[72,82298,51725],{"class":82},[72,82300,82301,82303,82305],{"class":74,"line":2156},[72,82302,52562],{"class":82},[72,82304,52231],{"class":51718},[72,82306,51725],{"class":82},[72,82308,82309,82311,82314,82316,82319,82322,82324,82327],{"class":74,"line":2161},[72,82310,11647],{"class":78},[72,82312,82313],{"class":362}," spec",[72,82315,13990],{"class":78},[72,82317,82318],{"class":82}," { size: ",[72,82320,82321],{"class":366},"'40cm*40cm'",[72,82323,55882],{"class":82},[72,82325,82326],{"class":366},"'黑色'",[72,82328,56022],{"class":82},[72,82330,82331],{"class":74,"line":2178},[72,82332,82333],{"class":621},"    \u002F\u002F const arr = Object.values(spec)\n",[72,82335,82336],{"class":74,"line":2183},[72,82337,82338],{"class":621},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[72,82340,82341,82343,82345,82347,82350,82352,82354,82357,82360,82363,82365,82367,82370],{"class":74,"line":2188},[72,82342,52825],{"class":82},[72,82344,54817],{"class":358},[72,82346,564],{"class":82},[72,82348,82349],{"class":366},"'div'",[72,82351,74667],{"class":82},[72,82353,609],{"class":78},[72,82355,82356],{"class":82}," Object.",[72,82358,82359],{"class":358},"values",[72,82361,82362],{"class":82},"(spec).",[72,82364,74641],{"class":358},[72,82366,564],{"class":82},[72,82368,82369],{"class":366},"'\u002F'",[72,82371,570],{"class":82},[72,82373,82374,82376,82378],{"class":74,"line":2193},[72,82375,52835],{"class":82},[72,82377,52231],{"class":51718},[72,82379,51725],{"class":82},[72,82381,82382,82384,82386],{"class":74,"line":2207},[72,82383,52203],{"class":82},[72,82385,52218],{"class":51718},[72,82387,51725],{"class":82},[72,82389,82390],{"class":74,"line":2212},[72,82391,2828],{"emptyLinePlaceholder":490},[72,82393,82394,82396,82398],{"class":74,"line":3005},[72,82395,52203],{"class":82},[72,82397,51053],{"class":51718},[72,82399,51725],{"class":82},[15,82401,82402],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[23335,82404,82406],{"id":82405},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[15,82408,82409],{},"静态方法，将伪数组转换为真数组",[15,82411,82412],{},[1891,82413],{"alt":68,"src":82414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[63,82416,82418],{"className":53485,"code":82417,"language":53487,"meta":68,"style":68},"\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",[34,82419,82420,82428,82436,82448,82460,82472,82480,82488,82493,82498,82503,82508,82516],{"__ignoreMap":68},[72,82421,82422,82424,82426],{"class":74,"line":75},[72,82423,1464],{"class":82},[72,82425,52218],{"class":51718},[72,82427,51725],{"class":82},[72,82429,82430,82432,82434],{"class":74,"line":370},[72,82431,52562],{"class":82},[72,82433,251],{"class":51718},[72,82435,51725],{"class":82},[72,82437,82438,82440,82442,82444,82446],{"class":74,"line":1608},[72,82439,51759],{"class":82},[72,82441,25],{"class":51718},[72,82443,55732],{"class":82},[72,82445,25],{"class":51718},[72,82447,51725],{"class":82},[72,82449,82450,82452,82454,82456,82458],{"class":74,"line":1623},[72,82451,51759],{"class":82},[72,82453,25],{"class":51718},[72,82455,55732],{"class":82},[72,82457,25],{"class":51718},[72,82459,51725],{"class":82},[72,82461,82462,82464,82466,82468,82470],{"class":74,"line":1629},[72,82463,51759],{"class":82},[72,82465,25],{"class":51718},[72,82467,55732],{"class":82},[72,82469,25],{"class":51718},[72,82471,51725],{"class":82},[72,82473,82474,82476,82478],{"class":74,"line":1643},[72,82475,52835],{"class":82},[72,82477,251],{"class":51718},[72,82479,51725],{"class":82},[72,82481,82482,82484,82486],{"class":74,"line":1649},[72,82483,52562],{"class":82},[72,82485,52231],{"class":51718},[72,82487,51725],{"class":82},[72,82489,82490],{"class":74,"line":1740},[72,82491,82492],{"class":82},"    const lis = document.querySelectorAll('li')\n",[72,82494,82495],{"class":74,"line":1746},[72,82496,82497],{"class":82},"    const liss = Array.from(lis)\n",[72,82499,82500],{"class":74,"line":1758},[72,82501,82502],{"class":82},"    liss.pop()\n",[72,82504,82505],{"class":74,"line":2041},[72,82506,82507],{"class":82},"    console.log(liss)\n",[72,82509,82510,82512,82514],{"class":74,"line":2046},[72,82511,52835],{"class":82},[72,82513,52231],{"class":51718},[72,82515,51725],{"class":82},[72,82517,82518,82520,82522],{"class":74,"line":2052},[72,82519,52203],{"class":82},[72,82521,52218],{"class":51718},[72,82523,51725],{"class":82},[15,82525,82526],{},[1891,82527],{"alt":68,"src":82528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[22423,82530,82532],{"id":82531},"_41053-string","4.10.5.3 String",[15,82534,82535],{},[1891,82536],{"alt":68,"src":82537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[23335,82539,82541],{"id":82540},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[63,82543,82545],{"className":53485,"code":82544,"language":53487,"meta":68,"style":68},"\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",[34,82546,82547,82555,82563,82568,82573,82578,82582,82587,82592,82597,82605],{"__ignoreMap":68},[72,82548,82549,82551,82553],{"class":74,"line":75},[72,82550,1464],{"class":82},[72,82552,52218],{"class":51718},[72,82554,51725],{"class":82},[72,82556,82557,82559,82561],{"class":74,"line":370},[72,82558,52562],{"class":82},[72,82560,52231],{"class":51718},[72,82562,51725],{"class":82},[72,82564,82565],{"class":74,"line":1608},[72,82566,82567],{"class":82},"    \u002F\u002F 把字符串转化为数组\n",[72,82569,82570],{"class":74,"line":1623},[72,82571,82572],{"class":82},"    const str = 'pink,red'\n",[72,82574,82575],{"class":74,"line":1629},[72,82576,82577],{"class":82},"    const arr = str.split(',')\n",[72,82579,82580],{"class":74,"line":1643},[72,82581,81056],{"class":82},[72,82583,82584],{"class":74,"line":1649},[72,82585,82586],{"class":82},"    const str1 = '2025-8-25'\n",[72,82588,82589],{"class":74,"line":1740},[72,82590,82591],{"class":82},"    const arr1 = str1.split('-')\n",[72,82593,82594],{"class":74,"line":1746},[72,82595,82596],{"class":82},"    console.log(arr1)\n",[72,82598,82599,82601,82603],{"class":74,"line":1758},[72,82600,52835],{"class":82},[72,82602,52231],{"class":51718},[72,82604,51725],{"class":82},[72,82606,82607,82609,82611],{"class":74,"line":2041},[72,82608,52203],{"class":82},[72,82610,52218],{"class":51718},[72,82612,51725],{"class":82},[23335,82614,82616],{"id":82615},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[15,82618,5609],{},[15,82620,82621],{},"substring(indexStart)",[15,82623,82624],{},"substring(indexStart, indexEnd)",[251,82626,82627,82638,82650,82660],{},[25,82628,82629,82630,82633,82634,82637],{},"如果省略了 ",[34,82631,82632],{},"indexEnd","，则 ",[34,82635,82636],{},"substring()"," 提取字符直到字符串的末尾",[25,82639,82640,82641,82644,82645,82633,82647,82649],{},"如果 ",[34,82642,82643],{},"indexStart"," 等于 ",[34,82646,82632],{},[34,82648,82636],{}," 返回一个空字符串",[25,82651,82640,82652,82654,82655,82633,82657,82659],{},[34,82653,82643],{}," 大于 ",[34,82656,82632],{},[34,82658,82636],{}," 的效果就像交换了这两个参数一样",[25,82661,82662],{},"结束的索引号不包含想要截取的部分",[63,82664,82666],{"className":81907,"code":82665,"language":81909,"meta":68,"style":68},"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",[34,82667,82668,82680,82684,82718,82748,82752,82783,82787,82814,82844,82874,82878,82909],{"__ignoreMap":68},[72,82669,82670,82673,82675,82678],{"class":74,"line":75},[72,82671,82672],{"class":82},"const anyString ",[72,82674,609],{"class":78},[72,82676,82677],{"class":366}," \"Mozilla\"",[72,82679,1719],{"class":82},[72,82681,82682],{"class":74,"line":370},[72,82683,2828],{"emptyLinePlaceholder":490},[72,82685,82686,82689,82691,82693,82695,82698,82700,82703,82705,82707,82709,82711,82713,82715],{"class":74,"line":1608},[72,82687,82688],{"class":362},"console",[72,82690,1112],{"class":82},[72,82692,58665],{"class":362},[72,82694,564],{"class":82},[72,82696,82697],{"class":362},"anyString",[72,82699,1112],{"class":82},[72,82701,82702],{"class":362},"substring",[72,82704,564],{"class":82},[72,82706,747],{"class":362},[72,82708,12861],{"class":82},[72,82710,772],{"class":362},[72,82712,75671],{"class":82},[72,82714,33747],{"class":78},[72,82716,82717],{"class":366}," 'M'\n",[72,82719,82720,82722,82724,82726,82728,82730,82732,82734,82736,82738,82740,82742,82744,82746],{"class":74,"line":1623},[72,82721,82688],{"class":362},[72,82723,1112],{"class":82},[72,82725,58665],{"class":362},[72,82727,564],{"class":82},[72,82729,82697],{"class":362},[72,82731,1112],{"class":82},[72,82733,82702],{"class":362},[72,82735,564],{"class":82},[72,82737,772],{"class":362},[72,82739,12861],{"class":82},[72,82741,747],{"class":362},[72,82743,75671],{"class":82},[72,82745,33747],{"class":78},[72,82747,82717],{"class":366},[72,82749,82750],{"class":74,"line":1629},[72,82751,2828],{"emptyLinePlaceholder":490},[72,82753,82754,82756,82758,82760,82762,82764,82766,82768,82770,82772,82774,82776,82778,82780],{"class":74,"line":1643},[72,82755,82688],{"class":362},[72,82757,1112],{"class":82},[72,82759,58665],{"class":362},[72,82761,564],{"class":82},[72,82763,82697],{"class":362},[72,82765,1112],{"class":82},[72,82767,82702],{"class":362},[72,82769,564],{"class":82},[72,82771,747],{"class":362},[72,82773,12861],{"class":82},[72,82775,898],{"class":362},[72,82777,75671],{"class":82},[72,82779,33747],{"class":78},[72,82781,82782],{"class":366}," 'Mozill'\n",[72,82784,82785],{"class":74,"line":1649},[72,82786,2828],{"emptyLinePlaceholder":490},[72,82788,82789,82791,82793,82795,82797,82799,82801,82803,82805,82807,82809,82811],{"class":74,"line":1740},[72,82790,82688],{"class":362},[72,82792,1112],{"class":82},[72,82794,58665],{"class":362},[72,82796,564],{"class":82},[72,82798,82697],{"class":362},[72,82800,1112],{"class":82},[72,82802,82702],{"class":362},[72,82804,564],{"class":82},[72,82806,847],{"class":362},[72,82808,75671],{"class":82},[72,82810,33747],{"class":78},[72,82812,82813],{"class":366}," 'lla'\n",[72,82815,82816,82818,82820,82822,82824,82826,82828,82830,82832,82834,82836,82838,82840,82842],{"class":74,"line":1746},[72,82817,82688],{"class":362},[72,82819,1112],{"class":82},[72,82821,58665],{"class":362},[72,82823,564],{"class":82},[72,82825,82697],{"class":362},[72,82827,1112],{"class":82},[72,82829,82702],{"class":362},[72,82831,564],{"class":82},[72,82833,847],{"class":362},[72,82835,12861],{"class":82},[72,82837,923],{"class":362},[72,82839,75727],{"class":82},[72,82841,33747],{"class":78},[72,82843,82813],{"class":366},[72,82845,82846,82848,82850,82852,82854,82856,82858,82860,82862,82864,82866,82868,82870,82872],{"class":74,"line":1758},[72,82847,82688],{"class":362},[72,82849,1112],{"class":82},[72,82851,58665],{"class":362},[72,82853,564],{"class":82},[72,82855,82697],{"class":362},[72,82857,1112],{"class":82},[72,82859,82702],{"class":362},[72,82861,564],{"class":82},[72,82863,923],{"class":362},[72,82865,12861],{"class":82},[72,82867,847],{"class":362},[72,82869,75671],{"class":82},[72,82871,33747],{"class":78},[72,82873,82813],{"class":366},[72,82875,82876],{"class":74,"line":2041},[72,82877,2828],{"emptyLinePlaceholder":490},[72,82879,82880,82882,82884,82886,82888,82890,82892,82894,82896,82898,82900,82902,82904,82906],{"class":74,"line":2046},[72,82881,82688],{"class":362},[72,82883,1112],{"class":82},[72,82885,58665],{"class":362},[72,82887,564],{"class":82},[72,82889,82697],{"class":362},[72,82891,1112],{"class":82},[72,82893,82702],{"class":362},[72,82895,564],{"class":82},[72,82897,747],{"class":362},[72,82899,12861],{"class":82},[72,82901,923],{"class":362},[72,82903,75671],{"class":82},[72,82905,33747],{"class":78},[72,82907,82908],{"class":366}," 'Mozilla'\n",[72,82910,82911,82913,82915,82917,82919,82921,82923,82925,82927,82929,82931,82933,82935,82937],{"class":74,"line":2052},[72,82912,82688],{"class":362},[72,82914,1112],{"class":82},[72,82916,58665],{"class":362},[72,82918,564],{"class":82},[72,82920,82697],{"class":362},[72,82922,1112],{"class":82},[72,82924,82702],{"class":362},[72,82926,564],{"class":82},[72,82928,747],{"class":362},[72,82930,12861],{"class":82},[72,82932,1000],{"class":362},[72,82934,75671],{"class":82},[72,82936,33747],{"class":78},[72,82938,82908],{"class":366},[23335,82940,82942],{"id":82941},"_410533-startswith","4.10.5.3.3 startsWith",[15,82944,82945,82948,82949,82954,82955,462,82957],{},[34,82946,82947],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[707,82950,82951],{},[34,82952,82953],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[34,82956,1791],{},[34,82958,66438],{},[63,82960,82962],{"className":77913,"code":82961,"language":77915,"meta":68,"style":68},"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",[34,82963,82964,82976,82995,83000,83020],{"__ignoreMap":68},[72,82965,82966,82968,82971,82973],{"class":74,"line":75},[72,82967,7218],{"class":78},[72,82969,82970],{"class":82}," str1 ",[72,82972,609],{"class":78},[72,82974,82975],{"class":366}," \"Saturday night plans\"\n",[72,82977,82978,82980,82982,82985,82988,82990,82993],{"class":74,"line":370},[72,82979,77950],{"class":82},[72,82981,58665],{"class":358},[72,82983,82984],{"class":82},"(str1.",[72,82986,82987],{"class":358},"startsWith",[72,82989,564],{"class":82},[72,82991,82992],{"class":366},"\"Sat\"",[72,82994,30915],{"class":82},[72,82996,82997],{"class":74,"line":1608},[72,82998,82999],{"class":621},"\u002F\u002F Expected output: true\n",[72,83001,83002,83004,83006,83008,83010,83012,83014,83016,83018],{"class":74,"line":1623},[72,83003,77950],{"class":82},[72,83005,58665],{"class":358},[72,83007,82984],{"class":82},[72,83009,82987],{"class":358},[72,83011,564],{"class":82},[72,83013,82992],{"class":366},[72,83015,12861],{"class":82},[72,83017,634],{"class":362},[72,83019,30915],{"class":82},[72,83021,83022],{"class":74,"line":1629},[72,83023,83024],{"class":621},"\u002F\u002F Expected output: false\n",[63,83026,83028],{"className":51051,"code":83027,"language":51053,"meta":68,"style":68},"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",[34,83029,83030,83035,83040,83044,83049,83054],{"__ignoreMap":68},[72,83031,83032],{"class":74,"line":75},[72,83033,83034],{"class":82},"startsWith(searchString)\n",[72,83036,83037],{"class":74,"line":370},[72,83038,83039],{"class":82},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[72,83041,83042],{"class":74,"line":1608},[72,83043,2828],{"emptyLinePlaceholder":490},[72,83045,83046],{"class":74,"line":1623},[72,83047,83048],{"class":82},"const str3 = 'pink老师上课中'\n",[72,83050,83051],{"class":74,"line":1629},[72,83052,83053],{"class":82},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[72,83055,83056],{"class":74,"line":1643},[72,83057,83058],{"class":82},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[23335,83060,83062],{"id":83061},"_410534-includes","4.10.5.3.4 includes",[15,83064,83065],{},"includes(searchString) includes(searchString, position)",[22,83067,83068],{},[25,83069,83070],{},"searchString:",[15,83072,83073,83074,83076,83077,83082,83083,83088,83089,21925,83092,83095,83096,83099],{},"一个要在 ",[34,83075,1728],{}," 中查找的字符串。",[257,83078,83081],{"href":83079,"rel":83080},"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",[261],"不能是正则表达式","。所有非正则表达式的值都会被",[257,83084,83087],{"href":83085,"rel":83086},"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",[261],"强制转换为字符串","，因此如果该参数被省略或传入 ",[34,83090,83091],{},"undefined",[34,83093,83094],{},"includes()"," 方法会在字符串中搜索 ",[34,83097,83098],{},"\"undefined\"","，这通常不是你想要的",[22,83101,83102],{"start":370},[25,83103,83104,1413],{},[34,83105,83106],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[15,83108,83109,83110,83113,83114],{},"在字符串中开始搜索 ",[34,83111,83112],{},"searchString"," 的位置。默认值为 ",[34,83115,747],{},[22,83117,83118],{"start":1608},[25,83119,83120],{},"返回值：",[15,83122,83123,83124,83126,83127,83131,83132],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[34,83125,83112],{}," 为空字符串的情况），则返回 ",[707,83128,83129],{},[34,83130,1791],{}," ，否则返回 ",[707,83133,83134],{},[34,83135,66438],{},[22,83137,83138],{"start":1623},[25,83139,83140],{},"异常：",[15,83142,82640,83143,14221,83145,83149],{},[34,83144,83112],{},[257,83146,83148],{"href":83079,"rel":83147},[261],"是一个正则表达式","，则会抛出",[15,83151,83152],{},"只要是有就是true，不需要非得以谁开头结尾",[63,83154,83156],{"className":77913,"code":83155,"language":77915,"meta":68,"style":68},"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",[34,83157,83158,83169,83192,83211,83231,83253,83272],{"__ignoreMap":68},[72,83159,83160,83162,83164,83166],{"class":74,"line":75},[72,83161,7218],{"class":78},[72,83163,80193],{"class":82},[72,83165,609],{"class":78},[72,83167,83168],{"class":366}," \"To be, or not to be, that is the question.\"\n",[72,83170,83171,83173,83175,83178,83181,83183,83186,83189],{"class":74,"line":370},[72,83172,77950],{"class":82},[72,83174,58665],{"class":358},[72,83176,83177],{"class":82},"(str.",[72,83179,83180],{"class":358},"includes",[72,83182,564],{"class":82},[72,83184,83185],{"class":366},"\"To be\"",[72,83187,83188],{"class":82},"))",[72,83190,83191],{"class":621},"  \u002F\u002F true\n",[72,83193,83194,83196,83198,83200,83202,83204,83207,83209],{"class":74,"line":1608},[72,83195,77950],{"class":82},[72,83197,58665],{"class":358},[72,83199,83177],{"class":82},[72,83201,83180],{"class":358},[72,83203,564],{"class":82},[72,83205,83206],{"class":366},"\"question\"",[72,83208,83188],{"class":82},[72,83210,83191],{"class":621},[72,83212,83213,83215,83217,83219,83221,83223,83226,83228],{"class":74,"line":1623},[72,83214,77950],{"class":82},[72,83216,58665],{"class":358},[72,83218,83177],{"class":82},[72,83220,83180],{"class":358},[72,83222,564],{"class":82},[72,83224,83225],{"class":366},"\"nonexistent\"",[72,83227,83188],{"class":82},[72,83229,83230],{"class":621},"  \u002F\u002F false\n",[72,83232,83233,83235,83237,83239,83241,83243,83245,83247,83249,83251],{"class":74,"line":1629},[72,83234,77950],{"class":82},[72,83236,58665],{"class":358},[72,83238,83177],{"class":82},[72,83240,83180],{"class":358},[72,83242,564],{"class":82},[72,83244,83185],{"class":366},[72,83246,12861],{"class":82},[72,83248,772],{"class":362},[72,83250,83188],{"class":82},[72,83252,83230],{"class":621},[72,83254,83255,83257,83259,83261,83263,83265,83268,83270],{"class":74,"line":1643},[72,83256,77950],{"class":82},[72,83258,58665],{"class":358},[72,83260,83177],{"class":82},[72,83262,83180],{"class":358},[72,83264,564],{"class":82},[72,83266,83267],{"class":366},"\"TO BE\"",[72,83269,83188],{"class":82},[72,83271,83230],{"class":621},[72,83273,83274,83276,83278,83280,83282,83284,83286,83288],{"class":74,"line":1649},[72,83275,77950],{"class":82},[72,83277,58665],{"class":358},[72,83279,83177],{"class":82},[72,83281,83180],{"class":358},[72,83283,564],{"class":82},[72,83285,8078],{"class":366},[72,83287,83188],{"class":82},[72,83289,83191],{"class":621},[23335,83291,83293],{"id":83292},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[63,83295,83297],{"className":53485,"code":83296,"language":53487,"meta":68,"style":68},"\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",[34,83298,83299,83307,83315,83320,83325,83330,83335,83340,83348],{"__ignoreMap":68},[72,83300,83301,83303,83305],{"class":74,"line":75},[72,83302,1464],{"class":82},[72,83304,52218],{"class":51718},[72,83306,51725],{"class":82},[72,83308,83309,83311,83313],{"class":74,"line":370},[72,83310,52562],{"class":82},[72,83312,52231],{"class":51718},[72,83314,51725],{"class":82},[72,83316,83317],{"class":74,"line":1608},[72,83318,83319],{"class":82},"    const num = 10\n",[72,83321,83322],{"class":74,"line":1623},[72,83323,83324],{"class":82},"    \u002F\u002F 强制转换\n",[72,83326,83327],{"class":74,"line":1629},[72,83328,83329],{"class":82},"    console.log(String(num))\n",[72,83331,83332],{"class":74,"line":1643},[72,83333,83334],{"class":82},"    \u002F\u002F toString()方法转换\n",[72,83336,83337],{"class":74,"line":1649},[72,83338,83339],{"class":82},"    console.log(num.toString())\n",[72,83341,83342,83344,83346],{"class":74,"line":1740},[72,83343,52835],{"class":82},[72,83345,52231],{"class":51718},[72,83347,51725],{"class":82},[72,83349,83350,83352,83354],{"class":74,"line":1746},[72,83351,52203],{"class":82},[72,83353,52218],{"class":51718},[72,83355,51725],{"class":82},[23335,83357,83359],{"id":83358},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[15,83361,83362],{},[1891,83363],{"alt":68,"src":83364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[63,83366,83368],{"className":51051,"code":83367,"language":51053,"meta":68,"style":68},"\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",[34,83369,83370,83380,83394,83398,83406,83420,83440,83452,83460,83464,83472,83484,83492,83504,83509,83514,83519,83566,83582,83590,83598,83602],{"__ignoreMap":68},[72,83371,83372,83374,83376,83378],{"class":74,"line":75},[72,83373,51715],{"class":82},[72,83375,51719],{"class":51718},[72,83377,51722],{"class":358},[72,83379,51725],{"class":82},[72,83381,83382,83384,83386,83388,83390,83392],{"class":74,"line":370},[72,83383,1464],{"class":82},[72,83385,51053],{"class":51718},[72,83387,51734],{"class":358},[72,83389,609],{"class":82},[72,83391,51739],{"class":366},[72,83393,51725],{"class":82},[72,83395,83396],{"class":74,"line":1608},[72,83397,2828],{"emptyLinePlaceholder":490},[72,83399,83400,83402,83404],{"class":74,"line":1623},[72,83401,1464],{"class":82},[72,83403,51752],{"class":51718},[72,83405,51725],{"class":82},[72,83407,83408,83410,83412,83414,83416,83418],{"class":74,"line":1629},[72,83409,52562],{"class":82},[72,83411,51762],{"class":51718},[72,83413,51765],{"class":358},[72,83415,609],{"class":82},[72,83417,51770],{"class":366},[72,83419,51725],{"class":82},[72,83421,83422,83424,83426,83428,83430,83432,83434,83436,83438],{"class":74,"line":1643},[72,83423,52562],{"class":82},[72,83425,51762],{"class":51718},[72,83427,15346],{"class":358},[72,83429,609],{"class":82},[72,83431,51809],{"class":366},[72,83433,51789],{"class":358},[72,83435,609],{"class":82},[72,83437,51816],{"class":366},[72,83439,51725],{"class":82},[72,83441,83442,83444,83446,83448,83450],{"class":74,"line":1649},[72,83443,52562],{"class":82},[72,83445,51825],{"class":51718},[72,83447,51828],{"class":82},[72,83449,51825],{"class":51718},[72,83451,51725],{"class":82},[72,83453,83454,83456,83458],{"class":74,"line":1740},[72,83455,52203],{"class":82},[72,83457,51752],{"class":51718},[72,83459,51725],{"class":82},[72,83461,83462],{"class":74,"line":1746},[72,83463,2828],{"emptyLinePlaceholder":490},[72,83465,83466,83468,83470],{"class":74,"line":1758},[72,83467,1464],{"class":82},[72,83469,52218],{"class":51718},[72,83471,51725],{"class":82},[72,83473,83474,83476,83478,83480,83482],{"class":74,"line":2041},[72,83475,52562],{"class":82},[72,83477,52029],{"class":51718},[72,83479,55732],{"class":82},[72,83481,52029],{"class":51718},[72,83483,51725],{"class":82},[72,83485,83486,83488,83490],{"class":74,"line":2046},[72,83487,52562],{"class":82},[72,83489,52231],{"class":51718},[72,83491,51725],{"class":82},[72,83493,83494,83496,83499,83501],{"class":74,"line":2052},[72,83495,11647],{"class":78},[72,83497,83498],{"class":362}," gift",[72,83500,13990],{"class":78},[72,83502,83503],{"class":366}," '50g的茶叶，清洗球'\n",[72,83505,83506],{"class":74,"line":2057},[72,83507,83508],{"class":621},"    \u002F\u002F 1.把字符串拆分为数组\n",[72,83510,83511],{"class":74,"line":2071},[72,83512,83513],{"class":621},"    \u002F\u002F console.log(gift.split(','))\n",[72,83515,83516],{"class":74,"line":2076},[72,83517,83518],{"class":621},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[72,83520,83521,83523,83525,83527,83530,83533,83535,83538,83540,83542,83544,83546,83548,83551,83553,83556,83558,83560,83562,83564],{"class":74,"line":2082},[72,83522,11647],{"class":78},[72,83524,74337],{"class":362},[72,83526,13990],{"class":78},[72,83528,83529],{"class":82}," gift.",[72,83531,83532],{"class":358},"split",[72,83534,564],{"class":82},[72,83536,83537],{"class":366},"'，'",[72,83539,31244],{"class":82},[72,83541,74462],{"class":358},[72,83543,564],{"class":82},[72,83545,80213],{"class":5642},[72,83547,80216],{"class":78},[72,83549,83550],{"class":366}," `\u003Cspan>【赠品】${",[72,83552,80213],{"class":82},[72,83554,83555],{"class":366},"}\u003C\u002Fspan>\u003Cbr>`",[72,83557,31244],{"class":82},[72,83559,74641],{"class":358},[72,83561,564],{"class":82},[72,83563,74646],{"class":366},[72,83565,570],{"class":82},[72,83567,83568,83570,83572,83574,83576,83578,83580],{"class":74,"line":2103},[72,83569,52825],{"class":82},[72,83571,54817],{"class":358},[72,83573,564],{"class":82},[72,83575,82349],{"class":366},[72,83577,74667],{"class":82},[72,83579,609],{"class":78},[72,83581,74403],{"class":82},[72,83583,83584,83586,83588],{"class":74,"line":2108},[72,83585,52835],{"class":82},[72,83587,52231],{"class":51718},[72,83589,51725],{"class":82},[72,83591,83592,83594,83596],{"class":74,"line":2122},[72,83593,52203],{"class":82},[72,83595,52218],{"class":51718},[72,83597,51725],{"class":82},[72,83599,83600],{"class":74,"line":2127},[72,83601,2828],{"emptyLinePlaceholder":490},[72,83603,83604,83606,83608],{"class":74,"line":2156},[72,83605,52203],{"class":82},[72,83607,51053],{"class":51718},[72,83609,51725],{"class":82},[22423,83611,83613],{"id":83612},"_41054-number","4.10.5.4 Number",[15,83615,83616],{},[1891,83617],{"alt":68,"src":83618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[15,83620,83621],{},"整数也可以进行toFixed来保留小数",[15,83623,83624],{},"比如：",[15,83626,83627],{},"const price=10",[15,83629,83630],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[22423,83632,83634],{"id":83633},"_41055-购物车展示","4.10.5.5 购物车展示",[15,83636,83637],{},[1891,83638],{"alt":68,"src":83639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[63,83641,83643],{"className":51051,"code":83642,"language":51053,"meta":68,"style":68},"\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",[34,83644,83645,83655,83669,83673,83681,83695,83715,83727,83735,83741,83751,83761,83771,83775,83779,83785,83797,83811,83815,83819,83825,83837,83853,83863,83879,83883,83887,83893,83903,83913,83917,83921,83929,83941,83953,83965,83969,83973,83981,83993,83997,84001,84012,84022,84034,84046,84056,84060,84064,84072,84081,84093,84103,84113,84117,84121,84129,84138,84145,84155,84167,84171,84175,84184,84194,84205,84217,84229,84233,84237,84246,84256,84267,84271,84275,84281,84293,84305,84315,84325,84343,84355,84359,84363,84372,84384,84394,84404,84416,84420,84428,84436,84440,84448,84462,84470,84484,84512,84520,84528,84538,84542,84550,84558,84567,84575,84584,84594,84598,84602,84610,84618,84627,84635,84643,84656,84660,84664,84672,84680,84689,84697,84705,84720,84724,84728,84736,84744,84753,84761,84769,84783,84791,84795,84799,84804,84830,84835,84872,84877,84900,84905,84959,84964,85000,85004,85010,85015,85024,85038,85047,85066,85075,85085,85090,85095,85108,85113,85167,85193,85201,85209,85213],{"__ignoreMap":68},[72,83646,83647,83649,83651,83653],{"class":74,"line":75},[72,83648,51715],{"class":82},[72,83650,51719],{"class":51718},[72,83652,51722],{"class":358},[72,83654,51725],{"class":82},[72,83656,83657,83659,83661,83663,83665,83667],{"class":74,"line":370},[72,83658,1464],{"class":82},[72,83660,51053],{"class":51718},[72,83662,51734],{"class":358},[72,83664,609],{"class":82},[72,83666,51739],{"class":366},[72,83668,51725],{"class":82},[72,83670,83671],{"class":74,"line":1608},[72,83672,2828],{"emptyLinePlaceholder":490},[72,83674,83675,83677,83679],{"class":74,"line":1623},[72,83676,1464],{"class":82},[72,83678,51752],{"class":51718},[72,83680,51725],{"class":82},[72,83682,83683,83685,83687,83689,83691,83693],{"class":74,"line":1629},[72,83684,52562],{"class":82},[72,83686,51762],{"class":51718},[72,83688,51765],{"class":358},[72,83690,609],{"class":82},[72,83692,51770],{"class":366},[72,83694,51725],{"class":82},[72,83696,83697,83699,83701,83703,83705,83707,83709,83711,83713],{"class":74,"line":1643},[72,83698,52562],{"class":82},[72,83700,51762],{"class":51718},[72,83702,15346],{"class":358},[72,83704,609],{"class":82},[72,83706,51809],{"class":366},[72,83708,51789],{"class":358},[72,83710,609],{"class":82},[72,83712,51816],{"class":366},[72,83714,51725],{"class":82},[72,83716,83717,83719,83721,83723,83725],{"class":74,"line":1649},[72,83718,52562],{"class":82},[72,83720,51825],{"class":51718},[72,83722,51828],{"class":82},[72,83724,51825],{"class":51718},[72,83726,51725],{"class":82},[72,83728,83729,83731,83733],{"class":74,"line":1740},[72,83730,52562],{"class":82},[72,83732,473],{"class":51718},[72,83734,51725],{"class":82},[72,83736,83737,83739],{"class":74,"line":1746},[72,83738,6829],{"class":51718},[72,83740,15998],{"class":82},[72,83742,83743,83745,83747,83749],{"class":74,"line":1758},[72,83744,55113],{"class":362},[72,83746,51855],{"class":82},[72,83748,747],{"class":362},[72,83750,1719],{"class":82},[72,83752,83753,83755,83757,83759],{"class":74,"line":2041},[72,83754,55124],{"class":362},[72,83756,51855],{"class":82},[72,83758,747],{"class":362},[72,83760,1719],{"class":82},[72,83762,83763,83765,83767,83769],{"class":74,"line":2046},[72,83764,73014],{"class":362},[72,83766,51855],{"class":82},[72,83768,60923],{"class":362},[72,83770,1719],{"class":82},[72,83772,83773],{"class":74,"line":2052},[72,83774,2615],{"class":82},[72,83776,83777],{"class":74,"line":2057},[72,83778,2828],{"emptyLinePlaceholder":490},[72,83780,83781,83783],{"class":74,"line":2071},[72,83782,62541],{"class":358},[72,83784,15998],{"class":82},[72,83786,83787,83789,83791,83793,83795],{"class":74,"line":2076},[72,83788,55189],{"class":362},[72,83790,51855],{"class":82},[72,83792,78992],{"class":362},[72,83794,51910],{"class":78},[72,83796,1719],{"class":82},[72,83798,83799,83801,83803,83805,83807,83809],{"class":74,"line":2082},[72,83800,55124],{"class":362},[72,83802,51855],{"class":82},[72,83804,865],{"class":362},[72,83806,51910],{"class":78},[72,83808,51974],{"class":362},[72,83810,1719],{"class":82},[72,83812,83813],{"class":74,"line":2103},[72,83814,2615],{"class":82},[72,83816,83817],{"class":74,"line":2108},[72,83818,2828],{"emptyLinePlaceholder":490},[72,83820,83821,83823],{"class":74,"line":2122},[72,83822,79043],{"class":358},[72,83824,15998],{"class":82},[72,83826,83827,83829,83831,83833,83835],{"class":74,"line":2127},[72,83828,55113],{"class":362},[72,83830,51855],{"class":82},[72,83832,1129],{"class":362},[72,83834,51910],{"class":78},[72,83836,1719],{"class":82},[72,83838,83839,83841,83843,83845,83847,83849,83851],{"class":74,"line":2156},[72,83840,62278],{"class":362},[72,83842,51855],{"class":82},[72,83844,28543],{"class":362},[72,83846,79098],{"class":362},[72,83848,79101],{"class":362},[72,83850,1249],{"class":78},[72,83852,1719],{"class":82},[72,83854,83855,83857,83859,83861],{"class":74,"line":2161},[72,83856,55427],{"class":362},[72,83858,51855],{"class":82},[72,83860,51895],{"class":362},[72,83862,1719],{"class":82},[72,83864,83865,83867,83869,83871,83873,83875,83877],{"class":74,"line":2178},[72,83866,62395],{"class":362},[72,83868,51855],{"class":82},[72,83870,772],{"class":362},[72,83872,51910],{"class":78},[72,83874,51939],{"class":362},[72,83876,62662],{"class":362},[72,83878,1719],{"class":82},[72,83880,83881],{"class":74,"line":2183},[72,83882,2615],{"class":82},[72,83884,83885],{"class":74,"line":2188},[72,83886,2828],{"emptyLinePlaceholder":490},[72,83888,83889,83891],{"class":74,"line":2193},[72,83890,79161],{"class":358},[72,83892,15998],{"class":82},[72,83894,83895,83897,83899,83901],{"class":74,"line":2207},[72,83896,62443],{"class":362},[72,83898,51855],{"class":82},[72,83900,62448],{"class":362},[72,83902,1719],{"class":82},[72,83904,83905,83907,83909,83911],{"class":74,"line":2212},[72,83906,55302],{"class":362},[72,83908,51855],{"class":82},[72,83910,62236],{"class":362},[72,83912,1719],{"class":82},[72,83914,83915],{"class":74,"line":3005},[72,83916,2615],{"class":82},[72,83918,83919],{"class":74,"line":3019},[72,83920,2828],{"emptyLinePlaceholder":490},[72,83922,83923,83925,83927],{"class":74,"line":3027},[72,83924,79043],{"class":358},[72,83926,56033],{"class":51718},[72,83928,15998],{"class":82},[72,83930,83931,83933,83935,83937,83939],{"class":74,"line":3032},[72,83932,55189],{"class":362},[72,83934,51855],{"class":82},[72,83936,1166],{"class":362},[72,83938,51910],{"class":78},[72,83940,1719],{"class":82},[72,83942,83943,83945,83947,83949,83951],{"class":74,"line":3038},[72,83944,55203],{"class":362},[72,83946,51855],{"class":82},[72,83948,1166],{"class":362},[72,83950,51910],{"class":78},[72,83952,1719],{"class":82},[72,83954,83955,83957,83959,83961,83963],{"class":74,"line":3044},[72,83956,62168],{"class":362},[72,83958,51855],{"class":82},[72,83960,873],{"class":362},[72,83962,51910],{"class":78},[72,83964,1719],{"class":82},[72,83966,83967],{"class":74,"line":3049},[72,83968,2615],{"class":82},[72,83970,83971],{"class":74,"line":8374},[72,83972,2828],{"emptyLinePlaceholder":490},[72,83974,83975,83977,83979],{"class":74,"line":8398},[72,83976,79043],{"class":358},[72,83978,62722],{"class":358},[72,83980,15998],{"class":82},[72,83982,83983,83985,83987,83989,83991],{"class":74,"line":8403},[72,83984,55189],{"class":362},[72,83986,51855],{"class":82},[72,83988,2151],{"class":362},[72,83990,51910],{"class":78},[72,83992,1719],{"class":82},[72,83994,83995],{"class":74,"line":8409},[72,83996,2615],{"class":82},[72,83998,83999],{"class":74,"line":8436},[72,84000,2828],{"emptyLinePlaceholder":490},[72,84002,84003,84005,84007,84010],{"class":74,"line":8441},[72,84004,79043],{"class":358},[72,84006,62722],{"class":358},[72,84008,84009],{"class":358}," .tag",[72,84011,15998],{"class":82},[72,84013,84014,84016,84018,84020],{"class":74,"line":8447},[72,84015,55427],{"class":362},[72,84017,51855],{"class":82},[72,84019,61287],{"class":362},[72,84021,1719],{"class":82},[72,84023,84024,84026,84028,84030,84032],{"class":74,"line":8459},[72,84025,55113],{"class":362},[72,84027,51855],{"class":82},[72,84029,640],{"class":362},[72,84031,51910],{"class":78},[72,84033,1719],{"class":82},[72,84035,84036,84038,84040,84042,84044],{"class":74,"line":8471},[72,84037,55340],{"class":362},[72,84039,51855],{"class":82},[72,84041,1052],{"class":362},[72,84043,51910],{"class":78},[72,84045,1719],{"class":82},[72,84047,84048,84050,84052,84054],{"class":74,"line":8483},[72,84049,57834],{"class":362},[72,84051,51855],{"class":82},[72,84053,62488],{"class":362},[72,84055,1719],{"class":82},[72,84057,84058],{"class":74,"line":10142},[72,84059,2615],{"class":82},[72,84061,84062],{"class":74,"line":10167},[72,84063,2828],{"emptyLinePlaceholder":490},[72,84065,84066,84068,84070],{"class":74,"line":10190},[72,84067,79043],{"class":358},[72,84069,79335],{"class":358},[72,84071,31884],{"class":82},[72,84073,84074,84076,84079],{"class":74,"line":10214},[72,84075,79043],{"class":358},[72,84077,84078],{"class":358}," .sub-total",[72,84080,15998],{"class":82},[72,84082,84083,84085,84087,84089,84091],{"class":74,"line":10219},[72,84084,55340],{"class":362},[72,84086,51855],{"class":82},[72,84088,1204],{"class":362},[72,84090,51910],{"class":78},[72,84092,1719],{"class":82},[72,84094,84095,84097,84099,84101],{"class":74,"line":10224},[72,84096,57834],{"class":362},[72,84098,51855],{"class":82},[72,84100,79358],{"class":362},[72,84102,1719],{"class":82},[72,84104,84105,84107,84109,84111],{"class":74,"line":10229},[72,84106,62255],{"class":362},[72,84108,51855],{"class":82},[72,84110,772],{"class":362},[72,84112,1719],{"class":82},[72,84114,84115],{"class":74,"line":10238},[72,84116,2615],{"class":82},[72,84118,84119],{"class":74,"line":10243},[72,84120,2828],{"emptyLinePlaceholder":490},[72,84122,84123,84125,84127],{"class":74,"line":10249},[72,84124,79043],{"class":358},[72,84126,79375],{"class":358},[72,84128,31884],{"class":82},[72,84130,84131,84133,84136],{"class":74,"line":10270},[72,84132,79043],{"class":358},[72,84134,84135],{"class":358}," .sub-total::before",[72,84137,31884],{"class":82},[72,84139,84140,84143],{"class":74,"line":10276},[72,84141,84142],{"class":358},"    .amount::before",[72,84144,15998],{"class":82},[72,84146,84147,84149,84151,84153],{"class":74,"line":10290},[72,84148,79382],{"class":362},[72,84150,51855],{"class":82},[72,84152,79387],{"class":366},[72,84154,1719],{"class":82},[72,84156,84157,84159,84161,84163,84165],{"class":74,"line":10296},[72,84158,55340],{"class":362},[72,84160,51855],{"class":82},[72,84162,1052],{"class":362},[72,84164,51910],{"class":78},[72,84166,1719],{"class":82},[72,84168,84169],{"class":74,"line":10323},[72,84170,2615],{"class":82},[72,84172,84173],{"class":74,"line":10332},[72,84174,2828],{"emptyLinePlaceholder":490},[72,84176,84177,84179,84182],{"class":74,"line":10338},[72,84178,79043],{"class":358},[72,84180,84181],{"class":358}," .spec",[72,84183,15998],{"class":82},[72,84185,84186,84188,84190,84192],{"class":74,"line":10346},[72,84187,62255],{"class":362},[72,84189,51855],{"class":82},[72,84191,640],{"class":362},[72,84193,1719],{"class":82},[72,84195,84196,84198,84200,84203],{"class":74,"line":10351},[72,84197,57834],{"class":362},[72,84199,51855],{"class":82},[72,84201,84202],{"class":362},"#888",[72,84204,1719],{"class":82},[72,84206,84207,84209,84211,84213,84215],{"class":74,"line":17030},[72,84208,55340],{"class":362},[72,84210,51855],{"class":82},[72,84212,1103],{"class":362},[72,84214,51910],{"class":78},[72,84216,1719],{"class":82},[72,84218,84219,84221,84223,84225,84227],{"class":74,"line":17036},[72,84220,62418],{"class":362},[72,84222,51855],{"class":82},[72,84224,1254],{"class":362},[72,84226,51910],{"class":78},[72,84228,1719],{"class":82},[72,84230,84231],{"class":74,"line":17059},[72,84232,2615],{"class":82},[72,84234,84235],{"class":74,"line":17065},[72,84236,2828],{"emptyLinePlaceholder":490},[72,84238,84239,84241,84244],{"class":74,"line":17088},[72,84240,79043],{"class":358},[72,84242,84243],{"class":358}," .count",[72,84245,15998],{"class":82},[72,84247,84248,84250,84252,84254],{"class":74,"line":17102},[72,84249,62255],{"class":362},[72,84251,51855],{"class":82},[72,84253,772],{"class":362},[72,84255,1719],{"class":82},[72,84257,84258,84260,84262,84265],{"class":74,"line":17122},[72,84259,57834],{"class":362},[72,84261,51855],{"class":82},[72,84263,84264],{"class":362},"#aaa",[72,84266,1719],{"class":82},[72,84268,84269],{"class":74,"line":17128},[72,84270,2615],{"class":82},[72,84272,84273],{"class":74,"line":17139},[72,84274,2828],{"emptyLinePlaceholder":490},[72,84276,84277,84279],{"class":74,"line":17162},[72,84278,72893],{"class":358},[72,84280,15998],{"class":82},[72,84282,84283,84285,84287,84289,84291],{"class":74,"line":17184},[72,84284,55189],{"class":362},[72,84286,51855],{"class":82},[72,84288,78992],{"class":362},[72,84290,51910],{"class":78},[72,84292,1719],{"class":82},[72,84294,84295,84297,84299,84301,84303],{"class":74,"line":17189},[72,84296,55124],{"class":362},[72,84298,51855],{"class":82},[72,84300,747],{"class":362},[72,84302,51974],{"class":362},[72,84304,1719],{"class":82},[72,84306,84307,84309,84311,84313],{"class":74,"line":17195},[72,84308,55427],{"class":362},[72,84310,51855],{"class":82},[72,84312,51895],{"class":362},[72,84314,1719],{"class":82},[72,84316,84317,84319,84321,84323],{"class":74,"line":17209},[72,84318,55438],{"class":362},[72,84320,51855],{"class":82},[72,84322,51998],{"class":362},[72,84324,1719],{"class":82},[72,84326,84327,84330,84332,84334,84336,84338,84341],{"class":74,"line":17222},[72,84328,84329],{"class":362},"      border-top",[72,84331,51855],{"class":82},[72,84333,772],{"class":362},[72,84335,51910],{"class":78},[72,84337,51939],{"class":362},[72,84339,84340],{"class":362}," #4e4e4e",[72,84342,1719],{"class":82},[72,84344,84345,84347,84349,84351,84353],{"class":74,"line":17227},[72,84346,55113],{"class":362},[72,84348,51855],{"class":82},[72,84350,1254],{"class":362},[72,84352,51910],{"class":78},[72,84354,1719],{"class":82},[72,84356,84357],{"class":74,"line":17241},[72,84358,2615],{"class":82},[72,84360,84361],{"class":74,"line":17246},[72,84362,2828],{"emptyLinePlaceholder":490},[72,84364,84365,84367,84370],{"class":74,"line":17252},[72,84366,72893],{"class":358},[72,84368,84369],{"class":358}," .amount",[72,84371,15998],{"class":82},[72,84373,84374,84376,84378,84380,84382],{"class":74,"line":17257},[72,84375,55340],{"class":362},[72,84377,51855],{"class":82},[72,84379,1204],{"class":362},[72,84381,51910],{"class":78},[72,84383,1719],{"class":82},[72,84385,84386,84388,84390,84392],{"class":74,"line":17271},[72,84387,57834],{"class":362},[72,84389,51855],{"class":82},[72,84391,79358],{"class":362},[72,84393,1719],{"class":82},[72,84395,84396,84398,84400,84402],{"class":74,"line":17276},[72,84397,62752],{"class":362},[72,84399,51855],{"class":82},[72,84401,51907],{"class":362},[72,84403,1719],{"class":82},[72,84405,84406,84408,84410,84412,84414],{"class":74,"line":17281},[72,84407,62168],{"class":362},[72,84409,51855],{"class":82},[72,84411,1210],{"class":362},[72,84413,51910],{"class":78},[72,84415,1719],{"class":82},[72,84417,84418],{"class":74,"line":17295},[72,84419,2615],{"class":82},[72,84421,84422,84424,84426],{"class":74,"line":17307},[72,84423,52835],{"class":82},[72,84425,473],{"class":51718},[72,84427,51725],{"class":82},[72,84429,84430,84432,84434],{"class":74,"line":17312},[72,84431,52203],{"class":82},[72,84433,51752],{"class":51718},[72,84435,51725],{"class":82},[72,84437,84438],{"class":74,"line":17325},[72,84439,2828],{"emptyLinePlaceholder":490},[72,84441,84442,84444,84446],{"class":74,"line":17330},[72,84443,1464],{"class":82},[72,84445,52218],{"class":51718},[72,84447,51725],{"class":82},[72,84449,84450,84452,84454,84456,84458,84460],{"class":74,"line":17335},[72,84451,52562],{"class":82},[72,84453,52029],{"class":51718},[72,84455,53904],{"class":358},[72,84457,609],{"class":82},[72,84459,63026],{"class":366},[72,84461,51725],{"class":82},[72,84463,84464,84466,84468],{"class":74,"line":17340},[72,84465,52835],{"class":82},[72,84467,52029],{"class":51718},[72,84469,51725],{"class":82},[72,84471,84472,84474,84476,84478,84480,84482],{"class":74,"line":17353},[72,84473,52562],{"class":82},[72,84475,52029],{"class":51718},[72,84477,53904],{"class":358},[72,84479,609],{"class":82},[72,84481,62998],{"class":366},[72,84483,51725],{"class":82},[72,84485,84486,84488,84490,84493,84495,84497,84499,84502,84504,84506,84508,84510],{"class":74,"line":17358},[72,84487,51759],{"class":82},[72,84489,52029],{"class":51718},[72,84491,84492],{"class":82},">合计：\u003C",[72,84494,72],{"class":51718},[72,84496,53904],{"class":358},[72,84498,609],{"class":82},[72,84500,84501],{"class":366},"\"amount\"",[72,84503,55732],{"class":82},[72,84505,72],{"class":51718},[72,84507,55732],{"class":82},[72,84509,52029],{"class":51718},[72,84511,51725],{"class":82},[72,84513,84514,84516,84518],{"class":74,"line":33051},[72,84515,52835],{"class":82},[72,84517,52029],{"class":51718},[72,84519,51725],{"class":82},[72,84521,84522,84524,84526],{"class":74,"line":33057},[72,84523,52562],{"class":82},[72,84525,52231],{"class":51718},[72,84527,51725],{"class":82},[72,84529,84530,84532,84534,84536],{"class":74,"line":33063},[72,84531,11647],{"class":78},[72,84533,79795],{"class":362},[72,84535,13990],{"class":78},[72,84537,55865],{"class":82},[72,84539,84540],{"class":74,"line":33069},[72,84541,79804],{"class":82},[72,84543,84544,84546,84548],{"class":74,"line":33075},[72,84545,79809],{"class":82},[72,84547,79812],{"class":366},[72,84549,31884],{"class":82},[72,84551,84552,84554,84556],{"class":74,"line":33086},[72,84553,79819],{"class":82},[72,84555,79822],{"class":366},[72,84557,31884],{"class":82},[72,84559,84560,84562,84565],{"class":74,"line":33092},[72,84561,79829],{"class":82},[72,84563,84564],{"class":362},"289.9",[72,84566,31884],{"class":82},[72,84568,84569,84571,84573],{"class":74,"line":33112},[72,84570,79839],{"class":82},[72,84572,79842],{"class":366},[72,84574,31884],{"class":82},[72,84576,84577,84580,84582],{"class":74,"line":33118},[72,84578,84579],{"class":82},"        count: ",[72,84581,640],{"class":362},[72,84583,31884],{"class":82},[72,84585,84586,84589,84592],{"class":74,"line":33129},[72,84587,84588],{"class":82},"        spec: { color: ",[72,84590,84591],{"class":366},"'白色'",[72,84593,56022],{"class":82},[72,84595,84596],{"class":74,"line":33135},[72,84597,78310],{"class":82},[72,84599,84600],{"class":74,"line":33141},[72,84601,79804],{"class":82},[72,84603,84604,84606,84608],{"class":74,"line":33147},[72,84605,79809],{"class":82},[72,84607,79903],{"class":366},[72,84609,31884],{"class":82},[72,84611,84612,84614,84616],{"class":74,"line":33153},[72,84613,79819],{"class":82},[72,84615,79912],{"class":366},[72,84617,31884],{"class":82},[72,84619,84620,84622,84625],{"class":74,"line":33159},[72,84621,79829],{"class":82},[72,84623,84624],{"class":362},"109.8",[72,84626,31884],{"class":82},[72,84628,84629,84631,84633],{"class":74,"line":33165},[72,84630,79839],{"class":82},[72,84632,79930],{"class":366},[72,84634,31884],{"class":82},[72,84636,84637,84639,84641],{"class":74,"line":33171},[72,84638,84579],{"class":82},[72,84640,634],{"class":362},[72,84642,31884],{"class":82},[72,84644,84645,84648,84650,84652,84654],{"class":74,"line":33191},[72,84646,84647],{"class":82},"        spec: { size: ",[72,84649,82321],{"class":366},[72,84651,55882],{"class":82},[72,84653,82326],{"class":366},[72,84655,56022],{"class":82},[72,84657,84658],{"class":74,"line":33197},[72,84659,78310],{"class":82},[72,84661,84662],{"class":74,"line":33213},[72,84663,79804],{"class":82},[72,84665,84666,84668,84670],{"class":74,"line":33219},[72,84667,79809],{"class":82},[72,84669,79947],{"class":366},[72,84671,31884],{"class":82},[72,84673,84674,84676,84678],{"class":74,"line":33233},[72,84675,79819],{"class":82},[72,84677,79956],{"class":366},[72,84679,31884],{"class":82},[72,84681,84682,84684,84687],{"class":74,"line":33239},[72,84683,79829],{"class":82},[72,84685,84686],{"class":362},"488",[72,84688,31884],{"class":82},[72,84690,84691,84693,84695],{"class":74,"line":33254},[72,84692,79839],{"class":82},[72,84694,79974],{"class":366},[72,84696,31884],{"class":82},[72,84698,84699,84701,84703],{"class":74,"line":33260},[72,84700,84579],{"class":82},[72,84702,772],{"class":362},[72,84704,31884],{"class":82},[72,84706,84707,84709,84712,84715,84718],{"class":74,"line":33269},[72,84708,84588],{"class":82},[72,84710,84711],{"class":366},"'青色'",[72,84713,84714],{"class":82},", sum: ",[72,84716,84717],{"class":366},"'一大四小'",[72,84719,56022],{"class":82},[72,84721,84722],{"class":74,"line":33275},[72,84723,78310],{"class":82},[72,84725,84726],{"class":74,"line":33284},[72,84727,79804],{"class":82},[72,84729,84730,84732,84734],{"class":74,"line":33290},[72,84731,79809],{"class":82},[72,84733,79991],{"class":366},[72,84735,31884],{"class":82},[72,84737,84738,84740,84742],{"class":74,"line":33296},[72,84739,79819],{"class":82},[72,84741,80000],{"class":366},[72,84743,31884],{"class":82},[72,84745,84746,84748,84751],{"class":74,"line":33305},[72,84747,79829],{"class":82},[72,84749,84750],{"class":362},"139",[72,84752,31884],{"class":82},[72,84754,84755,84757,84759],{"class":74,"line":33311},[72,84756,79839],{"class":82},[72,84758,80018],{"class":366},[72,84760,31884],{"class":82},[72,84762,84763,84765,84767],{"class":74,"line":33322},[72,84764,84579],{"class":82},[72,84766,772],{"class":362},[72,84768,31884],{"class":82},[72,84770,84771,84773,84776,84778,84781],{"class":74,"line":33328},[72,84772,84647],{"class":82},[72,84774,84775],{"class":366},"'小号'",[72,84777,55882],{"class":82},[72,84779,84780],{"class":366},"'紫色'",[72,84782,55888],{"class":82},[72,84784,84785,84788],{"class":74,"line":33347},[72,84786,84787],{"class":82},"        gift: ",[72,84789,84790],{"class":366},"'50g茶叶,清洗球'\n",[72,84792,84793],{"class":74,"line":33353},[72,84794,52816],{"class":82},[72,84796,84797],{"class":74,"line":33364},[72,84798,53527],{"class":82},[72,84800,84801],{"class":74,"line":33370},[72,84802,84803],{"class":621},"    \u002F\u002F  1.根据数据渲染页面\n",[72,84805,84806,84808,84810,84812,84814,84816,84818,84820,84822,84824,84826,84828],{"class":74,"line":33390},[72,84807,52825],{"class":82},[72,84809,54817],{"class":358},[72,84811,564],{"class":82},[72,84813,80319],{"class":366},[72,84815,74667],{"class":82},[72,84817,609],{"class":78},[72,84819,80466],{"class":82},[72,84821,74462],{"class":358},[72,84823,564],{"class":82},[72,84825,80213],{"class":5642},[72,84827,80216],{"class":78},[72,84829,15998],{"class":82},[72,84831,84832],{"class":74,"line":33406},[72,84833,84834],{"class":621},"      \u002F\u002F 对象解构\n",[72,84836,84837,84839,84841,84843,84845,84847,84849,84852,84854,84856,84858,84861,84863,84866,84868,84870],{"class":74,"line":33412},[72,84838,58646],{"class":78},[72,84840,80225],{"class":82},[72,84842,80238],{"class":362},[72,84844,12861],{"class":82},[72,84846,80228],{"class":362},[72,84848,12861],{"class":82},[72,84850,84851],{"class":362},"count",[72,84853,12861],{"class":82},[72,84855,80233],{"class":362},[72,84857,12861],{"class":82},[72,84859,84860],{"class":362},"spec",[72,84862,12861],{"class":82},[72,84864,84865],{"class":362},"gift",[72,84867,80241],{"class":82},[72,84869,609],{"class":78},[72,84871,80246],{"class":82},[72,84873,84874],{"class":74,"line":33426},[72,84875,84876],{"class":621},"      \u002F\u002F 规格文字模块处理\n",[72,84878,84879,84881,84884,84886,84888,84890,84892,84894,84896,84898],{"class":74,"line":33432},[72,84880,58646],{"class":78},[72,84882,84883],{"class":362}," text",[72,84885,13990],{"class":78},[72,84887,82356],{"class":82},[72,84889,82359],{"class":358},[72,84891,82362],{"class":82},[72,84893,74641],{"class":358},[72,84895,564],{"class":82},[72,84897,82369],{"class":366},[72,84899,570],{"class":82},[72,84901,84902],{"class":74,"line":33438},[72,84903,84904],{"class":621},"      \u002F\u002F 处理赠品模块\n",[72,84906,84907,84909,84911,84913,84916,84918,84920,84922,84924,84927,84929,84931,84933,84935,84937,84940,84942,84945,84947,84949,84951,84953,84955,84957],{"class":74,"line":33449},[72,84908,58646],{"class":78},[72,84910,74337],{"class":362},[72,84912,13990],{"class":78},[72,84914,84915],{"class":82}," gift ",[72,84917,1540],{"class":78},[72,84919,83529],{"class":82},[72,84921,83532],{"class":358},[72,84923,564],{"class":82},[72,84925,84926],{"class":366},"','",[72,84928,31244],{"class":82},[72,84930,74462],{"class":358},[72,84932,564],{"class":82},[72,84934,80213],{"class":5642},[72,84936,80216],{"class":78},[72,84938,84939],{"class":366}," `\u003Cspan class=\"tag\">【赠品】${",[72,84941,80213],{"class":82},[72,84943,84944],{"class":366},"}\u003C\u002Fspan>`",[72,84946,31244],{"class":82},[72,84948,74641],{"class":358},[72,84950,564],{"class":82},[72,84952,74646],{"class":366},[72,84954,14140],{"class":82},[72,84956,1413],{"class":78},[72,84958,70522],{"class":366},[72,84960,84961],{"class":74,"line":33455},[72,84962,84963],{"class":621},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[72,84965,84966,84968,84971,84973,84976,84978,84980,84982,84985,84987,84989,84991,84994,84996,84998],{"class":74,"line":33461},[72,84967,58646],{"class":78},[72,84969,84970],{"class":362}," subtotal",[72,84972,13990],{"class":78},[72,84974,84975],{"class":82}," ((price ",[72,84977,1009],{"class":78},[72,84979,6180],{"class":362},[72,84981,6944],{"class":78},[72,84983,84984],{"class":82}," count) ",[72,84986,1138],{"class":78},[72,84988,6180],{"class":362},[72,84990,31244],{"class":82},[72,84992,84993],{"class":358},"toFixed",[72,84995,564],{"class":82},[72,84997,640],{"class":362},[72,84999,570],{"class":82},[72,85001,85002],{"class":74,"line":33471},[72,85003,2828],{"emptyLinePlaceholder":490},[72,85005,85006,85008],{"class":74,"line":33477},[72,85007,74400],{"class":78},[72,85009,70586],{"class":366},[72,85011,85012],{"class":74,"line":33488},[72,85013,85014],{"class":366},"        \u003Cdiv class=\"item\">\n",[72,85016,85017,85020,85022],{"class":74,"line":33494},[72,85018,85019],{"class":366},"          \u003Cimg src=\"${",[72,85021,80238],{"class":82},[72,85023,80270],{"class":366},[72,85025,85026,85029,85031,85034,85036],{"class":74,"line":33504},[72,85027,85028],{"class":366},"          \u003Cp class=\"name\">${",[72,85030,80228],{"class":82},[72,85032,85033],{"class":366},"}${",[72,85035,1728],{"class":82},[72,85037,80280],{"class":366},[72,85039,85040,85043,85045],{"class":74,"line":33509},[72,85041,85042],{"class":366},"          \u003Cp class=\"spec\">${",[72,85044,127],{"class":82},[72,85046,80280],{"class":366},[72,85048,85049,85052,85054,85056,85058,85060,85062,85064],{"class":74,"line":33515},[72,85050,85051],{"class":366},"          \u003Cp class=\"price\">${",[72,85053,80233],{"class":82},[72,85055,1112],{"class":366},[72,85057,84993],{"class":358},[72,85059,564],{"class":366},[72,85061,640],{"class":362},[72,85063,983],{"class":366},[72,85065,80280],{"class":366},[72,85067,85068,85071,85073],{"class":74,"line":33564},[72,85069,85070],{"class":366},"          \u003Cp class=\"count\">x${",[72,85072,84851],{"class":82},[72,85074,80280],{"class":366},[72,85076,85077,85080,85083],{"class":74,"line":33611},[72,85078,85079],{"class":366},"          \u003Cp class=\"sub-total\">${",[72,85081,85082],{"class":82},"subtotal",[72,85084,80280],{"class":366},[72,85086,85087],{"class":74,"line":33616},[72,85088,85089],{"class":366},"        \u003C\u002Fdiv> \n",[72,85091,85092],{"class":74,"line":33622},[72,85093,85094],{"class":366},"             `\n",[72,85096,85097,85100,85102,85104,85106],{"class":74,"line":33641},[72,85098,85099],{"class":82},"    }).",[72,85101,74641],{"class":358},[72,85103,564],{"class":82},[72,85105,74646],{"class":366},[72,85107,570],{"class":82},[72,85109,85110],{"class":74,"line":33647},[72,85111,85112],{"class":621},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[72,85114,85115,85117,85119,85121,85123,85126,85128,85131,85133,85135,85137,85140,85143,85145,85148,85150,85152,85154,85157,85159,85161,85163,85165],{"class":74,"line":33667},[72,85116,11647],{"class":78},[72,85118,63203],{"class":362},[72,85120,13990],{"class":78},[72,85122,80466],{"class":82},[72,85124,85125],{"class":358},"reduce",[72,85127,2804],{"class":82},[72,85129,85130],{"class":5642},"prev",[72,85132,12861],{"class":82},[72,85134,80213],{"class":5642},[72,85136,14140],{"class":82},[72,85138,85139],{"class":78},"=>",[72,85141,85142],{"class":82}," prev ",[72,85144,1035],{"class":78},[72,85146,85147],{"class":82}," (item.price ",[72,85149,1009],{"class":78},[72,85151,6180],{"class":362},[72,85153,6944],{"class":78},[72,85155,85156],{"class":82}," item.count) ",[72,85158,1138],{"class":78},[72,85160,6180],{"class":362},[72,85162,12861],{"class":82},[72,85164,747],{"class":362},[72,85166,570],{"class":82},[72,85168,85169,85171,85173,85175,85178,85180,85182,85185,85187,85189,85191],{"class":74,"line":33673},[72,85170,52825],{"class":82},[72,85172,54817],{"class":358},[72,85174,564],{"class":82},[72,85176,85177],{"class":366},"'.amount'",[72,85179,74667],{"class":82},[72,85181,609],{"class":78},[72,85183,85184],{"class":82}," total.",[72,85186,84993],{"class":358},[72,85188,564],{"class":82},[72,85190,640],{"class":362},[72,85192,570],{"class":82},[72,85194,85195,85197,85199],{"class":74,"line":33679},[72,85196,52835],{"class":82},[72,85198,52231],{"class":51718},[72,85200,51725],{"class":82},[72,85202,85203,85205,85207],{"class":74,"line":33689},[72,85204,52203],{"class":82},[72,85206,52218],{"class":51718},[72,85208,51725],{"class":82},[72,85210,85211],{"class":74,"line":33694},[72,85212,2828],{"emptyLinePlaceholder":490},[72,85214,85215,85217,85219],{"class":74,"line":33700},[72,85216,52203],{"class":82},[72,85218,51053],{"class":51718},[72,85220,51725],{"class":82},[85,85222,85224],{"id":85223},"_411-编程思想","4.11 编程思想",[531,85226,85228],{"id":85227},"_4111-面向过程介绍","4.11.1 面向过程介绍",[15,85230,85231,85234],{},[707,85232,85233],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[15,85236,85237],{},"调用就可以了",[15,85239,85240],{},[1891,85241],{"alt":68,"src":85242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[531,85244,85246],{"id":85245},"_4112-面向对象","4.11.2 面向对象",[15,85248,85249],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[15,85251,85252],{},[1891,85253],{"alt":68,"src":85254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[15,85256,85257],{},"面向对象的特性：",[251,85259,85260,85263,85266],{},[25,85261,85262],{},"封装性",[25,85264,85265],{},"继承性",[25,85267,85268],{},"多态性",[531,85270,85272],{"id":85271},"_4113-两者比较","4.11.3 两者比较",[15,85274,85275],{},[1891,85276],{"alt":68,"src":85277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[85,85279,85281],{"id":85280},"_412-构造函数回顾","4.12 构造函数回顾",[15,85283,85284],{},[1891,85285],{"alt":68,"src":85286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[15,85288,85289],{},[1891,85290],{"alt":68,"src":85291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[15,85293,85294],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[15,85296,85297],{},[1891,85298],{"alt":68,"src":85299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[85,85301,85303],{"id":85302},"_413-原型","4.13 原型",[531,85305,85307],{"id":85306},"_4131-原型对象的认识","4.13.1 原型对象的认识",[15,85309,85310],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[15,85312,85313],{},[1891,85314],{"alt":68,"src":85315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[15,85317,85318],{},[1891,85319],{"alt":68,"src":85320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[15,85322,85323],{},"原型是构造函数的属性，它也是一个对象",[15,85325,85326],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[15,85328,85329],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[63,85331,85333],{"className":53485,"code":85332,"language":53487,"meta":68,"style":68},"\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",[34,85334,85335,85343,85348,85356,85361,85366,85371,85376,85381,85385,85389,85393,85398,85403,85407,85412,85417,85422,85427,85432,85436,85444],{"__ignoreMap":68},[72,85336,85337,85339,85341],{"class":74,"line":75},[72,85338,1464],{"class":82},[72,85340,52218],{"class":51718},[72,85342,51725],{"class":82},[72,85344,85345],{"class":74,"line":370},[72,85346,85347],{"class":621},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[72,85349,85350,85352,85354],{"class":74,"line":1608},[72,85351,52562],{"class":82},[72,85353,52231],{"class":51718},[72,85355,51725],{"class":82},[72,85357,85358],{"class":74,"line":1623},[72,85359,85360],{"class":82},"    function Star(uname, age) {\n",[72,85362,85363],{"class":74,"line":1629},[72,85364,85365],{"class":82},"      this.uname = uname,\n",[72,85367,85368],{"class":74,"line":1643},[72,85369,85370],{"class":82},"        this.age = age\n",[72,85372,85373],{"class":74,"line":1649},[72,85374,85375],{"class":82},"      \u002F\u002F this.sing = function () {\n",[72,85377,85378],{"class":74,"line":1740},[72,85379,85380],{"class":82},"      \u002F\u002F   console.log('唱歌')\n",[72,85382,85383],{"class":74,"line":1746},[72,85384,2828],{"emptyLinePlaceholder":490},[72,85386,85387],{"class":74,"line":1758},[72,85388,60455],{"class":82},[72,85390,85391],{"class":74,"line":2041},[72,85392,2615],{"class":82},[72,85394,85395],{"class":74,"line":2046},[72,85396,85397],{"class":82},"    Star.prototype.sing = function () {\n",[72,85399,85400],{"class":74,"line":2052},[72,85401,85402],{"class":82},"      console.log('唱歌')\n",[72,85404,85405],{"class":74,"line":2057},[72,85406,2615],{"class":82},[72,85408,85409],{"class":74,"line":2071},[72,85410,85411],{"class":82},"    \u002F\u002F console.dir(Star.prototype)\n",[72,85413,85414],{"class":74,"line":2076},[72,85415,85416],{"class":82},"    const pink = new Star('pink', 18)\n",[72,85418,85419],{"class":74,"line":2082},[72,85420,85421],{"class":82},"    const red = new Star('red', 20)\n",[72,85423,85424],{"class":74,"line":2103},[72,85425,85426],{"class":82},"    pink.sing()\n",[72,85428,85429],{"class":74,"line":2108},[72,85430,85431],{"class":82},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[72,85433,85434],{"class":74,"line":2122},[72,85435,2828],{"emptyLinePlaceholder":490},[72,85437,85438,85440,85442],{"class":74,"line":2127},[72,85439,52835],{"class":82},[72,85441,52231],{"class":51718},[72,85443,51725],{"class":82},[72,85445,85446,85448,85450],{"class":74,"line":2156},[72,85447,52203],{"class":82},[72,85449,52218],{"class":51718},[72,85451,51725],{"class":82},[15,85453,85454],{},[1891,85455],{"alt":68,"src":85456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[63,85458,85460],{"className":53485,"code":85459,"language":53487,"meta":68,"style":68},"\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",[34,85461,85462,85470,85478,85483,85488,85493,85498,85502,85507,85512,85517,85521,85526,85530,85534,85539,85543,85551],{"__ignoreMap":68},[72,85463,85464,85466,85468],{"class":74,"line":75},[72,85465,1464],{"class":82},[72,85467,52218],{"class":51718},[72,85469,51725],{"class":82},[72,85471,85472,85474,85476],{"class":74,"line":370},[72,85473,52562],{"class":82},[72,85475,52231],{"class":51718},[72,85477,51725],{"class":82},[72,85479,85480],{"class":74,"line":1608},[72,85481,85482],{"class":82},"    let that\n",[72,85484,85485],{"class":74,"line":1623},[72,85486,85487],{"class":82},"    function Star(uname) {\n",[72,85489,85490],{"class":74,"line":1629},[72,85491,85492],{"class":82},"      this.uname = uname\n",[72,85494,85495],{"class":74,"line":1643},[72,85496,85497],{"class":82},"      that = this\n",[72,85499,85500],{"class":74,"line":1649},[72,85501,2615],{"class":82},[72,85503,85504],{"class":74,"line":1740},[72,85505,85506],{"class":82},"    \u002F\u002F 实例对象是 ldh\n",[72,85508,85509],{"class":74,"line":1746},[72,85510,85511],{"class":82},"    const ldh = new Star('刘德华')\n",[72,85513,85514],{"class":74,"line":1758},[72,85515,85516],{"class":82},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[72,85518,85519],{"class":74,"line":2041},[72,85520,2828],{"emptyLinePlaceholder":490},[72,85522,85523],{"class":74,"line":2046},[72,85524,85525],{"class":82},"    Star.sing = function () {\n",[72,85527,85528],{"class":74,"line":2052},[72,85529,85402],{"class":82},[72,85531,85532],{"class":74,"line":2057},[72,85533,2615],{"class":82},[72,85535,85536],{"class":74,"line":2071},[72,85537,85538],{"class":82},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[72,85540,85541],{"class":74,"line":2076},[72,85542,2828],{"emptyLinePlaceholder":490},[72,85544,85545,85547,85549],{"class":74,"line":2082},[72,85546,52835],{"class":82},[72,85548,52231],{"class":51718},[72,85550,51725],{"class":82},[72,85552,85553,85555,85557],{"class":74,"line":2103},[72,85554,52203],{"class":82},[72,85556,52218],{"class":51718},[72,85558,51725],{"class":82},[15,85560,85561],{},"构造函数的this指向的是实例对象；",[15,85563,85564],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[531,85566,85568],{"id":85567},"_4132-数组扩展方法","4.13.2 数组扩展方法",[15,85570,85571],{},[1891,85572],{"alt":68,"src":85573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[63,85575,85577],{"className":53485,"code":85576,"language":53487,"meta":68,"style":68},"\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",[34,85578,85579,85587,85595,85600,85605,85610,85615,85620,85625,85630,85635,85640,85645,85649,85654,85659,85664,85669,85673,85678,85683,85688,85693,85697,85702,85707,85712,85717,85721,85726,85730,85738],{"__ignoreMap":68},[72,85580,85581,85583,85585],{"class":74,"line":75},[72,85582,1464],{"class":82},[72,85584,52218],{"class":51718},[72,85586,51725],{"class":82},[72,85588,85589,85591,85593],{"class":74,"line":370},[72,85590,52562],{"class":82},[72,85592,52231],{"class":51718},[72,85594,51725],{"class":82},[72,85596,85597],{"class":74,"line":1608},[72,85598,85599],{"class":82},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[72,85601,85602],{"class":74,"line":1623},[72,85603,85604],{"class":82},"    const arr = [1, 2, 3]\n",[72,85606,85607],{"class":74,"line":1629},[72,85608,85609],{"class":82},"    \u002F\u002F 自己定义数组的扩展方法\n",[72,85611,85612],{"class":74,"line":1643},[72,85613,85614],{"class":82},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[72,85616,85617],{"class":74,"line":1649},[72,85618,85619],{"class":82},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[72,85621,85622],{"class":74,"line":1740},[72,85623,85624],{"class":82},"    \u002F\u002F ①.最大值\n",[72,85626,85627],{"class":74,"line":1746},[72,85628,85629],{"class":82},"    Array.prototype.max = function () {\n",[72,85631,85632],{"class":74,"line":1758},[72,85633,85634],{"class":82},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[72,85636,85637],{"class":74,"line":2041},[72,85638,85639],{"class":82},"      return Math.max(...this)\n",[72,85641,85642],{"class":74,"line":2046},[72,85643,85644],{"class":82},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[72,85646,85647],{"class":74,"line":2052},[72,85648,2615],{"class":82},[72,85650,85651],{"class":74,"line":2057},[72,85652,85653],{"class":82},"    console.log(arr.max())\n",[72,85655,85656],{"class":74,"line":2071},[72,85657,85658],{"class":82},"    \u002F\u002F ②最小值\n",[72,85660,85661],{"class":74,"line":2076},[72,85662,85663],{"class":82},"    Array.prototype.min = function () {\n",[72,85665,85666],{"class":74,"line":2082},[72,85667,85668],{"class":82},"      return Math.min(...this)\n",[72,85670,85671],{"class":74,"line":2103},[72,85672,2615],{"class":82},[72,85674,85675],{"class":74,"line":2108},[72,85676,85677],{"class":82},"    console.log(arr.min())\n",[72,85679,85680],{"class":74,"line":2122},[72,85681,85682],{"class":82},"    \u002F\u002F③求和\n",[72,85684,85685],{"class":74,"line":2127},[72,85686,85687],{"class":82},"    Array.prototype.sum = function () {\n",[72,85689,85690],{"class":74,"line":2156},[72,85691,85692],{"class":82},"      return this.reduce((prev, current) => prev + current, 0)\n",[72,85694,85695],{"class":74,"line":2161},[72,85696,2615],{"class":82},[72,85698,85699],{"class":74,"line":2178},[72,85700,85701],{"class":82},"    console.log(arr.sum())\n",[72,85703,85704],{"class":74,"line":2183},[72,85705,85706],{"class":82},"    \u002F\u002F ③排序\n",[72,85708,85709],{"class":74,"line":2188},[72,85710,85711],{"class":82},"    Array.prototype.rever = function () {\n",[72,85713,85714],{"class":74,"line":2193},[72,85715,85716],{"class":82},"      return this.reverse()\n",[72,85718,85719],{"class":74,"line":2207},[72,85720,2615],{"class":82},[72,85722,85723],{"class":74,"line":2212},[72,85724,85725],{"class":82},"    console.log(arr.rever())\n",[72,85727,85728],{"class":74,"line":3005},[72,85729,2828],{"emptyLinePlaceholder":490},[72,85731,85732,85734,85736],{"class":74,"line":3019},[72,85733,52835],{"class":82},[72,85735,52231],{"class":51718},[72,85737,51725],{"class":82},[72,85739,85740,85742,85744],{"class":74,"line":3027},[72,85741,52203],{"class":82},[72,85743,52218],{"class":51718},[72,85745,51725],{"class":82},[15,85747,85748],{},[1891,85749],{"alt":68,"src":85750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[531,85752,85754],{"id":85753},"_4133-constructor-属性","4.13.3 constructor 属性",[15,85756,85757],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[15,85759,85760],{},[1891,85761],{"alt":68,"src":85762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[63,85764,85766],{"className":53485,"code":85765,"language":53487,"meta":68,"style":68},"\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",[34,85767,85768,85776,85784,85789,85794,85798,85803,85808,85813,85821],{"__ignoreMap":68},[72,85769,85770,85772,85774],{"class":74,"line":75},[72,85771,1464],{"class":82},[72,85773,52218],{"class":51718},[72,85775,51725],{"class":82},[72,85777,85778,85780,85782],{"class":74,"line":370},[72,85779,52562],{"class":82},[72,85781,52231],{"class":51718},[72,85783,51725],{"class":82},[72,85785,85786],{"class":74,"line":1608},[72,85787,85788],{"class":82},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[72,85790,85791],{"class":74,"line":1623},[72,85792,85793],{"class":82},"    function Star() {\n",[72,85795,85796],{"class":74,"line":1629},[72,85797,2615],{"class":82},[72,85799,85800],{"class":74,"line":1643},[72,85801,85802],{"class":82},"    const ldh = new Star()\n",[72,85804,85805],{"class":74,"line":1649},[72,85806,85807],{"class":82},"    console.log(Star.prototype)\n",[72,85809,85810],{"class":74,"line":1740},[72,85811,85812],{"class":82},"    console.log(Star.prototype.constructor === Star)\n",[72,85814,85815,85817,85819],{"class":74,"line":1746},[72,85816,52835],{"class":82},[72,85818,52231],{"class":51718},[72,85820,51725],{"class":82},[72,85822,85823,85825,85827],{"class":74,"line":1758},[72,85824,52203],{"class":82},[72,85826,52218],{"class":51718},[72,85828,51725],{"class":82},[15,85830,85831],{},[1891,85832],{"alt":68,"src":85833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[15,85835,85836],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[63,85838,85840],{"className":53485,"code":85839,"language":53487,"meta":68,"style":68},"  \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",[34,85841,85842,85850,85854,85858,85862,85867,85872,85877,85881,85886,85891,85896,85901,85906,85911,85915,85919,85924,85929,85934,85938,85943,85948,85952,85956,85960],{"__ignoreMap":68},[72,85843,85844,85846,85848],{"class":74,"line":75},[72,85845,52562],{"class":82},[72,85847,52231],{"class":51718},[72,85849,51725],{"class":82},[72,85851,85852],{"class":74,"line":370},[72,85853,85788],{"class":82},[72,85855,85856],{"class":74,"line":1608},[72,85857,85793],{"class":82},[72,85859,85860],{"class":74,"line":1623},[72,85861,2615],{"class":82},[72,85863,85864],{"class":74,"line":1629},[72,85865,85866],{"class":82},"    \u002F\u002F const ldh = new Star()\n",[72,85868,85869],{"class":74,"line":1643},[72,85870,85871],{"class":82},"    \u002F\u002F console.log(Star.prototype)\n",[72,85873,85874],{"class":74,"line":1649},[72,85875,85876],{"class":82},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[72,85878,85879],{"class":74,"line":1740},[72,85880,2828],{"emptyLinePlaceholder":490},[72,85882,85883],{"class":74,"line":1746},[72,85884,85885],{"class":82},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[72,85887,85888],{"class":74,"line":1758},[72,85889,85890],{"class":82},"    \u002F\u002F Star.prototype.sing = function () {\n",[72,85892,85893],{"class":74,"line":2041},[72,85894,85895],{"class":82},"    \u002F\u002F   console.log('唱歌')\n",[72,85897,85898],{"class":74,"line":2046},[72,85899,85900],{"class":82},"    \u002F\u002F }\n",[72,85902,85903],{"class":74,"line":2052},[72,85904,85905],{"class":82},"    \u002F\u002F Star.prototype.dance = function () {\n",[72,85907,85908],{"class":74,"line":2057},[72,85909,85910],{"class":82},"    \u002F\u002F   console.log('跳舞')\n",[72,85912,85913],{"class":74,"line":2071},[72,85914,85900],{"class":82},[72,85916,85917],{"class":74,"line":2076},[72,85918,85807],{"class":82},[72,85920,85921],{"class":74,"line":2082},[72,85922,85923],{"class":82},"    Star.prototype = {\n",[72,85925,85926],{"class":74,"line":2103},[72,85927,85928],{"class":82},"      sing: function () {\n",[72,85930,85931],{"class":74,"line":2108},[72,85932,85933],{"class":82},"        console.log('唱歌')\n",[72,85935,85936],{"class":74,"line":2122},[72,85937,78310],{"class":82},[72,85939,85940],{"class":74,"line":2127},[72,85941,85942],{"class":82},"      dance: function () {\n",[72,85944,85945],{"class":74,"line":2156},[72,85946,85947],{"class":82},"        console.log('跳舞')\n",[72,85949,85950],{"class":74,"line":2161},[72,85951,52816],{"class":82},[72,85953,85954],{"class":74,"line":2178},[72,85955,2615],{"class":82},[72,85957,85958],{"class":74,"line":2183},[72,85959,85807],{"class":82},[72,85961,85962,85964,85966],{"class":74,"line":2188},[72,85963,52835],{"class":82},[72,85965,52231],{"class":51718},[72,85967,51725],{"class":82},[15,85969,85970],{},"进行输出结果后会发现：",[15,85972,85973],{},[1891,85974],{"alt":68,"src":85975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[15,85977,85978],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[15,85980,85981],{},"所以，要重新指回创造这个原型对象的构造函数",[63,85983,85985],{"className":71631,"code":85984,"language":71633,"meta":68,"style":68},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[34,85986,85987,86001,86006,86011,86022,86035,86040,86051,86065,86069],{"__ignoreMap":68},[72,85988,85989,85992,85994,85997,85999],{"class":74,"line":75},[72,85990,85991],{"class":362},"Star",[72,85993,1112],{"class":82},[72,85995,85996],{"class":362},"prototype",[72,85998,13990],{"class":78},[72,86000,15998],{"class":82},[72,86002,86003],{"class":74,"line":370},[72,86004,86005],{"class":621},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[72,86007,86008],{"class":74,"line":1608},[72,86009,86010],{"class":82},"  constructor: Star,\n",[72,86012,86013,86016,86018,86020],{"class":74,"line":1623},[72,86014,86015],{"class":358},"  sing",[72,86017,51855],{"class":82},[72,86019,54867],{"class":78},[72,86021,54870],{"class":82},[72,86023,86024,86026,86028,86030,86033],{"class":74,"line":1629},[72,86025,74171],{"class":82},[72,86027,58665],{"class":358},[72,86029,564],{"class":82},[72,86031,86032],{"class":366},"'唱歌'",[72,86034,570],{"class":82},[72,86036,86037],{"class":74,"line":1643},[72,86038,86039],{"class":82},"   },\n",[72,86041,86042,86045,86047,86049],{"class":74,"line":1649},[72,86043,86044],{"class":358},"   dance",[72,86046,51855],{"class":82},[72,86048,54867],{"class":78},[72,86050,54870],{"class":82},[72,86052,86053,86056,86058,86060,86063],{"class":74,"line":1740},[72,86054,86055],{"class":82},"     console.",[72,86057,58665],{"class":358},[72,86059,564],{"class":82},[72,86061,86062],{"class":366},"'跳舞'",[72,86064,570],{"class":82},[72,86066,86067],{"class":74,"line":1746},[72,86068,4737],{"class":82},[72,86070,86071],{"class":74,"line":1758},[72,86072,1994],{"class":82},[15,86074,86075],{},[1891,86076],{"alt":68,"src":86077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[15,86079,86080],{},"总结1：",[15,86082,86083],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[15,86085,86086],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[15,86088,86089],{},"constructor指的是他的来源",[15,86091,86092],{},[1891,86093],{"alt":68,"src":86094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[15,86096,86097],{},[1891,86098],{"alt":68,"src":86099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[15,86101,86102],{},"总结2：",[15,86104,86105],{},[1891,86106],{"alt":68,"src":86107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[15,86109,86110],{},[1891,86111],{"alt":68,"src":86112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[15,86114,86115],{},[1891,86116],{"alt":68,"src":86117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[531,86119,86121],{"id":86120},"_4134-对象原型","4.13.4 对象原型",[15,86123,86124],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[15,86126,86127],{},"对象原型就是__proto__这个属性",[15,86129,86130],{},[1891,86131],{"alt":68,"src":86132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[15,86134,86135],{},[1891,86136],{"alt":68,"src":86137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[15,86139,86140],{},[1891,86141],{"alt":68,"src":86142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[15,86144,86145],{},[1891,86146],{"alt":68,"src":86147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[63,86149,86151],{"className":53485,"code":86150,"language":53487,"meta":68,"style":68},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[34,86152,86153,86161,86169,86173,86177,86181,86186,86194],{"__ignoreMap":68},[72,86154,86155,86157,86159],{"class":74,"line":75},[72,86156,1464],{"class":82},[72,86158,52218],{"class":51718},[72,86160,51725],{"class":82},[72,86162,86163,86165,86167],{"class":74,"line":370},[72,86164,52562],{"class":82},[72,86166,52231],{"class":51718},[72,86168,51725],{"class":82},[72,86170,86171],{"class":74,"line":1608},[72,86172,85793],{"class":82},[72,86174,86175],{"class":74,"line":1623},[72,86176,2615],{"class":82},[72,86178,86179],{"class":74,"line":1629},[72,86180,85802],{"class":82},[72,86182,86183],{"class":74,"line":1643},[72,86184,86185],{"class":82},"    console.log(ldh)\n",[72,86187,86188,86190,86192],{"class":74,"line":1649},[72,86189,52835],{"class":82},[72,86191,52231],{"class":51718},[72,86193,51725],{"class":82},[72,86195,86196,86198,86200],{"class":74,"line":1740},[72,86197,52203],{"class":82},[72,86199,52218],{"class":51718},[72,86201,51725],{"class":82},[15,86203,86204],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[15,86206,86207],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[15,86209,86210],{},[1891,86211],{"alt":68,"src":86212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[15,86214,86215],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[15,86217,86218],{},"对象原型指向原型对象",[15,86220,86221],{},[1891,86222],{"alt":68,"src":86223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[15,86225,86226],{},[1891,86227],{"alt":68,"src":86228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[15,86230,86231],{},[1891,86232],{"alt":68,"src":86233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[531,86235,86237],{"id":86236},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[15,86239,86240],{},[1891,86241],{"alt":68,"src":86242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[22,86244,86245,86248,86251,86254],{},[25,86246,86247],{},"构造函数通过new的形式实例化得到实例对象",[25,86249,86250],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[25,86252,86253],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[25,86255,86256],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[15,86258,86259],{},[1891,86260],{"alt":68,"src":86261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[15,86263,86264],{},"题目梳理：",[15,86266,86267],{},[1891,86268],{"alt":68,"src":86269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[531,86271,86273],{"id":86272},"_4136-原型继承","4.13.6 原型继承",[15,86275,86276],{},[1891,86277],{"alt":68,"src":86278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[15,86280,86281],{},[1891,86282],{"alt":68,"src":86283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[15,86285,86286],{},[1891,86287],{"alt":68,"src":86288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[15,86290,86291],{},[1891,86292],{"alt":68,"src":86293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[15,86295,86296],{},[1891,86297],{"alt":68,"src":86298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[15,86300,86301],{},[1891,86302],{"alt":68,"src":86303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[15,86305,86306],{},[1891,86307],{"alt":68,"src":86308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[15,86310,86311],{},[1891,86312],{"alt":68,"src":86313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[15,86315,86316],{},"回顾：构造函数每次new得到对象都是不同的",[531,86318,86320],{"id":86319},"_4137-原型链","4.13.7 原型链",[15,86322,86323],{},[1891,86324],{"alt":68,"src":86325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[15,86327,86328],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[15,86330,86331],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[15,86333,86334],{},"大哥是Object",[15,86336,86337],{},[1891,86338],{"alt":68,"src":86339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[15,86341,86342],{},[1891,86343],{"alt":68,"src":86344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[15,86346,86347],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[15,86349,86350],{},"万物皆对象",[531,86352,86354],{"id":86353},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[15,86356,86357],{},"模态框",[15,86359,86360],{},"以后遇见这个效果直接使用这个就行",[15,86362,86363],{},[1891,86364],{"alt":68,"src":86365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[15,86367,86368],{},[1891,86369],{"alt":68,"src":86370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[15,86372,86373],{},[1891,86374],{"alt":68,"src":86375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[15,86377,86378],{},[1891,86379],{"alt":68,"src":86380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[15,86382,86383],{},"补充知识点：",[22,86385,86386],{},[25,86387,86388],{},"append()",[15,86390,86391],{},[1891,86392],{"alt":68,"src":86393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[63,86395,86397],{"className":51051,"code":86396,"language":51053,"meta":68,"style":68},"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",[34,86398,86399,86404,86409,86414,86418,86422,86426,86431,86436,86441,86445],{"__ignoreMap":68},[72,86400,86401],{"class":74,"line":75},[72,86402,86403],{"class":82},"append(param1)\n",[72,86405,86406],{"class":74,"line":370},[72,86407,86408],{"class":82},"append(param1, param2)\n",[72,86410,86411],{"class":74,"line":1608},[72,86412,86413],{"class":82},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[72,86415,86416],{"class":74,"line":1623},[72,86417,2828],{"emptyLinePlaceholder":490},[72,86419,86420],{"class":74,"line":1629},[72,86421,2828],{"emptyLinePlaceholder":490},[72,86423,86424],{"class":74,"line":1643},[72,86425,2828],{"emptyLinePlaceholder":490},[72,86427,86428],{"class":74,"line":1649},[72,86429,86430],{"class":82},"let div = document.createElement(\"div\");\n",[72,86432,86433],{"class":74,"line":1740},[72,86434,86435],{"class":82},"let p = document.createElement(\"p\");\n",[72,86437,86438],{"class":74,"line":1746},[72,86439,86440],{"class":82},"div.append(p);\n",[72,86442,86443],{"class":74,"line":1758},[72,86444,2828],{"emptyLinePlaceholder":490},[72,86446,86447,86450,86452],{"class":74,"line":2041},[72,86448,86449],{"class":82},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[72,86451,15],{"class":51718},[72,86453,86454],{"class":82},"> ]\n",[22,86456,86457],{"start":370},[25,86458,86459],{},"remove()",[15,86461,86462],{},"自己删自己",[15,86464,86465],{},[1891,86466],{"alt":68,"src":86467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[63,86469,86471],{"className":51051,"code":86470,"language":51053,"meta":68,"style":68},"\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",[34,86472,86473,86483,86497,86501,86509,86523,86543,86555,86563,86570,86582,86595,86630,86642,86653,86665,86677,86689,86716,86726,86730,86734,86743,86755,86769,86779,86791,86795,86799,86809,86820,86830,86840,86853,86866,86876,86880,86884,86893,86903,86915,86919,86923,86932,86942,86952,86964,86968,86972,86982,86998,87009,87019,87029,87041,87053,87065,87069,87073,87086,87097,87101,87109,87117,87121,87129,87149,87169,87177,87182,87208,87213,87218,87237,87242,87254,87259,87270,87280,87290,87295,87300,87304,87309,87314,87319,87339,87344,87364,87369,87383,87388,87393,87398,87414,87418,87423,87452,87457,87462,87467,87478,87482,87486,87490,87495,87520,87525,87550,87555,87564,87568,87573,87598,87602,87627,87631,87640,87644,87649,87667,87677,87681,87689,87697,87701],{"__ignoreMap":68},[72,86474,86475,86477,86479,86481],{"class":74,"line":75},[72,86476,51715],{"class":82},[72,86478,51719],{"class":51718},[72,86480,51722],{"class":358},[72,86482,51725],{"class":82},[72,86484,86485,86487,86489,86491,86493,86495],{"class":74,"line":370},[72,86486,1464],{"class":82},[72,86488,51053],{"class":51718},[72,86490,51734],{"class":358},[72,86492,609],{"class":82},[72,86494,51739],{"class":366},[72,86496,51725],{"class":82},[72,86498,86499],{"class":74,"line":1608},[72,86500,2828],{"emptyLinePlaceholder":490},[72,86502,86503,86505,86507],{"class":74,"line":1623},[72,86504,1464],{"class":82},[72,86506,51752],{"class":51718},[72,86508,51725],{"class":82},[72,86510,86511,86513,86515,86517,86519,86521],{"class":74,"line":1629},[72,86512,52562],{"class":82},[72,86514,51762],{"class":51718},[72,86516,51765],{"class":358},[72,86518,609],{"class":82},[72,86520,51770],{"class":366},[72,86522,51725],{"class":82},[72,86524,86525,86527,86529,86531,86533,86535,86537,86539,86541],{"class":74,"line":1643},[72,86526,52562],{"class":82},[72,86528,51762],{"class":51718},[72,86530,15346],{"class":358},[72,86532,609],{"class":82},[72,86534,51809],{"class":366},[72,86536,51789],{"class":358},[72,86538,609],{"class":82},[72,86540,51816],{"class":366},[72,86542,51725],{"class":82},[72,86544,86545,86547,86549,86551,86553],{"class":74,"line":1649},[72,86546,52562],{"class":82},[72,86548,51825],{"class":51718},[72,86550,51828],{"class":82},[72,86552,51825],{"class":51718},[72,86554,51725],{"class":82},[72,86556,86557,86559,86561],{"class":74,"line":1740},[72,86558,52562],{"class":82},[72,86560,473],{"class":51718},[72,86562,51725],{"class":82},[72,86564,86565,86568],{"class":74,"line":1746},[72,86566,86567],{"class":358},"    .modal",[72,86569,15998],{"class":82},[72,86571,86572,86574,86576,86578,86580],{"class":74,"line":1758},[72,86573,55189],{"class":362},[72,86575,51855],{"class":82},[72,86577,4401],{"class":362},[72,86579,51910],{"class":78},[72,86581,1719],{"class":82},[72,86583,86584,86587,86589,86591,86593],{"class":74,"line":2041},[72,86585,86586],{"class":362},"      min-height",[72,86588,51855],{"class":82},[72,86590,865],{"class":362},[72,86592,51910],{"class":78},[72,86594,1719],{"class":82},[72,86596,86597,86599,86601,86603,86605,86607,86609,86611,86613,86615,86617,86619,86621,86623,86625,86628],{"class":74,"line":2046},[72,86598,79168],{"class":362},[72,86600,51855],{"class":82},[72,86602,747],{"class":362},[72,86604,4521],{"class":362},[72,86606,2466],{"class":362},[72,86608,51910],{"class":78},[72,86610,79185],{"class":362},[72,86612,564],{"class":82},[72,86614,747],{"class":362},[72,86616,12861],{"class":82},[72,86618,747],{"class":362},[72,86620,12861],{"class":82},[72,86622,747],{"class":362},[72,86624,12861],{"class":82},[72,86626,86627],{"class":362},"0.1",[72,86629,3147],{"class":82},[72,86631,86632,86634,86636,86638,86640],{"class":74,"line":2052},[72,86633,55552],{"class":362},[72,86635,51855],{"class":82},[72,86637,847],{"class":362},[72,86639,51910],{"class":78},[72,86641,1719],{"class":82},[72,86643,86644,86646,86648,86651],{"class":74,"line":2057},[72,86645,55177],{"class":362},[72,86647,51855],{"class":82},[72,86649,86650],{"class":362},"fixed",[72,86652,1719],{"class":82},[72,86654,86655,86658,86660,86663],{"class":74,"line":2071},[72,86656,86657],{"class":362},"      z-index",[72,86659,51855],{"class":82},[72,86661,86662],{"class":362},"999",[72,86664,1719],{"class":82},[72,86666,86667,86669,86671,86673,86675],{"class":74,"line":2076},[72,86668,55256],{"class":362},[72,86670,51855],{"class":82},[72,86672,1210],{"class":362},[72,86674,882],{"class":78},[72,86676,1719],{"class":82},[72,86678,86679,86681,86683,86685,86687],{"class":74,"line":2082},[72,86680,55365],{"class":362},[72,86682,51855],{"class":82},[72,86684,1210],{"class":362},[72,86686,882],{"class":78},[72,86688,1719],{"class":82},[72,86690,86691,86693,86695,86697,86699,86702,86704,86706,86708,86710,86712,86714],{"class":74,"line":2103},[72,86692,79209],{"class":362},[72,86694,51855],{"class":82},[72,86696,79214],{"class":362},[72,86698,564],{"class":82},[72,86700,86701],{"class":362},"-50",[72,86703,882],{"class":78},[72,86705,12861],{"class":82},[72,86707,86701],{"class":362},[72,86709,882],{"class":78},[72,86711,12861],{"class":82},[72,86713,747],{"class":362},[72,86715,3147],{"class":82},[72,86717,86718,86720,86722,86724],{"class":74,"line":2108},[72,86719,55302],{"class":362},[72,86721,51855],{"class":82},[72,86723,61260],{"class":362},[72,86725,1719],{"class":82},[72,86727,86728],{"class":74,"line":2122},[72,86729,2615],{"class":82},[72,86731,86732],{"class":74,"line":2127},[72,86733,2828],{"emptyLinePlaceholder":490},[72,86735,86736,86738,86741],{"class":74,"line":2156},[72,86737,86567],{"class":358},[72,86739,86740],{"class":358}," .header",[72,86742,15998],{"class":82},[72,86744,86745,86747,86749,86751,86753],{"class":74,"line":2161},[72,86746,57777],{"class":362},[72,86748,51855],{"class":82},[72,86750,955],{"class":362},[72,86752,51910],{"class":78},[72,86754,1719],{"class":82},[72,86756,86757,86759,86761,86763,86765,86767],{"class":74,"line":2178},[72,86758,55113],{"class":362},[72,86760,51855],{"class":82},[72,86762,747],{"class":362},[72,86764,2466],{"class":362},[72,86766,51910],{"class":78},[72,86768,1719],{"class":82},[72,86770,86771,86773,86775,86777],{"class":74,"line":2183},[72,86772,55177],{"class":362},[72,86774,51855],{"class":82},[72,86776,55182],{"class":362},[72,86778,1719],{"class":82},[72,86780,86781,86783,86785,86787,86789],{"class":74,"line":2188},[72,86782,55340],{"class":362},[72,86784,51855],{"class":82},[72,86786,1254],{"class":362},[72,86788,51910],{"class":78},[72,86790,1719],{"class":82},[72,86792,86793],{"class":74,"line":2193},[72,86794,2615],{"class":82},[72,86796,86797],{"class":74,"line":2207},[72,86798,2828],{"emptyLinePlaceholder":490},[72,86800,86801,86803,86805,86807],{"class":74,"line":2212},[72,86802,86567],{"class":358},[72,86804,86740],{"class":358},[72,86806,3460],{"class":51718},[72,86808,15998],{"class":82},[72,86810,86811,86814,86816,86818],{"class":74,"line":3005},[72,86812,86813],{"class":362},"      font-style",[72,86815,51855],{"class":82},[72,86817,64259],{"class":362},[72,86819,1719],{"class":82},[72,86821,86822,86824,86826,86828],{"class":74,"line":3019},[72,86823,57834],{"class":362},[72,86825,51855],{"class":82},[72,86827,62488],{"class":362},[72,86829,1719],{"class":82},[72,86831,86832,86834,86836,86838],{"class":74,"line":3027},[72,86833,55177],{"class":362},[72,86835,51855],{"class":82},[72,86837,55249],{"class":362},[72,86839,1719],{"class":82},[72,86841,86842,86845,86847,86849,86851],{"class":74,"line":3032},[72,86843,86844],{"class":362},"      right",[72,86846,51855],{"class":82},[72,86848,1129],{"class":362},[72,86850,51910],{"class":78},[72,86852,1719],{"class":82},[72,86854,86855,86857,86859,86862,86864],{"class":74,"line":3038},[72,86856,55365],{"class":362},[72,86858,51855],{"class":82},[72,86860,86861],{"class":362},"-2",[72,86863,51910],{"class":78},[72,86865,1719],{"class":82},[72,86867,86868,86870,86872,86874],{"class":74,"line":3044},[72,86869,62443],{"class":362},[72,86871,51855],{"class":82},[72,86873,62448],{"class":362},[72,86875,1719],{"class":82},[72,86877,86878],{"class":74,"line":3049},[72,86879,2615],{"class":82},[72,86881,86882],{"class":74,"line":8374},[72,86883,2828],{"emptyLinePlaceholder":490},[72,86885,86886,86888,86891],{"class":74,"line":8398},[72,86887,86567],{"class":358},[72,86889,86890],{"class":358}," .body",[72,86892,15998],{"class":82},[72,86894,86895,86897,86899,86901],{"class":74,"line":8403},[72,86896,57704],{"class":362},[72,86898,51855],{"class":82},[72,86900,52010],{"class":362},[72,86902,1719],{"class":82},[72,86904,86905,86907,86909,86911,86913],{"class":74,"line":8409},[72,86906,55113],{"class":362},[72,86908,51855],{"class":82},[72,86910,1000],{"class":362},[72,86912,51910],{"class":78},[72,86914,1719],{"class":82},[72,86916,86917],{"class":74,"line":8436},[72,86918,2615],{"class":82},[72,86920,86921],{"class":74,"line":8441},[72,86922,2828],{"emptyLinePlaceholder":490},[72,86924,86925,86927,86930],{"class":74,"line":8447},[72,86926,86567],{"class":358},[72,86928,86929],{"class":358}," .footer",[72,86931,15998],{"class":82},[72,86933,86934,86936,86938,86940],{"class":74,"line":8459},[72,86935,55427],{"class":362},[72,86937,51855],{"class":82},[72,86939,51895],{"class":362},[72,86941,1719],{"class":82},[72,86943,86944,86946,86948,86950],{"class":74,"line":8471},[72,86945,55438],{"class":362},[72,86947,51855],{"class":82},[72,86949,51998],{"class":362},[72,86951,1719],{"class":82},[72,86953,86954,86956,86958,86960,86962],{"class":74,"line":8483},[72,86955,55113],{"class":362},[72,86957,51855],{"class":82},[72,86959,1000],{"class":362},[72,86961,51910],{"class":78},[72,86963,1719],{"class":82},[72,86965,86966],{"class":74,"line":10142},[72,86967,2615],{"class":82},[72,86969,86970],{"class":74,"line":10167},[72,86971,2828],{"emptyLinePlaceholder":490},[72,86973,86974,86976,86978,86980],{"class":74,"line":10190},[72,86975,86567],{"class":358},[72,86977,86929],{"class":358},[72,86979,1827],{"class":51718},[72,86981,15998],{"class":82},[72,86983,86984,86986,86988,86990,86992,86994,86996],{"class":74,"line":10214},[72,86985,55113],{"class":362},[72,86987,51855],{"class":82},[72,86989,634],{"class":362},[72,86991,51910],{"class":78},[72,86993,2511],{"class":362},[72,86995,51910],{"class":78},[72,86997,1719],{"class":82},[72,86999,87000,87002,87004,87007],{"class":74,"line":10219},[72,87001,62139],{"class":362},[72,87003,51855],{"class":82},[72,87005,87006],{"class":362},"#ccc",[72,87008,1719],{"class":82},[72,87010,87011,87013,87015,87017],{"class":74,"line":10224},[72,87012,64388],{"class":362},[72,87014,51855],{"class":82},[72,87016,55155],{"class":362},[72,87018,1719],{"class":82},[72,87020,87021,87023,87025,87027],{"class":74,"line":10229},[72,87022,57834],{"class":362},[72,87024,51855],{"class":82},[72,87026,61260],{"class":362},[72,87028,1719],{"class":82},[72,87030,87031,87033,87035,87037,87039],{"class":74,"line":10238},[72,87032,55552],{"class":362},[72,87034,51855],{"class":82},[72,87036,640],{"class":362},[72,87038,51910],{"class":78},[72,87040,1719],{"class":82},[72,87042,87043,87045,87047,87049,87051],{"class":74,"line":10243},[72,87044,62168],{"class":362},[72,87046,51855],{"class":82},[72,87048,1000],{"class":362},[72,87050,51910],{"class":78},[72,87052,1719],{"class":82},[72,87054,87055,87057,87059,87061,87063],{"class":74,"line":10249},[72,87056,55340],{"class":362},[72,87058,51855],{"class":82},[72,87060,1103],{"class":362},[72,87062,51910],{"class":78},[72,87064,1719],{"class":82},[72,87066,87067],{"class":74,"line":10270},[72,87068,2615],{"class":82},[72,87070,87071],{"class":74,"line":10276},[72,87072,2828],{"emptyLinePlaceholder":490},[72,87074,87075,87077,87079,87081,87084],{"class":74,"line":10290},[72,87076,86567],{"class":358},[72,87078,86929],{"class":358},[72,87080,1827],{"class":51718},[72,87082,87083],{"class":358},".submit",[72,87085,15998],{"class":82},[72,87087,87088,87090,87092,87095],{"class":74,"line":10296},[72,87089,55302],{"class":362},[72,87091,51855],{"class":82},[72,87093,87094],{"class":362},"#369",[72,87096,1719],{"class":82},[72,87098,87099],{"class":74,"line":10323},[72,87100,2615],{"class":82},[72,87102,87103,87105,87107],{"class":74,"line":10332},[72,87104,52835],{"class":82},[72,87106,473],{"class":51718},[72,87108,51725],{"class":82},[72,87110,87111,87113,87115],{"class":74,"line":10338},[72,87112,52203],{"class":82},[72,87114,51752],{"class":51718},[72,87116,51725],{"class":82},[72,87118,87119],{"class":74,"line":10346},[72,87120,2828],{"emptyLinePlaceholder":490},[72,87122,87123,87125,87127],{"class":74,"line":10351},[72,87124,1464],{"class":82},[72,87126,52218],{"class":51718},[72,87128,51725],{"class":82},[72,87130,87131,87133,87135,87137,87139,87142,87145,87147],{"class":74,"line":17030},[72,87132,52562],{"class":82},[72,87134,54305],{"class":51718},[72,87136,15385],{"class":358},[72,87138,609],{"class":82},[72,87140,87141],{"class":366},"\"delete\"",[72,87143,87144],{"class":82},">删除\u003C\u002F",[72,87146,54305],{"class":51718},[72,87148,51725],{"class":82},[72,87150,87151,87153,87155,87157,87159,87162,87165,87167],{"class":74,"line":17036},[72,87152,52562],{"class":82},[72,87154,54305],{"class":51718},[72,87156,15385],{"class":358},[72,87158,609],{"class":82},[72,87160,87161],{"class":366},"\"login\"",[72,87163,87164],{"class":82},">登录\u003C\u002F",[72,87166,54305],{"class":51718},[72,87168,51725],{"class":82},[72,87170,87171,87173,87175],{"class":74,"line":17059},[72,87172,52562],{"class":82},[72,87174,52231],{"class":51718},[72,87176,51725],{"class":82},[72,87178,87179],{"class":74,"line":17065},[72,87180,87181],{"class":621},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[72,87183,87184,87186,87189,87191,87193,87195,87197,87199,87202,87204,87206],{"class":74,"line":17088},[72,87185,70502],{"class":78},[72,87187,87188],{"class":358}," Modal",[72,87190,564],{"class":82},[72,87192,51825],{"class":5642},[72,87194,13990],{"class":78},[72,87196,70348],{"class":366},[72,87198,12861],{"class":82},[72,87200,87201],{"class":5642},"message",[72,87203,13990],{"class":78},[72,87205,70348],{"class":366},[72,87207,12868],{"class":82},[72,87209,87210],{"class":74,"line":17102},[72,87211,87212],{"class":621},"      \u002F\u002F 创建Model 模态框盒子\n",[72,87214,87215],{"class":74,"line":17122},[72,87216,87217],{"class":621},"      \u002F\u002F 1.1 创建div标签\n",[72,87219,87220,87222,87225,87227,87229,87231,87233,87235],{"class":74,"line":17128},[72,87221,70469],{"class":362},[72,87223,87224],{"class":82},".modalBox ",[72,87226,609],{"class":78},[72,87228,54814],{"class":82},[72,87230,70569],{"class":358},[72,87232,564],{"class":82},[72,87234,82349],{"class":366},[72,87236,570],{"class":82},[72,87238,87239],{"class":74,"line":17139},[72,87240,87241],{"class":621},"      \u002F\u002F 1.2 给div 添加类名为model\n",[72,87243,87244,87246,87249,87251],{"class":74,"line":17162},[72,87245,70469],{"class":362},[72,87247,87248],{"class":82},".modalBox.className ",[72,87250,609],{"class":78},[72,87252,87253],{"class":366}," 'modal'\n",[72,87255,87256],{"class":74,"line":17184},[72,87257,87258],{"class":621},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[72,87260,87261,87263,87266,87268],{"class":74,"line":17189},[72,87262,70469],{"class":362},[72,87264,87265],{"class":82},".modalBox.innerHTML ",[72,87267,609],{"class":78},[72,87269,70586],{"class":366},[72,87271,87272,87275,87277],{"class":74,"line":17195},[72,87273,87274],{"class":366},"        \u003Cdiv class=\"header\">${",[72,87276,51825],{"class":82},[72,87278,87279],{"class":366},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[72,87281,87282,87285,87287],{"class":74,"line":17209},[72,87283,87284],{"class":366},"        \u003Cdiv class=\"body\">${",[72,87286,87201],{"class":82},[72,87288,87289],{"class":366},"}\u003C\u002Fdiv>\n",[72,87291,87292],{"class":74,"line":17222},[72,87293,87294],{"class":366},"      `\n",[72,87296,87297],{"class":74,"line":17227},[72,87298,87299],{"class":621},"      \u002F\u002F console.log(this.modalBox)\n",[72,87301,87302],{"class":74,"line":17241},[72,87303,2615],{"class":82},[72,87305,87306],{"class":74,"line":17246},[72,87307,87308],{"class":621},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[72,87310,87311],{"class":74,"line":17252},[72,87312,87313],{"class":621},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[72,87315,87316],{"class":74,"line":17257},[72,87317,87318],{"class":621},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[72,87320,87321,87324,87326,87328,87330,87333,87335,87337],{"class":74,"line":17271},[72,87322,87323],{"class":362},"    Modal",[72,87325,1112],{"class":82},[72,87327,85996],{"class":362},[72,87329,1112],{"class":82},[72,87331,87332],{"class":358},"open",[72,87334,13990],{"class":78},[72,87336,59336],{"class":78},[72,87338,54870],{"class":82},[72,87340,87341],{"class":74,"line":17276},[72,87342,87343],{"class":621},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[72,87345,87346,87348,87351,87353,87355,87357,87359,87362],{"class":74,"line":17281},[72,87347,58646],{"class":78},[72,87349,87350],{"class":362}," box",[72,87352,13990],{"class":78},[72,87354,54814],{"class":82},[72,87356,54817],{"class":358},[72,87358,564],{"class":82},[72,87360,87361],{"class":366},"'.modal'",[72,87363,570],{"class":82},[72,87365,87366],{"class":74,"line":17295},[72,87367,87368],{"class":621},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[72,87370,87371,87374,87376,87379,87381],{"class":74,"line":17307},[72,87372,87373],{"class":82},"      box ",[72,87375,2144],{"class":78},[72,87377,87378],{"class":82}," box.",[72,87380,57424],{"class":358},[72,87382,2404],{"class":82},[72,87384,87385],{"class":74,"line":17312},[72,87386,87387],{"class":621},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[72,87389,87390],{"class":74,"line":17325},[72,87391,87392],{"class":621},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[72,87394,87395],{"class":74,"line":17330},[72,87396,87397],{"class":621},"      \u002F\u002F append可以增加对象\n",[72,87399,87400,87403,87406,87408,87411],{"class":74,"line":17335},[72,87401,87402],{"class":82},"      document.body.",[72,87404,87405],{"class":358},"append",[72,87407,564],{"class":82},[72,87409,87410],{"class":362},"this",[72,87412,87413],{"class":82},".modalBox)\n",[72,87415,87416],{"class":74,"line":17340},[72,87417,2828],{"emptyLinePlaceholder":490},[72,87419,87420],{"class":74,"line":17353},[72,87421,87422],{"class":621},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[72,87424,87425,87427,87430,87432,87434,87437,87439,87441,87443,87445,87448,87450],{"class":74,"line":17358},[72,87426,70469],{"class":362},[72,87428,87429],{"class":82},".modalBox.",[72,87431,54817],{"class":358},[72,87433,564],{"class":82},[72,87435,87436],{"class":366},"'i'",[72,87438,31244],{"class":82},[72,87440,58231],{"class":358},[72,87442,564],{"class":82},[72,87444,58236],{"class":366},[72,87446,87447],{"class":82},", () ",[72,87449,85139],{"class":78},[72,87451,15998],{"class":82},[72,87453,87454],{"class":74,"line":33051},[72,87455,87456],{"class":621},"        \u002F\u002F 这个地方需要用到箭头函数\n",[72,87458,87459],{"class":74,"line":33057},[72,87460,87461],{"class":621},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[72,87463,87464],{"class":74,"line":33063},[72,87465,87466],{"class":621},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[72,87468,87469,87471,87473,87476],{"class":74,"line":33069},[72,87470,65144],{"class":362},[72,87472,1112],{"class":82},[72,87474,87475],{"class":358},"close",[72,87477,2404],{"class":82},[72,87479,87480],{"class":74,"line":33075},[72,87481,65233],{"class":82},[72,87483,87484],{"class":74,"line":33086},[72,87485,2615],{"class":82},[72,87487,87488],{"class":74,"line":33092},[72,87489,2828],{"emptyLinePlaceholder":490},[72,87491,87492],{"class":74,"line":33112},[72,87493,87494],{"class":621},"    \u002F\u002F 测试一下 点击 删除按钮\n",[72,87496,87497,87499,87501,87503,87506,87508,87510,87512,87514,87516,87518],{"class":74,"line":33118},[72,87498,52825],{"class":82},[72,87500,54817],{"class":358},[72,87502,564],{"class":82},[72,87504,87505],{"class":366},"'#delete'",[72,87507,31244],{"class":82},[72,87509,58231],{"class":358},[72,87511,564],{"class":82},[72,87513,58236],{"class":366},[72,87515,87447],{"class":82},[72,87517,85139],{"class":78},[72,87519,15998],{"class":82},[72,87521,87522],{"class":74,"line":33129},[72,87523,87524],{"class":621},"      \u002F\u002F 先调用Model构造函数\n",[72,87526,87527,87529,87532,87534,87536,87538,87540,87543,87545,87548],{"class":74,"line":33135},[72,87528,58646],{"class":78},[72,87530,87531],{"class":362}," del",[72,87533,13990],{"class":78},[72,87535,12004],{"class":78},[72,87537,87188],{"class":358},[72,87539,564],{"class":82},[72,87541,87542],{"class":366},"'温馨的提示'",[72,87544,12861],{"class":82},[72,87546,87547],{"class":366},"'您没有删除权限操作'",[72,87549,570],{"class":82},[72,87551,87552],{"class":74,"line":33141},[72,87553,87554],{"class":621},"      \u002F\u002F 实例对象调用open方法\n",[72,87556,87557,87560,87562],{"class":74,"line":33147},[72,87558,87559],{"class":82},"      del.",[72,87561,87332],{"class":358},[72,87563,2404],{"class":82},[72,87565,87566],{"class":74,"line":33153},[72,87567,33879],{"class":82},[72,87569,87570],{"class":74,"line":33159},[72,87571,87572],{"class":621},"    \u002F\u002F 测试一下 点击 登录按钮\n",[72,87574,87575,87577,87579,87581,87584,87586,87588,87590,87592,87594,87596],{"class":74,"line":33165},[72,87576,52825],{"class":82},[72,87578,54817],{"class":358},[72,87580,564],{"class":82},[72,87582,87583],{"class":366},"'#login'",[72,87585,31244],{"class":82},[72,87587,58231],{"class":358},[72,87589,564],{"class":82},[72,87591,58236],{"class":366},[72,87593,87447],{"class":82},[72,87595,85139],{"class":78},[72,87597,15998],{"class":82},[72,87599,87600],{"class":74,"line":33171},[72,87601,87524],{"class":621},[72,87603,87604,87606,87609,87611,87613,87615,87617,87620,87622,87625],{"class":74,"line":33191},[72,87605,58646],{"class":78},[72,87607,87608],{"class":362}," log",[72,87610,13990],{"class":78},[72,87612,12004],{"class":78},[72,87614,87188],{"class":358},[72,87616,564],{"class":82},[72,87618,87619],{"class":366},"'友情提示'",[72,87621,12861],{"class":82},[72,87623,87624],{"class":366},"'您还没有登录呢'",[72,87626,570],{"class":82},[72,87628,87629],{"class":74,"line":33197},[72,87630,87554],{"class":621},[72,87632,87633,87636,87638],{"class":74,"line":33213},[72,87634,87635],{"class":82},"      log.",[72,87637,87332],{"class":358},[72,87639,2404],{"class":82},[72,87641,87642],{"class":74,"line":33219},[72,87643,33879],{"class":82},[72,87645,87646],{"class":74,"line":33233},[72,87647,87648],{"class":621},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[72,87650,87651,87653,87655,87657,87659,87661,87663,87665],{"class":74,"line":33239},[72,87652,87323],{"class":362},[72,87654,1112],{"class":82},[72,87656,85996],{"class":362},[72,87658,1112],{"class":82},[72,87660,87475],{"class":358},[72,87662,13990],{"class":78},[72,87664,59336],{"class":78},[72,87666,54870],{"class":82},[72,87668,87669,87671,87673,87675],{"class":74,"line":33254},[72,87670,70469],{"class":362},[72,87672,87429],{"class":82},[72,87674,57424],{"class":358},[72,87676,2404],{"class":82},[72,87678,87679],{"class":74,"line":33260},[72,87680,2615],{"class":82},[72,87682,87683,87685,87687],{"class":74,"line":33269},[72,87684,52835],{"class":82},[72,87686,52231],{"class":51718},[72,87688,51725],{"class":82},[72,87690,87691,87693,87695],{"class":74,"line":33275},[72,87692,52203],{"class":82},[72,87694,52218],{"class":51718},[72,87696,51725],{"class":82},[72,87698,87699],{"class":74,"line":33284},[72,87700,2828],{"emptyLinePlaceholder":490},[72,87702,87703,87705,87707],{"class":74,"line":33290},[72,87704,52203],{"class":82},[72,87706,51053],{"class":51718},[72,87708,51725],{"class":82},[15,87710,87711],{},[1891,87712],{"alt":68,"src":87713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[85,87715,87717],{"id":87716},"_414-深浅拷贝","4.14 深浅拷贝",[531,87719,87721],{"id":87720},"_4141-浅拷贝","4.14.1 浅拷贝",[15,87723,87724],{},[1891,87725],{"alt":68,"src":87726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[15,87728,87729],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[15,87731,87732],{},[1891,87733],{"alt":68,"src":87734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[15,87736,87737],{},[1891,87738],{"alt":68,"src":87739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[15,87741,87742],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[15,87744,87745],{},[1891,87746],{"alt":68,"src":87747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[15,87749,11758],{},[15,87751,87752],{},[1891,87753],{"alt":68,"src":87754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[531,87756,87758],{"id":87757},"_4142-深拷贝","4.14.2 深拷贝",[15,87760,87761],{},"深拷贝：拷贝的是对象，不是地址",[15,87763,87764],{},"常用的三种方法：",[22,87766,87767,87770,87773],{},[25,87768,87769],{},"通过递归实现深拷贝",[25,87771,87772],{},"lodash\u002FcloneDeep",[25,87774,87775],{},"通过JSON.stringify()实现",[22423,87777,87779],{"id":87778},"_41421-递归函数","4.14.2.1 递归函数",[15,87781,87782],{},[1891,87783],{"alt":68,"src":87784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[22,87786,87787],{},[25,87788,87789],{},"死递归占溢出：",[63,87791,87793],{"className":53485,"code":87792,"language":53487,"meta":68,"style":68},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[34,87794,87795,87803,87811,87815,87820,87824,87829,87837],{"__ignoreMap":68},[72,87796,87797,87799,87801],{"class":74,"line":75},[72,87798,1464],{"class":82},[72,87800,52218],{"class":51718},[72,87802,51725],{"class":82},[72,87804,87805,87807,87809],{"class":74,"line":370},[72,87806,52562],{"class":82},[72,87808,52231],{"class":51718},[72,87810,51725],{"class":82},[72,87812,87813],{"class":74,"line":1608},[72,87814,77561],{"class":82},[72,87816,87817],{"class":74,"line":1623},[72,87818,87819],{"class":82},"      fn()\n",[72,87821,87822],{"class":74,"line":1629},[72,87823,2615],{"class":82},[72,87825,87826],{"class":74,"line":1643},[72,87827,87828],{"class":82},"    fn()\n",[72,87830,87831,87833,87835],{"class":74,"line":1649},[72,87832,52835],{"class":82},[72,87834,52231],{"class":51718},[72,87836,51725],{"class":82},[72,87838,87839,87841,87843],{"class":74,"line":1740},[72,87840,52203],{"class":82},[72,87842,52218],{"class":51718},[72,87844,51725],{"class":82},[22,87846,87847],{"start":370},[25,87848,87849],{},"递归函数要加判断条件：",[15,87851,87852],{},[1891,87853],{"alt":68,"src":87854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[22,87856,87857],{"start":1608},[25,87858,87859],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[63,87861,87863],{"className":51051,"code":87862,"language":51053,"meta":68,"style":68},"\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",[34,87864,87865,87875,87889,87893,87901,87915,87935,87947,87955,87959,87967,87979,87987,87995,88020,88032,88036,88043,88051,88059,88063],{"__ignoreMap":68},[72,87866,87867,87869,87871,87873],{"class":74,"line":75},[72,87868,51715],{"class":82},[72,87870,51719],{"class":51718},[72,87872,51722],{"class":358},[72,87874,51725],{"class":82},[72,87876,87877,87879,87881,87883,87885,87887],{"class":74,"line":370},[72,87878,1464],{"class":82},[72,87880,51053],{"class":51718},[72,87882,51734],{"class":358},[72,87884,609],{"class":82},[72,87886,51739],{"class":366},[72,87888,51725],{"class":82},[72,87890,87891],{"class":74,"line":1608},[72,87892,2828],{"emptyLinePlaceholder":490},[72,87894,87895,87897,87899],{"class":74,"line":1623},[72,87896,1464],{"class":82},[72,87898,51752],{"class":51718},[72,87900,51725],{"class":82},[72,87902,87903,87905,87907,87909,87911,87913],{"class":74,"line":1629},[72,87904,52562],{"class":82},[72,87906,51762],{"class":51718},[72,87908,51765],{"class":358},[72,87910,609],{"class":82},[72,87912,51770],{"class":366},[72,87914,51725],{"class":82},[72,87916,87917,87919,87921,87923,87925,87927,87929,87931,87933],{"class":74,"line":1643},[72,87918,52562],{"class":82},[72,87920,51762],{"class":51718},[72,87922,15346],{"class":358},[72,87924,609],{"class":82},[72,87926,51809],{"class":366},[72,87928,51789],{"class":358},[72,87930,609],{"class":82},[72,87932,51816],{"class":366},[72,87934,51725],{"class":82},[72,87936,87937,87939,87941,87943,87945],{"class":74,"line":1649},[72,87938,52562],{"class":82},[72,87940,51825],{"class":51718},[72,87942,51828],{"class":82},[72,87944,51825],{"class":51718},[72,87946,51725],{"class":82},[72,87948,87949,87951,87953],{"class":74,"line":1740},[72,87950,52203],{"class":82},[72,87952,51752],{"class":51718},[72,87954,51725],{"class":82},[72,87956,87957],{"class":74,"line":1746},[72,87958,2828],{"emptyLinePlaceholder":490},[72,87960,87961,87963,87965],{"class":74,"line":1758},[72,87962,1464],{"class":82},[72,87964,52218],{"class":51718},[72,87966,51725],{"class":82},[72,87968,87969,87971,87973,87975,87977],{"class":74,"line":2041},[72,87970,52562],{"class":82},[72,87972,52029],{"class":51718},[72,87974,55732],{"class":82},[72,87976,52029],{"class":51718},[72,87978,51725],{"class":82},[72,87980,87981,87983,87985],{"class":74,"line":2046},[72,87982,52562],{"class":82},[72,87984,52231],{"class":51718},[72,87986,51725],{"class":82},[72,87988,87989,87991,87993],{"class":74,"line":2052},[72,87990,70502],{"class":78},[72,87992,74191],{"class":358},[72,87994,11279],{"class":82},[72,87996,87997,87999,88001,88003,88005,88007,88009,88011,88013,88015,88018],{"class":74,"line":2057},[72,87998,56189],{"class":82},[72,88000,54817],{"class":358},[72,88002,564],{"class":82},[72,88004,82349],{"class":366},[72,88006,74667],{"class":82},[72,88008,609],{"class":78},[72,88010,12004],{"class":78},[72,88012,74207],{"class":358},[72,88014,17687],{"class":82},[72,88016,88017],{"class":358},"toLocaleString",[72,88019,2404],{"class":82},[72,88021,88022,88025,88028,88030],{"class":74,"line":2071},[72,88023,88024],{"class":358},"      setTimeout",[72,88026,88027],{"class":82},"(getTime, ",[72,88029,6836],{"class":362},[72,88031,570],{"class":82},[72,88033,88034],{"class":74,"line":2076},[72,88035,2615],{"class":82},[72,88037,88038,88041],{"class":74,"line":2082},[72,88039,88040],{"class":358},"    getTime",[72,88042,2404],{"class":82},[72,88044,88045,88047,88049],{"class":74,"line":2103},[72,88046,52835],{"class":82},[72,88048,52231],{"class":51718},[72,88050,51725],{"class":82},[72,88052,88053,88055,88057],{"class":74,"line":2108},[72,88054,52203],{"class":82},[72,88056,52218],{"class":51718},[72,88058,51725],{"class":82},[72,88060,88061],{"class":74,"line":2122},[72,88062,2828],{"emptyLinePlaceholder":490},[72,88064,88065,88067,88069],{"class":74,"line":2127},[72,88066,52203],{"class":82},[72,88068,51053],{"class":51718},[72,88070,51725],{"class":82},[15,88072,88073],{},[1891,88074],{"alt":68,"src":88075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[22,88077,88078],{"start":1623},[25,88079,87769],{},[15,88081,88082],{},[1891,88083],{"alt":68,"src":88084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[15,88086,88087],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[15,88089,39607],{},[15,88091,88092],{},"这个是简易版的递归函数深拷贝",[15,88094,88095],{},"一定要注意先数组再对象，因为万物皆可对象",[63,88097,88099],{"className":51051,"code":88098,"language":51053,"meta":68,"style":68},"\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",[34,88100,88101,88111,88125,88129,88137,88151,88171,88183,88191,88195,88203,88211,88221,88230,88238,88254,88258,88266,88270,88274,88286,88291,88310,88326,88331,88336,88341,88356,88361,88366,88375,88383,88400,88408,88414,88422,88427,88432,88441,88445,88449,88453,88464,88473,88483,88497,88507,88515,88523,88531,88535],{"__ignoreMap":68},[72,88102,88103,88105,88107,88109],{"class":74,"line":75},[72,88104,51715],{"class":82},[72,88106,51719],{"class":51718},[72,88108,51722],{"class":358},[72,88110,51725],{"class":82},[72,88112,88113,88115,88117,88119,88121,88123],{"class":74,"line":370},[72,88114,1464],{"class":82},[72,88116,51053],{"class":51718},[72,88118,51734],{"class":358},[72,88120,609],{"class":82},[72,88122,51739],{"class":366},[72,88124,51725],{"class":82},[72,88126,88127],{"class":74,"line":1608},[72,88128,2828],{"emptyLinePlaceholder":490},[72,88130,88131,88133,88135],{"class":74,"line":1623},[72,88132,1464],{"class":82},[72,88134,51752],{"class":51718},[72,88136,51725],{"class":82},[72,88138,88139,88141,88143,88145,88147,88149],{"class":74,"line":1629},[72,88140,52562],{"class":82},[72,88142,51762],{"class":51718},[72,88144,51765],{"class":358},[72,88146,609],{"class":82},[72,88148,51770],{"class":366},[72,88150,51725],{"class":82},[72,88152,88153,88155,88157,88159,88161,88163,88165,88167,88169],{"class":74,"line":1643},[72,88154,52562],{"class":82},[72,88156,51762],{"class":51718},[72,88158,15346],{"class":358},[72,88160,609],{"class":82},[72,88162,51809],{"class":366},[72,88164,51789],{"class":358},[72,88166,609],{"class":82},[72,88168,51816],{"class":366},[72,88170,51725],{"class":82},[72,88172,88173,88175,88177,88179,88181],{"class":74,"line":1649},[72,88174,52562],{"class":82},[72,88176,51825],{"class":51718},[72,88178,51828],{"class":82},[72,88180,51825],{"class":51718},[72,88182,51725],{"class":82},[72,88184,88185,88187,88189],{"class":74,"line":1740},[72,88186,52203],{"class":82},[72,88188,51752],{"class":51718},[72,88190,51725],{"class":82},[72,88192,88193],{"class":74,"line":1746},[72,88194,2828],{"emptyLinePlaceholder":490},[72,88196,88197,88199,88201],{"class":74,"line":1758},[72,88198,1464],{"class":82},[72,88200,52218],{"class":51718},[72,88202,51725],{"class":82},[72,88204,88205,88207,88209],{"class":74,"line":2041},[72,88206,52562],{"class":82},[72,88208,52231],{"class":51718},[72,88210,51725],{"class":82},[72,88212,88213,88215,88217,88219],{"class":74,"line":2046},[72,88214,11647],{"class":78},[72,88216,70389],{"class":362},[72,88218,13990],{"class":78},[72,88220,15998],{"class":82},[72,88222,88223,88225,88228],{"class":74,"line":2052},[72,88224,72034],{"class":82},[72,88226,88227],{"class":366},"'pink'",[72,88229,31884],{"class":82},[72,88231,88232,88234,88236],{"class":74,"line":2057},[72,88233,72044],{"class":82},[72,88235,1204],{"class":362},[72,88237,31884],{"class":82},[72,88239,88240,88243,88246,88248,88251],{"class":74,"line":2071},[72,88241,88242],{"class":82},"      hobby: [",[72,88244,88245],{"class":366},"'乒乓球'",[72,88247,12861],{"class":82},[72,88249,88250],{"class":366},"'足球'",[72,88252,88253],{"class":82},"],\n",[72,88255,88256],{"class":74,"line":2076},[72,88257,78290],{"class":82},[72,88259,88260,88263],{"class":74,"line":2082},[72,88261,88262],{"class":82},"        baby: ",[72,88264,88265],{"class":366},"'小pink'\n",[72,88267,88268],{"class":74,"line":2103},[72,88269,52816],{"class":82},[72,88271,88272],{"class":74,"line":2108},[72,88273,2615],{"class":82},[72,88275,88276,88278,88281,88283],{"class":74,"line":2122},[72,88277,11647],{"class":78},[72,88279,88280],{"class":362}," o",[72,88282,13990],{"class":78},[72,88284,88285],{"class":82}," {}\n",[72,88287,88288],{"class":74,"line":2127},[72,88289,88290],{"class":621},"    \u002F\u002F 拷贝函数\n",[72,88292,88293,88295,88298,88300,88303,88305,88308],{"class":74,"line":2156},[72,88294,70502],{"class":78},[72,88296,88297],{"class":358}," deepCopy",[72,88299,564],{"class":82},[72,88301,88302],{"class":5642},"newObj",[72,88304,12861],{"class":82},[72,88306,88307],{"class":5642},"oldObj",[72,88309,12868],{"class":82},[72,88311,88312,88314,88316,88318,88321,88323],{"class":74,"line":2161},[72,88313,52702],{"class":78},[72,88315,2087],{"class":82},[72,88317,52265],{"class":78},[72,88319,88320],{"class":82}," k ",[72,88322,26465],{"class":78},[72,88324,88325],{"class":82}," oldObj) {\n",[72,88327,88328],{"class":74,"line":2178},[72,88329,88330],{"class":621},"        \u002F\u002F 处理数组的问题\n",[72,88332,88333],{"class":74,"line":2183},[72,88334,88335],{"class":621},"        \u002F\u002F 判断是否属于数组\n",[72,88337,88338],{"class":74,"line":2188},[72,88339,88340],{"class":621},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[72,88342,88343,88345,88348,88351,88354],{"class":74,"line":2193},[72,88344,2925],{"class":78},[72,88346,88347],{"class":82}," (oldObj[k] ",[72,88349,88350],{"class":78},"instanceof",[72,88352,88353],{"class":358}," Array",[72,88355,12868],{"class":82},[72,88357,88358],{"class":74,"line":2207},[72,88359,88360],{"class":621},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[72,88362,88363],{"class":74,"line":2212},[72,88364,88365],{"class":621},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[72,88367,88368,88371,88373],{"class":74,"line":3005},[72,88369,88370],{"class":82},"          newObj[k] ",[72,88372,609],{"class":78},[72,88374,52256],{"class":82},[72,88376,88377,88380],{"class":74,"line":3019},[72,88378,88379],{"class":358},"          deepCopy",[72,88381,88382],{"class":82},"(newObj[k], oldObj[k])\n",[72,88384,88385,88387,88389,88391,88393,88395,88398],{"class":74,"line":3027},[72,88386,80498],{"class":82},[72,88388,2130],{"class":78},[72,88390,2133],{"class":78},[72,88392,88347],{"class":82},[72,88394,88350],{"class":78},[72,88396,88397],{"class":358}," Object",[72,88399,12868],{"class":82},[72,88401,88402,88404,88406],{"class":74,"line":3032},[72,88403,88370],{"class":82},[72,88405,609],{"class":78},[72,88407,88285],{"class":82},[72,88409,88410,88412],{"class":74,"line":3038},[72,88411,88379],{"class":358},[72,88413,88382],{"class":82},[72,88415,88416,88418,88420],{"class":74,"line":3044},[72,88417,80498],{"class":82},[72,88419,2130],{"class":78},[72,88421,15998],{"class":82},[72,88423,88424],{"class":74,"line":3049},[72,88425,88426],{"class":621},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[72,88428,88429],{"class":74,"line":8374},[72,88430,88431],{"class":621},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[72,88433,88434,88436,88438],{"class":74,"line":8398},[72,88435,88370],{"class":82},[72,88437,609],{"class":78},[72,88439,88440],{"class":82}," oldObj[k]\n",[72,88442,88443],{"class":74,"line":8403},[72,88444,2957],{"class":82},[72,88446,88447],{"class":74,"line":8409},[72,88448,52816],{"class":82},[72,88450,88451],{"class":74,"line":8436},[72,88452,2615],{"class":82},[72,88454,88455,88458,88461],{"class":74,"line":8441},[72,88456,88457],{"class":358},"    deepCopy",[72,88459,88460],{"class":82},"(o, obj) ",[72,88462,88463],{"class":621},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[72,88465,88466,88468,88470],{"class":74,"line":8447},[72,88467,74171],{"class":82},[72,88469,58665],{"class":358},[72,88471,88472],{"class":82},"(o)\n",[72,88474,88475,88478,88480],{"class":74,"line":8459},[72,88476,88477],{"class":82},"    o.age ",[72,88479,609],{"class":78},[72,88481,88482],{"class":362}," 20\n",[72,88484,88485,88488,88490,88492,88494],{"class":74,"line":8471},[72,88486,88487],{"class":82},"    o.hobby[",[72,88489,747],{"class":362},[72,88491,4871],{"class":82},[72,88493,609],{"class":78},[72,88495,88496],{"class":366}," '篮球'\n",[72,88498,88499,88502,88504],{"class":74,"line":8483},[72,88500,88501],{"class":82},"    o.family ",[72,88503,609],{"class":78},[72,88505,88506],{"class":366}," '老pink'\n",[72,88508,88509,88511,88513],{"class":74,"line":10142},[72,88510,74171],{"class":82},[72,88512,58665],{"class":358},[72,88514,70454],{"class":82},[72,88516,88517,88519,88521],{"class":74,"line":10167},[72,88518,52835],{"class":82},[72,88520,52231],{"class":51718},[72,88522,51725],{"class":82},[72,88524,88525,88527,88529],{"class":74,"line":10190},[72,88526,52203],{"class":82},[72,88528,52218],{"class":51718},[72,88530,51725],{"class":82},[72,88532,88533],{"class":74,"line":10214},[72,88534,2828],{"emptyLinePlaceholder":490},[72,88536,88537,88539,88541],{"class":74,"line":10219},[72,88538,52203],{"class":82},[72,88540,51053],{"class":51718},[72,88542,51725],{"class":82},[15,88544,88545],{},[1891,88546],{"alt":68,"src":88547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[22423,88549,88551,88552],{"id":88550},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[707,88553,88554],{},"js库lodash里面cloneDeep内部实现了深拷贝",[15,88556,88557],{},[257,88558,88559],{"href":88559,"rel":88560},"https:\u002F\u002Fwww.lodashjs.com\u002F",[261],[15,88562,88563],{},"lodash里边的方法都要加上一个下划线_",[15,88565,88566],{},"_.cloneDeep()",[63,88568,88570],{"className":51051,"code":88569,"language":51053,"meta":68,"style":68},"\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",[34,88571,88572,88582,88596,88600,88608,88622,88642,88654,88662,88666,88674,88679,88698,88706,88716,88724,88732,88744,88748,88754,88758,88762,88778,88786,88795,88803,88811,88819,88823],{"__ignoreMap":68},[72,88573,88574,88576,88578,88580],{"class":74,"line":75},[72,88575,51715],{"class":82},[72,88577,51719],{"class":51718},[72,88579,51722],{"class":358},[72,88581,51725],{"class":82},[72,88583,88584,88586,88588,88590,88592,88594],{"class":74,"line":370},[72,88585,1464],{"class":82},[72,88587,51053],{"class":51718},[72,88589,51734],{"class":358},[72,88591,609],{"class":82},[72,88593,51739],{"class":366},[72,88595,51725],{"class":82},[72,88597,88598],{"class":74,"line":1608},[72,88599,2828],{"emptyLinePlaceholder":490},[72,88601,88602,88604,88606],{"class":74,"line":1623},[72,88603,1464],{"class":82},[72,88605,51752],{"class":51718},[72,88607,51725],{"class":82},[72,88609,88610,88612,88614,88616,88618,88620],{"class":74,"line":1629},[72,88611,52562],{"class":82},[72,88613,51762],{"class":51718},[72,88615,51765],{"class":358},[72,88617,609],{"class":82},[72,88619,51770],{"class":366},[72,88621,51725],{"class":82},[72,88623,88624,88626,88628,88630,88632,88634,88636,88638,88640],{"class":74,"line":1643},[72,88625,52562],{"class":82},[72,88627,51762],{"class":51718},[72,88629,15346],{"class":358},[72,88631,609],{"class":82},[72,88633,51809],{"class":366},[72,88635,51789],{"class":358},[72,88637,609],{"class":82},[72,88639,51816],{"class":366},[72,88641,51725],{"class":82},[72,88643,88644,88646,88648,88650,88652],{"class":74,"line":1649},[72,88645,52562],{"class":82},[72,88647,51825],{"class":51718},[72,88649,51828],{"class":82},[72,88651,51825],{"class":51718},[72,88653,51725],{"class":82},[72,88655,88656,88658,88660],{"class":74,"line":1740},[72,88657,52203],{"class":82},[72,88659,51752],{"class":51718},[72,88661,51725],{"class":82},[72,88663,88664],{"class":74,"line":1746},[72,88665,2828],{"emptyLinePlaceholder":490},[72,88667,88668,88670,88672],{"class":74,"line":1758},[72,88669,1464],{"class":82},[72,88671,52218],{"class":51718},[72,88673,51725],{"class":82},[72,88675,88676],{"class":74,"line":2041},[72,88677,88678],{"class":621},"  \u003C!-- 先引用这个库 -->\n",[72,88680,88681,88683,88685,88687,88689,88692,88694,88696],{"class":74,"line":2046},[72,88682,52562],{"class":82},[72,88684,52231],{"class":51718},[72,88686,55657],{"class":358},[72,88688,609],{"class":82},[72,88690,88691],{"class":366},"\"lodash.min.js\"",[72,88693,55732],{"class":82},[72,88695,52231],{"class":51718},[72,88697,51725],{"class":82},[72,88699,88700,88702,88704],{"class":74,"line":2052},[72,88701,52562],{"class":82},[72,88703,52231],{"class":51718},[72,88705,51725],{"class":82},[72,88707,88708,88710,88712,88714],{"class":74,"line":2057},[72,88709,11647],{"class":78},[72,88711,70389],{"class":362},[72,88713,13990],{"class":78},[72,88715,15998],{"class":82},[72,88717,88718,88720,88722],{"class":74,"line":2071},[72,88719,72034],{"class":82},[72,88721,88227],{"class":366},[72,88723,31884],{"class":82},[72,88725,88726,88728,88730],{"class":74,"line":2076},[72,88727,72044],{"class":82},[72,88729,1204],{"class":362},[72,88731,31884],{"class":82},[72,88733,88734,88736,88738,88740,88742],{"class":74,"line":2082},[72,88735,88242],{"class":82},[72,88737,88245],{"class":366},[72,88739,12861],{"class":82},[72,88741,88250],{"class":366},[72,88743,88253],{"class":82},[72,88745,88746],{"class":74,"line":2103},[72,88747,78290],{"class":82},[72,88749,88750,88752],{"class":74,"line":2108},[72,88751,88262],{"class":82},[72,88753,88265],{"class":366},[72,88755,88756],{"class":74,"line":2122},[72,88757,52816],{"class":82},[72,88759,88760],{"class":74,"line":2127},[72,88761,2615],{"class":82},[72,88763,88764,88766,88768,88770,88773,88776],{"class":74,"line":2156},[72,88765,11647],{"class":78},[72,88767,88280],{"class":362},[72,88769,13990],{"class":78},[72,88771,88772],{"class":82}," _.",[72,88774,88775],{"class":358},"cloneDeep",[72,88777,70454],{"class":82},[72,88779,88780,88782,88784],{"class":74,"line":2161},[72,88781,74171],{"class":82},[72,88783,58665],{"class":358},[72,88785,88472],{"class":82},[72,88787,88788,88791,88793],{"class":74,"line":2178},[72,88789,88790],{"class":82},"    o.family.baby ",[72,88792,609],{"class":78},[72,88794,88506],{"class":366},[72,88796,88797,88799,88801],{"class":74,"line":2183},[72,88798,74171],{"class":82},[72,88800,58665],{"class":358},[72,88802,70454],{"class":82},[72,88804,88805,88807,88809],{"class":74,"line":2188},[72,88806,52835],{"class":82},[72,88808,52231],{"class":51718},[72,88810,51725],{"class":82},[72,88812,88813,88815,88817],{"class":74,"line":2193},[72,88814,52203],{"class":82},[72,88816,52218],{"class":51718},[72,88818,51725],{"class":82},[72,88820,88821],{"class":74,"line":2207},[72,88822,2828],{"emptyLinePlaceholder":490},[72,88824,88825,88827,88829],{"class":74,"line":2212},[72,88826,52203],{"class":82},[72,88828,51053],{"class":51718},[72,88830,51725],{"class":82},[15,88832,88833],{},[1891,88834],{"alt":68,"src":88835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[22423,88837,88839],{"id":88838},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[63,88841,88843],{"className":51051,"code":88842,"language":51053,"meta":68,"style":68},"\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",[34,88844,88845,88855,88869,88873,88881,88895,88915,88927,88935,88939,88947,88955,88965,88973,88981,88993,88997,89003,89007,89011,89016,89021,89026,89052,89060,89069,89077,89085,89093,89097],{"__ignoreMap":68},[72,88846,88847,88849,88851,88853],{"class":74,"line":75},[72,88848,51715],{"class":82},[72,88850,51719],{"class":51718},[72,88852,51722],{"class":358},[72,88854,51725],{"class":82},[72,88856,88857,88859,88861,88863,88865,88867],{"class":74,"line":370},[72,88858,1464],{"class":82},[72,88860,51053],{"class":51718},[72,88862,51734],{"class":358},[72,88864,609],{"class":82},[72,88866,51739],{"class":366},[72,88868,51725],{"class":82},[72,88870,88871],{"class":74,"line":1608},[72,88872,2828],{"emptyLinePlaceholder":490},[72,88874,88875,88877,88879],{"class":74,"line":1623},[72,88876,1464],{"class":82},[72,88878,51752],{"class":51718},[72,88880,51725],{"class":82},[72,88882,88883,88885,88887,88889,88891,88893],{"class":74,"line":1629},[72,88884,52562],{"class":82},[72,88886,51762],{"class":51718},[72,88888,51765],{"class":358},[72,88890,609],{"class":82},[72,88892,51770],{"class":366},[72,88894,51725],{"class":82},[72,88896,88897,88899,88901,88903,88905,88907,88909,88911,88913],{"class":74,"line":1643},[72,88898,52562],{"class":82},[72,88900,51762],{"class":51718},[72,88902,15346],{"class":358},[72,88904,609],{"class":82},[72,88906,51809],{"class":366},[72,88908,51789],{"class":358},[72,88910,609],{"class":82},[72,88912,51816],{"class":366},[72,88914,51725],{"class":82},[72,88916,88917,88919,88921,88923,88925],{"class":74,"line":1649},[72,88918,52562],{"class":82},[72,88920,51825],{"class":51718},[72,88922,51828],{"class":82},[72,88924,51825],{"class":51718},[72,88926,51725],{"class":82},[72,88928,88929,88931,88933],{"class":74,"line":1740},[72,88930,52203],{"class":82},[72,88932,51752],{"class":51718},[72,88934,51725],{"class":82},[72,88936,88937],{"class":74,"line":1746},[72,88938,2828],{"emptyLinePlaceholder":490},[72,88940,88941,88943,88945],{"class":74,"line":1758},[72,88942,1464],{"class":82},[72,88944,52218],{"class":51718},[72,88946,51725],{"class":82},[72,88948,88949,88951,88953],{"class":74,"line":2041},[72,88950,52562],{"class":82},[72,88952,52231],{"class":51718},[72,88954,51725],{"class":82},[72,88956,88957,88959,88961,88963],{"class":74,"line":2046},[72,88958,11647],{"class":78},[72,88960,70389],{"class":362},[72,88962,13990],{"class":78},[72,88964,15998],{"class":82},[72,88966,88967,88969,88971],{"class":74,"line":2052},[72,88968,72034],{"class":82},[72,88970,88227],{"class":366},[72,88972,31884],{"class":82},[72,88974,88975,88977,88979],{"class":74,"line":2057},[72,88976,72044],{"class":82},[72,88978,1204],{"class":362},[72,88980,31884],{"class":82},[72,88982,88983,88985,88987,88989,88991],{"class":74,"line":2071},[72,88984,88242],{"class":82},[72,88986,88245],{"class":366},[72,88988,12861],{"class":82},[72,88990,88250],{"class":366},[72,88992,88253],{"class":82},[72,88994,88995],{"class":74,"line":2076},[72,88996,78290],{"class":82},[72,88998,88999,89001],{"class":74,"line":2082},[72,89000,88262],{"class":82},[72,89002,88265],{"class":366},[72,89004,89005],{"class":74,"line":2103},[72,89006,52816],{"class":82},[72,89008,89009],{"class":74,"line":2108},[72,89010,2615],{"class":82},[72,89012,89013],{"class":74,"line":2122},[72,89014,89015],{"class":621},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[72,89017,89018],{"class":74,"line":2127},[72,89019,89020],{"class":621},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[72,89022,89023],{"class":74,"line":2156},[72,89024,89025],{"class":621},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[72,89027,89028,89030,89032,89034,89037,89039,89042,89044,89046,89048,89050],{"class":74,"line":2161},[72,89029,11647],{"class":78},[72,89031,88280],{"class":362},[72,89033,13990],{"class":78},[72,89035,89036],{"class":362}," JSON",[72,89038,1112],{"class":82},[72,89040,89041],{"class":358},"parse",[72,89043,564],{"class":82},[72,89045,72082],{"class":362},[72,89047,1112],{"class":82},[72,89049,72087],{"class":358},[72,89051,72090],{"class":82},[72,89053,89054,89056,89058],{"class":74,"line":2178},[72,89055,74171],{"class":82},[72,89057,58665],{"class":358},[72,89059,88472],{"class":82},[72,89061,89062,89064,89066],{"class":74,"line":2183},[72,89063,88790],{"class":82},[72,89065,609],{"class":78},[72,89067,89068],{"class":366}," '123'\n",[72,89070,89071,89073,89075],{"class":74,"line":2188},[72,89072,74171],{"class":82},[72,89074,58665],{"class":358},[72,89076,70454],{"class":82},[72,89078,89079,89081,89083],{"class":74,"line":2193},[72,89080,52835],{"class":82},[72,89082,52231],{"class":51718},[72,89084,51725],{"class":82},[72,89086,89087,89089,89091],{"class":74,"line":2207},[72,89088,52203],{"class":82},[72,89090,52218],{"class":51718},[72,89092,51725],{"class":82},[72,89094,89095],{"class":74,"line":2212},[72,89096,2828],{"emptyLinePlaceholder":490},[72,89098,89099,89101,89103],{"class":74,"line":3005},[72,89100,52203],{"class":82},[72,89102,51053],{"class":51718},[72,89104,51725],{"class":82},[15,89106,89107],{},[1891,89108],{"alt":68,"src":89109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[85,89111,89113],{"id":89112},"_415-异常处理","4.15 异常处理",[22,89115,89116],{},[25,89117,89118],{},"throw抛异常",[15,89120,89121],{},[1891,89122],{"alt":68,"src":89123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[22,89125,89126],{"start":370},[25,89127,89128],{},"try\u002Fcatch 捕获错误信息",[15,89130,89131],{},[1891,89132],{"alt":68,"src":89133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[63,89135,89137],{"className":51051,"code":89136,"language":51053,"meta":68,"style":68},"\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",[34,89138,89139,89149,89163,89167,89175,89189,89209,89221,89229,89233,89241,89253,89261,89270,89277,89282,89301,89310,89321,89326,89336,89341,89346,89351,89368,89372,89377,89384,89396,89400,89412,89416,89420,89425,89430,89437,89445,89453,89457],{"__ignoreMap":68},[72,89140,89141,89143,89145,89147],{"class":74,"line":75},[72,89142,51715],{"class":82},[72,89144,51719],{"class":51718},[72,89146,51722],{"class":358},[72,89148,51725],{"class":82},[72,89150,89151,89153,89155,89157,89159,89161],{"class":74,"line":370},[72,89152,1464],{"class":82},[72,89154,51053],{"class":51718},[72,89156,51734],{"class":358},[72,89158,609],{"class":82},[72,89160,51739],{"class":366},[72,89162,51725],{"class":82},[72,89164,89165],{"class":74,"line":1608},[72,89166,2828],{"emptyLinePlaceholder":490},[72,89168,89169,89171,89173],{"class":74,"line":1623},[72,89170,1464],{"class":82},[72,89172,51752],{"class":51718},[72,89174,51725],{"class":82},[72,89176,89177,89179,89181,89183,89185,89187],{"class":74,"line":1629},[72,89178,52562],{"class":82},[72,89180,51762],{"class":51718},[72,89182,51765],{"class":358},[72,89184,609],{"class":82},[72,89186,51770],{"class":366},[72,89188,51725],{"class":82},[72,89190,89191,89193,89195,89197,89199,89201,89203,89205,89207],{"class":74,"line":1643},[72,89192,52562],{"class":82},[72,89194,51762],{"class":51718},[72,89196,15346],{"class":358},[72,89198,609],{"class":82},[72,89200,51809],{"class":366},[72,89202,51789],{"class":358},[72,89204,609],{"class":82},[72,89206,51816],{"class":366},[72,89208,51725],{"class":82},[72,89210,89211,89213,89215,89217,89219],{"class":74,"line":1649},[72,89212,52562],{"class":82},[72,89214,51825],{"class":51718},[72,89216,51828],{"class":82},[72,89218,51825],{"class":51718},[72,89220,51725],{"class":82},[72,89222,89223,89225,89227],{"class":74,"line":1740},[72,89224,52203],{"class":82},[72,89226,51752],{"class":51718},[72,89228,51725],{"class":82},[72,89230,89231],{"class":74,"line":1746},[72,89232,2828],{"emptyLinePlaceholder":490},[72,89234,89235,89237,89239],{"class":74,"line":1758},[72,89236,1464],{"class":82},[72,89238,52218],{"class":51718},[72,89240,51725],{"class":82},[72,89242,89243,89245,89247,89249,89251],{"class":74,"line":2041},[72,89244,52562],{"class":82},[72,89246,15],{"class":51718},[72,89248,53912],{"class":82},[72,89250,15],{"class":51718},[72,89252,51725],{"class":82},[72,89254,89255,89257,89259],{"class":74,"line":2046},[72,89256,52562],{"class":82},[72,89258,52231],{"class":51718},[72,89260,51725],{"class":82},[72,89262,89263,89265,89268],{"class":74,"line":2052},[72,89264,70502],{"class":78},[72,89266,89267],{"class":358}," fn",[72,89269,11279],{"class":82},[72,89271,89272,89275],{"class":74,"line":2057},[72,89273,89274],{"class":78},"      try",[72,89276,15998],{"class":82},[72,89278,89279],{"class":74,"line":2071},[72,89280,89281],{"class":621},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[72,89283,89284,89286,89288,89290,89292,89294,89296,89299],{"class":74,"line":2076},[72,89285,61688],{"class":78},[72,89287,7251],{"class":362},[72,89289,13990],{"class":78},[72,89291,54814],{"class":82},[72,89293,54817],{"class":358},[72,89295,564],{"class":82},[72,89297,89298],{"class":366},"'.p'",[72,89300,570],{"class":82},[72,89302,89303,89306,89308],{"class":74,"line":2082},[72,89304,89305],{"class":82},"        p.style.color ",[72,89307,609],{"class":78},[72,89309,67469],{"class":366},[72,89311,89312,89315,89318],{"class":74,"line":2103},[72,89313,89314],{"class":82},"      } ",[72,89316,89317],{"class":78},"catch",[72,89319,89320],{"class":82}," (err) {\n",[72,89322,89323],{"class":74,"line":2108},[72,89324,89325],{"class":621},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[72,89327,89328,89331,89333],{"class":74,"line":2122},[72,89329,89330],{"class":82},"        console.",[72,89332,58665],{"class":358},[72,89334,89335],{"class":82},"(err.message)\n",[72,89337,89338],{"class":74,"line":2127},[72,89339,89340],{"class":621},"        \u002F\u002F 想要中断程序，需要加return\n",[72,89342,89343],{"class":74,"line":2156},[72,89344,89345],{"class":621},"        \u002F\u002F return\n",[72,89347,89348],{"class":74,"line":2161},[72,89349,89350],{"class":621},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[72,89352,89353,89356,89358,89361,89363,89366],{"class":74,"line":2178},[72,89354,89355],{"class":78},"        throw",[72,89357,12004],{"class":78},[72,89359,89360],{"class":358}," Error",[72,89362,564],{"class":82},[72,89364,89365],{"class":366},"'你看看，选择器错误了吧'",[72,89367,570],{"class":82},[72,89369,89370],{"class":74,"line":2183},[72,89371,52816],{"class":82},[72,89373,89374],{"class":74,"line":2188},[72,89375,89376],{"class":621},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[72,89378,89379,89382],{"class":74,"line":2193},[72,89380,89381],{"class":78},"      finally",[72,89383,15998],{"class":82},[72,89385,89386,89389,89391,89394],{"class":74,"line":2207},[72,89387,89388],{"class":358},"        alert",[72,89390,564],{"class":82},[72,89392,89393],{"class":366},"'弹出对话框'",[72,89395,570],{"class":82},[72,89397,89398],{"class":74,"line":2212},[72,89399,52816],{"class":82},[72,89401,89402,89404,89406,89408,89410],{"class":74,"line":3005},[72,89403,58662],{"class":82},[72,89405,58665],{"class":358},[72,89407,564],{"class":82},[72,89409,1026],{"class":362},[72,89411,570],{"class":82},[72,89413,89414],{"class":74,"line":3019},[72,89415,2828],{"emptyLinePlaceholder":490},[72,89417,89418],{"class":74,"line":3027},[72,89419,2615],{"class":82},[72,89421,89422],{"class":74,"line":3032},[72,89423,89424],{"class":621},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[72,89426,89427],{"class":74,"line":3038},[72,89428,89429],{"class":621},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[72,89431,89432,89435],{"class":74,"line":3044},[72,89433,89434],{"class":358},"    fn",[72,89436,2404],{"class":82},[72,89438,89439,89441,89443],{"class":74,"line":3049},[72,89440,52835],{"class":82},[72,89442,52231],{"class":51718},[72,89444,51725],{"class":82},[72,89446,89447,89449,89451],{"class":74,"line":8374},[72,89448,52203],{"class":82},[72,89450,52218],{"class":51718},[72,89452,51725],{"class":82},[72,89454,89455],{"class":74,"line":8398},[72,89456,2828],{"emptyLinePlaceholder":490},[72,89458,89459,89461,89463],{"class":74,"line":8403},[72,89460,52203],{"class":82},[72,89462,51053],{"class":51718},[72,89464,51725],{"class":82},[15,89466,89467],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[22,89469,89470],{"start":1608},[25,89471,89472],{},"debugger",[15,89474,89475],{},[1891,89476],{"alt":68,"src":89477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[15,89479,89480],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[85,89482,89484],{"id":89483},"_416-处理this","4.16 处理this",[531,89486,89488],{"id":89487},"_4161-this的指向","4.16.1 this的指向",[22,89490,89491],{},[25,89492,89493],{},"普通函数的this",[15,89495,89496],{},[1891,89497],{"alt":68,"src":89498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[22,89500,89501],{"start":370},[25,89502,89503],{},"箭头函数的this",[15,89505,89506],{},[1891,89507],{"alt":68,"src":89508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[15,89510,89511],{},[1891,89512],{"alt":68,"src":89513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[15,89515,89516],{},[1891,89517],{"alt":68,"src":89518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[531,89520,89522],{"id":89521},"_4162-this的改变","4.16.2 this的改变",[15,89524,89525],{},"call() apply() bind()",[22,89527,89528],{},[25,89529,89530],{},"call()",[15,89532,89533],{},[1891,89534],{"alt":68,"src":89535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[15,89537,89538],{},"两个作用：①调用函数；②改变this指向",[63,89540,89542],{"className":53485,"code":89541,"language":53487,"meta":68,"style":68},"\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",[34,89543,89544,89552,89560,89564,89569,89573,89578,89583,89588,89592,89597,89605],{"__ignoreMap":68},[72,89545,89546,89548,89550],{"class":74,"line":75},[72,89547,1464],{"class":82},[72,89549,52218],{"class":51718},[72,89551,51725],{"class":82},[72,89553,89554,89556,89558],{"class":74,"line":370},[72,89555,52562],{"class":82},[72,89557,52231],{"class":51718},[72,89559,51725],{"class":82},[72,89561,89562],{"class":74,"line":1608},[72,89563,71941],{"class":82},[72,89565,89566],{"class":74,"line":1623},[72,89567,89568],{"class":82},"      uname: 'pink'\n",[72,89570,89571],{"class":74,"line":1629},[72,89572,2615],{"class":82},[72,89574,89575],{"class":74,"line":1643},[72,89576,89577],{"class":82},"    function fn(x, y) {\n",[72,89579,89580],{"class":74,"line":1649},[72,89581,89582],{"class":82},"      console.log(this)  \u002F\u002Fwindow\n",[72,89584,89585],{"class":74,"line":1740},[72,89586,89587],{"class":82},"      console.log(x + y)\n",[72,89589,89590],{"class":74,"line":1746},[72,89591,2615],{"class":82},[72,89593,89594],{"class":74,"line":1758},[72,89595,89596],{"class":82},"    fn.call(obj, 1, 2)\n",[72,89598,89599,89601,89603],{"class":74,"line":2041},[72,89600,52835],{"class":82},[72,89602,52231],{"class":51718},[72,89604,51725],{"class":82},[72,89606,89607,89609,89611],{"class":74,"line":2046},[72,89608,52203],{"class":82},[72,89610,52218],{"class":51718},[72,89612,51725],{"class":82},[15,89614,89615],{},[1891,89616],{"alt":68,"src":89617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[22,89619,89620],{"start":370},[25,89621,89622],{},"apply()",[15,89624,89625],{},[1891,89626],{"alt":68,"src":89627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[15,89629,89538],{},[15,89631,89632],{},"call传递的是普通参数，而apply必须传递的是数组",[63,89634,89636],{"className":51051,"code":89635,"language":51053,"meta":68,"style":68},"\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",[34,89637,89638,89648,89662,89666,89674,89688,89708,89720,89728,89732,89740,89748,89758,89765,89769,89774,89790,89802,89816,89820,89825,89844,89849,89853,89858,89863,89871,89876,89898,89903,89919,89935,89947,89951,89956,89975,89983,89991,89995],{"__ignoreMap":68},[72,89639,89640,89642,89644,89646],{"class":74,"line":75},[72,89641,51715],{"class":82},[72,89643,51719],{"class":51718},[72,89645,51722],{"class":358},[72,89647,51725],{"class":82},[72,89649,89650,89652,89654,89656,89658,89660],{"class":74,"line":370},[72,89651,1464],{"class":82},[72,89653,51053],{"class":51718},[72,89655,51734],{"class":358},[72,89657,609],{"class":82},[72,89659,51739],{"class":366},[72,89661,51725],{"class":82},[72,89663,89664],{"class":74,"line":1608},[72,89665,2828],{"emptyLinePlaceholder":490},[72,89667,89668,89670,89672],{"class":74,"line":1623},[72,89669,1464],{"class":82},[72,89671,51752],{"class":51718},[72,89673,51725],{"class":82},[72,89675,89676,89678,89680,89682,89684,89686],{"class":74,"line":1629},[72,89677,52562],{"class":82},[72,89679,51762],{"class":51718},[72,89681,51765],{"class":358},[72,89683,609],{"class":82},[72,89685,51770],{"class":366},[72,89687,51725],{"class":82},[72,89689,89690,89692,89694,89696,89698,89700,89702,89704,89706],{"class":74,"line":1643},[72,89691,52562],{"class":82},[72,89693,51762],{"class":51718},[72,89695,15346],{"class":358},[72,89697,609],{"class":82},[72,89699,51809],{"class":366},[72,89701,51789],{"class":358},[72,89703,609],{"class":82},[72,89705,51816],{"class":366},[72,89707,51725],{"class":82},[72,89709,89710,89712,89714,89716,89718],{"class":74,"line":1649},[72,89711,52562],{"class":82},[72,89713,51825],{"class":51718},[72,89715,51828],{"class":82},[72,89717,51825],{"class":51718},[72,89719,51725],{"class":82},[72,89721,89722,89724,89726],{"class":74,"line":1740},[72,89723,52203],{"class":82},[72,89725,51752],{"class":51718},[72,89727,51725],{"class":82},[72,89729,89730],{"class":74,"line":1746},[72,89731,2828],{"emptyLinePlaceholder":490},[72,89733,89734,89736,89738],{"class":74,"line":1758},[72,89735,1464],{"class":82},[72,89737,52218],{"class":51718},[72,89739,51725],{"class":82},[72,89741,89742,89744,89746],{"class":74,"line":2041},[72,89743,52562],{"class":82},[72,89745,52231],{"class":51718},[72,89747,51725],{"class":82},[72,89749,89750,89752,89754,89756],{"class":74,"line":2046},[72,89751,11647],{"class":78},[72,89753,70389],{"class":362},[72,89755,13990],{"class":78},[72,89757,15998],{"class":82},[72,89759,89760,89762],{"class":74,"line":2052},[72,89761,72044],{"class":82},[72,89763,89764],{"class":362},"18\n",[72,89766,89767],{"class":74,"line":2057},[72,89768,2615],{"class":82},[72,89770,89771],{"class":74,"line":2071},[72,89772,89773],{"class":621},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[72,89775,89776,89778,89780,89782,89784,89786,89788],{"class":74,"line":2076},[72,89777,70502],{"class":78},[72,89779,89267],{"class":358},[72,89781,564],{"class":82},[72,89783,1374],{"class":5642},[72,89785,12861],{"class":82},[72,89787,1399],{"class":5642},[72,89789,12868],{"class":82},[72,89791,89792,89794,89796,89798,89800],{"class":74,"line":2082},[72,89793,58662],{"class":82},[72,89795,58665],{"class":358},[72,89797,564],{"class":82},[72,89799,87410],{"class":362},[72,89801,570],{"class":82},[72,89803,89804,89806,89808,89811,89813],{"class":74,"line":2103},[72,89805,58662],{"class":82},[72,89807,58665],{"class":358},[72,89809,89810],{"class":82},"(x ",[72,89812,1035],{"class":78},[72,89814,89815],{"class":82}," y)\n",[72,89817,89818],{"class":74,"line":2108},[72,89819,2615],{"class":82},[72,89821,89822],{"class":74,"line":2122},[72,89823,89824],{"class":621},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[72,89826,89827,89830,89833,89836,89838,89840,89842],{"class":74,"line":2127},[72,89828,89829],{"class":82},"    fn.",[72,89831,89832],{"class":358},"apply",[72,89834,89835],{"class":82},"(obj, [",[72,89837,772],{"class":362},[72,89839,12861],{"class":82},[72,89841,640],{"class":362},[72,89843,5085],{"class":82},[72,89845,89846],{"class":74,"line":2156},[72,89847,89848],{"class":621},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[72,89850,89851],{"class":74,"line":2161},[72,89852,2828],{"emptyLinePlaceholder":490},[72,89854,89855],{"class":74,"line":2178},[72,89856,89857],{"class":621},"    \u002F\u002F 使用场景：求数组最大值\n",[72,89859,89860],{"class":74,"line":2183},[72,89861,89862],{"class":621},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[72,89864,89865,89868],{"class":74,"line":2188},[72,89866,89867],{"class":621},"    \u002F\u002F console.log(max)",[72,89869,89870],{"class":621},"   \u002F\u002F3\n",[72,89872,89873],{"class":74,"line":2193},[72,89874,89875],{"class":621},"    \u002F\u002F 指向空或者Math都是可以的\n",[72,89877,89878,89880,89882,89884,89886,89888,89890,89892,89894,89896],{"class":74,"line":2207},[72,89879,11647],{"class":78},[72,89881,58113],{"class":362},[72,89883,13990],{"class":78},[72,89885,52644],{"class":82},[72,89887,865],{"class":362},[72,89889,12861],{"class":82},[72,89891,1058],{"class":362},[72,89893,12861],{"class":82},[72,89895,1089],{"class":362},[72,89897,33664],{"class":82},[72,89899,89900],{"class":74,"line":2212},[72,89901,89902],{"class":621},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[72,89904,89905,89907,89909,89911,89914,89916],{"class":74,"line":3005},[72,89906,11647],{"class":78},[72,89908,6377],{"class":362},[72,89910,13990],{"class":78},[72,89912,89913],{"class":82}," Math.max.",[72,89915,89832],{"class":358},[72,89917,89918],{"class":82},"(Math, arr)\n",[72,89920,89921,89923,89926,89928,89931,89933],{"class":74,"line":3019},[72,89922,11647],{"class":78},[72,89924,89925],{"class":362}," min",[72,89927,13990],{"class":78},[72,89929,89930],{"class":82}," Math.min.",[72,89932,89832],{"class":358},[72,89934,89918],{"class":82},[72,89936,89937,89939,89941,89944],{"class":74,"line":3027},[72,89938,74171],{"class":82},[72,89940,58665],{"class":358},[72,89942,89943],{"class":82},"(max, min)     ",[72,89945,89946],{"class":621},"\u002F\u002F100,4\n",[72,89948,89949],{"class":74,"line":3032},[72,89950,2828],{"emptyLinePlaceholder":490},[72,89952,89953],{"class":74,"line":3038},[72,89954,89955],{"class":621},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[72,89957,89958,89960,89962,89965,89967,89969,89972],{"class":74,"line":3044},[72,89959,74171],{"class":82},[72,89961,58665],{"class":358},[72,89963,89964],{"class":82},"(Max.",[72,89966,6441],{"class":358},[72,89968,564],{"class":82},[72,89970,89971],{"class":78},"...",[72,89973,89974],{"class":82},"arr))\n",[72,89976,89977,89979,89981],{"class":74,"line":3049},[72,89978,52835],{"class":82},[72,89980,52231],{"class":51718},[72,89982,51725],{"class":82},[72,89984,89985,89987,89989],{"class":74,"line":8374},[72,89986,52203],{"class":82},[72,89988,52218],{"class":51718},[72,89990,51725],{"class":82},[72,89992,89993],{"class":74,"line":8398},[72,89994,2828],{"emptyLinePlaceholder":490},[72,89996,89997,89999,90001],{"class":74,"line":8403},[72,89998,52203],{"class":82},[72,90000,51053],{"class":51718},[72,90002,51725],{"class":82},[15,90004,90005],{},[1891,90006],{"alt":68,"src":90007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[22,90009,90010],{"start":1608},[25,90011,90012],{},"bind()",[15,90014,90015],{},[1891,90016],{"alt":68,"src":90017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[15,90019,90020],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[15,90022,90023],{},"bind的语法跟call很相似",[63,90025,90027],{"className":53485,"code":90026,"language":53487,"meta":68,"style":68},"\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",[34,90028,90029,90037,90045,90049,90054,90058,90062,90067,90071,90076,90081,90086,90091,90096,90101,90106,90110,90118],{"__ignoreMap":68},[72,90030,90031,90033,90035],{"class":74,"line":75},[72,90032,1464],{"class":82},[72,90034,52218],{"class":51718},[72,90036,51725],{"class":82},[72,90038,90039,90041,90043],{"class":74,"line":370},[72,90040,52562],{"class":82},[72,90042,52231],{"class":51718},[72,90044,51725],{"class":82},[72,90046,90047],{"class":74,"line":1608},[72,90048,71941],{"class":82},[72,90050,90051],{"class":74,"line":1623},[72,90052,90053],{"class":82},"      age: 18\n",[72,90055,90056],{"class":74,"line":1629},[72,90057,2615],{"class":82},[72,90059,90060],{"class":74,"line":1643},[72,90061,77561],{"class":82},[72,90063,90064],{"class":74,"line":1649},[72,90065,90066],{"class":82},"      console.log(this)\n",[72,90068,90069],{"class":74,"line":1740},[72,90070,2615],{"class":82},[72,90072,90073],{"class":74,"line":1746},[72,90074,90075],{"class":82},"    \u002F\u002F 1.bind 不会调用函数\n",[72,90077,90078],{"class":74,"line":1758},[72,90079,90080],{"class":82},"    \u002F\u002F 2.bind能改变this的指向\n",[72,90082,90083],{"class":74,"line":2041},[72,90084,90085],{"class":82},"    fn.bind()\n",[72,90087,90088],{"class":74,"line":2046},[72,90089,90090],{"class":82},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[72,90092,90093],{"class":74,"line":2052},[72,90094,90095],{"class":82},"    const fun = fn.bind(obj)\n",[72,90097,90098],{"class":74,"line":2057},[72,90099,90100],{"class":82},"    \u002F\u002F console.log(fun)\n",[72,90102,90103],{"class":74,"line":2071},[72,90104,90105],{"class":82},"    \u002F\u002F 调用,查看this的指向\n",[72,90107,90108],{"class":74,"line":2076},[72,90109,53069],{"class":82},[72,90111,90112,90114,90116],{"class":74,"line":2082},[72,90113,52835],{"class":82},[72,90115,52231],{"class":51718},[72,90117,51725],{"class":82},[72,90119,90120,90122,90124],{"class":74,"line":2103},[72,90121,52203],{"class":82},[72,90123,52218],{"class":51718},[72,90125,51725],{"class":82},[15,90127,90128],{},[1891,90129],{"alt":68,"src":90130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[22,90132,90133],{"start":1623},[25,90134,90135],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[63,90137,90139],{"className":53485,"code":90138,"language":53487,"meta":68,"style":68},"\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",[34,90140,90141,90149,90162,90170,90175,90179,90184,90189,90194,90199,90204,90209,90214,90219,90223,90231],{"__ignoreMap":68},[72,90142,90143,90145,90147],{"class":74,"line":75},[72,90144,1464],{"class":82},[72,90146,52218],{"class":51718},[72,90148,51725],{"class":82},[72,90150,90151,90153,90155,90158,90160],{"class":74,"line":370},[72,90152,52562],{"class":82},[72,90154,54305],{"class":51718},[72,90156,90157],{"class":82},">禁用\u003C\u002F",[72,90159,54305],{"class":51718},[72,90161,51725],{"class":82},[72,90163,90164,90166,90168],{"class":74,"line":1608},[72,90165,52562],{"class":82},[72,90167,52231],{"class":51718},[72,90169,51725],{"class":82},[72,90171,90172],{"class":74,"line":1623},[72,90173,90174],{"class":82},"    const btn = document.querySelector('button')\n",[72,90176,90177],{"class":74,"line":1629},[72,90178,59434],{"class":82},[72,90180,90181],{"class":74,"line":1643},[72,90182,90183],{"class":82},"      this.disabled = true\n",[72,90185,90186],{"class":74,"line":1649},[72,90187,90188],{"class":82},"      \u002F\u002F 定时器是window进行调用的\n",[72,90190,90191],{"class":74,"line":1740},[72,90192,90193],{"class":82},"      setTimeout(function () {\n",[72,90195,90196],{"class":74,"line":1746},[72,90197,90198],{"class":82},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[72,90200,90201],{"class":74,"line":1758},[72,90202,90203],{"class":82},"        this.disabled = false\n",[72,90205,90206],{"class":74,"line":2041},[72,90207,90208],{"class":82},"      }.bind(this), 2000)\n",[72,90210,90211],{"class":74,"line":2046},[72,90212,90213],{"class":82},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[72,90215,90216],{"class":74,"line":2052},[72,90217,90218],{"class":82},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[72,90220,90221],{"class":74,"line":2057},[72,90222,33879],{"class":82},[72,90224,90225,90227,90229],{"class":74,"line":2071},[72,90226,52835],{"class":82},[72,90228,52231],{"class":51718},[72,90230,51725],{"class":82},[72,90232,90233,90235,90237],{"class":74,"line":2076},[72,90234,52203],{"class":82},[72,90236,52218],{"class":51718},[72,90238,51725],{"class":82},[22,90240,90241],{"start":1629},[25,90242,22378],{},[15,90244,90245],{},[1891,90246],{"alt":68,"src":90247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[85,90249,90251],{"id":90250},"_417-性能优化","4.17 性能优化",[531,90253,90255],{"id":90254},"_4171-防抖","4.17.1 防抖",[15,90257,90258],{},[1891,90259],{"alt":68,"src":90260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[15,90262,90263],{},[707,90264,90265],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[15,90267,90268],{},"防抖实现方式：",[251,90270,90271],{},[25,90272,90273],{},"lodash 提供了防抖处理",[15,90275,90276],{},"_.debounce(func,[wait=0],[options={}])",[15,90278,90279],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[63,90281,90283],{"className":51051,"code":90282,"language":51053,"meta":68,"style":68},"\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",[34,90284,90285,90295,90309,90313,90321,90335,90355,90367,90375,90381,90391,90403,90415,90426,90438,90448,90458,90471,90475,90483,90491,90495,90503,90521,90539,90547,90566,90576,90585,90596,90601,90605,90610,90615,90620,90645,90653,90661,90665],{"__ignoreMap":68},[72,90286,90287,90289,90291,90293],{"class":74,"line":75},[72,90288,51715],{"class":82},[72,90290,51719],{"class":51718},[72,90292,51722],{"class":358},[72,90294,51725],{"class":82},[72,90296,90297,90299,90301,90303,90305,90307],{"class":74,"line":370},[72,90298,1464],{"class":82},[72,90300,51053],{"class":51718},[72,90302,51734],{"class":358},[72,90304,609],{"class":82},[72,90306,51739],{"class":366},[72,90308,51725],{"class":82},[72,90310,90311],{"class":74,"line":1608},[72,90312,2828],{"emptyLinePlaceholder":490},[72,90314,90315,90317,90319],{"class":74,"line":1623},[72,90316,1464],{"class":82},[72,90318,51752],{"class":51718},[72,90320,51725],{"class":82},[72,90322,90323,90325,90327,90329,90331,90333],{"class":74,"line":1629},[72,90324,52562],{"class":82},[72,90326,51762],{"class":51718},[72,90328,51765],{"class":358},[72,90330,609],{"class":82},[72,90332,51770],{"class":366},[72,90334,51725],{"class":82},[72,90336,90337,90339,90341,90343,90345,90347,90349,90351,90353],{"class":74,"line":1643},[72,90338,52562],{"class":82},[72,90340,51762],{"class":51718},[72,90342,15346],{"class":358},[72,90344,609],{"class":82},[72,90346,51809],{"class":366},[72,90348,51789],{"class":358},[72,90350,609],{"class":82},[72,90352,51816],{"class":366},[72,90354,51725],{"class":82},[72,90356,90357,90359,90361,90363,90365],{"class":74,"line":1649},[72,90358,52562],{"class":82},[72,90360,51825],{"class":51718},[72,90362,51828],{"class":82},[72,90364,51825],{"class":51718},[72,90366,51725],{"class":82},[72,90368,90369,90371,90373],{"class":74,"line":1740},[72,90370,52562],{"class":82},[72,90372,473],{"class":51718},[72,90374,51725],{"class":82},[72,90376,90377,90379],{"class":74,"line":1746},[72,90378,55170],{"class":358},[72,90380,15998],{"class":82},[72,90382,90383,90385,90387,90389],{"class":74,"line":1758},[72,90384,73014],{"class":362},[72,90386,51855],{"class":82},[72,90388,60923],{"class":362},[72,90390,1719],{"class":82},[72,90392,90393,90395,90397,90399,90401],{"class":74,"line":2041},[72,90394,55189],{"class":362},[72,90396,51855],{"class":82},[72,90398,2151],{"class":362},[72,90400,51910],{"class":78},[72,90402,1719],{"class":82},[72,90404,90405,90407,90409,90411,90413],{"class":74,"line":2046},[72,90406,55203],{"class":362},[72,90408,51855],{"class":82},[72,90410,2151],{"class":362},[72,90412,51910],{"class":78},[72,90414,1719],{"class":82},[72,90416,90417,90419,90421,90424],{"class":74,"line":2052},[72,90418,55302],{"class":362},[72,90420,51855],{"class":82},[72,90422,90423],{"class":362},"gray",[72,90425,1719],{"class":82},[72,90427,90428,90430,90432,90434,90436],{"class":74,"line":2057},[72,90429,55340],{"class":362},[72,90431,51855],{"class":82},[72,90433,1379],{"class":362},[72,90435,51910],{"class":78},[72,90437,1719],{"class":82},[72,90439,90440,90442,90444,90446],{"class":74,"line":2071},[72,90441,57834],{"class":362},[72,90443,51855],{"class":82},[72,90445,61260],{"class":362},[72,90447,1719],{"class":82},[72,90449,90450,90452,90454,90456],{"class":74,"line":2076},[72,90451,57704],{"class":362},[72,90453,51855],{"class":82},[72,90455,52010],{"class":362},[72,90457,1719],{"class":82},[72,90459,90460,90463,90465,90467,90469],{"class":74,"line":2082},[72,90461,90462],{"class":362},"      padding-top",[72,90464,51855],{"class":82},[72,90466,873],{"class":362},[72,90468,51910],{"class":78},[72,90470,1719],{"class":82},[72,90472,90473],{"class":74,"line":2103},[72,90474,2615],{"class":82},[72,90476,90477,90479,90481],{"class":74,"line":2108},[72,90478,52835],{"class":82},[72,90480,473],{"class":51718},[72,90482,51725],{"class":82},[72,90484,90485,90487,90489],{"class":74,"line":2122},[72,90486,52203],{"class":82},[72,90488,51752],{"class":51718},[72,90490,51725],{"class":82},[72,90492,90493],{"class":74,"line":2127},[72,90494,2828],{"emptyLinePlaceholder":490},[72,90496,90497,90499,90501],{"class":74,"line":2156},[72,90498,1464],{"class":82},[72,90500,52218],{"class":51718},[72,90502,51725],{"class":82},[72,90504,90505,90507,90509,90511,90513,90515,90517,90519],{"class":74,"line":2161},[72,90506,52562],{"class":82},[72,90508,52029],{"class":51718},[72,90510,53904],{"class":358},[72,90512,609],{"class":82},[72,90514,53909],{"class":366},[72,90516,55732],{"class":82},[72,90518,52029],{"class":51718},[72,90520,51725],{"class":82},[72,90522,90523,90525,90527,90529,90531,90533,90535,90537],{"class":74,"line":2178},[72,90524,52562],{"class":82},[72,90526,52231],{"class":51718},[72,90528,55657],{"class":358},[72,90530,609],{"class":82},[72,90532,88691],{"class":366},[72,90534,55732],{"class":82},[72,90536,52231],{"class":51718},[72,90538,51725],{"class":82},[72,90540,90541,90543,90545],{"class":74,"line":2183},[72,90542,52562],{"class":82},[72,90544,52231],{"class":51718},[72,90546,51725],{"class":82},[72,90548,90549,90551,90553,90555,90557,90559,90561,90564],{"class":74,"line":2188},[72,90550,11647],{"class":78},[72,90552,87350],{"class":362},[72,90554,13990],{"class":78},[72,90556,54814],{"class":82},[72,90558,54817],{"class":358},[72,90560,564],{"class":82},[72,90562,90563],{"class":366},"'.box'",[72,90565,570],{"class":82},[72,90567,90568,90570,90572,90574],{"class":74,"line":2193},[72,90569,52637],{"class":78},[72,90571,9864],{"class":82},[72,90573,609],{"class":78},[72,90575,47751],{"class":362},[72,90577,90578,90580,90583],{"class":74,"line":2207},[72,90579,70502],{"class":78},[72,90581,90582],{"class":358}," mouseMove",[72,90584,11279],{"class":82},[72,90586,90587,90590,90592,90594],{"class":74,"line":2212},[72,90588,90589],{"class":82},"      box.innerHTML ",[72,90591,609],{"class":78},[72,90593,3460],{"class":82},[72,90595,3130],{"class":78},[72,90597,90598],{"class":74,"line":3005},[72,90599,90600],{"class":621},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[72,90602,90603],{"class":74,"line":3019},[72,90604,2615],{"class":82},[72,90606,90607],{"class":74,"line":3027},[72,90608,90609],{"class":621},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[72,90611,90612],{"class":74,"line":3032},[72,90613,90614],{"class":621},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[72,90616,90617],{"class":74,"line":3038},[72,90618,90619],{"class":621},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[72,90621,90622,90625,90627,90629,90632,90635,90638,90641,90643],{"class":74,"line":3044},[72,90623,90624],{"class":82},"    box.",[72,90626,58231],{"class":358},[72,90628,564],{"class":82},[72,90630,90631],{"class":366},"'mousemove'",[72,90633,90634],{"class":82},", _.",[72,90636,90637],{"class":358},"debounce",[72,90639,90640],{"class":82},"(mouseMove, ",[72,90642,65492],{"class":362},[72,90644,30915],{"class":82},[72,90646,90647,90649,90651],{"class":74,"line":3049},[72,90648,52835],{"class":82},[72,90650,52231],{"class":51718},[72,90652,51725],{"class":82},[72,90654,90655,90657,90659],{"class":74,"line":8374},[72,90656,52203],{"class":82},[72,90658,52218],{"class":51718},[72,90660,51725],{"class":82},[72,90662,90663],{"class":74,"line":8398},[72,90664,2828],{"emptyLinePlaceholder":490},[72,90666,90667,90669,90671],{"class":74,"line":8403},[72,90668,52203],{"class":82},[72,90670,51053],{"class":51718},[72,90672,51725],{"class":82},[251,90674,90675],{},[25,90676,90677],{},"手写一个防抖函数来处理",[15,90679,90680],{},"防抖的核心就是利用定时器来实现的：",[15,90682,90683],{},"①声明一个定时器变量",[15,90685,90686],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[15,90688,90689],{},"③如果没有定时器则开启定时器，记得存到变量里面",[63,90691,90693],{"className":51051,"code":90692,"language":51053,"meta":68,"style":68},"\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",[34,90694,90695,90705,90719,90723,90731,90745,90765,90777,90785,90791,90801,90813,90825,90835,90847,90857,90867,90879,90883,90891,90899,90903,90911,90929,90947,90955,90973,90983,90991,91001,91005,91009,91013,91018,91023,91028,91033,91038,91043,91061,91068,91073,91081,91086,91099,91115,91125,91130,91134,91138,91158,91162,91167,91172,91177,91182,91190,91198,91202],{"__ignoreMap":68},[72,90696,90697,90699,90701,90703],{"class":74,"line":75},[72,90698,51715],{"class":82},[72,90700,51719],{"class":51718},[72,90702,51722],{"class":358},[72,90704,51725],{"class":82},[72,90706,90707,90709,90711,90713,90715,90717],{"class":74,"line":370},[72,90708,1464],{"class":82},[72,90710,51053],{"class":51718},[72,90712,51734],{"class":358},[72,90714,609],{"class":82},[72,90716,51739],{"class":366},[72,90718,51725],{"class":82},[72,90720,90721],{"class":74,"line":1608},[72,90722,2828],{"emptyLinePlaceholder":490},[72,90724,90725,90727,90729],{"class":74,"line":1623},[72,90726,1464],{"class":82},[72,90728,51752],{"class":51718},[72,90730,51725],{"class":82},[72,90732,90733,90735,90737,90739,90741,90743],{"class":74,"line":1629},[72,90734,52562],{"class":82},[72,90736,51762],{"class":51718},[72,90738,51765],{"class":358},[72,90740,609],{"class":82},[72,90742,51770],{"class":366},[72,90744,51725],{"class":82},[72,90746,90747,90749,90751,90753,90755,90757,90759,90761,90763],{"class":74,"line":1643},[72,90748,52562],{"class":82},[72,90750,51762],{"class":51718},[72,90752,15346],{"class":358},[72,90754,609],{"class":82},[72,90756,51809],{"class":366},[72,90758,51789],{"class":358},[72,90760,609],{"class":82},[72,90762,51816],{"class":366},[72,90764,51725],{"class":82},[72,90766,90767,90769,90771,90773,90775],{"class":74,"line":1649},[72,90768,52562],{"class":82},[72,90770,51825],{"class":51718},[72,90772,51828],{"class":82},[72,90774,51825],{"class":51718},[72,90776,51725],{"class":82},[72,90778,90779,90781,90783],{"class":74,"line":1740},[72,90780,52562],{"class":82},[72,90782,473],{"class":51718},[72,90784,51725],{"class":82},[72,90786,90787,90789],{"class":74,"line":1746},[72,90788,55170],{"class":358},[72,90790,15998],{"class":82},[72,90792,90793,90795,90797,90799],{"class":74,"line":1758},[72,90794,73014],{"class":362},[72,90796,51855],{"class":82},[72,90798,60923],{"class":362},[72,90800,1719],{"class":82},[72,90802,90803,90805,90807,90809,90811],{"class":74,"line":2041},[72,90804,55189],{"class":362},[72,90806,51855],{"class":82},[72,90808,2151],{"class":362},[72,90810,51910],{"class":78},[72,90812,1719],{"class":82},[72,90814,90815,90817,90819,90821,90823],{"class":74,"line":2046},[72,90816,55203],{"class":362},[72,90818,51855],{"class":82},[72,90820,2151],{"class":362},[72,90822,51910],{"class":78},[72,90824,1719],{"class":82},[72,90826,90827,90829,90831,90833],{"class":74,"line":2052},[72,90828,55302],{"class":362},[72,90830,51855],{"class":82},[72,90832,90423],{"class":362},[72,90834,1719],{"class":82},[72,90836,90837,90839,90841,90843,90845],{"class":74,"line":2057},[72,90838,55340],{"class":362},[72,90840,51855],{"class":82},[72,90842,1379],{"class":362},[72,90844,51910],{"class":78},[72,90846,1719],{"class":82},[72,90848,90849,90851,90853,90855],{"class":74,"line":2071},[72,90850,57834],{"class":362},[72,90852,51855],{"class":82},[72,90854,61260],{"class":362},[72,90856,1719],{"class":82},[72,90858,90859,90861,90863,90865],{"class":74,"line":2076},[72,90860,57704],{"class":362},[72,90862,51855],{"class":82},[72,90864,52010],{"class":362},[72,90866,1719],{"class":82},[72,90868,90869,90871,90873,90875,90877],{"class":74,"line":2082},[72,90870,90462],{"class":362},[72,90872,51855],{"class":82},[72,90874,873],{"class":362},[72,90876,51910],{"class":78},[72,90878,1719],{"class":82},[72,90880,90881],{"class":74,"line":2103},[72,90882,2615],{"class":82},[72,90884,90885,90887,90889],{"class":74,"line":2108},[72,90886,52835],{"class":82},[72,90888,473],{"class":51718},[72,90890,51725],{"class":82},[72,90892,90893,90895,90897],{"class":74,"line":2122},[72,90894,52203],{"class":82},[72,90896,51752],{"class":51718},[72,90898,51725],{"class":82},[72,90900,90901],{"class":74,"line":2127},[72,90902,2828],{"emptyLinePlaceholder":490},[72,90904,90905,90907,90909],{"class":74,"line":2156},[72,90906,1464],{"class":82},[72,90908,52218],{"class":51718},[72,90910,51725],{"class":82},[72,90912,90913,90915,90917,90919,90921,90923,90925,90927],{"class":74,"line":2161},[72,90914,52562],{"class":82},[72,90916,52029],{"class":51718},[72,90918,53904],{"class":358},[72,90920,609],{"class":82},[72,90922,53909],{"class":366},[72,90924,55732],{"class":82},[72,90926,52029],{"class":51718},[72,90928,51725],{"class":82},[72,90930,90931,90933,90935,90937,90939,90941,90943,90945],{"class":74,"line":2178},[72,90932,52562],{"class":82},[72,90934,52231],{"class":51718},[72,90936,55657],{"class":358},[72,90938,609],{"class":82},[72,90940,88691],{"class":366},[72,90942,55732],{"class":82},[72,90944,52231],{"class":51718},[72,90946,51725],{"class":82},[72,90948,90949,90951,90953],{"class":74,"line":2183},[72,90950,52562],{"class":82},[72,90952,52231],{"class":51718},[72,90954,51725],{"class":82},[72,90956,90957,90959,90961,90963,90965,90967,90969,90971],{"class":74,"line":2188},[72,90958,11647],{"class":78},[72,90960,87350],{"class":362},[72,90962,13990],{"class":78},[72,90964,54814],{"class":82},[72,90966,54817],{"class":358},[72,90968,564],{"class":82},[72,90970,90563],{"class":366},[72,90972,570],{"class":82},[72,90974,90975,90977,90979,90981],{"class":74,"line":2193},[72,90976,52637],{"class":78},[72,90978,9864],{"class":82},[72,90980,609],{"class":78},[72,90982,47751],{"class":362},[72,90984,90985,90987,90989],{"class":74,"line":2207},[72,90986,70502],{"class":78},[72,90988,90582],{"class":358},[72,90990,11279],{"class":82},[72,90992,90993,90995,90997,90999],{"class":74,"line":2212},[72,90994,90589],{"class":82},[72,90996,609],{"class":78},[72,90998,3460],{"class":82},[72,91000,3130],{"class":78},[72,91002,91003],{"class":74,"line":3005},[72,91004,90600],{"class":621},[72,91006,91007],{"class":74,"line":3019},[72,91008,2615],{"class":82},[72,91010,91011],{"class":74,"line":3027},[72,91012,90609],{"class":621},[72,91014,91015],{"class":74,"line":3032},[72,91016,91017],{"class":621},"    \u002F\u002F 手写防抖函数\n",[72,91019,91020],{"class":74,"line":3038},[72,91021,91022],{"class":621},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[72,91024,91025],{"class":74,"line":3044},[72,91026,91027],{"class":621},"    \u002F\u002F 1.声明定时器变量\n",[72,91029,91030],{"class":74,"line":3049},[72,91031,91032],{"class":621},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[72,91034,91035],{"class":74,"line":8374},[72,91036,91037],{"class":621},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[72,91039,91040],{"class":74,"line":8398},[72,91041,91042],{"class":621},"    \u002F\u002F 4.定时器里面写函数调用\n",[72,91044,91045,91047,91050,91052,91055,91057,91059],{"class":74,"line":8403},[72,91046,70502],{"class":78},[72,91048,91049],{"class":358}," debounce",[72,91051,564],{"class":82},[72,91053,91054],{"class":5642},"fn",[72,91056,12861],{"class":82},[72,91058,1274],{"class":5642},[72,91060,12868],{"class":82},[72,91062,91063,91065],{"class":74,"line":8409},[72,91064,80190],{"class":78},[72,91066,91067],{"class":82}," timer\n",[72,91069,91070],{"class":74,"line":8436},[72,91071,91072],{"class":621},"      \u002F\u002F return 返回一个匿名函数\n",[72,91074,91075,91077,91079],{"class":74,"line":8441},[72,91076,74400],{"class":78},[72,91078,59336],{"class":78},[72,91080,54870],{"class":82},[72,91082,91083],{"class":74,"line":8447},[72,91084,91085],{"class":621},"        \u002F\u002F 这里边写第二三四步\n",[72,91087,91088,91090,91093,91096],{"class":74,"line":8459},[72,91089,2925],{"class":78},[72,91091,91092],{"class":82}," (timer) ",[72,91094,91095],{"class":358},"clearTimeout",[72,91097,91098],{"class":82},"(timer)\n",[72,91100,91101,91104,91106,91109,91111,91113],{"class":74,"line":8471},[72,91102,91103],{"class":82},"        timer ",[72,91105,609],{"class":78},[72,91107,91108],{"class":358}," setTimeout",[72,91110,564],{"class":82},[72,91112,54867],{"class":78},[72,91114,54870],{"class":82},[72,91116,91117,91120,91122],{"class":74,"line":8483},[72,91118,91119],{"class":358},"          fn",[72,91121,13476],{"class":82},[72,91123,91124],{"class":621},"\u002F\u002F加小括号调用fn }, t)\n",[72,91126,91127],{"class":74,"line":10142},[72,91128,91129],{"class":82},"        }, t)\n",[72,91131,91132],{"class":74,"line":10167},[72,91133,52816],{"class":82},[72,91135,91136],{"class":74,"line":10190},[72,91137,2615],{"class":82},[72,91139,91140,91142,91144,91146,91148,91150,91152,91154,91156],{"class":74,"line":10214},[72,91141,90624],{"class":82},[72,91143,58231],{"class":358},[72,91145,564],{"class":82},[72,91147,90631],{"class":366},[72,91149,12861],{"class":82},[72,91151,90637],{"class":358},[72,91153,90640],{"class":82},[72,91155,65492],{"class":362},[72,91157,30915],{"class":82},[72,91159,91160],{"class":74,"line":10219},[72,91161,2828],{"emptyLinePlaceholder":490},[72,91163,91164],{"class":74,"line":10224},[72,91165,91166],{"class":621},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[72,91168,91169],{"class":74,"line":10229},[72,91170,91171],{"class":621},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[72,91173,91174],{"class":74,"line":10238},[72,91175,91176],{"class":621},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[72,91178,91179],{"class":74,"line":10243},[72,91180,91181],{"class":621},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[72,91183,91184,91186,91188],{"class":74,"line":10249},[72,91185,52835],{"class":82},[72,91187,52231],{"class":51718},[72,91189,51725],{"class":82},[72,91191,91192,91194,91196],{"class":74,"line":10270},[72,91193,52203],{"class":82},[72,91195,52218],{"class":51718},[72,91197,51725],{"class":82},[72,91199,91200],{"class":74,"line":10276},[72,91201,2828],{"emptyLinePlaceholder":490},[72,91203,91204,91206,91208],{"class":74,"line":10290},[72,91205,52203],{"class":82},[72,91207,51053],{"class":51718},[72,91209,51725],{"class":82},[531,91211,91213],{"id":91212},"_4172-节流","4.17.2 节流",[15,91215,91216],{},[1891,91217],{"alt":68,"src":91218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[15,91220,91221],{},[1891,91222],{"alt":68,"src":91223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[15,91225,91226],{},[707,91227,91228],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[15,91230,91231],{},"实现方式：",[251,91233,91234],{},[25,91235,91236],{},"lodash 提供的节流函数来处理",[15,91238,91239],{},"_.throttle(func,[wait=0],[options=])",[15,91241,91242],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[63,91244,91246],{"className":51051,"code":91245,"language":51053,"meta":68,"style":68},"\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",[34,91247,91248,91258,91272,91276,91284,91298,91318,91330,91338,91344,91354,91366,91378,91388,91400,91410,91420,91432,91436,91444,91452,91456,91464,91482,91500,91508,91526,91536,91544,91554,91558,91562,91566,91571,91576,91597,91605,91613,91617],{"__ignoreMap":68},[72,91249,91250,91252,91254,91256],{"class":74,"line":75},[72,91251,51715],{"class":82},[72,91253,51719],{"class":51718},[72,91255,51722],{"class":358},[72,91257,51725],{"class":82},[72,91259,91260,91262,91264,91266,91268,91270],{"class":74,"line":370},[72,91261,1464],{"class":82},[72,91263,51053],{"class":51718},[72,91265,51734],{"class":358},[72,91267,609],{"class":82},[72,91269,51739],{"class":366},[72,91271,51725],{"class":82},[72,91273,91274],{"class":74,"line":1608},[72,91275,2828],{"emptyLinePlaceholder":490},[72,91277,91278,91280,91282],{"class":74,"line":1623},[72,91279,1464],{"class":82},[72,91281,51752],{"class":51718},[72,91283,51725],{"class":82},[72,91285,91286,91288,91290,91292,91294,91296],{"class":74,"line":1629},[72,91287,52562],{"class":82},[72,91289,51762],{"class":51718},[72,91291,51765],{"class":358},[72,91293,609],{"class":82},[72,91295,51770],{"class":366},[72,91297,51725],{"class":82},[72,91299,91300,91302,91304,91306,91308,91310,91312,91314,91316],{"class":74,"line":1643},[72,91301,52562],{"class":82},[72,91303,51762],{"class":51718},[72,91305,15346],{"class":358},[72,91307,609],{"class":82},[72,91309,51809],{"class":366},[72,91311,51789],{"class":358},[72,91313,609],{"class":82},[72,91315,51816],{"class":366},[72,91317,51725],{"class":82},[72,91319,91320,91322,91324,91326,91328],{"class":74,"line":1649},[72,91321,52562],{"class":82},[72,91323,51825],{"class":51718},[72,91325,51828],{"class":82},[72,91327,51825],{"class":51718},[72,91329,51725],{"class":82},[72,91331,91332,91334,91336],{"class":74,"line":1740},[72,91333,52562],{"class":82},[72,91335,473],{"class":51718},[72,91337,51725],{"class":82},[72,91339,91340,91342],{"class":74,"line":1746},[72,91341,55170],{"class":358},[72,91343,15998],{"class":82},[72,91345,91346,91348,91350,91352],{"class":74,"line":1758},[72,91347,73014],{"class":362},[72,91349,51855],{"class":82},[72,91351,60923],{"class":362},[72,91353,1719],{"class":82},[72,91355,91356,91358,91360,91362,91364],{"class":74,"line":2041},[72,91357,55189],{"class":362},[72,91359,51855],{"class":82},[72,91361,2151],{"class":362},[72,91363,51910],{"class":78},[72,91365,1719],{"class":82},[72,91367,91368,91370,91372,91374,91376],{"class":74,"line":2046},[72,91369,55203],{"class":362},[72,91371,51855],{"class":82},[72,91373,2151],{"class":362},[72,91375,51910],{"class":78},[72,91377,1719],{"class":82},[72,91379,91380,91382,91384,91386],{"class":74,"line":2052},[72,91381,55302],{"class":362},[72,91383,51855],{"class":82},[72,91385,90423],{"class":362},[72,91387,1719],{"class":82},[72,91389,91390,91392,91394,91396,91398],{"class":74,"line":2057},[72,91391,55340],{"class":362},[72,91393,51855],{"class":82},[72,91395,1379],{"class":362},[72,91397,51910],{"class":78},[72,91399,1719],{"class":82},[72,91401,91402,91404,91406,91408],{"class":74,"line":2071},[72,91403,57834],{"class":362},[72,91405,51855],{"class":82},[72,91407,61260],{"class":362},[72,91409,1719],{"class":82},[72,91411,91412,91414,91416,91418],{"class":74,"line":2076},[72,91413,57704],{"class":362},[72,91415,51855],{"class":82},[72,91417,52010],{"class":362},[72,91419,1719],{"class":82},[72,91421,91422,91424,91426,91428,91430],{"class":74,"line":2082},[72,91423,90462],{"class":362},[72,91425,51855],{"class":82},[72,91427,873],{"class":362},[72,91429,51910],{"class":78},[72,91431,1719],{"class":82},[72,91433,91434],{"class":74,"line":2103},[72,91435,2615],{"class":82},[72,91437,91438,91440,91442],{"class":74,"line":2108},[72,91439,52835],{"class":82},[72,91441,473],{"class":51718},[72,91443,51725],{"class":82},[72,91445,91446,91448,91450],{"class":74,"line":2122},[72,91447,52203],{"class":82},[72,91449,51752],{"class":51718},[72,91451,51725],{"class":82},[72,91453,91454],{"class":74,"line":2127},[72,91455,2828],{"emptyLinePlaceholder":490},[72,91457,91458,91460,91462],{"class":74,"line":2156},[72,91459,1464],{"class":82},[72,91461,52218],{"class":51718},[72,91463,51725],{"class":82},[72,91465,91466,91468,91470,91472,91474,91476,91478,91480],{"class":74,"line":2161},[72,91467,52562],{"class":82},[72,91469,52029],{"class":51718},[72,91471,53904],{"class":358},[72,91473,609],{"class":82},[72,91475,53909],{"class":366},[72,91477,55732],{"class":82},[72,91479,52029],{"class":51718},[72,91481,51725],{"class":82},[72,91483,91484,91486,91488,91490,91492,91494,91496,91498],{"class":74,"line":2178},[72,91485,52562],{"class":82},[72,91487,52231],{"class":51718},[72,91489,55657],{"class":358},[72,91491,609],{"class":82},[72,91493,88691],{"class":366},[72,91495,55732],{"class":82},[72,91497,52231],{"class":51718},[72,91499,51725],{"class":82},[72,91501,91502,91504,91506],{"class":74,"line":2183},[72,91503,52562],{"class":82},[72,91505,52231],{"class":51718},[72,91507,51725],{"class":82},[72,91509,91510,91512,91514,91516,91518,91520,91522,91524],{"class":74,"line":2188},[72,91511,11647],{"class":78},[72,91513,87350],{"class":362},[72,91515,13990],{"class":78},[72,91517,54814],{"class":82},[72,91519,54817],{"class":358},[72,91521,564],{"class":82},[72,91523,90563],{"class":366},[72,91525,570],{"class":82},[72,91527,91528,91530,91532,91534],{"class":74,"line":2193},[72,91529,52637],{"class":78},[72,91531,9864],{"class":82},[72,91533,609],{"class":78},[72,91535,47751],{"class":362},[72,91537,91538,91540,91542],{"class":74,"line":2207},[72,91539,70502],{"class":78},[72,91541,90582],{"class":358},[72,91543,11279],{"class":82},[72,91545,91546,91548,91550,91552],{"class":74,"line":2212},[72,91547,90589],{"class":82},[72,91549,609],{"class":78},[72,91551,3460],{"class":82},[72,91553,3130],{"class":78},[72,91555,91556],{"class":74,"line":3005},[72,91557,90600],{"class":621},[72,91559,91560],{"class":74,"line":3019},[72,91561,2615],{"class":82},[72,91563,91564],{"class":74,"line":3027},[72,91565,90609],{"class":621},[72,91567,91568],{"class":74,"line":3032},[72,91569,91570],{"class":621},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[72,91572,91573],{"class":74,"line":3038},[72,91574,91575],{"class":621},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[72,91577,91578,91580,91582,91584,91586,91588,91591,91593,91595],{"class":74,"line":3044},[72,91579,90624],{"class":82},[72,91581,58231],{"class":358},[72,91583,564],{"class":82},[72,91585,90631],{"class":366},[72,91587,90634],{"class":82},[72,91589,91590],{"class":358},"throttle",[72,91592,90640],{"class":82},[72,91594,65492],{"class":362},[72,91596,30915],{"class":82},[72,91598,91599,91601,91603],{"class":74,"line":3049},[72,91600,52835],{"class":82},[72,91602,52231],{"class":51718},[72,91604,51725],{"class":82},[72,91606,91607,91609,91611],{"class":74,"line":8374},[72,91608,52203],{"class":82},[72,91610,52218],{"class":51718},[72,91612,51725],{"class":82},[72,91614,91615],{"class":74,"line":8398},[72,91616,2828],{"emptyLinePlaceholder":490},[72,91618,91619,91621,91623],{"class":74,"line":8403},[72,91620,52203],{"class":82},[72,91622,51053],{"class":51718},[72,91624,51725],{"class":82},[251,91626,91627],{},[25,91628,91629],{},"手写一个节流函数来处理",[15,91631,71370],{},[15,91633,90683],{},[15,91635,91636],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[15,91638,91639],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[63,91641,91643],{"className":51051,"code":91642,"language":51053,"meta":68,"style":68},"\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",[34,91644,91645,91655,91669,91673,91681,91695,91715,91727,91735,91741,91751,91763,91775,91785,91797,91807,91817,91829,91833,91841,91849,91853,91861,91879,91897,91905,91923,91933,91941,91951,91955,91959,91963,91968,91973,91978,91983,91988,91993,92010,92016,92024,92035,92050,92057,92062,92067,92077,92082,92087,92092,92096,92100,92104,92124,92132,92140,92144],{"__ignoreMap":68},[72,91646,91647,91649,91651,91653],{"class":74,"line":75},[72,91648,51715],{"class":82},[72,91650,51719],{"class":51718},[72,91652,51722],{"class":358},[72,91654,51725],{"class":82},[72,91656,91657,91659,91661,91663,91665,91667],{"class":74,"line":370},[72,91658,1464],{"class":82},[72,91660,51053],{"class":51718},[72,91662,51734],{"class":358},[72,91664,609],{"class":82},[72,91666,51739],{"class":366},[72,91668,51725],{"class":82},[72,91670,91671],{"class":74,"line":1608},[72,91672,2828],{"emptyLinePlaceholder":490},[72,91674,91675,91677,91679],{"class":74,"line":1623},[72,91676,1464],{"class":82},[72,91678,51752],{"class":51718},[72,91680,51725],{"class":82},[72,91682,91683,91685,91687,91689,91691,91693],{"class":74,"line":1629},[72,91684,52562],{"class":82},[72,91686,51762],{"class":51718},[72,91688,51765],{"class":358},[72,91690,609],{"class":82},[72,91692,51770],{"class":366},[72,91694,51725],{"class":82},[72,91696,91697,91699,91701,91703,91705,91707,91709,91711,91713],{"class":74,"line":1643},[72,91698,52562],{"class":82},[72,91700,51762],{"class":51718},[72,91702,15346],{"class":358},[72,91704,609],{"class":82},[72,91706,51809],{"class":366},[72,91708,51789],{"class":358},[72,91710,609],{"class":82},[72,91712,51816],{"class":366},[72,91714,51725],{"class":82},[72,91716,91717,91719,91721,91723,91725],{"class":74,"line":1649},[72,91718,52562],{"class":82},[72,91720,51825],{"class":51718},[72,91722,51828],{"class":82},[72,91724,51825],{"class":51718},[72,91726,51725],{"class":82},[72,91728,91729,91731,91733],{"class":74,"line":1740},[72,91730,52562],{"class":82},[72,91732,473],{"class":51718},[72,91734,51725],{"class":82},[72,91736,91737,91739],{"class":74,"line":1746},[72,91738,55170],{"class":358},[72,91740,15998],{"class":82},[72,91742,91743,91745,91747,91749],{"class":74,"line":1758},[72,91744,73014],{"class":362},[72,91746,51855],{"class":82},[72,91748,60923],{"class":362},[72,91750,1719],{"class":82},[72,91752,91753,91755,91757,91759,91761],{"class":74,"line":2041},[72,91754,55189],{"class":362},[72,91756,51855],{"class":82},[72,91758,2151],{"class":362},[72,91760,51910],{"class":78},[72,91762,1719],{"class":82},[72,91764,91765,91767,91769,91771,91773],{"class":74,"line":2046},[72,91766,55203],{"class":362},[72,91768,51855],{"class":82},[72,91770,2151],{"class":362},[72,91772,51910],{"class":78},[72,91774,1719],{"class":82},[72,91776,91777,91779,91781,91783],{"class":74,"line":2052},[72,91778,55302],{"class":362},[72,91780,51855],{"class":82},[72,91782,90423],{"class":362},[72,91784,1719],{"class":82},[72,91786,91787,91789,91791,91793,91795],{"class":74,"line":2057},[72,91788,55340],{"class":362},[72,91790,51855],{"class":82},[72,91792,1379],{"class":362},[72,91794,51910],{"class":78},[72,91796,1719],{"class":82},[72,91798,91799,91801,91803,91805],{"class":74,"line":2071},[72,91800,57834],{"class":362},[72,91802,51855],{"class":82},[72,91804,61260],{"class":362},[72,91806,1719],{"class":82},[72,91808,91809,91811,91813,91815],{"class":74,"line":2076},[72,91810,57704],{"class":362},[72,91812,51855],{"class":82},[72,91814,52010],{"class":362},[72,91816,1719],{"class":82},[72,91818,91819,91821,91823,91825,91827],{"class":74,"line":2082},[72,91820,90462],{"class":362},[72,91822,51855],{"class":82},[72,91824,873],{"class":362},[72,91826,51910],{"class":78},[72,91828,1719],{"class":82},[72,91830,91831],{"class":74,"line":2103},[72,91832,2615],{"class":82},[72,91834,91835,91837,91839],{"class":74,"line":2108},[72,91836,52835],{"class":82},[72,91838,473],{"class":51718},[72,91840,51725],{"class":82},[72,91842,91843,91845,91847],{"class":74,"line":2122},[72,91844,52203],{"class":82},[72,91846,51752],{"class":51718},[72,91848,51725],{"class":82},[72,91850,91851],{"class":74,"line":2127},[72,91852,2828],{"emptyLinePlaceholder":490},[72,91854,91855,91857,91859],{"class":74,"line":2156},[72,91856,1464],{"class":82},[72,91858,52218],{"class":51718},[72,91860,51725],{"class":82},[72,91862,91863,91865,91867,91869,91871,91873,91875,91877],{"class":74,"line":2161},[72,91864,52562],{"class":82},[72,91866,52029],{"class":51718},[72,91868,53904],{"class":358},[72,91870,609],{"class":82},[72,91872,53909],{"class":366},[72,91874,55732],{"class":82},[72,91876,52029],{"class":51718},[72,91878,51725],{"class":82},[72,91880,91881,91883,91885,91887,91889,91891,91893,91895],{"class":74,"line":2178},[72,91882,52562],{"class":82},[72,91884,52231],{"class":51718},[72,91886,55657],{"class":358},[72,91888,609],{"class":82},[72,91890,88691],{"class":366},[72,91892,55732],{"class":82},[72,91894,52231],{"class":51718},[72,91896,51725],{"class":82},[72,91898,91899,91901,91903],{"class":74,"line":2183},[72,91900,52562],{"class":82},[72,91902,52231],{"class":51718},[72,91904,51725],{"class":82},[72,91906,91907,91909,91911,91913,91915,91917,91919,91921],{"class":74,"line":2188},[72,91908,11647],{"class":78},[72,91910,87350],{"class":362},[72,91912,13990],{"class":78},[72,91914,54814],{"class":82},[72,91916,54817],{"class":358},[72,91918,564],{"class":82},[72,91920,90563],{"class":366},[72,91922,570],{"class":82},[72,91924,91925,91927,91929,91931],{"class":74,"line":2193},[72,91926,52637],{"class":78},[72,91928,9864],{"class":82},[72,91930,609],{"class":78},[72,91932,47751],{"class":362},[72,91934,91935,91937,91939],{"class":74,"line":2207},[72,91936,70502],{"class":78},[72,91938,90582],{"class":358},[72,91940,11279],{"class":82},[72,91942,91943,91945,91947,91949],{"class":74,"line":2212},[72,91944,90589],{"class":82},[72,91946,609],{"class":78},[72,91948,3460],{"class":82},[72,91950,3130],{"class":78},[72,91952,91953],{"class":74,"line":3005},[72,91954,90600],{"class":621},[72,91956,91957],{"class":74,"line":3019},[72,91958,2615],{"class":82},[72,91960,91961],{"class":74,"line":3027},[72,91962,90609],{"class":621},[72,91964,91965],{"class":74,"line":3032},[72,91966,91967],{"class":621},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[72,91969,91970],{"class":74,"line":3038},[72,91971,91972],{"class":621},"    \u002F\u002F 1.声明一个定时器变量\n",[72,91974,91975],{"class":74,"line":3044},[72,91976,91977],{"class":621},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[72,91979,91980],{"class":74,"line":3049},[72,91981,91982],{"class":621},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[72,91984,91985],{"class":74,"line":8374},[72,91986,91987],{"class":621},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[72,91989,91990],{"class":74,"line":8398},[72,91991,91992],{"class":621},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[72,91994,91995,91997,92000,92002,92004,92006,92008],{"class":74,"line":8403},[72,91996,70502],{"class":78},[72,91998,91999],{"class":358}," throttle",[72,92001,564],{"class":82},[72,92003,91054],{"class":5642},[72,92005,12861],{"class":82},[72,92007,1274],{"class":5642},[72,92009,12868],{"class":82},[72,92011,92012,92014],{"class":74,"line":8409},[72,92013,80190],{"class":78},[72,92015,91067],{"class":82},[72,92017,92018,92020,92022],{"class":74,"line":8436},[72,92019,74400],{"class":78},[72,92021,59336],{"class":78},[72,92023,54870],{"class":82},[72,92025,92026,92028,92030,92032],{"class":74,"line":8441},[72,92027,2925],{"class":78},[72,92029,2087],{"class":82},[72,92031,781],{"class":78},[72,92033,92034],{"class":82},"timer) {\n",[72,92036,92037,92040,92042,92044,92046,92048],{"class":74,"line":8447},[72,92038,92039],{"class":82},"          timer ",[72,92041,609],{"class":78},[72,92043,91108],{"class":358},[72,92045,564],{"class":82},[72,92047,54867],{"class":78},[72,92049,54870],{"class":82},[72,92051,92052,92055],{"class":74,"line":8459},[72,92053,92054],{"class":358},"            fn",[72,92056,2404],{"class":82},[72,92058,92059],{"class":74,"line":8471},[72,92060,92061],{"class":621},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[72,92063,92064],{"class":74,"line":8483},[72,92065,92066],{"class":621},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[72,92068,92069,92072,92074],{"class":74,"line":10142},[72,92070,92071],{"class":82},"            timer ",[72,92073,609],{"class":78},[72,92075,92076],{"class":362}," null\n",[72,92078,92079],{"class":74,"line":10167},[72,92080,92081],{"class":621},"            \u002F\u002F 不能用clearTimeout(timer)\n",[72,92083,92084],{"class":74,"line":10190},[72,92085,92086],{"class":621},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[72,92088,92089],{"class":74,"line":10214},[72,92090,92091],{"class":82},"          }, t)\n",[72,92093,92094],{"class":74,"line":10219},[72,92095,2957],{"class":82},[72,92097,92098],{"class":74,"line":10224},[72,92099,52816],{"class":82},[72,92101,92102],{"class":74,"line":10229},[72,92103,2615],{"class":82},[72,92105,92106,92108,92110,92112,92114,92116,92118,92120,92122],{"class":74,"line":10238},[72,92107,90624],{"class":82},[72,92109,58231],{"class":358},[72,92111,564],{"class":82},[72,92113,90631],{"class":366},[72,92115,12861],{"class":82},[72,92117,91590],{"class":358},[72,92119,90640],{"class":82},[72,92121,65492],{"class":362},[72,92123,30915],{"class":82},[72,92125,92126,92128,92130],{"class":74,"line":10243},[72,92127,52835],{"class":82},[72,92129,52231],{"class":51718},[72,92131,51725],{"class":82},[72,92133,92134,92136,92138],{"class":74,"line":10249},[72,92135,52203],{"class":82},[72,92137,52218],{"class":51718},[72,92139,51725],{"class":82},[72,92141,92142],{"class":74,"line":10270},[72,92143,2828],{"emptyLinePlaceholder":490},[72,92145,92146,92148,92150],{"class":74,"line":10276},[72,92147,52203],{"class":82},[72,92149,51053],{"class":51718},[72,92151,51725],{"class":82},[531,92153,92155],{"id":92154},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[63,92157,92159],{"className":53485,"code":92158,"language":53487,"meta":68,"style":68},"\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",[34,92160,92161,92169,92177,92182,92187,92192,92197,92201,92209],{"__ignoreMap":68},[72,92162,92163,92165,92167],{"class":74,"line":75},[72,92164,1464],{"class":82},[72,92166,52218],{"class":51718},[72,92168,51725],{"class":82},[72,92170,92171,92173,92175],{"class":74,"line":370},[72,92172,52562],{"class":82},[72,92174,52231],{"class":51718},[72,92176,51725],{"class":82},[72,92178,92179],{"class":74,"line":1608},[72,92180,92181],{"class":82},"    let timer = null\n",[72,92183,92184],{"class":74,"line":1623},[72,92185,92186],{"class":82},"    timer = setTimeout(() => {\n",[72,92188,92189],{"class":74,"line":1629},[72,92190,92191],{"class":82},"      clearTimeout(timer)\n",[72,92193,92194],{"class":74,"line":1643},[72,92195,92196],{"class":82},"      console.log(timer)\n",[72,92198,92199],{"class":74,"line":1649},[72,92200,60643],{"class":82},[72,92202,92203,92205,92207],{"class":74,"line":1740},[72,92204,52835],{"class":82},[72,92206,52231],{"class":51718},[72,92208,51725],{"class":82},[72,92210,92211,92213,92215],{"class":74,"line":1746},[72,92212,52203],{"class":82},[72,92214,52218],{"class":51718},[72,92216,51725],{"class":82},[15,92218,92219],{},"输出为1",[15,92221,92222],{},"在开启的定时器里边写清除定时器",[15,92224,92225],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[531,92227,92229],{"id":92228},"_4174-节流综合案例","4.17.4 节流综合案例",[15,92231,92232],{},"页面打开，可以记录上一次的视频播放位置",[15,92234,92235],{},[1891,92236],{"alt":68,"src":92237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[15,92239,92240],{},[1891,92241],{"alt":68,"src":92242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[63,92244,92246],{"className":51051,"code":92245,"language":51053,"meta":68,"style":68},"\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",[34,92247,92248,92258,92272,92276,92284,92298,92318,92338,92360,92373,92381,92387,92397,92407,92417,92421,92425,92432,92445,92457,92461,92465,92475,92487,92501,92505,92509,92516,92526,92539,92551,92561,92571,92587,92599,92603,92607,92615,92625,92637,92647,92657,92667,92671,92675,92685,92696,92700,92708,92716,92720,92728,92743,92758,92773,92794,92802,92810,92825,92847,92855,92870,92896,92922,92948,92956,92964,92983,92991,92996,93015,93020,93038,93043,93048,93056,93061,93075,93083,93088,93105,93109,93114,93136,93140,93148,93156,93160],{"__ignoreMap":68},[72,92249,92250,92252,92254,92256],{"class":74,"line":75},[72,92251,51715],{"class":82},[72,92253,51719],{"class":51718},[72,92255,51722],{"class":358},[72,92257,51725],{"class":82},[72,92259,92260,92262,92264,92266,92268,92270],{"class":74,"line":370},[72,92261,1464],{"class":82},[72,92263,51053],{"class":51718},[72,92265,51734],{"class":358},[72,92267,609],{"class":82},[72,92269,51739],{"class":366},[72,92271,51725],{"class":82},[72,92273,92274],{"class":74,"line":1608},[72,92275,2828],{"emptyLinePlaceholder":490},[72,92277,92278,92280,92282],{"class":74,"line":1623},[72,92279,1464],{"class":82},[72,92281,51752],{"class":51718},[72,92283,51725],{"class":82},[72,92285,92286,92288,92290,92292,92294,92296],{"class":74,"line":1629},[72,92287,52562],{"class":82},[72,92289,51762],{"class":51718},[72,92291,51765],{"class":358},[72,92293,609],{"class":82},[72,92295,51770],{"class":366},[72,92297,59545],{"class":82},[72,92299,92300,92302,92304,92306,92308,92310,92312,92314,92316],{"class":74,"line":1643},[72,92301,52562],{"class":82},[72,92303,51762],{"class":51718},[72,92305,51781],{"class":358},[72,92307,609],{"class":82},[72,92309,51786],{"class":366},[72,92311,51789],{"class":358},[72,92313,609],{"class":82},[72,92315,51794],{"class":366},[72,92317,59545],{"class":82},[72,92319,92320,92322,92324,92326,92328,92330,92332,92334,92336],{"class":74,"line":1649},[72,92321,52562],{"class":82},[72,92323,51762],{"class":51718},[72,92325,15346],{"class":358},[72,92327,609],{"class":82},[72,92329,51809],{"class":366},[72,92331,51789],{"class":358},[72,92333,609],{"class":82},[72,92335,51816],{"class":366},[72,92337,59545],{"class":82},[72,92339,92340,92342,92344,92346,92348,92351,92353,92355,92358],{"class":74,"line":1740},[72,92341,52562],{"class":82},[72,92343,51762],{"class":51718},[72,92345,15346],{"class":358},[72,92347,609],{"class":82},[72,92349,92350],{"class":366},"\"referrer\"",[72,92352,51789],{"class":358},[72,92354,609],{"class":82},[72,92356,92357],{"class":366},"\"never\"",[72,92359,59545],{"class":82},[72,92361,92362,92364,92366,92369,92371],{"class":74,"line":1746},[72,92363,52562],{"class":82},[72,92365,51825],{"class":51718},[72,92367,92368],{"class":82},">综合案例\u003C\u002F",[72,92370,51825],{"class":51718},[72,92372,51725],{"class":82},[72,92374,92375,92377,92379],{"class":74,"line":1758},[72,92376,52562],{"class":82},[72,92378,473],{"class":51718},[72,92380,51725],{"class":82},[72,92382,92383,92385],{"class":74,"line":2041},[72,92384,6829],{"class":51718},[72,92386,15998],{"class":82},[72,92388,92389,92391,92393,92395],{"class":74,"line":2046},[72,92390,55113],{"class":362},[72,92392,51855],{"class":82},[72,92394,747],{"class":362},[72,92396,1719],{"class":82},[72,92398,92399,92401,92403,92405],{"class":74,"line":2052},[72,92400,55124],{"class":362},[72,92402,51855],{"class":82},[72,92404,747],{"class":362},[72,92406,1719],{"class":82},[72,92408,92409,92411,92413,92415],{"class":74,"line":2057},[72,92410,73014],{"class":362},[72,92412,51855],{"class":82},[72,92414,60923],{"class":362},[72,92416,1719],{"class":82},[72,92418,92419],{"class":74,"line":2071},[72,92420,2615],{"class":82},[72,92422,92423],{"class":74,"line":2076},[72,92424,2828],{"emptyLinePlaceholder":490},[72,92426,92427,92430],{"class":74,"line":2082},[72,92428,92429],{"class":358},"    .container",[72,92431,15998],{"class":82},[72,92433,92434,92436,92438,92441,92443],{"class":74,"line":2103},[72,92435,55189],{"class":362},[72,92437,51855],{"class":82},[72,92439,92440],{"class":362},"1200",[72,92442,51910],{"class":78},[72,92444,1719],{"class":82},[72,92446,92447,92449,92451,92453,92455],{"class":74,"line":2108},[72,92448,55124],{"class":362},[72,92450,51855],{"class":82},[72,92452,747],{"class":362},[72,92454,51974],{"class":362},[72,92456,1719],{"class":82},[72,92458,92459],{"class":74,"line":2122},[72,92460,2615],{"class":82},[72,92462,92463],{"class":74,"line":2127},[72,92464,2828],{"emptyLinePlaceholder":490},[72,92466,92467,92470,92473],{"class":74,"line":2156},[72,92468,92469],{"class":358},"    .video",[72,92471,92472],{"class":51718}," video",[72,92474,15998],{"class":82},[72,92476,92477,92479,92481,92483,92485],{"class":74,"line":2161},[72,92478,55189],{"class":362},[72,92480,51855],{"class":82},[72,92482,865],{"class":362},[72,92484,882],{"class":78},[72,92486,1719],{"class":82},[72,92488,92489,92491,92493,92495,92497,92499],{"class":74,"line":2178},[72,92490,55113],{"class":362},[72,92492,51855],{"class":82},[72,92494,1254],{"class":362},[72,92496,51910],{"class":78},[72,92498,4521],{"class":362},[72,92500,1719],{"class":82},[72,92502,92503],{"class":74,"line":2183},[72,92504,2615],{"class":82},[72,92506,92507],{"class":74,"line":2188},[72,92508,2828],{"emptyLinePlaceholder":490},[72,92510,92511,92514],{"class":74,"line":2193},[72,92512,92513],{"class":358},"    .elevator",[72,92515,15998],{"class":82},[72,92517,92518,92520,92522,92524],{"class":74,"line":2207},[72,92519,55177],{"class":362},[72,92521,51855],{"class":82},[72,92523,86650],{"class":362},[72,92525,1719],{"class":82},[72,92527,92528,92530,92532,92535,92537],{"class":74,"line":2212},[72,92529,55365],{"class":362},[72,92531,51855],{"class":82},[72,92533,92534],{"class":362},"280",[72,92536,51910],{"class":78},[72,92538,1719],{"class":82},[72,92540,92541,92543,92545,92547,92549],{"class":74,"line":3005},[72,92542,86844],{"class":362},[72,92544,51855],{"class":82},[72,92546,1254],{"class":362},[72,92548,51910],{"class":78},[72,92550,1719],{"class":82},[72,92552,92553,92555,92557,92559],{"class":74,"line":3019},[72,92554,86657],{"class":362},[72,92556,51855],{"class":82},[72,92558,86662],{"class":362},[72,92560,1719],{"class":82},[72,92562,92563,92565,92567,92569],{"class":74,"line":3027},[72,92564,62139],{"class":362},[72,92566,51855],{"class":82},[72,92568,61260],{"class":362},[72,92570,1719],{"class":82},[72,92572,92573,92575,92577,92579,92581,92583,92585],{"class":74,"line":3032},[72,92574,62395],{"class":362},[72,92576,51855],{"class":82},[72,92578,772],{"class":362},[72,92580,51910],{"class":78},[72,92582,51939],{"class":362},[72,92584,62662],{"class":362},[72,92586,1719],{"class":82},[72,92588,92589,92591,92593,92595,92597],{"class":74,"line":3038},[72,92590,55189],{"class":362},[72,92592,51855],{"class":82},[72,92594,1461],{"class":362},[72,92596,51910],{"class":78},[72,92598,1719],{"class":82},[72,92600,92601],{"class":74,"line":3044},[72,92602,2615],{"class":82},[72,92604,92605],{"class":74,"line":3049},[72,92606,2828],{"emptyLinePlaceholder":490},[72,92608,92609,92611,92613],{"class":74,"line":8374},[72,92610,92513],{"class":358},[72,92612,1827],{"class":51718},[72,92614,15998],{"class":82},[72,92616,92617,92619,92621,92623],{"class":74,"line":8398},[72,92618,55427],{"class":362},[72,92620,51855],{"class":82},[72,92622,61287],{"class":362},[72,92624,1719],{"class":82},[72,92626,92627,92629,92631,92633,92635],{"class":74,"line":8403},[72,92628,55113],{"class":362},[72,92630,51855],{"class":82},[72,92632,1000],{"class":362},[72,92634,51910],{"class":78},[72,92636,1719],{"class":82},[72,92638,92639,92641,92643,92645],{"class":74,"line":8409},[72,92640,64388],{"class":362},[72,92642,51855],{"class":82},[72,92644,55155],{"class":362},[72,92646,1719],{"class":82},[72,92648,92649,92651,92653,92655],{"class":74,"line":8436},[72,92650,57704],{"class":362},[72,92652,51855],{"class":82},[72,92654,52010],{"class":362},[72,92656,1719],{"class":82},[72,92658,92659,92661,92663,92665],{"class":74,"line":8441},[72,92660,57834],{"class":362},[72,92662,51855],{"class":82},[72,92664,62488],{"class":362},[72,92666,1719],{"class":82},[72,92668,92669],{"class":74,"line":8447},[72,92670,2615],{"class":82},[72,92672,92673],{"class":74,"line":8459},[72,92674,2828],{"emptyLinePlaceholder":490},[72,92676,92677,92679,92681,92683],{"class":74,"line":8471},[72,92678,92513],{"class":358},[72,92680,1827],{"class":51718},[72,92682,64442],{"class":358},[72,92684,15998],{"class":82},[72,92686,92687,92689,92691,92694],{"class":74,"line":8483},[72,92688,57834],{"class":362},[72,92690,51855],{"class":82},[72,92692,92693],{"class":362},"#1286ff",[72,92695,1719],{"class":82},[72,92697,92698],{"class":74,"line":10142},[72,92699,2615],{"class":82},[72,92701,92702,92704,92706],{"class":74,"line":10167},[72,92703,52835],{"class":82},[72,92705,473],{"class":51718},[72,92707,51725],{"class":82},[72,92709,92710,92712,92714],{"class":74,"line":10190},[72,92711,52203],{"class":82},[72,92713,51752],{"class":51718},[72,92715,51725],{"class":82},[72,92717,92718],{"class":74,"line":10214},[72,92719,2828],{"emptyLinePlaceholder":490},[72,92721,92722,92724,92726],{"class":74,"line":10219},[72,92723,1464],{"class":82},[72,92725,52218],{"class":51718},[72,92727,51725],{"class":82},[72,92729,92730,92732,92734,92736,92738,92741],{"class":74,"line":10224},[72,92731,52562],{"class":82},[72,92733,52029],{"class":51718},[72,92735,53904],{"class":358},[72,92737,609],{"class":82},[72,92739,92740],{"class":366},"\"container\"",[72,92742,51725],{"class":82},[72,92744,92745,92747,92749,92751,92753,92756],{"class":74,"line":10229},[72,92746,51759],{"class":82},[72,92748,52029],{"class":51718},[72,92750,53904],{"class":358},[72,92752,609],{"class":82},[72,92754,92755],{"class":366},"\"header\"",[72,92757,51725],{"class":82},[72,92759,92760,92762,92764,92766,92768,92771],{"class":74,"line":10238},[72,92761,55652],{"class":82},[72,92763,257],{"class":51718},[72,92765,61475],{"class":358},[72,92767,609],{"class":82},[72,92769,92770],{"class":366},"\"http:\u002F\u002Fpip.itcast.cn\"",[72,92772,51725],{"class":82},[72,92774,92775,92777,92779,92781,92783,92786,92788,92790,92792],{"class":74,"line":10243},[72,92776,55720],{"class":82},[72,92778,1891],{"class":51718},[72,92780,55657],{"class":358},[72,92782,609],{"class":82},[72,92784,92785],{"class":366},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[72,92787,55665],{"class":358},[72,92789,609],{"class":82},[72,92791,8078],{"class":366},[72,92793,59545],{"class":82},[72,92795,92796,92798,92800],{"class":74,"line":10249},[72,92797,55825],{"class":82},[72,92799,257],{"class":51718},[72,92801,51725],{"class":82},[72,92803,92804,92806,92808],{"class":74,"line":10270},[72,92805,52194],{"class":82},[72,92807,52029],{"class":51718},[72,92809,51725],{"class":82},[72,92811,92812,92814,92816,92818,92820,92823],{"class":74,"line":10276},[72,92813,51759],{"class":82},[72,92815,52029],{"class":51718},[72,92817,53904],{"class":358},[72,92819,609],{"class":82},[72,92821,92822],{"class":366},"\"video\"",[72,92824,51725],{"class":82},[72,92826,92827,92829,92831,92833,92835,92838,92841,92843,92845],{"class":74,"line":10290},[72,92828,55652],{"class":82},[72,92830,28605],{"class":51718},[72,92832,55657],{"class":358},[72,92834,609],{"class":82},[72,92836,92837],{"class":366},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[72,92839,92840],{"class":358}," controls",[72,92842,55732],{"class":82},[72,92844,28605],{"class":51718},[72,92846,51725],{"class":82},[72,92848,92849,92851,92853],{"class":74,"line":10296},[72,92850,52194],{"class":82},[72,92852,52029],{"class":51718},[72,92854,51725],{"class":82},[72,92856,92857,92859,92861,92863,92865,92868],{"class":74,"line":10323},[72,92858,51759],{"class":82},[72,92860,52029],{"class":51718},[72,92862,53904],{"class":358},[72,92864,609],{"class":82},[72,92866,92867],{"class":366},"\"elevator\"",[72,92869,51725],{"class":82},[72,92871,92872,92874,92876,92878,92880,92882,92885,92887,92889,92892,92894],{"class":74,"line":10332},[72,92873,55652],{"class":82},[72,92875,257],{"class":51718},[72,92877,61475],{"class":358},[72,92879,609],{"class":82},[72,92881,64654],{"class":366},[72,92883,92884],{"class":358}," data-ref",[72,92886,609],{"class":82},[72,92888,92822],{"class":366},[72,92890,92891],{"class":82},">视频介绍\u003C\u002F",[72,92893,257],{"class":51718},[72,92895,51725],{"class":82},[72,92897,92898,92900,92902,92904,92906,92908,92910,92912,92915,92918,92920],{"class":74,"line":10338},[72,92899,55652],{"class":82},[72,92901,257],{"class":51718},[72,92903,61475],{"class":358},[72,92905,609],{"class":82},[72,92907,64654],{"class":366},[72,92909,92884],{"class":358},[72,92911,609],{"class":82},[72,92913,92914],{"class":366},"\"intro\"",[72,92916,92917],{"class":82},">课程简介\u003C\u002F",[72,92919,257],{"class":51718},[72,92921,51725],{"class":82},[72,92923,92924,92926,92928,92930,92932,92934,92936,92938,92941,92944,92946],{"class":74,"line":10346},[72,92925,55652],{"class":82},[72,92927,257],{"class":51718},[72,92929,61475],{"class":358},[72,92931,609],{"class":82},[72,92933,64654],{"class":366},[72,92935,92884],{"class":358},[72,92937,609],{"class":82},[72,92939,92940],{"class":366},"\"outline\"",[72,92942,92943],{"class":82},">评论列表\u003C\u002F",[72,92945,257],{"class":51718},[72,92947,51725],{"class":82},[72,92949,92950,92952,92954],{"class":74,"line":10351},[72,92951,52194],{"class":82},[72,92953,52029],{"class":51718},[72,92955,51725],{"class":82},[72,92957,92958,92960,92962],{"class":74,"line":17030},[72,92959,52835],{"class":82},[72,92961,52029],{"class":51718},[72,92963,51725],{"class":82},[72,92965,92966,92968,92970,92972,92974,92977,92979,92981],{"class":74,"line":17036},[72,92967,52562],{"class":82},[72,92969,52231],{"class":51718},[72,92971,55657],{"class":358},[72,92973,609],{"class":82},[72,92975,92976],{"class":366},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[72,92978,55732],{"class":82},[72,92980,52231],{"class":51718},[72,92982,51725],{"class":82},[72,92984,92985,92987,92989],{"class":74,"line":17059},[72,92986,52562],{"class":82},[72,92988,52231],{"class":51718},[72,92990,51725],{"class":82},[72,92992,92993],{"class":74,"line":17065},[72,92994,92995],{"class":621},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[72,92997,92998,93000,93002,93004,93006,93008,93010,93013],{"class":74,"line":17088},[72,92999,11647],{"class":78},[72,93001,92472],{"class":362},[72,93003,13990],{"class":78},[72,93005,54814],{"class":82},[72,93007,54817],{"class":358},[72,93009,564],{"class":82},[72,93011,93012],{"class":366},"'video'",[72,93014,570],{"class":82},[72,93016,93017],{"class":74,"line":17102},[72,93018,93019],{"class":621},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[72,93021,93022,93025,93027,93029,93031,93034,93036],{"class":74,"line":17122},[72,93023,93024],{"class":82},"    video.ontimeupdate ",[72,93026,609],{"class":78},[72,93028,88772],{"class":82},[72,93030,91590],{"class":358},[72,93032,93033],{"class":82},"(() ",[72,93035,85139],{"class":78},[72,93037,15998],{"class":82},[72,93039,93040],{"class":74,"line":17128},[72,93041,93042],{"class":621},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[72,93044,93045],{"class":74,"line":17139},[72,93046,93047],{"class":621},"      \u002F\u002F 控制台输出当前的时间\n",[72,93049,93050,93053],{"class":74,"line":17162},[72,93051,93052],{"class":621},"      \u002F\u002F console.log(video.currentTime)",[72,93054,93055],{"class":621},"  \u002F\u002F获得当前的视频时间\n",[72,93057,93058],{"class":74,"line":17184},[72,93059,93060],{"class":621},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[72,93062,93063,93065,93067,93069,93072],{"class":74,"line":17189},[72,93064,75101],{"class":82},[72,93066,72072],{"class":358},[72,93068,564],{"class":82},[72,93070,93071],{"class":366},"'currentTime'",[72,93073,93074],{"class":82},", video.currentTime)\n",[72,93076,93077,93079,93081],{"class":74,"line":17195},[72,93078,54953],{"class":82},[72,93080,6836],{"class":362},[72,93082,570],{"class":82},[72,93084,93085],{"class":74,"line":17209},[72,93086,93087],{"class":621},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[72,93089,93090,93093,93096,93098,93101,93103],{"class":74,"line":17222},[72,93091,93092],{"class":82},"    video.",[72,93094,93095],{"class":358},"onloadeddata",[72,93097,13990],{"class":78},[72,93099,93100],{"class":82}," () ",[72,93102,85139],{"class":78},[72,93104,15998],{"class":82},[72,93106,93107],{"class":74,"line":17227},[72,93108,60430],{"class":621},[72,93110,93111],{"class":74,"line":17241},[72,93112,93113],{"class":621},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[72,93115,93116,93119,93121,93124,93126,93128,93130,93132,93134],{"class":74,"line":17246},[72,93117,93118],{"class":82},"      video.currentTime ",[72,93120,609],{"class":78},[72,93122,93123],{"class":82}," localStorage.",[72,93125,72103],{"class":358},[72,93127,564],{"class":82},[72,93129,93071],{"class":366},[72,93131,14140],{"class":82},[72,93133,71775],{"class":78},[72,93135,47751],{"class":362},[72,93137,93138],{"class":74,"line":17252},[72,93139,2615],{"class":82},[72,93141,93142,93144,93146],{"class":74,"line":17257},[72,93143,52835],{"class":82},[72,93145,52231],{"class":51718},[72,93147,51725],{"class":82},[72,93149,93150,93152,93154],{"class":74,"line":17271},[72,93151,52203],{"class":82},[72,93153,52218],{"class":51718},[72,93155,51725],{"class":82},[72,93157,93158],{"class":74,"line":17276},[72,93159,2828],{"emptyLinePlaceholder":490},[72,93161,93162,93164,93166],{"class":74,"line":17281},[72,93163,52203],{"class":82},[72,93165,51053],{"class":51718},[72,93167,51725],{"class":82},[473,93169,93170],{},"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":68,"searchDepth":370,"depth":370,"links":93172},[93173,93178,93182,93183,93184,93189,93194,93195,93196,93197,93204,93209,93210,93220,93224,93225,93229],{"id":77109,"depth":370,"text":77110,"children":93174},[93175,93176,93177],{"id":77113,"depth":1608,"text":77114},{"id":77138,"depth":1608,"text":77139},{"id":77150,"depth":1608,"text":77151},{"id":77162,"depth":370,"text":77163,"children":93179},[93180,93181],{"id":77166,"depth":1608,"text":77167},{"id":77181,"depth":1608,"text":77182},{"id":77233,"depth":370,"text":77234},{"id":77277,"depth":370,"text":77278},{"id":77294,"depth":370,"text":77295,"children":93185},[93186,93187,93188],{"id":77298,"depth":1608,"text":77299},{"id":77311,"depth":1608,"text":77312},{"id":77416,"depth":1608,"text":77417},{"id":77705,"depth":370,"text":77706,"children":93190},[93191,93192,93193],{"id":77709,"depth":1608,"text":77710},{"id":78152,"depth":1608,"text":78153},{"id":78563,"depth":1608,"text":78564},{"id":78626,"depth":370,"text":78627},{"id":78705,"depth":370,"text":78706},{"id":78798,"depth":370,"text":78799},{"id":80643,"depth":370,"text":80644,"children":93198},[93199,93200,93201,93202,93203],{"id":80647,"depth":1608,"text":80648},{"id":80659,"depth":1608,"text":80660},{"id":80878,"depth":1608,"text":80879},{"id":80896,"depth":1608,"text":80897},{"id":80956,"depth":1608,"text":80957},{"id":85223,"depth":370,"text":85224,"children":93205},[93206,93207,93208],{"id":85227,"depth":1608,"text":85228},{"id":85245,"depth":1608,"text":85246},{"id":85271,"depth":1608,"text":85272},{"id":85280,"depth":370,"text":85281},{"id":85302,"depth":370,"text":85303,"children":93211},[93212,93213,93214,93215,93216,93217,93218,93219],{"id":85306,"depth":1608,"text":85307},{"id":85567,"depth":1608,"text":85568},{"id":85753,"depth":1608,"text":85754},{"id":86120,"depth":1608,"text":86121},{"id":86236,"depth":1608,"text":86237},{"id":86272,"depth":1608,"text":86273},{"id":86319,"depth":1608,"text":86320},{"id":86353,"depth":1608,"text":86354},{"id":87716,"depth":370,"text":87717,"children":93221},[93222,93223],{"id":87720,"depth":1608,"text":87721},{"id":87757,"depth":1608,"text":87758},{"id":89112,"depth":370,"text":89113},{"id":89483,"depth":370,"text":89484,"children":93226},[93227,93228],{"id":89487,"depth":1608,"text":89488},{"id":89521,"depth":1608,"text":89522},{"id":90250,"depth":370,"text":90251,"children":93230},[93231,93232,93233,93234],{"id":90254,"depth":1608,"text":90255},{"id":91212,"depth":1608,"text":91213},{"id":92154,"depth":1608,"text":92155},{"id":92228,"depth":1608,"text":92229},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":77098,"description":23802},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":93241,"title":93242,"body":93243,"description":93254,"extension":487,"meta":93255,"navigation":490,"path":93257,"seo":93258,"stem":93259,"__hash__":93260},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":93244,"toc":93252},[93245],[15,93246,93247,93248],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[257,93249,93250],{"href":93250,"rel":93251},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[261],{"title":68,"searchDepth":370,"depth":370,"links":93253},[],"三件套第三套学习",{"category":93256},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":93242,"description":93254},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":93262,"title":93263,"body":93264,"description":23802,"extension":487,"meta":93369,"navigation":490,"path":93370,"seo":93371,"stem":93372,"__hash__":93373},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":93265,"toc":93364},[93266,93273,93276,93279,93282,93286,93295,93298,93301,93305,93314,93317,93321,93324,93344,93347,93361],[15,93267,93268],{},[257,93269,93272],{"href":93270,"rel":93271},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[261],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,93274,93263],{"id":93275},"_1安装",[15,93277,93278],{},"numpy是科学计算基础库,底层是C语言",[15,93280,93281],{},"三种方式：",[85,93283,93285],{"id":93284},"_11-通过pip安装","1.1 通过pip安装",[63,93287,93289],{"className":65,"code":93288,"language":67,"meta":68,"style":68},"pip install numpy\n",[34,93290,93291],{"__ignoreMap":68},[72,93292,93293],{"class":74,"line":75},[72,93294,93288],{"class":82},[15,93296,93297],{},"首选方式，自动处理依赖项",[15,93299,93300],{},"在提示系统命令符中使用cmd",[85,93302,93304],{"id":93303},"_12-通过anaconda安装","1.2 通过Anaconda安装",[63,93306,93308],{"className":65,"code":93307,"language":67,"meta":68,"style":68},"conda install numpy\n",[34,93309,93310],{"__ignoreMap":68},[72,93311,93312],{"class":74,"line":75},[72,93313,93307],{"class":82},[15,93315,93316],{},"自动解决环境依赖",[85,93318,93320],{"id":93319},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[15,93322,93323],{},"对于Debian\u002FUbuntu",[63,93325,93327],{"className":65,"code":93326,"language":67,"meta":68,"style":68},"sudo apt-get install python3-numpy\n",[34,93328,93329],{"__ignoreMap":68},[72,93330,93331,93334,93336,93339,93341],{"class":74,"line":75},[72,93332,93333],{"class":82},"sudo apt",[72,93335,1086],{"class":78},[72,93337,93338],{"class":82},"get install python3",[72,93340,1086],{"class":78},[72,93342,93343],{"class":82},"numpy\n",[15,93345,93346],{},"对于Fedora:",[63,93348,93350],{"className":65,"code":93349,"language":67,"meta":68,"style":68},"sudo dnf install python3-numpy\n",[34,93351,93352],{"__ignoreMap":68},[72,93353,93354,93357,93359],{"class":74,"line":75},[72,93355,93356],{"class":82},"sudo dnf install python3",[72,93358,1086],{"class":78},[72,93360,93343],{"class":82},[473,93362,93363],{},"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":68,"searchDepth":370,"depth":370,"links":93365},[93366,93367,93368],{"id":93284,"depth":370,"text":93285},{"id":93303,"depth":370,"text":93304},{"id":93319,"depth":370,"text":93320},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":93263,"description":23802},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":93375,"title":93376,"body":93377,"description":23802,"extension":487,"meta":93490,"navigation":490,"path":93491,"seo":93492,"stem":93493,"__hash__":93494},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":93378,"toc":93488},[93379,93382,93385,93388,93391,93394,93397,93400,93403,93406,93482,93485],[10,93380,93376],{"id":93381},"_10算数函数",[15,93383,93384],{},"加减乘除运算跟python基础语法没区别",[15,93386,93387],{},"除了python那种方法外还可以使用函数",[15,93389,93390],{},"加：np.add(a,b)",[15,93392,93393],{},"减：np.subtract(a,b)",[15,93395,93396],{},"乘：np.multiply(a,b)",[15,93398,93399],{},"除：np.divide(a,b) == a\u002Fb",[15,93401,93402],{},"取余：np.mod(a,b) == a%b",[15,93404,93405],{},"必须会的用法：",[63,93407,93409],{"className":65,"code":93408,"language":67,"meta":68,"style":68},"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",[34,93410,93411,93433,93454,93464,93477],{"__ignoreMap":68},[72,93412,93413,93415,93417,93420,93422,93425,93427,93429,93431],{"class":74,"line":75},[72,93414,257],{"class":82},[72,93416,609],{"class":78},[72,93418,93419],{"class":82},"np.arange(",[72,93421,974],{"class":362},[72,93423,93424],{"class":82},").reshape(",[72,93426,634],{"class":362},[72,93428,932],{"class":82},[72,93430,634],{"class":362},[72,93432,570],{"class":82},[72,93434,93435,93437,93439,93442,93444,93446,93448,93450,93452],{"class":74,"line":370},[72,93436,817],{"class":82},[72,93438,609],{"class":78},[72,93440,93441],{"class":82},"np.array([",[72,93443,1000],{"class":362},[72,93445,932],{"class":82},[72,93447,1000],{"class":362},[72,93449,932],{"class":82},[72,93451,1000],{"class":362},[72,93453,5085],{"class":82},[72,93455,93456,93459,93461],{"class":74,"line":1608},[72,93457,93458],{"class":82},"result",[72,93460,609],{"class":78},[72,93462,93463],{"class":82},"np.empty_like(a)\n",[72,93465,93466,93469,93472,93474],{"class":74,"line":1623},[72,93467,93468],{"class":82},"np.add(a,b,",[72,93470,93471],{"class":5642},"out",[72,93473,609],{"class":78},[72,93475,93476],{"class":82},"result)\n",[72,93478,93479],{"class":74,"line":1629},[72,93480,93481],{"class":82},"result\n",[15,93483,93484],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[473,93486,93487],{},"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":68,"searchDepth":370,"depth":370,"links":93489},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":93376,"description":23802},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93496,"title":93497,"body":93498,"description":23802,"extension":487,"meta":94260,"navigation":490,"path":94261,"seo":94262,"stem":94263,"__hash__":94264},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93499,"toc":94247},[93500,93503,93506,93509,93513,93552,93556,93600,93660,93664,93667,93706,93709,93754,93758,93794,93798,93867,93871,93935,93939,93942,93945,93948,93951,93987,93991,94031,94035,94107,94110,94114,94177,94181,94244],[10,93501,93497],{"id":93502},"_11统计函数",[15,93504,93505],{},"sum max min mean",[15,93507,93508],{},"这些有axis参数，可以指定方向",[85,93510,93512],{"id":93511},"_111-sum求和函数","11.1 sum()求和函数",[63,93514,93516],{"className":65,"code":93515,"language":67,"meta":68,"style":68},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[34,93517,93518,93523,93544],{"__ignoreMap":68},[72,93519,93520],{"class":74,"line":75},[72,93521,93522],{"class":621},"#创建一维数组\n",[72,93524,93525,93527,93529,93532,93534,93536,93538,93540,93542],{"class":74,"line":370},[72,93526,257],{"class":82},[72,93528,609],{"class":78},[72,93530,93531],{"class":82},"np.random.randint(",[72,93533,772],{"class":362},[72,93535,932],{"class":82},[72,93537,865],{"class":362},[72,93539,932],{"class":82},[72,93541,1254],{"class":362},[72,93543,570],{"class":82},[72,93545,93546,93549],{"class":74,"line":1608},[72,93547,93548],{"class":82},"np.sum(a)",[72,93550,93551],{"class":621},"#求和\n",[85,93553,93555],{"id":93554},"_112-max求最大值函数","11.2 max()求最大值函数",[63,93557,93559],{"className":65,"code":93558,"language":67,"meta":68,"style":68},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[34,93560,93561,93565,93585,93590,93595],{"__ignoreMap":68},[72,93562,93563],{"class":74,"line":75},[72,93564,93522],{"class":621},[72,93566,93567,93569,93571,93573,93575,93577,93579,93581,93583],{"class":74,"line":370},[72,93568,257],{"class":82},[72,93570,609],{"class":78},[72,93572,93531],{"class":82},[72,93574,772],{"class":362},[72,93576,932],{"class":82},[72,93578,865],{"class":362},[72,93580,932],{"class":82},[72,93582,1254],{"class":362},[72,93584,570],{"class":82},[72,93586,93587],{"class":74,"line":1608},[72,93588,93589],{"class":82},"np.max(a)\n",[72,93591,93592],{"class":74,"line":1623},[72,93593,93594],{"class":621},"#最大索引(求最大元素的索引)arg\n",[72,93596,93597],{"class":74,"line":1629},[72,93598,93599],{"class":82},"np.argmax(a)\n",[63,93601,93603],{"className":65,"code":93602,"language":67,"meta":68,"style":68},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[34,93604,93605,93626,93646,93650],{"__ignoreMap":68},[72,93606,93607,93609,93611,93614,93616,93618,93620,93622,93624],{"class":74,"line":75},[72,93608,11345],{"class":82},[72,93610,609],{"class":78},[72,93612,93613],{"class":82}," np.array([",[72,93615,772],{"class":362},[72,93617,12861],{"class":82},[72,93619,873],{"class":362},[72,93621,12861],{"class":82},[72,93623,634],{"class":362},[72,93625,5085],{"class":82},[72,93627,93628,93630,93632,93634,93636,93638,93640,93642,93644],{"class":74,"line":370},[72,93629,11371],{"class":82},[72,93631,609],{"class":78},[72,93633,93613],{"class":82},[72,93635,634],{"class":362},[72,93637,12861],{"class":82},[72,93639,640],{"class":362},[72,93641,12861],{"class":82},[72,93643,847],{"class":362},[72,93645,5085],{"class":82},[72,93647,93648],{"class":74,"line":1608},[72,93649,2828],{"emptyLinePlaceholder":490},[72,93651,93652,93654,93657],{"class":74,"line":1623},[72,93653,30833],{"class":362},[72,93655,93656],{"class":82},"(np.maximum(a, b))   ",[72,93658,93659],{"class":621},"# [3 5 4]，每个位置上取较大值\n",[85,93661,93663],{"id":93662},"_113-mean求平均值函数","11.3 mean()求平均值函数",[15,93665,93666],{},"①一维数组：",[63,93668,93670],{"className":65,"code":93669,"language":67,"meta":68,"style":68},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[34,93671,93672,93676,93696,93701],{"__ignoreMap":68},[72,93673,93674],{"class":74,"line":75},[72,93675,93522],{"class":621},[72,93677,93678,93680,93682,93684,93686,93688,93690,93692,93694],{"class":74,"line":370},[72,93679,257],{"class":82},[72,93681,609],{"class":78},[72,93683,93531],{"class":82},[72,93685,772],{"class":362},[72,93687,932],{"class":82},[72,93689,865],{"class":362},[72,93691,932],{"class":82},[72,93693,1254],{"class":362},[72,93695,570],{"class":82},[72,93697,93698],{"class":74,"line":1608},[72,93699,93700],{"class":621},"#求平均值\n",[72,93702,93703],{"class":74,"line":1623},[72,93704,93705],{"class":82},"np.mean(a)\n",[15,93707,93708],{},"②二维数组",[63,93710,93712],{"className":65,"code":93711,"language":67,"meta":68,"style":68},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[34,93713,93714,93719,93744,93749],{"__ignoreMap":68},[72,93715,93716],{"class":74,"line":75},[72,93717,93718],{"class":621},"#二维数组\n",[72,93720,93721,93724,93726,93728,93730,93732,93734,93736,93738,93740,93742],{"class":74,"line":370},[72,93722,93723],{"class":82},"aa",[72,93725,609],{"class":78},[72,93727,93419],{"class":82},[72,93729,772],{"class":362},[72,93731,932],{"class":82},[72,93733,1077],{"class":362},[72,93735,93424],{"class":82},[72,93737,634],{"class":362},[72,93739,932],{"class":82},[72,93741,847],{"class":362},[72,93743,570],{"class":82},[72,93745,93746],{"class":74,"line":1608},[72,93747,93748],{"class":621},"#对数组中的所有数求平均\n",[72,93750,93751],{"class":74,"line":1623},[72,93752,93753],{"class":82},"np.mean(aa)\n",[85,93755,93757],{"id":93756},"_114-median求中位数函数","11.4 median()求中位数函数",[63,93759,93761],{"className":65,"code":93760,"language":67,"meta":68,"style":68},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[34,93762,93763,93768,93784,93789],{"__ignoreMap":68},[72,93764,93765],{"class":74,"line":75},[72,93766,93767],{"class":621},"#求中位数\n",[72,93769,93770,93772,93774,93776,93778,93780,93782],{"class":74,"line":370},[72,93771,817],{"class":82},[72,93773,609],{"class":78},[72,93775,93419],{"class":82},[72,93777,772],{"class":362},[72,93779,932],{"class":82},[72,93781,1000],{"class":362},[72,93783,570],{"class":82},[72,93785,93786],{"class":74,"line":1608},[72,93787,93788],{"class":82},"np.median(b)\n",[72,93790,93791],{"class":74,"line":1623},[72,93792,93793],{"class":621},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[85,93795,93797],{"id":93796},"_115-power求幂运算函数","11.5 power()求幂运算函数",[63,93799,93801],{"className":65,"code":93800,"language":67,"meta":68,"style":68},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[34,93802,93803,93819,93824,93829,93838,93843,93852],{"__ignoreMap":68},[72,93804,93805,93807,93809,93811,93813,93815,93817],{"class":74,"line":75},[72,93806,817],{"class":82},[72,93808,609],{"class":78},[72,93810,93419],{"class":82},[72,93812,772],{"class":362},[72,93814,932],{"class":82},[72,93816,1000],{"class":362},[72,93818,570],{"class":82},[72,93820,93821],{"class":74,"line":370},[72,93822,93823],{"class":621},"#幂运算\n",[72,93825,93826],{"class":74,"line":1608},[72,93827,93828],{"class":621},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[72,93830,93831,93834,93836],{"class":74,"line":1623},[72,93832,93833],{"class":82},"np.power(b,",[72,93835,640],{"class":362},[72,93837,570],{"class":82},[72,93839,93840],{"class":74,"line":1629},[72,93841,93842],{"class":621},"#或者以下代码，将数据存储起来\n",[72,93844,93845,93847,93849],{"class":74,"line":1643},[72,93846,1399],{"class":82},[72,93848,609],{"class":78},[72,93850,93851],{"class":82},"np.empty_like(b)\n",[72,93853,93854,93856,93858,93860,93862,93864],{"class":74,"line":1649},[72,93855,93833],{"class":82},[72,93857,640],{"class":362},[72,93859,932],{"class":82},[72,93861,93471],{"class":5642},[72,93863,609],{"class":78},[72,93865,93866],{"class":82},"y)\n",[85,93868,93870],{"id":93869},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[63,93872,93874],{"className":65,"code":93873,"language":67,"meta":68,"style":68},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[34,93875,93876,93892,93897,93902,93906,93924],{"__ignoreMap":68},[72,93877,93878,93880,93882,93884,93886,93888,93890],{"class":74,"line":75},[72,93879,817],{"class":82},[72,93881,609],{"class":78},[72,93883,93419],{"class":82},[72,93885,772],{"class":362},[72,93887,932],{"class":82},[72,93889,1000],{"class":362},[72,93891,570],{"class":82},[72,93893,93894],{"class":74,"line":370},[72,93895,93896],{"class":621},"#开方\n",[72,93898,93899],{"class":74,"line":1608},[72,93900,93901],{"class":82},"np.sqrt(b)\n",[72,93903,93904],{"class":74,"line":1623},[72,93905,93842],{"class":621},[72,93907,93908,93910,93912,93915,93918,93920,93922],{"class":74,"line":1629},[72,93909,1399],{"class":82},[72,93911,609],{"class":78},[72,93913,93914],{"class":82},"np.empty_like(b,",[72,93916,93917],{"class":5642},"dtype",[72,93919,609],{"class":78},[72,93921,603],{"class":362},[72,93923,570],{"class":82},[72,93925,93926,93929,93931,93933],{"class":74,"line":1643},[72,93927,93928],{"class":82},"np.sqrt(b,",[72,93930,93471],{"class":5642},[72,93932,609],{"class":78},[72,93934,93866],{"class":82},[85,93936,93938],{"id":93937},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[15,93940,93941],{},"对数组中的元素累计求和，可指定轴",[15,93943,93944],{},"#累计求和的意思是：",[15,93946,93947],{},"a = np.array([1, 2, 3, 4])",[15,93949,93950],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[63,93952,93954],{"className":65,"code":93953,"language":67,"meta":68,"style":68},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[34,93955,93956,93972,93977,93982],{"__ignoreMap":68},[72,93957,93958,93960,93962,93964,93966,93968,93970],{"class":74,"line":75},[72,93959,817],{"class":82},[72,93961,609],{"class":78},[72,93963,93419],{"class":82},[72,93965,772],{"class":362},[72,93967,932],{"class":82},[72,93969,1000],{"class":362},[72,93971,570],{"class":82},[72,93973,93974],{"class":74,"line":370},[72,93975,93976],{"class":82},"np.cumsum(b)\n",[72,93978,93979],{"class":74,"line":1608},[72,93980,93981],{"class":621},"#结果：\n",[72,93983,93984],{"class":74,"line":1623},[72,93985,93986],{"class":621},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[85,93988,93990],{"id":93989},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[63,93992,93994],{"className":65,"code":93993,"language":67,"meta":68,"style":68},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[34,93995,93996,94012,94017,94022,94026],{"__ignoreMap":68},[72,93997,93998,94000,94002,94004,94006,94008,94010],{"class":74,"line":75},[72,93999,817],{"class":82},[72,94001,609],{"class":78},[72,94003,93419],{"class":82},[72,94005,772],{"class":362},[72,94007,932],{"class":82},[72,94009,1000],{"class":362},[72,94011,570],{"class":82},[72,94013,94014],{"class":74,"line":370},[72,94015,94016],{"class":621},"#对数组中的元素累计求积，可指定轴\n",[72,94018,94019],{"class":74,"line":1608},[72,94020,94021],{"class":82},"np.cumprod(b)\n",[72,94023,94024],{"class":74,"line":1623},[72,94025,93981],{"class":621},[72,94027,94028],{"class":74,"line":1629},[72,94029,94030],{"class":621},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[85,94032,94034],{"id":94033},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[63,94036,94038],{"className":65,"code":94037,"language":67,"meta":68,"style":68},"#删除数组中的重复数据，并对数据进行排序\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",[34,94039,94040,94045,94093,94098,94102],{"__ignoreMap":68},[72,94041,94042],{"class":74,"line":75},[72,94043,94044],{"class":621},"#删除数组中的重复数据，并对数据进行排序\n",[72,94046,94047,94049,94051,94053,94055,94057,94059,94061,94063,94065,94067,94069,94071,94073,94075,94077,94079,94081,94083,94085,94087,94089,94091],{"class":74,"line":370},[72,94048,257],{"class":82},[72,94050,609],{"class":78},[72,94052,93441],{"class":82},[72,94054,772],{"class":362},[72,94056,932],{"class":82},[72,94058,640],{"class":362},[72,94060,932],{"class":82},[72,94062,634],{"class":362},[72,94064,932],{"class":82},[72,94066,1052],{"class":362},[72,94068,932],{"class":82},[72,94070,634],{"class":362},[72,94072,932],{"class":82},[72,94074,1000],{"class":362},[72,94076,932],{"class":82},[72,94078,753],{"class":362},[72,94080,932],{"class":82},[72,94082,747],{"class":362},[72,94084,932],{"class":82},[72,94086,1329],{"class":362},[72,94088,932],{"class":82},[72,94090,847],{"class":362},[72,94092,5085],{"class":82},[72,94094,94095],{"class":74,"line":1608},[72,94096,94097],{"class":82},"np.unique(a)\n",[72,94099,94100],{"class":74,"line":1623},[72,94101,93981],{"class":621},[72,94103,94104],{"class":74,"line":1629},[72,94105,94106],{"class":621},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[15,94108,94109],{},"升序形式排序",[85,94111,94113],{"id":94112},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[63,94115,94117],{"className":65,"code":94116,"language":67,"meta":68,"style":68},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[34,94118,94119,94167,94172],{"__ignoreMap":68},[72,94120,94121,94123,94125,94127,94129,94131,94133,94135,94137,94139,94141,94143,94145,94147,94149,94151,94153,94155,94157,94159,94161,94163,94165],{"class":74,"line":75},[72,94122,257],{"class":82},[72,94124,609],{"class":78},[72,94126,93441],{"class":82},[72,94128,772],{"class":362},[72,94130,932],{"class":82},[72,94132,640],{"class":362},[72,94134,932],{"class":82},[72,94136,634],{"class":362},[72,94138,932],{"class":82},[72,94140,1052],{"class":362},[72,94142,932],{"class":82},[72,94144,634],{"class":362},[72,94146,932],{"class":82},[72,94148,1000],{"class":362},[72,94150,932],{"class":82},[72,94152,753],{"class":362},[72,94154,932],{"class":82},[72,94156,747],{"class":362},[72,94158,932],{"class":82},[72,94160,1329],{"class":362},[72,94162,932],{"class":82},[72,94164,847],{"class":362},[72,94166,5085],{"class":82},[72,94168,94169],{"class":74,"line":370},[72,94170,94171],{"class":621},"#返回数组中非零元素的索引\n",[72,94173,94174],{"class":74,"line":1608},[72,94175,94176],{"class":82},"np.nonzero(a)\n",[85,94178,94180],{"id":94179},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[63,94182,94184],{"className":65,"code":94183,"language":67,"meta":68,"style":68},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[34,94185,94186,94234,94239],{"__ignoreMap":68},[72,94187,94188,94190,94192,94194,94196,94198,94200,94202,94204,94206,94208,94210,94212,94214,94216,94218,94220,94222,94224,94226,94228,94230,94232],{"class":74,"line":75},[72,94189,257],{"class":82},[72,94191,609],{"class":78},[72,94193,93441],{"class":82},[72,94195,772],{"class":362},[72,94197,932],{"class":82},[72,94199,640],{"class":362},[72,94201,932],{"class":82},[72,94203,634],{"class":362},[72,94205,932],{"class":82},[72,94207,1052],{"class":362},[72,94209,932],{"class":82},[72,94211,634],{"class":362},[72,94213,932],{"class":82},[72,94215,1000],{"class":362},[72,94217,932],{"class":82},[72,94219,753],{"class":362},[72,94221,932],{"class":82},[72,94223,747],{"class":362},[72,94225,932],{"class":82},[72,94227,1329],{"class":362},[72,94229,932],{"class":82},[72,94231,847],{"class":362},[72,94233,5085],{"class":82},[72,94235,94236],{"class":74,"line":370},[72,94237,94238],{"class":621},"#计算一组数中最大值与最小值的差，可指定轴\n",[72,94240,94241],{"class":74,"line":1608},[72,94242,94243],{"class":82},"np.ptp(a)\n",[473,94245,94246],{},"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":68,"searchDepth":370,"depth":370,"links":94248},[94249,94250,94251,94252,94253,94254,94255,94256,94257,94258,94259],{"id":93511,"depth":370,"text":93512},{"id":93554,"depth":370,"text":93555},{"id":93662,"depth":370,"text":93663},{"id":93756,"depth":370,"text":93757},{"id":93796,"depth":370,"text":93797},{"id":93869,"depth":370,"text":93870},{"id":93937,"depth":370,"text":93938},{"id":93989,"depth":370,"text":93990},{"id":94033,"depth":370,"text":94034},{"id":94112,"depth":370,"text":94113},{"id":94179,"depth":370,"text":94180},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93497,"description":23802},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":94266,"title":94267,"body":94268,"description":23802,"extension":487,"meta":94923,"navigation":490,"path":94924,"seo":94925,"stem":94926,"__hash__":94927},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":94269,"toc":94911},[94270,94273,94277,94280,94496,94500,94503,94712,94716,94782,94787,94791,94794,94797,94835,94839,94842,94847,94851,94854,94857,94862,94866,94869,94873,94876,94879,94884,94888,94891,94894,94899,94903,94908],[10,94271,94267],{"id":94272},"_12其他常用函数",[85,94274,94276],{"id":94275},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[15,94278,94279],{},"将数组的数据按照行列复制扩展",[63,94281,94283],{"className":65,"code":94282,"language":67,"meta":68,"style":68},"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",[34,94284,94285,94301,94310,94314,94319,94324,94337,94341,94346,94351,94356,94360,94365,94389,94401,94405,94409,94414,94419,94424,94429,94433,94446,94450,94454,94459,94464,94469,94474,94479,94483,94487,94492],{"__ignoreMap":68},[72,94286,94287,94289,94291,94293,94295,94297,94299],{"class":74,"line":75},[72,94288,257],{"class":82},[72,94290,609],{"class":78},[72,94292,93419],{"class":82},[72,94294,772],{"class":362},[72,94296,932],{"class":82},[72,94298,873],{"class":362},[72,94300,570],{"class":82},[72,94302,94303,94306,94308],{"class":74,"line":370},[72,94304,94305],{"class":82},"np.tile(a,",[72,94307,640],{"class":362},[72,94309,570],{"class":82},[72,94311,94312],{"class":74,"line":1608},[72,94313,93981],{"class":621},[72,94315,94316],{"class":74,"line":1623},[72,94317,94318],{"class":621},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[72,94320,94321],{"class":74,"line":1629},[72,94322,94323],{"class":621},"#行复制两次，列复制三次\n",[72,94325,94326,94329,94331,94333,94335],{"class":74,"line":1643},[72,94327,94328],{"class":82},"np.tile(a,(",[72,94330,640],{"class":362},[72,94332,932],{"class":82},[72,94334,634],{"class":362},[72,94336,30915],{"class":82},[72,94338,94339],{"class":74,"line":1649},[72,94340,93981],{"class":621},[72,94342,94343],{"class":74,"line":1740},[72,94344,94345],{"class":366},"'''\n",[72,94347,94348],{"class":74,"line":1746},[72,94349,94350],{"class":366},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[72,94352,94353],{"class":74,"line":1758},[72,94354,94355],{"class":366},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[72,94357,94358],{"class":74,"line":2041},[72,94359,94345],{"class":366},[72,94361,94362],{"class":74,"line":2046},[72,94363,94364],{"class":621},"#创建二维数组\n",[72,94366,94367,94369,94371,94373,94375,94377,94379,94381,94383,94385,94387],{"class":74,"line":2052},[72,94368,93723],{"class":82},[72,94370,609],{"class":78},[72,94372,93419],{"class":82},[72,94374,772],{"class":362},[72,94376,932],{"class":82},[72,94378,1077],{"class":362},[72,94380,93424],{"class":82},[72,94382,847],{"class":362},[72,94384,932],{"class":82},[72,94386,634],{"class":362},[72,94388,570],{"class":82},[72,94390,94391,94394,94396,94398],{"class":74,"line":2057},[72,94392,94393],{"class":82},"np.tile(aa,",[72,94395,640],{"class":362},[72,94397,983],{"class":82},[72,94399,94400],{"class":621},"#一个数的时候就是行\n",[72,94402,94403],{"class":74,"line":2071},[72,94404,93981],{"class":621},[72,94406,94407],{"class":74,"line":2076},[72,94408,94345],{"class":366},[72,94410,94411],{"class":74,"line":2082},[72,94412,94413],{"class":366},"array([[ 1,  2,  3,  1,  2,  3],\n",[72,94415,94416],{"class":74,"line":2103},[72,94417,94418],{"class":366},"       [ 4,  5,  6,  4,  5,  6],\n",[72,94420,94421],{"class":74,"line":2108},[72,94422,94423],{"class":366},"       [ 7,  8,  9,  7,  8,  9],\n",[72,94425,94426],{"class":74,"line":2122},[72,94427,94428],{"class":366},"       [10, 11, 12, 10, 11, 12]])\n",[72,94430,94431],{"class":74,"line":2127},[72,94432,94345],{"class":366},[72,94434,94435,94438,94440,94442,94444],{"class":74,"line":2156},[72,94436,94437],{"class":82},"np.tile(aa,(",[72,94439,640],{"class":362},[72,94441,932],{"class":82},[72,94443,634],{"class":362},[72,94445,30915],{"class":82},[72,94447,94448],{"class":74,"line":2161},[72,94449,93981],{"class":621},[72,94451,94452],{"class":74,"line":2178},[72,94453,94345],{"class":366},[72,94455,94456],{"class":74,"line":2183},[72,94457,94458],{"class":366},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[72,94460,94461],{"class":74,"line":2188},[72,94462,94463],{"class":366},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[72,94465,94466],{"class":74,"line":2193},[72,94467,94468],{"class":366},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[72,94470,94471],{"class":74,"line":2207},[72,94472,94473],{"class":366},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[72,94475,94476],{"class":74,"line":2212},[72,94477,94478],{"class":366},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[72,94480,94481],{"class":74,"line":3005},[72,94482,94463],{"class":366},[72,94484,94485],{"class":74,"line":3019},[72,94486,94468],{"class":366},[72,94488,94489],{"class":74,"line":3027},[72,94490,94491],{"class":366},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[72,94493,94494],{"class":74,"line":3032},[72,94495,94345],{"class":366},[85,94497,94499],{"id":94498},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[15,94501,94502],{},"repeat()将数组中的每个元素重复若干次",[63,94504,94506],{"className":65,"code":94505,"language":67,"meta":68,"style":68},"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",[34,94507,94508,94524,94533,94537,94542,94566,94571,94580,94584,94589,94593,94598,94614,94618,94622,94627,94632,94637,94641,94646,94650,94655,94660,94664,94680,94684,94688,94693,94698,94703,94708],{"__ignoreMap":68},[72,94509,94510,94512,94514,94516,94518,94520,94522],{"class":74,"line":75},[72,94511,257],{"class":82},[72,94513,609],{"class":78},[72,94515,93419],{"class":82},[72,94517,772],{"class":362},[72,94519,932],{"class":82},[72,94521,873],{"class":362},[72,94523,570],{"class":82},[72,94525,94526,94529,94531],{"class":74,"line":370},[72,94527,94528],{"class":82},"np.repeat(a,",[72,94530,634],{"class":362},[72,94532,570],{"class":82},[72,94534,94535],{"class":74,"line":1608},[72,94536,93981],{"class":621},[72,94538,94539],{"class":74,"line":1623},[72,94540,94541],{"class":621},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[72,94543,94544,94546,94548,94550,94552,94554,94556,94558,94560,94562,94564],{"class":74,"line":1629},[72,94545,93723],{"class":82},[72,94547,609],{"class":78},[72,94549,93419],{"class":82},[72,94551,772],{"class":362},[72,94553,932],{"class":82},[72,94555,1077],{"class":362},[72,94557,93424],{"class":82},[72,94559,847],{"class":362},[72,94561,932],{"class":82},[72,94563,634],{"class":362},[72,94565,570],{"class":82},[72,94567,94568],{"class":74,"line":1643},[72,94569,94570],{"class":621},"#这个重复之后二维变成一维\n",[72,94572,94573,94576,94578],{"class":74,"line":1649},[72,94574,94575],{"class":82},"np.repeat(aa,",[72,94577,640],{"class":362},[72,94579,570],{"class":82},[72,94581,94582],{"class":74,"line":1740},[72,94583,94345],{"class":366},[72,94585,94586],{"class":74,"line":1746},[72,94587,94588],{"class":366},"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",[72,94590,94591],{"class":74,"line":1758},[72,94592,94345],{"class":366},[72,94594,94595],{"class":74,"line":2041},[72,94596,94597],{"class":621},"#指定axis\n",[72,94599,94600,94602,94604,94606,94608,94610,94612],{"class":74,"line":2046},[72,94601,94575],{"class":82},[72,94603,640],{"class":362},[72,94605,932],{"class":82},[72,94607,47932],{"class":5642},[72,94609,609],{"class":78},[72,94611,747],{"class":362},[72,94613,570],{"class":82},[72,94615,94616],{"class":74,"line":2052},[72,94617,93981],{"class":621},[72,94619,94620],{"class":74,"line":2057},[72,94621,94345],{"class":366},[72,94623,94624],{"class":74,"line":2071},[72,94625,94626],{"class":366},"array([[ 1,  2,  3],\n",[72,94628,94629],{"class":74,"line":2076},[72,94630,94631],{"class":366},"       [ 1,  2,  3],\n",[72,94633,94634],{"class":74,"line":2082},[72,94635,94636],{"class":366},"       [ 4,  5,  6],\n",[72,94638,94639],{"class":74,"line":2103},[72,94640,94636],{"class":366},[72,94642,94643],{"class":74,"line":2108},[72,94644,94645],{"class":366},"       [ 7,  8,  9],\n",[72,94647,94648],{"class":74,"line":2122},[72,94649,94645],{"class":366},[72,94651,94652],{"class":74,"line":2127},[72,94653,94654],{"class":366},"       [10, 11, 12],\n",[72,94656,94657],{"class":74,"line":2156},[72,94658,94659],{"class":366},"       [10, 11, 12]])\n",[72,94661,94662],{"class":74,"line":2161},[72,94663,94345],{"class":366},[72,94665,94666,94668,94670,94672,94674,94676,94678],{"class":74,"line":2178},[72,94667,94575],{"class":82},[72,94669,640],{"class":362},[72,94671,932],{"class":82},[72,94673,47932],{"class":5642},[72,94675,609],{"class":78},[72,94677,772],{"class":362},[72,94679,570],{"class":82},[72,94681,94682],{"class":74,"line":2183},[72,94683,93981],{"class":621},[72,94685,94686],{"class":74,"line":2188},[72,94687,94345],{"class":366},[72,94689,94690],{"class":74,"line":2193},[72,94691,94692],{"class":366},"array([[ 1,  1,  2,  2,  3,  3],\n",[72,94694,94695],{"class":74,"line":2207},[72,94696,94697],{"class":366},"       [ 4,  4,  5,  5,  6,  6],\n",[72,94699,94700],{"class":74,"line":2212},[72,94701,94702],{"class":366},"       [ 7,  7,  8,  8,  9,  9],\n",[72,94704,94705],{"class":74,"line":3005},[72,94706,94707],{"class":366},"       [10, 10, 11, 11, 12, 12]])\n",[72,94709,94710],{"class":74,"line":3019},[72,94711,94345],{"class":366},[85,94713,94715],{"id":94714},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[63,94717,94719],{"className":65,"code":94718,"language":67,"meta":68,"style":68},"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",[34,94720,94721,94737,94742,94754,94758,94763,94773,94777],{"__ignoreMap":68},[72,94722,94723,94725,94727,94729,94731,94733,94735],{"class":74,"line":75},[72,94724,257],{"class":82},[72,94726,609],{"class":78},[72,94728,93419],{"class":82},[72,94730,772],{"class":362},[72,94732,932],{"class":82},[72,94734,873],{"class":362},[72,94736,570],{"class":82},[72,94738,94739],{"class":74,"line":370},[72,94740,94741],{"class":621},"#array([，2，3，4])\n",[72,94743,94744,94747,94749,94751],{"class":74,"line":1608},[72,94745,94746],{"class":82},"np.roll(a,",[72,94748,640],{"class":362},[72,94750,983],{"class":82},[72,94752,94753],{"class":621},"#传正数向后调多少位，传负数向前调多少位\n",[72,94755,94756],{"class":74,"line":1623},[72,94757,93981],{"class":621},[72,94759,94760],{"class":74,"line":1629},[72,94761,94762],{"class":621},"#array([3, 4, 1, 2])\n",[72,94764,94765,94767,94769,94771],{"class":74,"line":1643},[72,94766,94746],{"class":82},[72,94768,1086],{"class":78},[72,94770,772],{"class":362},[72,94772,570],{"class":82},[72,94774,94775],{"class":74,"line":1649},[72,94776,93981],{"class":621},[72,94778,94779],{"class":74,"line":1740},[72,94780,94781],{"class":621},"#array([2, 3, 4, 1])\n",[15,94783,94784],{},[1891,94785],{"alt":68,"src":94786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[85,94788,94790],{"id":94789},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[15,94792,94793],{},"resize()重新调整数组的大小",[15,94795,94796],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[63,94798,94800],{"className":65,"code":94799,"language":67,"meta":68,"style":68},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[34,94801,94802,94807,94820],{"__ignoreMap":68},[72,94803,94804],{"class":74,"line":75},[72,94805,94806],{"class":621},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[72,94808,94809,94812,94814,94816,94818],{"class":74,"line":370},[72,94810,94811],{"class":82},"np.resize(aa,(",[72,94813,640],{"class":362},[72,94815,932],{"class":82},[72,94817,898],{"class":362},[72,94819,30915],{"class":82},[72,94821,94822,94824,94826,94828,94830,94832],{"class":74,"line":1608},[72,94823,94811],{"class":82},[72,94825,640],{"class":362},[72,94827,932],{"class":82},[72,94829,974],{"class":362},[72,94831,83188],{"class":82},[72,94833,94834],{"class":621},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[85,94836,94838],{"id":94837},"_125-placeput函数","12.5 place()\u002Fput()函数",[15,94840,94841],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[15,94843,94844],{},[1891,94845],{"alt":68,"src":94846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[85,94848,94850],{"id":94849},"_126-保存加载文件","12.6 保存加载文件",[15,94852,94853],{},"savetxt():将数据保存到txt文件中",[15,94855,94856],{},"loadtxt():从文件加载数据",[15,94858,94859],{},[1891,94860],{"alt":68,"src":94861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[85,94863,94865],{"id":94864},"_127-genfromtxt函数","12.7 genfromtxt()函数",[15,94867,94868],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[85,94870,94872],{"id":94871},"_128-anyall函数","12.8 any()\u002Fall()函数",[15,94874,94875],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[15,94877,94878],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[15,94880,94881],{},[1891,94882],{"alt":68,"src":94883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[85,94885,94887],{"id":94886},"_129-where语句","12.9 where语句",[15,94889,94890],{},"np.where(条件,x,y)",[15,94892,94893],{},"如果条件为True,对应值为x,否则对应值为y",[15,94895,94896],{},[1891,94897],{"alt":68,"src":94898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[85,94900,94902],{"id":94901},"_1210-dot矩阵","12.10 dot()矩阵",[15,94904,94905],{},[1891,94906],{"alt":68,"src":94907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[473,94909,94910],{},"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":68,"searchDepth":370,"depth":370,"links":94912},[94913,94914,94915,94916,94917,94918,94919,94920,94921,94922],{"id":94275,"depth":370,"text":94276},{"id":94498,"depth":370,"text":94499},{"id":94714,"depth":370,"text":94715},{"id":94789,"depth":370,"text":94790},{"id":94837,"depth":370,"text":94838},{"id":94849,"depth":370,"text":94850},{"id":94864,"depth":370,"text":94865},{"id":94871,"depth":370,"text":94872},{"id":94886,"depth":370,"text":94887},{"id":94901,"depth":370,"text":94902},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":94267,"description":23802},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":94929,"title":94930,"body":94931,"description":23802,"extension":487,"meta":95284,"navigation":490,"path":95285,"seo":95286,"stem":95287,"__hash__":95288},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":94932,"toc":95282},[94933,94936,94939,94942,94945,94948,95013,95015,95279],[10,94934,94930],{"id":94935},"_13数组排序",[15,94937,94938],{},"排序主要用到的方法是np.sort和np.argsort",[15,94940,94941],{},"其中np.sort()对数组直接排序",[15,94943,94944],{},"而np.argsort()是返回排序后的原始索引",[15,94946,94947],{},"①一维数组",[63,94949,94951],{"className":65,"code":94950,"language":67,"meta":68,"style":68},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[34,94952,94953,94957,94997,95005],{"__ignoreMap":68},[72,94954,94955],{"class":74,"line":75},[72,94956,93522],{"class":621},[72,94958,94959,94961,94963,94965,94967,94969,94971,94973,94975,94977,94979,94981,94983,94985,94987,94989,94991,94993,94995],{"class":74,"line":370},[72,94960,257],{"class":82},[72,94962,609],{"class":78},[72,94964,93441],{"class":82},[72,94966,634],{"class":362},[72,94968,932],{"class":82},[72,94970,1052],{"class":362},[72,94972,932],{"class":82},[72,94974,949],{"class":362},[72,94976,932],{"class":82},[72,94978,1329],{"class":362},[72,94980,932],{"class":82},[72,94982,833],{"class":362},[72,94984,932],{"class":82},[72,94986,1447],{"class":362},[72,94988,932],{"class":82},[72,94990,898],{"class":362},[72,94992,932],{"class":82},[72,94994,1000],{"class":362},[72,94996,5085],{"class":82},[72,94998,94999,95002],{"class":74,"line":1608},[72,95000,95001],{"class":82},"np.sort(a)",[72,95003,95004],{"class":621},"#升序排序\n",[72,95006,95007,95010],{"class":74,"line":1623},[72,95008,95009],{"class":82},"np.argsort(a)",[72,95011,95012],{"class":621},"#按照元素大小来索引排序\n",[15,95014,93708],{},[63,95016,95018],{"className":65,"code":95017,"language":67,"meta":68,"style":68},"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",[34,95019,95020,95032,95058,95063,95067,95072,95077,95082,95087,95091,95099,95103,95108,95113,95118,95123,95127,95132,95145,95149,95154,95159,95164,95169,95173,95178,95190,95194,95198,95202,95206,95210,95214,95219,95234,95239,95248,95253,95257,95261,95266,95270,95275],{"__ignoreMap":68},[72,95021,95022,95025,95027,95029],{"class":74,"line":75},[72,95023,95024],{"class":82},"np.random.seed(",[72,95026,747],{"class":362},[72,95028,983],{"class":82},[72,95030,95031],{"class":621},"#保证每次值一样\n",[72,95033,95034,95036,95038,95040,95042,95044,95046,95048,95050,95052,95054,95056],{"class":74,"line":370},[72,95035,93723],{"class":82},[72,95037,609],{"class":78},[72,95039,93531],{"class":82},[72,95041,865],{"class":362},[72,95043,932],{"class":82},[72,95045,31914],{"class":5642},[72,95047,609],{"class":78},[72,95049,564],{"class":82},[72,95051,847],{"class":362},[72,95053,932],{"class":82},[72,95055,898],{"class":362},[72,95057,30915],{"class":82},[72,95059,95060],{"class":74,"line":1608},[72,95061,95062],{"class":621},"#原数组：\n",[72,95064,95065],{"class":74,"line":1623},[72,95066,94345],{"class":366},[72,95068,95069],{"class":74,"line":1629},[72,95070,95071],{"class":366},"array([[44, 47, 64, 67, 67,  9],\n",[72,95073,95074],{"class":74,"line":1643},[72,95075,95076],{"class":366},"       [83, 21, 36, 87, 70, 88],\n",[72,95078,95079],{"class":74,"line":1649},[72,95080,95081],{"class":366},"       [88, 12, 58, 65, 39, 87],\n",[72,95083,95084],{"class":74,"line":1740},[72,95085,95086],{"class":366},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[72,95088,95089],{"class":74,"line":1746},[72,95090,94345],{"class":366},[72,95092,95093,95096],{"class":74,"line":1758},[72,95094,95095],{"class":82},"np.sort(aa)",[72,95097,95098],{"class":621},"#每行进行了排序\n",[72,95100,95101],{"class":74,"line":2041},[72,95102,94345],{"class":366},[72,95104,95105],{"class":74,"line":2046},[72,95106,95107],{"class":366},"array([[ 9, 44, 47, 64, 67, 67],\n",[72,95109,95110],{"class":74,"line":2052},[72,95111,95112],{"class":366},"       [21, 36, 70, 83, 87, 88],\n",[72,95114,95115],{"class":74,"line":2057},[72,95116,95117],{"class":366},"       [12, 39, 58, 65, 87, 88],\n",[72,95119,95120],{"class":74,"line":2071},[72,95121,95122],{"class":366},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[72,95124,95125],{"class":74,"line":2076},[72,95126,94345],{"class":366},[72,95128,95129],{"class":74,"line":2082},[72,95130,95131],{"class":621},"#axis=0时\n",[72,95133,95134,95137,95139,95141,95143],{"class":74,"line":2103},[72,95135,95136],{"class":82},"np.sort(aa,",[72,95138,47932],{"class":5642},[72,95140,609],{"class":78},[72,95142,747],{"class":362},[72,95144,570],{"class":82},[72,95146,95147],{"class":74,"line":2108},[72,95148,94345],{"class":366},[72,95150,95151],{"class":74,"line":2122},[72,95152,95153],{"class":366},"array([[44, 12, 36, 37, 25,  9],\n",[72,95155,95156],{"class":74,"line":2127},[72,95157,95158],{"class":366},"       [46, 21, 58, 65, 39, 77],\n",[72,95160,95161],{"class":74,"line":2156},[72,95162,95163],{"class":366},"       [83, 47, 64, 67, 67, 87],\n",[72,95165,95166],{"class":74,"line":2161},[72,95167,95168],{"class":366},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[72,95170,95171],{"class":74,"line":2178},[72,95172,94345],{"class":366},[72,95174,95175],{"class":74,"line":2183},[72,95176,95177],{"class":621},"#axis=1时,为默认值\n",[72,95179,95180,95182,95184,95186,95188],{"class":74,"line":2188},[72,95181,95136],{"class":82},[72,95183,47932],{"class":5642},[72,95185,609],{"class":78},[72,95187,772],{"class":362},[72,95189,570],{"class":82},[72,95191,95192],{"class":74,"line":2193},[72,95193,94345],{"class":366},[72,95195,95196],{"class":74,"line":2207},[72,95197,95107],{"class":366},[72,95199,95200],{"class":74,"line":2212},[72,95201,95112],{"class":366},[72,95203,95204],{"class":74,"line":3005},[72,95205,95117],{"class":366},[72,95207,95208],{"class":74,"line":3019},[72,95209,95122],{"class":366},[72,95211,95212],{"class":74,"line":3027},[72,95213,94345],{"class":366},[72,95215,95216],{"class":74,"line":3032},[72,95217,95218],{"class":621},"#按最后一列排序\n",[72,95220,95221,95223,95225,95228,95230,95232],{"class":74,"line":3038},[72,95222,817],{"class":82},[72,95224,609],{"class":78},[72,95226,95227],{"class":82},"aa[:,",[72,95229,1086],{"class":78},[72,95231,772],{"class":362},[72,95233,33664],{"class":82},[72,95235,95236],{"class":74,"line":3044},[72,95237,95238],{"class":621},"#获取最后一列排好序的索引\n",[72,95240,95241,95243,95245],{"class":74,"line":3049},[72,95242,74476],{"class":82},[72,95244,609],{"class":78},[72,95246,95247],{"class":82},"np.argsort(b)\n",[72,95249,95250],{"class":74,"line":8374},[72,95251,95252],{"class":82},"aa[index]\n",[72,95254,95255],{"class":74,"line":8398},[72,95256,94345],{"class":366},[72,95258,95259],{"class":74,"line":8403},[72,95260,95071],{"class":366},[72,95262,95263],{"class":74,"line":8409},[72,95264,95265],{"class":366},"       [46, 88, 81, 37, 25, 77],\n",[72,95267,95268],{"class":74,"line":8436},[72,95269,95081],{"class":366},[72,95271,95272],{"class":74,"line":8441},[72,95273,95274],{"class":366},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[72,95276,95277],{"class":74,"line":8447},[72,95278,94345],{"class":366},[473,95280,95281],{},"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":68,"searchDepth":370,"depth":370,"links":95283},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":94930,"description":23802},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":95290,"title":95291,"body":95292,"description":23802,"extension":487,"meta":95322,"navigation":490,"path":95323,"seo":95324,"stem":95325,"__hash__":95326},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":95293,"toc":95320},[95294,95297,95300,95303,95306,95309,95312,95315],[10,95295,95291],{"id":95296},"_14广播机制",[15,95298,95299],{},"广播的规则：",[15,95301,95302],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[15,95304,95305],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[15,95307,95308],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[15,95310,95311],{},"3.如果没有维度形状为1，则会引发异常",[15,95313,95314],{},"也就是只有维度或者个数为1才可以进行广播操作",[15,95316,95317],{},[1891,95318],{"alt":68,"src":95319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":68,"searchDepth":370,"depth":370,"links":95321},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":95291,"description":23802},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":95328,"title":95329,"body":95330,"description":23802,"extension":487,"meta":95428,"navigation":490,"path":95429,"seo":95430,"stem":95431,"__hash__":95432},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":95331,"toc":95426},[95332,95335,95338,95423],[10,95333,95329],{"id":95334},"_15比较掩码",[15,95336,95337],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[63,95339,95341],{"className":65,"code":95340,"language":67,"meta":68,"style":68},"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",[34,95342,95343,95389,95400,95414,95418],{"__ignoreMap":68},[72,95344,95345,95347,95349,95352,95354,95356,95358,95360,95362,95364,95366,95368,95370,95372,95374,95376,95378,95380,95382,95384,95386],{"class":74,"line":75},[72,95346,257],{"class":82},[72,95348,609],{"class":78},[72,95350,95351],{"class":82},"np.array([[",[72,95353,772],{"class":362},[72,95355,932],{"class":82},[72,95357,640],{"class":362},[72,95359,932],{"class":82},[72,95361,634],{"class":362},[72,95363,48448],{"class":82},[72,95365,1026],{"class":362},[72,95367,932],{"class":82},[72,95369,1052],{"class":362},[72,95371,932],{"class":82},[72,95373,1077],{"class":362},[72,95375,48448],{"class":82},[72,95377,1279],{"class":362},[72,95379,932],{"class":82},[72,95381,1304],{"class":362},[72,95383,932],{"class":82},[72,95385,1329],{"class":362},[72,95387,95388],{"class":82},"]])\n",[72,95390,95391,95393,95395,95397],{"class":74,"line":370},[72,95392,257],{"class":82},[72,95394,1464],{"class":78},[72,95396,1254],{"class":362},[72,95398,95399],{"class":621},"#结果是一个由True,False组成的数组\n",[72,95401,95402,95405,95407,95409,95411],{"class":74,"line":1608},[72,95403,95404],{"class":82},"a[a",[72,95406,1464],{"class":78},[72,95408,1254],{"class":362},[72,95410,1494],{"class":82},[72,95412,95413],{"class":621},"#小于20的元素会存到这个数组中\n",[72,95415,95416],{"class":74,"line":1623},[72,95417,93981],{"class":621},[72,95419,95420],{"class":74,"line":1629},[72,95421,95422],{"class":621},"#array([ 1,  2,  3, 11, 12, 13])\n",[473,95424,95425],{},"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":68,"searchDepth":370,"depth":370,"links":95427},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":95329,"description":23802},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95434,"title":95435,"body":95436,"description":23802,"extension":487,"meta":95528,"navigation":490,"path":95529,"seo":95530,"stem":95531,"__hash__":95532},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95437,"toc":95526},[95438,95441,95444,95447,95450,95453,95518,95523],[10,95439,95435],{"id":95440},"_16魔法命令time",[15,95442,95443],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[15,95445,95446],{},"%:行模式",[15,95448,95449],{},"%%:单元格模式",[15,95451,95452],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[63,95454,95456],{"className":65,"code":95455,"language":67,"meta":68,"style":68},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[34,95457,95458,95463,95470,95475,95484,95497,95501,95509],{"__ignoreMap":68},[72,95459,95460],{"class":74,"line":75},[72,95461,95462],{"class":621},"#程序执行时间\n",[72,95464,95465,95467],{"class":74,"line":370},[72,95466,79],{"class":78},[72,95468,95469],{"class":82}," time \n",[72,95471,95472],{"class":74,"line":1608},[72,95473,95474],{"class":621},"#获取时间\n",[72,95476,95477,95480,95482],{"class":74,"line":1623},[72,95478,95479],{"class":82},"start",[72,95481,609],{"class":78},[72,95483,32836],{"class":82},[72,95485,95486,95489,95492,95494],{"class":74,"line":1629},[72,95487,95488],{"class":82},"time.sleep(",[72,95490,95491],{"class":362},"0.4",[72,95493,983],{"class":82},[72,95495,95496],{"class":621},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[72,95498,95499],{"class":74,"line":1643},[72,95500,95474],{"class":621},[72,95502,95503,95505,95507],{"class":74,"line":1649},[72,95504,46219],{"class":82},[72,95506,609],{"class":78},[72,95508,32836],{"class":82},[72,95510,95511,95513,95515],{"class":74,"line":1740},[72,95512,46219],{"class":82},[72,95514,1086],{"class":78},[72,95516,95517],{"class":82},"start\n",[15,95519,95520],{},[1891,95521],{"alt":68,"src":95522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[473,95524,95525],{},"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":68,"searchDepth":370,"depth":370,"links":95527},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95435,"description":23802},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95534,"title":95535,"body":95536,"description":23802,"extension":487,"meta":95571,"navigation":490,"path":95572,"seo":95573,"stem":95574,"__hash__":95575},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95537,"toc":95569},[95538,95541,95544,95547,95550,95553,95556,95559,95564],[10,95539,95535],{"id":95540},"_17魔法命令timeit",[15,95542,95543],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[15,95545,95546],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[15,95548,95549],{},"单元格模式：",[15,95551,95552],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[15,95554,95555],{},"初始化语句执行次数由轮数来决定",[15,95557,95558],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[15,95560,95561],{},[1891,95562],{"alt":68,"src":95563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[15,95565,95566],{},[1891,95567],{"alt":68,"src":95568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":68,"searchDepth":370,"depth":370,"links":95570},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95535,"description":23802},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95577,"title":95578,"body":95579,"description":23802,"extension":487,"meta":95597,"navigation":490,"path":95598,"seo":95599,"stem":95600,"__hash__":95601},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95580,"toc":95595},[95581,95584,95587,95590],[10,95582,95578],{"id":95583},"_18魔法命令writefile和run",[15,95585,95586],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[15,95588,95589],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[15,95591,95592],{},[1891,95593],{"alt":68,"src":95594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":68,"searchDepth":370,"depth":370,"links":95596},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95578,"description":23802},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95603,"title":95604,"body":95605,"description":23802,"extension":487,"meta":95658,"navigation":490,"path":95659,"seo":95660,"stem":95661,"__hash__":95662},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95606,"toc":95656},[95607,95610,95613,95615,95618,95621,95626,95629,95632,95635,95638,95641,95644,95647,95650,95653],[10,95608,95604],{"id":95609},"_19魔法命令memit",[15,95611,95612],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[15,95614,25021],{},[15,95616,95617],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[15,95619,95620],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[15,95622,95623],{},[1891,95624],{"alt":68,"src":95625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[15,95627,95628],{},"补充：",[15,95630,95631],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[15,95633,95634],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[15,95636,95637],{},"解决方法：",[15,95639,95640],{},"1.cmd",[15,95642,95643],{},"2.依次输入以下代码：",[15,95645,95646],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[15,95648,95649],{},"pip install --upgrade ipython",[15,95651,95652],{},"#升级 memory_profiler 和 setuptools",[15,95654,95655],{},"pip install --upgrade memory_profiler setuptools",{"title":68,"searchDepth":370,"depth":370,"links":95657},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95604,"description":23802},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95664,"title":95665,"body":95666,"description":23802,"extension":487,"meta":97312,"navigation":490,"path":97313,"seo":97314,"stem":97315,"__hash__":97316},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95667,"toc":97282},[95668,95671,95675,95679,95740,95743,95748,95752,95757,95762,95767,95772,95775,95780,95784,95788,95821,95824,95827,95830,95882,95885,95921,95924,95966,95970,95991,95993,96030,96032,96037,96039,96044,96048,96051,96079,96083,96087,96140,96144,96236,96240,96244,96247,96252,96256,96281,96286,96290,96293,96296,96299,96302,96305,96308,96311,96323,96327,96331,96334,96366,96369,96392,96395,96421,96424,96450,96453,96487,96490,96552,96556,96559,96563,96566,96592,96595,96598,96603,96606,96675,96677,96682,96743,96746,96757,96763,96768,96772,96775,96788,96792,96807,96809,96832,96834,96860,96863,96866,96869,96917,96919,96924,96928,96932,96959,96963,96990,96993,96998,97003,97093,97097,97155,97160,97163,97166,97208,97212,97268,97273,97276,97279],[10,95669,95665],{"id":95670},"_2创建数组",[85,95672,95674],{"id":95673},"_21-array函数创建数组","2.1 array()函数创建数组",[531,95676,95678],{"id":95677},"_221-函数语句","2.2.1 函数语句",[63,95680,95682],{"className":65,"code":95681,"language":67,"meta":68,"style":68},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[34,95683,95684],{"__ignoreMap":68},[72,95685,95686,95689,95692,95694,95696,95698,95700,95702,95705,95707,95710,95712,95715,95717,95719,95721,95724,95726,95729,95731,95734,95736,95738],{"class":74,"line":75},[72,95687,95688],{"class":82},"numpy.array(",[72,95690,95691],{"class":362},"object",[72,95693,12861],{"class":82},[72,95695,93917],{"class":5642},[72,95697,13990],{"class":78},[72,95699,39351],{"class":362},[72,95701,12861],{"class":82},[72,95703,95704],{"class":5642},"copy",[72,95706,13990],{"class":78},[72,95708,95709],{"class":362}," True",[72,95711,12861],{"class":82},[72,95713,95714],{"class":5642},"order",[72,95716,13990],{"class":78},[72,95718,39351],{"class":362},[72,95720,12861],{"class":82},[72,95722,95723],{"class":5642},"subok",[72,95725,13990],{"class":78},[72,95727,95728],{"class":362}," False",[72,95730,12861],{"class":82},[72,95732,95733],{"class":5642},"ndmin",[72,95735,13990],{"class":78},[72,95737,4521],{"class":362},[72,95739,570],{"class":82},[15,95741,95742],{},"参数：",[15,95744,95745],{},[1891,95746],{"alt":68,"src":95747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[531,95749,95751],{"id":95750},"_222-实例","2.2.2 实例",[15,95753,95754],{},[1891,95755],{"alt":68,"src":95756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[15,95758,95759],{},[1891,95760],{"alt":68,"src":95761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[15,95763,95764],{},[1891,95765],{"alt":68,"src":95766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[15,95768,95769],{},[1891,95770],{"alt":68,"src":95771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[15,95773,95774],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[15,95776,95777],{},[1891,95778],{"alt":68,"src":95779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[85,95781,95783],{"id":95782},"_22-随机数创建数组","2.2 随机数创建数组",[531,95785,95787],{"id":95786},"_221-random语句","2.2.1 random语句",[63,95789,95791],{"className":65,"code":95790,"language":67,"meta":68,"style":68},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[34,95792,95793,95798,95803,95811,95816],{"__ignoreMap":68},[72,95794,95795],{"class":74,"line":75},[72,95796,95797],{"class":621},"#random.random()\n",[72,95799,95800],{"class":74,"line":370},[72,95801,95802],{"class":621},"#确定随机种子,就是每次运行结果是相同的\n",[72,95804,95805,95807,95809],{"class":74,"line":1608},[72,95806,95024],{"class":82},[72,95808,747],{"class":362},[72,95810,570],{"class":82},[72,95812,95813],{"class":74,"line":1623},[72,95814,95815],{"class":82},"np.random.random()\n",[72,95817,95818],{"class":74,"line":1629},[72,95819,95820],{"class":621},"#生成一个随机的数目\n",[15,95822,95823],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[15,95825,95826],{},"可以指定数组形状 size",[15,95828,95829],{},"①生成一维数组",[63,95831,95833],{"className":65,"code":95832,"language":67,"meta":68,"style":68},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[34,95834,95835,95840,95853,95858,95874],{"__ignoreMap":68},[72,95836,95837],{"class":74,"line":75},[72,95838,95839],{"class":621},"#random.random(size())\n",[72,95841,95842,95845,95847,95849,95851],{"class":74,"line":370},[72,95843,95844],{"class":82},"np.random.random(",[72,95846,31914],{"class":5642},[72,95848,609],{"class":78},[72,95850,873],{"class":362},[72,95852,570],{"class":82},[72,95854,95855],{"class":74,"line":1608},[72,95856,95857],{"class":621},"#生成一位的五个元素\n",[72,95859,95860,95862,95864,95866,95868,95870,95872],{"class":74,"line":1623},[72,95861,257],{"class":82},[72,95863,609],{"class":78},[72,95865,95844],{"class":82},[72,95867,31914],{"class":5642},[72,95869,609],{"class":78},[72,95871,847],{"class":362},[72,95873,570],{"class":82},[72,95875,95876,95879],{"class":74,"line":1629},[72,95877,95878],{"class":82},"a.shape ",[72,95880,95881],{"class":621},"#输出数组形状\n",[15,95883,95884],{},"②生成二维数组",[63,95886,95888],{"className":65,"code":95887,"language":67,"meta":68,"style":68},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[34,95889,95890,95894,95916],{"__ignoreMap":68},[72,95891,95892],{"class":74,"line":75},[72,95893,93718],{"class":621},[72,95895,95896,95898,95900,95902,95904,95906,95908,95910,95912,95914],{"class":74,"line":370},[72,95897,93723],{"class":82},[72,95899,609],{"class":78},[72,95901,95844],{"class":82},[72,95903,31914],{"class":5642},[72,95905,609],{"class":78},[72,95907,564],{"class":82},[72,95909,847],{"class":362},[72,95911,932],{"class":82},[72,95913,873],{"class":362},[72,95915,30915],{"class":82},[72,95917,95918],{"class":74,"line":1608},[72,95919,95920],{"class":621},"#生成四行五列的数组\n",[15,95922,95923],{},"③生成三维数组",[63,95925,95927],{"className":65,"code":95926,"language":67,"meta":68,"style":68},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[34,95928,95929,95934,95961],{"__ignoreMap":68},[72,95930,95931],{"class":74,"line":75},[72,95932,95933],{"class":621},"#三维数组\n",[72,95935,95936,95939,95941,95943,95945,95947,95949,95951,95953,95955,95957,95959],{"class":74,"line":370},[72,95937,95938],{"class":82},"aaa",[72,95940,609],{"class":78},[72,95942,95844],{"class":82},[72,95944,31914],{"class":5642},[72,95946,609],{"class":78},[72,95948,564],{"class":82},[72,95950,640],{"class":362},[72,95952,932],{"class":82},[72,95954,634],{"class":362},[72,95956,932],{"class":82},[72,95958,847],{"class":362},[72,95960,30915],{"class":82},[72,95962,95963],{"class":74,"line":1608},[72,95964,95965],{"class":82},"aaa.shape\n",[531,95967,95969],{"id":95968},"_222-randint语句","2.2.2 randint语句",[63,95971,95973],{"className":65,"code":95972,"language":67,"meta":68,"style":68},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[34,95974,95975,95980],{"__ignoreMap":68},[72,95976,95977],{"class":74,"line":75},[72,95978,95979],{"class":621},"#生成随机的整数 random.randint(low,high,size)\n",[72,95981,95982,95984,95986,95988],{"class":74,"line":370},[72,95983,93531],{"class":82},[72,95985,873],{"class":362},[72,95987,14140],{"class":82},[72,95989,95990],{"class":621},"#0~5中的随机一个数\n",[15,95992,95829],{},[63,95994,95996],{"className":65,"code":95995,"language":67,"meta":68,"style":68},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[34,95997,95998,96003,96025],{"__ignoreMap":68},[72,95999,96000],{"class":74,"line":75},[72,96001,96002],{"class":621},"#一维\n",[72,96004,96005,96007,96009,96011,96013,96015,96017,96019,96021,96023],{"class":74,"line":370},[72,96006,93531],{"class":82},[72,96008,772],{"class":362},[72,96010,932],{"class":82},[72,96012,1026],{"class":362},[72,96014,932],{"class":82},[72,96016,31914],{"class":5642},[72,96018,609],{"class":78},[72,96020,564],{"class":82},[72,96022,1000],{"class":362},[72,96024,30915],{"class":82},[72,96026,96027],{"class":74,"line":1608},[72,96028,96029],{"class":621},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[15,96031,95884],{},[15,96033,96034],{},[1891,96035],{"alt":68,"src":96036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[15,96038,95923],{},[15,96040,96041],{},[1891,96042],{"alt":68,"src":96043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[531,96045,96047],{"id":96046},"_222-rand语句","2.2.2 rand语句",[15,96049,96050],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[63,96052,96054],{"className":65,"code":96053,"language":67,"meta":68,"style":68},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[34,96055,96056,96069,96074],{"__ignoreMap":68},[72,96057,96058,96061,96063,96065,96067],{"class":74,"line":75},[72,96059,96060],{"class":82},"np.random.rand(",[72,96062,865],{"class":362},[72,96064,932],{"class":82},[72,96066,1000],{"class":362},[72,96068,570],{"class":82},[72,96070,96071],{"class":74,"line":370},[72,96072,96073],{"class":621},"#第一个参数100：行数，表示有100个样本\n",[72,96075,96076],{"class":74,"line":1608},[72,96077,96078],{"class":621},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[85,96080,96082],{"id":96081},"_23-arange创建数组","2.3 arange()创建数组",[531,96084,96086],{"id":96085},"_231-函数语句","2.3.1 函数语句",[63,96088,96090],{"className":65,"code":96089,"language":67,"meta":68,"style":68},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[34,96091,96092,96106,96111,96116,96121,96126,96131,96136],{"__ignoreMap":68},[72,96093,96094,96097,96099,96101,96104],{"class":74,"line":75},[72,96095,96096],{"class":82},"numpy.arange([start,] stop[, step], ",[72,96098,93917],{"class":5642},[72,96100,609],{"class":78},[72,96102,96103],{"class":362},"None",[72,96105,570],{"class":82},[72,96107,96108],{"class":74,"line":370},[72,96109,96110],{"class":621},"#参数\n",[72,96112,96113],{"class":74,"line":1608},[72,96114,96115],{"class":366},"\"\"\"\n",[72,96117,96118],{"class":74,"line":1623},[72,96119,96120],{"class":366},"start:起始值，可选，默认从 0 开始。\n",[72,96122,96123],{"class":74,"line":1629},[72,96124,96125],{"class":366},"stop:结束值（不包含该值）。\n",[72,96127,96128],{"class":74,"line":1643},[72,96129,96130],{"class":366},"step:步长，可选，默认是 1。可以为浮点数。\n",[72,96132,96133],{"class":74,"line":1649},[72,96134,96135],{"class":366},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[72,96137,96138],{"class":74,"line":1740},[72,96139,96115],{"class":366},[531,96141,96143],{"id":96142},"_232-实例","2.3.2 实例",[63,96145,96147],{"className":65,"code":96146,"language":67,"meta":68,"style":68},"#创建一维数组\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",[34,96148,96149,96153,96177,96182,96187,96191,96214,96218,96222,96227,96232],{"__ignoreMap":68},[72,96150,96151],{"class":74,"line":75},[72,96152,93522],{"class":621},[72,96154,96155,96157,96159,96161,96163,96165,96167,96169,96171,96173,96175],{"class":74,"line":370},[72,96156,93419],{"class":82},[72,96158,772],{"class":362},[72,96160,932],{"class":82},[72,96162,1279],{"class":362},[72,96164,932],{"class":82},[72,96166,772],{"class":362},[72,96168,932],{"class":82},[72,96170,93917],{"class":5642},[72,96172,609],{"class":78},[72,96174,567],{"class":362},[72,96176,570],{"class":82},[72,96178,96179],{"class":74,"line":1608},[72,96180,96181],{"class":621},"#输出结果：\n",[72,96183,96184],{"class":74,"line":1623},[72,96185,96186],{"class":621},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[72,96188,96189],{"class":74,"line":1629},[72,96190,94364],{"class":621},[72,96192,96193,96196,96198,96200,96202,96205,96207,96209,96211],{"class":74,"line":1643},[72,96194,96195],{"class":82},"np.array([np.arange(",[72,96197,772],{"class":362},[72,96199,932],{"class":82},[72,96201,847],{"class":362},[72,96203,96204],{"class":82},"),np.arange(",[72,96206,847],{"class":362},[72,96208,932],{"class":82},[72,96210,923],{"class":362},[72,96212,96213],{"class":82},")])\n",[72,96215,96216],{"class":74,"line":1649},[72,96217,93981],{"class":621},[72,96219,96220],{"class":74,"line":1740},[72,96221,96115],{"class":366},[72,96223,96224],{"class":74,"line":1746},[72,96225,96226],{"class":366},"array([[1, 2, 3],\n",[72,96228,96229],{"class":74,"line":1758},[72,96230,96231],{"class":366},"       [4, 5, 6]])\n",[72,96233,96234],{"class":74,"line":2041},[72,96235,96115],{"class":366},[85,96237,96239],{"id":96238},"_24-生态分布","2.4 生态分布",[531,96241,96243],{"id":96242},"_241-标准正态分布","2.4.1 标准正态分布",[15,96245,96246],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[15,96248,96249],{},[1891,96250],{"alt":68,"src":96251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[531,96253,96255],{"id":96254},"_242-常规正态分布","2.4.2 常规正态分布",[63,96257,96259],{"className":65,"code":96258,"language":67,"meta":68,"style":68},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[34,96260,96261,96266,96271,96276],{"__ignoreMap":68},[72,96262,96263],{"class":74,"line":75},[72,96264,96265],{"class":82},"random.normal(loc,scale,size)也可以生成正态分布\n",[72,96267,96268],{"class":74,"line":370},[72,96269,96270],{"class":621},"#loc:期望\n",[72,96272,96273],{"class":74,"line":1608},[72,96274,96275],{"class":621},"#scale:方差\n",[72,96277,96278],{"class":74,"line":1623},[72,96279,96280],{"class":621},"#size:用于确定是几维的数列\n",[15,96282,96283],{},[1891,96284],{"alt":68,"src":96285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[85,96287,96289],{"id":96288},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[15,96291,96292],{},"ndim:秩，维度个数",[15,96294,96295],{},"size:数组元素的个数",[15,96297,96298],{},"shape:数组的形状",[15,96300,96301],{},"dtype:数组元素的类型",[15,96303,96304],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[15,96306,96307],{},"他们都是属性，通过数组.属性的形式来确定",[15,96309,96310],{},"如果需要输出多个可以通过以下方式：",[63,96312,96314],{"className":65,"code":96313,"language":67,"meta":68,"style":68},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[34,96315,96316],{"__ignoreMap":68},[72,96317,96318,96320],{"class":74,"line":75},[72,96319,30833],{"class":362},[72,96321,96322],{"class":82},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[85,96324,96326],{"id":96325},"_26-其他方式创建数组","2.6 其他方式创建数组",[531,96328,96330],{"id":96329},"_261-zeros创建数组","2.6.1 zeros()创建数组",[15,96332,96333],{},"①创建一维数组",[63,96335,96337],{"className":65,"code":96336,"language":67,"meta":68,"style":68},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[34,96338,96339,96348,96352,96357,96362],{"__ignoreMap":68},[72,96340,96341,96344,96346],{"class":74,"line":75},[72,96342,96343],{"class":82},"np.zeros(",[72,96345,1000],{"class":362},[72,96347,570],{"class":82},[72,96349,96350],{"class":74,"line":370},[72,96351,96115],{"class":366},[72,96353,96354],{"class":74,"line":1608},[72,96355,96356],{"class":366},"输出结果：\n",[72,96358,96359],{"class":74,"line":1623},[72,96360,96361],{"class":366},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[72,96363,96364],{"class":74,"line":1629},[72,96365,96115],{"class":366},[15,96367,96368],{},"上方代码等价于：",[63,96370,96372],{"className":65,"code":96371,"language":67,"meta":68,"style":68},"np.zeros(shape=(10))#创建10个元素的0数组\n",[34,96373,96374],{"__ignoreMap":68},[72,96375,96376,96378,96381,96383,96385,96387,96389],{"class":74,"line":75},[72,96377,96343],{"class":82},[72,96379,96380],{"class":5642},"shape",[72,96382,609],{"class":78},[72,96384,564],{"class":82},[72,96386,1000],{"class":362},[72,96388,83188],{"class":82},[72,96390,96391],{"class":621},"#创建10个元素的0数组\n",[15,96393,96394],{},"也可以指定类型",[63,96396,96398],{"className":65,"code":96397,"language":67,"meta":68,"style":68},"#指定类型\nnp.zeros(5,dtype=int)\n",[34,96399,96400,96405],{"__ignoreMap":68},[72,96401,96402],{"class":74,"line":75},[72,96403,96404],{"class":621},"#指定类型\n",[72,96406,96407,96409,96411,96413,96415,96417,96419],{"class":74,"line":370},[72,96408,96343],{"class":82},[72,96410,873],{"class":362},[72,96412,932],{"class":82},[72,96414,93917],{"class":5642},[72,96416,609],{"class":78},[72,96418,567],{"class":362},[72,96420,570],{"class":82},[15,96422,96423],{},"②创建二维数组",[63,96425,96427],{"className":65,"code":96426,"language":67,"meta":68,"style":68},"np.zeros((3,4),dtype=int)\n",[34,96428,96429],{"__ignoreMap":68},[72,96430,96431,96434,96436,96438,96440,96442,96444,96446,96448],{"class":74,"line":75},[72,96432,96433],{"class":82},"np.zeros((",[72,96435,634],{"class":362},[72,96437,932],{"class":82},[72,96439,847],{"class":362},[72,96441,42674],{"class":82},[72,96443,93917],{"class":5642},[72,96445,609],{"class":78},[72,96447,567],{"class":362},[72,96449,570],{"class":82},[15,96451,96452],{},"③创建三维数组",[63,96454,96456],{"className":65,"code":96455,"language":67,"meta":68,"style":68},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[34,96457,96458,96463],{"__ignoreMap":68},[72,96459,96460],{"class":74,"line":75},[72,96461,96462],{"class":621},"#创建三维数组\n",[72,96464,96465,96467,96469,96471,96473,96475,96477,96479,96481,96483,96485],{"class":74,"line":370},[72,96466,96433],{"class":82},[72,96468,634],{"class":362},[72,96470,932],{"class":82},[72,96472,847],{"class":362},[72,96474,932],{"class":82},[72,96476,873],{"class":362},[72,96478,42674],{"class":82},[72,96480,93917],{"class":5642},[72,96482,609],{"class":78},[72,96484,567],{"class":362},[72,96486,570],{"class":82},[15,96488,96489],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[63,96491,96493],{"className":65,"code":96492,"language":67,"meta":68,"style":68},"#使用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",[34,96494,96495,96500,96515,96520,96525,96547],{"__ignoreMap":68},[72,96496,96497],{"class":74,"line":75},[72,96498,96499],{"class":621},"#使用zeros_like将创建的一维数组变成全0的数组\n",[72,96501,96502,96504,96506,96508,96510,96512],{"class":74,"line":370},[72,96503,257],{"class":82},[72,96505,609],{"class":78},[72,96507,93419],{"class":82},[72,96509,847],{"class":362},[72,96511,983],{"class":82},[72,96513,96514],{"class":621},"#这个得到的结果：一维数组0，1，2，3\n",[72,96516,96517],{"class":74,"line":1608},[72,96518,96519],{"class":82},"np.zeros_like(a)\n",[72,96521,96522],{"class":74,"line":1623},[72,96523,96524],{"class":621},"#使用zeros_like将创建的二维数组变成全0的数组\n",[72,96526,96527,96529,96531,96533,96535,96537,96539,96541,96543,96545],{"class":74,"line":1629},[72,96528,93723],{"class":82},[72,96530,609],{"class":78},[72,96532,95844],{"class":82},[72,96534,31914],{"class":5642},[72,96536,609],{"class":78},[72,96538,564],{"class":82},[72,96540,847],{"class":362},[72,96542,932],{"class":82},[72,96544,873],{"class":362},[72,96546,30915],{"class":82},[72,96548,96549],{"class":74,"line":1643},[72,96550,96551],{"class":82},"np.zeros_like(aa)\n",[531,96553,96555],{"id":96554},"_262-ones创建数组","2.6.2 ones()创建数组",[15,96557,96558],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[531,96560,96562],{"id":96561},"_263-empty创建数组","2.6.3 empty()创建数组",[15,96564,96565],{},"①empty()用法",[63,96567,96569],{"className":65,"code":96568,"language":67,"meta":68,"style":68},"numpy.empty(shape,dtype=float,order='c')\n",[34,96570,96571],{"__ignoreMap":68},[72,96572,96573,96576,96578,96580,96582,96584,96586,96588,96590],{"class":74,"line":75},[72,96574,96575],{"class":82},"numpy.empty(shape,",[72,96577,93917],{"class":5642},[72,96579,609],{"class":78},[72,96581,603],{"class":362},[72,96583,932],{"class":82},[72,96585,95714],{"class":5642},[72,96587,609],{"class":78},[72,96589,76446],{"class":366},[72,96591,570],{"class":82},[15,96593,96594],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[15,96596,96597],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[15,96599,96600],{},[1891,96601],{"alt":68,"src":96602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[15,96604,96605],{},"②empty()用法",[63,96607,96609],{"className":65,"code":96608,"language":67,"meta":68,"style":68},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[34,96610,96611,96632,96644,96665,96670],{"__ignoreMap":68},[72,96612,96613,96615,96617,96620,96622,96624,96626,96628,96630],{"class":74,"line":75},[72,96614,1399],{"class":82},[72,96616,609],{"class":78},[72,96618,96619],{"class":82},"np.empty(",[72,96621,1000],{"class":362},[72,96623,932],{"class":82},[72,96625,93917],{"class":5642},[72,96627,609],{"class":78},[72,96629,567],{"class":362},[72,96631,570],{"class":82},[72,96633,96634,96636,96638,96640,96642],{"class":74,"line":370},[72,96635,1374],{"class":82},[72,96637,609],{"class":78},[72,96639,93419],{"class":82},[72,96641,873],{"class":362},[72,96643,570],{"class":82},[72,96645,96646,96649,96651,96654,96656,96658,96661,96663],{"class":74,"line":1608},[72,96647,96648],{"class":82},"np.add(",[72,96650,640],{"class":362},[72,96652,96653],{"class":82},",x,",[72,96655,93471],{"class":5642},[72,96657,609],{"class":78},[72,96659,96660],{"class":82},"y[:",[72,96662,873],{"class":362},[72,96664,5085],{"class":82},[72,96666,96667],{"class":74,"line":1623},[72,96668,96669],{"class":621},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[72,96671,96672],{"class":74,"line":1629},[72,96673,96674],{"class":82},"y\n",[15,96676,11940],{},[15,96678,96679],{},[1891,96680],{"alt":68,"src":96681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[63,96683,96685],{"className":65,"code":96684,"language":67,"meta":68,"style":68},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[34,96686,96687,96703,96723,96738],{"__ignoreMap":68},[72,96688,96689,96691,96693,96695,96697,96699,96701],{"class":74,"line":75},[72,96690,1374],{"class":82},[72,96692,609],{"class":78},[72,96694,93419],{"class":82},[72,96696,772],{"class":362},[72,96698,932],{"class":82},[72,96700,898],{"class":362},[72,96702,570],{"class":82},[72,96704,96705,96707,96709,96711,96713,96715,96717,96719,96721],{"class":74,"line":370},[72,96706,1399],{"class":82},[72,96708,609],{"class":78},[72,96710,96619],{"class":82},[72,96712,873],{"class":362},[72,96714,932],{"class":82},[72,96716,93917],{"class":5642},[72,96718,609],{"class":78},[72,96720,567],{"class":362},[72,96722,570],{"class":82},[72,96724,96725,96728,96730,96732,96734,96736],{"class":74,"line":1608},[72,96726,96727],{"class":82},"np.add(x,",[72,96729,640],{"class":362},[72,96731,932],{"class":82},[72,96733,93471],{"class":5642},[72,96735,609],{"class":78},[72,96737,93866],{"class":82},[72,96739,96740],{"class":74,"line":1623},[72,96741,96742],{"class":621},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[15,96744,96745],{},"③empty_like()",[15,96747,96748],{},[707,96749,96750,96751,96756],{},"创建一个",[707,96752,96753],{},[707,96754,96755],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[15,96758,96759,96762],{},[34,96760,96761],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[15,96764,96765],{},[1891,96766],{"alt":68,"src":96767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[531,96769,96771],{"id":96770},"_264-用法","2.6.4 ？？用法",[15,96773,96774],{},"当想查看一个函数的参数时，可以通过？？来实现",[63,96776,96778],{"className":65,"code":96777,"language":67,"meta":68,"style":68},"np.full??\n",[34,96779,96780],{"__ignoreMap":68},[72,96781,96782,96785],{"class":74,"line":75},[72,96783,96784],{"class":82},"np.full",[72,96786,96787],{"class":77821},"??\n",[531,96789,96791],{"id":96790},"_265-full创建数组","2.6.5 full()创建数组",[63,96793,96795],{"className":65,"code":96794,"language":67,"meta":68,"style":68},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[34,96796,96797,96802],{"__ignoreMap":68},[72,96798,96799],{"class":74,"line":75},[72,96800,96801],{"class":82},"full(shape,fill_value)\n",[72,96803,96804],{"class":74,"line":370},[72,96805,96806],{"class":82},"创建全为某个指定值的数组\n",[15,96808,94947],{},[63,96810,96812],{"className":65,"code":96811,"language":67,"meta":68,"style":68},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[34,96813,96814,96819],{"__ignoreMap":68},[72,96815,96816],{"class":74,"line":75},[72,96817,96818],{"class":621},"#创建一个一维数组,以20进行填充\n",[72,96820,96821,96824,96826,96828,96830],{"class":74,"line":370},[72,96822,96823],{"class":82},"np.full(",[72,96825,1000],{"class":362},[72,96827,932],{"class":82},[72,96829,1254],{"class":362},[72,96831,570],{"class":82},[15,96833,93708],{},[63,96835,96837],{"className":65,"code":96836,"language":67,"meta":68,"style":68},"#创建二维数组\nnp.full((3,5),11)\n",[34,96838,96839,96843],{"__ignoreMap":68},[72,96840,96841],{"class":74,"line":75},[72,96842,94364],{"class":621},[72,96844,96845,96848,96850,96852,96854,96856,96858],{"class":74,"line":370},[72,96846,96847],{"class":82},"np.full((",[72,96849,634],{"class":362},[72,96851,932],{"class":82},[72,96853,873],{"class":362},[72,96855,42674],{"class":82},[72,96857,1026],{"class":362},[72,96859,570],{"class":82},[15,96861,96862],{},"③full_like用法",[15,96864,96865],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[15,96867,96868],{},"这里是指定填充而已",[63,96870,96872],{"className":65,"code":96871,"language":67,"meta":68,"style":68},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[34,96873,96874,96879,96903,96908],{"__ignoreMap":68},[72,96875,96876],{"class":74,"line":75},[72,96877,96878],{"class":621},"#创建一个指定形状数组\n",[72,96880,96881,96883,96885,96887,96889,96891,96893,96895,96897,96899,96901],{"class":74,"line":370},[72,96882,257],{"class":82},[72,96884,609],{"class":78},[72,96886,93419],{"class":82},[72,96888,772],{"class":362},[72,96890,932],{"class":82},[72,96892,879],{"class":362},[72,96894,93424],{"class":82},[72,96896,847],{"class":362},[72,96898,932],{"class":82},[72,96900,974],{"class":362},[72,96902,570],{"class":82},[72,96904,96905],{"class":74,"line":1608},[72,96906,96907],{"class":621},"#进行指定填充\n",[72,96909,96910,96913,96915],{"class":74,"line":1623},[72,96911,96912],{"class":82},"np.full_like(a,",[72,96914,1000],{"class":362},[72,96916,570],{"class":82},[15,96918,11940],{},[15,96920,96921],{},[1891,96922],{"alt":68,"src":96923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[531,96925,96927],{"id":96926},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[22423,96929,96931],{"id":96930},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[63,96933,96935],{"className":65,"code":96934,"language":67,"meta":68,"style":68},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[34,96936,96937,96954],{"__ignoreMap":68},[72,96938,96939,96942,96944,96946,96948,96950,96952],{"class":74,"line":75},[72,96940,96941],{"class":82},"np.eye(",[72,96943,847],{"class":362},[72,96945,932],{"class":82},[72,96947,93917],{"class":5642},[72,96949,609],{"class":78},[72,96951,567],{"class":362},[72,96953,570],{"class":82},[72,96955,96956],{"class":74,"line":370},[72,96957,96958],{"class":621},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[22423,96960,96962],{"id":96961},"_2662-法2identity","2.6.6.2 法2：identity()",[63,96964,96966],{"className":65,"code":96965,"language":67,"meta":68,"style":68},"#identity()\nnp.identity(5,dtype=int)\n",[34,96967,96968,96973],{"__ignoreMap":68},[72,96969,96970],{"class":74,"line":75},[72,96971,96972],{"class":621},"#identity()\n",[72,96974,96975,96978,96980,96982,96984,96986,96988],{"class":74,"line":370},[72,96976,96977],{"class":82},"np.identity(",[72,96979,873],{"class":362},[72,96981,932],{"class":82},[72,96983,93917],{"class":5642},[72,96985,609],{"class":78},[72,96987,567],{"class":362},[72,96989,570],{"class":82},[15,96991,96992],{},"两个函数是有区别的",[15,96994,96995],{},[1891,96996],{"alt":68,"src":96997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[15,96999,97000],{},[1891,97001],{"alt":68,"src":97002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[63,97004,97006],{"className":65,"code":97005,"language":67,"meta":68,"style":68},"# 创建一个 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",[34,97007,97008,97013,97025,97030,97035,97040,97045,97049,97054,97074,97078,97083,97088],{"__ignoreMap":68},[72,97009,97010],{"class":74,"line":75},[72,97011,97012],{"class":621},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[72,97014,97015,97017,97019,97021,97023],{"class":74,"line":370},[72,97016,96941],{"class":82},[72,97018,634],{"class":362},[72,97020,12861],{"class":82},[72,97022,847],{"class":362},[72,97024,570],{"class":82},[72,97026,97027],{"class":74,"line":1608},[72,97028,97029],{"class":621},"# 输出:\n",[72,97031,97032],{"class":74,"line":1623},[72,97033,97034],{"class":621},"# [[1. 0. 0. 0.]\n",[72,97036,97037],{"class":74,"line":1629},[72,97038,97039],{"class":621},"#  [0. 1. 0. 0.]\n",[72,97041,97042],{"class":74,"line":1643},[72,97043,97044],{"class":621},"#  [0. 0. 1. 0.]]\n",[72,97046,97047],{"class":74,"line":1649},[72,97048,2828],{"emptyLinePlaceholder":490},[72,97050,97051],{"class":74,"line":1740},[72,97052,97053],{"class":621},"# 对角线向上偏移1\n",[72,97055,97056,97058,97060,97062,97064,97066,97068,97070,97072],{"class":74,"line":1746},[72,97057,96941],{"class":82},[72,97059,634],{"class":362},[72,97061,12861],{"class":82},[72,97063,847],{"class":362},[72,97065,12861],{"class":82},[72,97067,1047],{"class":5642},[72,97069,609],{"class":78},[72,97071,772],{"class":362},[72,97073,570],{"class":82},[72,97075,97076],{"class":74,"line":1758},[72,97077,97029],{"class":621},[72,97079,97080],{"class":74,"line":2041},[72,97081,97082],{"class":621},"# [[0. 1. 0. 0.]\n",[72,97084,97085],{"class":74,"line":2046},[72,97086,97087],{"class":621},"#  [0. 0. 1. 0.]\n",[72,97089,97090],{"class":74,"line":2052},[72,97091,97092],{"class":621},"#  [0. 0. 0. 1.]]\n",[531,97094,97096],{"id":97095},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[63,97098,97100],{"className":65,"code":97099,"language":67,"meta":68,"style":68},"#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",[34,97101,97102,97107,97111,97116,97121,97126,97131,97136,97141,97146,97151],{"__ignoreMap":68},[72,97103,97104],{"class":74,"line":75},[72,97105,97106],{"class":621},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[72,97108,97109],{"class":74,"line":370},[72,97110,96115],{"class":366},[72,97112,97113],{"class":74,"line":1608},[72,97114,97115],{"class":366},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[72,97117,97118],{"class":74,"line":1623},[72,97119,97120],{"class":366},"参数介绍：\n",[72,97122,97123],{"class":74,"line":1629},[72,97124,97125],{"class":366},"start：序列的起始值\n",[72,97127,97128],{"class":74,"line":1643},[72,97129,97130],{"class":366},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[72,97132,97133],{"class":74,"line":1649},[72,97134,97135],{"class":366},"num：要生长的等步长的样本数量，默认为50\n",[72,97137,97138],{"class":74,"line":1740},[72,97139,97140],{"class":366},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[72,97142,97143],{"class":74,"line":1746},[72,97144,97145],{"class":366},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[72,97147,97148],{"class":74,"line":1758},[72,97149,97150],{"class":366},"dtype：ndarry的数据类型\n",[72,97152,97153],{"class":74,"line":2041},[72,97154,96115],{"class":366},[15,97156,97157],{},[1891,97158],{"alt":68,"src":97159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[15,97161,97162],{},"这里num=是可以省略的",[15,97164,97165],{},"也就是下方两行代码结果是一模一样的",[63,97167,97169],{"className":65,"code":97168,"language":67,"meta":68,"style":68},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[34,97170,97171,97188],{"__ignoreMap":68},[72,97172,97173,97176,97178,97180,97182,97184,97186],{"class":74,"line":75},[72,97174,97175],{"class":82},"np.linspace(",[72,97177,772],{"class":362},[72,97179,932],{"class":82},[72,97181,873],{"class":362},[72,97183,932],{"class":82},[72,97185,873],{"class":362},[72,97187,570],{"class":82},[72,97189,97190,97192,97194,97196,97198,97200,97202,97204,97206],{"class":74,"line":370},[72,97191,97175],{"class":82},[72,97193,772],{"class":362},[72,97195,932],{"class":82},[72,97197,873],{"class":362},[72,97199,932],{"class":82},[72,97201,2094],{"class":5642},[72,97203,609],{"class":78},[72,97205,873],{"class":362},[72,97207,570],{"class":82},[531,97209,97211],{"id":97210},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[63,97213,97215],{"className":65,"code":97214,"language":67,"meta":68,"style":68},"#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",[34,97216,97217,97222,97226,97231,97236,97241,97246,97250,97255,97260,97264],{"__ignoreMap":68},[72,97218,97219],{"class":74,"line":75},[72,97220,97221],{"class":621},"#logspace函数用于创建一个等比数列，格式如下：\n",[72,97223,97224],{"class":74,"line":370},[72,97225,96115],{"class":366},[72,97227,97228],{"class":74,"line":1608},[72,97229,97230],{"class":366},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[72,97232,97233],{"class":74,"line":1623},[72,97234,97235],{"class":366},"参数为：\n",[72,97237,97238],{"class":74,"line":1629},[72,97239,97240],{"class":366},"start:序列的起始位置为：base**start\n",[72,97242,97243],{"class":74,"line":1643},[72,97244,97245],{"class":366},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[72,97247,97248],{"class":74,"line":1649},[72,97249,97135],{"class":366},[72,97251,97252],{"class":74,"line":1740},[72,97253,97254],{"class":366},"endpoint：是否包含 stop 这个值，默认是 True\n",[72,97256,97257],{"class":74,"line":1746},[72,97258,97259],{"class":366},"base：对数的底数，默认是 10（常见对数）\n",[72,97261,97262],{"class":74,"line":1758},[72,97263,97150],{"class":366},[72,97265,97266],{"class":74,"line":2041},[72,97267,96115],{"class":366},[15,97269,97270],{},[1891,97271],{"alt":68,"src":97272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[15,97274,97275],{},"logspace()函数中的num参数也是可以不写num=的",[15,97277,97278],{},"endpoint是不可以省略的",[473,97280,97281],{},"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":68,"searchDepth":370,"depth":370,"links":97283},[97284,97288,97293,97297,97301,97302],{"id":95673,"depth":370,"text":95674,"children":97285},[97286,97287],{"id":95677,"depth":1608,"text":95678},{"id":95750,"depth":1608,"text":95751},{"id":95782,"depth":370,"text":95783,"children":97289},[97290,97291,97292],{"id":95786,"depth":1608,"text":95787},{"id":95968,"depth":1608,"text":95969},{"id":96046,"depth":1608,"text":96047},{"id":96081,"depth":370,"text":96082,"children":97294},[97295,97296],{"id":96085,"depth":1608,"text":96086},{"id":96142,"depth":1608,"text":96143},{"id":96238,"depth":370,"text":96239,"children":97298},[97299,97300],{"id":96242,"depth":1608,"text":96243},{"id":96254,"depth":1608,"text":96255},{"id":96288,"depth":370,"text":96289},{"id":96325,"depth":370,"text":96326,"children":97303},[97304,97305,97306,97307,97308,97309,97310,97311],{"id":96329,"depth":1608,"text":96330},{"id":96554,"depth":1608,"text":96555},{"id":96561,"depth":1608,"text":96562},{"id":96770,"depth":1608,"text":96771},{"id":96790,"depth":1608,"text":96791},{"id":96926,"depth":1608,"text":96927},{"id":97095,"depth":1608,"text":97096},{"id":97210,"depth":1608,"text":97211},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95665,"description":23802},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":97318,"title":97319,"body":97320,"description":23802,"extension":487,"meta":97413,"navigation":490,"path":97414,"seo":97415,"stem":97416,"__hash__":97417},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":97321,"toc":97411},[97322,97325,97328,97331,97334,97337,97340,97343,97346,97349,97352,97355,97357,97360,97363,97368,97371,97374,97408],[10,97323,97319],{"id":97324},"_20魔法命令mprun",[15,97326,97327],{},"逐行分析数据内存的使用情况",[15,97329,97330],{},"语法格式：",[15,97332,97333],{},"%mprun -f 模块名.函数名 模块名.函数名()",[15,97335,97336],{},"分析结果列如下：",[15,97338,97339],{},"Line行号",[15,97341,97342],{},"Mem usage内存使用大小",[15,97344,97345],{},"increment内存增量",[15,97347,97348],{},"Line content代码内容",[15,97350,97351],{},"补充说明：",[15,97353,97354],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[15,97356,95620],{},[15,97358,97359],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[15,97361,97362],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[15,97364,97365],{},[1891,97366],{"alt":68,"src":97367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[15,97369,97370],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[15,97372,97373],{},"这时候需要重新加载模块",[63,97375,97377],{"className":65,"code":97376,"language":67,"meta":68,"style":68},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[34,97378,97379,97384,97391,97396],{"__ignoreMap":68},[72,97380,97381],{"class":74,"line":75},[72,97382,97383],{"class":621},"#重新加载模块\n",[72,97385,97386,97388],{"class":74,"line":370},[72,97387,79],{"class":78},[72,97389,97390],{"class":82}," importlib\n",[72,97392,97393],{"class":74,"line":1608},[72,97394,97395],{"class":82},"importlib.reload(mprun_test)\n",[72,97397,97398,97400,97403,97405],{"class":74,"line":1623},[72,97399,882],{"class":78},[72,97401,97402],{"class":82},"mprun ",[72,97404,1086],{"class":78},[72,97406,97407],{"class":82},"f mprun_test.fun_test mprun_test.fun_test()\n",[473,97409,97410],{},"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":68,"searchDepth":370,"depth":370,"links":97412},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":97319,"description":23802},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":97419,"title":97420,"body":97421,"description":23802,"extension":487,"meta":97438,"navigation":490,"path":97439,"seo":97440,"stem":97441,"__hash__":97442},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":97422,"toc":97436},[97423,97426,97431],[10,97424,97420],{"id":97425},"_3一维数组的索引和切片",[15,97427,97428],{},[1891,97429],{"alt":68,"src":97430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[15,97432,97433],{},[1891,97434],{"alt":68,"src":97435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":68,"searchDepth":370,"depth":370,"links":97437},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":97420,"description":23802},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97444,"title":97445,"body":97446,"description":23802,"extension":487,"meta":97929,"navigation":490,"path":97930,"seo":97931,"stem":97932,"__hash__":97933},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97447,"toc":97927},[97448,97451,97454,97459,97492,97495,97533,97536,97570,97573,97678,97681,97718,97721,97822,97825,97876,97879,97921,97924],[10,97449,97445],{"id":97450},"_4二维数组的索引与切片",[15,97452,97453],{},"①获取指定单个元素",[15,97455,97456],{},[1891,97457],{"alt":68,"src":97458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[63,97460,97462],{"className":65,"code":97461,"language":67,"meta":68,"style":68},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[34,97463,97464,97469,97474,97479],{"__ignoreMap":68},[72,97465,97466],{"class":74,"line":75},[72,97467,97468],{"class":621},"#获取元素9\n",[72,97470,97471],{"class":74,"line":370},[72,97472,97473],{"class":621},"#先获取所在行，再获取所在列\n",[72,97475,97476],{"class":74,"line":1608},[72,97477,97478],{"class":621},"#数组[行索引号，列索引号]\n",[72,97480,97481,97484,97486,97488,97490],{"class":74,"line":1623},[72,97482,97483],{"class":82},"a[",[72,97485,772],{"class":362},[72,97487,932],{"class":82},[72,97489,640],{"class":362},[72,97491,33664],{"class":82},[15,97493,97494],{},"②获取整行元素",[63,97496,97498],{"className":65,"code":97497,"language":67,"meta":68,"style":68},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[34,97499,97500,97505,97510,97518,97523],{"__ignoreMap":68},[72,97501,97502],{"class":74,"line":75},[72,97503,97504],{"class":621},"#获取整行 数组[行索引号]\n",[72,97506,97507],{"class":74,"line":370},[72,97508,97509],{"class":621},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[72,97511,97512,97514,97516],{"class":74,"line":1608},[72,97513,97483],{"class":82},[72,97515,640],{"class":362},[72,97517,33664],{"class":82},[72,97519,97520],{"class":74,"line":1623},[72,97521,97522],{"class":621},"#也可以负索引获取一行\n",[72,97524,97525,97527,97529,97531],{"class":74,"line":1629},[72,97526,97483],{"class":82},[72,97528,1086],{"class":78},[72,97530,772],{"class":362},[72,97532,33664],{"class":82},[15,97534,97535],{},"③获取整列元素",[63,97537,97539],{"className":65,"code":97538,"language":67,"meta":68,"style":68},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[34,97540,97541,97546,97555,97560],{"__ignoreMap":68},[72,97542,97543],{"class":74,"line":75},[72,97544,97545],{"class":621},"#获取整列 数组名[:,列索引]\n",[72,97547,97548,97551,97553],{"class":74,"line":370},[72,97549,97550],{"class":82},"a[:,",[72,97552,640],{"class":362},[72,97554,33664],{"class":82},[72,97556,97557],{"class":74,"line":1608},[72,97558,97559],{"class":621},"#也可以负索引获取一列\n",[72,97561,97562,97564,97566,97568],{"class":74,"line":1623},[72,97563,97550],{"class":82},[72,97565,1086],{"class":78},[72,97567,772],{"class":362},[72,97569,33664],{"class":82},[15,97571,97572],{},"④部分行部分列的元素",[63,97574,97576],{"className":65,"code":97575,"language":67,"meta":68,"style":68},"#部分行部分列 数组名[行切片，列切片]\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",[34,97577,97578,97583,97593,97597,97601,97606,97611,97615,97627,97631,97635,97640,97645,97650,97655,97659,97664],{"__ignoreMap":68},[72,97579,97580],{"class":74,"line":75},[72,97581,97582],{"class":621},"#部分行部分列 数组名[行切片，列切片]\n",[72,97584,97585,97588,97590],{"class":74,"line":370},[72,97586,97587],{"class":82},"a[:",[72,97589,640],{"class":362},[72,97591,97592],{"class":82},",:]\n",[72,97594,97595],{"class":74,"line":1608},[72,97596,93981],{"class":621},[72,97598,97599],{"class":74,"line":1623},[72,97600,94345],{"class":366},[72,97602,97603],{"class":74,"line":1629},[72,97604,97605],{"class":366},"array([[ 1,  2,  3,  4,  5,  6],\n",[72,97607,97608],{"class":74,"line":1643},[72,97609,97610],{"class":366},"       [ 7,  8,  9, 10, 11, 12]])\n",[72,97612,97613],{"class":74,"line":1649},[72,97614,94345],{"class":366},[72,97616,97617,97619,97621,97623,97625],{"class":74,"line":1740},[72,97618,97550],{"class":82},[72,97620,772],{"class":362},[72,97622,1413],{"class":82},[72,97624,847],{"class":362},[72,97626,33664],{"class":82},[72,97628,97629],{"class":74,"line":1746},[72,97630,93981],{"class":621},[72,97632,97633],{"class":74,"line":1758},[72,97634,94345],{"class":366},[72,97636,97637],{"class":74,"line":2041},[72,97638,97639],{"class":366},"array([[ 2,  3,  4],\n",[72,97641,97642],{"class":74,"line":2046},[72,97643,97644],{"class":366},"       [ 8,  9, 10],\n",[72,97646,97647],{"class":74,"line":2052},[72,97648,97649],{"class":366},"       [14, 15, 16],\n",[72,97651,97652],{"class":74,"line":2057},[72,97653,97654],{"class":366},"       [20, 21, 22]])\n",[72,97656,97657],{"class":74,"line":2071},[72,97658,94345],{"class":366},[72,97660,97661],{"class":74,"line":2076},[72,97662,97663],{"class":621},"#对列行同时进行切片，使用了step参数\n",[72,97665,97666,97669,97671,97674,97676],{"class":74,"line":2082},[72,97667,97668],{"class":82},"a[::",[72,97670,640],{"class":362},[72,97672,97673],{"class":82},",::",[72,97675,640],{"class":362},[72,97677,33664],{"class":82},[15,97679,97680],{},"⑤同时获取两个元素",[63,97682,97684],{"className":65,"code":97683,"language":67,"meta":68,"style":68},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[34,97685,97686,97691,97696],{"__ignoreMap":68},[72,97687,97688],{"class":74,"line":75},[72,97689,97690],{"class":621},"#同时获取第三行第二列，第四行第一列\n",[72,97692,97693],{"class":74,"line":370},[72,97694,97695],{"class":621},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[72,97697,97698,97701,97703,97705,97707,97709,97711,97713,97715],{"class":74,"line":1608},[72,97699,97700],{"class":82},"a[(",[72,97702,640],{"class":362},[72,97704,932],{"class":82},[72,97706,634],{"class":362},[72,97708,42665],{"class":82},[72,97710,772],{"class":362},[72,97712,932],{"class":82},[72,97714,747],{"class":362},[72,97716,97717],{"class":82},")]\n",[15,97719,97720],{},"⑥切片，对行进行反向获取",[63,97722,97724],{"className":65,"code":97723,"language":67,"meta":68,"style":68},"#切片 对所有行进行反向获取\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",[34,97725,97726,97731,97741,97745,97749,97754,97759,97764,97769,97773,97778,97794,97798,97803,97808,97813,97818],{"__ignoreMap":68},[72,97727,97728],{"class":74,"line":75},[72,97729,97730],{"class":621},"#切片 对所有行进行反向获取\n",[72,97732,97733,97735,97737,97739],{"class":74,"line":370},[72,97734,97668],{"class":82},[72,97736,1086],{"class":78},[72,97738,772],{"class":362},[72,97740,33664],{"class":82},[72,97742,97743],{"class":74,"line":1608},[72,97744,93981],{"class":621},[72,97746,97747],{"class":74,"line":1623},[72,97748,94345],{"class":366},[72,97750,97751],{"class":74,"line":1629},[72,97752,97753],{"class":366},"array([[19, 20, 21, 22, 23, 24],\n",[72,97755,97756],{"class":74,"line":1643},[72,97757,97758],{"class":366},"       [13, 14, 15, 16, 17, 18],\n",[72,97760,97761],{"class":74,"line":1649},[72,97762,97763],{"class":366},"       [ 7,  8,  9, 10, 11, 12],\n",[72,97765,97766],{"class":74,"line":1740},[72,97767,97768],{"class":366},"       [ 1,  2,  3,  4,  5,  6]])\n",[72,97770,97771],{"class":74,"line":1746},[72,97772,94345],{"class":366},[72,97774,97775],{"class":74,"line":1758},[72,97776,97777],{"class":621},"#对行列都进行反向切片获取\n",[72,97779,97780,97782,97784,97786,97788,97790,97792],{"class":74,"line":2041},[72,97781,97668],{"class":82},[72,97783,1086],{"class":78},[72,97785,772],{"class":362},[72,97787,97673],{"class":82},[72,97789,1086],{"class":78},[72,97791,772],{"class":362},[72,97793,33664],{"class":82},[72,97795,97796],{"class":74,"line":2046},[72,97797,94345],{"class":366},[72,97799,97800],{"class":74,"line":2052},[72,97801,97802],{"class":366},"array([[24, 23, 22, 21, 20, 19],\n",[72,97804,97805],{"class":74,"line":2057},[72,97806,97807],{"class":366},"       [18, 17, 16, 15, 14, 13],\n",[72,97809,97810],{"class":74,"line":2071},[72,97811,97812],{"class":366},"       [12, 11, 10,  9,  8,  7],\n",[72,97814,97815],{"class":74,"line":2076},[72,97816,97817],{"class":366},"       [ 6,  5,  4,  3,  2,  1]])\n",[72,97819,97820],{"class":74,"line":2082},[72,97821,94345],{"class":366},[15,97823,97824],{},"⑦修改元素",[63,97826,97828],{"className":65,"code":97827,"language":67,"meta":68,"style":68},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[34,97829,97830,97835,97853,97858],{"__ignoreMap":68},[72,97831,97832],{"class":74,"line":75},[72,97833,97834],{"class":621},"#获取前两行和前两列\n",[72,97836,97837,97840,97842,97844,97846,97849,97851],{"class":74,"line":370},[72,97838,97839],{"class":82},"sub_a",[72,97841,609],{"class":78},[72,97843,97587],{"class":82},[72,97845,640],{"class":362},[72,97847,97848],{"class":82},",:",[72,97850,640],{"class":362},[72,97852,33664],{"class":82},[72,97854,97855],{"class":74,"line":1608},[72,97856,97857],{"class":621},"#修改sub_a第一个元素的值\n",[72,97859,97860,97863,97865,97867,97869,97871,97873],{"class":74,"line":1623},[72,97861,97862],{"class":82},"sub_a[",[72,97864,747],{"class":362},[72,97866,932],{"class":82},[72,97868,747],{"class":362},[72,97870,1494],{"class":82},[72,97872,609],{"class":78},[72,97874,97875],{"class":362},"100\n",[15,97877,97878],{},"⑧数组复制copy()",[63,97880,97882],{"className":65,"code":97881,"language":67,"meta":68,"style":68},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[34,97883,97884,97889,97899,97904],{"__ignoreMap":68},[72,97885,97886],{"class":74,"line":75},[72,97887,97888],{"class":621},"#数组复制\n",[72,97890,97891,97894,97896],{"class":74,"line":370},[72,97892,97893],{"class":82},"copy_a",[72,97895,609],{"class":78},[72,97897,97898],{"class":82},"np.copy(sub_a)\n",[72,97900,97901],{"class":74,"line":1608},[72,97902,97903],{"class":621},"#修改copy_a后不影响原数组\n",[72,97905,97906,97909,97911,97913,97915,97917,97919],{"class":74,"line":1623},[72,97907,97908],{"class":82},"copy_a[",[72,97910,747],{"class":362},[72,97912,932],{"class":82},[72,97914,747],{"class":362},[72,97916,1494],{"class":82},[72,97918,609],{"class":78},[72,97920,97875],{"class":362},[15,97922,97923],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[473,97925,97926],{},"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":68,"searchDepth":370,"depth":370,"links":97928},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97445,"description":23802},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":97935,"title":97936,"body":97937,"description":23802,"extension":487,"meta":98429,"navigation":490,"path":98430,"seo":98431,"stem":98432,"__hash__":98433},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":97938,"toc":98421},[97939,97942,97946,97949,97952,98005,98008,98033,98036,98055,98075,98078,98094,98098,98144,98148,98190,98194,98197,98200,98203,98206,98209,98271,98331,98335,98338,98395,98399,98404,98413,98418],[10,97940,97936],{"id":97941},"_5改变数组的维度",[85,97943,97945],{"id":97944},"_51-使用reshape","5.1 使用reshape()",[15,97947,97948],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[15,97950,97951],{},"①一维数组转换为二维数组",[63,97953,97955],{"className":65,"code":97954,"language":67,"meta":68,"style":68},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[34,97956,97957,97973,97978,97983,97988],{"__ignoreMap":68},[72,97958,97959,97961,97963,97965,97967,97969,97971],{"class":74,"line":75},[72,97960,257],{"class":82},[72,97962,609],{"class":78},[72,97964,93419],{"class":82},[72,97966,772],{"class":362},[72,97968,932],{"class":82},[72,97970,1077],{"class":362},[72,97972,570],{"class":82},[72,97974,97975],{"class":74,"line":370},[72,97976,97977],{"class":621},"#将一维数组进行转换\n",[72,97979,97980],{"class":74,"line":1608},[72,97981,97982],{"class":621},"#注意点：元素个数不可以变\n",[72,97984,97985],{"class":74,"line":1623},[72,97986,97987],{"class":621},"#转换维度要保持一致，不一致就异常！！！\n",[72,97989,97990,97992,97994,97997,97999,98001,98003],{"class":74,"line":1629},[72,97991,93723],{"class":82},[72,97993,609],{"class":78},[72,97995,97996],{"class":82},"a.reshape(",[72,97998,640],{"class":362},[72,98000,932],{"class":82},[72,98002,898],{"class":362},[72,98004,570],{"class":82},[15,98006,98007],{},"②一维数组转换为三维数组",[63,98009,98011],{"className":65,"code":98010,"language":67,"meta":68,"style":68},"aaa=a.reshape(2,3,2)\n",[34,98012,98013],{"__ignoreMap":68},[72,98014,98015,98017,98019,98021,98023,98025,98027,98029,98031],{"class":74,"line":75},[72,98016,95938],{"class":82},[72,98018,609],{"class":78},[72,98020,97996],{"class":82},[72,98022,640],{"class":362},[72,98024,932],{"class":82},[72,98026,634],{"class":362},[72,98028,932],{"class":82},[72,98030,640],{"class":362},[72,98032,570],{"class":82},[15,98034,98035],{},"③二维数组转化为一维数组",[63,98037,98039],{"className":65,"code":98038,"language":67,"meta":68,"style":68},"#知道元素个数：\naa.reshape(12)\n",[34,98040,98041,98046],{"__ignoreMap":68},[72,98042,98043],{"class":74,"line":75},[72,98044,98045],{"class":621},"#知道元素个数：\n",[72,98047,98048,98051,98053],{"class":74,"line":370},[72,98049,98050],{"class":82},"aa.reshape(",[72,98052,1052],{"class":362},[72,98054,570],{"class":82},[63,98056,98058],{"className":65,"code":98057,"language":67,"meta":68,"style":68},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[34,98059,98060,98065],{"__ignoreMap":68},[72,98061,98062],{"class":74,"line":75},[72,98063,98064],{"class":621},"#不知道元素个数，参数传递-1\n",[72,98066,98067,98069,98071,98073],{"class":74,"line":370},[72,98068,98050],{"class":82},[72,98070,1086],{"class":78},[72,98072,772],{"class":362},[72,98074,570],{"class":82},[15,98076,98077],{},"④三维数组转换为一维数组",[63,98079,98081],{"className":65,"code":98080,"language":67,"meta":68,"style":68},"aaa.reshape(-1)\n",[34,98082,98083],{"__ignoreMap":68},[72,98084,98085,98088,98090,98092],{"class":74,"line":75},[72,98086,98087],{"class":82},"aaa.reshape(",[72,98089,1086],{"class":78},[72,98091,772],{"class":362},[72,98093,570],{"class":82},[85,98095,98097],{"id":98096},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[63,98099,98101],{"className":65,"code":98100,"language":67,"meta":68,"style":68},"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",[34,98102,98103,98130,98135,98139],{"__ignoreMap":68},[72,98104,98105,98107,98109,98111,98113,98115,98117,98119,98121,98123,98125,98127],{"class":74,"line":75},[72,98106,93723],{"class":82},[72,98108,609],{"class":78},[72,98110,93419],{"class":82},[72,98112,772],{"class":362},[72,98114,932],{"class":82},[72,98116,1077],{"class":362},[72,98118,93424],{"class":82},[72,98120,640],{"class":362},[72,98122,932],{"class":82},[72,98124,898],{"class":362},[72,98126,983],{"class":82},[72,98128,98129],{"class":621},"#转换为2行6列的数组\n",[72,98131,98132],{"class":74,"line":370},[72,98133,98134],{"class":82},"aa.revel()\n",[72,98136,98137],{"class":74,"line":1608},[72,98138,93981],{"class":621},[72,98140,98141],{"class":74,"line":1623},[72,98142,98143],{"class":621},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[85,98145,98147],{"id":98146},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[63,98149,98151],{"className":65,"code":98150,"language":67,"meta":68,"style":68},"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",[34,98152,98153,98177,98182,98186],{"__ignoreMap":68},[72,98154,98155,98157,98159,98161,98163,98165,98167,98169,98171,98173,98175],{"class":74,"line":75},[72,98156,93723],{"class":82},[72,98158,609],{"class":78},[72,98160,93419],{"class":82},[72,98162,772],{"class":362},[72,98164,932],{"class":82},[72,98166,1077],{"class":362},[72,98168,93424],{"class":82},[72,98170,640],{"class":362},[72,98172,932],{"class":82},[72,98174,898],{"class":362},[72,98176,570],{"class":82},[72,98178,98179],{"class":74,"line":370},[72,98180,98181],{"class":82},"aa.flatten()\n",[72,98183,98184],{"class":74,"line":1608},[72,98185,93981],{"class":621},[72,98187,98188],{"class":74,"line":1623},[72,98189,98143],{"class":621},[85,98191,98193],{"id":98192},"_54-使用resize","5.4 使用resize()",[15,98195,98196],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[15,98198,98199],{},"通过resize方法可以改变数组的维度",[15,98201,98202],{},"#resize修改数组维度",[15,98204,98205],{},"#以元组的形式指定形状",[15,98207,98208],{},"#改变的是原数组",[63,98210,98212],{"className":65,"code":98211,"language":67,"meta":68,"style":68},"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",[34,98213,98214,98230,98250,98263,98267],{"__ignoreMap":68},[72,98215,98216,98218,98220,98222,98224,98226,98228],{"class":74,"line":75},[72,98217,257],{"class":82},[72,98219,609],{"class":78},[72,98221,93419],{"class":82},[72,98223,772],{"class":362},[72,98225,932],{"class":82},[72,98227,1077],{"class":362},[72,98229,570],{"class":82},[72,98231,98232,98235,98237,98239,98241,98243,98245,98247],{"class":74,"line":370},[72,98233,98234],{"class":82},"a.shape",[72,98236,609],{"class":78},[72,98238,564],{"class":82},[72,98240,640],{"class":362},[72,98242,932],{"class":82},[72,98244,898],{"class":362},[72,98246,983],{"class":82},[72,98248,98249],{"class":621},"#改变了原数组\n",[72,98251,98252,98254,98256,98259,98261],{"class":74,"line":1608},[72,98253,257],{"class":82},[72,98255,609],{"class":78},[72,98257,98258],{"class":82},"resize((",[72,98260,1052],{"class":362},[72,98262,30915],{"class":82},[72,98264,98265],{"class":74,"line":1623},[72,98266,93981],{"class":621},[72,98268,98269],{"class":74,"line":1629},[72,98270,98143],{"class":621},[63,98272,98274],{"className":65,"code":98273,"language":67,"meta":68,"style":68},"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",[34,98275,98276,98289,98293,98297,98302,98307,98312,98317,98322,98327],{"__ignoreMap":68},[72,98277,98278,98281,98283,98285,98287],{"class":74,"line":75},[72,98279,98280],{"class":82},"a.resize((",[72,98282,898],{"class":362},[72,98284,932],{"class":82},[72,98286,640],{"class":362},[72,98288,30915],{"class":82},[72,98290,98291],{"class":74,"line":370},[72,98292,93981],{"class":621},[72,98294,98295],{"class":74,"line":1608},[72,98296,94345],{"class":366},[72,98298,98299],{"class":74,"line":1623},[72,98300,98301],{"class":366},"array([[ 1,  2],\n",[72,98303,98304],{"class":74,"line":1629},[72,98305,98306],{"class":366},"       [ 3,  4],\n",[72,98308,98309],{"class":74,"line":1643},[72,98310,98311],{"class":366},"       [ 5,  6],\n",[72,98313,98314],{"class":74,"line":1649},[72,98315,98316],{"class":366},"       [ 7,  8],\n",[72,98318,98319],{"class":74,"line":1740},[72,98320,98321],{"class":366},"       [ 9, 10],\n",[72,98323,98324],{"class":74,"line":1746},[72,98325,98326],{"class":366},"       [11, 12]])\n",[72,98328,98329],{"class":74,"line":1758},[72,98330,94345],{"class":366},[85,98332,98334],{"id":98333},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[15,98336,98337],{},"改变了原数组",[63,98339,98341],{"className":65,"code":98340,"language":67,"meta":68,"style":68},"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",[34,98342,98343,98359,98375,98379,98383,98387,98391],{"__ignoreMap":68},[72,98344,98345,98347,98349,98351,98353,98355,98357],{"class":74,"line":75},[72,98346,257],{"class":82},[72,98348,609],{"class":78},[72,98350,93419],{"class":82},[72,98352,772],{"class":362},[72,98354,932],{"class":82},[72,98356,1077],{"class":362},[72,98358,570],{"class":82},[72,98360,98361,98363,98365,98367,98369,98371,98373],{"class":74,"line":370},[72,98362,98234],{"class":82},[72,98364,609],{"class":78},[72,98366,564],{"class":82},[72,98368,640],{"class":362},[72,98370,932],{"class":82},[72,98372,898],{"class":362},[72,98374,570],{"class":82},[72,98376,98377],{"class":74,"line":1608},[72,98378,93981],{"class":621},[72,98380,98381],{"class":74,"line":1623},[72,98382,94345],{"class":366},[72,98384,98385],{"class":74,"line":1629},[72,98386,97605],{"class":366},[72,98388,98389],{"class":74,"line":1643},[72,98390,97610],{"class":366},[72,98392,98393],{"class":74,"line":1649},[72,98394,94345],{"class":366},[85,98396,98398],{"id":98397},"_56-重要比较","5.6 重要比较：",[15,98400,98401],{},[1891,98402],{"alt":68,"src":98403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[15,98405,98406,98407,98409,98410,98412],{},"口诀：NumPy 函数要么用 ",[34,98408,96380],{},"，要么用 ",[34,98411,31914],{},"，创建结构用 shape，造数据用 size",[15,98414,98415],{},[1891,98416],{"alt":68,"src":98417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[473,98419,98420],{},"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":68,"searchDepth":370,"depth":370,"links":98422},[98423,98424,98425,98426,98427,98428],{"id":97944,"depth":370,"text":97945},{"id":98096,"depth":370,"text":98097},{"id":98146,"depth":370,"text":98147},{"id":98192,"depth":370,"text":98193},{"id":98333,"depth":370,"text":98334},{"id":98397,"depth":370,"text":98398},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":97936,"description":23802},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98435,"title":98436,"body":98437,"description":23802,"extension":487,"meta":99509,"navigation":490,"path":99510,"seo":99511,"stem":99512,"__hash__":99513},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98438,"toc":99503},[98439,98442,98446,98449,98452,98455,98520,98523,98563,98566,98648,98651,98656,98678,98680,98685,98690,98693,98696,98851,98854,99056,99060,99063,99066,99134,99136,99141,99144,99147,99227,99231,99234,99236,99309,99311,99316,99318,99398,99402,99405,99408,99411,99414,99417,99420,99500],[10,98440,98436],{"id":98441},"_6数组的拼接",[85,98443,98445],{"id":98444},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[15,98447,98448],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[15,98450,98451],{},"函数内部传两个数列构成的数列或者元组",[15,98453,98454],{},"①一维数组的拼接",[63,98456,98458],{"className":65,"code":98457,"language":67,"meta":68,"style":68},"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",[34,98459,98460,98480,98500,98505,98510,98515],{"__ignoreMap":68},[72,98461,98462,98464,98466,98468,98470,98472,98474,98476,98478],{"class":74,"line":75},[72,98463,257],{"class":82},[72,98465,609],{"class":78},[72,98467,93441],{"class":82},[72,98469,772],{"class":362},[72,98471,932],{"class":82},[72,98473,640],{"class":362},[72,98475,932],{"class":82},[72,98477,634],{"class":362},[72,98479,5085],{"class":82},[72,98481,98482,98484,98486,98488,98490,98492,98494,98496,98498],{"class":74,"line":370},[72,98483,817],{"class":82},[72,98485,609],{"class":78},[72,98487,93441],{"class":82},[72,98489,847],{"class":362},[72,98491,932],{"class":82},[72,98493,873],{"class":362},[72,98495,932],{"class":82},[72,98497,898],{"class":362},[72,98499,5085],{"class":82},[72,98501,98502],{"class":74,"line":1608},[72,98503,98504],{"class":621},"#调用concatenate进行数组拼接\n",[72,98506,98507],{"class":74,"line":1623},[72,98508,98509],{"class":82},"np.concatenate((a,b))\n",[72,98511,98512],{"class":74,"line":1629},[72,98513,98514],{"class":621},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[72,98516,98517],{"class":74,"line":1643},[72,98518,98519],{"class":621},"#np.concatenate([a,b])\n",[15,98521,98522],{},"②一维多个数组拼接",[63,98524,98526],{"className":65,"code":98525,"language":67,"meta":68,"style":68},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[34,98527,98528,98533,98553,98558],{"__ignoreMap":68},[72,98529,98530],{"class":74,"line":75},[72,98531,98532],{"class":621},"#也可以多个数组进行拼接\n",[72,98534,98535,98537,98539,98541,98543,98545,98547,98549,98551],{"class":74,"line":370},[72,98536,842],{"class":82},[72,98538,609],{"class":78},[72,98540,93441],{"class":82},[72,98542,1000],{"class":362},[72,98544,932],{"class":82},[72,98546,1026],{"class":362},[72,98548,932],{"class":82},[72,98550,1077],{"class":362},[72,98552,5085],{"class":82},[72,98554,98555],{"class":74,"line":1608},[72,98556,98557],{"class":82},"c\n",[72,98559,98560],{"class":74,"line":1623},[72,98561,98562],{"class":82},"np.concatenate((a,b,c))\n",[15,98564,98565],{},"③二维数组拼接",[63,98567,98569],{"className":65,"code":98568,"language":67,"meta":68,"style":68},"#二维数组使用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",[34,98570,98571,98576,98600,98625,98630,98635],{"__ignoreMap":68},[72,98572,98573],{"class":74,"line":75},[72,98574,98575],{"class":621},"#二维数组使用concatenate进行拼接\n",[72,98577,98578,98580,98582,98584,98586,98588,98590,98592,98594,98596,98598],{"class":74,"line":370},[72,98579,93723],{"class":82},[72,98581,609],{"class":78},[72,98583,93419],{"class":82},[72,98585,772],{"class":362},[72,98587,932],{"class":82},[72,98589,1077],{"class":362},[72,98591,93424],{"class":82},[72,98593,634],{"class":362},[72,98595,932],{"class":82},[72,98597,847],{"class":362},[72,98599,570],{"class":82},[72,98601,98602,98605,98607,98609,98611,98613,98615,98617,98619,98621,98623],{"class":74,"line":1608},[72,98603,98604],{"class":82},"bb",[72,98606,609],{"class":78},[72,98608,93419],{"class":82},[72,98610,891],{"class":362},[72,98612,932],{"class":82},[72,98614,1196],{"class":362},[72,98616,93424],{"class":82},[72,98618,634],{"class":362},[72,98620,932],{"class":82},[72,98622,847],{"class":362},[72,98624,570],{"class":82},[72,98626,98627],{"class":74,"line":1623},[72,98628,98629],{"class":621},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[72,98631,98632],{"class":74,"line":1629},[72,98633,98634],{"class":621},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[72,98636,98637,98640,98642,98644,98646],{"class":74,"line":1643},[72,98638,98639],{"class":82},"np.concatenate((aa,bb),",[72,98641,47932],{"class":5642},[72,98643,609],{"class":78},[72,98645,747],{"class":362},[72,98647,570],{"class":82},[15,98649,98650],{},"结果：",[15,98652,98653],{},[1891,98654],{"alt":68,"src":98655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[63,98657,98659],{"className":65,"code":98658,"language":67,"meta":68,"style":68},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[34,98660,98661,98666],{"__ignoreMap":68},[72,98662,98663],{"class":74,"line":75},[72,98664,98665],{"class":621},"#指定axis为1进行拼接\n",[72,98667,98668,98670,98672,98674,98676],{"class":74,"line":370},[72,98669,98639],{"class":82},[72,98671,47932],{"class":5642},[72,98673,609],{"class":78},[72,98675,772],{"class":362},[72,98677,570],{"class":82},[15,98679,98650],{},[15,98681,98682],{},[1891,98683],{"alt":68,"src":98684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[15,98686,98687],{},[707,98688,98689],{},"二维数组总结：0竖着方向，1横着方向",[15,98691,98692],{},"④三维数组拼接",[15,98694,98695],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[63,98697,98699],{"className":65,"code":98698,"language":67,"meta":68,"style":68},"#两个三行六列\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",[34,98700,98701,98706,98734,98764,98769,98786,98791,98796,98801,98818,98823,98828,98833,98846],{"__ignoreMap":68},[72,98702,98703],{"class":74,"line":75},[72,98704,98705],{"class":621},"#两个三行六列\n",[72,98707,98708,98710,98712,98714,98716,98718,98720,98722,98724,98726,98728,98730,98732],{"class":74,"line":370},[72,98709,95938],{"class":82},[72,98711,609],{"class":78},[72,98713,93419],{"class":82},[72,98715,772],{"class":362},[72,98717,932],{"class":82},[72,98719,879],{"class":362},[72,98721,93424],{"class":82},[72,98723,640],{"class":362},[72,98725,932],{"class":82},[72,98727,634],{"class":362},[72,98729,932],{"class":82},[72,98731,898],{"class":362},[72,98733,570],{"class":82},[72,98735,98736,98739,98741,98743,98745,98747,98750,98752,98754,98756,98758,98760,98762],{"class":74,"line":1608},[72,98737,98738],{"class":82},"bbb",[72,98740,609],{"class":78},[72,98742,93419],{"class":82},[72,98744,891],{"class":362},[72,98746,932],{"class":82},[72,98748,98749],{"class":362},"137",[72,98751,93424],{"class":82},[72,98753,640],{"class":362},[72,98755,932],{"class":82},[72,98757,634],{"class":362},[72,98759,932],{"class":82},[72,98761,898],{"class":362},[72,98763,570],{"class":82},[72,98765,98766],{"class":74,"line":1623},[72,98767,98768],{"class":621},"#axis=0\n",[72,98770,98771,98773,98775,98778,98780,98782,98784],{"class":74,"line":1629},[72,98772,1249],{"class":82},[72,98774,609],{"class":78},[72,98776,98777],{"class":82},"np.concatenate((aaa,bbb),",[72,98779,47932],{"class":5642},[72,98781,609],{"class":78},[72,98783,747],{"class":362},[72,98785,570],{"class":82},[72,98787,98788],{"class":74,"line":1643},[72,98789,98790],{"class":82},"s.shape\n",[72,98792,98793],{"class":74,"line":1649},[72,98794,98795],{"class":621},"#输出：(4,3,6)\n",[72,98797,98798],{"class":74,"line":1740},[72,98799,98800],{"class":621},"#axis=1\n",[72,98802,98803,98806,98808,98810,98812,98814,98816],{"class":74,"line":1746},[72,98804,98805],{"class":82},"ss",[72,98807,609],{"class":78},[72,98809,98777],{"class":82},[72,98811,47932],{"class":5642},[72,98813,609],{"class":78},[72,98815,772],{"class":362},[72,98817,570],{"class":82},[72,98819,98820],{"class":74,"line":1758},[72,98821,98822],{"class":82},"ss.shape\n",[72,98824,98825],{"class":74,"line":2041},[72,98826,98827],{"class":621},"#输出：(2,6,6)\n",[72,98829,98830],{"class":74,"line":2046},[72,98831,98832],{"class":621},"#axis=2\n",[72,98834,98835,98837,98839,98841,98843],{"class":74,"line":2052},[72,98836,98777],{"class":82},[72,98838,47932],{"class":5642},[72,98840,609],{"class":78},[72,98842,640],{"class":362},[72,98844,98845],{"class":82},").shape\n",[72,98847,98848],{"class":74,"line":2057},[72,98849,98850],{"class":621},"#输出：（2，3，12）\n",[15,98852,98853],{},"⑤四维数组拼接",[63,98855,98857],{"className":65,"code":98856,"language":67,"meta":68,"style":68},"#两个三行六列\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",[34,98858,98859,98863,98891,98919,98944,98970,98974,98987,98992,98996,99008,99013,99017,99029,99034,99039,99051],{"__ignoreMap":68},[72,98860,98861],{"class":74,"line":75},[72,98862,98705],{"class":621},[72,98864,98865,98867,98869,98871,98873,98875,98877,98879,98881,98883,98885,98887,98889],{"class":74,"line":370},[72,98866,95938],{"class":82},[72,98868,609],{"class":78},[72,98870,93419],{"class":82},[72,98872,772],{"class":362},[72,98874,932],{"class":82},[72,98876,879],{"class":362},[72,98878,93424],{"class":82},[72,98880,640],{"class":362},[72,98882,932],{"class":82},[72,98884,634],{"class":362},[72,98886,932],{"class":82},[72,98888,898],{"class":362},[72,98890,570],{"class":82},[72,98892,98893,98895,98897,98899,98901,98903,98905,98907,98909,98911,98913,98915,98917],{"class":74,"line":1608},[72,98894,98738],{"class":82},[72,98896,609],{"class":78},[72,98898,93419],{"class":82},[72,98900,891],{"class":362},[72,98902,932],{"class":82},[72,98904,98749],{"class":362},[72,98906,93424],{"class":82},[72,98908,640],{"class":362},[72,98910,932],{"class":82},[72,98912,634],{"class":362},[72,98914,932],{"class":82},[72,98916,898],{"class":362},[72,98918,570],{"class":82},[72,98920,98921,98924,98926,98928,98930,98932,98934,98936,98938,98940,98942],{"class":74,"line":1623},[72,98922,98923],{"class":82},"aaaa",[72,98925,609],{"class":78},[72,98927,98087],{"class":82},[72,98929,640],{"class":362},[72,98931,932],{"class":82},[72,98933,634],{"class":362},[72,98935,932],{"class":82},[72,98937,634],{"class":362},[72,98939,932],{"class":82},[72,98941,640],{"class":362},[72,98943,570],{"class":82},[72,98945,98946,98949,98951,98954,98956,98958,98960,98962,98964,98966,98968],{"class":74,"line":1629},[72,98947,98948],{"class":82},"bbbb",[72,98950,609],{"class":78},[72,98952,98953],{"class":82},"bbb.reshape(",[72,98955,640],{"class":362},[72,98957,932],{"class":82},[72,98959,634],{"class":362},[72,98961,932],{"class":82},[72,98963,634],{"class":362},[72,98965,932],{"class":82},[72,98967,640],{"class":362},[72,98969,570],{"class":82},[72,98971,98972],{"class":74,"line":1643},[72,98973,98768],{"class":621},[72,98975,98976,98979,98981,98983,98985],{"class":74,"line":1649},[72,98977,98978],{"class":82},"np.concatenate((aaaa,bbbb),",[72,98980,47932],{"class":5642},[72,98982,609],{"class":78},[72,98984,747],{"class":362},[72,98986,98845],{"class":82},[72,98988,98989],{"class":74,"line":1740},[72,98990,98991],{"class":621},"#结果：（4，3，3，2）\n",[72,98993,98994],{"class":74,"line":1746},[72,98995,98800],{"class":621},[72,98997,98998,99000,99002,99004,99006],{"class":74,"line":1758},[72,98999,98978],{"class":82},[72,99001,47932],{"class":5642},[72,99003,609],{"class":78},[72,99005,772],{"class":362},[72,99007,98845],{"class":82},[72,99009,99010],{"class":74,"line":2041},[72,99011,99012],{"class":621},"#结果：（2，6，3，2）\n",[72,99014,99015],{"class":74,"line":2046},[72,99016,98832],{"class":621},[72,99018,99019,99021,99023,99025,99027],{"class":74,"line":2052},[72,99020,98978],{"class":82},[72,99022,47932],{"class":5642},[72,99024,609],{"class":78},[72,99026,640],{"class":362},[72,99028,98845],{"class":82},[72,99030,99031],{"class":74,"line":2057},[72,99032,99033],{"class":621},"#结果：（2，3，6，2）\n",[72,99035,99036],{"class":74,"line":2071},[72,99037,99038],{"class":621},"#axis=3\n",[72,99040,99041,99043,99045,99047,99049],{"class":74,"line":2076},[72,99042,98978],{"class":82},[72,99044,47932],{"class":5642},[72,99046,609],{"class":78},[72,99048,634],{"class":362},[72,99050,98845],{"class":82},[72,99052,99053],{"class":74,"line":2082},[72,99054,99055],{"class":621},"#结果：（2，3，3，4）\n",[85,99057,99059],{"id":99058},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[15,99061,99062],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[15,99064,99065],{},"①二维数组",[63,99067,99069],{"className":65,"code":99068,"language":67,"meta":68,"style":68},"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",[34,99070,99071,99095,99119,99124,99129],{"__ignoreMap":68},[72,99072,99073,99075,99077,99079,99081,99083,99085,99087,99089,99091,99093],{"class":74,"line":75},[72,99074,93723],{"class":82},[72,99076,609],{"class":78},[72,99078,93419],{"class":82},[72,99080,772],{"class":362},[72,99082,932],{"class":82},[72,99084,1077],{"class":362},[72,99086,93424],{"class":82},[72,99088,634],{"class":362},[72,99090,932],{"class":82},[72,99092,847],{"class":362},[72,99094,570],{"class":82},[72,99096,99097,99099,99101,99103,99105,99107,99109,99111,99113,99115,99117],{"class":74,"line":370},[72,99098,98604],{"class":82},[72,99100,609],{"class":78},[72,99102,93419],{"class":82},[72,99104,891],{"class":362},[72,99106,932],{"class":82},[72,99108,1196],{"class":362},[72,99110,93424],{"class":82},[72,99112,634],{"class":362},[72,99114,932],{"class":82},[72,99116,847],{"class":362},[72,99118,570],{"class":82},[72,99120,99121],{"class":74,"line":1608},[72,99122,99123],{"class":82},"np.hstack((aa,bb))\n",[72,99125,99126],{"class":74,"line":1623},[72,99127,99128],{"class":621},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[72,99130,99131],{"class":74,"line":1629},[72,99132,99133],{"class":621},"#np.hstack([aa,bb])\n",[15,99135,98650],{},[15,99137,99138],{},[1891,99139],{"alt":68,"src":99140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[15,99142,99143],{},"等效于concatenate()函数中axis=1时的情况",[15,99145,99146],{},"②三维数组",[63,99148,99150],{"className":65,"code":99149,"language":67,"meta":68,"style":68},"#两个三行六列\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",[34,99151,99152,99156,99184,99212,99217,99222],{"__ignoreMap":68},[72,99153,99154],{"class":74,"line":75},[72,99155,98705],{"class":621},[72,99157,99158,99160,99162,99164,99166,99168,99170,99172,99174,99176,99178,99180,99182],{"class":74,"line":370},[72,99159,95938],{"class":82},[72,99161,609],{"class":78},[72,99163,93419],{"class":82},[72,99165,772],{"class":362},[72,99167,932],{"class":82},[72,99169,879],{"class":362},[72,99171,93424],{"class":82},[72,99173,640],{"class":362},[72,99175,932],{"class":82},[72,99177,634],{"class":362},[72,99179,932],{"class":82},[72,99181,898],{"class":362},[72,99183,570],{"class":82},[72,99185,99186,99188,99190,99192,99194,99196,99198,99200,99202,99204,99206,99208,99210],{"class":74,"line":1608},[72,99187,98738],{"class":82},[72,99189,609],{"class":78},[72,99191,93419],{"class":82},[72,99193,891],{"class":362},[72,99195,932],{"class":82},[72,99197,98749],{"class":362},[72,99199,93424],{"class":82},[72,99201,640],{"class":362},[72,99203,932],{"class":82},[72,99205,634],{"class":362},[72,99207,932],{"class":82},[72,99209,898],{"class":362},[72,99211,570],{"class":82},[72,99213,99214],{"class":74,"line":1623},[72,99215,99216],{"class":621},"#使用hstack\n",[72,99218,99219],{"class":74,"line":1629},[72,99220,99221],{"class":82},"np.hstack((aaa,bbb)).shape\n",[72,99223,99224],{"class":74,"line":1643},[72,99225,99226],{"class":621},"#输出：（2，6，6）\n",[85,99228,99230],{"id":99229},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[15,99232,99233],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[15,99235,99065],{},[63,99237,99239],{"className":65,"code":99238,"language":67,"meta":68,"style":68},"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",[34,99240,99241,99265,99289,99294,99299,99304],{"__ignoreMap":68},[72,99242,99243,99245,99247,99249,99251,99253,99255,99257,99259,99261,99263],{"class":74,"line":75},[72,99244,93723],{"class":82},[72,99246,609],{"class":78},[72,99248,93419],{"class":82},[72,99250,772],{"class":362},[72,99252,932],{"class":82},[72,99254,1077],{"class":362},[72,99256,93424],{"class":82},[72,99258,634],{"class":362},[72,99260,932],{"class":82},[72,99262,847],{"class":362},[72,99264,570],{"class":82},[72,99266,99267,99269,99271,99273,99275,99277,99279,99281,99283,99285,99287],{"class":74,"line":370},[72,99268,98604],{"class":82},[72,99270,609],{"class":78},[72,99272,93419],{"class":82},[72,99274,891],{"class":362},[72,99276,932],{"class":82},[72,99278,1196],{"class":362},[72,99280,93424],{"class":82},[72,99282,634],{"class":362},[72,99284,932],{"class":82},[72,99286,847],{"class":362},[72,99288,570],{"class":82},[72,99290,99291],{"class":74,"line":1608},[72,99292,99293],{"class":621},"#vstack 垂直方向进行堆叠\n",[72,99295,99296],{"class":74,"line":1623},[72,99297,99298],{"class":82},"np.vstack((aa,bb))\n",[72,99300,99301],{"class":74,"line":1629},[72,99302,99303],{"class":621},"#与hstack传的参数类似，等价于：\n",[72,99305,99306],{"class":74,"line":1643},[72,99307,99308],{"class":82},"np.vstack([aa,bb])\n",[15,99310,98650],{},[15,99312,99313],{},[1891,99314],{"alt":68,"src":99315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[15,99317,99146],{},[63,99319,99321],{"className":65,"code":99320,"language":67,"meta":68,"style":68},"#两个三行六列\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",[34,99322,99323,99327,99355,99383,99388,99393],{"__ignoreMap":68},[72,99324,99325],{"class":74,"line":75},[72,99326,98705],{"class":621},[72,99328,99329,99331,99333,99335,99337,99339,99341,99343,99345,99347,99349,99351,99353],{"class":74,"line":370},[72,99330,95938],{"class":82},[72,99332,609],{"class":78},[72,99334,93419],{"class":82},[72,99336,772],{"class":362},[72,99338,932],{"class":82},[72,99340,879],{"class":362},[72,99342,93424],{"class":82},[72,99344,640],{"class":362},[72,99346,932],{"class":82},[72,99348,634],{"class":362},[72,99350,932],{"class":82},[72,99352,898],{"class":362},[72,99354,570],{"class":82},[72,99356,99357,99359,99361,99363,99365,99367,99369,99371,99373,99375,99377,99379,99381],{"class":74,"line":1608},[72,99358,98738],{"class":82},[72,99360,609],{"class":78},[72,99362,93419],{"class":82},[72,99364,891],{"class":362},[72,99366,932],{"class":82},[72,99368,98749],{"class":362},[72,99370,93424],{"class":82},[72,99372,640],{"class":362},[72,99374,932],{"class":82},[72,99376,634],{"class":362},[72,99378,932],{"class":82},[72,99380,898],{"class":362},[72,99382,570],{"class":82},[72,99384,99385],{"class":74,"line":1623},[72,99386,99387],{"class":621},"#使用vstack\n",[72,99389,99390],{"class":74,"line":1629},[72,99391,99392],{"class":82},"np.vstack((aaa,bbb)).shape\n",[72,99394,99395],{"class":74,"line":1643},[72,99396,99397],{"class":621},"#输出：（4，3，6）\n",[85,99399,99401],{"id":99400},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[15,99403,99404],{},"该方法是三维数组特有的方法",[15,99406,99407],{},"也就是说",[15,99409,99410],{},"一维数组拼接方法用：concatenate()",[15,99412,99413],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[15,99415,99416],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[15,99418,99419],{},"四维数组及多维数组只能用concatenate进行拼接",[63,99421,99423],{"className":65,"code":99422,"language":67,"meta":68,"style":68},"#两个三行六列\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",[34,99424,99425,99429,99457,99485,99490,99495],{"__ignoreMap":68},[72,99426,99427],{"class":74,"line":75},[72,99428,98705],{"class":621},[72,99430,99431,99433,99435,99437,99439,99441,99443,99445,99447,99449,99451,99453,99455],{"class":74,"line":370},[72,99432,95938],{"class":82},[72,99434,609],{"class":78},[72,99436,93419],{"class":82},[72,99438,772],{"class":362},[72,99440,932],{"class":82},[72,99442,879],{"class":362},[72,99444,93424],{"class":82},[72,99446,640],{"class":362},[72,99448,932],{"class":82},[72,99450,634],{"class":362},[72,99452,932],{"class":82},[72,99454,898],{"class":362},[72,99456,570],{"class":82},[72,99458,99459,99461,99463,99465,99467,99469,99471,99473,99475,99477,99479,99481,99483],{"class":74,"line":1608},[72,99460,98738],{"class":82},[72,99462,609],{"class":78},[72,99464,93419],{"class":82},[72,99466,891],{"class":362},[72,99468,932],{"class":82},[72,99470,98749],{"class":362},[72,99472,93424],{"class":82},[72,99474,640],{"class":362},[72,99476,932],{"class":82},[72,99478,634],{"class":362},[72,99480,932],{"class":82},[72,99482,898],{"class":362},[72,99484,570],{"class":82},[72,99486,99487],{"class":74,"line":1623},[72,99488,99489],{"class":621},"#使用dstack\n",[72,99491,99492],{"class":74,"line":1629},[72,99493,99494],{"class":82},"np.dstack((aaa,bbb)).shape\n",[72,99496,99497],{"class":74,"line":1643},[72,99498,99499],{"class":621},"#结果：（2，3，12）\n",[473,99501,99502],{},"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":68,"searchDepth":370,"depth":370,"links":99504},[99505,99506,99507,99508],{"id":98444,"depth":370,"text":98445},{"id":99058,"depth":370,"text":99059},{"id":99229,"depth":370,"text":99230},{"id":99400,"depth":370,"text":99401},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98436,"description":23802},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99515,"title":99516,"body":99517,"description":23802,"extension":487,"meta":99792,"navigation":490,"path":99793,"seo":99794,"stem":99795,"__hash__":99796},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99518,"toc":99790},[99519,99522,99525,99619,99622,99625,99628,99631,99634,99637,99640,99643,99787],[10,99520,99516],{"id":99521},"_7数组转置",[15,99523,99524],{},"使用transpose()函数",[63,99526,99528],{"className":65,"code":99527,"language":67,"meta":68,"style":68},"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",[34,99529,99530,99540,99564,99569,99574,99579,99584,99592,99596,99600,99605,99610,99615],{"__ignoreMap":68},[72,99531,99532,99534,99536,99538],{"class":74,"line":75},[72,99533,79],{"class":78},[72,99535,31798],{"class":82},[72,99537,31801],{"class":78},[72,99539,31804],{"class":82},[72,99541,99542,99544,99546,99548,99550,99552,99554,99556,99558,99560,99562],{"class":74,"line":370},[72,99543,257],{"class":82},[72,99545,609],{"class":78},[72,99547,32135],{"class":82},[72,99549,772],{"class":362},[72,99551,932],{"class":82},[72,99553,1077],{"class":362},[72,99555,93424],{"class":82},[72,99557,847],{"class":362},[72,99559,932],{"class":82},[72,99561,634],{"class":362},[72,99563,570],{"class":82},[72,99565,99566],{"class":74,"line":1608},[72,99567,99568],{"class":621},"#二维数组转置\n",[72,99570,99571],{"class":74,"line":1623},[72,99572,99573],{"class":621},"#调用transpose()函数\n",[72,99575,99576],{"class":74,"line":1629},[72,99577,99578],{"class":82},"a.transpose()\n",[72,99580,99581],{"class":74,"line":1643},[72,99582,99583],{"class":621},"#对于二维数组也可以采用.T来实现\n",[72,99585,99586,99589],{"class":74,"line":1649},[72,99587,99588],{"class":82},"a.T",[72,99590,99591],{"class":621},"#与上述代码一样\n",[72,99593,99594],{"class":74,"line":1740},[72,99595,93981],{"class":621},[72,99597,99598],{"class":74,"line":1746},[72,99599,94345],{"class":366},[72,99601,99602],{"class":74,"line":1758},[72,99603,99604],{"class":366},"array([[ 1,  4,  7, 10],\n",[72,99606,99607],{"class":74,"line":2041},[72,99608,99609],{"class":366},"       [ 2,  5,  8, 11],\n",[72,99611,99612],{"class":74,"line":2046},[72,99613,99614],{"class":366},"       [ 3,  6,  9, 12]])\n",[72,99616,99617],{"class":74,"line":2052},[72,99618,94345],{"class":366},[15,99620,99621],{},"也可以使用np.transpose()的形式",[15,99623,99624],{},"#多维数组进行转置 np.transpose()",[15,99626,99627],{},"#对二维数组也可以使用np.transpose()进行转置",[15,99629,99630],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[15,99632,99633],{},"第二个参数，维度可以理解为用axis中的数来理解",[15,99635,99636],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[15,99638,99639],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[15,99641,99642],{},"四维及以上的数组也是一样的道理",[63,99644,99646],{"className":65,"code":99645,"language":67,"meta":68,"style":68},"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",[34,99647,99648,99676,99681,99686,99691,99709,99714,99746,99751,99756,99761,99782],{"__ignoreMap":68},[72,99649,99650,99652,99654,99656,99658,99660,99662,99664,99666,99668,99670,99672,99674],{"class":74,"line":75},[72,99651,1374],{"class":82},[72,99653,609],{"class":78},[72,99655,93419],{"class":82},[72,99657,772],{"class":362},[72,99659,932],{"class":82},[72,99661,879],{"class":362},[72,99663,93424],{"class":82},[72,99665,634],{"class":362},[72,99667,932],{"class":82},[72,99669,898],{"class":362},[72,99671,932],{"class":82},[72,99673,640],{"class":362},[72,99675,570],{"class":82},[72,99677,99678],{"class":74,"line":370},[72,99679,99680],{"class":82},"x.shape\n",[72,99682,99683],{"class":74,"line":1608},[72,99684,99685],{"class":621},"#结果：（3,6,2）\n",[72,99687,99688],{"class":74,"line":1623},[72,99689,99690],{"class":621},"#使用np.transpose()进行转置 变为(2,6,3)\n",[72,99692,99693,99696,99698,99700,99702,99704,99706],{"class":74,"line":1629},[72,99694,99695],{"class":82},"np.transpose(x,(",[72,99697,640],{"class":362},[72,99699,932],{"class":82},[72,99701,772],{"class":362},[72,99703,932],{"class":82},[72,99705,747],{"class":362},[72,99707,99708],{"class":82},")).shape\n",[72,99710,99711],{"class":74,"line":1643},[72,99712,99713],{"class":621},"#结果：(2,6,3)\n",[72,99715,99716,99718,99720,99722,99724,99726,99728,99730,99732,99734,99736,99738,99740,99742,99744],{"class":74,"line":1649},[72,99717,98923],{"class":82},[72,99719,609],{"class":78},[72,99721,93419],{"class":82},[72,99723,772],{"class":362},[72,99725,932],{"class":82},[72,99727,879],{"class":362},[72,99729,93424],{"class":82},[72,99731,634],{"class":362},[72,99733,932],{"class":82},[72,99735,640],{"class":362},[72,99737,932],{"class":82},[72,99739,772],{"class":362},[72,99741,932],{"class":82},[72,99743,898],{"class":362},[72,99745,570],{"class":82},[72,99747,99748],{"class":74,"line":1740},[72,99749,99750],{"class":82},"aaaa.shape\n",[72,99752,99753],{"class":74,"line":1746},[72,99754,99755],{"class":621},"#结果：（3，2，1，6）\n",[72,99757,99758],{"class":74,"line":1758},[72,99759,99760],{"class":621},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[72,99762,99763,99766,99768,99770,99772,99774,99776,99778,99780],{"class":74,"line":2041},[72,99764,99765],{"class":82},"np.transpose(aaaa,(",[72,99767,772],{"class":362},[72,99769,932],{"class":82},[72,99771,640],{"class":362},[72,99773,932],{"class":82},[72,99775,747],{"class":362},[72,99777,932],{"class":82},[72,99779,634],{"class":362},[72,99781,99708],{"class":82},[72,99783,99784],{"class":74,"line":2046},[72,99785,99786],{"class":621},"#结果：(2,1,3,6)\n",[473,99788,99789],{},"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":68,"searchDepth":370,"depth":370,"links":99791},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99516,"description":23802},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99798,"title":99799,"body":99800,"description":23802,"extension":487,"meta":100534,"navigation":490,"path":100535,"seo":100536,"stem":100537,"__hash__":100538},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99801,"toc":100532},[99802,99805,99808,99811,99814,99817,99820,99823,99826,99935,99938,99941,100529],[10,99803,99799],{"id":99804},"_8数组分割",[15,99806,99807],{},"split分割",[15,99809,99810],{},"numpy.split(ary,indics_or_sections,axis)",[15,99812,99813],{},"解释：",[15,99815,99816],{},"ary:被分割的数组",[15,99818,99819],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[15,99821,99822],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[15,99824,99825],{},"①一维数组的分割",[63,99827,99829],{"className":65,"code":99828,"language":67,"meta":68,"style":68},"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",[34,99830,99831,99847,99852,99861,99865,99870,99878,99882,99887,99892,99905,99909,99914,99926,99930],{"__ignoreMap":68},[72,99832,99833,99835,99837,99839,99841,99843,99845],{"class":74,"line":75},[72,99834,257],{"class":82},[72,99836,609],{"class":78},[72,99838,93419],{"class":82},[72,99840,772],{"class":362},[72,99842,932],{"class":82},[72,99844,974],{"class":362},[72,99846,570],{"class":82},[72,99848,99849],{"class":74,"line":370},[72,99850,99851],{"class":621},"#如果传入整数，必须能够平分，否则会报错\n",[72,99853,99854,99857,99859],{"class":74,"line":1608},[72,99855,99856],{"class":82},"np.split(a,",[72,99858,640],{"class":362},[72,99860,570],{"class":82},[72,99862,99863],{"class":74,"line":1623},[72,99864,93981],{"class":621},[72,99866,99867],{"class":74,"line":1629},[72,99868,99869],{"class":621},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[72,99871,99872,99874,99876],{"class":74,"line":1643},[72,99873,99856],{"class":82},[72,99875,847],{"class":362},[72,99877,570],{"class":82},[72,99879,99880],{"class":74,"line":1649},[72,99881,93981],{"class":621},[72,99883,99884],{"class":74,"line":1740},[72,99885,99886],{"class":621},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[72,99888,99889],{"class":74,"line":1746},[72,99890,99891],{"class":621},"#传入数组\n",[72,99893,99894,99897,99899,99901,99903],{"class":74,"line":1758},[72,99895,99896],{"class":82},"np.split(a,[",[72,99898,634],{"class":362},[72,99900,932],{"class":82},[72,99902,873],{"class":362},[72,99904,5085],{"class":82},[72,99906,99907],{"class":74,"line":2041},[72,99908,93981],{"class":621},[72,99910,99911],{"class":74,"line":2046},[72,99912,99913],{"class":621},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[72,99915,99916,99918,99920,99922,99924],{"class":74,"line":2052},[72,99917,99896],{"class":82},[72,99919,873],{"class":362},[72,99921,932],{"class":82},[72,99923,923],{"class":362},[72,99925,5085],{"class":82},[72,99927,99928],{"class":74,"line":2057},[72,99929,93981],{"class":621},[72,99931,99932],{"class":74,"line":2071},[72,99933,99934],{"class":621},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[15,99936,99937],{},"②二维数组的分割",[15,99939,99940],{},"使用split()",[63,99942,99944],{"className":65,"code":99943,"language":67,"meta":68,"style":68},"#二维数组分割\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",[34,99945,99946,99951,99975,99980,99989,99993,99997,100002,100007,100012,100017,100022,100027,100032,100036,100049,100053,100057,100061,100065,100069,100074,100079,100084,100088,100093,100109,100113,100117,100122,100127,100132,100137,100142,100147,100152,100157,100162,100167,100172,100177,100182,100187,100192,100197,100202,100207,100211,100215,100235,100239,100243,100248,100253,100258,100263,100268,100273,100278,100283,100288,100293,100298,100303,100308,100313,100318,100323,100328,100333,100337,100342,100351,100355,100359,100363,100367,100371,100375,100379,100383,100387,100396,100400,100404,100408,100412,100416,100420,100424,100428,100432,100436,100440,100444,100448,100452,100456,100460,100464,100468,100472,100476,100480,100493,100497,100501,100505,100509,100513,100517,100521,100525],{"__ignoreMap":68},[72,99947,99948],{"class":74,"line":75},[72,99949,99950],{"class":621},"#二维数组分割\n",[72,99952,99953,99955,99957,99959,99961,99963,99965,99967,99969,99971,99973],{"class":74,"line":370},[72,99954,93723],{"class":82},[72,99956,609],{"class":78},[72,99958,93419],{"class":82},[72,99960,772],{"class":362},[72,99962,932],{"class":82},[72,99964,879],{"class":362},[72,99966,93424],{"class":82},[72,99968,898],{"class":362},[72,99970,932],{"class":82},[72,99972,898],{"class":362},[72,99974,570],{"class":82},[72,99976,99977],{"class":74,"line":1608},[72,99978,99979],{"class":621},"#默认axis=0  传入整数平均分,按行来的\n",[72,99981,99982,99985,99987],{"class":74,"line":1623},[72,99983,99984],{"class":82},"np.split(aa,",[72,99986,634],{"class":362},[72,99988,570],{"class":82},[72,99990,99991],{"class":74,"line":1629},[72,99992,96181],{"class":621},[72,99994,99995],{"class":74,"line":1643},[72,99996,94345],{"class":366},[72,99998,99999],{"class":74,"line":1649},[72,100000,100001],{"class":366},"[array([[ 1,  2,  3,  4,  5,  6],\n",[72,100003,100004],{"class":74,"line":1740},[72,100005,100006],{"class":366},"        [ 7,  8,  9, 10, 11, 12]]),\n",[72,100008,100009],{"class":74,"line":1746},[72,100010,100011],{"class":366}," array([[13, 14, 15, 16, 17, 18],\n",[72,100013,100014],{"class":74,"line":1758},[72,100015,100016],{"class":366},"        [19, 20, 21, 22, 23, 24]]),\n",[72,100018,100019],{"class":74,"line":2041},[72,100020,100021],{"class":366}," array([[25, 26, 27, 28, 29, 30],\n",[72,100023,100024],{"class":74,"line":2046},[72,100025,100026],{"class":366},"        [31, 32, 33, 34, 35, 36]])]\n",[72,100028,100029],{"class":74,"line":2052},[72,100030,100031],{"class":366}," '''\n",[72,100033,100034],{"class":74,"line":2057},[72,100035,99891],{"class":621},[72,100037,100038,100041,100043,100045,100047],{"class":74,"line":2071},[72,100039,100040],{"class":82},"np.split(aa,[",[72,100042,640],{"class":362},[72,100044,932],{"class":82},[72,100046,873],{"class":362},[72,100048,5085],{"class":82},[72,100050,100051],{"class":74,"line":2076},[72,100052,96181],{"class":621},[72,100054,100055],{"class":74,"line":2082},[72,100056,94345],{"class":366},[72,100058,100059],{"class":74,"line":2103},[72,100060,100001],{"class":366},[72,100062,100063],{"class":74,"line":2108},[72,100064,100006],{"class":366},[72,100066,100067],{"class":74,"line":2122},[72,100068,100011],{"class":366},[72,100070,100071],{"class":74,"line":2127},[72,100072,100073],{"class":366},"        [19, 20, 21, 22, 23, 24],\n",[72,100075,100076],{"class":74,"line":2156},[72,100077,100078],{"class":366},"        [25, 26, 27, 28, 29, 30]]),\n",[72,100080,100081],{"class":74,"line":2161},[72,100082,100083],{"class":366}," array([[31, 32, 33, 34, 35, 36]])]\n",[72,100085,100086],{"class":74,"line":2178},[72,100087,94345],{"class":366},[72,100089,100090],{"class":74,"line":2183},[72,100091,100092],{"class":621},"#axis=1 按照列来分\n",[72,100094,100095,100097,100099,100101,100103,100105,100107],{"class":74,"line":2188},[72,100096,99984],{"class":82},[72,100098,634],{"class":362},[72,100100,932],{"class":82},[72,100102,47932],{"class":5642},[72,100104,609],{"class":78},[72,100106,772],{"class":362},[72,100108,570],{"class":82},[72,100110,100111],{"class":74,"line":2193},[72,100112,96181],{"class":621},[72,100114,100115],{"class":74,"line":2207},[72,100116,94345],{"class":366},[72,100118,100119],{"class":74,"line":2212},[72,100120,100121],{"class":366},"[array([[ 1,  2],\n",[72,100123,100124],{"class":74,"line":3005},[72,100125,100126],{"class":366},"        [ 7,  8],\n",[72,100128,100129],{"class":74,"line":3019},[72,100130,100131],{"class":366},"        [13, 14],\n",[72,100133,100134],{"class":74,"line":3027},[72,100135,100136],{"class":366},"        [19, 20],\n",[72,100138,100139],{"class":74,"line":3032},[72,100140,100141],{"class":366},"        [25, 26],\n",[72,100143,100144],{"class":74,"line":3038},[72,100145,100146],{"class":366},"        [31, 32]]),\n",[72,100148,100149],{"class":74,"line":3044},[72,100150,100151],{"class":366}," array([[ 3,  4],\n",[72,100153,100154],{"class":74,"line":3049},[72,100155,100156],{"class":366},"        [ 9, 10],\n",[72,100158,100159],{"class":74,"line":8374},[72,100160,100161],{"class":366},"        [15, 16],\n",[72,100163,100164],{"class":74,"line":8398},[72,100165,100166],{"class":366},"        [21, 22],\n",[72,100168,100169],{"class":74,"line":8403},[72,100170,100171],{"class":366},"        [27, 28],\n",[72,100173,100174],{"class":74,"line":8409},[72,100175,100176],{"class":366},"        [33, 34]]),\n",[72,100178,100179],{"class":74,"line":8436},[72,100180,100181],{"class":366}," array([[ 5,  6],\n",[72,100183,100184],{"class":74,"line":8441},[72,100185,100186],{"class":366},"        [11, 12],\n",[72,100188,100189],{"class":74,"line":8447},[72,100190,100191],{"class":366},"        [17, 18],\n",[72,100193,100194],{"class":74,"line":8459},[72,100195,100196],{"class":366},"        [23, 24],\n",[72,100198,100199],{"class":74,"line":8471},[72,100200,100201],{"class":366},"        [29, 30],\n",[72,100203,100204],{"class":74,"line":8483},[72,100205,100206],{"class":366},"        [35, 36]])]\n",[72,100208,100209],{"class":74,"line":10142},[72,100210,100031],{"class":366},[72,100212,100213],{"class":74,"line":10167},[72,100214,99891],{"class":621},[72,100216,100217,100219,100221,100223,100225,100227,100229,100231,100233],{"class":74,"line":10190},[72,100218,100040],{"class":82},[72,100220,772],{"class":362},[72,100222,932],{"class":82},[72,100224,640],{"class":362},[72,100226,42027],{"class":82},[72,100228,47932],{"class":5642},[72,100230,609],{"class":78},[72,100232,772],{"class":362},[72,100234,570],{"class":82},[72,100236,100237],{"class":74,"line":10214},[72,100238,93981],{"class":621},[72,100240,100241],{"class":74,"line":10219},[72,100242,94345],{"class":366},[72,100244,100245],{"class":74,"line":10224},[72,100246,100247],{"class":366},"[array([[ 1],\n",[72,100249,100250],{"class":74,"line":10229},[72,100251,100252],{"class":366},"        [ 7],\n",[72,100254,100255],{"class":74,"line":10238},[72,100256,100257],{"class":366},"        [13],\n",[72,100259,100260],{"class":74,"line":10243},[72,100261,100262],{"class":366},"        [19],\n",[72,100264,100265],{"class":74,"line":10249},[72,100266,100267],{"class":366},"        [25],\n",[72,100269,100270],{"class":74,"line":10270},[72,100271,100272],{"class":366},"        [31]]),\n",[72,100274,100275],{"class":74,"line":10276},[72,100276,100277],{"class":366}," array([[ 2],\n",[72,100279,100280],{"class":74,"line":10290},[72,100281,100282],{"class":366},"        [ 8],\n",[72,100284,100285],{"class":74,"line":10296},[72,100286,100287],{"class":366},"        [14],\n",[72,100289,100290],{"class":74,"line":10323},[72,100291,100292],{"class":366},"        [20],\n",[72,100294,100295],{"class":74,"line":10332},[72,100296,100297],{"class":366},"        [26],\n",[72,100299,100300],{"class":74,"line":10338},[72,100301,100302],{"class":366},"        [32]]),\n",[72,100304,100305],{"class":74,"line":10346},[72,100306,100307],{"class":366}," array([[ 3,  4,  5,  6],\n",[72,100309,100310],{"class":74,"line":10351},[72,100311,100312],{"class":366},"        [ 9, 10, 11, 12],\n",[72,100314,100315],{"class":74,"line":17030},[72,100316,100317],{"class":366},"        [15, 16, 17, 18],\n",[72,100319,100320],{"class":74,"line":17036},[72,100321,100322],{"class":366},"        [21, 22, 23, 24],\n",[72,100324,100325],{"class":74,"line":17059},[72,100326,100327],{"class":366},"        [27, 28, 29, 30],\n",[72,100329,100330],{"class":74,"line":17065},[72,100331,100332],{"class":366},"        [33, 34, 35, 36]])]\n",[72,100334,100335],{"class":74,"line":17088},[72,100336,94345],{"class":366},[72,100338,100339],{"class":74,"line":17102},[72,100340,100341],{"class":621},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[72,100343,100344,100347,100349],{"class":74,"line":17122},[72,100345,100346],{"class":82},"np.vsplit(aa,",[72,100348,634],{"class":362},[72,100350,570],{"class":82},[72,100352,100353],{"class":74,"line":17128},[72,100354,93981],{"class":621},[72,100356,100357],{"class":74,"line":17139},[72,100358,94345],{"class":366},[72,100360,100361],{"class":74,"line":17162},[72,100362,100001],{"class":366},[72,100364,100365],{"class":74,"line":17184},[72,100366,100006],{"class":366},[72,100368,100369],{"class":74,"line":17189},[72,100370,100011],{"class":366},[72,100372,100373],{"class":74,"line":17195},[72,100374,100016],{"class":366},[72,100376,100377],{"class":74,"line":17209},[72,100378,100021],{"class":366},[72,100380,100381],{"class":74,"line":17222},[72,100382,100026],{"class":366},[72,100384,100385],{"class":74,"line":17227},[72,100386,94345],{"class":366},[72,100388,100389,100392,100394],{"class":74,"line":17241},[72,100390,100391],{"class":82},"np.hsplit(aa,",[72,100393,634],{"class":362},[72,100395,570],{"class":82},[72,100397,100398],{"class":74,"line":17246},[72,100399,93981],{"class":621},[72,100401,100402],{"class":74,"line":17252},[72,100403,94345],{"class":366},[72,100405,100406],{"class":74,"line":17257},[72,100407,100121],{"class":366},[72,100409,100410],{"class":74,"line":17271},[72,100411,100126],{"class":366},[72,100413,100414],{"class":74,"line":17276},[72,100415,100131],{"class":366},[72,100417,100418],{"class":74,"line":17281},[72,100419,100136],{"class":366},[72,100421,100422],{"class":74,"line":17295},[72,100423,100141],{"class":366},[72,100425,100426],{"class":74,"line":17307},[72,100427,100146],{"class":366},[72,100429,100430],{"class":74,"line":17312},[72,100431,100151],{"class":366},[72,100433,100434],{"class":74,"line":17325},[72,100435,100156],{"class":366},[72,100437,100438],{"class":74,"line":17330},[72,100439,100161],{"class":366},[72,100441,100442],{"class":74,"line":17335},[72,100443,100166],{"class":366},[72,100445,100446],{"class":74,"line":17340},[72,100447,100171],{"class":366},[72,100449,100450],{"class":74,"line":17353},[72,100451,100176],{"class":366},[72,100453,100454],{"class":74,"line":17358},[72,100455,100181],{"class":366},[72,100457,100458],{"class":74,"line":33051},[72,100459,100186],{"class":366},[72,100461,100462],{"class":74,"line":33057},[72,100463,100191],{"class":366},[72,100465,100466],{"class":74,"line":33063},[72,100467,100196],{"class":366},[72,100469,100470],{"class":74,"line":33069},[72,100471,100201],{"class":366},[72,100473,100474],{"class":74,"line":33075},[72,100475,100206],{"class":366},[72,100477,100478],{"class":74,"line":33086},[72,100479,94345],{"class":366},[72,100481,100482,100485,100487,100489,100491],{"class":74,"line":33092},[72,100483,100484],{"class":82},"np.vsplit(aa,[",[72,100486,640],{"class":362},[72,100488,932],{"class":82},[72,100490,873],{"class":362},[72,100492,5085],{"class":82},[72,100494,100495],{"class":74,"line":33112},[72,100496,93981],{"class":621},[72,100498,100499],{"class":74,"line":33118},[72,100500,94345],{"class":366},[72,100502,100503],{"class":74,"line":33129},[72,100504,100001],{"class":366},[72,100506,100507],{"class":74,"line":33135},[72,100508,100006],{"class":366},[72,100510,100511],{"class":74,"line":33141},[72,100512,100011],{"class":366},[72,100514,100515],{"class":74,"line":33147},[72,100516,100073],{"class":366},[72,100518,100519],{"class":74,"line":33153},[72,100520,100078],{"class":366},[72,100522,100523],{"class":74,"line":33159},[72,100524,100083],{"class":366},[72,100526,100527],{"class":74,"line":33165},[72,100528,100031],{"class":366},[473,100530,100531],{},"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":68,"searchDepth":370,"depth":370,"links":100533},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99799,"description":23802},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100540,"title":100541,"body":100542,"description":23802,"extension":487,"meta":101036,"navigation":490,"path":101037,"seo":101038,"stem":101039,"__hash__":101040},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100543,"toc":101027},[100544,100547,100550,100575,100579,100638,100690,100694,100696,100732,100786,100788,100826,100897,100901,100906,100910,100913,100946,100949,100953,100956,100959,100962,100965,100970,100974,100977,100980,100983,100986,100991,100995,101000,101003,101024],[10,100545,100541],{"id":100546},"_9数学函数",[15,100548,100549],{},"补充回顾：python的列表推导式",[63,100551,100553],{"className":65,"code":100552,"language":67,"meta":68,"style":68},"[1\u002Fi for i in a]\n",[34,100554,100555],{"__ignoreMap":68},[72,100556,100557,100559,100561,100563,100566,100568,100570,100572],{"class":74,"line":75},[72,100558,1444],{"class":82},[72,100560,772],{"class":362},[72,100562,1138],{"class":78},[72,100564,100565],{"class":82},"i ",[72,100567,3453],{"class":78},[72,100569,9864],{"class":82},[72,100571,26465],{"class":78},[72,100573,100574],{"class":82}," a]\n",[85,100576,100578],{"id":100577},"_91-求倒数","9.1 求倒数",[63,100580,100582],{"className":65,"code":100581,"language":67,"meta":68,"style":68},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[34,100583,100584,100589,100617,100629],{"__ignoreMap":68},[72,100585,100586],{"class":74,"line":75},[72,100587,100588],{"class":621},"#数组求倒数\n",[72,100590,100591,100593,100595,100597,100599,100601,100603,100605,100607,100609,100611,100613,100615],{"class":74,"line":370},[72,100592,257],{"class":82},[72,100594,609],{"class":78},[72,100596,1444],{"class":82},[72,100598,772],{"class":362},[72,100600,932],{"class":82},[72,100602,640],{"class":362},[72,100604,932],{"class":82},[72,100606,634],{"class":362},[72,100608,932],{"class":82},[72,100610,847],{"class":362},[72,100612,932],{"class":82},[72,100614,873],{"class":362},[72,100616,33664],{"class":82},[72,100618,100619,100621,100623,100626],{"class":74,"line":1608},[72,100620,817],{"class":82},[72,100622,609],{"class":78},[72,100624,100625],{"class":82},"np.array(a)",[72,100627,100628],{"class":621},"#将列表转换为数组\n",[72,100630,100631,100633,100635],{"class":74,"line":1623},[72,100632,772],{"class":362},[72,100634,1138],{"class":78},[72,100636,100637],{"class":82},"b\n",[63,100639,100641],{"className":65,"code":100640,"language":67,"meta":68,"style":68},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[34,100642,100643,100671,100680,100685],{"__ignoreMap":68},[72,100644,100645,100647,100649,100651,100653,100655,100657,100659,100661,100663,100665,100667,100669],{"class":74,"line":75},[72,100646,257],{"class":82},[72,100648,609],{"class":78},[72,100650,1444],{"class":82},[72,100652,772],{"class":362},[72,100654,932],{"class":82},[72,100656,640],{"class":362},[72,100658,932],{"class":82},[72,100660,634],{"class":362},[72,100662,932],{"class":82},[72,100664,847],{"class":362},[72,100666,932],{"class":82},[72,100668,873],{"class":362},[72,100670,33664],{"class":82},[72,100672,100673,100675,100677],{"class":74,"line":370},[72,100674,817],{"class":82},[72,100676,609],{"class":78},[72,100678,100679],{"class":82},"np.array(a)\n",[72,100681,100682],{"class":74,"line":1608},[72,100683,100684],{"class":621},"#调用numpy中的函数reciprocal()\n",[72,100686,100687],{"class":74,"line":1623},[72,100688,100689],{"class":82},"np.reciprocal(b)\n",[85,100691,100693],{"id":100692},"_92-求平方","9.2 求平方",[15,100695,94947],{},[63,100697,100699],{"className":65,"code":100698,"language":67,"meta":68,"style":68},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[34,100700,100701,100706,100711,100727],{"__ignoreMap":68},[72,100702,100703],{"class":74,"line":75},[72,100704,100705],{"class":621},"#square()，求平方\n",[72,100707,100708],{"class":74,"line":370},[72,100709,100710],{"class":621},"#一维数组\n",[72,100712,100713,100715,100717,100719,100721,100723,100725],{"class":74,"line":1608},[72,100714,257],{"class":82},[72,100716,609],{"class":78},[72,100718,93419],{"class":82},[72,100720,772],{"class":362},[72,100722,932],{"class":82},[72,100724,1000],{"class":362},[72,100726,570],{"class":82},[72,100728,100729],{"class":74,"line":1623},[72,100730,100731],{"class":82},"np.square(a)\n",[63,100733,100735],{"className":65,"code":100734,"language":67,"meta":68,"style":68},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[34,100736,100737,100742,100747,100768],{"__ignoreMap":68},[72,100738,100739],{"class":74,"line":75},[72,100740,100741],{"class":621},"#或者通过循环遍历的形式来计算\n",[72,100743,100744],{"class":74,"line":370},[72,100745,100746],{"class":621},"#这是一个列表\n",[72,100748,100749,100752,100754,100756,100758,100760,100762,100765],{"class":74,"line":1608},[72,100750,100751],{"class":82},"[i",[72,100753,1009],{"class":78},[72,100755,100565],{"class":82},[72,100757,3453],{"class":78},[72,100759,9864],{"class":82},[72,100761,26465],{"class":78},[72,100763,100764],{"class":82}," a]",[72,100766,100767],{"class":621},"#这个求完之后在数列当中\n",[72,100769,100770,100773,100775,100777,100779,100781,100783],{"class":74,"line":1623},[72,100771,100772],{"class":82},"np.array([i",[72,100774,1009],{"class":78},[72,100776,100565],{"class":82},[72,100778,3453],{"class":78},[72,100780,9864],{"class":82},[72,100782,26465],{"class":78},[72,100784,100785],{"class":82}," a])\n",[15,100787,93708],{},[63,100789,100791],{"className":65,"code":100790,"language":67,"meta":68,"style":68},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[34,100792,100793,100797,100821],{"__ignoreMap":68},[72,100794,100795],{"class":74,"line":75},[72,100796,93718],{"class":621},[72,100798,100799,100801,100803,100805,100807,100809,100811,100813,100815,100817,100819],{"class":74,"line":370},[72,100800,93723],{"class":82},[72,100802,609],{"class":78},[72,100804,93419],{"class":82},[72,100806,772],{"class":362},[72,100808,932],{"class":82},[72,100810,1077],{"class":362},[72,100812,93424],{"class":82},[72,100814,847],{"class":362},[72,100816,932],{"class":82},[72,100818,634],{"class":362},[72,100820,570],{"class":82},[72,100822,100823],{"class":74,"line":1608},[72,100824,100825],{"class":82},"np.square(aa)\n",[63,100827,100829],{"className":65,"code":100828,"language":67,"meta":68,"style":68},"#传统的方式\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",[34,100830,100831,100836,100845,100861,100877,100892],{"__ignoreMap":68},[72,100832,100833],{"class":74,"line":75},[72,100834,100835],{"class":621},"#传统的方式\n",[72,100837,100838,100840,100842],{"class":74,"line":370},[72,100839,98604],{"class":82},[72,100841,609],{"class":78},[72,100843,100844],{"class":82},"np.empty_like(aa)\n",[72,100846,100847,100849,100851,100853,100855,100857,100859],{"class":74,"line":1608},[72,100848,3453],{"class":78},[72,100850,9864],{"class":82},[72,100852,26465],{"class":78},[72,100854,32861],{"class":362},[72,100856,564],{"class":82},[72,100858,847],{"class":362},[72,100860,31204],{"class":82},[72,100862,100863,100865,100867,100869,100871,100873,100875],{"class":74,"line":1623},[72,100864,3629],{"class":78},[72,100866,9926],{"class":82},[72,100868,26465],{"class":78},[72,100870,32861],{"class":362},[72,100872,564],{"class":82},[72,100874,634],{"class":362},[72,100876,31204],{"class":82},[72,100878,100879,100882,100884,100887,100889],{"class":74,"line":1629},[72,100880,100881],{"class":82},"        bb[i,j]",[72,100883,609],{"class":78},[72,100885,100886],{"class":82},"aa[i,j]",[72,100888,1009],{"class":78},[72,100890,100891],{"class":82},"aa[i,j]\n",[72,100893,100894],{"class":74,"line":1643},[72,100895,100896],{"class":82},"bb\n",[85,100898,100900],{"id":100899},"_93-求各元素的符号","9.3 求各元素的符号",[15,100902,100903],{},[1891,100904],{"alt":68,"src":100905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[85,100907,100909],{"id":100908},"_94-modf函数","9.4 modf函数",[15,100911,100912],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[63,100914,100916],{"className":65,"code":100915,"language":67,"meta":68,"style":68},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[34,100917,100918,100941],{"__ignoreMap":68},[72,100919,100920,100922,100924,100926,100928,100930,100932,100934,100936,100939],{"class":74,"line":75},[72,100921,257],{"class":82},[72,100923,609],{"class":78},[72,100925,93419],{"class":82},[72,100927,1086],{"class":78},[72,100929,1000],{"class":362},[72,100931,932],{"class":82},[72,100933,1000],{"class":362},[72,100935,932],{"class":82},[72,100937,100938],{"class":362},"0.3",[72,100940,570],{"class":82},[72,100942,100943],{"class":74,"line":370},[72,100944,100945],{"class":82},"np.modf(a)\n",[15,100947,100948],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[85,100950,100952],{"id":100951},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[15,100954,100955],{},"np.cell()",[15,100957,100958],{},"np.floor()",[15,100960,100961],{},"np.rint()",[15,100963,100964],{},"对各元素分别向上取整、向下取整、四舍五入",[15,100966,100967],{},[1891,100968],{"alt":68,"src":100969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[85,100971,100973],{"id":100972},"_96-around函数","9.6 around()函数",[15,100975,100976],{},"around()函数也可以实现对数的小数位数进行操作",[15,100978,100979],{},"其中的参数：",[15,100981,100982],{},"1.要传的数组",[15,100984,100985],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[15,100987,100988],{},[1891,100989],{"alt":68,"src":100990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[85,100992,100994],{"id":100993},"_97-三角函数","9.7 三角函数",[15,100996,100997],{},[1891,100998],{"alt":68,"src":100999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[15,101001,101002],{},"引入图像模块非常重要",[63,101004,101006],{"className":65,"code":101005,"language":67,"meta":68,"style":68},"from matplotlib import pyplot as plt\n",[34,101007,101008],{"__ignoreMap":68},[72,101009,101010,101012,101015,101017,101020,101022],{"class":74,"line":75},[72,101011,31155],{"class":78},[72,101013,101014],{"class":82}," matplotlib ",[72,101016,79],{"class":78},[72,101018,101019],{"class":82}," pyplot ",[72,101021,31801],{"class":78},[72,101023,31855],{"class":82},[473,101025,101026],{},"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":68,"searchDepth":370,"depth":370,"links":101028},[101029,101030,101031,101032,101033,101034,101035],{"id":100577,"depth":370,"text":100578},{"id":100692,"depth":370,"text":100693},{"id":100899,"depth":370,"text":100900},{"id":100908,"depth":370,"text":100909},{"id":100951,"depth":370,"text":100952},{"id":100972,"depth":370,"text":100973},{"id":100993,"depth":370,"text":100994},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100541,"description":23802},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":101042,"title":101043,"body":101044,"description":23802,"extension":487,"meta":101048,"navigation":490,"path":101049,"seo":101050,"stem":101051,"__hash__":101052},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":101045,"toc":101046},[],{"title":68,"searchDepth":370,"depth":370,"links":101047},[],{"category":50838},"\u002Fwiki\u002F2025-08-14-numpy",{"title":101043,"description":23802},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":101054,"title":101055,"body":101056,"description":68,"extension":487,"meta":103051,"navigation":490,"path":103052,"seo":103053,"stem":103054,"__hash__":103055},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":101057,"toc":103027},[101058,101061,101065,101068,101071,101077,101080,101103,101106,101138,101141,101182,101186,101189,101282,101285,101329,101332,101349,101352,101366,101369,101372,101417,101420,101454,101458,101461,101467,101472,101491,101495,101498,101564,101567,101585,101589,101592,101621,101630,101636,101640,101643,101649,101660,101664,101667,101694,101697,101976,101979,101982,101992,101995,101998,102020,102027,102030,102048,102051,102054,102068,102076,102079,102105,102111,102114,102117,102127,102139,102159,102168,102188,102198,102222,102235,102249,102254,102295,102312,102337,102349,102369,102375,102420,102439,102456,102469,102485,102492,102504,102513,102548,102568,102593,102606,102630,102645,102670,102673,102694,102703,102706,102717,102721,102724,102730,102742,102749,102753,102756,102768,102771,102785,102788,102798,102808,102811,102851,102854,102858,102864,102867,102881,102885,102888,102921,102925,102928,102951,102959,102962,102968,102974,102977,102980,103008,103012,103015,103021,103024],[10,101059,101055],{"id":101060},"_1环境安装与第一个-mujoco-程序",[85,101062,101064],{"id":101063},"_1目标说明","1.目标说明",[15,101066,101067],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[15,101069,101070],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[63,101072,101075],{"className":101073,"code":101074,"language":127,"meta":68},[125],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[34,101076,101074],{"__ignoreMap":68},[15,101078,101079],{},"需要掌握:",[22,101081,101082,101085,101088,101093,101098],{},[25,101083,101084],{},"Fedora 44 下 MuJoCo 的系统依赖",[25,101086,101087],{},"Python 虚拟环境创建",[25,101089,101090],{},[34,101091,101092],{},"mujoco.MjModel",[25,101094,101095],{},[34,101096,101097],{},"mujoco.MjData",[25,101099,101100],{},[34,101101,101102],{},"mujoco.mj_step(model, data)",[15,101104,101105],{},"MuJoCo 中最重要的两个对象:",[154,101107,101108,101118],{},[157,101109,101110],{},[160,101111,101112,101115],{},[163,101113,101114],{"align":165},"对象",[163,101116,101117],{"align":165},"含义",[174,101119,101120,101129],{},[160,101121,101122,101126],{},[179,101123,101124],{"align":165},[34,101125,194],{},[179,101127,101128],{"align":165},"模型结构，来自 XML，基本不随时间变化",[160,101130,101131,101135],{},[179,101132,101133],{"align":165},[34,101134,207],{},[179,101136,101137],{"align":165},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[15,101139,101140],{},"可以先用一个类比理解：",[154,101142,101143,101153],{},[157,101144,101145],{},[160,101146,101147,101150],{},[163,101148,101149],{"align":165},"类比",[163,101151,101152],{"align":165},"MuJoCo 对象",[174,101154,101155,101164,101173],{},[160,101156,101157,101160],{},[179,101158,101159],{"align":165},"游戏地图和角色配置",[179,101161,101162],{"align":165},[34,101163,194],{},[160,101165,101166,101169],{},[179,101167,101168],{"align":165},"游戏运行到当前帧的状态",[179,101170,101171],{"align":165},[34,101172,207],{},[160,101174,101175,101178],{},[179,101176,101177],{"align":165},"前进一帧",[179,101179,101180],{"align":165},[34,101181,101102],{},[85,101183,101185],{"id":101184},"_2环境与依赖安装","2.环境与依赖安装",[15,101187,101188],{},"Fedora 44 系统依赖:",[63,101190,101192],{"className":349,"code":101191,"language":351,"meta":68,"style":68},"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",[34,101193,101194,101206,101219,101232,101242,101252,101271],{"__ignoreMap":68},[72,101195,101196,101198,101200,101202,101204],{"class":74,"line":75},[72,101197,24998],{"class":358},[72,101199,26737],{"class":366},[72,101201,24256],{"class":366},[72,101203,26822],{"class":362},[72,101205,25100],{"class":362},[72,101207,101208,101211,101214,101217],{"class":74,"line":370},[72,101209,101210],{"class":366},"  python3",[72,101212,101213],{"class":366}," python3-pip",[72,101215,101216],{"class":366}," python3-virtualenv",[72,101218,25100],{"class":362},[72,101220,101221,101224,101227,101230],{"class":74,"line":1608},[72,101222,101223],{"class":366},"  mesa-libGL",[72,101225,101226],{"class":366}," mesa-libGLU",[72,101228,101229],{"class":366}," mesa-dri-drivers",[72,101231,25100],{"class":362},[72,101233,101234,101237,101240],{"class":74,"line":1623},[72,101235,101236],{"class":366},"  libglvnd-glx",[72,101238,101239],{"class":366}," libglvnd-opengl",[72,101241,25100],{"class":362},[72,101243,101244,101247,101250],{"class":74,"line":1629},[72,101245,101246],{"class":366},"  glfw",[72,101248,101249],{"class":366}," glfw-devel",[72,101251,25100],{"class":362},[72,101253,101254,101257,101260,101263,101266,101269],{"class":74,"line":1643},[72,101255,101256],{"class":366},"  libX11",[72,101258,101259],{"class":366}," libXcursor",[72,101261,101262],{"class":366}," libXi",[72,101264,101265],{"class":366}," libXinerama",[72,101267,101268],{"class":366}," libXrandr",[72,101270,25100],{"class":362},[72,101272,101273,101276,101279],{"class":74,"line":1649},[72,101274,101275],{"class":366},"  gcc",[72,101277,101278],{"class":366}," gcc-c++",[72,101280,101281],{"class":366}," make\n",[15,101283,101284],{},"创建 Python 环境:",[63,101286,101288],{"className":349,"code":101287,"language":351,"meta":68,"style":68},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[34,101289,101290,101304,101312],{"__ignoreMap":68},[72,101291,101292,101295,101298,101301],{"class":74,"line":75},[72,101293,101294],{"class":358},"python3",[72,101296,101297],{"class":362}," -m",[72,101299,101300],{"class":366}," venv",[72,101302,101303],{"class":366}," .venv\n",[72,101305,101306,101309],{"class":74,"line":370},[72,101307,101308],{"class":362},"source",[72,101310,101311],{"class":366}," .venv\u002Fbin\u002Factivate\n",[72,101313,101314,101316,101318,101321,101323,101326],{"class":74,"line":1608},[72,101315,67],{"class":358},[72,101317,101297],{"class":362},[72,101319,101320],{"class":366}," pip",[72,101322,24256],{"class":366},[72,101324,101325],{"class":362}," --upgrade",[72,101327,101328],{"class":366}," pip\n",[15,101330,101331],{},"pip 安装:",[63,101333,101335],{"className":349,"code":101334,"language":351,"meta":68,"style":68},"pip install \"mujoco>=2.3\" numpy\n",[34,101336,101337],{"__ignoreMap":68},[72,101338,101339,101341,101343,101346],{"class":74,"line":75},[72,101340,24253],{"class":358},[72,101342,24256],{"class":366},[72,101344,101345],{"class":366}," \"mujoco>=2.3\"",[72,101347,101348],{"class":366}," numpy\n",[15,101350,101351],{},"安装完成后，先做最小检查：",[63,101353,101355],{"className":349,"code":101354,"language":351,"meta":68,"style":68},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[34,101356,101357],{"__ignoreMap":68},[72,101358,101359,101361,101363],{"class":74,"line":75},[72,101360,67],{"class":358},[72,101362,30779],{"class":362},[72,101364,101365],{"class":366}," \"import mujoco; print(mujoco.__version__)\"\n",[15,101367,101368],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[15,101370,101371],{},"conda 安装:",[63,101373,101375],{"className":349,"code":101374,"language":351,"meta":68,"style":68},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[34,101376,101377,101397,101407],{"__ignoreMap":68},[72,101378,101379,101381,101383,101385,101388,101391,101394],{"class":74,"line":75},[72,101380,30751],{"class":358},[72,101382,29598],{"class":366},[72,101384,25537],{"class":362},[72,101386,101387],{"class":366}," mujoco-study",[72,101389,101390],{"class":366}," python=",[72,101392,101393],{"class":362},"3.10",[72,101395,101396],{"class":362}," -y\n",[72,101398,101399,101401,101404],{"class":74,"line":370},[72,101400,30751],{"class":358},[72,101402,101403],{"class":366}," activate",[72,101405,101406],{"class":366}," mujoco-study\n",[72,101408,101409,101411,101413,101415],{"class":74,"line":1608},[72,101410,24253],{"class":358},[72,101412,24256],{"class":366},[72,101414,101345],{"class":366},[72,101416,101348],{"class":366},[15,101418,101419],{},"版本冲突说明:",[22,101421,101422,101427,101436,101444],{},[25,101423,101424,101425,28807],{},"不要安装 ",[34,101426,60],{},[25,101428,101429,101430,101432,101433,101435],{},"如果旧项目里同时安装了 ",[34,101431,60],{}," 和 ",[34,101434,110],{},"，建议新建干净虚拟环境。",[25,101437,101438,101440,101441,28807],{},[34,101439,53],{}," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[34,101442,101443],{},"~\u002F.mujoco\u002Fmujoco210",[25,101445,101446,101447,462,101450,101453],{},"离屏渲染可能涉及 OpenGL 后端，",[34,101448,101449],{},"MUJOCO_GL=egl",[34,101451,101452],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[85,101455,101457],{"id":101456},"_3核心概念解释","3.核心概念解释",[15,101459,101460],{},"MuJoCo 的基本执行流程:",[63,101462,101465],{"className":101463,"code":101464,"language":127,"meta":68},[125],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[34,101466,101464],{"__ignoreMap":68},[15,101468,101469,101471],{},[34,101470,194],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[15,101473,101474,101476,101477,37,101480,37,101483,37,101486,37,101488,28807],{},[34,101475,207],{}," 存放仿真运行时状态，例如 ",[34,101478,101479],{},"data.time",[34,101481,101482],{},"data.qpos",[34,101484,101485],{},"data.qvel",[34,101487,452],{},[34,101489,101490],{},"data.xpos",[531,101492,101494],{"id":101493},"xml-是什么","XML 是什么",[15,101496,101497],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[63,101499,101501],{"className":53485,"code":101500,"language":53487,"meta":68,"style":68},"\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",[34,101502,101503,101525,101556],{"__ignoreMap":68},[72,101504,101505,101507,101509,101511,101513,101515,101518,101520,101523],{"class":74,"line":75},[72,101506,1464],{"class":82},[72,101508,52218],{"class":51718},[72,101510,15346],{"class":358},[72,101512,609],{"class":82},[72,101514,53909],{"class":366},[72,101516,101517],{"class":358}," pos",[72,101519,609],{"class":82},[72,101521,101522],{"class":366},"\"0 0 1\"",[72,101524,51725],{"class":82},[72,101526,101527,101529,101532,101534,101536,101539,101541,101543,101545,101548,101550,101553],{"class":74,"line":370},[72,101528,52562],{"class":82},[72,101530,101531],{"class":51718},"geom",[72,101533,15346],{"class":358},[72,101535,609],{"class":82},[72,101537,101538],{"class":366},"\"box_geom\"",[72,101540,54242],{"class":358},[72,101542,609],{"class":82},[72,101544,53909],{"class":366},[72,101546,101547],{"class":358}," size",[72,101549,609],{"class":82},[72,101551,101552],{"class":366},"\"0.1 0.1 0.1\"",[72,101554,101555],{"class":82},"\u002F>\n",[72,101557,101558,101560,101562],{"class":74,"line":1608},[72,101559,52203],{"class":82},[72,101561,52218],{"class":51718},[72,101563,51725],{"class":82},[15,101565,101566],{},"这段意思是：",[22,101568,101569,101575,101582],{},[25,101570,101571,101572,101574],{},"创建一个叫 ",[34,101573,54132],{}," 的刚体。",[25,101576,101577,101578,101581],{},"它初始放在 ",[34,101579,101580],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[25,101583,101584],{},"它里面有一个盒子形状的几何体。",[531,101586,101588],{"id":101587},"timestep-是什么","timestep 是什么",[15,101590,101591],{},"XML 里的：",[63,101593,101595],{"className":53485,"code":101594,"language":53487,"meta":68,"style":68},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[34,101596,101597],{"__ignoreMap":68},[72,101598,101599,101601,101603,101606,101608,101611,101614,101616,101619],{"class":74,"line":75},[72,101600,1464],{"class":82},[72,101602,69584],{"class":51718},[72,101604,101605],{"class":358}," timestep",[72,101607,609],{"class":82},[72,101609,101610],{"class":366},"\"0.01\"",[72,101612,101613],{"class":358}," gravity",[72,101615,609],{"class":82},[72,101617,101618],{"class":366},"\"0 0 -9.81\"",[72,101620,101555],{"class":82},[15,101622,101623,101624,101626,101627,101629],{},"表示每调用一次 ",[34,101625,220],{},"，仿真时间前进 ",[34,101628,39404],{}," 秒。循环 100 次，大约就是 1 秒：",[63,101631,101634],{"className":101632,"code":101633,"language":127,"meta":68},[125],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[34,101635,101633],{"__ignoreMap":68},[531,101637,101639],{"id":101638},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[15,101641,101642],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[63,101644,101647],{"className":101645,"code":101646,"language":127,"meta":68},[125],"x y z qw qx qy qz\n",[34,101648,101646],{"__ignoreMap":68},[15,101650,101651,101652,101655,101656,101659],{},"表示一个自由刚体的位置和姿态。其中 ",[34,101653,101654],{},"x y z"," 是位置，",[34,101657,101658],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[85,101661,101663],{"id":101662},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[15,101665,101666],{},"新建文件:",[63,101668,101670],{"className":349,"code":101669,"language":351,"meta":68,"style":68},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[34,101671,101672,101680,101686],{"__ignoreMap":68},[72,101673,101674,101676,101678],{"class":74,"line":75},[72,101675,359],{"class":358},[72,101677,363],{"class":362},[72,101679,367],{"class":366},[72,101681,101682,101684],{"class":74,"line":370},[72,101683,373],{"class":362},[72,101685,367],{"class":366},[72,101687,101688,101691],{"class":74,"line":1608},[72,101689,101690],{"class":358},"touch",[72,101692,101693],{"class":366}," ch1_first_sim.py\n",[15,101695,101696],{},"写入:",[63,101698,101700],{"className":65,"code":101699,"language":67,"meta":68,"style":68},"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",[34,101701,101702,101708,101712,101716,101726,101731,101736,101740,101745,101750,101754,101759,101764,101769,101774,101779,101784,101788,101792,101796,101809,101823,101833,101837,101849,101861,101873,101885,101897,101901,101918,101923,101927,101938,101949,101953,101957,101971],{"__ignoreMap":68},[72,101703,101704,101706],{"class":74,"line":75},[72,101705,79],{"class":78},[72,101707,83],{"class":82},[72,101709,101710],{"class":74,"line":370},[72,101711,2828],{"emptyLinePlaceholder":490},[72,101713,101714],{"class":74,"line":1608},[72,101715,2828],{"emptyLinePlaceholder":490},[72,101717,101718,101721,101723],{"class":74,"line":1623},[72,101719,101720],{"class":362},"XML",[72,101722,13990],{"class":78},[72,101724,101725],{"class":366}," \"\"\"\n",[72,101727,101728],{"class":74,"line":1629},[72,101729,101730],{"class":366},"\u003Cmujoco model=\"first_sim\">\n",[72,101732,101733],{"class":74,"line":1643},[72,101734,101735],{"class":366},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[72,101737,101738],{"class":74,"line":1649},[72,101739,2828],{"emptyLinePlaceholder":490},[72,101741,101742],{"class":74,"line":1740},[72,101743,101744],{"class":366},"  \u003Cworldbody>\n",[72,101746,101747],{"class":74,"line":1746},[72,101748,101749],{"class":366},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[72,101751,101752],{"class":74,"line":1758},[72,101753,2828],{"emptyLinePlaceholder":490},[72,101755,101756],{"class":74,"line":2041},[72,101757,101758],{"class":366},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[72,101760,101761],{"class":74,"line":2046},[72,101762,101763],{"class":366},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[72,101765,101766],{"class":74,"line":2052},[72,101767,101768],{"class":366},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[72,101770,101771],{"class":74,"line":2057},[72,101772,101773],{"class":366},"    \u003C\u002Fbody>\n",[72,101775,101776],{"class":74,"line":2071},[72,101777,101778],{"class":366},"  \u003C\u002Fworldbody>\n",[72,101780,101781],{"class":74,"line":2076},[72,101782,101783],{"class":366},"\u003C\u002Fmujoco>\n",[72,101785,101786],{"class":74,"line":2082},[72,101787,96115],{"class":366},[72,101789,101790],{"class":74,"line":2103},[72,101791,2828],{"emptyLinePlaceholder":490},[72,101793,101794],{"class":74,"line":2108},[72,101795,2828],{"emptyLinePlaceholder":490},[72,101797,101798,101800,101802,101805,101807],{"class":74,"line":2122},[72,101799,32365],{"class":78},[72,101801,2401],{"class":358},[72,101803,101804],{"class":82},"() -> ",[72,101806,96103],{"class":362},[72,101808,4167],{"class":82},[72,101810,101811,101814,101816,101819,101821],{"class":74,"line":2127},[72,101812,101813],{"class":82},"    model ",[72,101815,609],{"class":78},[72,101817,101818],{"class":82}," mujoco.MjModel.from_xml_string(",[72,101820,101720],{"class":362},[72,101822,570],{"class":82},[72,101824,101825,101828,101830],{"class":74,"line":2156},[72,101826,101827],{"class":82},"    data ",[72,101829,609],{"class":78},[72,101831,101832],{"class":82}," mujoco.MjData(model)\n",[72,101834,101835],{"class":74,"line":2161},[72,101836,2828],{"emptyLinePlaceholder":490},[72,101838,101839,101841,101843,101846],{"class":74,"line":2178},[72,101840,31717],{"class":362},[72,101842,564],{"class":82},[72,101844,101845],{"class":366},"\"nq:\"",[72,101847,101848],{"class":82},", model.nq)\n",[72,101850,101851,101853,101855,101858],{"class":74,"line":2183},[72,101852,31717],{"class":362},[72,101854,564],{"class":82},[72,101856,101857],{"class":366},"\"nv:\"",[72,101859,101860],{"class":82},", model.nv)\n",[72,101862,101863,101865,101867,101870],{"class":74,"line":2188},[72,101864,31717],{"class":362},[72,101866,564],{"class":82},[72,101868,101869],{"class":366},"\"nu:\"",[72,101871,101872],{"class":82},", model.nu)\n",[72,101874,101875,101877,101879,101882],{"class":74,"line":2193},[72,101876,31717],{"class":362},[72,101878,564],{"class":82},[72,101880,101881],{"class":366},"\"initial time:\"",[72,101883,101884],{"class":82},", data.time)\n",[72,101886,101887,101889,101891,101894],{"class":74,"line":2207},[72,101888,31717],{"class":362},[72,101890,564],{"class":82},[72,101892,101893],{"class":366},"\"initial qpos:\"",[72,101895,101896],{"class":82},", data.qpos.copy())\n",[72,101898,101899],{"class":74,"line":2212},[72,101900,2828],{"emptyLinePlaceholder":490},[72,101902,101903,101905,101908,101910,101912,101914,101916],{"class":74,"line":3005},[72,101904,3629],{"class":78},[72,101906,101907],{"class":82}," _ ",[72,101909,26465],{"class":78},[72,101911,32861],{"class":362},[72,101913,564],{"class":82},[72,101915,865],{"class":362},[72,101917,31204],{"class":82},[72,101919,101920],{"class":74,"line":3019},[72,101921,101922],{"class":82},"        mujoco.mj_step(model, data)\n",[72,101924,101925],{"class":74,"line":3027},[72,101926,2828],{"emptyLinePlaceholder":490},[72,101928,101929,101931,101933,101936],{"class":74,"line":3032},[72,101930,31717],{"class":362},[72,101932,564],{"class":82},[72,101934,101935],{"class":366},"\"final time:\"",[72,101937,101884],{"class":82},[72,101939,101940,101942,101944,101947],{"class":74,"line":3038},[72,101941,31717],{"class":362},[72,101943,564],{"class":82},[72,101945,101946],{"class":366},"\"final qpos:\"",[72,101948,101896],{"class":82},[72,101950,101951],{"class":74,"line":3044},[72,101952,2828],{"emptyLinePlaceholder":490},[72,101954,101955],{"class":74,"line":3049},[72,101956,2828],{"emptyLinePlaceholder":490},[72,101958,101959,101961,101963,101966,101969],{"class":74,"line":8374},[72,101960,1960],{"class":78},[72,101962,31638],{"class":362},[72,101964,101965],{"class":78}," ==",[72,101967,101968],{"class":366}," \"__main__\"",[72,101970,4167],{"class":82},[72,101972,101973],{"class":74,"line":8398},[72,101974,101975],{"class":82},"    main()\n",[531,101977,101978],{"id":101978},"代码逐段解释",[15,101980,101981],{},"导入库：",[63,101983,101984],{"className":65,"code":66,"language":67,"meta":68,"style":68},[34,101985,101986],{"__ignoreMap":68},[72,101987,101988,101990],{"class":74,"line":75},[72,101989,79],{"class":78},[72,101991,83],{"class":82},[15,101993,101994],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[15,101996,101997],{},"定义 XML：",[63,101999,102001],{"className":65,"code":102000,"language":67,"meta":68,"style":68},"XML = \"\"\"\n...\n\"\"\"\n",[34,102002,102003,102011,102016],{"__ignoreMap":68},[72,102004,102005,102007,102009],{"class":74,"line":75},[72,102006,101720],{"class":362},[72,102008,13990],{"class":78},[72,102010,101725],{"class":366},[72,102012,102013],{"class":74,"line":370},[72,102014,102015],{"class":366},"...\n",[72,102017,102018],{"class":74,"line":1608},[72,102019,96115],{"class":366},[15,102021,102022,102023,102026],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[34,102024,102025],{},"freejoint"," 的方块。",[15,102028,102029],{},"编译模型：",[63,102031,102033],{"className":65,"code":102032,"language":67,"meta":68,"style":68},"model = mujoco.MjModel.from_xml_string(XML)\n",[34,102034,102035],{"__ignoreMap":68},[72,102036,102037,102040,102042,102044,102046],{"class":74,"line":75},[72,102038,102039],{"class":82},"model ",[72,102041,609],{"class":78},[72,102043,101818],{"class":82},[72,102045,101720],{"class":362},[72,102047,570],{"class":82},[15,102049,102050],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[15,102052,102053],{},"创建数据：",[63,102055,102057],{"className":65,"code":102056,"language":67,"meta":68,"style":68},"data = mujoco.MjData(model)\n",[34,102058,102059],{"__ignoreMap":68},[72,102060,102061,102064,102066],{"class":74,"line":75},[72,102062,102063],{"class":82},"data ",[72,102065,609],{"class":78},[72,102067,101832],{"class":82},[15,102069,102070,102072,102073,102075],{},[34,102071,33819],{}," 会保存仿真当前状态。刚创建时，时间是 ",[34,102074,747],{},"，方块还在初始位置。",[15,102077,102078],{},"推进仿真：",[63,102080,102082],{"className":65,"code":102081,"language":67,"meta":68,"style":68},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[34,102083,102084,102100],{"__ignoreMap":68},[72,102085,102086,102088,102090,102092,102094,102096,102098],{"class":74,"line":75},[72,102087,3453],{"class":78},[72,102089,101907],{"class":82},[72,102091,26465],{"class":78},[72,102093,32861],{"class":362},[72,102095,564],{"class":82},[72,102097,865],{"class":362},[72,102099,31204],{"class":82},[72,102101,102102],{"class":74,"line":370},[72,102103,102104],{"class":82},"    mujoco.mj_step(model, data)\n",[15,102106,102107,102108,102110],{},"每次 ",[34,102109,220],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[531,102112,102113],{"id":102113},"代码逐行细讲",[15,102115,102116],{},"下面把完整代码按新手视角拆开讲。",[63,102118,102119],{"className":65,"code":66,"language":67,"meta":68,"style":68},[34,102120,102121],{"__ignoreMap":68},[72,102122,102123,102125],{"class":74,"line":75},[72,102124,79],{"class":78},[72,102126,83],{"class":82},[15,102128,102129,102131,102132,37,102134,37,102136,28807],{},[34,102130,79],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[34,102133,101092],{},[34,102135,101097],{},[34,102137,102138],{},"mujoco.mj_step",[63,102140,102141],{"className":65,"code":102000,"language":67,"meta":68,"style":68},[34,102142,102143,102151,102155],{"__ignoreMap":68},[72,102144,102145,102147,102149],{"class":74,"line":75},[72,102146,101720],{"class":362},[72,102148,13990],{"class":78},[72,102150,101725],{"class":366},[72,102152,102153],{"class":74,"line":370},[72,102154,102015],{"class":366},[72,102156,102157],{"class":74,"line":1608},[72,102158,96115],{"class":366},[15,102160,102161,102163,102164,102167],{},[34,102162,101720],{}," 是一个变量名。右边的三引号 ",[34,102165,102166],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[63,102169,102170],{"className":53485,"code":101730,"language":53487,"meta":68,"style":68},[34,102171,102172],{"__ignoreMap":68},[72,102173,102174,102176,102178,102181,102183,102186],{"class":74,"line":75},[72,102175,1464],{"class":82},[72,102177,110],{"class":51718},[72,102179,102180],{"class":358}," model",[72,102182,609],{"class":82},[72,102184,102185],{"class":366},"\"first_sim\"",[72,102187,51725],{"class":82},[15,102189,102190,102191,102194,102195,28807],{},"这是 XML 的根标签。",[34,102192,102193],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[34,102196,102197],{},"first_sim",[63,102199,102200],{"className":53485,"code":101594,"language":53487,"meta":68,"style":68},[34,102201,102202],{"__ignoreMap":68},[72,102203,102204,102206,102208,102210,102212,102214,102216,102218,102220],{"class":74,"line":75},[72,102205,1464],{"class":82},[72,102207,69584],{"class":51718},[72,102209,101605],{"class":358},[72,102211,609],{"class":82},[72,102213,101610],{"class":366},[72,102215,101613],{"class":358},[72,102217,609],{"class":82},[72,102219,101618],{"class":366},[72,102221,101555],{"class":82},[15,102223,102224,102226,102227,102230,102231,102234],{},[34,102225,69584],{}," 用来设置仿真参数。",[34,102228,102229],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[34,102232,102233],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[63,102236,102238],{"className":53485,"code":102237,"language":53487,"meta":68,"style":68},"\u003Cworldbody>\n",[34,102239,102240],{"__ignoreMap":68},[72,102241,102242,102244,102247],{"class":74,"line":75},[72,102243,1464],{"class":82},[72,102245,102246],{"class":51718},"worldbody",[72,102248,51725],{"class":82},[15,102250,102251,102253],{},[34,102252,102246],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[63,102255,102257],{"className":53485,"code":102256,"language":53487,"meta":68,"style":68},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[34,102258,102259],{"__ignoreMap":68},[72,102260,102261,102263,102265,102267,102269,102272,102274,102276,102279,102281,102283,102286,102288,102290,102293],{"class":74,"line":75},[72,102262,1464],{"class":82},[72,102264,101531],{"class":51718},[72,102266,15346],{"class":358},[72,102268,609],{"class":82},[72,102270,102271],{"class":366},"\"floor\"",[72,102273,54242],{"class":358},[72,102275,609],{"class":82},[72,102277,102278],{"class":366},"\"plane\"",[72,102280,101547],{"class":358},[72,102282,609],{"class":82},[72,102284,102285],{"class":366},"\"2 2 0.1\"",[72,102287,79185],{"class":358},[72,102289,609],{"class":82},[72,102291,102292],{"class":366},"\"0.8 0.8 0.8 1\"",[72,102294,101555],{"class":82},[15,102296,102297,102298,102300,102301,102304,102305,102308,102309,102311],{},"这行创建地面。",[34,102299,101531],{}," 是几何体。",[34,102302,102303],{},"name=\"floor\""," 是名字。",[34,102306,102307],{},"type=\"plane\""," 表示平面。",[34,102310,55528],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[63,102313,102315],{"className":53485,"code":102314,"language":53487,"meta":68,"style":68},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[34,102316,102317],{"__ignoreMap":68},[72,102318,102319,102321,102323,102325,102327,102329,102331,102333,102335],{"class":74,"line":75},[72,102320,1464],{"class":82},[72,102322,52218],{"class":51718},[72,102324,15346],{"class":358},[72,102326,609],{"class":82},[72,102328,53909],{"class":366},[72,102330,101517],{"class":358},[72,102332,609],{"class":82},[72,102334,101522],{"class":366},[72,102336,51725],{"class":82},[15,102338,102339,102340,28807,102342,102345,102346,102348],{},"这行创建一个刚体，名字叫 ",[34,102341,54132],{},[34,102343,102344],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[34,102347,101580],{},"，也就是离地面 1 米高。",[63,102350,102352],{"className":53485,"code":102351,"language":53487,"meta":68,"style":68},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[34,102353,102354],{"__ignoreMap":68},[72,102355,102356,102358,102360,102362,102364,102367],{"class":74,"line":75},[72,102357,1464],{"class":82},[72,102359,102025],{"class":51718},[72,102361,15346],{"class":358},[72,102363,609],{"class":82},[72,102365,102366],{"class":366},"\"box_free\"",[72,102368,101555],{"class":82},[15,102370,102371,102372,102374],{},"这行很重要。",[34,102373,102025],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[63,102376,102378],{"className":53485,"code":102377,"language":53487,"meta":68,"style":68},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[34,102379,102380],{"__ignoreMap":68},[72,102381,102382,102384,102386,102388,102390,102392,102394,102396,102398,102400,102402,102404,102407,102409,102411,102413,102415,102418],{"class":74,"line":75},[72,102383,1464],{"class":82},[72,102385,101531],{"class":51718},[72,102387,15346],{"class":358},[72,102389,609],{"class":82},[72,102391,101538],{"class":366},[72,102393,54242],{"class":358},[72,102395,609],{"class":82},[72,102397,53909],{"class":366},[72,102399,101547],{"class":358},[72,102401,609],{"class":82},[72,102403,101552],{"class":366},[72,102405,102406],{"class":358}," mass",[72,102408,609],{"class":82},[72,102410,4106],{"class":366},[72,102412,79185],{"class":358},[72,102414,609],{"class":82},[72,102416,102417],{"class":366},"\"1 0 0 1\"",[72,102419,101555],{"class":82},[15,102421,102422,102423,102426,102427,102430,102431,102434,102435,102438],{},"这行给 box body 添加一个盒子形状。",[34,102424,102425],{},"type=\"box\""," 表示形状是盒子。",[34,102428,102429],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[34,102432,102433],{},"mass=\"1\""," 表示质量是 1。",[34,102436,102437],{},"rgba=\"1 0 0 1\""," 表示红色。",[63,102440,102442],{"className":65,"code":102441,"language":67,"meta":68,"style":68},"def main() -> None:\n",[34,102443,102444],{"__ignoreMap":68},[72,102445,102446,102448,102450,102452,102454],{"class":74,"line":75},[72,102447,32365],{"class":78},[72,102449,2401],{"class":358},[72,102451,101804],{"class":82},[72,102453,96103],{"class":362},[72,102455,4167],{"class":82},[15,102457,102458,102460,102461,102464,102465,102468],{},[34,102459,32365],{}," 用来定义函数。这里定义了一个叫 ",[34,102462,102463],{},"main"," 的函数。",[34,102466,102467],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[63,102470,102471],{"className":65,"code":102032,"language":67,"meta":68,"style":68},[34,102472,102473],{"__ignoreMap":68},[72,102474,102475,102477,102479,102481,102483],{"class":74,"line":75},[72,102476,102039],{"class":82},[72,102478,609],{"class":78},[72,102480,101818],{"class":82},[72,102482,101720],{"class":362},[72,102484,570],{"class":82},[15,102486,102487,102488,102491],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[34,102489,102490],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[63,102493,102494],{"className":65,"code":102056,"language":67,"meta":68,"style":68},[34,102495,102496],{"__ignoreMap":68},[72,102497,102498,102500,102502],{"class":74,"line":75},[72,102499,102063],{"class":82},[72,102501,609],{"class":78},[72,102503,101832],{"class":82},[15,102505,102506,102507,102509,102510,102512],{},"这行创建仿真数据。",[34,102508,33819],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[34,102511,33819],{}," 都会变化。",[63,102514,102516],{"className":65,"code":102515,"language":67,"meta":68,"style":68},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[34,102517,102518,102528,102538],{"__ignoreMap":68},[72,102519,102520,102522,102524,102526],{"class":74,"line":75},[72,102521,30833],{"class":362},[72,102523,564],{"class":82},[72,102525,101845],{"class":366},[72,102527,101848],{"class":82},[72,102529,102530,102532,102534,102536],{"class":74,"line":370},[72,102531,30833],{"class":362},[72,102533,564],{"class":82},[72,102535,101857],{"class":366},[72,102537,101860],{"class":82},[72,102539,102540,102542,102544,102546],{"class":74,"line":1608},[72,102541,30833],{"class":362},[72,102543,564],{"class":82},[72,102545,101869],{"class":366},[72,102547,101872],{"class":82},[15,102549,102550,102552,102553,102556,102557,102560,102561,102563,102564,102567],{},[34,102551,30833],{}," 用来输出信息。",[34,102554,102555],{},"model.nq"," 是位置变量数量，",[34,102558,102559],{},"model.nv"," 是速度变量数量，",[34,102562,456],{}," 是控制输入数量。这个例子没有电机，所以 ",[34,102565,102566],{},"nu"," 是 0。",[63,102569,102571],{"className":65,"code":102570,"language":67,"meta":68,"style":68},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[34,102572,102573,102583],{"__ignoreMap":68},[72,102574,102575,102577,102579,102581],{"class":74,"line":75},[72,102576,30833],{"class":362},[72,102578,564],{"class":82},[72,102580,101881],{"class":366},[72,102582,101884],{"class":82},[72,102584,102585,102587,102589,102591],{"class":74,"line":370},[72,102586,30833],{"class":362},[72,102588,564],{"class":82},[72,102590,101893],{"class":366},[72,102592,101896],{"class":82},[15,102594,102595,102596,102598,102599,102601,102602,102605],{},"这里打印初始时间和初始位置。",[34,102597,101479],{}," 一开始是 0。",[34,102600,101482],{}," 是位置数组。",[34,102603,102604],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[63,102607,102608],{"className":65,"code":102081,"language":67,"meta":68,"style":68},[34,102609,102610,102626],{"__ignoreMap":68},[72,102611,102612,102614,102616,102618,102620,102622,102624],{"class":74,"line":75},[72,102613,3453],{"class":78},[72,102615,101907],{"class":82},[72,102617,26465],{"class":78},[72,102619,32861],{"class":362},[72,102621,564],{"class":82},[72,102623,865],{"class":362},[72,102625,31204],{"class":82},[72,102627,102628],{"class":74,"line":370},[72,102629,102104],{"class":82},[15,102631,102632,102634,102635,102638,102639,102641,102642,102644],{},[34,102633,3453],{}," 是循环。",[34,102636,102637],{},"range(100)"," 表示循环 100 次。",[34,102640,1546],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[34,102643,220],{},"，仿真就前进一步。",[63,102646,102648],{"className":65,"code":102647,"language":67,"meta":68,"style":68},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[34,102649,102650,102660],{"__ignoreMap":68},[72,102651,102652,102654,102656,102658],{"class":74,"line":75},[72,102653,30833],{"class":362},[72,102655,564],{"class":82},[72,102657,101935],{"class":366},[72,102659,101884],{"class":82},[72,102661,102662,102664,102666,102668],{"class":74,"line":370},[72,102663,30833],{"class":362},[72,102665,564],{"class":82},[72,102667,101946],{"class":366},[72,102669,101896],{"class":82},[15,102671,102672],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[63,102674,102676],{"className":65,"code":102675,"language":67,"meta":68,"style":68},"if __name__ == \"__main__\":\n    main()\n",[34,102677,102678,102690],{"__ignoreMap":68},[72,102679,102680,102682,102684,102686,102688],{"class":74,"line":75},[72,102681,1960],{"class":78},[72,102683,31638],{"class":362},[72,102685,101965],{"class":78},[72,102687,101968],{"class":366},[72,102689,4167],{"class":82},[72,102691,102692],{"class":74,"line":370},[72,102693,101975],{"class":82},[15,102695,102696,102697,102700,102701,28807],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[34,102698,102699],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[34,102702,102699],{},[15,102704,102705],{},"运行:",[63,102707,102709],{"className":349,"code":102708,"language":351,"meta":68,"style":68},"python ch1_first_sim.py\n",[34,102710,102711],{"__ignoreMap":68},[72,102712,102713,102715],{"class":74,"line":75},[72,102714,67],{"class":358},[72,102716,101693],{"class":366},[85,102718,102720],{"id":102719},"_5运行结果说明","5.运行结果说明",[15,102722,102723],{},"你应该看到类似输出:",[63,102725,102728],{"className":102726,"code":102727,"language":127,"meta":68},[125],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[34,102729,102727],{"__ignoreMap":68},[15,102731,102732,102734,102735,102738,102739,28807],{},[34,102733,102025],{}," 有 7 个位置变量: ",[34,102736,102737],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[34,102740,102741],{},"vx vy vz wx wy wz",[15,102743,102744,102745,102748],{},"你还会看到 ",[34,102746,102747],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[85,102750,102752],{"id":102751},"_6验证步骤","6.验证步骤",[15,102754,102755],{},"确认版本:",[63,102757,102758],{"className":349,"code":101354,"language":351,"meta":68,"style":68},[34,102759,102760],{"__ignoreMap":68},[72,102761,102762,102764,102766],{"class":74,"line":75},[72,102763,67],{"class":358},[72,102765,30779],{"class":362},[72,102767,101365],{"class":366},[15,102769,102770],{},"确认导入的是官方 bindings:",[63,102772,102774],{"className":349,"code":102773,"language":351,"meta":68,"style":68},"python -c \"import mujoco; print(mujoco)\"\n",[34,102775,102776],{"__ignoreMap":68},[72,102777,102778,102780,102782],{"class":74,"line":75},[72,102779,67],{"class":358},[72,102781,30779],{"class":362},[72,102783,102784],{"class":366}," \"import mujoco; print(mujoco)\"\n",[15,102786,102787],{},"运行程序:",[63,102789,102790],{"className":349,"code":102708,"language":351,"meta":68,"style":68},[34,102791,102792],{"__ignoreMap":68},[72,102793,102794,102796],{"class":74,"line":75},[72,102795,67],{"class":358},[72,102797,101693],{"class":366},[15,102799,102800,102801,102804,102805,28807],{},"检查 ",[34,102802,102803],{},"final time"," 是否约等于 ",[34,102806,102807],{},"1.0",[15,102809,102810],{},"再做几个小实验：",[22,102812,102813,102823,102831,102844],{},[25,102814,102815,102816,102818,102819,102822],{},"把 ",[34,102817,102344],{}," 改成 ",[34,102820,102821],{},"pos=\"0 0 2\"","，观察初始高度变化。",[25,102824,102815,102825,102818,102827,102830],{},[34,102826,102233],{},[34,102828,102829],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[25,102832,102815,102833,102818,102835,102838,102839,102841,102842,28807],{},[34,102834,102229],{},[34,102836,102837],{},"timestep=\"0.005\"","，观察 100 步后的 ",[34,102840,102803],{}," 是否变成约 ",[34,102843,35747],{},[25,102845,102846,102847,102850],{},"删除 ",[34,102848,102849],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[15,102852,102853],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[85,102855,102857],{"id":102856},"_7常见错误与解决方案","7.常见错误与解决方案",[531,102859,102861],{"id":102860},"modulenotfounderror-no-module-named-mujoco",[34,102862,102863],{},"ModuleNotFoundError: No module named 'mujoco'",[15,102865,102866],{},"解决:",[63,102868,102870],{"className":349,"code":102869,"language":351,"meta":68,"style":68},"pip install \"mujoco>=2.3\"\n",[34,102871,102872],{"__ignoreMap":68},[72,102873,102874,102876,102878],{"class":74,"line":75},[72,102875,24253],{"class":358},[72,102877,24256],{"class":366},[72,102879,102880],{"class":366}," \"mujoco>=2.3\"\n",[531,102882,102884],{"id":102883},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[15,102886,102887],{},"先安装系统依赖:",[63,102889,102891],{"className":349,"code":102890,"language":351,"meta":68,"style":68},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[34,102892,102893],{"__ignoreMap":68},[72,102894,102895,102897,102899,102901,102903,102906,102908,102911,102913,102916,102918],{"class":74,"line":75},[72,102896,24998],{"class":358},[72,102898,26737],{"class":366},[72,102900,24256],{"class":366},[72,102902,26822],{"class":362},[72,102904,102905],{"class":366}," mesa-libGL",[72,102907,101229],{"class":366},[72,102909,102910],{"class":366}," glfw",[72,102912,101249],{"class":366},[72,102914,102915],{"class":366}," libX11",[72,102917,101262],{"class":366},[72,102919,102920],{"class":366}," libXrandr\n",[531,102922,102924],{"id":102923},"xml-解析失败","XML 解析失败",[15,102926,102927],{},"检查:",[22,102929,102930,102933,102936,102942],{},[25,102931,102932],{},"标签是否闭合",[25,102934,102935],{},"属性是否带引号",[25,102937,102938,102939],{},"根节点是否是 ",[34,102940,102941],{},"\u003Cmujoco>",[25,102943,102944,102946,102947,102950],{},[34,102945,52218],{}," 是否放在 ",[34,102948,102949],{},"\u003Cworldbody>"," 内部",[531,102952,102954,102956,102957],{"id":102953},"final-time-不是严格等于-10",[34,102955,102803],{}," 不是严格等于 ",[34,102958,102807],{},[15,102960,102961],{},"这通常不是错误。浮点数计算可能得到：",[63,102963,102966],{"className":102964,"code":102965,"language":127,"meta":68},[125],"1.0000000000000007\n",[34,102967,102965],{"__ignoreMap":68},[15,102969,102970,102971,102973],{},"只要接近 ",[34,102972,102807],{}," 就正常。",[531,102975,102976],{"id":102976},"方块没有掉下来",[15,102978,102979],{},"检查：",[22,102981,102982,102988,102994,102999],{},[25,102983,102984,102985],{},"方块 body 里是否有 ",[34,102986,102987],{},"\u003Cfreejoint\u002F>",[25,102989,102990,102991],{},"重力是否是 ",[34,102992,102993],{},"0 0 -9.81",[25,102995,102996,102997],{},"是否真的调用了 ",[34,102998,101102],{},[25,103000,103001,103002,103004,103005],{},"你看的是否是 ",[34,103003,102747],{},"，不是 ",[34,103006,103007],{},"initial qpos",[85,103009,103011],{"id":103010},"_8本章小结","8.本章小结",[15,103013,103014],{},"本章你已经完成了 MuJoCo 的最小闭环：",[63,103016,103019],{"className":103017,"code":103018,"language":127,"meta":68},[125],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[34,103020,103018],{"__ignoreMap":68},[15,103022,103023],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[473,103025,103026],{},"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":68,"searchDepth":370,"depth":370,"links":103028},[103029,103030,103031,103036,103040,103041,103042,103050],{"id":101063,"depth":370,"text":101064},{"id":101184,"depth":370,"text":101185},{"id":101456,"depth":370,"text":101457,"children":103032},[103033,103034,103035],{"id":101493,"depth":1608,"text":101494},{"id":101587,"depth":1608,"text":101588},{"id":101638,"depth":1608,"text":101639},{"id":101662,"depth":370,"text":101663,"children":103037},[103038,103039],{"id":101978,"depth":1608,"text":101978},{"id":102113,"depth":1608,"text":102113},{"id":102719,"depth":370,"text":102720},{"id":102751,"depth":370,"text":102752},{"id":102856,"depth":370,"text":102857,"children":103043},[103044,103045,103046,103047,103049],{"id":102860,"depth":1608,"text":102863},{"id":102883,"depth":1608,"text":102884},{"id":102923,"depth":1608,"text":102924},{"id":102953,"depth":1608,"text":103048},"final time 不是严格等于 1.0",{"id":102976,"depth":1608,"text":102976},{"id":103010,"depth":370,"text":103011},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":101055,"description":68},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":103057,"title":103058,"body":103059,"description":68,"extension":487,"meta":104714,"navigation":490,"path":104715,"seo":104716,"stem":104717,"__hash__":104718},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":103060,"toc":104690},[103061,103064,103066,103069,103072,103089,103184,103187,103193,103195,103197,103221,103224,103238,103241,103282,103284,103297,103299,103302,103350,103362,103365,103368,103374,103387,103454,103457,103476,103479,103482,103488,103490,103499,103502,103506,103515,103597,103606,103610,103616,103630,103640,103642,103972,103975,103987,103989,104000,104002,104005,104023,104026,104029,104047,104058,104061,104076,104086,104088,104109,104126,104146,104152,104192,104208,104224,104230,104233,104257,104273,104278,104308,104325,104350,104353,104368,104377,104392,104401,104416,104423,104425,104434,104447,104454,104457,104496,104503,104505,104557,104559,104565,104568,104575,104582,104585,104587,104605,104608,104611,104645,104657,104659,104662,104684,104687],[10,103062,103058],{"id":103063},"_2xml-与-mjcf-物理建模基础",[85,103065,101064],{"id":101063},[15,103067,103068],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[15,103070,103071],{},"本章结束后，你应该能看懂一个简单模型里：",[22,103073,103074,103077,103080,103083,103086],{},[25,103075,103076],{},"地面在哪里。",[25,103078,103079],{},"物体初始位置在哪里。",[25,103081,103082],{},"几何体是什么形状。",[25,103084,103085],{},"哪些 body 可以自由运动。",[25,103087,103088],{},"如何用名字在 Python 里找到 XML 中的对象。",[154,103090,103091,103101],{},[157,103092,103093],{},[160,103094,103095,103098],{},[163,103096,103097],{"align":165},"标签",[163,103099,103100],{"align":165},"作用",[174,103102,103103,103112,103122,103131,103141,103151,103164,103174],{},[160,103104,103105,103109],{},[179,103106,103107],{"align":165},[34,103108,102941],{},[179,103110,103111],{"align":165},"根节点",[160,103113,103114,103119],{},[179,103115,103116],{"align":165},[34,103117,103118],{},"\u003Coption>",[179,103120,103121],{"align":165},"仿真参数",[160,103123,103124,103128],{},[179,103125,103126],{"align":165},[34,103127,102949],{},[179,103129,103130],{"align":165},"世界中的物体",[160,103132,103133,103138],{},[179,103134,103135],{"align":165},[34,103136,103137],{},"\u003Cbody>",[179,103139,103140],{"align":165},"刚体",[160,103142,103143,103148],{},[179,103144,103145],{"align":165},[34,103146,103147],{},"\u003Cgeom>",[179,103149,103150],{"align":165},"几何体、碰撞体、可视体",[160,103152,103153,103161],{},[179,103154,103155,25400,103158],{"align":165},[34,103156,103157],{},"\u003Cjoint>",[34,103159,103160],{},"\u003Cfreejoint>",[179,103162,103163],{"align":165},"关节",[160,103165,103166,103171],{},[179,103167,103168],{"align":165},[34,103169,103170],{},"\u003Csite>",[179,103172,103173],{"align":165},"标记点",[160,103175,103176,103181],{},[179,103177,103178],{"align":165},[34,103179,103180],{},"\u003Cactuator>",[179,103182,103183],{"align":165},"控制器",[15,103185,103186],{},"初学时可以先记住：",[63,103188,103191],{"className":103189,"code":103190,"language":127,"meta":68},[125],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[34,103192,103190],{"__ignoreMap":68},[85,103194,101185],{"id":101184},[15,103196,101188],{},[63,103198,103200],{"className":349,"code":103199,"language":351,"meta":68,"style":68},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[34,103201,103202],{"__ignoreMap":68},[72,103203,103204,103206,103208,103210,103212,103214,103216,103218],{"class":74,"line":75},[72,103205,24998],{"class":358},[72,103207,26737],{"class":366},[72,103209,24256],{"class":366},[72,103211,26822],{"class":362},[72,103213,102905],{"class":366},[72,103215,101229],{"class":366},[72,103217,102910],{"class":366},[72,103219,103220],{"class":366}," glfw-devel\n",[15,103222,103223],{},"pip:",[63,103225,103226],{"className":349,"code":101334,"language":351,"meta":68,"style":68},[34,103227,103228],{"__ignoreMap":68},[72,103229,103230,103232,103234,103236],{"class":74,"line":75},[72,103231,24253],{"class":358},[72,103233,24256],{"class":366},[72,103235,101345],{"class":366},[72,103237,101348],{"class":366},[15,103239,103240],{},"conda:",[63,103242,103244],{"className":349,"code":103243,"language":351,"meta":68,"style":68},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[34,103245,103246,103263,103272],{"__ignoreMap":68},[72,103247,103248,103250,103252,103254,103257,103259,103261],{"class":74,"line":75},[72,103249,30751],{"class":358},[72,103251,29598],{"class":366},[72,103253,25537],{"class":362},[72,103255,103256],{"class":366}," mujoco-xml",[72,103258,101390],{"class":366},[72,103260,101393],{"class":362},[72,103262,101396],{"class":362},[72,103264,103265,103267,103269],{"class":74,"line":370},[72,103266,30751],{"class":358},[72,103268,101403],{"class":366},[72,103270,103271],{"class":366}," mujoco-xml\n",[72,103273,103274,103276,103278,103280],{"class":74,"line":1608},[72,103275,24253],{"class":358},[72,103277,24256],{"class":366},[72,103279,101345],{"class":366},[72,103281,101348],{"class":366},[15,103283,101419],{},[22,103285,103286,103289,103294],{},[25,103287,103288],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[25,103290,103291,103292,28807],{},"本章使用基础标签，适用于 ",[34,103293,53],{},[25,103295,103296],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[85,103298,101457],{"id":101456},[15,103300,103301],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[63,103303,103305],{"className":53485,"code":103304,"language":53487,"meta":68,"style":68},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[34,103306,103307,103321,103329,103334,103342],{"__ignoreMap":68},[72,103308,103309,103311,103313,103315,103317,103319],{"class":74,"line":75},[72,103310,1464],{"class":82},[72,103312,110],{"class":51718},[72,103314,102180],{"class":358},[72,103316,609],{"class":82},[72,103318,63097],{"class":366},[72,103320,51725],{"class":82},[72,103322,103323,103325,103327],{"class":74,"line":370},[72,103324,52562],{"class":82},[72,103326,102246],{"class":51718},[72,103328,51725],{"class":82},[72,103330,103331],{"class":74,"line":1608},[72,103332,103333],{"class":82},"    ...\n",[72,103335,103336,103338,103340],{"class":74,"line":1623},[72,103337,52835],{"class":82},[72,103339,102246],{"class":51718},[72,103341,51725],{"class":82},[72,103343,103344,103346,103348],{"class":74,"line":1629},[72,103345,52203],{"class":82},[72,103347,110],{"class":51718},[72,103349,51725],{"class":82},[15,103351,103352,103354,103355,103357,103358,103361],{},[34,103353,52218],{}," 表示刚体。",[34,103356,101531],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[34,103359,103360],{},"joint"," 表示刚体相对父刚体如何运动。",[531,103363,103364],{"id":103364},"层级结构非常重要",[15,103366,103367],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[63,103369,103372],{"className":103370,"code":103371,"language":127,"meta":68},[125],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[34,103373,103371],{"__ignoreMap":68},[15,103375,103376,101432,103379,103382,103383,103386],{},[34,103377,103378],{},"red_box_geom",[34,103380,103381],{},"box_center"," 都属于 ",[34,103384,103385],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[63,103388,103390],{"className":53485,"code":103389,"language":53487,"meta":68,"style":68},"\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",[34,103391,103392,103412,103426,103446],{"__ignoreMap":68},[72,103393,103394,103396,103398,103400,103402,103404,103406,103408,103410],{"class":74,"line":75},[72,103395,1464],{"class":82},[72,103397,52218],{"class":51718},[72,103399,15346],{"class":358},[72,103401,609],{"class":82},[72,103403,53909],{"class":366},[72,103405,101517],{"class":358},[72,103407,609],{"class":82},[72,103409,101522],{"class":366},[72,103411,51725],{"class":82},[72,103413,103414,103416,103418,103420,103422,103424],{"class":74,"line":370},[72,103415,52562],{"class":82},[72,103417,102025],{"class":51718},[72,103419,15346],{"class":358},[72,103421,609],{"class":82},[72,103423,102366],{"class":366},[72,103425,101555],{"class":82},[72,103427,103428,103430,103432,103434,103436,103438,103440,103442,103444],{"class":74,"line":1608},[72,103429,52562],{"class":82},[72,103431,101531],{"class":51718},[72,103433,54242],{"class":358},[72,103435,609],{"class":82},[72,103437,53909],{"class":366},[72,103439,101547],{"class":358},[72,103441,609],{"class":82},[72,103443,101552],{"class":366},[72,103445,101555],{"class":82},[72,103447,103448,103450,103452],{"class":74,"line":1623},[72,103449,52203],{"class":82},[72,103451,52218],{"class":51718},[72,103453,51725],{"class":82},[15,103455,103456],{},"含义:",[22,103458,103459,103465,103470,103473],{},[25,103460,103461,103462,103464],{},"创建名为 ",[34,103463,54132],{}," 的刚体",[25,103466,103467,103468],{},"初始位置在世界坐标 ",[34,103469,101580],{},[25,103471,103472],{},"它有一个自由关节",[25,103474,103475],{},"它有一个盒子几何体",[531,103477,103478],{"id":103478},"坐标怎么理解",[15,103480,103481],{},"MuJoCo 默认使用三维坐标：",[63,103483,103486],{"className":103484,"code":103485,"language":127,"meta":68},[125],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[34,103487,103485],{"__ignoreMap":68},[15,103489,15059],{},[63,103491,103493],{"className":53485,"code":103492,"language":53487,"meta":68,"style":68},"pos=\"0 0 1\"\n",[34,103494,103495],{"__ignoreMap":68},[72,103496,103497],{"class":74,"line":75},[72,103498,103492],{"class":82},[15,103500,103501],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[531,103503,103505],{"id":103504},"geom-的-size-怎么理解","geom 的 size 怎么理解",[15,103507,103508,103509,82948,103512,103514],{},"不同 ",[34,103510,103511],{},"type",[34,103513,31914],{}," 含义不同：",[154,103516,103517,103532],{},[157,103518,103519],{},[160,103520,103521,103525,103530],{},[163,103522,103523],{"align":165},[34,103524,103511],{},[163,103526,103527,103529],{"align":165},[34,103528,31914],{}," 示例",[163,103531,101117],{"align":165},[174,103533,103534,103548,103563,103582],{},[160,103535,103536,103540,103545],{},[179,103537,103538],{"align":165},[34,103539,54132],{},[179,103541,103542],{"align":165},[34,103543,103544],{},"size=\"0.1 0.2 0.3\"",[179,103546,103547],{"align":165},"x\u002Fy\u002Fz 半边长，不是完整长度",[160,103549,103550,103555,103560],{},[179,103551,103552],{"align":165},[34,103553,103554],{},"sphere",[179,103556,103557],{"align":165},[34,103558,103559],{},"size=\"0.1\"",[179,103561,103562],{"align":165},"球半径",[160,103564,103565,103570,103575],{},[179,103566,103567],{"align":165},[34,103568,103569],{},"capsule",[179,103571,103572],{"align":165},[34,103573,103574],{},"size=\"0.03\"",[179,103576,103577,103578,103581],{"align":165},"胶囊半径，长度常用 ",[34,103579,103580],{},"fromto"," 指定",[160,103583,103584,103589,103594],{},[179,103585,103586],{"align":165},[34,103587,103588],{},"plane",[179,103590,103591],{"align":165},[34,103592,103593],{},"size=\"3 3 0.1\"",[179,103595,103596],{"align":165},"可视平面大小，通常当地面",[15,103598,103599,103600,103602,103603,103605],{},"最容易踩坑的是 box：",[34,103601,102429],{}," 表示边长大约是 ",[34,103604,32455],{},"，因为 MuJoCo 用的是半边长。",[531,103607,103609],{"id":103608},"site-是什么","site 是什么",[15,103611,103612,103615],{},[34,103613,103614],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[22,103617,103618,103621,103624,103627],{},[25,103619,103620],{},"标记机械臂末端。",[25,103622,103623],{},"标记目标位置。",[25,103625,103626],{},"放传感器或相机参考点。",[25,103628,103629],{},"在 Python 中读取某个关键点的世界坐标。",[15,103631,103632,103633,101432,103636,103639],{},"在后面的 Reacher 任务中，",[34,103634,103635],{},"tip",[34,103637,103638],{},"target"," 就会用 site 表示。",[85,103641,101663],{"id":101662},[63,103643,103645],{"className":65,"code":103644,"language":67,"meta":68,"style":68},"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",[34,103646,103647,103653,103663,103667,103671,103679,103684,103688,103692,103696,103701,103705,103710,103715,103720,103725,103729,103733,103737,103741,103745,103749,103761,103773,103781,103785,103800,103815,103819,103832,103847,103860,103873,103877,103893,103897,103901,103912,103924,103936,103948,103952,103956,103968],{"__ignoreMap":68},[72,103648,103649,103651],{"class":74,"line":75},[72,103650,79],{"class":78},[72,103652,83],{"class":82},[72,103654,103655,103657,103659,103661],{"class":74,"line":370},[72,103656,79],{"class":78},[72,103658,31798],{"class":82},[72,103660,31801],{"class":78},[72,103662,31804],{"class":82},[72,103664,103665],{"class":74,"line":1608},[72,103666,2828],{"emptyLinePlaceholder":490},[72,103668,103669],{"class":74,"line":1623},[72,103670,2828],{"emptyLinePlaceholder":490},[72,103672,103673,103675,103677],{"class":74,"line":1629},[72,103674,101720],{"class":362},[72,103676,13990],{"class":78},[72,103678,101725],{"class":366},[72,103680,103681],{"class":74,"line":1643},[72,103682,103683],{"class":366},"\u003Cmujoco model=\"xml_basic\">\n",[72,103685,103686],{"class":74,"line":1649},[72,103687,101735],{"class":366},[72,103689,103690],{"class":74,"line":1740},[72,103691,2828],{"emptyLinePlaceholder":490},[72,103693,103694],{"class":74,"line":1746},[72,103695,101744],{"class":366},[72,103697,103698],{"class":74,"line":1758},[72,103699,103700],{"class":366},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[72,103702,103703],{"class":74,"line":2041},[72,103704,2828],{"emptyLinePlaceholder":490},[72,103706,103707],{"class":74,"line":2046},[72,103708,103709],{"class":366},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[72,103711,103712],{"class":74,"line":2052},[72,103713,103714],{"class":366},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[72,103716,103717],{"class":74,"line":2057},[72,103718,103719],{"class":366},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[72,103721,103722],{"class":74,"line":2071},[72,103723,103724],{"class":366},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[72,103726,103727],{"class":74,"line":2076},[72,103728,101773],{"class":366},[72,103730,103731],{"class":74,"line":2082},[72,103732,101778],{"class":366},[72,103734,103735],{"class":74,"line":2103},[72,103736,101783],{"class":366},[72,103738,103739],{"class":74,"line":2108},[72,103740,96115],{"class":366},[72,103742,103743],{"class":74,"line":2122},[72,103744,2828],{"emptyLinePlaceholder":490},[72,103746,103747],{"class":74,"line":2127},[72,103748,2828],{"emptyLinePlaceholder":490},[72,103750,103751,103753,103755,103757,103759],{"class":74,"line":2156},[72,103752,32365],{"class":78},[72,103754,2401],{"class":358},[72,103756,101804],{"class":82},[72,103758,96103],{"class":362},[72,103760,4167],{"class":82},[72,103762,103763,103765,103767,103769,103771],{"class":74,"line":2161},[72,103764,101813],{"class":82},[72,103766,609],{"class":78},[72,103768,101818],{"class":82},[72,103770,101720],{"class":362},[72,103772,570],{"class":82},[72,103774,103775,103777,103779],{"class":74,"line":2178},[72,103776,101827],{"class":82},[72,103778,609],{"class":78},[72,103780,101832],{"class":82},[72,103782,103783],{"class":74,"line":2183},[72,103784,2828],{"emptyLinePlaceholder":490},[72,103786,103787,103790,103792,103795,103798],{"class":74,"line":2188},[72,103788,103789],{"class":82},"    box_body_id ",[72,103791,609],{"class":78},[72,103793,103794],{"class":82}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[72,103796,103797],{"class":366},"\"red_box\"",[72,103799,570],{"class":82},[72,103801,103802,103805,103807,103810,103813],{"class":74,"line":2193},[72,103803,103804],{"class":82},"    site_id ",[72,103806,609],{"class":78},[72,103808,103809],{"class":82}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[72,103811,103812],{"class":366},"\"box_center\"",[72,103814,570],{"class":82},[72,103816,103817],{"class":74,"line":2207},[72,103818,2828],{"emptyLinePlaceholder":490},[72,103820,103821,103823,103826,103828,103830],{"class":74,"line":2212},[72,103822,3529],{"class":78},[72,103824,103825],{"class":82}," box_body_id ",[72,103827,1464],{"class":78},[72,103829,4521],{"class":362},[72,103831,4167],{"class":82},[72,103833,103834,103837,103840,103842,103845],{"class":74,"line":3005},[72,103835,103836],{"class":78},"        raise",[72,103838,103839],{"class":362}," RuntimeError",[72,103841,564],{"class":82},[72,103843,103844],{"class":366},"\"body red_box not found\"",[72,103846,570],{"class":82},[72,103848,103849,103851,103854,103856,103858],{"class":74,"line":3019},[72,103850,3529],{"class":78},[72,103852,103853],{"class":82}," site_id ",[72,103855,1464],{"class":78},[72,103857,4521],{"class":362},[72,103859,4167],{"class":82},[72,103861,103862,103864,103866,103868,103871],{"class":74,"line":3027},[72,103863,103836],{"class":78},[72,103865,103839],{"class":362},[72,103867,564],{"class":82},[72,103869,103870],{"class":366},"\"site box_center not found\"",[72,103872,570],{"class":82},[72,103874,103875],{"class":74,"line":3032},[72,103876,2828],{"emptyLinePlaceholder":490},[72,103878,103879,103881,103883,103885,103887,103889,103891],{"class":74,"line":3038},[72,103880,3629],{"class":78},[72,103882,101907],{"class":82},[72,103884,26465],{"class":78},[72,103886,32861],{"class":362},[72,103888,564],{"class":82},[72,103890,2151],{"class":362},[72,103892,31204],{"class":82},[72,103894,103895],{"class":74,"line":3044},[72,103896,101922],{"class":82},[72,103898,103899],{"class":74,"line":3049},[72,103900,2828],{"emptyLinePlaceholder":490},[72,103902,103903,103905,103907,103910],{"class":74,"line":8374},[72,103904,31717],{"class":362},[72,103906,564],{"class":82},[72,103908,103909],{"class":366},"\"simulation time:\"",[72,103911,101884],{"class":82},[72,103913,103914,103916,103918,103921],{"class":74,"line":8398},[72,103915,31717],{"class":362},[72,103917,564],{"class":82},[72,103919,103920],{"class":366},"\"box body position:\"",[72,103922,103923],{"class":82},", data.xpos[box_body_id].copy())\n",[72,103925,103926,103928,103930,103933],{"class":74,"line":8403},[72,103927,31717],{"class":362},[72,103929,564],{"class":82},[72,103931,103932],{"class":366},"\"site position:\"",[72,103934,103935],{"class":82},", data.site_xpos[site_id].copy())\n",[72,103937,103938,103940,103942,103945],{"class":74,"line":8409},[72,103939,31717],{"class":362},[72,103941,564],{"class":82},[72,103943,103944],{"class":366},"\"box qpos:\"",[72,103946,103947],{"class":82},", np.array(data.qpos))\n",[72,103949,103950],{"class":74,"line":8436},[72,103951,2828],{"emptyLinePlaceholder":490},[72,103953,103954],{"class":74,"line":8441},[72,103955,2828],{"emptyLinePlaceholder":490},[72,103957,103958,103960,103962,103964,103966],{"class":74,"line":8447},[72,103959,1960],{"class":78},[72,103961,31638],{"class":362},[72,103963,101965],{"class":78},[72,103965,101968],{"class":366},[72,103967,4167],{"class":82},[72,103969,103970],{"class":74,"line":8459},[72,103971,101975],{"class":82},[15,103973,103974],{},"保存为：",[63,103976,103978],{"className":349,"code":103977,"language":351,"meta":68,"style":68},"touch ch2_xml_basic.py\n",[34,103979,103980],{"__ignoreMap":68},[72,103981,103982,103984],{"class":74,"line":75},[72,103983,101690],{"class":358},[72,103985,103986],{"class":366}," ch2_xml_basic.py\n",[15,103988,102705],{},[63,103990,103992],{"className":349,"code":103991,"language":351,"meta":68,"style":68},"python ch2_xml_basic.py\n",[34,103993,103994],{"__ignoreMap":68},[72,103995,103996,103998],{"class":74,"line":75},[72,103997,67],{"class":358},[72,103999,103986],{"class":366},[531,104001,101978],{"id":101978},[15,104003,104004],{},"用名字查找 body：",[63,104006,104008],{"className":65,"code":104007,"language":67,"meta":68,"style":68},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[34,104009,104010],{"__ignoreMap":68},[72,104011,104012,104015,104017,104019,104021],{"class":74,"line":75},[72,104013,104014],{"class":82},"box_body_id ",[72,104016,609],{"class":78},[72,104018,103794],{"class":82},[72,104020,103797],{"class":366},[72,104022,570],{"class":82},[15,104024,104025],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[15,104027,104028],{},"用名字查找 site：",[63,104030,104032],{"className":65,"code":104031,"language":67,"meta":68,"style":68},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[34,104033,104034],{"__ignoreMap":68},[72,104035,104036,104039,104041,104043,104045],{"class":74,"line":75},[72,104037,104038],{"class":82},"site_id ",[72,104040,609],{"class":78},[72,104042,103809],{"class":82},[72,104044,103812],{"class":366},[72,104046,570],{"class":82},[15,104048,104049,104050,104053,104054,104057],{},"注意第二个参数是对象类型。查 body 就用 ",[34,104051,104052],{},"mjOBJ_BODY","，查 site 就用 ",[34,104055,104056],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[15,104059,104060],{},"读取世界坐标：",[63,104062,104064],{"className":65,"code":104063,"language":67,"meta":68,"style":68},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[34,104065,104066,104071],{"__ignoreMap":68},[72,104067,104068],{"class":74,"line":75},[72,104069,104070],{"class":82},"data.xpos[box_body_id]\n",[72,104072,104073],{"class":74,"line":370},[72,104074,104075],{"class":82},"data.site_xpos[site_id]\n",[15,104077,104078,104081,104082,104085],{},[34,104079,104080],{},"xpos"," 是 body 的世界坐标，",[34,104083,104084],{},"site_xpos"," 是 site 的世界坐标。",[531,104087,102113],{"id":102113},[63,104089,104091],{"className":65,"code":104090,"language":67,"meta":68,"style":68},"import mujoco\nimport numpy as np\n",[34,104092,104093,104099],{"__ignoreMap":68},[72,104094,104095,104097],{"class":74,"line":75},[72,104096,79],{"class":78},[72,104098,83],{"class":82},[72,104100,104101,104103,104105,104107],{"class":74,"line":370},[72,104102,79],{"class":78},[72,104104,31798],{"class":82},[72,104106,31801],{"class":78},[72,104108,31804],{"class":82},[15,104110,104111,104112,104115,104116,104119,104120,37,104123,28807],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[34,104113,104114],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[34,104117,104118],{},"as np"," 是习惯写法，后面就可以写 ",[34,104121,104122],{},"np.array(...)",[34,104124,104125],{},"np.round(...)",[63,104127,104128],{"className":65,"code":102000,"language":67,"meta":68,"style":68},[34,104129,104130,104138,104142],{"__ignoreMap":68},[72,104131,104132,104134,104136],{"class":74,"line":75},[72,104133,101720],{"class":362},[72,104135,13990],{"class":78},[72,104137,101725],{"class":366},[72,104139,104140],{"class":74,"line":370},[72,104141,102015],{"class":366},[72,104143,104144],{"class":74,"line":1608},[72,104145,96115],{"class":366},[15,104147,104148,104149,28807],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[34,104150,104151],{},"mujoco.MjModel.from_xml_string(XML)",[63,104153,104155],{"className":53485,"code":104154,"language":53487,"meta":68,"style":68},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[34,104156,104157],{"__ignoreMap":68},[72,104158,104159,104161,104163,104165,104167,104169,104171,104173,104176,104178,104180,104183,104185,104187,104190],{"class":74,"line":75},[72,104160,1464],{"class":82},[72,104162,103614],{"class":51718},[72,104164,15346],{"class":358},[72,104166,609],{"class":82},[72,104168,103812],{"class":366},[72,104170,101517],{"class":358},[72,104172,609],{"class":82},[72,104174,104175],{"class":366},"\"0 0 0\"",[72,104177,101547],{"class":358},[72,104179,609],{"class":82},[72,104181,104182],{"class":366},"\"0.03\"",[72,104184,79185],{"class":358},[72,104186,609],{"class":82},[72,104188,104189],{"class":366},"\"0 1 0 1\"",[72,104191,101555],{"class":82},[15,104193,104194,104196,104197,104200,104201,104203,104204,104207],{},[34,104195,103614],{}," 是标记点。",[34,104198,104199],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[34,104202,103574],{}," 表示显示出来的小球大小。",[34,104205,104206],{},"rgba=\"0 1 0 1\""," 表示绿色。",[63,104209,104210],{"className":65,"code":104007,"language":67,"meta":68,"style":68},[34,104211,104212],{"__ignoreMap":68},[72,104213,104214,104216,104218,104220,104222],{"class":74,"line":75},[72,104215,104014],{"class":82},[72,104217,609],{"class":78},[72,104219,103794],{"class":82},[72,104221,103797],{"class":366},[72,104223,570],{"class":82},[15,104225,104226,104227,104229],{},"这行的作用是：根据名字 ",[34,104228,103797],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[15,104231,104232],{},"拆开看：",[22,104234,104235,104241,104246,104252],{},[25,104236,104237,104240],{},[34,104238,104239],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[25,104242,104243,104245],{},[34,104244,102490],{}," 是被查询的模型。",[25,104247,104248,104251],{},[34,104249,104250],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[25,104253,104254,104256],{},[34,104255,103797],{}," 是 XML 里写的名字。",[63,104258,104259],{"className":65,"code":104031,"language":67,"meta":68,"style":68},[34,104260,104261],{"__ignoreMap":68},[72,104262,104263,104265,104267,104269,104271],{"class":74,"line":75},[72,104264,104038],{"class":82},[72,104266,609],{"class":78},[72,104268,103809],{"class":82},[72,104270,103812],{"class":366},[72,104272,570],{"class":82},[15,104274,104275,104276,28807],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[34,104277,103812],{},[63,104279,104281],{"className":65,"code":104280,"language":67,"meta":68,"style":68},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[34,104282,104283,104295],{"__ignoreMap":68},[72,104284,104285,104287,104289,104291,104293],{"class":74,"line":75},[72,104286,1960],{"class":78},[72,104288,103825],{"class":82},[72,104290,1464],{"class":78},[72,104292,4521],{"class":362},[72,104294,4167],{"class":82},[72,104296,104297,104300,104302,104304,104306],{"class":74,"line":370},[72,104298,104299],{"class":78},"    raise",[72,104301,103839],{"class":362},[72,104303,564],{"class":82},[72,104305,103844],{"class":366},[72,104307,570],{"class":82},[15,104309,104310,104312,104313,104316,104317,104320,104321,104324],{},[34,104311,1960],{}," 是条件判断。",[34,104314,104315],{},"mj_name2id"," 找不到对象时会返回 ",[34,104318,104319],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[34,104322,104323],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[63,104326,104328],{"className":65,"code":104327,"language":67,"meta":68,"style":68},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[34,104329,104330,104346],{"__ignoreMap":68},[72,104331,104332,104334,104336,104338,104340,104342,104344],{"class":74,"line":75},[72,104333,3453],{"class":78},[72,104335,101907],{"class":82},[72,104337,26465],{"class":78},[72,104339,32861],{"class":362},[72,104341,564],{"class":82},[72,104343,2151],{"class":362},[72,104345,31204],{"class":82},[72,104347,104348],{"class":74,"line":370},[72,104349,102104],{"class":82},[15,104351,104352],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[63,104354,104356],{"className":65,"code":104355,"language":67,"meta":68,"style":68},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[34,104357,104358],{"__ignoreMap":68},[72,104359,104360,104362,104364,104366],{"class":74,"line":75},[72,104361,30833],{"class":362},[72,104363,564],{"class":82},[72,104365,103920],{"class":366},[72,104367,103923],{"class":82},[15,104369,104370,104372,104373,104376],{},[34,104371,101490],{}," 保存所有 body 的世界坐标。",[34,104374,104375],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[63,104378,104380],{"className":65,"code":104379,"language":67,"meta":68,"style":68},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[34,104381,104382],{"__ignoreMap":68},[72,104383,104384,104386,104388,104390],{"class":74,"line":75},[72,104385,30833],{"class":362},[72,104387,564],{"class":82},[72,104389,103932],{"class":366},[72,104391,103935],{"class":82},[15,104393,104394,104397,104398,104400],{},[34,104395,104396],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[34,104399,103381],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[63,104402,104404],{"className":65,"code":104403,"language":67,"meta":68,"style":68},"print(\"box qpos:\", np.array(data.qpos))\n",[34,104405,104406],{"__ignoreMap":68},[72,104407,104408,104410,104412,104414],{"class":74,"line":75},[72,104409,30833],{"class":362},[72,104411,564],{"class":82},[72,104413,103944],{"class":366},[72,104415,103947],{"class":82},[15,104417,104418,104419,104422],{},"这里打印广义位置数组。",[34,104420,104421],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[85,104424,102720],{"id":102719},[15,104426,104427,104428,104431,104432,28807],{},"程序会输出 ",[34,104429,104430],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[34,104433,36],{},[15,104435,104436,104438,104439,104442,104443,104446],{},[34,104437,104375],{}," 是 body 的世界坐标位置。",[34,104440,104441],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[34,104444,104445],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[15,104448,82640,104449,82948,104451,104453],{},[34,104450,103381],{},[34,104452,104199],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[15,104455,104456],{},"如果你把 site 改成：",[63,104458,104460],{"className":53485,"code":104459,"language":53487,"meta":68,"style":68},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[34,104461,104462],{"__ignoreMap":68},[72,104463,104464,104466,104468,104470,104472,104475,104477,104479,104482,104484,104486,104488,104490,104492,104494],{"class":74,"line":75},[72,104465,1464],{"class":82},[72,104467,103614],{"class":51718},[72,104469,15346],{"class":358},[72,104471,609],{"class":82},[72,104473,104474],{"class":366},"\"box_top\"",[72,104476,101517],{"class":358},[72,104478,609],{"class":82},[72,104480,104481],{"class":366},"\"0 0 0.15\"",[72,104483,101547],{"class":358},[72,104485,609],{"class":82},[72,104487,104182],{"class":366},[72,104489,79185],{"class":358},[72,104491,609],{"class":82},[72,104493,104189],{"class":366},[72,104495,101555],{"class":82},[15,104497,104498,104499,104502],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[34,104500,104501],{},"site position"," 就会比 body position 的 z 坐标更高。",[85,104504,102752],{"id":102751},[22,104506,104507,104516,104519,104526,104532,104543],{},[25,104508,102815,104509,104511,104512,102818,104514,28807],{},[34,104510,103385],{}," 的初始高度从 ",[34,104513,772],{},[34,104515,640],{},[25,104517,104518],{},"重新运行程序。",[25,104520,104521,104522,104525],{},"观察 ",[34,104523,104524],{},"box qpos"," 和最终位置是否变化。",[25,104527,104528,104529,104531],{},"故意把 ",[34,104530,103614],{}," 名称改错，确认程序能报错。",[25,104533,102815,104534,104536,104537,102818,104539,104542],{},[34,104535,101531],{}," 的颜色 ",[34,104538,102437],{},[34,104540,104541],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[25,104544,102815,104545,82948,104547,102818,104550,104553,104554,104556],{},[34,104546,103381],{},[34,104548,104549],{},"pos",[34,104551,104552],{},"0 0 0.2","，观察 ",[34,104555,104501],{}," 如何变化。",[85,104558,102857],{"id":102856},[531,104560,104562],{"id":104561},"xml-error-schema-violation",[34,104563,104564],{},"XML Error: Schema violation",[15,104566,104567],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[531,104569,104571,81708,104573],{"id":104570},"mj_name2id-返回-1",[34,104572,104315],{},[34,104574,104319],{},[15,104576,104577,104578,104581],{},"说明名字没有找到。检查 XML 中 ",[34,104579,104580],{},"name=\"...\"","，并确认对象类型正确。",[531,104583,104584],{"id":104584},"物体不下落",[15,104586,102927],{},[22,104588,104589,104594,104599],{},[25,104590,104591,104592],{},"body 是否有 ",[34,104593,102025],{},[25,104595,104596,104597],{},"gravity 是否为 ",[34,104598,102993],{},[25,104600,104601,104602,104604],{},"body 是否被固定在 ",[34,104603,102246],{}," 中",[531,104606,104607],{"id":104607},"坐标看起来不符合预期",[15,104609,104610],{},"先区分两种坐标：",[154,104612,104613,104622],{},[157,104614,104615],{},[160,104616,104617,104620],{},[163,104618,104619],{"align":165},"坐标",[163,104621,101117],{"align":165},[174,104623,104624,104634],{},[160,104625,104626,104631],{},[179,104627,104628,104629],{"align":165},"XML 里的 ",[34,104630,104549],{},[179,104632,104633],{"align":165},"相对父 body 的局部坐标",[160,104635,104636,104642],{},[179,104637,104638,25400,104640],{"align":165},[34,104639,101490],{},[34,104641,104396],{},[179,104643,104644],{"align":165},"仿真更新后的世界坐标",[15,104646,104647,104648,104650,104651,462,104654,104656],{},"如果你修改了 ",[34,104649,101482],{},"，但还没调用 ",[34,104652,104653],{},"mj_forward",[34,104655,220],{},"，世界坐标可能还没有更新。",[85,104658,103011],{"id":103010},[15,104660,104661],{},"MJCF 建模先掌握四件事：",[22,104663,104664,104669,104674,104679],{},[25,104665,104666,104668],{},[34,104667,52218],{}," 表示刚体层级。",[25,104670,104671,104673],{},[34,104672,101531],{}," 表示形状、碰撞和质量。",[25,104675,104676,104678],{},[34,104677,103360],{}," 决定 body 能不能动、怎么动。",[25,104680,104681,104683],{},[34,104682,103614],{}," 用来标记关键点，方便 Python 读取位置。",[15,104685,104686],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[473,104688,104689],{},"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":68,"searchDepth":370,"depth":370,"links":104691},[104692,104693,104694,104700,104704,104705,104706,104713],{"id":101063,"depth":370,"text":101064},{"id":101184,"depth":370,"text":101185},{"id":101456,"depth":370,"text":101457,"children":104695},[104696,104697,104698,104699],{"id":103364,"depth":1608,"text":103364},{"id":103478,"depth":1608,"text":103478},{"id":103504,"depth":1608,"text":103505},{"id":103608,"depth":1608,"text":103609},{"id":101662,"depth":370,"text":101663,"children":104701},[104702,104703],{"id":101978,"depth":1608,"text":101978},{"id":102113,"depth":1608,"text":102113},{"id":102719,"depth":370,"text":102720},{"id":102751,"depth":370,"text":102752},{"id":102856,"depth":370,"text":102857,"children":104707},[104708,104709,104711,104712],{"id":104561,"depth":1608,"text":104564},{"id":104570,"depth":1608,"text":104710},"mj_name2id 返回 -1",{"id":104584,"depth":1608,"text":104584},{"id":104607,"depth":1608,"text":104607},{"id":103010,"depth":370,"text":103011},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":103058,"description":68},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104720,"title":104721,"body":104722,"description":68,"extension":487,"meta":106214,"navigation":490,"path":106215,"seo":106216,"stem":106217,"__hash__":106218},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104723,"toc":106186},[104724,104727,104729,104732,104735,104771,104774,104780,104783,104785,104787,104814,104816,104830,104832,104873,104875,104899,104901,104904,104913,104922,104925,104934,104942,104951,104954,104964,104967,105019,105026,105032,105040,105088,105091,105110,105113,105121,105125,105134,105167,105169,105517,105519,105531,105533,105544,105546,105549,105570,105576,105579,105604,105614,105617,105625,105628,105631,105652,105663,105665,105685,105688,105709,105718,105737,105743,105768,105771,105785,105792,105816,105819,105827,105836,105852,105864,105872,105881,105883,105886,105910,105915,105918,105940,105942,105981,105983,105989,105991,105999,106002,106005,106017,106058,106065,106076,106083,106086,106135,106138,106141,106147,106149,106154,106180,106183],[10,104725,104721],{"id":104726},"_3python-控制接口读取状态与推进仿真",[85,104728,101064],{"id":101063},[15,104730,104731],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[15,104733,104734],{},"你将学习:",[22,104736,104737,104742,104747,104751,104756,104765],{},[25,104738,104739],{},[34,104740,104741],{},"MjModel.from_xml_string",[25,104743,104744],{},[34,104745,104746],{},"MjData(model)",[25,104748,104749],{},[34,104750,220],{},[25,104752,104753],{},[34,104754,104755],{},"mj_resetData",[25,104757,104758,104759,37,104761,37,104763],{},"读取 ",[34,104760,36],{},[34,104762,40],{},[34,104764,43],{},[25,104766,104767,104768],{},"使用 ",[34,104769,104770],{},"model.opt.timestep",[15,104772,104773],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[63,104775,104778],{"className":104776,"code":104777,"language":127,"meta":68},[125],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[34,104779,104777],{"__ignoreMap":68},[15,104781,104782],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[85,104784,101185],{"id":101184},[15,104786,101188],{},[63,104788,104790],{"className":349,"code":104789,"language":351,"meta":68,"style":68},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[34,104791,104792],{"__ignoreMap":68},[72,104793,104794,104796,104798,104800,104802,104805,104807,104809,104811],{"class":74,"line":75},[72,104795,24998],{"class":358},[72,104797,26737],{"class":366},[72,104799,24256],{"class":366},[72,104801,26822],{"class":362},[72,104803,104804],{"class":366}," python3",[72,104806,101213],{"class":366},[72,104808,102905],{"class":366},[72,104810,101229],{"class":366},[72,104812,104813],{"class":366}," glfw\n",[15,104815,103223],{},[63,104817,104818],{"className":349,"code":101334,"language":351,"meta":68,"style":68},[34,104819,104820],{"__ignoreMap":68},[72,104821,104822,104824,104826,104828],{"class":74,"line":75},[72,104823,24253],{"class":358},[72,104825,24256],{"class":366},[72,104827,101345],{"class":366},[72,104829,101348],{"class":366},[15,104831,103240],{},[63,104833,104835],{"className":349,"code":104834,"language":351,"meta":68,"style":68},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[34,104836,104837,104854,104863],{"__ignoreMap":68},[72,104838,104839,104841,104843,104845,104848,104850,104852],{"class":74,"line":75},[72,104840,30751],{"class":358},[72,104842,29598],{"class":366},[72,104844,25537],{"class":362},[72,104846,104847],{"class":366}," mujoco-python-api",[72,104849,101390],{"class":366},[72,104851,101393],{"class":362},[72,104853,101396],{"class":362},[72,104855,104856,104858,104860],{"class":74,"line":370},[72,104857,30751],{"class":358},[72,104859,101403],{"class":366},[72,104861,104862],{"class":366}," mujoco-python-api\n",[72,104864,104865,104867,104869,104871],{"class":74,"line":1608},[72,104866,24253],{"class":358},[72,104868,24256],{"class":366},[72,104870,101345],{"class":366},[72,104872,101348],{"class":366},[15,104874,101419],{},[22,104876,104877,104884,104893],{},[25,104878,104879,101432,104881,104883],{},[34,104880,101092],{},[34,104882,101097],{}," 是官方 Python bindings 的类名。",[25,104885,104886,104887,104890,104891,28807],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[34,104888,104889],{},"mjModel"," 在 Python 中是 ",[34,104892,194],{},[25,104894,104895,104896,28807],{},"不要使用 ",[34,104897,104898],{},"sim = mujoco_py.MjSim(...)",[85,104900,101457],{"id":101456},[15,104902,104903],{},"仿真推进核心代码:",[63,104905,104907],{"className":65,"code":104906,"language":67,"meta":68,"style":68},"mujoco.mj_step(model, data)\n",[34,104908,104909],{"__ignoreMap":68},[72,104910,104911],{"class":74,"line":75},[72,104912,104906],{"class":82},[15,104914,104915,104916,37,104918,37,104920,28807],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[34,104917,101482],{},[34,104919,101485],{},[34,104921,101479],{},[15,104923,104924],{},"重置仿真:",[63,104926,104928],{"className":65,"code":104927,"language":67,"meta":68,"style":68},"mujoco.mj_resetData(model, data)\n",[34,104929,104930],{"__ignoreMap":68},[72,104931,104932],{"class":74,"line":75},[72,104933,104927],{"class":82},[15,104935,104936,104937,462,104939,104941],{},"如果手动修改了 ",[34,104938,101482],{},[34,104940,101485],{},"，通常应调用:",[63,104943,104945],{"className":65,"code":104944,"language":67,"meta":68,"style":68},"mujoco.mj_forward(model, data)\n",[34,104946,104947],{"__ignoreMap":68},[72,104948,104949],{"class":74,"line":75},[72,104950,104944],{"class":82},[15,104952,104953],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[531,104955,104957,37,104959,37,104961,104963],{"id":104956},"qposqvelctrl-是什么",[34,104958,36],{},[34,104960,40],{},[34,104962,43],{}," 是什么",[15,104965,104966],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[154,104968,104969,104981],{},[157,104970,104971],{},[160,104972,104973,104976,104978],{},[163,104974,104975],{"align":165},"字段",[163,104977,101117],{"align":165},[163,104979,104980],{"align":165},"谁来修改",[174,104982,104983,104995,105007],{},[160,104984,104985,104989,104992],{},[179,104986,104987],{"align":165},[34,104988,101482],{},[179,104990,104991],{"align":165},"广义位置，例如小车位置、关节角、自由物体位置姿态",[179,104993,104994],{"align":165},"MuJoCo 更新，也可以手动设置初始状态",[160,104996,104997,105001,105004],{},[179,104998,104999],{"align":165},[34,105000,101485],{},[179,105002,105003],{"align":165},"广义速度，例如小车速度、关节角速度",[179,105005,105006],{"align":165},"MuJoCo 更新，也可以手动清零",[160,105008,105009,105013,105016],{},[179,105010,105011],{"align":165},[34,105012,452],{},[179,105014,105015],{"align":165},"actuator 的控制输入",[179,105017,105018],{"align":165},"主要由你的控制代码写入",[15,105020,9451,105021,101432,105023,105025],{},[34,105022,36],{},[34,105024,40],{}," 不一定同维。自由刚体就是典型例子：",[63,105027,105030],{"className":105028,"code":105029,"language":127,"meta":68},[125],"freejoint: qpos 7 维，qvel 6 维\n",[34,105031,105029],{"__ignoreMap":68},[531,105033,105035,101432,105037,105039],{"id":105034},"mj_step-和-mj_forward-的区别",[34,105036,220],{},[34,105038,104653],{}," 的区别",[154,105041,105042,105055],{},[157,105043,105044],{},[160,105045,105046,105049,105052],{},[163,105047,105048],{"align":165},"函数",[163,105050,105051],{"align":165},"是否推进时间",[163,105053,105054],{"align":165},"什么时候用",[174,105056,105057,105070],{},[160,105058,105059,105064,105067],{},[179,105060,105061],{"align":165},[34,105062,105063],{},"mj_step(model, data)",[179,105065,105066],{"align":165},"是",[179,105068,105069],{"align":165},"正常仿真循环，每调用一次前进一步",[160,105071,105072,105077,105080],{},[179,105073,105074],{"align":165},[34,105075,105076],{},"mj_forward(model, data)",[179,105078,105079],{"align":165},"否",[179,105081,105082,105083,37,105085,105087],{"align":165},"手动改了 ",[34,105084,36],{},[34,105086,40],{}," 后，刷新派生量",[15,105089,105090],{},"例如你写：",[63,105092,105094],{"className":65,"code":105093,"language":67,"meta":68,"style":68},"data.qpos[2] = 2.0\n",[34,105095,105096],{"__ignoreMap":68},[72,105097,105098,105101,105103,105105,105107],{"class":74,"line":75},[72,105099,105100],{"class":82},"data.qpos[",[72,105102,640],{"class":362},[72,105104,4871],{"class":82},[72,105106,609],{"class":78},[72,105108,105109],{"class":362}," 2.0\n",[15,105111,105112],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[63,105114,105115],{"className":65,"code":104944,"language":67,"meta":68,"style":68},[34,105116,105117],{"__ignoreMap":68},[72,105118,105119],{"class":74,"line":75},[72,105120,104944],{"class":82},[531,105122,105124],{"id":105123},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[15,105126,105127,105130,105131,105133],{},[34,105128,105129],{},"mujoco.mj_resetData(model, data)"," 会把 ",[34,105132,33819],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[63,105135,105137],{"className":65,"code":105136,"language":67,"meta":68,"style":68},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[34,105138,105139,105143,105153,105163],{"__ignoreMap":68},[72,105140,105141],{"class":74,"line":75},[72,105142,104927],{"class":82},[72,105144,105145,105148,105150],{"class":74,"line":370},[72,105146,105147],{"class":82},"data.qpos[:] ",[72,105149,609],{"class":78},[72,105151,105152],{"class":82}," random_qpos\n",[72,105154,105155,105158,105160],{"class":74,"line":1608},[72,105156,105157],{"class":82},"data.qvel[:] ",[72,105159,609],{"class":78},[72,105161,105162],{"class":362}," 0.0\n",[72,105164,105165],{"class":74,"line":1623},[72,105166,104944],{"class":82},[85,105168,101663],{"id":101662},[63,105170,105172],{"className":65,"code":105171,"language":67,"meta":68,"style":68},"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",[34,105173,105174,105180,105190,105194,105198,105206,105211,105215,105219,105223,105228,105232,105237,105242,105247,105251,105255,105259,105263,105267,105271,105290,105297,105309,105320,105336,105352,105356,105360,105372,105384,105392,105396,105407,105411,105427,105431,105435,105444,105448,105453,105462,105466,105479,105484,105493,105497,105501,105513],{"__ignoreMap":68},[72,105175,105176,105178],{"class":74,"line":75},[72,105177,79],{"class":78},[72,105179,83],{"class":82},[72,105181,105182,105184,105186,105188],{"class":74,"line":370},[72,105183,79],{"class":78},[72,105185,31798],{"class":82},[72,105187,31801],{"class":78},[72,105189,31804],{"class":82},[72,105191,105192],{"class":74,"line":1608},[72,105193,2828],{"emptyLinePlaceholder":490},[72,105195,105196],{"class":74,"line":1623},[72,105197,2828],{"emptyLinePlaceholder":490},[72,105199,105200,105202,105204],{"class":74,"line":1629},[72,105201,101720],{"class":362},[72,105203,13990],{"class":78},[72,105205,101725],{"class":366},[72,105207,105208],{"class":74,"line":1643},[72,105209,105210],{"class":366},"\u003Cmujoco model=\"state_api\">\n",[72,105212,105213],{"class":74,"line":1649},[72,105214,101735],{"class":366},[72,105216,105217],{"class":74,"line":1740},[72,105218,2828],{"emptyLinePlaceholder":490},[72,105220,105221],{"class":74,"line":1746},[72,105222,101744],{"class":366},[72,105224,105225],{"class":74,"line":1758},[72,105226,105227],{"class":366},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[72,105229,105230],{"class":74,"line":2041},[72,105231,2828],{"emptyLinePlaceholder":490},[72,105233,105234],{"class":74,"line":2046},[72,105235,105236],{"class":366},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[72,105238,105239],{"class":74,"line":2052},[72,105240,105241],{"class":366},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[72,105243,105244],{"class":74,"line":2057},[72,105245,105246],{"class":366},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[72,105248,105249],{"class":74,"line":2071},[72,105250,101773],{"class":366},[72,105252,105253],{"class":74,"line":2076},[72,105254,101778],{"class":366},[72,105256,105257],{"class":74,"line":2082},[72,105258,101783],{"class":366},[72,105260,105261],{"class":74,"line":2103},[72,105262,96115],{"class":366},[72,105264,105265],{"class":74,"line":2108},[72,105266,2828],{"emptyLinePlaceholder":490},[72,105268,105269],{"class":74,"line":2122},[72,105270,2828],{"emptyLinePlaceholder":490},[72,105272,105273,105275,105278,105281,105283,105286,105288],{"class":74,"line":2127},[72,105274,32365],{"class":78},[72,105276,105277],{"class":358}," print_state",[72,105279,105280],{"class":82},"(prefix: ",[72,105282,1728],{"class":362},[72,105284,105285],{"class":82},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[72,105287,96103],{"class":362},[72,105289,4167],{"class":82},[72,105291,105292,105294],{"class":74,"line":2156},[72,105293,31717],{"class":362},[72,105295,105296],{"class":82},"(prefix)\n",[72,105298,105299,105301,105303,105306],{"class":74,"line":2161},[72,105300,31717],{"class":362},[72,105302,564],{"class":82},[72,105304,105305],{"class":366},"\"  timestep:\"",[72,105307,105308],{"class":82},", model.opt.timestep)\n",[72,105310,105311,105313,105315,105318],{"class":74,"line":2178},[72,105312,31717],{"class":362},[72,105314,564],{"class":82},[72,105316,105317],{"class":366},"\"  time:\"",[72,105319,101884],{"class":82},[72,105321,105322,105324,105326,105329,105332,105334],{"class":74,"line":2183},[72,105323,31717],{"class":362},[72,105325,564],{"class":82},[72,105327,105328],{"class":366},"\"  qpos:\"",[72,105330,105331],{"class":82},", np.round(data.qpos.copy(), ",[72,105333,847],{"class":362},[72,105335,30915],{"class":82},[72,105337,105338,105340,105342,105345,105348,105350],{"class":74,"line":2188},[72,105339,31717],{"class":362},[72,105341,564],{"class":82},[72,105343,105344],{"class":366},"\"  qvel:\"",[72,105346,105347],{"class":82},", np.round(data.qvel.copy(), ",[72,105349,847],{"class":362},[72,105351,30915],{"class":82},[72,105353,105354],{"class":74,"line":2193},[72,105355,2828],{"emptyLinePlaceholder":490},[72,105357,105358],{"class":74,"line":2207},[72,105359,2828],{"emptyLinePlaceholder":490},[72,105361,105362,105364,105366,105368,105370],{"class":74,"line":2212},[72,105363,32365],{"class":78},[72,105365,2401],{"class":358},[72,105367,101804],{"class":82},[72,105369,96103],{"class":362},[72,105371,4167],{"class":82},[72,105373,105374,105376,105378,105380,105382],{"class":74,"line":3005},[72,105375,101813],{"class":82},[72,105377,609],{"class":78},[72,105379,101818],{"class":82},[72,105381,101720],{"class":362},[72,105383,570],{"class":82},[72,105385,105386,105388,105390],{"class":74,"line":3019},[72,105387,101827],{"class":82},[72,105389,609],{"class":78},[72,105391,101832],{"class":82},[72,105393,105394],{"class":74,"line":3027},[72,105395,2828],{"emptyLinePlaceholder":490},[72,105397,105398,105401,105404],{"class":74,"line":3032},[72,105399,105400],{"class":82},"    print_state(",[72,105402,105403],{"class":366},"\"initial\"",[72,105405,105406],{"class":82},", model, data)\n",[72,105408,105409],{"class":74,"line":3038},[72,105410,2828],{"emptyLinePlaceholder":490},[72,105412,105413,105415,105417,105419,105421,105423,105425],{"class":74,"line":3044},[72,105414,3629],{"class":78},[72,105416,101907],{"class":82},[72,105418,26465],{"class":78},[72,105420,32861],{"class":362},[72,105422,564],{"class":82},[72,105424,1210],{"class":362},[72,105426,31204],{"class":82},[72,105428,105429],{"class":74,"line":3049},[72,105430,101922],{"class":82},[72,105432,105433],{"class":74,"line":8374},[72,105434,2828],{"emptyLinePlaceholder":490},[72,105436,105437,105439,105442],{"class":74,"line":8398},[72,105438,105400],{"class":82},[72,105440,105441],{"class":366},"\"after 50 steps\"",[72,105443,105406],{"class":82},[72,105445,105446],{"class":74,"line":8403},[72,105447,2828],{"emptyLinePlaceholder":490},[72,105449,105450],{"class":74,"line":8409},[72,105451,105452],{"class":82},"    mujoco.mj_resetData(model, data)\n",[72,105454,105455,105457,105460],{"class":74,"line":8436},[72,105456,105400],{"class":82},[72,105458,105459],{"class":366},"\"after reset\"",[72,105461,105406],{"class":82},[72,105463,105464],{"class":74,"line":8441},[72,105465,2828],{"emptyLinePlaceholder":490},[72,105467,105468,105471,105473,105475,105477],{"class":74,"line":8447},[72,105469,105470],{"class":82},"    data.qpos[",[72,105472,640],{"class":362},[72,105474,4871],{"class":82},[72,105476,609],{"class":78},[72,105478,105109],{"class":362},[72,105480,105481],{"class":74,"line":8459},[72,105482,105483],{"class":82},"    mujoco.mj_forward(model, data)\n",[72,105485,105486,105488,105491],{"class":74,"line":8471},[72,105487,105400],{"class":82},[72,105489,105490],{"class":366},"\"after manual qpos edit\"",[72,105492,105406],{"class":82},[72,105494,105495],{"class":74,"line":8483},[72,105496,2828],{"emptyLinePlaceholder":490},[72,105498,105499],{"class":74,"line":10142},[72,105500,2828],{"emptyLinePlaceholder":490},[72,105502,105503,105505,105507,105509,105511],{"class":74,"line":10167},[72,105504,1960],{"class":78},[72,105506,31638],{"class":362},[72,105508,101965],{"class":78},[72,105510,101968],{"class":366},[72,105512,4167],{"class":82},[72,105514,105515],{"class":74,"line":10190},[72,105516,101975],{"class":82},[15,105518,103974],{},[63,105520,105522],{"className":349,"code":105521,"language":351,"meta":68,"style":68},"touch ch3_python_state.py\n",[34,105523,105524],{"__ignoreMap":68},[72,105525,105526,105528],{"class":74,"line":75},[72,105527,101690],{"class":358},[72,105529,105530],{"class":366}," ch3_python_state.py\n",[15,105532,102705],{},[63,105534,105536],{"className":349,"code":105535,"language":351,"meta":68,"style":68},"python ch3_python_state.py\n",[34,105537,105538],{"__ignoreMap":68},[72,105539,105540,105542],{"class":74,"line":75},[72,105541,67],{"class":358},[72,105543,105530],{"class":366},[531,105545,101978],{"id":101978},[15,105547,105548],{},"打印状态的函数：",[63,105550,105552],{"className":65,"code":105551,"language":67,"meta":68,"style":68},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[34,105553,105554],{"__ignoreMap":68},[72,105555,105556,105558,105560,105562,105564,105566,105568],{"class":74,"line":75},[72,105557,32365],{"class":78},[72,105559,105277],{"class":358},[72,105561,105280],{"class":82},[72,105563,1728],{"class":362},[72,105565,105285],{"class":82},[72,105567,96103],{"class":362},[72,105569,4167],{"class":82},[15,105571,105572,105573,105575],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[34,105574,33819],{}," 里发生了什么。",[15,105577,105578],{},"推进 50 步：",[63,105580,105582],{"className":65,"code":105581,"language":67,"meta":68,"style":68},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[34,105583,105584,105600],{"__ignoreMap":68},[72,105585,105586,105588,105590,105592,105594,105596,105598],{"class":74,"line":75},[72,105587,3453],{"class":78},[72,105589,101907],{"class":82},[72,105591,26465],{"class":78},[72,105593,32861],{"class":362},[72,105595,564],{"class":82},[72,105597,1210],{"class":362},[72,105599,31204],{"class":82},[72,105601,105602],{"class":74,"line":370},[72,105603,102104],{"class":82},[15,105605,105606,105607,105610,105611,105613],{},"由于 ",[34,105608,105609],{},"timestep=0.01","，所以 50 步后时间约为 ",[34,105612,35747],{}," 秒。",[15,105615,105616],{},"重置：",[63,105618,105619],{"className":65,"code":104927,"language":67,"meta":68,"style":68},[34,105620,105621],{"__ignoreMap":68},[72,105622,105623],{"class":74,"line":75},[72,105624,104927],{"class":82},[15,105626,105627],{},"这会把时间、位置、速度恢复到初始状态。",[15,105629,105630],{},"手动改高度：",[63,105632,105634],{"className":65,"code":105633,"language":67,"meta":68,"style":68},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[34,105635,105636,105648],{"__ignoreMap":68},[72,105637,105638,105640,105642,105644,105646],{"class":74,"line":75},[72,105639,105100],{"class":82},[72,105641,640],{"class":362},[72,105643,4871],{"class":82},[72,105645,609],{"class":78},[72,105647,105109],{"class":362},[72,105649,105650],{"class":74,"line":370},[72,105651,104944],{"class":82},[15,105653,105654,105655,105658,105659,105662],{},"这个例子里 ",[34,105656,105657],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[34,105660,105661],{},"2.0"," 表示把小球放到更高的位置。",[531,105664,102113],{"id":102113},[63,105666,105667],{"className":65,"code":105551,"language":67,"meta":68,"style":68},[34,105668,105669],{"__ignoreMap":68},[72,105670,105671,105673,105675,105677,105679,105681,105683],{"class":74,"line":75},[72,105672,32365],{"class":78},[72,105674,105277],{"class":358},[72,105676,105280],{"class":82},[72,105678,1728],{"class":362},[72,105680,105285],{"class":82},[72,105682,96103],{"class":362},[72,105684,4167],{"class":82},[15,105686,105687],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[22,105689,105690,105699,105704],{},[25,105691,105692,105695,105696,105698],{},[34,105693,105694],{},"prefix","：一段文字，比如 ",[34,105697,105403],{},"，用来说明现在打印的是哪个阶段。",[25,105700,105701,105703],{},[34,105702,102490],{},"：MuJoCo 模型。",[25,105705,105706,105708],{},[34,105707,33819],{},"：MuJoCo 当前状态。",[15,105710,105711,37,105714,105717],{},[34,105712,105713],{},"prefix: str",[34,105715,105716],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[63,105719,105721],{"className":65,"code":105720,"language":67,"meta":68,"style":68},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[34,105722,105723],{"__ignoreMap":68},[72,105724,105725,105727,105729,105731,105733,105735],{"class":74,"line":75},[72,105726,30833],{"class":362},[72,105728,564],{"class":82},[72,105730,105328],{"class":366},[72,105732,105331],{"class":82},[72,105734,847],{"class":362},[72,105736,30915],{"class":82},[15,105738,105739,105742],{},[34,105740,105741],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[63,105744,105746],{"className":65,"code":105745,"language":67,"meta":68,"style":68},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[34,105747,105748,105760],{"__ignoreMap":68},[72,105749,105750,105752,105754,105756,105758],{"class":74,"line":75},[72,105751,102039],{"class":82},[72,105753,609],{"class":78},[72,105755,101818],{"class":82},[72,105757,101720],{"class":362},[72,105759,570],{"class":82},[72,105761,105762,105764,105766],{"class":74,"line":370},[72,105763,102063],{"class":82},[72,105765,609],{"class":78},[72,105767,101832],{"class":82},[15,105769,105770],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[63,105772,105774],{"className":65,"code":105773,"language":67,"meta":68,"style":68},"print_state(\"initial\", model, data)\n",[34,105775,105776],{"__ignoreMap":68},[72,105777,105778,105781,105783],{"class":74,"line":75},[72,105779,105780],{"class":82},"print_state(",[72,105782,105403],{"class":366},[72,105784,105406],{"class":82},[15,105786,105787,105788,105791],{},"调用刚才定义的 ",[34,105789,105790],{},"print_state"," 函数，打印初始状态。",[63,105793,105794],{"className":65,"code":105581,"language":67,"meta":68,"style":68},[34,105795,105796,105812],{"__ignoreMap":68},[72,105797,105798,105800,105802,105804,105806,105808,105810],{"class":74,"line":75},[72,105799,3453],{"class":78},[72,105801,101907],{"class":82},[72,105803,26465],{"class":78},[72,105805,32861],{"class":362},[72,105807,564],{"class":82},[72,105809,1210],{"class":362},[72,105811,31204],{"class":82},[72,105813,105814],{"class":74,"line":370},[72,105815,102104],{"class":82},[15,105817,105818],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[63,105820,105821],{"className":65,"code":104927,"language":67,"meta":68,"style":68},[34,105822,105823],{"__ignoreMap":68},[72,105824,105825],{"class":74,"line":75},[72,105826,104927],{"class":82},[15,105828,105829,105830,105832,105833,105835],{},"重置 ",[34,105831,33819],{},"。注意它不会重新创建 ",[34,105834,102490],{},"，因为模型结构没有变，只是状态回到初始值。",[63,105837,105838],{"className":65,"code":105093,"language":67,"meta":68,"style":68},[34,105839,105840],{"__ignoreMap":68},[72,105841,105842,105844,105846,105848,105850],{"class":74,"line":75},[72,105843,105100],{"class":82},[72,105845,640],{"class":362},[72,105847,4871],{"class":82},[72,105849,609],{"class":78},[72,105851,105109],{"class":362},[15,105853,105854,105855,37,105858,37,105861,105863],{},"这行是“手动改状态”。在 freejoint 中，",[34,105856,105857],{},"qpos[0]",[34,105859,105860],{},"qpos[1]",[34,105862,105657],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[63,105865,105866],{"className":65,"code":104944,"language":67,"meta":68,"style":68},[34,105867,105868],{"__ignoreMap":68},[72,105869,105870],{"class":74,"line":75},[72,105871,104944],{"class":82},[15,105873,105874,105875,105877,105878,105880],{},"手动改完 ",[34,105876,36],{}," 后，调用 ",[34,105879,104653],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[85,105882,102720],{"id":102719},[15,105884,105885],{},"你会看到:",[22,105887,105888,105893,105898,105901],{},[25,105889,105890,105891],{},"初始时间为 ",[34,105892,747],{},[25,105894,105895,105896],{},"50 步后时间约为 ",[34,105897,35747],{},[25,105899,105900],{},"reset 后状态恢复",[25,105902,105903,105904,105907,105908],{},"手动修改 ",[34,105905,105906],{},"data.qpos[2]"," 后，小球高度变为 ",[34,105909,105661],{},[15,105911,105912,105914],{},[34,105913,105657],{}," 在这个例子中表示自由刚体的 z 坐标。",[15,105916,105917],{},"输出里可以重点看三件事：",[22,105919,105920,105928,105933],{},[25,105921,105922,105924,105925,105927],{},[34,105923,2815],{}," 是否随着 ",[34,105926,220],{}," 增加。",[25,105929,105930,105932],{},[34,105931,36],{}," 的 z 坐标是否因为下落而变化。",[25,105934,105935,105937,105938,28807],{},[34,105936,104755],{}," 后时间是否回到 ",[34,105939,747],{},[85,105941,102752],{"id":102751},[22,105943,105944,105950,105956,105962,105965,105974],{},[25,105945,105946,105947,28807],{},"修改 timestep 为 ",[34,105948,105949],{},"0.005",[25,105951,105952,105953,28807],{},"重新运行，检查 50 步后时间是否约为 ",[34,105954,105955],{},"0.25",[25,105957,105958,105959,28807],{},"修改重力为 ",[34,105960,105961],{},"0 0 -1.0",[25,105963,105964],{},"观察小球下降速度是否变慢。",[25,105966,102815,105967,102818,105970,105973],{},[34,105968,105969],{},"data.qpos[2] = 2.0",[34,105971,105972],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[25,105975,105976,105977,105980],{},"注释掉 ",[34,105978,105979],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[85,105982,102857],{"id":102856},[531,105984,459,105986,105988],{"id":105985},"修改-dataqpos-后位置没有更新",[34,105987,101482],{}," 后位置没有更新",[15,105990,102866],{},[63,105992,105993],{"className":65,"code":104944,"language":67,"meta":68,"style":68},[34,105994,105995],{"__ignoreMap":68},[72,105996,105997],{"class":74,"line":75},[72,105998,104944],{"class":82},[531,106000,106001],{"id":106001},"数组维度看不懂",[15,106003,106004],{},"打印模型维度:",[63,106006,106008],{"className":65,"code":106007,"language":67,"meta":68,"style":68},"print(model.nq, model.nv, model.nu)\n",[34,106009,106010],{"__ignoreMap":68},[72,106011,106012,106014],{"class":74,"line":75},[72,106013,30833],{"class":362},[72,106015,106016],{"class":82},"(model.nq, model.nv, model.nu)\n",[154,106018,106019,106027],{},[157,106020,106021],{},[160,106022,106023,106025],{},[163,106024,104975],{"align":165},[163,106026,101117],{"align":165},[174,106028,106029,106039,106049],{},[160,106030,106031,106036],{},[179,106032,106033],{"align":165},[34,106034,106035],{},"nq",[179,106037,106038],{"align":165},"位置变量数量",[160,106040,106041,106046],{},[179,106042,106043],{"align":165},[34,106044,106045],{},"nv",[179,106047,106048],{"align":165},"速度变量数量",[160,106050,106051,106055],{},[179,106052,106053],{"align":165},[34,106054,102566],{},[179,106056,106057],{"align":165},"控制输入数量",[531,106059,106061,106062,106064],{"id":106060},"误以为-qpos-一定等于关节数","误以为 ",[34,106063,36],{}," 一定等于关节数",[15,106066,106067,106068,82948,106070,106072,106073,106075],{},"不是。例如 ",[34,106069,102025],{},[34,106071,36],{}," 是 7 维，但 ",[34,106074,40],{}," 是 6 维。",[531,106077,106079,106080,106082],{"id":106078},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[34,106081,36],{}," 的第几位",[15,106084,106085],{},"初学时可以先打印：",[63,106087,106089],{"className":65,"code":106088,"language":67,"meta":68,"style":68},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[34,106090,106091,106101,106111,106123],{"__ignoreMap":68},[72,106092,106093,106095,106097,106099],{"class":74,"line":75},[72,106094,30833],{"class":362},[72,106096,564],{"class":82},[72,106098,101845],{"class":366},[72,106100,101848],{"class":82},[72,106102,106103,106105,106107,106109],{"class":74,"line":370},[72,106104,30833],{"class":362},[72,106106,564],{"class":82},[72,106108,101857],{"class":366},[72,106110,101860],{"class":82},[72,106112,106113,106115,106117,106120],{"class":74,"line":1608},[72,106114,30833],{"class":362},[72,106116,564],{"class":82},[72,106118,106119],{"class":366},"\"qpos:\"",[72,106121,106122],{"class":82},", data.qpos)\n",[72,106124,106125,106127,106129,106132],{"class":74,"line":1623},[72,106126,30833],{"class":362},[72,106128,564],{"class":82},[72,106130,106131],{"class":366},"\"qvel:\"",[72,106133,106134],{"class":82},", data.qvel)\n",[15,106136,106137],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[531,106139,106140],{"id":106140},"仿真结果每次都一样",[15,106142,106143,106144,106146],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[34,106145,36],{},"、目标点或控制输入。",[85,106148,103011],{"id":103010},[15,106150,106151,106152,25040],{},"Python 控制 MuJoCo 的核心就是读写 ",[34,106153,33819],{},[22,106155,106156,106164,106169,106174],{},[25,106157,106158,106159,101432,106161,106163],{},"用 ",[34,106160,101482],{},[34,106162,101485],{}," 读取状态。",[25,106165,106158,106166,106168],{},[34,106167,452],{}," 写入控制。",[25,106170,106158,106171,106173],{},[34,106172,220],{}," 推进时间。",[25,106175,106176,106177,106179],{},"手动改状态后用 ",[34,106178,104653],{}," 刷新派生量。",[15,106181,106182],{},"理解这一章后，就可以进入关节和 actuator 控制。",[473,106184,106185],{},"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":68,"searchDepth":370,"depth":370,"links":106187},[106188,106189,106190,106197,106201,106202,106203,106213],{"id":101063,"depth":370,"text":101064},{"id":101184,"depth":370,"text":101185},{"id":101456,"depth":370,"text":101457,"children":106191},[106192,106194,106196],{"id":104956,"depth":1608,"text":106193},"qpos、qvel、ctrl 是什么",{"id":105034,"depth":1608,"text":106195},"mj_step 和 mj_forward 的区别",{"id":105123,"depth":1608,"text":105124},{"id":101662,"depth":370,"text":101663,"children":106198},[106199,106200],{"id":101978,"depth":1608,"text":101978},{"id":102113,"depth":1608,"text":102113},{"id":102719,"depth":370,"text":102720},{"id":102751,"depth":370,"text":102752},{"id":102856,"depth":370,"text":102857,"children":106204},[106205,106207,106208,106210,106212],{"id":105985,"depth":1608,"text":106206},"修改 data.qpos 后位置没有更新",{"id":106001,"depth":1608,"text":106001},{"id":106060,"depth":1608,"text":106209},"误以为 qpos 一定等于关节数",{"id":106078,"depth":1608,"text":106211},"不知道某个元素在 qpos 的第几位",{"id":106140,"depth":1608,"text":106140},{"id":103010,"depth":370,"text":103011},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104721,"description":68},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":106220,"title":106221,"body":106222,"description":68,"extension":487,"meta":107912,"navigation":490,"path":107913,"seo":107914,"stem":107915,"__hash__":107916},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":106223,"toc":107888},[106224,106227,106229,106232,106234,106259,106262,106281,106284,106286,106288,106312,106314,106328,106330,106371,106373,106397,106399,106402,106436,106438,106451,106454,106522,106531,106535,106538,106572,106578,106581,106585,106624,106627,106647,106651,106694,106696,106725,106728,106734,106737,106739,107133,107135,107147,107149,107160,107162,107165,107194,107202,107205,107240,107243,107245,107253,107256,107258,107269,107279,107299,107302,107338,107350,107398,107417,107459,107472,107500,107505,107526,107536,107554,107557,107591,107594,107614,107617,107636,107642,107644,107647,107653,107659,107669,107672,107678,107687,107689,107735,107737,107743,107749,107752,107755,107775,107778,107784,107790,107792,107815,107818,107821,107830,107833,107871,107873,107876,107882,107885],[10,106225,106221],{"id":106226},"_4关节actuator-与力控制",[85,106228,101064],{"id":101063},[15,106230,106231],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[15,106233,104734],{},[22,106235,106236,106242,106247,106251,106256],{},[25,106237,106238,106241],{},[34,106239,106240],{},"hinge"," 关节",[25,106243,106244],{},[34,106245,106246],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[25,106248,106249],{},[34,106250,452],{},[25,106252,106253],{},[34,106254,106255],{},"ctrlrange",[25,106257,106258],{},"读取关节角和角速度",[15,106260,106261],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[63,106263,106265],{"className":65,"code":106264,"language":67,"meta":68,"style":68},"data.ctrl[0] = ...\n",[34,106266,106267],{"__ignoreMap":68},[72,106268,106269,106272,106274,106276,106278],{"class":74,"line":75},[72,106270,106271],{"class":82},"data.ctrl[",[72,106273,747],{"class":362},[72,106275,4871],{"class":82},[72,106277,609],{"class":78},[72,106279,106280],{"class":362}," ...\n",[15,106282,106283],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[85,106285,101185],{"id":101184},[15,106287,101188],{},[63,106289,106290],{"className":349,"code":104789,"language":351,"meta":68,"style":68},[34,106291,106292],{"__ignoreMap":68},[72,106293,106294,106296,106298,106300,106302,106304,106306,106308,106310],{"class":74,"line":75},[72,106295,24998],{"class":358},[72,106297,26737],{"class":366},[72,106299,24256],{"class":366},[72,106301,26822],{"class":362},[72,106303,104804],{"class":366},[72,106305,101213],{"class":366},[72,106307,102905],{"class":366},[72,106309,101229],{"class":366},[72,106311,104813],{"class":366},[15,106313,103223],{},[63,106315,106316],{"className":349,"code":101334,"language":351,"meta":68,"style":68},[34,106317,106318],{"__ignoreMap":68},[72,106319,106320,106322,106324,106326],{"class":74,"line":75},[72,106321,24253],{"class":358},[72,106323,24256],{"class":366},[72,106325,101345],{"class":366},[72,106327,101348],{"class":366},[15,106329,103240],{},[63,106331,106333],{"className":349,"code":106332,"language":351,"meta":68,"style":68},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[34,106334,106335,106352,106361],{"__ignoreMap":68},[72,106336,106337,106339,106341,106343,106346,106348,106350],{"class":74,"line":75},[72,106338,30751],{"class":358},[72,106340,29598],{"class":366},[72,106342,25537],{"class":362},[72,106344,106345],{"class":366}," mujoco-control",[72,106347,101390],{"class":366},[72,106349,101393],{"class":362},[72,106351,101396],{"class":362},[72,106353,106354,106356,106358],{"class":74,"line":370},[72,106355,30751],{"class":358},[72,106357,101403],{"class":366},[72,106359,106360],{"class":366}," mujoco-control\n",[72,106362,106363,106365,106367,106369],{"class":74,"line":1608},[72,106364,24253],{"class":358},[72,106366,24256],{"class":366},[72,106368,101345],{"class":366},[72,106370,101348],{"class":366},[15,106372,101419],{},[22,106374,106375,106381,106388,106394],{},[25,106376,106377,106380],{},[34,106378,106379],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[25,106382,106383,106385,106386,28807],{},[34,106384,452],{}," 长度等于 ",[34,106387,456],{},[25,106389,82640,106390,106393],{},[34,106391,106392],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[25,106395,106396],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[85,106398,101457],{"id":101456},[15,106400,106401],{},"关节决定 body 如何运动:",[63,106403,106405],{"className":53485,"code":106404,"language":53487,"meta":68,"style":68},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[34,106406,106407],{"__ignoreMap":68},[72,106408,106409,106411,106413,106415,106417,106420,106422,106424,106426,106429,106431,106434],{"class":74,"line":75},[72,106410,1464],{"class":82},[72,106412,103360],{"class":51718},[72,106414,15346],{"class":358},[72,106416,609],{"class":82},[72,106418,106419],{"class":366},"\"hinge\"",[72,106421,54242],{"class":358},[72,106423,609],{"class":82},[72,106425,106419],{"class":366},[72,106427,106428],{"class":358}," axis",[72,106430,609],{"class":82},[72,106432,106433],{"class":366},"\"0 1 0\"",[72,106435,101555],{"class":82},[15,106437,103456],{},[22,106439,106440,106445,106448],{},[25,106441,106442,106443],{},"名字是 ",[34,106444,106240],{},[25,106446,106447],{},"类型是旋转关节",[25,106449,106450],{},"绕 y 轴旋转",[15,106452,106453],{},"actuator 决定如何施加控制:",[63,106455,106457],{"className":53485,"code":106456,"language":53487,"meta":68,"style":68},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[34,106458,106459,106468,106514],{"__ignoreMap":68},[72,106460,106461,106463,106466],{"class":74,"line":75},[72,106462,1464],{"class":82},[72,106464,106465],{"class":51718},"actuator",[72,106467,51725],{"class":82},[72,106469,106470,106472,106475,106477,106479,106482,106485,106487,106489,106492,106494,106496,106499,106501,106504,106507,106509,106512],{"class":74,"line":370},[72,106471,52562],{"class":82},[72,106473,106474],{"class":51718},"motor",[72,106476,15346],{"class":358},[72,106478,609],{"class":82},[72,106480,106481],{"class":366},"\"hinge_motor\"",[72,106483,106484],{"class":358}," joint",[72,106486,609],{"class":82},[72,106488,106419],{"class":366},[72,106490,106491],{"class":358}," gear",[72,106493,609],{"class":82},[72,106495,4106],{"class":366},[72,106497,106498],{"class":358}," ctrlrange",[72,106500,609],{"class":82},[72,106502,106503],{"class":366},"\"-2 2\"",[72,106505,106506],{"class":358}," ctrllimited",[72,106508,609],{"class":82},[72,106510,106511],{"class":366},"\"true\"",[72,106513,101555],{"class":82},[72,106515,106516,106518,106520],{"class":74,"line":1608},[72,106517,52203],{"class":82},[72,106519,106465],{"class":51718},[72,106521,51725],{"class":82},[15,106523,106524,106527,106528,28807],{},[34,106525,106526],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[34,106529,106530],{},"[-2, 2]",[531,106532,106534],{"id":106533},"joint-和-actuator-的关系","joint 和 actuator 的关系",[15,106536,106537],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[154,106539,106540,106550],{},[157,106541,106542],{},[160,106543,106544,106546,106548],{},[163,106545,26175],{"align":165},[163,106547,103100],{"align":165},[163,106549,101149],{"align":165},[174,106551,106552,106562],{},[160,106553,106554,106556,106559],{},[179,106555,103360],{"align":165},[179,106557,106558],{"align":165},"定义能怎么动",[179,106560,106561],{"align":165},"门轴允许门旋转",[160,106563,106564,106566,106569],{},[179,106565,106465],{"align":165},[179,106567,106568],{"align":165},"定义怎么施力或控制",[179,106570,106571],{"align":165},"人推门、马达带动门",[15,106573,106574,106575,106577],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[34,106576,452],{}," 主动控制它。",[15,106579,106580],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[531,106582,106584],{"id":106583},"hinge-joint","hinge joint",[63,106586,106588],{"className":53485,"code":106587,"language":53487,"meta":68,"style":68},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[34,106589,106590],{"__ignoreMap":68},[72,106591,106592,106594,106596,106598,106600,106602,106604,106606,106608,106610,106612,106614,106617,106619,106622],{"class":74,"line":75},[72,106593,1464],{"class":82},[72,106595,103360],{"class":51718},[72,106597,15346],{"class":358},[72,106599,609],{"class":82},[72,106601,106419],{"class":366},[72,106603,54242],{"class":358},[72,106605,609],{"class":82},[72,106607,106419],{"class":366},[72,106609,106428],{"class":358},[72,106611,609],{"class":82},[72,106613,106433],{"class":366},[72,106615,106616],{"class":358}," damping",[72,106618,609],{"class":82},[72,106620,106621],{"class":366},"\"0.1\"",[72,106623,101555],{"class":82},[15,106625,106626],{},"含义：",[22,106628,106629,106635,106641],{},[25,106630,106631,106634],{},[34,106632,106633],{},"type=\"hinge\"","：只能绕一个轴旋转。",[25,106636,106637,106640],{},[34,106638,106639],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[25,106642,106643,106646],{},[34,106644,106645],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[531,106648,106650],{"id":106649},"motor-actuator","motor actuator",[63,106652,106654],{"className":53485,"code":106653,"language":53487,"meta":68,"style":68},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[34,106655,106656],{"__ignoreMap":68},[72,106657,106658,106660,106662,106664,106666,106668,106670,106672,106674,106676,106678,106680,106682,106684,106686,106688,106690,106692],{"class":74,"line":75},[72,106659,1464],{"class":82},[72,106661,106474],{"class":51718},[72,106663,15346],{"class":358},[72,106665,609],{"class":82},[72,106667,106481],{"class":366},[72,106669,106484],{"class":358},[72,106671,609],{"class":82},[72,106673,106419],{"class":366},[72,106675,106491],{"class":358},[72,106677,609],{"class":82},[72,106679,4106],{"class":366},[72,106681,106498],{"class":358},[72,106683,609],{"class":82},[72,106685,106503],{"class":366},[72,106687,106506],{"class":358},[72,106689,609],{"class":82},[72,106691,106511],{"class":366},[72,106693,101555],{"class":82},[15,106695,106626],{},[22,106697,106698,106707,106713,106719],{},[25,106699,106700,106703,106704,106706],{},[34,106701,106702],{},"joint=\"hinge\"","：这个电机作用在名为 ",[34,106705,106240],{}," 的关节上。",[25,106708,106709,106712],{},[34,106710,106711],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[25,106714,106715,106718],{},[34,106716,106717],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[25,106720,106721,106724],{},[34,106722,106723],{},"ctrllimited=\"true\"","：启用控制范围限制。",[15,106726,106727],{},"简单理解：",[63,106729,106732],{"className":106730,"code":106731,"language":127,"meta":68},[125],"实际施加效果 ≈ data.ctrl[0] * gear\n",[34,106733,106731],{"__ignoreMap":68},[15,106735,106736],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[85,106738,101663],{"id":101662},[63,106740,106742],{"className":65,"code":106741,"language":67,"meta":68,"style":68},"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",[34,106743,106744,106751,106755,106761,106771,106775,106779,106787,106792,106797,106801,106805,106810,106815,106819,106824,106829,106834,106839,106843,106847,106851,106856,106861,106866,106870,106874,106878,106882,106894,106906,106914,106918,106928,106938,106948,106952,106965,106978,106982,106999,107013,107048,107052,107056,107067,107082,107097,107109,107113,107117,107129],{"__ignoreMap":68},[72,106745,106746,106748],{"class":74,"line":75},[72,106747,79],{"class":78},[72,106749,106750],{"class":82}," math\n",[72,106752,106753],{"class":74,"line":370},[72,106754,2828],{"emptyLinePlaceholder":490},[72,106756,106757,106759],{"class":74,"line":1608},[72,106758,79],{"class":78},[72,106760,83],{"class":82},[72,106762,106763,106765,106767,106769],{"class":74,"line":1623},[72,106764,79],{"class":78},[72,106766,31798],{"class":82},[72,106768,31801],{"class":78},[72,106770,31804],{"class":82},[72,106772,106773],{"class":74,"line":1629},[72,106774,2828],{"emptyLinePlaceholder":490},[72,106776,106777],{"class":74,"line":1643},[72,106778,2828],{"emptyLinePlaceholder":490},[72,106780,106781,106783,106785],{"class":74,"line":1649},[72,106782,101720],{"class":362},[72,106784,13990],{"class":78},[72,106786,101725],{"class":366},[72,106788,106789],{"class":74,"line":1740},[72,106790,106791],{"class":366},"\u003Cmujoco model=\"one_link_motor\">\n",[72,106793,106794],{"class":74,"line":1746},[72,106795,106796],{"class":366},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[72,106798,106799],{"class":74,"line":1758},[72,106800,2828],{"emptyLinePlaceholder":490},[72,106802,106803],{"class":74,"line":2041},[72,106804,101744],{"class":366},[72,106806,106807],{"class":74,"line":2046},[72,106808,106809],{"class":366},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[72,106811,106812],{"class":74,"line":2052},[72,106813,106814],{"class":366},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[72,106816,106817],{"class":74,"line":2057},[72,106818,2828],{"emptyLinePlaceholder":490},[72,106820,106821],{"class":74,"line":2071},[72,106822,106823],{"class":366},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[72,106825,106826],{"class":74,"line":2076},[72,106827,106828],{"class":366},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[72,106830,106831],{"class":74,"line":2082},[72,106832,106833],{"class":366},"        \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",[72,106835,106836],{"class":74,"line":2103},[72,106837,106838],{"class":366},"      \u003C\u002Fbody>\n",[72,106840,106841],{"class":74,"line":2108},[72,106842,101773],{"class":366},[72,106844,106845],{"class":74,"line":2122},[72,106846,101778],{"class":366},[72,106848,106849],{"class":74,"line":2127},[72,106850,2828],{"emptyLinePlaceholder":490},[72,106852,106853],{"class":74,"line":2156},[72,106854,106855],{"class":366},"  \u003Cactuator>\n",[72,106857,106858],{"class":74,"line":2161},[72,106859,106860],{"class":366},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[72,106862,106863],{"class":74,"line":2178},[72,106864,106865],{"class":366},"  \u003C\u002Factuator>\n",[72,106867,106868],{"class":74,"line":2183},[72,106869,101783],{"class":366},[72,106871,106872],{"class":74,"line":2188},[72,106873,96115],{"class":366},[72,106875,106876],{"class":74,"line":2193},[72,106877,2828],{"emptyLinePlaceholder":490},[72,106879,106880],{"class":74,"line":2207},[72,106881,2828],{"emptyLinePlaceholder":490},[72,106883,106884,106886,106888,106890,106892],{"class":74,"line":2212},[72,106885,32365],{"class":78},[72,106887,2401],{"class":358},[72,106889,101804],{"class":82},[72,106891,96103],{"class":362},[72,106893,4167],{"class":82},[72,106895,106896,106898,106900,106902,106904],{"class":74,"line":3005},[72,106897,101813],{"class":82},[72,106899,609],{"class":78},[72,106901,101818],{"class":82},[72,106903,101720],{"class":362},[72,106905,570],{"class":82},[72,106907,106908,106910,106912],{"class":74,"line":3019},[72,106909,101827],{"class":82},[72,106911,609],{"class":78},[72,106913,101832],{"class":82},[72,106915,106916],{"class":74,"line":3027},[72,106917,2828],{"emptyLinePlaceholder":490},[72,106919,106920,106922,106924,106926],{"class":74,"line":3032},[72,106921,31717],{"class":362},[72,106923,564],{"class":82},[72,106925,101845],{"class":366},[72,106927,101848],{"class":82},[72,106929,106930,106932,106934,106936],{"class":74,"line":3038},[72,106931,31717],{"class":362},[72,106933,564],{"class":82},[72,106935,101857],{"class":366},[72,106937,101860],{"class":82},[72,106939,106940,106942,106944,106946],{"class":74,"line":3044},[72,106941,31717],{"class":362},[72,106943,564],{"class":82},[72,106945,101869],{"class":366},[72,106947,101872],{"class":82},[72,106949,106950],{"class":74,"line":3049},[72,106951,2828],{"emptyLinePlaceholder":490},[72,106953,106954,106956,106959,106961,106963],{"class":74,"line":8374},[72,106955,3529],{"class":78},[72,106957,106958],{"class":82}," model.nu ",[72,106960,21374],{"class":78},[72,106962,25540],{"class":362},[72,106964,4167],{"class":82},[72,106966,106967,106969,106971,106973,106976],{"class":74,"line":8398},[72,106968,103836],{"class":78},[72,106970,103839],{"class":362},[72,106972,564],{"class":82},[72,106974,106975],{"class":366},"\"expected exactly one actuator\"",[72,106977,570],{"class":82},[72,106979,106980],{"class":74,"line":8403},[72,106981,2828],{"emptyLinePlaceholder":490},[72,106983,106984,106986,106988,106990,106992,106994,106997],{"class":74,"line":8409},[72,106985,3629],{"class":78},[72,106987,32034],{"class":82},[72,106989,26465],{"class":78},[72,106991,32861],{"class":362},[72,106993,564],{"class":82},[72,106995,106996],{"class":362},"2000",[72,106998,31204],{"class":82},[72,107000,107001,107004,107006,107008,107010],{"class":74,"line":8436},[72,107002,107003],{"class":82},"        t ",[72,107005,609],{"class":78},[72,107007,32034],{"class":82},[72,107009,1009],{"class":78},[72,107011,107012],{"class":82}," model.opt.timestep\n",[72,107014,107015,107018,107020,107022,107024,107027,107029,107032,107034,107036,107039,107041,107043,107045],{"class":74,"line":8441},[72,107016,107017],{"class":82},"        data.ctrl[",[72,107019,747],{"class":362},[72,107021,4871],{"class":82},[72,107023,609],{"class":78},[72,107025,107026],{"class":362}," 1.5",[72,107028,6944],{"class":78},[72,107030,107031],{"class":82}," math.sin(",[72,107033,105661],{"class":362},[72,107035,6944],{"class":78},[72,107037,107038],{"class":82}," math.pi ",[72,107040,1009],{"class":78},[72,107042,62285],{"class":362},[72,107044,6944],{"class":78},[72,107046,107047],{"class":82}," t)\n",[72,107049,107050],{"class":74,"line":8447},[72,107051,101922],{"class":82},[72,107053,107054],{"class":74,"line":8459},[72,107055,2828],{"emptyLinePlaceholder":490},[72,107057,107058,107060,107062,107065],{"class":74,"line":8471},[72,107059,31717],{"class":362},[72,107061,564],{"class":82},[72,107063,107064],{"class":366},"\"time:\"",[72,107066,101884],{"class":82},[72,107068,107069,107071,107073,107076,107078,107080],{"class":74,"line":8483},[72,107070,31717],{"class":362},[72,107072,564],{"class":82},[72,107074,107075],{"class":366},"\"joint qpos:\"",[72,107077,105331],{"class":82},[72,107079,847],{"class":362},[72,107081,30915],{"class":82},[72,107083,107084,107086,107088,107091,107093,107095],{"class":74,"line":10142},[72,107085,31717],{"class":362},[72,107087,564],{"class":82},[72,107089,107090],{"class":366},"\"joint qvel:\"",[72,107092,105347],{"class":82},[72,107094,847],{"class":362},[72,107096,30915],{"class":82},[72,107098,107099,107101,107103,107106],{"class":74,"line":10167},[72,107100,31717],{"class":362},[72,107102,564],{"class":82},[72,107104,107105],{"class":366},"\"last ctrl:\"",[72,107107,107108],{"class":82},", data.ctrl.copy())\n",[72,107110,107111],{"class":74,"line":10190},[72,107112,2828],{"emptyLinePlaceholder":490},[72,107114,107115],{"class":74,"line":10214},[72,107116,2828],{"emptyLinePlaceholder":490},[72,107118,107119,107121,107123,107125,107127],{"class":74,"line":10219},[72,107120,1960],{"class":78},[72,107122,31638],{"class":362},[72,107124,101965],{"class":78},[72,107126,101968],{"class":366},[72,107128,4167],{"class":82},[72,107130,107131],{"class":74,"line":10224},[72,107132,101975],{"class":82},[15,107134,103974],{},[63,107136,107138],{"className":349,"code":107137,"language":351,"meta":68,"style":68},"touch ch4_joint_motor.py\n",[34,107139,107140],{"__ignoreMap":68},[72,107141,107142,107144],{"class":74,"line":75},[72,107143,101690],{"class":358},[72,107145,107146],{"class":366}," ch4_joint_motor.py\n",[15,107148,102705],{},[63,107150,107152],{"className":349,"code":107151,"language":351,"meta":68,"style":68},"python ch4_joint_motor.py\n",[34,107153,107154],{"__ignoreMap":68},[72,107155,107156,107158],{"class":74,"line":75},[72,107157,67],{"class":358},[72,107159,107146],{"class":366},[531,107161,101978],{"id":101978},[15,107163,107164],{},"检查 actuator 数量：",[63,107166,107168],{"className":65,"code":107167,"language":67,"meta":68,"style":68},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[34,107169,107170,107182],{"__ignoreMap":68},[72,107171,107172,107174,107176,107178,107180],{"class":74,"line":75},[72,107173,1960],{"class":78},[72,107175,106958],{"class":82},[72,107177,21374],{"class":78},[72,107179,25540],{"class":362},[72,107181,4167],{"class":82},[72,107183,107184,107186,107188,107190,107192],{"class":74,"line":370},[72,107185,104299],{"class":78},[72,107187,103839],{"class":362},[72,107189,564],{"class":82},[72,107191,106975],{"class":366},[72,107193,570],{"class":82},[15,107195,107196,107198,107199,107201],{},[34,107197,456],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[34,107200,452],{}," 长度应该是 1。",[15,107203,107204],{},"产生正弦控制信号：",[63,107206,107208],{"className":65,"code":107207,"language":67,"meta":68,"style":68},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[34,107209,107210],{"__ignoreMap":68},[72,107211,107212,107214,107216,107218,107220,107222,107224,107226,107228,107230,107232,107234,107236,107238],{"class":74,"line":75},[72,107213,106271],{"class":82},[72,107215,747],{"class":362},[72,107217,4871],{"class":82},[72,107219,609],{"class":78},[72,107221,107026],{"class":362},[72,107223,6944],{"class":78},[72,107225,107031],{"class":82},[72,107227,105661],{"class":362},[72,107229,6944],{"class":78},[72,107231,107038],{"class":82},[72,107233,1009],{"class":78},[72,107235,62285],{"class":362},[72,107237,6944],{"class":78},[72,107239,107047],{"class":82},[15,107241,107242],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[15,107244,102078],{},[63,107246,107247],{"className":65,"code":104906,"language":67,"meta":68,"style":68},[34,107248,107249],{"__ignoreMap":68},[72,107250,107251],{"class":74,"line":75},[72,107252,104906],{"class":82},[15,107254,107255],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[531,107257,102113],{"id":102113},[63,107259,107261],{"className":65,"code":107260,"language":67,"meta":68,"style":68},"import math\n",[34,107262,107263],{"__ignoreMap":68},[72,107264,107265,107267],{"class":74,"line":75},[72,107266,79],{"class":78},[72,107268,106750],{"class":82},[15,107270,107271,107272,101432,107275,107278],{},"导入 Python 标准库里的数学模块。后面要用 ",[34,107273,107274],{},"math.sin",[34,107276,107277],{},"math.pi"," 生成周期变化的控制信号。",[63,107280,107281],{"className":65,"code":104090,"language":67,"meta":68,"style":68},[34,107282,107283,107289],{"__ignoreMap":68},[72,107284,107285,107287],{"class":74,"line":75},[72,107286,79],{"class":78},[72,107288,83],{"class":82},[72,107290,107291,107293,107295,107297],{"class":74,"line":370},[72,107292,79],{"class":78},[72,107294,31798],{"class":82},[72,107296,31801],{"class":78},[72,107298,31804],{"class":82},[15,107300,107301],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[63,107303,107304],{"className":53485,"code":106587,"language":53487,"meta":68,"style":68},[34,107305,107306],{"__ignoreMap":68},[72,107307,107308,107310,107312,107314,107316,107318,107320,107322,107324,107326,107328,107330,107332,107334,107336],{"class":74,"line":75},[72,107309,1464],{"class":82},[72,107311,103360],{"class":51718},[72,107313,15346],{"class":358},[72,107315,609],{"class":82},[72,107317,106419],{"class":366},[72,107319,54242],{"class":358},[72,107321,609],{"class":82},[72,107323,106419],{"class":366},[72,107325,106428],{"class":358},[72,107327,609],{"class":82},[72,107329,106433],{"class":366},[72,107331,106616],{"class":358},[72,107333,609],{"class":82},[72,107335,106621],{"class":366},[72,107337,101555],{"class":82},[15,107339,107340,107341,107343,107344,107346,107347,107349],{},"这行定义关节。",[34,107342,106240],{}," 表示旋转关节。",[34,107345,106639],{}," 表示绕 y 轴旋转。",[34,107348,106645],{}," 表示有一点阻尼，运动不会完全无损耗。",[63,107351,107353],{"className":53485,"code":107352,"language":53487,"meta":68,"style":68},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[34,107354,107355],{"__ignoreMap":68},[72,107356,107357,107359,107361,107363,107365,107368,107370,107372,107375,107378,107380,107383,107385,107387,107389,107391,107393,107396],{"class":74,"line":75},[72,107358,1464],{"class":82},[72,107360,101531],{"class":51718},[72,107362,15346],{"class":358},[72,107364,609],{"class":82},[72,107366,107367],{"class":366},"\"link_geom\"",[72,107369,54242],{"class":358},[72,107371,609],{"class":82},[72,107373,107374],{"class":366},"\"capsule\"",[72,107376,107377],{"class":358}," fromto",[72,107379,609],{"class":82},[72,107381,107382],{"class":366},"\"0 0 0 0 0 0.5\"",[72,107384,101547],{"class":358},[72,107386,609],{"class":82},[72,107388,104182],{"class":366},[72,107390,102406],{"class":358},[72,107392,609],{"class":82},[72,107394,107395],{"class":366},"\"0.5\"",[72,107397,101555],{"class":82},[15,107399,107400,107401,107403,107404,107406,107407,107410,107411,28807,107414,107416],{},"这行定义摆杆的形状。",[34,107402,103569],{}," 是胶囊体，适合表示杆子。",[34,107405,103580],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[34,107408,107409],{},"(0,0,0)"," 延伸到 ",[34,107412,107413],{},"(0,0,0.5)",[34,107415,103574],{}," 是半径。",[63,107418,107419],{"className":53485,"code":106653,"language":53487,"meta":68,"style":68},[34,107420,107421],{"__ignoreMap":68},[72,107422,107423,107425,107427,107429,107431,107433,107435,107437,107439,107441,107443,107445,107447,107449,107451,107453,107455,107457],{"class":74,"line":75},[72,107424,1464],{"class":82},[72,107426,106474],{"class":51718},[72,107428,15346],{"class":358},[72,107430,609],{"class":82},[72,107432,106481],{"class":366},[72,107434,106484],{"class":358},[72,107436,609],{"class":82},[72,107438,106419],{"class":366},[72,107440,106491],{"class":358},[72,107442,609],{"class":82},[72,107444,4106],{"class":366},[72,107446,106498],{"class":358},[72,107448,609],{"class":82},[72,107450,106503],{"class":366},[72,107452,106506],{"class":358},[72,107454,609],{"class":82},[72,107456,106511],{"class":366},[72,107458,101555],{"class":82},[15,107460,107461,107462,107464,107465,107468,107469,107471],{},"这行定义电机。它作用在 ",[34,107463,106240],{}," 关节上。",[34,107466,107467],{},"gear"," 可以理解成放大倍数。",[34,107470,106255],{}," 限制控制输入范围。",[63,107473,107474],{"className":65,"code":107167,"language":67,"meta":68,"style":68},[34,107475,107476,107488],{"__ignoreMap":68},[72,107477,107478,107480,107482,107484,107486],{"class":74,"line":75},[72,107479,1960],{"class":78},[72,107481,106958],{"class":82},[72,107483,21374],{"class":78},[72,107485,25540],{"class":362},[72,107487,4167],{"class":82},[72,107489,107490,107492,107494,107496,107498],{"class":74,"line":370},[72,107491,104299],{"class":78},[72,107493,103839],{"class":362},[72,107495,564],{"class":82},[72,107497,106975],{"class":366},[72,107499,570],{"class":82},[15,107501,107502,107504],{},[34,107503,456],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[63,107506,107508],{"className":65,"code":107507,"language":67,"meta":68,"style":68},"for step in range(2000):\n",[34,107509,107510],{"__ignoreMap":68},[72,107511,107512,107514,107516,107518,107520,107522,107524],{"class":74,"line":75},[72,107513,3453],{"class":78},[72,107515,32034],{"class":82},[72,107517,26465],{"class":78},[72,107519,32861],{"class":362},[72,107521,564],{"class":82},[72,107523,106996],{"class":362},[72,107525,31204],{"class":82},[15,107527,107528,107529,107531,107532,107535],{},"循环 2000 步。这里没有用 ",[34,107530,1546],{},"，而是用 ",[34,107533,107534],{},"step","，因为后面要用当前步数计算时间。",[63,107537,107539],{"className":65,"code":107538,"language":67,"meta":68,"style":68},"t = step * model.opt.timestep\n",[34,107540,107541],{"__ignoreMap":68},[72,107542,107543,107546,107548,107550,107552],{"class":74,"line":75},[72,107544,107545],{"class":82},"t ",[72,107547,609],{"class":78},[72,107549,32034],{"class":82},[72,107551,1009],{"class":78},[72,107553,107012],{"class":82},[15,107555,107556],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[63,107558,107559],{"className":65,"code":107207,"language":67,"meta":68,"style":68},[34,107560,107561],{"__ignoreMap":68},[72,107562,107563,107565,107567,107569,107571,107573,107575,107577,107579,107581,107583,107585,107587,107589],{"class":74,"line":75},[72,107564,106271],{"class":82},[72,107566,747],{"class":362},[72,107568,4871],{"class":82},[72,107570,609],{"class":78},[72,107572,107026],{"class":362},[72,107574,6944],{"class":78},[72,107576,107031],{"class":82},[72,107578,105661],{"class":362},[72,107580,6944],{"class":78},[72,107582,107038],{"class":82},[72,107584,1009],{"class":78},[72,107586,62285],{"class":362},[72,107588,6944],{"class":78},[72,107590,107047],{"class":82},[15,107592,107593],{},"这行给电机输入一个正弦波。拆开看：",[22,107595,107596,107602,107608],{},[25,107597,107598,107601],{},[34,107599,107600],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[25,107603,107604,107607],{},[34,107605,107606],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[25,107609,107610,107613],{},[34,107611,107612],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[15,107615,107616],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[63,107618,107620],{"className":65,"code":107619,"language":67,"meta":68,"style":68},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[34,107621,107622],{"__ignoreMap":68},[72,107623,107624,107626,107628,107630,107632,107634],{"class":74,"line":75},[72,107625,30833],{"class":362},[72,107627,564],{"class":82},[72,107629,107075],{"class":366},[72,107631,105331],{"class":82},[72,107633,847],{"class":362},[72,107635,30915],{"class":82},[15,107637,107638,107639,107641],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[34,107640,101482],{}," 只有一个数。",[85,107643,102720],{"id":102719},[15,107645,107646],{},"输出类似:",[63,107648,107651],{"className":107649,"code":107650,"language":127,"meta":68},[125],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[34,107652,107650],{"__ignoreMap":68},[15,107654,107655,107656,107658],{},"这里 ",[34,107657,106526],{}," 是电机输入。",[15,107660,107661,107664,107665,107668],{},[34,107662,107663],{},"joint qpos"," 是关节角度，单位通常是弧度。",[34,107666,107667],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[15,107670,107671],{},"角度单位提示：",[63,107673,107676],{"className":107674,"code":107675,"language":127,"meta":68},[125],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[34,107677,107675],{"__ignoreMap":68},[15,107679,107680,107681,107683,107684,107686],{},"如果你看到 ",[34,107682,36],{}," 是 ",[34,107685,35747],{},"，大约就是 28.6 度。",[85,107688,102752],{"id":102751},[22,107690,107691,107698,107701,107708,107711,107719,107727],{},[25,107692,102815,107693,102818,107695,28807],{},[34,107694,106711],{},[34,107696,107697],{},"gear=\"5\"",[25,107699,107700],{},"重新运行，观察关节运动是否更剧烈。",[25,107702,102815,107703,102818,107705,28807],{},[34,107704,106255],{},[34,107706,107707],{},"-0.2 0.2",[25,107709,107710],{},"重新运行，观察控制能力是否变弱。",[25,107712,107713,107714,107716,107717,28807],{},"去掉 actuator，确认 ",[34,107715,456],{}," 变成 ",[34,107718,747],{},[25,107720,102815,107721,102818,107723,107726],{},[34,107722,106645],{},[34,107724,107725],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[25,107728,102815,107729,102818,107731,107734],{},[34,107730,106639],{},[34,107732,107733],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[85,107736,102857],{"id":102856},[531,107738,107740],{"id":107739},"indexerror-index-0-is-out-of-bounds",[34,107741,107742],{},"IndexError: index 0 is out of bounds",[15,107744,107745,107746,107748],{},"原因是 ",[34,107747,106392],{},"，没有 actuator。",[531,107750,107751],{"id":107751},"关节几乎不动",[15,107753,107754],{},"可能原因:",[22,107756,107757,107762,107766,107772],{},[25,107758,107759,107761],{},[34,107760,107467],{}," 太小",[25,107763,107764,107761],{},[34,107765,106255],{},[25,107767,107768,107771],{},[34,107769,107770],{},"damping"," 太大",[25,107773,107774],{},"重力方向导致运动不明显",[531,107776,107777],{"id":107777},"模型编译失败",[15,107779,107780,107781,107783],{},"检查 actuator 引用的 ",[34,107782,106702],{}," 是否存在，joint 名称是否拼写一致。",[531,107785,107787,107789],{"id":107786},"datactrl0-写了但没有效果",[34,107788,106526],{}," 写了但没有效果",[15,107791,102979],{},[22,107793,107794,107799,107802,107807,107812],{},[25,107795,107796,107798],{},[34,107797,456],{}," 是否大于 0。",[25,107800,107801],{},"motor 是否引用了正确 joint。",[25,107803,107804,107806],{},[34,107805,107467],{}," 是否太小。",[25,107808,107809,107811],{},[34,107810,106255],{}," 是否把输入限制得太小。",[25,107813,107814],{},"body 是否真的有可动 joint。",[531,107816,107817],{"id":107817},"控制输入超过范围会怎样",[15,107819,107820],{},"如果设置了：",[63,107822,107824],{"className":53485,"code":107823,"language":53487,"meta":68,"style":68},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[34,107825,107826],{"__ignoreMap":68},[72,107827,107828],{"class":74,"line":75},[72,107829,107823],{"class":82},[15,107831,107832],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[63,107834,107836],{"className":65,"code":107835,"language":67,"meta":68,"style":68},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[34,107837,107838,107858],{"__ignoreMap":68},[72,107839,107840,107843,107845,107848,107850,107852,107854,107856],{"class":74,"line":75},[72,107841,107842],{"class":82},"action ",[72,107844,609],{"class":78},[72,107846,107847],{"class":82}," np.clip(action, ",[72,107849,1086],{"class":78},[72,107851,105661],{"class":362},[72,107853,12861],{"class":82},[72,107855,105661],{"class":362},[72,107857,570],{"class":82},[72,107859,107860,107862,107864,107866,107868],{"class":74,"line":370},[72,107861,106271],{"class":82},[72,107863,747],{"class":362},[72,107865,4871],{"class":82},[72,107867,609],{"class":78},[72,107869,107870],{"class":82}," action\n",[85,107872,103011],{"id":103010},[15,107874,107875],{},"这一章建立了控制任务的基本形式：",[63,107877,107880],{"className":107878,"code":107879,"language":127,"meta":68},[125],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[34,107881,107879],{"__ignoreMap":68},[15,107883,107884],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[473,107886,107887],{},"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":68,"searchDepth":370,"depth":370,"links":107889},[107890,107891,107892,107897,107901,107902,107903,107911],{"id":101063,"depth":370,"text":101064},{"id":101184,"depth":370,"text":101185},{"id":101456,"depth":370,"text":101457,"children":107893},[107894,107895,107896],{"id":106533,"depth":1608,"text":106534},{"id":106583,"depth":1608,"text":106584},{"id":106649,"depth":1608,"text":106650},{"id":101662,"depth":370,"text":101663,"children":107898},[107899,107900],{"id":101978,"depth":1608,"text":101978},{"id":102113,"depth":1608,"text":102113},{"id":102719,"depth":370,"text":102720},{"id":102751,"depth":370,"text":102752},{"id":102856,"depth":370,"text":102857,"children":107904},[107905,107906,107907,107908,107910],{"id":107739,"depth":1608,"text":107742},{"id":107751,"depth":1608,"text":107751},{"id":107777,"depth":1608,"text":107777},{"id":107786,"depth":1608,"text":107909},"data.ctrl[0] 写了但没有效果",{"id":107817,"depth":1608,"text":107817},{"id":103010,"depth":370,"text":103011},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":106221,"description":68},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":107918,"title":107919,"body":107920,"description":68,"extension":487,"meta":109829,"navigation":490,"path":109830,"seo":109831,"stem":109832,"__hash__":109833},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":107921,"toc":109805},[107922,107925,107927,107930,107938,107941,107958,107961,107986,107989,108035,108037,108039,108094,108096,108115,108117,108160,108163,108180,108183,108199,108209,108216,108218,108221,108224,108258,108261,108309,108313,108316,108330,108339,108343,108346,108371,108374,108378,108391,108394,108400,108403,108418,108420,108423,108683,108685,108697,108700,109012,109014,109026,109028,109031,109046,109051,109054,109076,109079,109082,109116,109119,109123,109134,109137,109154,109157,109171,109178,109198,109205,109219,109222,109234,109249,109269,109272,109294,109297,109301,109316,109327,109342,109345,109375,109391,109420,109428,109452,109455,109473,109483,109495,109502,109511,109517,109526,109529,109531,109540,109543,109558,109560,109563,109574,109577,109588,109591,109609,109611,109628,109631,109659,109661,109665,109668,109698,109704,109707,109711,109719,109722,109724,109745,109748,109751,109767,109770,109786,109788,109791,109802],[10,107923,107919],{"id":107924},"_5viewer-可视化与-renderer-离屏渲染",[85,107926,101064],{"id":101063},[15,107928,107929],{},"本章掌握两类可视化方式:",[22,107931,107932,107935],{},[25,107933,107934],{},"交互式 viewer: 适合人工观察仿真",[25,107936,107937],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[15,107939,107940],{},"使用官方接口:",[63,107942,107944],{"className":65,"code":107943,"language":67,"meta":68,"style":68},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[34,107945,107946,107953],{"__ignoreMap":68},[72,107947,107948,107950],{"class":74,"line":75},[72,107949,79],{"class":78},[72,107951,107952],{"class":82}," mujoco.viewer\n",[72,107954,107955],{"class":74,"line":370},[72,107956,107957],{"class":82},"mujoco.viewer.launch_passive(model, data)\n",[15,107959,107960],{},"以及:",[63,107962,107964],{"className":65,"code":107963,"language":67,"meta":68,"style":68},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[34,107965,107966,107976],{"__ignoreMap":68},[72,107967,107968,107971,107973],{"class":74,"line":75},[72,107969,107970],{"class":82},"renderer ",[72,107972,609],{"class":78},[72,107974,107975],{"class":82}," mujoco.Renderer(model)\n",[72,107977,107978,107981,107983],{"class":74,"line":370},[72,107979,107980],{"class":82},"image ",[72,107982,609],{"class":78},[72,107984,107985],{"class":82}," renderer.render()\n",[15,107987,107988],{},"新手建议先理解二者区别：",[154,107990,107991,108007],{},[157,107992,107993],{},[160,107994,107995,107998,108001,108004],{},[163,107996,107997],{"align":165},"工具",[163,107999,108000],{"align":165},"用途",[163,108002,108003],{"align":165},"是否打开窗口",[163,108005,108006],{"align":165},"常见场景",[174,108008,108009,108022],{},[160,108010,108011,108014,108017,108019],{},[179,108012,108013],{"align":165},"Viewer",[179,108015,108016],{"align":165},"人眼实时观察仿真",[179,108018,105066],{"align":165},[179,108020,108021],{"align":165},"调试模型、看控制效果",[160,108023,108024,108027,108030,108032],{},[179,108025,108026],{"align":165},"Renderer",[179,108028,108029],{"align":165},"生成图像数组",[179,108031,105079],{"align":165},[179,108033,108034],{"align":165},"保存图片、训练视觉策略、服务器批量采集",[85,108036,101185],{"id":101184},[15,108038,101188],{},[63,108040,108042],{"className":349,"code":108041,"language":351,"meta":68,"style":68},"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",[34,108043,108044,108056,108066,108074,108082],{"__ignoreMap":68},[72,108045,108046,108048,108050,108052,108054],{"class":74,"line":75},[72,108047,24998],{"class":358},[72,108049,26737],{"class":366},[72,108051,24256],{"class":366},[72,108053,26822],{"class":362},[72,108055,25100],{"class":362},[72,108057,108058,108060,108062,108064],{"class":74,"line":370},[72,108059,101223],{"class":366},[72,108061,101226],{"class":366},[72,108063,101229],{"class":366},[72,108065,25100],{"class":362},[72,108067,108068,108070,108072],{"class":74,"line":1608},[72,108069,101236],{"class":366},[72,108071,101239],{"class":366},[72,108073,25100],{"class":362},[72,108075,108076,108078,108080],{"class":74,"line":1623},[72,108077,101246],{"class":366},[72,108079,101249],{"class":366},[72,108081,25100],{"class":362},[72,108083,108084,108086,108088,108090,108092],{"class":74,"line":1629},[72,108085,101256],{"class":366},[72,108087,101259],{"class":366},[72,108089,101262],{"class":366},[72,108091,101265],{"class":366},[72,108093,102920],{"class":366},[15,108095,103223],{},[63,108097,108099],{"className":349,"code":108098,"language":351,"meta":68,"style":68},"pip install \"mujoco>=2.3\" numpy pillow\n",[34,108100,108101],{"__ignoreMap":68},[72,108102,108103,108105,108107,108109,108112],{"class":74,"line":75},[72,108104,24253],{"class":358},[72,108106,24256],{"class":366},[72,108108,101345],{"class":366},[72,108110,108111],{"class":366}," numpy",[72,108113,108114],{"class":366}," pillow\n",[15,108116,103240],{},[63,108118,108120],{"className":349,"code":108119,"language":351,"meta":68,"style":68},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[34,108121,108122,108139,108148],{"__ignoreMap":68},[72,108123,108124,108126,108128,108130,108133,108135,108137],{"class":74,"line":75},[72,108125,30751],{"class":358},[72,108127,29598],{"class":366},[72,108129,25537],{"class":362},[72,108131,108132],{"class":366}," mujoco-render",[72,108134,101390],{"class":366},[72,108136,101393],{"class":362},[72,108138,101396],{"class":362},[72,108140,108141,108143,108145],{"class":74,"line":370},[72,108142,30751],{"class":358},[72,108144,101403],{"class":366},[72,108146,108147],{"class":366}," mujoco-render\n",[72,108149,108150,108152,108154,108156,108158],{"class":74,"line":1608},[72,108151,24253],{"class":358},[72,108153,24256],{"class":366},[72,108155,101345],{"class":366},[72,108157,108111],{"class":366},[72,108159,108114],{"class":366},[15,108161,108162],{},"离屏渲染后端:",[63,108164,108166],{"className":349,"code":108165,"language":351,"meta":68,"style":68},"export MUJOCO_GL=egl\n",[34,108167,108168],{"__ignoreMap":68},[72,108169,108170,108172,108175,108177],{"class":74,"line":75},[72,108171,25464],{"class":78},[72,108173,108174],{"class":82}," MUJOCO_GL",[72,108176,609],{"class":78},[72,108178,108179],{"class":82},"egl\n",[15,108181,108182],{},"或:",[63,108184,108186],{"className":349,"code":108185,"language":351,"meta":68,"style":68},"export MUJOCO_GL=osmesa\n",[34,108187,108188],{"__ignoreMap":68},[72,108189,108190,108192,108194,108196],{"class":74,"line":75},[72,108191,25464],{"class":78},[72,108193,108174],{"class":82},[72,108195,609],{"class":78},[72,108197,108198],{"class":82},"osmesa\n",[15,108200,108201,108202,108205,108206,28807],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[34,108203,108204],{},"egl"," 失败，再尝试 ",[34,108207,108208],{},"osmesa",[15,108210,108211,108212,108215],{},"如果你在本机桌面环境运行，通常先不要设置 ",[34,108213,108214],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[85,108217,101457],{"id":101456},[15,108219,108220],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[15,108222,108223],{},"典型 viewer 流程:",[63,108225,108227],{"className":65,"code":108226,"language":67,"meta":68,"style":68},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[34,108228,108229,108242,108249,108253],{"__ignoreMap":68},[72,108230,108231,108234,108237,108239],{"class":74,"line":75},[72,108232,108233],{"class":78},"with",[72,108235,108236],{"class":82}," mujoco.viewer.launch_passive(model, data) ",[72,108238,31801],{"class":78},[72,108240,108241],{"class":82}," viewer:\n",[72,108243,108244,108246],{"class":74,"line":370},[72,108245,2679],{"class":78},[72,108247,108248],{"class":82}," viewer.is_running():\n",[72,108250,108251],{"class":74,"line":1608},[72,108252,101922],{"class":82},[72,108254,108255],{"class":74,"line":1623},[72,108256,108257],{"class":82},"        viewer.sync()\n",[15,108259,108260],{},"典型 renderer 流程:",[63,108262,108264],{"className":65,"code":108263,"language":67,"meta":68,"style":68},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[34,108265,108266,108292,108296,108301],{"__ignoreMap":68},[72,108267,108268,108270,108272,108275,108277,108279,108281,108283,108285,108287,108290],{"class":74,"line":75},[72,108269,107970],{"class":82},[72,108271,609],{"class":78},[72,108273,108274],{"class":82}," mujoco.Renderer(model, ",[72,108276,25403],{"class":5642},[72,108278,609],{"class":78},[72,108280,42760],{"class":362},[72,108282,12861],{"class":82},[72,108284,25399],{"class":5642},[72,108286,609],{"class":78},[72,108288,108289],{"class":362},"640",[72,108291,570],{"class":82},[72,108293,108294],{"class":74,"line":370},[72,108295,104906],{"class":82},[72,108297,108298],{"class":74,"line":1608},[72,108299,108300],{"class":82},"renderer.update_scene(data)\n",[72,108302,108303,108305,108307],{"class":74,"line":1623},[72,108304,107980],{"class":82},[72,108306,609],{"class":78},[72,108308,107985],{"class":82},[531,108310,108312],{"id":108311},"viewer-的同步逻辑","viewer 的同步逻辑",[15,108314,108315],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[63,108317,108319],{"className":65,"code":108318,"language":67,"meta":68,"style":68},"mujoco.mj_step(model, data)\nviewer.sync()\n",[34,108320,108321,108325],{"__ignoreMap":68},[72,108322,108323],{"class":74,"line":75},[72,108324,104906],{"class":82},[72,108326,108327],{"class":74,"line":370},[72,108328,108329],{"class":82},"viewer.sync()\n",[15,108331,108332,108334,108335,108338],{},[34,108333,220],{}," 负责算物理，",[34,108336,108337],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[531,108340,108342],{"id":108341},"为什么要-sleep","为什么要 sleep",[15,108344,108345],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[63,108347,108349],{"className":65,"code":108348,"language":67,"meta":68,"style":68},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[34,108350,108351],{"__ignoreMap":68},[72,108352,108353,108356,108358,108361,108363,108366,108368],{"class":74,"line":75},[72,108354,108355],{"class":82},"sleep_time ",[72,108357,609],{"class":78},[72,108359,108360],{"class":82}," model.opt.timestep ",[72,108362,1086],{"class":78},[72,108364,108365],{"class":82}," (time.time() ",[72,108367,1086],{"class":78},[72,108369,108370],{"class":82}," step_start)\n",[15,108372,108373],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[531,108375,108377],{"id":108376},"renderer-输出是什么","renderer 输出是什么",[63,108379,108381],{"className":65,"code":108380,"language":67,"meta":68,"style":68},"image = renderer.render()\n",[34,108382,108383],{"__ignoreMap":68},[72,108384,108385,108387,108389],{"class":74,"line":75},[72,108386,107980],{"class":82},[72,108388,609],{"class":78},[72,108390,107985],{"class":82},[15,108392,108393],{},"得到的是 NumPy 数组，形状通常是：",[63,108395,108398],{"className":108396,"code":108397,"language":127,"meta":68},[125],"(height, width, 3)\n",[34,108399,108397],{"__ignoreMap":68},[15,108401,108402],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[63,108404,108406],{"className":65,"code":108405,"language":67,"meta":68,"style":68},"Image.fromarray(image).save(\"render_output.png\")\n",[34,108407,108408],{"__ignoreMap":68},[72,108409,108410,108413,108416],{"class":74,"line":75},[72,108411,108412],{"class":82},"Image.fromarray(image).save(",[72,108414,108415],{"class":366},"\"render_output.png\"",[72,108417,570],{"class":82},[85,108419,101663],{"id":101662},[15,108421,108422],{},"交互式 Viewer:",[63,108424,108426],{"className":65,"code":108425,"language":67,"meta":68,"style":68},"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",[34,108427,108428,108434,108438,108444,108450,108454,108458,108466,108471,108475,108479,108483,108488,108493,108497,108501,108505,108510,108514,108518,108522,108526,108530,108534,108546,108558,108566,108570,108580,108600,108610,108615,108620,108624,108641,108654,108659,108663,108667,108679],{"__ignoreMap":68},[72,108429,108430,108432],{"class":74,"line":75},[72,108431,79],{"class":78},[72,108433,32247],{"class":82},[72,108435,108436],{"class":74,"line":370},[72,108437,2828],{"emptyLinePlaceholder":490},[72,108439,108440,108442],{"class":74,"line":1608},[72,108441,79],{"class":78},[72,108443,83],{"class":82},[72,108445,108446,108448],{"class":74,"line":1623},[72,108447,79],{"class":78},[72,108449,107952],{"class":82},[72,108451,108452],{"class":74,"line":1629},[72,108453,2828],{"emptyLinePlaceholder":490},[72,108455,108456],{"class":74,"line":1643},[72,108457,2828],{"emptyLinePlaceholder":490},[72,108459,108460,108462,108464],{"class":74,"line":1649},[72,108461,101720],{"class":362},[72,108463,13990],{"class":78},[72,108465,101725],{"class":366},[72,108467,108468],{"class":74,"line":1740},[72,108469,108470],{"class":366},"\u003Cmujoco model=\"viewer_demo\">\n",[72,108472,108473],{"class":74,"line":1746},[72,108474,101735],{"class":366},[72,108476,108477],{"class":74,"line":1758},[72,108478,2828],{"emptyLinePlaceholder":490},[72,108480,108481],{"class":74,"line":2041},[72,108482,101744],{"class":366},[72,108484,108485],{"class":74,"line":2046},[72,108486,108487],{"class":366},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[72,108489,108490],{"class":74,"line":2052},[72,108491,108492],{"class":366},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[72,108494,108495],{"class":74,"line":2057},[72,108496,2828],{"emptyLinePlaceholder":490},[72,108498,108499],{"class":74,"line":2071},[72,108500,101758],{"class":366},[72,108502,108503],{"class":74,"line":2076},[72,108504,101763],{"class":366},[72,108506,108507],{"class":74,"line":2082},[72,108508,108509],{"class":366},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[72,108511,108512],{"class":74,"line":2103},[72,108513,101773],{"class":366},[72,108515,108516],{"class":74,"line":2108},[72,108517,101778],{"class":366},[72,108519,108520],{"class":74,"line":2122},[72,108521,101783],{"class":366},[72,108523,108524],{"class":74,"line":2127},[72,108525,96115],{"class":366},[72,108527,108528],{"class":74,"line":2156},[72,108529,2828],{"emptyLinePlaceholder":490},[72,108531,108532],{"class":74,"line":2161},[72,108533,2828],{"emptyLinePlaceholder":490},[72,108535,108536,108538,108540,108542,108544],{"class":74,"line":2178},[72,108537,32365],{"class":78},[72,108539,2401],{"class":358},[72,108541,101804],{"class":82},[72,108543,96103],{"class":362},[72,108545,4167],{"class":82},[72,108547,108548,108550,108552,108554,108556],{"class":74,"line":2183},[72,108549,101813],{"class":82},[72,108551,609],{"class":78},[72,108553,101818],{"class":82},[72,108555,101720],{"class":362},[72,108557,570],{"class":82},[72,108559,108560,108562,108564],{"class":74,"line":2188},[72,108561,101827],{"class":82},[72,108563,609],{"class":78},[72,108565,101832],{"class":82},[72,108567,108568],{"class":74,"line":2193},[72,108569,2828],{"emptyLinePlaceholder":490},[72,108571,108572,108574,108576,108578],{"class":74,"line":2207},[72,108573,34596],{"class":78},[72,108575,108236],{"class":82},[72,108577,31801],{"class":78},[72,108579,108241],{"class":82},[72,108581,108582,108585,108588,108590,108593,108595,108598],{"class":74,"line":2212},[72,108583,108584],{"class":78},"        while",[72,108586,108587],{"class":82}," viewer.is_running() ",[72,108589,30880],{"class":78},[72,108591,108592],{"class":82}," data.time ",[72,108594,1464],{"class":78},[72,108596,108597],{"class":362}," 5.0",[72,108599,4167],{"class":82},[72,108601,108602,108605,108607],{"class":74,"line":3005},[72,108603,108604],{"class":82},"            step_start ",[72,108606,609],{"class":78},[72,108608,108609],{"class":82}," time.time()\n",[72,108611,108612],{"class":74,"line":3019},[72,108613,108614],{"class":82},"            mujoco.mj_step(model, data)\n",[72,108616,108617],{"class":74,"line":3027},[72,108618,108619],{"class":82},"            viewer.sync()\n",[72,108621,108622],{"class":74,"line":3032},[72,108623,2828],{"emptyLinePlaceholder":490},[72,108625,108626,108629,108631,108633,108635,108637,108639],{"class":74,"line":3038},[72,108627,108628],{"class":82},"            sleep_time ",[72,108630,609],{"class":78},[72,108632,108360],{"class":82},[72,108634,1086],{"class":78},[72,108636,108365],{"class":82},[72,108638,1086],{"class":78},[72,108640,108370],{"class":82},[72,108642,108643,108645,108648,108650,108652],{"class":74,"line":3044},[72,108644,5070],{"class":78},[72,108646,108647],{"class":82}," sleep_time ",[72,108649,1514],{"class":78},[72,108651,4521],{"class":362},[72,108653,4167],{"class":82},[72,108655,108656],{"class":74,"line":3049},[72,108657,108658],{"class":82},"                time.sleep(sleep_time)\n",[72,108660,108661],{"class":74,"line":8374},[72,108662,2828],{"emptyLinePlaceholder":490},[72,108664,108665],{"class":74,"line":8398},[72,108666,2828],{"emptyLinePlaceholder":490},[72,108668,108669,108671,108673,108675,108677],{"class":74,"line":8403},[72,108670,1960],{"class":78},[72,108672,31638],{"class":362},[72,108674,101965],{"class":78},[72,108676,101968],{"class":366},[72,108678,4167],{"class":82},[72,108680,108681],{"class":74,"line":8409},[72,108682,101975],{"class":82},[15,108684,103974],{},[63,108686,108688],{"className":349,"code":108687,"language":351,"meta":68,"style":68},"touch ch5_viewer.py\n",[34,108689,108690],{"__ignoreMap":68},[72,108691,108692,108694],{"class":74,"line":75},[72,108693,101690],{"class":358},[72,108695,108696],{"class":366}," ch5_viewer.py\n",[15,108698,108699],{},"离屏 Renderer 保存图片:",[63,108701,108703],{"className":65,"code":108702,"language":67,"meta":68,"style":68},"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",[34,108704,108705,108717,108721,108727,108737,108741,108745,108753,108758,108762,108766,108770,108774,108779,108783,108787,108791,108795,108799,108803,108807,108811,108815,108819,108823,108835,108847,108855,108880,108884,108900,108904,108908,108923,108932,108936,108950,108955,108960,108964,108976,108988,108992,108996,109008],{"__ignoreMap":68},[72,108706,108707,108709,108712,108714],{"class":74,"line":75},[72,108708,31155],{"class":78},[72,108710,108711],{"class":82}," pathlib ",[72,108713,79],{"class":78},[72,108715,108716],{"class":82}," Path\n",[72,108718,108719],{"class":74,"line":370},[72,108720,2828],{"emptyLinePlaceholder":490},[72,108722,108723,108725],{"class":74,"line":1608},[72,108724,79],{"class":78},[72,108726,83],{"class":82},[72,108728,108729,108731,108733,108735],{"class":74,"line":1623},[72,108730,31155],{"class":78},[72,108732,47681],{"class":362},[72,108734,47684],{"class":78},[72,108736,47687],{"class":82},[72,108738,108739],{"class":74,"line":1629},[72,108740,2828],{"emptyLinePlaceholder":490},[72,108742,108743],{"class":74,"line":1643},[72,108744,2828],{"emptyLinePlaceholder":490},[72,108746,108747,108749,108751],{"class":74,"line":1649},[72,108748,101720],{"class":362},[72,108750,13990],{"class":78},[72,108752,101725],{"class":366},[72,108754,108755],{"class":74,"line":1740},[72,108756,108757],{"class":366},"\u003Cmujoco model=\"renderer_demo\">\n",[72,108759,108760],{"class":74,"line":1746},[72,108761,101735],{"class":366},[72,108763,108764],{"class":74,"line":1758},[72,108765,2828],{"emptyLinePlaceholder":490},[72,108767,108768],{"class":74,"line":2041},[72,108769,101744],{"class":366},[72,108771,108772],{"class":74,"line":2046},[72,108773,108487],{"class":366},[72,108775,108776],{"class":74,"line":2052},[72,108777,108778],{"class":366},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[72,108780,108781],{"class":74,"line":2057},[72,108782,108492],{"class":366},[72,108784,108785],{"class":74,"line":2071},[72,108786,2828],{"emptyLinePlaceholder":490},[72,108788,108789],{"class":74,"line":2076},[72,108790,101758],{"class":366},[72,108792,108793],{"class":74,"line":2082},[72,108794,101763],{"class":366},[72,108796,108797],{"class":74,"line":2103},[72,108798,108509],{"class":366},[72,108800,108801],{"class":74,"line":2108},[72,108802,101773],{"class":366},[72,108804,108805],{"class":74,"line":2122},[72,108806,101778],{"class":366},[72,108808,108809],{"class":74,"line":2127},[72,108810,101783],{"class":366},[72,108812,108813],{"class":74,"line":2156},[72,108814,96115],{"class":366},[72,108816,108817],{"class":74,"line":2161},[72,108818,2828],{"emptyLinePlaceholder":490},[72,108820,108821],{"class":74,"line":2178},[72,108822,2828],{"emptyLinePlaceholder":490},[72,108824,108825,108827,108829,108831,108833],{"class":74,"line":2183},[72,108826,32365],{"class":78},[72,108828,2401],{"class":358},[72,108830,101804],{"class":82},[72,108832,96103],{"class":362},[72,108834,4167],{"class":82},[72,108836,108837,108839,108841,108843,108845],{"class":74,"line":2188},[72,108838,101813],{"class":82},[72,108840,609],{"class":78},[72,108842,101818],{"class":82},[72,108844,101720],{"class":362},[72,108846,570],{"class":82},[72,108848,108849,108851,108853],{"class":74,"line":2193},[72,108850,101827],{"class":82},[72,108852,609],{"class":78},[72,108854,101832],{"class":82},[72,108856,108857,108860,108862,108864,108866,108868,108870,108872,108874,108876,108878],{"class":74,"line":2207},[72,108858,108859],{"class":82},"    renderer ",[72,108861,609],{"class":78},[72,108863,108274],{"class":82},[72,108865,25403],{"class":5642},[72,108867,609],{"class":78},[72,108869,42760],{"class":362},[72,108871,12861],{"class":82},[72,108873,25399],{"class":5642},[72,108875,609],{"class":78},[72,108877,108289],{"class":362},[72,108879,570],{"class":82},[72,108881,108882],{"class":74,"line":2212},[72,108883,2828],{"emptyLinePlaceholder":490},[72,108885,108886,108888,108890,108892,108894,108896,108898],{"class":74,"line":3005},[72,108887,3629],{"class":78},[72,108889,101907],{"class":82},[72,108891,26465],{"class":78},[72,108893,32861],{"class":362},[72,108895,564],{"class":82},[72,108897,865],{"class":362},[72,108899,31204],{"class":82},[72,108901,108902],{"class":74,"line":3019},[72,108903,101922],{"class":82},[72,108905,108906],{"class":74,"line":3027},[72,108907,2828],{"emptyLinePlaceholder":490},[72,108909,108910,108913,108916,108918,108921],{"class":74,"line":3032},[72,108911,108912],{"class":82},"    renderer.update_scene(data, ",[72,108914,108915],{"class":5642},"camera",[72,108917,609],{"class":78},[72,108919,108920],{"class":366},"\"fixed_camera\"",[72,108922,570],{"class":82},[72,108924,108925,108928,108930],{"class":74,"line":3038},[72,108926,108927],{"class":82},"    image ",[72,108929,609],{"class":78},[72,108931,107985],{"class":82},[72,108933,108934],{"class":74,"line":3044},[72,108935,2828],{"emptyLinePlaceholder":490},[72,108937,108938,108941,108943,108946,108948],{"class":74,"line":3049},[72,108939,108940],{"class":82},"    output_path ",[72,108942,609],{"class":78},[72,108944,108945],{"class":82}," Path(",[72,108947,108415],{"class":366},[72,108949,570],{"class":82},[72,108951,108952],{"class":74,"line":8374},[72,108953,108954],{"class":82},"    Image.fromarray(image).save(output_path)\n",[72,108956,108957],{"class":74,"line":8398},[72,108958,108959],{"class":82},"    renderer.close()\n",[72,108961,108962],{"class":74,"line":8403},[72,108963,2828],{"emptyLinePlaceholder":490},[72,108965,108966,108968,108970,108973],{"class":74,"line":8409},[72,108967,31717],{"class":362},[72,108969,564],{"class":82},[72,108971,108972],{"class":366},"\"saved:\"",[72,108974,108975],{"class":82},", output_path.resolve())\n",[72,108977,108978,108980,108982,108985],{"class":74,"line":8436},[72,108979,31717],{"class":362},[72,108981,564],{"class":82},[72,108983,108984],{"class":366},"\"image shape:\"",[72,108986,108987],{"class":82},", image.shape)\n",[72,108989,108990],{"class":74,"line":8441},[72,108991,2828],{"emptyLinePlaceholder":490},[72,108993,108994],{"class":74,"line":8447},[72,108995,2828],{"emptyLinePlaceholder":490},[72,108997,108998,109000,109002,109004,109006],{"class":74,"line":8459},[72,108999,1960],{"class":78},[72,109001,31638],{"class":362},[72,109003,101965],{"class":78},[72,109005,101968],{"class":366},[72,109007,4167],{"class":82},[72,109009,109010],{"class":74,"line":8471},[72,109011,101975],{"class":82},[15,109013,103974],{},[63,109015,109017],{"className":349,"code":109016,"language":351,"meta":68,"style":68},"touch ch5_renderer.py\n",[34,109018,109019],{"__ignoreMap":68},[72,109020,109021,109023],{"class":74,"line":75},[72,109022,101690],{"class":358},[72,109024,109025],{"class":366}," ch5_renderer.py\n",[531,109027,101978],{"id":101978},[15,109029,109030],{},"viewer 上下文：",[63,109032,109034],{"className":65,"code":109033,"language":67,"meta":68,"style":68},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[34,109035,109036],{"__ignoreMap":68},[72,109037,109038,109040,109042,109044],{"class":74,"line":75},[72,109039,108233],{"class":78},[72,109041,108236],{"class":82},[72,109043,31801],{"class":78},[72,109045,108241],{"class":82},[15,109047,109048,109050],{},[34,109049,108233],{}," 语句会创建窗口，并在退出时自动清理资源。",[15,109052,109053],{},"窗口循环：",[63,109055,109057],{"className":65,"code":109056,"language":67,"meta":68,"style":68},"while viewer.is_running() and data.time \u003C 5.0:\n",[34,109058,109059],{"__ignoreMap":68},[72,109060,109061,109064,109066,109068,109070,109072,109074],{"class":74,"line":75},[72,109062,109063],{"class":78},"while",[72,109065,108587],{"class":82},[72,109067,30880],{"class":78},[72,109069,108592],{"class":82},[72,109071,1464],{"class":78},[72,109073,108597],{"class":362},[72,109075,4167],{"class":82},[15,109077,109078],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[15,109080,109081],{},"固定相机：",[63,109083,109085],{"className":53485,"code":109084,"language":53487,"meta":68,"style":68},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[34,109086,109087],{"__ignoreMap":68},[72,109088,109089,109091,109093,109095,109097,109099,109101,109103,109106,109109,109111,109114],{"class":74,"line":75},[72,109090,1464],{"class":82},[72,109092,108915],{"class":51718},[72,109094,15346],{"class":358},[72,109096,609],{"class":82},[72,109098,108920],{"class":366},[72,109100,101517],{"class":358},[72,109102,609],{"class":82},[72,109104,109105],{"class":366},"\"1.5 -2.0 1.2\"",[72,109107,109108],{"class":358}," xyaxes",[72,109110,609],{"class":82},[72,109112,109113],{"class":366},"\"1 0.75 0 0 0 1\"",[72,109115,101555],{"class":82},[15,109117,109118],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[531,109120,109122],{"id":109121},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[63,109124,109126],{"className":65,"code":109125,"language":67,"meta":68,"style":68},"import time\n",[34,109127,109128],{"__ignoreMap":68},[72,109129,109130,109132],{"class":74,"line":75},[72,109131,79],{"class":78},[72,109133,32247],{"class":82},[15,109135,109136],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[63,109138,109140],{"className":65,"code":109139,"language":67,"meta":68,"style":68},"import mujoco\nimport mujoco.viewer\n",[34,109141,109142,109148],{"__ignoreMap":68},[72,109143,109144,109146],{"class":74,"line":75},[72,109145,79],{"class":78},[72,109147,83],{"class":82},[72,109149,109150,109152],{"class":74,"line":370},[72,109151,79],{"class":78},[72,109153,107952],{"class":82},[15,109155,109156],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[63,109158,109159],{"className":65,"code":109033,"language":67,"meta":68,"style":68},[34,109160,109161],{"__ignoreMap":68},[72,109162,109163,109165,109167,109169],{"class":74,"line":75},[72,109164,108233],{"class":78},[72,109166,108236],{"class":82},[72,109168,31801],{"class":78},[72,109170,108241],{"class":82},[15,109172,109173,109174,109177],{},"打开一个 viewer 窗口。",[34,109175,109176],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[63,109179,109180],{"className":65,"code":109056,"language":67,"meta":68,"style":68},[34,109181,109182],{"__ignoreMap":68},[72,109183,109184,109186,109188,109190,109192,109194,109196],{"class":74,"line":75},[72,109185,109063],{"class":78},[72,109187,108587],{"class":82},[72,109189,30880],{"class":78},[72,109191,108592],{"class":82},[72,109193,1464],{"class":78},[72,109195,108597],{"class":362},[72,109197,4167],{"class":82},[15,109199,109200,109201,109204],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[34,109202,109203],{},"viewer.is_running()"," 会变成 false，循环结束。",[63,109206,109208],{"className":65,"code":109207,"language":67,"meta":68,"style":68},"step_start = time.time()\n",[34,109209,109210],{"__ignoreMap":68},[72,109211,109212,109215,109217],{"class":74,"line":75},[72,109213,109214],{"class":82},"step_start ",[72,109216,609],{"class":78},[72,109218,108609],{"class":82},[15,109220,109221],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[63,109223,109224],{"className":65,"code":108318,"language":67,"meta":68,"style":68},[34,109225,109226,109230],{"__ignoreMap":68},[72,109227,109228],{"class":74,"line":75},[72,109229,104906],{"class":82},[72,109231,109232],{"class":74,"line":370},[72,109233,108329],{"class":82},[15,109235,109236,109238,109239,109241,109242,109244,109245,109248],{},[34,109237,220],{}," 推进物理仿真。",[34,109240,108337],{}," 把最新的 ",[34,109243,33819],{}," 同步到窗口里显示。没有 ",[34,109246,109247],{},"sync()","，窗口可能看不到最新状态。",[63,109250,109251],{"className":65,"code":108348,"language":67,"meta":68,"style":68},[34,109252,109253],{"__ignoreMap":68},[72,109254,109255,109257,109259,109261,109263,109265,109267],{"class":74,"line":75},[72,109256,108355],{"class":82},[72,109258,609],{"class":78},[72,109260,108360],{"class":82},[72,109262,1086],{"class":78},[72,109264,108365],{"class":82},[72,109266,1086],{"class":78},[72,109268,108370],{"class":82},[15,109270,109271],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[63,109273,109275],{"className":65,"code":109274,"language":67,"meta":68,"style":68},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[34,109276,109277,109289],{"__ignoreMap":68},[72,109278,109279,109281,109283,109285,109287],{"class":74,"line":75},[72,109280,1960],{"class":78},[72,109282,108647],{"class":82},[72,109284,1514],{"class":78},[72,109286,4521],{"class":362},[72,109288,4167],{"class":82},[72,109290,109291],{"class":74,"line":370},[72,109292,109293],{"class":82},"    time.sleep(sleep_time)\n",[15,109295,109296],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[531,109298,109300],{"id":109299},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[63,109302,109304],{"className":65,"code":109303,"language":67,"meta":68,"style":68},"from pathlib import Path\n",[34,109305,109306],{"__ignoreMap":68},[72,109307,109308,109310,109312,109314],{"class":74,"line":75},[72,109309,31155],{"class":78},[72,109311,108711],{"class":82},[72,109313,79],{"class":78},[72,109315,108716],{"class":82},[15,109317,109318,109319,109322,109323,109326],{},"导入 ",[34,109320,109321],{},"Path","，用来处理文件路径。相比直接写字符串，",[34,109324,109325],{},"Path(\"render_output.png\")"," 更清晰。",[63,109328,109330],{"className":65,"code":109329,"language":67,"meta":68,"style":68},"from PIL import Image\n",[34,109331,109332],{"__ignoreMap":68},[72,109333,109334,109336,109338,109340],{"class":74,"line":75},[72,109335,31155],{"class":78},[72,109337,47681],{"class":362},[72,109339,47684],{"class":78},[72,109341,47687],{"class":82},[15,109343,109344],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[63,109346,109347],{"className":53485,"code":109084,"language":53487,"meta":68,"style":68},[34,109348,109349],{"__ignoreMap":68},[72,109350,109351,109353,109355,109357,109359,109361,109363,109365,109367,109369,109371,109373],{"class":74,"line":75},[72,109352,1464],{"class":82},[72,109354,108915],{"class":51718},[72,109356,15346],{"class":358},[72,109358,609],{"class":82},[72,109360,108920],{"class":366},[72,109362,101517],{"class":358},[72,109364,609],{"class":82},[72,109366,109105],{"class":366},[72,109368,109108],{"class":358},[72,109370,609],{"class":82},[72,109372,109113],{"class":366},[72,109374,101555],{"class":82},[15,109376,109377,109378,109380,109381,109383,109384,109387,109388,109390],{},"定义一个相机。",[34,109379,80228],{}," 是相机名字。",[34,109382,104549],{}," 是相机在世界里的位置。",[34,109385,109386],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[34,109389,104549],{}," 来调视角。",[63,109392,109394],{"className":65,"code":109393,"language":67,"meta":68,"style":68},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[34,109395,109396],{"__ignoreMap":68},[72,109397,109398,109400,109402,109404,109406,109408,109410,109412,109414,109416,109418],{"class":74,"line":75},[72,109399,107970],{"class":82},[72,109401,609],{"class":78},[72,109403,108274],{"class":82},[72,109405,25403],{"class":5642},[72,109407,609],{"class":78},[72,109409,42760],{"class":362},[72,109411,12861],{"class":82},[72,109413,25399],{"class":5642},[72,109415,609],{"class":78},[72,109417,108289],{"class":362},[72,109419,570],{"class":82},[15,109421,109422,109423,101432,109425,109427],{},"创建离屏渲染器。",[34,109424,25403],{},[34,109426,25399],{}," 决定输出图片大小。",[63,109429,109430],{"className":65,"code":102081,"language":67,"meta":68,"style":68},[34,109431,109432,109448],{"__ignoreMap":68},[72,109433,109434,109436,109438,109440,109442,109444,109446],{"class":74,"line":75},[72,109435,3453],{"class":78},[72,109437,101907],{"class":82},[72,109439,26465],{"class":78},[72,109441,32861],{"class":362},[72,109443,564],{"class":82},[72,109445,865],{"class":362},[72,109447,31204],{"class":82},[72,109449,109450],{"class":74,"line":370},[72,109451,102104],{"class":82},[15,109453,109454],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[63,109456,109458],{"className":65,"code":109457,"language":67,"meta":68,"style":68},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[34,109459,109460],{"__ignoreMap":68},[72,109461,109462,109465,109467,109469,109471],{"class":74,"line":75},[72,109463,109464],{"class":82},"renderer.update_scene(data, ",[72,109466,108915],{"class":5642},[72,109468,609],{"class":78},[72,109470,108920],{"class":366},[72,109472,570],{"class":82},[15,109474,109475,109476,109478,109479,109482],{},"告诉 renderer：用当前 ",[34,109477,33819],{}," 的状态更新画面，并使用名为 ",[34,109480,109481],{},"fixed_camera"," 的相机视角。",[63,109484,109485],{"className":65,"code":108380,"language":67,"meta":68,"style":68},[34,109486,109487],{"__ignoreMap":68},[72,109488,109489,109491,109493],{"class":74,"line":75},[72,109490,107980],{"class":82},[72,109492,609],{"class":78},[72,109494,107985],{"class":82},[15,109496,109497,109498,109501],{},"真正渲染出图像。",[34,109499,109500],{},"image"," 是一个 NumPy 数组，不是文件。",[63,109503,109505],{"className":65,"code":109504,"language":67,"meta":68,"style":68},"Image.fromarray(image).save(output_path)\n",[34,109506,109507],{"__ignoreMap":68},[72,109508,109509],{"class":74,"line":75},[72,109510,109504],{"class":82},[15,109512,109513,109514,28807],{},"把数组转换成图片，并保存到 ",[34,109515,109516],{},"render_output.png",[63,109518,109520],{"className":65,"code":109519,"language":67,"meta":68,"style":68},"renderer.close()\n",[34,109521,109522],{"__ignoreMap":68},[72,109523,109524],{"class":74,"line":75},[72,109525,109519],{"class":82},[15,109527,109528],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[85,109530,102720],{"id":102719},[15,109532,109533,109534,109536,109537,28807],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[34,109535,109516],{},"，并输出图像数组形状，例如 ",[34,109538,109539],{},"(480, 640, 3)",[15,109541,109542],{},"如果图片里看不到方块，先检查：",[22,109544,109545,109548,109551],{},[25,109546,109547],{},"方块是否掉到相机视野外。",[25,109549,109550],{},"camera 位置是否合理。",[25,109552,109553,109554,109557],{},"是否在 ",[34,109555,109556],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[85,109559,102752],{"id":102751},[15,109561,109562],{},"运行 viewer:",[63,109564,109566],{"className":349,"code":109565,"language":351,"meta":68,"style":68},"python ch5_viewer.py\n",[34,109567,109568],{"__ignoreMap":68},[72,109569,109570,109572],{"class":74,"line":75},[72,109571,67],{"class":358},[72,109573,108696],{"class":366},[15,109575,109576],{},"运行 renderer:",[63,109578,109580],{"className":349,"code":109579,"language":351,"meta":68,"style":68},"python ch5_renderer.py\n",[34,109581,109582],{"__ignoreMap":68},[72,109583,109584,109586],{"class":74,"line":75},[72,109585,67],{"class":358},[72,109587,109025],{"class":366},[15,109589,109590],{},"如果在服务器上运行:",[63,109592,109594],{"className":349,"code":109593,"language":351,"meta":68,"style":68},"MUJOCO_GL=egl python ch5_renderer.py\n",[34,109595,109596],{"__ignoreMap":68},[72,109597,109598,109600,109602,109604,109607],{"class":74,"line":75},[72,109599,108214],{"class":82},[72,109601,609],{"class":78},[72,109603,108204],{"class":366},[72,109605,109606],{"class":358}," python",[72,109608,109025],{"class":366},[15,109610,108182],{},[63,109612,109614],{"className":349,"code":109613,"language":351,"meta":68,"style":68},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[34,109615,109616],{"__ignoreMap":68},[72,109617,109618,109620,109622,109624,109626],{"class":74,"line":75},[72,109619,108214],{"class":82},[72,109621,609],{"class":78},[72,109623,108208],{"class":366},[72,109625,109606],{"class":358},[72,109627,109025],{"class":366},[15,109629,109630],{},"再做几个练习：",[22,109632,109633,109640,109643,109649],{},[25,109634,109635,109636,109639],{},"把 renderer 分辨率改成 ",[34,109637,109638],{},"height=240, width=320","，观察输出 shape。",[25,109641,109642],{},"把方块颜色改成蓝色，重新保存图片。",[25,109644,109645,109646,109648],{},"把相机 ",[34,109647,104549],{}," 改远一点，观察画面中物体是否变小。",[25,109650,109651,109652,102818,109655,109658],{},"把 viewer 示例中的 ",[34,109653,109654],{},"data.time \u003C 5.0",[34,109656,109657],{},"data.time \u003C 20.0","，观察更长时间。",[85,109660,102857],{"id":102856},[531,109662,109664],{"id":109663},"viewer-窗口打不开","viewer 窗口打不开",[15,109666,109667],{},"安装:",[63,109669,109671],{"className":349,"code":109670,"language":351,"meta":68,"style":68},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[34,109672,109673],{"__ignoreMap":68},[72,109674,109675,109677,109679,109681,109683,109685,109687,109689,109691,109693,109695],{"class":74,"line":75},[72,109676,24998],{"class":358},[72,109678,26737],{"class":366},[72,109680,24256],{"class":366},[72,109682,26822],{"class":362},[72,109684,102910],{"class":366},[72,109686,101249],{"class":366},[72,109688,102915],{"class":366},[72,109690,101262],{"class":366},[72,109692,101268],{"class":366},[72,109694,101259],{"class":366},[72,109696,109697],{"class":366}," libXinerama\n",[531,109699,109701],{"id":109700},"glfwerror",[34,109702,109703],{},"GLFWError",[15,109705,109706],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[531,109708,109710],{"id":109709},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[15,109712,109713,109714,462,109716,109718],{},"尝试 ",[34,109715,101449],{},[34,109717,101452],{},"。可能存在版本差异。",[531,109720,109721],{"id":109721},"保存图片是黑的",[15,109723,102979],{},[22,109725,109726,109729,109732,109742],{},[25,109727,109728],{},"XML 里是否有 light。",[25,109730,109731],{},"相机是否对着模型。",[25,109733,109734,109735,109738,109739,28807],{},"是否先 ",[34,109736,109737],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[34,109740,109741],{},"renderer.render()",[25,109743,109744],{},"物体是否已经掉出视野。",[531,109746,109747],{"id":109747},"远程服务器没有显示器",[15,109749,109750],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[63,109752,109753],{"className":349,"code":109593,"language":351,"meta":68,"style":68},[34,109754,109755],{"__ignoreMap":68},[72,109756,109757,109759,109761,109763,109765],{"class":74,"line":75},[72,109758,108214],{"class":82},[72,109760,609],{"class":78},[72,109762,108204],{"class":366},[72,109764,109606],{"class":358},[72,109766,109025],{"class":366},[15,109768,109769],{},"如果 EGL 不可用，再尝试：",[63,109771,109772],{"className":349,"code":109613,"language":351,"meta":68,"style":68},[34,109773,109774],{"__ignoreMap":68},[72,109775,109776,109778,109780,109782,109784],{"class":74,"line":75},[72,109777,108214],{"class":82},[72,109779,609],{"class":78},[72,109781,108208],{"class":366},[72,109783,109606],{"class":358},[72,109785,109025],{"class":366},[85,109787,103011],{"id":103010},[15,109789,109790],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[22,109792,109793,109796,109799],{},[25,109794,109795],{},"先用 viewer 看模型和控制是否正常。",[25,109797,109798],{},"再用 renderer 保存图片或构造视觉观测。",[25,109800,109801],{},"最后把状态、动作、图像、奖励组织成训练数据。",[473,109803,109804],{},"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":68,"searchDepth":370,"depth":370,"links":109806},[109807,109808,109809,109814,109819,109820,109821,109828],{"id":101063,"depth":370,"text":101064},{"id":101184,"depth":370,"text":101185},{"id":101456,"depth":370,"text":101457,"children":109810},[109811,109812,109813],{"id":108311,"depth":1608,"text":108312},{"id":108341,"depth":1608,"text":108342},{"id":108376,"depth":1608,"text":108377},{"id":101662,"depth":370,"text":101663,"children":109815},[109816,109817,109818],{"id":101978,"depth":1608,"text":101978},{"id":109121,"depth":1608,"text":109122},{"id":109299,"depth":1608,"text":109300},{"id":102719,"depth":370,"text":102720},{"id":102751,"depth":370,"text":102752},{"id":102856,"depth":370,"text":102857,"children":109822},[109823,109824,109825,109826,109827],{"id":109663,"depth":1608,"text":109664},{"id":109700,"depth":1608,"text":109703},{"id":109709,"depth":1608,"text":109710},{"id":109721,"depth":1608,"text":109721},{"id":109747,"depth":1608,"text":109747},{"id":103010,"depth":370,"text":103011},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":107919,"description":68},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109835,"title":109836,"body":109837,"description":68,"extension":487,"meta":111748,"navigation":490,"path":111749,"seo":111750,"stem":111751,"__hash__":111752},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109838,"toc":111724},[109839,109842,109844,109847,109849,109868,109871,109877,109880,109882,109884,109908,109910,109924,109926,109967,109969,109980,109982,109985,109991,109994,110028,110031,110063,110066,110098,110102,110105,110145,110148,110154,110157,110163,110167,110170,110176,110179,110183,110186,110226,110228,110241,110244,110246,110828,110830,110842,110845,110856,110858,110861,110880,110892,110895,110916,110919,110922,110965,110968,110971,110991,110998,111000,111018,111033,111036,111042,111045,111051,111068,111075,111106,111117,111151,111162,111179,111188,111196,111201,111215,111218,111239,111245,111259,111264,111294,111304,111329,111337,111360,111363,111379,111382,111390,111396,111418,111431,111452,111461,111500,111511,111513,111516,111522,111525,111528,111534,111537,111557,111560,111562,111601,111603,111606,111614,111617,111620,111647,111650,111660,111666,111669,111675,111677,111683,111687,111690,111692,111695,111719,111722],[10,109840,109836],{"id":109841},"_6控制任务cartpole",[85,109843,101064],{"id":101063},[15,109845,109846],{},"本章搭建一个最小 Cartpole 控制任务。",[15,109848,104734],{},[22,109850,109851,109854,109856,109859,109862,109865],{},[25,109852,109853],{},"slide joint",[25,109855,106584],{},[25,109857,109858],{},"cart force actuator",[25,109860,109861],{},"状态观测",[25,109863,109864],{},"简单控制循环",[25,109866,109867],{},"reward 设计雏形",[15,109869,109870],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[63,109872,109875],{"className":109873,"code":109874,"language":127,"meta":68},[125],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[34,109876,109874],{"__ignoreMap":68},[15,109878,109879],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[85,109881,101185],{"id":101184},[15,109883,101188],{},[63,109885,109886],{"className":349,"code":104789,"language":351,"meta":68,"style":68},[34,109887,109888],{"__ignoreMap":68},[72,109889,109890,109892,109894,109896,109898,109900,109902,109904,109906],{"class":74,"line":75},[72,109891,24998],{"class":358},[72,109893,26737],{"class":366},[72,109895,24256],{"class":366},[72,109897,26822],{"class":362},[72,109899,104804],{"class":366},[72,109901,101213],{"class":366},[72,109903,102905],{"class":366},[72,109905,101229],{"class":366},[72,109907,104813],{"class":366},[15,109909,103223],{},[63,109911,109912],{"className":349,"code":101334,"language":351,"meta":68,"style":68},[34,109913,109914],{"__ignoreMap":68},[72,109915,109916,109918,109920,109922],{"class":74,"line":75},[72,109917,24253],{"class":358},[72,109919,24256],{"class":366},[72,109921,101345],{"class":366},[72,109923,101348],{"class":366},[15,109925,103240],{},[63,109927,109929],{"className":349,"code":109928,"language":351,"meta":68,"style":68},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[34,109930,109931,109948,109957],{"__ignoreMap":68},[72,109932,109933,109935,109937,109939,109942,109944,109946],{"class":74,"line":75},[72,109934,30751],{"class":358},[72,109936,29598],{"class":366},[72,109938,25537],{"class":362},[72,109940,109941],{"class":366}," mujoco-cartpole",[72,109943,101390],{"class":366},[72,109945,101393],{"class":362},[72,109947,101396],{"class":362},[72,109949,109950,109952,109954],{"class":74,"line":370},[72,109951,30751],{"class":358},[72,109953,101403],{"class":366},[72,109955,109956],{"class":366}," mujoco-cartpole\n",[72,109958,109959,109961,109963,109965],{"class":74,"line":1608},[72,109960,24253],{"class":358},[72,109962,24256],{"class":366},[72,109964,101345],{"class":366},[72,109966,101348],{"class":366},[15,109968,101419],{},[22,109970,109971,109974,109977],{},[25,109972,109973],{},"本章不依赖 Gymnasium。",[25,109975,109976],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[25,109978,109979],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[85,109981,101457],{"id":101456},[15,109983,109984],{},"Cartpole 的模型结构:",[63,109986,109989],{"className":109987,"code":109988,"language":127,"meta":68},[125],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[34,109990,109988],{"__ignoreMap":68},[15,109992,109993],{},"小车通过 slide joint 左右移动:",[63,109995,109997],{"className":53485,"code":109996,"language":53487,"meta":68,"style":68},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[34,109998,109999],{"__ignoreMap":68},[72,110000,110001,110003,110005,110007,110009,110012,110014,110016,110019,110021,110023,110026],{"class":74,"line":75},[72,110002,1464],{"class":82},[72,110004,103360],{"class":51718},[72,110006,15346],{"class":358},[72,110008,609],{"class":82},[72,110010,110011],{"class":366},"\"cart_x\"",[72,110013,54242],{"class":358},[72,110015,609],{"class":82},[72,110017,110018],{"class":366},"\"slide\"",[72,110020,106428],{"class":358},[72,110022,609],{"class":82},[72,110024,110025],{"class":366},"\"1 0 0\"",[72,110027,101555],{"class":82},[15,110029,110030],{},"杆子通过 hinge joint 旋转:",[63,110032,110034],{"className":53485,"code":110033,"language":53487,"meta":68,"style":68},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[34,110035,110036],{"__ignoreMap":68},[72,110037,110038,110040,110042,110044,110046,110049,110051,110053,110055,110057,110059,110061],{"class":74,"line":75},[72,110039,1464],{"class":82},[72,110041,103360],{"class":51718},[72,110043,15346],{"class":358},[72,110045,609],{"class":82},[72,110047,110048],{"class":366},"\"pole_hinge\"",[72,110050,54242],{"class":358},[72,110052,609],{"class":82},[72,110054,106419],{"class":366},[72,110056,106428],{"class":358},[72,110058,609],{"class":82},[72,110060,106433],{"class":366},[72,110062,101555],{"class":82},[15,110064,110065],{},"控制力作用在小车 slide joint 上:",[63,110067,110069],{"className":53485,"code":110068,"language":53487,"meta":68,"style":68},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[34,110070,110071],{"__ignoreMap":68},[72,110072,110073,110075,110077,110079,110081,110084,110086,110088,110090,110092,110094,110096],{"class":74,"line":75},[72,110074,1464],{"class":82},[72,110076,106474],{"class":51718},[72,110078,15346],{"class":358},[72,110080,609],{"class":82},[72,110082,110083],{"class":366},"\"cart_motor\"",[72,110085,106484],{"class":358},[72,110087,609],{"class":82},[72,110089,110011],{"class":366},[72,110091,106491],{"class":358},[72,110093,609],{"class":82},[72,110095,54734],{"class":366},[72,110097,101555],{"class":82},[531,110099,110101],{"id":110100},"cartpole-的状态是什么","Cartpole 的状态是什么",[15,110103,110104],{},"这个简化模型有两个关节：",[154,110106,110107,110118],{},[157,110108,110109],{},[160,110110,110111,110113,110115],{},[163,110112,103163],{"align":165},[163,110114,24161],{"align":165},[163,110116,110117],{"align":165},"对应状态",[174,110119,110120,110133],{},[160,110121,110122,110127,110130],{},[179,110123,110124],{"align":165},[34,110125,110126],{},"cart_x",[179,110128,110129],{"align":165},"slide",[179,110131,110132],{"align":165},"小车 x 位置",[160,110134,110135,110140,110142],{},[179,110136,110137],{"align":165},[34,110138,110139],{},"pole_hinge",[179,110141,106240],{"align":165},[179,110143,110144],{"align":165},"杆子角度",[15,110146,110147],{},"所以：",[63,110149,110152],{"className":110150,"code":110151,"language":127,"meta":68},[125],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[34,110153,110151],{"__ignoreMap":68},[15,110155,110156],{},"把它们拼起来就是观测：",[63,110158,110161],{"className":110159,"code":110160,"language":127,"meta":68},[125],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[34,110162,110160],{"__ignoreMap":68},[531,110164,110166],{"id":110165},"action-是什么","action 是什么",[15,110168,110169],{},"本章只有一个 actuator：",[63,110171,110174],{"className":110172,"code":110173,"language":127,"meta":68},[125],"data.ctrl[0] = action\n",[34,110175,110173],{"__ignoreMap":68},[15,110177,110178],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[531,110180,110182],{"id":110181},"reward-是什么","reward 是什么",[15,110184,110185],{},"奖励函数：",[63,110187,110189],{"className":65,"code":110188,"language":67,"meta":68,"style":68},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[34,110190,110191],{"__ignoreMap":68},[72,110192,110193,110195,110198,110200,110202,110204,110207,110209,110212,110214,110216,110218,110221,110223],{"class":74,"line":75},[72,110194,17472],{"class":78},[72,110196,110197],{"class":362}," float",[72,110199,564],{"class":82},[72,110201,102807],{"class":362},[72,110203,52689],{"class":78},[72,110205,110206],{"class":362}," 0.1",[72,110208,6944],{"class":78},[72,110210,110211],{"class":82}," cart_x ",[72,110213,1009],{"class":78},[72,110215,110211],{"class":82},[72,110217,1086],{"class":78},[72,110219,110220],{"class":82}," pole_angle ",[72,110222,1009],{"class":78},[72,110224,110225],{"class":82}," pole_angle)\n",[15,110227,106626],{},[22,110229,110230,110235,110238],{},[25,110231,110232,110233,28807],{},"基础奖励是 ",[34,110234,102807],{},[25,110236,110237],{},"小车离中心越远，扣分越多。",[25,110239,110240],{},"杆子角度越大，扣分越多。",[15,110242,110243],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[85,110245,101663],{"id":101662},[63,110247,110249],{"className":65,"code":110248,"language":67,"meta":68,"style":68},"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",[34,110250,110251,110257,110267,110271,110275,110283,110288,110292,110296,110300,110305,110309,110314,110319,110324,110328,110333,110338,110343,110347,110351,110355,110359,110363,110368,110372,110376,110380,110384,110388,110398,110405,110409,110413,110427,110441,110454,110484,110488,110492,110504,110516,110524,110528,110541,110545,110549,110558,110562,110578,110588,110601,110614,110618,110641,110659,110663,110675,110679,110683,110693,110703,110707,110723,110764,110768,110788,110804,110808,110812,110824],{"__ignoreMap":68},[72,110252,110253,110255],{"class":74,"line":75},[72,110254,79],{"class":78},[72,110256,83],{"class":82},[72,110258,110259,110261,110263,110265],{"class":74,"line":370},[72,110260,79],{"class":78},[72,110262,31798],{"class":82},[72,110264,31801],{"class":78},[72,110266,31804],{"class":82},[72,110268,110269],{"class":74,"line":1608},[72,110270,2828],{"emptyLinePlaceholder":490},[72,110272,110273],{"class":74,"line":1623},[72,110274,2828],{"emptyLinePlaceholder":490},[72,110276,110277,110279,110281],{"class":74,"line":1629},[72,110278,101720],{"class":362},[72,110280,13990],{"class":78},[72,110282,101725],{"class":366},[72,110284,110285],{"class":74,"line":1643},[72,110286,110287],{"class":366},"\u003Cmujoco model=\"cartpole\">\n",[72,110289,110290],{"class":74,"line":1649},[72,110291,101735],{"class":366},[72,110293,110294],{"class":74,"line":1740},[72,110295,2828],{"emptyLinePlaceholder":490},[72,110297,110298],{"class":74,"line":1746},[72,110299,101744],{"class":366},[72,110301,110302],{"class":74,"line":1758},[72,110303,110304],{"class":366},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[72,110306,110307],{"class":74,"line":2041},[72,110308,2828],{"emptyLinePlaceholder":490},[72,110310,110311],{"class":74,"line":2046},[72,110312,110313],{"class":366},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[72,110315,110316],{"class":74,"line":2052},[72,110317,110318],{"class":366},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[72,110320,110321],{"class":74,"line":2057},[72,110322,110323],{"class":366},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[72,110325,110326],{"class":74,"line":2071},[72,110327,2828],{"emptyLinePlaceholder":490},[72,110329,110330],{"class":74,"line":2076},[72,110331,110332],{"class":366},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[72,110334,110335],{"class":74,"line":2082},[72,110336,110337],{"class":366},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[72,110339,110340],{"class":74,"line":2103},[72,110341,110342],{"class":366},"        \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",[72,110344,110345],{"class":74,"line":2108},[72,110346,106838],{"class":366},[72,110348,110349],{"class":74,"line":2122},[72,110350,101773],{"class":366},[72,110352,110353],{"class":74,"line":2127},[72,110354,101778],{"class":366},[72,110356,110357],{"class":74,"line":2156},[72,110358,2828],{"emptyLinePlaceholder":490},[72,110360,110361],{"class":74,"line":2161},[72,110362,106855],{"class":366},[72,110364,110365],{"class":74,"line":2178},[72,110366,110367],{"class":366},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[72,110369,110370],{"class":74,"line":2183},[72,110371,106865],{"class":366},[72,110373,110374],{"class":74,"line":2188},[72,110375,101783],{"class":366},[72,110377,110378],{"class":74,"line":2193},[72,110379,96115],{"class":366},[72,110381,110382],{"class":74,"line":2207},[72,110383,2828],{"emptyLinePlaceholder":490},[72,110385,110386],{"class":74,"line":2212},[72,110387,2828],{"emptyLinePlaceholder":490},[72,110389,110390,110392,110395],{"class":74,"line":3005},[72,110391,32365],{"class":78},[72,110393,110394],{"class":358}," get_observation",[72,110396,110397],{"class":82},"(data: mujoco.MjData) -> np.ndarray:\n",[72,110399,110400,110402],{"class":74,"line":3019},[72,110401,4518],{"class":78},[72,110403,110404],{"class":82}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[72,110406,110407],{"class":74,"line":3027},[72,110408,2828],{"emptyLinePlaceholder":490},[72,110410,110411],{"class":74,"line":3032},[72,110412,2828],{"emptyLinePlaceholder":490},[72,110414,110415,110417,110420,110423,110425],{"class":74,"line":3038},[72,110416,32365],{"class":78},[72,110418,110419],{"class":358}," compute_reward",[72,110421,110422],{"class":82},"(obs: np.ndarray) -> ",[72,110424,603],{"class":362},[72,110426,4167],{"class":82},[72,110428,110429,110432,110434,110437,110439],{"class":74,"line":3044},[72,110430,110431],{"class":82},"    cart_x ",[72,110433,609],{"class":78},[72,110435,110436],{"class":82}," obs[",[72,110438,747],{"class":362},[72,110440,33664],{"class":82},[72,110442,110443,110446,110448,110450,110452],{"class":74,"line":3049},[72,110444,110445],{"class":82},"    pole_angle ",[72,110447,609],{"class":78},[72,110449,110436],{"class":82},[72,110451,772],{"class":362},[72,110453,33664],{"class":82},[72,110455,110456,110458,110460,110462,110464,110466,110468,110470,110472,110474,110476,110478,110480,110482],{"class":74,"line":8374},[72,110457,4518],{"class":78},[72,110459,110197],{"class":362},[72,110461,564],{"class":82},[72,110463,102807],{"class":362},[72,110465,52689],{"class":78},[72,110467,110206],{"class":362},[72,110469,6944],{"class":78},[72,110471,110211],{"class":82},[72,110473,1009],{"class":78},[72,110475,110211],{"class":82},[72,110477,1086],{"class":78},[72,110479,110220],{"class":82},[72,110481,1009],{"class":78},[72,110483,110225],{"class":82},[72,110485,110486],{"class":74,"line":8398},[72,110487,2828],{"emptyLinePlaceholder":490},[72,110489,110490],{"class":74,"line":8403},[72,110491,2828],{"emptyLinePlaceholder":490},[72,110493,110494,110496,110498,110500,110502],{"class":74,"line":8409},[72,110495,32365],{"class":78},[72,110497,2401],{"class":358},[72,110499,101804],{"class":82},[72,110501,96103],{"class":362},[72,110503,4167],{"class":82},[72,110505,110506,110508,110510,110512,110514],{"class":74,"line":8436},[72,110507,101813],{"class":82},[72,110509,609],{"class":78},[72,110511,101818],{"class":82},[72,110513,101720],{"class":362},[72,110515,570],{"class":82},[72,110517,110518,110520,110522],{"class":74,"line":8441},[72,110519,101827],{"class":82},[72,110521,609],{"class":78},[72,110523,101832],{"class":82},[72,110525,110526],{"class":74,"line":8447},[72,110527,2828],{"emptyLinePlaceholder":490},[72,110529,110530,110532,110534,110536,110538],{"class":74,"line":8459},[72,110531,105470],{"class":82},[72,110533,772],{"class":362},[72,110535,4871],{"class":82},[72,110537,609],{"class":78},[72,110539,110540],{"class":362}," 0.1\n",[72,110542,110543],{"class":74,"line":8471},[72,110544,105483],{"class":82},[72,110546,110547],{"class":74,"line":8483},[72,110548,2828],{"emptyLinePlaceholder":490},[72,110550,110551,110554,110556],{"class":74,"line":10142},[72,110552,110553],{"class":82},"    total_reward ",[72,110555,609],{"class":78},[72,110557,105162],{"class":362},[72,110559,110560],{"class":74,"line":10167},[72,110561,2828],{"emptyLinePlaceholder":490},[72,110563,110564,110566,110568,110570,110572,110574,110576],{"class":74,"line":10190},[72,110565,3629],{"class":78},[72,110567,32034],{"class":82},[72,110569,26465],{"class":78},[72,110571,32861],{"class":362},[72,110573,564],{"class":82},[72,110575,6836],{"class":362},[72,110577,31204],{"class":82},[72,110579,110580,110583,110585],{"class":74,"line":10214},[72,110581,110582],{"class":82},"        obs ",[72,110584,609],{"class":78},[72,110586,110587],{"class":82}," get_observation(data)\n",[72,110589,110590,110593,110595,110597,110599],{"class":74,"line":10219},[72,110591,110592],{"class":82},"        pole_angle ",[72,110594,609],{"class":78},[72,110596,110436],{"class":82},[72,110598,772],{"class":362},[72,110600,33664],{"class":82},[72,110602,110603,110606,110608,110610,110612],{"class":74,"line":10224},[72,110604,110605],{"class":82},"        pole_angular_velocity ",[72,110607,609],{"class":78},[72,110609,110436],{"class":82},[72,110611,634],{"class":362},[72,110613,33664],{"class":82},[72,110615,110616],{"class":74,"line":10229},[72,110617,2828],{"emptyLinePlaceholder":490},[72,110619,110620,110623,110625,110628,110630,110632,110634,110636,110638],{"class":74,"line":10238},[72,110621,110622],{"class":82},"        action ",[72,110624,609],{"class":78},[72,110626,110627],{"class":362}," 2.0",[72,110629,6944],{"class":78},[72,110631,110220],{"class":82},[72,110633,1035],{"class":78},[72,110635,62285],{"class":362},[72,110637,6944],{"class":78},[72,110639,110640],{"class":82}," pole_angular_velocity\n",[72,110642,110643,110645,110647,110649,110651,110653,110655,110657],{"class":74,"line":10243},[72,110644,110622],{"class":82},[72,110646,609],{"class":78},[72,110648,107847],{"class":82},[72,110650,1086],{"class":78},[72,110652,102807],{"class":362},[72,110654,12861],{"class":82},[72,110656,102807],{"class":362},[72,110658,570],{"class":82},[72,110660,110661],{"class":74,"line":10249},[72,110662,2828],{"emptyLinePlaceholder":490},[72,110664,110665,110667,110669,110671,110673],{"class":74,"line":10270},[72,110666,107017],{"class":82},[72,110668,747],{"class":362},[72,110670,4871],{"class":82},[72,110672,609],{"class":78},[72,110674,107870],{"class":82},[72,110676,110677],{"class":74,"line":10276},[72,110678,101922],{"class":82},[72,110680,110681],{"class":74,"line":10290},[72,110682,2828],{"emptyLinePlaceholder":490},[72,110684,110685,110688,110690],{"class":74,"line":10296},[72,110686,110687],{"class":82},"        reward ",[72,110689,609],{"class":78},[72,110691,110692],{"class":82}," compute_reward(get_observation(data))\n",[72,110694,110695,110698,110700],{"class":74,"line":10323},[72,110696,110697],{"class":82},"        total_reward ",[72,110699,9903],{"class":78},[72,110701,110702],{"class":82}," reward\n",[72,110704,110705],{"class":74,"line":10332},[72,110706,2828],{"emptyLinePlaceholder":490},[72,110708,110709,110711,110713,110715,110717,110719,110721],{"class":74,"line":10338},[72,110710,2925],{"class":78},[72,110712,32034],{"class":82},[72,110714,882],{"class":78},[72,110716,6180],{"class":362},[72,110718,101965],{"class":78},[72,110720,4521],{"class":362},[72,110722,4167],{"class":82},[72,110724,110725,110727,110729,110732,110735,110738,110741,110743,110746,110749,110751,110753,110755,110757,110760,110762],{"class":74,"line":10346},[72,110726,35068],{"class":362},[72,110728,564],{"class":82},[72,110730,110731],{"class":366},"\"step:\"",[72,110733,110734],{"class":82},", step, ",[72,110736,110737],{"class":366},"\"obs:\"",[72,110739,110740],{"class":82},", np.round(obs, ",[72,110742,634],{"class":362},[72,110744,110745],{"class":82},"), ",[72,110747,110748],{"class":366},"\"action:\"",[72,110750,12861],{"class":82},[72,110752,32436],{"class":362},[72,110754,564],{"class":82},[72,110756,603],{"class":362},[72,110758,110759],{"class":82},"(action), ",[72,110761,634],{"class":362},[72,110763,30915],{"class":82},[72,110765,110766],{"class":74,"line":10351},[72,110767,2828],{"emptyLinePlaceholder":490},[72,110769,110770,110772,110774,110777,110779,110781,110784,110786],{"class":74,"line":17030},[72,110771,31717],{"class":362},[72,110773,564],{"class":82},[72,110775,110776],{"class":366},"\"total_reward:\"",[72,110778,12861],{"class":82},[72,110780,32436],{"class":362},[72,110782,110783],{"class":82},"(total_reward, ",[72,110785,634],{"class":362},[72,110787,30915],{"class":82},[72,110789,110790,110792,110794,110797,110800,110802],{"class":74,"line":17036},[72,110791,31717],{"class":362},[72,110793,564],{"class":82},[72,110795,110796],{"class":366},"\"final obs:\"",[72,110798,110799],{"class":82},", np.round(get_observation(data), ",[72,110801,634],{"class":362},[72,110803,30915],{"class":82},[72,110805,110806],{"class":74,"line":17059},[72,110807,2828],{"emptyLinePlaceholder":490},[72,110809,110810],{"class":74,"line":17065},[72,110811,2828],{"emptyLinePlaceholder":490},[72,110813,110814,110816,110818,110820,110822],{"class":74,"line":17088},[72,110815,1960],{"class":78},[72,110817,31638],{"class":362},[72,110819,101965],{"class":78},[72,110821,101968],{"class":366},[72,110823,4167],{"class":82},[72,110825,110826],{"class":74,"line":17102},[72,110827,101975],{"class":82},[15,110829,103974],{},[63,110831,110833],{"className":349,"code":110832,"language":351,"meta":68,"style":68},"touch ch6_cartpole.py\n",[34,110834,110835],{"__ignoreMap":68},[72,110836,110837,110839],{"class":74,"line":75},[72,110838,101690],{"class":358},[72,110840,110841],{"class":366}," ch6_cartpole.py\n",[15,110843,110844],{},"运行：",[63,110846,110848],{"className":349,"code":110847,"language":351,"meta":68,"style":68},"python ch6_cartpole.py\n",[34,110849,110850],{"__ignoreMap":68},[72,110851,110852,110854],{"class":74,"line":75},[72,110853,67],{"class":358},[72,110855,110841],{"class":366},[531,110857,101978],{"id":101978},[15,110859,110860],{},"构造观测：",[63,110862,110864],{"className":65,"code":110863,"language":67,"meta":68,"style":68},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[34,110865,110866,110874],{"__ignoreMap":68},[72,110867,110868,110870,110872],{"class":74,"line":75},[72,110869,32365],{"class":78},[72,110871,110394],{"class":358},[72,110873,110397],{"class":82},[72,110875,110876,110878],{"class":74,"line":370},[72,110877,4518],{"class":78},[72,110879,110404],{"class":82},[15,110881,110882,110885,110886,110888,110889,110891],{},[34,110883,110884],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[34,110887,36],{}," 2 维，",[34,110890,40],{}," 2 维，所以 obs 是 4 维。",[15,110893,110894],{},"设置初始角度：",[63,110896,110898],{"className":65,"code":110897,"language":67,"meta":68,"style":68},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[34,110899,110900,110912],{"__ignoreMap":68},[72,110901,110902,110904,110906,110908,110910],{"class":74,"line":75},[72,110903,105100],{"class":82},[72,110905,772],{"class":362},[72,110907,4871],{"class":82},[72,110909,609],{"class":78},[72,110911,110540],{"class":362},[72,110913,110914],{"class":74,"line":370},[72,110915,104944],{"class":82},[15,110917,110918],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[15,110920,110921],{},"简单反馈控制：",[63,110923,110925],{"className":65,"code":110924,"language":67,"meta":68,"style":68},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[34,110926,110927,110947],{"__ignoreMap":68},[72,110928,110929,110931,110933,110935,110937,110939,110941,110943,110945],{"class":74,"line":75},[72,110930,107842],{"class":82},[72,110932,609],{"class":78},[72,110934,110627],{"class":362},[72,110936,6944],{"class":78},[72,110938,110220],{"class":82},[72,110940,1035],{"class":78},[72,110942,62285],{"class":362},[72,110944,6944],{"class":78},[72,110946,110640],{"class":82},[72,110948,110949,110951,110953,110955,110957,110959,110961,110963],{"class":74,"line":370},[72,110950,107842],{"class":82},[72,110952,609],{"class":78},[72,110954,107847],{"class":82},[72,110956,1086],{"class":78},[72,110958,102807],{"class":362},[72,110960,12861],{"class":82},[72,110962,102807],{"class":362},[72,110964,570],{"class":82},[15,110966,110967],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[15,110969,110970],{},"限制动作：",[63,110972,110974],{"className":65,"code":110973,"language":67,"meta":68,"style":68},"np.clip(action, -1.0, 1.0)\n",[34,110975,110976],{"__ignoreMap":68},[72,110977,110978,110981,110983,110985,110987,110989],{"class":74,"line":75},[72,110979,110980],{"class":82},"np.clip(action, ",[72,110982,1086],{"class":78},[72,110984,102807],{"class":362},[72,110986,12861],{"class":82},[72,110988,102807],{"class":362},[72,110990,570],{"class":82},[15,110992,110993,110994,110997],{},"因为 XML 里 ",[34,110995,110996],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[531,110999,102113],{"id":102113},[63,111001,111002],{"className":65,"code":110863,"language":67,"meta":68,"style":68},[34,111003,111004,111012],{"__ignoreMap":68},[72,111005,111006,111008,111010],{"class":74,"line":75},[72,111007,32365],{"class":78},[72,111009,110394],{"class":358},[72,111011,110397],{"class":82},[72,111013,111014,111016],{"class":74,"line":370},[72,111015,4518],{"class":78},[72,111017,110404],{"class":82},[15,111019,111020,111021,111024,111025,111028,111029,111032],{},"这段定义了一个函数，用来获取当前观测。",[34,111022,111023],{},"data.qpos.copy()"," 是位置数组副本，",[34,111026,111027],{},"data.qvel.copy()"," 是速度数组副本。",[34,111030,111031],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[15,111034,111035],{},"在本章模型里：",[63,111037,111040],{"className":111038,"code":111039,"language":127,"meta":68},[125],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[34,111041,111039],{"__ignoreMap":68},[15,111043,111044],{},"所以返回的 obs 是：",[63,111046,111049],{"className":111047,"code":111048,"language":127,"meta":68},[125],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[34,111050,111048],{"__ignoreMap":68},[63,111052,111054],{"className":65,"code":111053,"language":67,"meta":68,"style":68},"def compute_reward(obs: np.ndarray) -> float:\n",[34,111055,111056],{"__ignoreMap":68},[72,111057,111058,111060,111062,111064,111066],{"class":74,"line":75},[72,111059,32365],{"class":78},[72,111061,110419],{"class":358},[72,111063,110422],{"class":82},[72,111065,603],{"class":362},[72,111067,4167],{"class":82},[15,111069,111070,111071,111074],{},"这行定义奖励函数。输入是观测 ",[34,111072,111073],{},"obs","，输出是一个浮点数奖励。",[63,111076,111078],{"className":65,"code":111077,"language":67,"meta":68,"style":68},"cart_x = obs[0]\npole_angle = obs[1]\n",[34,111079,111080,111093],{"__ignoreMap":68},[72,111081,111082,111085,111087,111089,111091],{"class":74,"line":75},[72,111083,111084],{"class":82},"cart_x ",[72,111086,609],{"class":78},[72,111088,110436],{"class":82},[72,111090,747],{"class":362},[72,111092,33664],{"class":82},[72,111094,111095,111098,111100,111102,111104],{"class":74,"line":370},[72,111096,111097],{"class":82},"pole_angle ",[72,111099,609],{"class":78},[72,111101,110436],{"class":82},[72,111103,772],{"class":362},[72,111105,33664],{"class":82},[15,111107,111108,111109,111112,111113,111116],{},"数组索引从 0 开始。",[34,111110,111111],{},"obs[0]"," 是第一个元素，也就是小车位置。",[34,111114,111115],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[63,111118,111119],{"className":65,"code":110188,"language":67,"meta":68,"style":68},[34,111120,111121],{"__ignoreMap":68},[72,111122,111123,111125,111127,111129,111131,111133,111135,111137,111139,111141,111143,111145,111147,111149],{"class":74,"line":75},[72,111124,17472],{"class":78},[72,111126,110197],{"class":362},[72,111128,564],{"class":82},[72,111130,102807],{"class":362},[72,111132,52689],{"class":78},[72,111134,110206],{"class":362},[72,111136,6944],{"class":78},[72,111138,110211],{"class":82},[72,111140,1009],{"class":78},[72,111142,110211],{"class":82},[72,111144,1086],{"class":78},[72,111146,110220],{"class":82},[72,111148,1009],{"class":78},[72,111150,110225],{"class":82},[15,111152,111153,111154,111157,111158,111161],{},"这行计算奖励。",[34,111155,111156],{},"cart_x * cart_x"," 是小车位置的平方，",[34,111159,111160],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[63,111163,111165],{"className":65,"code":111164,"language":67,"meta":68,"style":68},"data.qpos[1] = 0.1\n",[34,111166,111167],{"__ignoreMap":68},[72,111168,111169,111171,111173,111175,111177],{"class":74,"line":75},[72,111170,105100],{"class":82},[72,111172,772],{"class":362},[72,111174,4871],{"class":82},[72,111176,609],{"class":78},[72,111178,110540],{"class":362},[15,111180,111181,111182,111184,111185,111187],{},"手动设置杆子的初始角度。因为 ",[34,111183,105857],{}," 是小车位置，",[34,111186,105860],{}," 是杆子角度，所以这里改的是杆子。",[63,111189,111190],{"className":65,"code":104944,"language":67,"meta":68,"style":68},[34,111191,111192],{"__ignoreMap":68},[72,111193,111194],{"class":74,"line":75},[72,111195,104944],{"class":82},[15,111197,105903,111198,111200],{},[34,111199,36],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[63,111202,111204],{"className":65,"code":111203,"language":67,"meta":68,"style":68},"total_reward = 0.0\n",[34,111205,111206],{"__ignoreMap":68},[72,111207,111208,111211,111213],{"class":74,"line":75},[72,111209,111210],{"class":82},"total_reward ",[72,111212,609],{"class":78},[72,111214,105162],{"class":362},[15,111216,111217],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[63,111219,111221],{"className":65,"code":111220,"language":67,"meta":68,"style":68},"for step in range(1000):\n",[34,111222,111223],{"__ignoreMap":68},[72,111224,111225,111227,111229,111231,111233,111235,111237],{"class":74,"line":75},[72,111226,3453],{"class":78},[72,111228,32034],{"class":82},[72,111230,26465],{"class":78},[72,111232,32861],{"class":362},[72,111234,564],{"class":82},[72,111236,6836],{"class":362},[72,111238,31204],{"class":82},[15,111240,111241,111242,111244],{},"循环 1000 步。",[34,111243,107534],{}," 是当前步数，从 0 到 999。",[63,111246,111248],{"className":65,"code":111247,"language":67,"meta":68,"style":68},"obs = get_observation(data)\n",[34,111249,111250],{"__ignoreMap":68},[72,111251,111252,111255,111257],{"class":74,"line":75},[72,111253,111254],{"class":82},"obs ",[72,111256,609],{"class":78},[72,111258,110587],{"class":82},[15,111260,111261,111262,28807],{},"读取当前状态，保存到 ",[34,111263,111073],{},[63,111265,111267],{"className":65,"code":111266,"language":67,"meta":68,"style":68},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[34,111268,111269,111281],{"__ignoreMap":68},[72,111270,111271,111273,111275,111277,111279],{"class":74,"line":75},[72,111272,111097],{"class":82},[72,111274,609],{"class":78},[72,111276,110436],{"class":82},[72,111278,772],{"class":362},[72,111280,33664],{"class":82},[72,111282,111283,111286,111288,111290,111292],{"class":74,"line":370},[72,111284,111285],{"class":82},"pole_angular_velocity ",[72,111287,609],{"class":78},[72,111289,110436],{"class":82},[72,111291,634],{"class":362},[72,111293,33664],{"class":82},[15,111295,111296,111297,111300,111301,28807],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[34,111298,111299],{},"obs[3]","？因为 obs 的顺序是 ",[34,111302,111303],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[63,111305,111307],{"className":65,"code":111306,"language":67,"meta":68,"style":68},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[34,111308,111309],{"__ignoreMap":68},[72,111310,111311,111313,111315,111317,111319,111321,111323,111325,111327],{"class":74,"line":75},[72,111312,107842],{"class":82},[72,111314,609],{"class":78},[72,111316,110627],{"class":362},[72,111318,6944],{"class":78},[72,111320,110220],{"class":82},[72,111322,1035],{"class":78},[72,111324,62285],{"class":362},[72,111326,6944],{"class":78},[72,111328,110640],{"class":82},[15,111330,111331,111332,101432,111334,111336],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[34,111333,105661],{},[34,111335,35747],{}," 是人为设置的系数，不是固定公式。",[63,111338,111340],{"className":65,"code":111339,"language":67,"meta":68,"style":68},"action = np.clip(action, -1.0, 1.0)\n",[34,111341,111342],{"__ignoreMap":68},[72,111343,111344,111346,111348,111350,111352,111354,111356,111358],{"class":74,"line":75},[72,111345,107842],{"class":82},[72,111347,609],{"class":78},[72,111349,107847],{"class":82},[72,111351,1086],{"class":78},[72,111353,102807],{"class":362},[72,111355,12861],{"class":82},[72,111357,102807],{"class":362},[72,111359,570],{"class":82},[15,111361,111362],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[63,111364,111365],{"className":65,"code":110173,"language":67,"meta":68,"style":68},[34,111366,111367],{"__ignoreMap":68},[72,111368,111369,111371,111373,111375,111377],{"class":74,"line":75},[72,111370,106271],{"class":82},[72,111372,747],{"class":362},[72,111374,4871],{"class":82},[72,111376,609],{"class":78},[72,111378,107870],{"class":82},[15,111380,111381],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[63,111383,111384],{"className":65,"code":104906,"language":67,"meta":68,"style":68},[34,111385,111386],{"__ignoreMap":68},[72,111387,111388],{"class":74,"line":75},[72,111389,104906],{"class":82},[15,111391,111392,111393,111395],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[34,111394,106526],{}," 计算小车和杆子的下一刻状态。",[63,111397,111399],{"className":65,"code":111398,"language":67,"meta":68,"style":68},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[34,111400,111401,111410],{"__ignoreMap":68},[72,111402,111403,111406,111408],{"class":74,"line":75},[72,111404,111405],{"class":82},"reward ",[72,111407,609],{"class":78},[72,111409,110692],{"class":82},[72,111411,111412,111414,111416],{"class":74,"line":370},[72,111413,111210],{"class":82},[72,111415,9903],{"class":78},[72,111417,110702],{"class":82},[15,111419,111420,111421,111423,111424,111427,111428,28807],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[34,111422,9903],{}," 是简写，",[34,111425,111426],{},"total_reward += reward"," 等价于 ",[34,111429,111430],{},"total_reward = total_reward + reward",[63,111432,111434],{"className":65,"code":111433,"language":67,"meta":68,"style":68},"if step % 100 == 0:\n",[34,111435,111436],{"__ignoreMap":68},[72,111437,111438,111440,111442,111444,111446,111448,111450],{"class":74,"line":75},[72,111439,1960],{"class":78},[72,111441,32034],{"class":82},[72,111443,882],{"class":78},[72,111445,6180],{"class":362},[72,111447,101965],{"class":78},[72,111449,4521],{"class":362},[72,111451,4167],{"class":82},[15,111453,111454,111456,111457,111460],{},[34,111455,882],{}," 是取余数。",[34,111458,111459],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[63,111462,111464],{"className":65,"code":111463,"language":67,"meta":68,"style":68},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[34,111465,111466],{"__ignoreMap":68},[72,111467,111468,111470,111472,111474,111476,111478,111480,111482,111484,111486,111488,111490,111492,111494,111496,111498],{"class":74,"line":75},[72,111469,30833],{"class":362},[72,111471,564],{"class":82},[72,111473,110731],{"class":366},[72,111475,110734],{"class":82},[72,111477,110737],{"class":366},[72,111479,110740],{"class":82},[72,111481,634],{"class":362},[72,111483,110745],{"class":82},[72,111485,110748],{"class":366},[72,111487,12861],{"class":82},[72,111489,32436],{"class":362},[72,111491,564],{"class":82},[72,111493,603],{"class":362},[72,111495,110759],{"class":82},[72,111497,634],{"class":362},[72,111499,30915],{"class":82},[15,111501,111502,111503,111506,111507,111510],{},"打印当前步数、观测和动作。",[34,111504,111505],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[34,111508,111509],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[85,111512,102720],{"id":102719},[15,111514,111515],{},"观测向量:",[63,111517,111520],{"className":111518,"code":111519,"language":127,"meta":68},[125],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[34,111521,111519],{"__ignoreMap":68},[15,111523,111524],{},"控制器是教学用的简单线性反馈，不保证最优。",[15,111526,111527],{},"每隔 100 步会打印一次：",[63,111529,111532],{"className":111530,"code":111531,"language":127,"meta":68},[125],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[34,111533,111531],{"__ignoreMap":68},[15,111535,111536],{},"重点观察：",[22,111538,111539,111545,111550],{},[25,111540,111541,111544],{},[34,111542,111543],{},"pole_angle"," 是否越来越大。",[25,111546,111547,111549],{},[34,111548,110126],{}," 是否跑得太远。",[25,111551,111552,111553,462,111555,28807],{},"action 是否经常被 clip 到 ",[34,111554,104319],{},[34,111556,772],{},[15,111558,111559],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[85,111561,102752],{"id":102751},[22,111563,111564,111570,111573,111579,111589,111595,111598],{},[25,111565,111566,111567,28807],{},"把初始角度改为 ",[34,111568,111569],{},"data.qpos[1] = 0.3",[25,111571,111572],{},"重新运行，观察控制是否变差。",[25,111574,111575,111576,111578],{},"把 actuator ",[34,111577,107467],{}," 改小。",[25,111580,111581,111582,111585,111586,28807],{},"打印 ",[34,111583,111584],{},"model.nq, model.nv, model.nu","，应为 ",[34,111587,111588],{},"2 2 1",[25,111590,111591,111592,111594],{},"把 reward 里的 ",[34,111593,111160],{}," 系数改大，观察总奖励变化。",[25,111596,111597],{},"把控制器改成反号，观察杆子是否更容易倒。",[25,111599,111600],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[85,111602,102857],{"id":102856},[531,111604,111605],{"id":111605},"杆子方向和预期不一致",[15,111607,102800,111608,111610,111611,111613],{},[34,111609,106639],{}," 和 capsule 的 ",[34,111612,103580],{},"，必要时用 viewer 可视化确认。",[531,111615,111616],{"id":111616},"控制器越控越倒",[15,111618,111619],{},"说明反馈符号可能反了，尝试:",[63,111621,111623],{"className":65,"code":111622,"language":67,"meta":68,"style":68},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[34,111624,111625],{"__ignoreMap":68},[72,111626,111627,111629,111631,111633,111635,111637,111639,111641,111643,111645],{"class":74,"line":75},[72,111628,107842],{"class":82},[72,111630,609],{"class":78},[72,111632,52689],{"class":78},[72,111634,105661],{"class":362},[72,111636,6944],{"class":78},[72,111638,110220],{"class":82},[72,111640,1086],{"class":78},[72,111642,62285],{"class":362},[72,111644,6944],{"class":78},[72,111646,110640],{"class":82},[531,111648,111649],{"id":111649},"小车飞走",[15,111651,111652,111653,111655,111656,111659],{},"降低 ",[34,111654,107467],{}," 或缩小 ",[34,111657,111658],{},"action"," 的 clip 范围。",[531,111661,111663,111665],{"id":111662},"obs3-为什么是杆子角速度",[34,111664,111299],{}," 为什么是杆子角速度",[15,111667,111668],{},"因为这个模型里：",[63,111670,111673],{"className":111671,"code":111672,"language":127,"meta":68},[125],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[34,111674,111672],{"__ignoreMap":68},[15,111676,110147],{},[63,111678,111681],{"className":111679,"code":111680,"language":127,"meta":68},[125],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[34,111682,111680],{"__ignoreMap":68},[531,111684,111686],{"id":111685},"reward-变成负数是否错误","reward 变成负数是否错误",[15,111688,111689],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[85,111691,103011],{"id":103010},[15,111693,111694],{},"一个控制任务通常包含：",[22,111696,111697,111700,111708,111713,111716],{},[25,111698,111699],{},"模型：Cartpole 的 body、joint、actuator。",[25,111701,111702,111703,37,111705,111707],{},"观测：从 ",[34,111704,36],{},[34,111706,40],{}," 里取状态。",[25,111709,111710,111711,28807],{},"动作：写入 ",[34,111712,452],{},[25,111714,111715],{},"奖励：根据任务目标打分。",[25,111717,111718],{},"循环：obs -> action -> step -> reward。",[15,111720,111721],{},"这就是后面 Gymnasium 环境的基本骨架。",[473,111723,104689],{},{"title":68,"searchDepth":370,"depth":370,"links":111725},[111726,111727,111728,111733,111737,111738,111739,111747],{"id":101063,"depth":370,"text":101064},{"id":101184,"depth":370,"text":101185},{"id":101456,"depth":370,"text":101457,"children":111729},[111730,111731,111732],{"id":110100,"depth":1608,"text":110101},{"id":110165,"depth":1608,"text":110166},{"id":110181,"depth":1608,"text":110182},{"id":101662,"depth":370,"text":101663,"children":111734},[111735,111736],{"id":101978,"depth":1608,"text":101978},{"id":102113,"depth":1608,"text":102113},{"id":102719,"depth":370,"text":102720},{"id":102751,"depth":370,"text":102752},{"id":102856,"depth":370,"text":102857,"children":111740},[111741,111742,111743,111744,111746],{"id":111605,"depth":1608,"text":111605},{"id":111616,"depth":1608,"text":111616},{"id":111649,"depth":1608,"text":111649},{"id":111662,"depth":1608,"text":111745},"obs[3] 为什么是杆子角速度",{"id":111685,"depth":1608,"text":111686},{"id":103010,"depth":370,"text":103011},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109836,"description":68},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111754,"title":111755,"body":111756,"description":68,"extension":487,"meta":113770,"navigation":490,"path":113771,"seo":113772,"stem":113773,"__hash__":113774},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111757,"toc":113746},[111758,111761,111763,111766,111768,111785,111788,111791,111797,111800,111802,111804,111828,111830,111844,111846,111887,111889,111907,111909,111912,111918,111921,111949,111953,111959,111984,111987,112018,112025,112028,112031,112037,112040,112046,112049,112055,112059,112062,112087,112090,112092,112852,112854,112866,112868,112879,112881,112884,112901,112904,112906,112917,112920,112922,112968,112971,112984,112987,113069,113072,113074,113090,113100,113113,113116,113155,113165,113176,113186,113199,113202,113231,113234,113244,113247,113253,113270,113281,113283,113289,113306,113317,113338,113341,113353,113356,113377,113380,113388,113396,113413,113416,113485,113492,113500,113503,113516,113523,113525,113528,113534,113537,113540,113546,113552,113554,113594,113596,113602,113611,113614,113616,113636,113639,113642,113648,113652,113654,113681,113684,113687,113714,113720,113723,113726,113728,113731,113734,113740,113743],[10,111759,111755],{"id":111760},"_7控制任务reacher-机械臂到达目标",[85,111762,101064],{"id":101063},[15,111764,111765],{},"本章搭建一个二维两关节 reacher 任务。",[15,111767,104734],{},[22,111769,111770,111773,111776,111779,111782],{},[25,111771,111772],{},"两个 hinge joint",[25,111774,111775],{},"两个 motor actuator",[25,111777,111778],{},"site 作为末端点和目标点",[25,111780,111781],{},"根据末端和目标距离设计 reward",[25,111783,111784],{},"构造机械臂任务的基本形式",[15,111786,111787],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[15,111789,111790],{},"Reacher 任务可以理解为：",[63,111792,111795],{"className":111793,"code":111794,"language":127,"meta":68},[125],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[34,111796,111794],{"__ignoreMap":68},[15,111798,111799],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[85,111801,101185],{"id":101184},[15,111803,101188],{},[63,111805,111806],{"className":349,"code":104789,"language":351,"meta":68,"style":68},[34,111807,111808],{"__ignoreMap":68},[72,111809,111810,111812,111814,111816,111818,111820,111822,111824,111826],{"class":74,"line":75},[72,111811,24998],{"class":358},[72,111813,26737],{"class":366},[72,111815,24256],{"class":366},[72,111817,26822],{"class":362},[72,111819,104804],{"class":366},[72,111821,101213],{"class":366},[72,111823,102905],{"class":366},[72,111825,101229],{"class":366},[72,111827,104813],{"class":366},[15,111829,103223],{},[63,111831,111832],{"className":349,"code":101334,"language":351,"meta":68,"style":68},[34,111833,111834],{"__ignoreMap":68},[72,111835,111836,111838,111840,111842],{"class":74,"line":75},[72,111837,24253],{"class":358},[72,111839,24256],{"class":366},[72,111841,101345],{"class":366},[72,111843,101348],{"class":366},[15,111845,103240],{},[63,111847,111849],{"className":349,"code":111848,"language":351,"meta":68,"style":68},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[34,111850,111851,111868,111877],{"__ignoreMap":68},[72,111852,111853,111855,111857,111859,111862,111864,111866],{"class":74,"line":75},[72,111854,30751],{"class":358},[72,111856,29598],{"class":366},[72,111858,25537],{"class":362},[72,111860,111861],{"class":366}," mujoco-reacher",[72,111863,101390],{"class":366},[72,111865,101393],{"class":362},[72,111867,101396],{"class":362},[72,111869,111870,111872,111874],{"class":74,"line":370},[72,111871,30751],{"class":358},[72,111873,101403],{"class":366},[72,111875,111876],{"class":366}," mujoco-reacher\n",[72,111878,111879,111881,111883,111885],{"class":74,"line":1608},[72,111880,24253],{"class":358},[72,111882,24256],{"class":366},[72,111884,101345],{"class":366},[72,111886,101348],{"class":366},[15,111888,101419],{},[22,111890,111891,111894,111897],{},[25,111892,111893],{},"本章使用低维状态，不使用图像输入。",[25,111895,111896],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[25,111898,111899,111900,37,111902,37,111904,111906],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[34,111901,36],{},[34,111903,40],{},[34,111905,104084],{}," 的方法一致。",[85,111908,101457],{"id":101456},[15,111910,111911],{},"Reacher 任务核心:",[63,111913,111916],{"className":111914,"code":111915,"language":127,"meta":68},[125],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[34,111917,111915],{"__ignoreMap":68},[15,111919,111920],{},"读取 site 世界坐标:",[63,111922,111924],{"className":65,"code":111923,"language":67,"meta":68,"style":68},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[34,111925,111926,111939],{"__ignoreMap":68},[72,111927,111928,111930,111932,111934,111937],{"class":74,"line":75},[72,111929,104038],{"class":82},[72,111931,609],{"class":78},[72,111933,103809],{"class":82},[72,111935,111936],{"class":366},"\"tip\"",[72,111938,570],{"class":82},[72,111940,111941,111944,111946],{"class":74,"line":370},[72,111942,111943],{"class":82},"tip_pos ",[72,111945,609],{"class":78},[72,111947,111948],{"class":82}," data.site_xpos[site_id]\n",[531,111950,111952],{"id":111951},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[15,111954,111955,111956,111958],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[34,111957,36],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[63,111960,111962],{"className":65,"code":111961,"language":67,"meta":68,"style":68},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[34,111963,111964,111974],{"__ignoreMap":68},[72,111965,111966,111969,111971],{"class":74,"line":75},[72,111967,111968],{"class":82},"tip ",[72,111970,609],{"class":78},[72,111972,111973],{"class":82}," data.site_xpos[tip_site_id]\n",[72,111975,111976,111979,111981],{"class":74,"line":370},[72,111977,111978],{"class":82},"target ",[72,111980,609],{"class":78},[72,111982,111983],{"class":82}," data.site_xpos[target_site_id]\n",[15,111985,111986],{},"这样 reward 就很容易写：",[63,111988,111990],{"className":65,"code":111989,"language":67,"meta":68,"style":68},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[34,111991,111992,112007],{"__ignoreMap":68},[72,111993,111994,111997,111999,112002,112004],{"class":74,"line":75},[72,111995,111996],{"class":82},"dist ",[72,111998,609],{"class":78},[72,112000,112001],{"class":82}," np.linalg.norm(tip ",[72,112003,1086],{"class":78},[72,112005,112006],{"class":82}," target)\n",[72,112008,112009,112011,112013,112015],{"class":74,"line":370},[72,112010,111405],{"class":82},[72,112012,609],{"class":78},[72,112014,52689],{"class":78},[72,112016,112017],{"class":82},"dist\n",[15,112019,112020,112021,112024],{},"距离越小，",[34,112022,112023],{},"-dist"," 越接近 0，奖励越高。",[531,112026,112027],{"id":112027},"两关节机械臂的状态",[15,112029,112030],{},"这个模型有两个 hinge joint：",[63,112032,112035],{"className":112033,"code":112034,"language":127,"meta":68},[125],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[34,112036,112034],{"__ignoreMap":68},[15,112038,112039],{},"再加上末端和目标位置：",[63,112041,112044],{"className":112042,"code":112043,"language":127,"meta":68},[125],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[34,112045,112043],{"__ignoreMap":68},[15,112047,112048],{},"总维度：",[63,112050,112053],{"className":112051,"code":112052,"language":127,"meta":68},[125],"2 + 2 + 3 + 3 = 10\n",[34,112054,112052],{"__ignoreMap":68},[531,112056,112058],{"id":112057},"为什么-gravity-是-0","为什么 gravity 是 0",[15,112060,112061],{},"本章把重力设为：",[63,112063,112065],{"className":53485,"code":112064,"language":53487,"meta":68,"style":68},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[34,112066,112067],{"__ignoreMap":68},[72,112068,112069,112071,112073,112075,112077,112079,112081,112083,112085],{"class":74,"line":75},[72,112070,1464],{"class":82},[72,112072,69584],{"class":51718},[72,112074,101605],{"class":358},[72,112076,609],{"class":82},[72,112078,101610],{"class":366},[72,112080,101613],{"class":358},[72,112082,609],{"class":82},[72,112084,104175],{"class":366},[72,112086,101555],{"class":82},[15,112088,112089],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[85,112091,101663],{"id":101662},[63,112093,112095],{"className":65,"code":112094,"language":67,"meta":68,"style":68},"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",[34,112096,112097,112103,112113,112117,112121,112129,112134,112139,112143,112147,112152,112157,112161,112166,112171,112176,112180,112185,112190,112195,112200,112204,112208,112212,112216,112220,112225,112230,112234,112238,112242,112246,112250,112265,112274,112286,112309,112316,112320,112324,112334,112348,112362,112369,112373,112377,112391,112403,112415,112428,112443,112460,112464,112468,112480,112492,112500,112508,112512,112528,112533,112546,112559,112574,112578,112613,112645,112649,112653,112662,112666,112682,112692,112703,112719,112735,112751,112767,112771,112789,112809,112828,112832,112836,112848],{"__ignoreMap":68},[72,112098,112099,112101],{"class":74,"line":75},[72,112100,79],{"class":78},[72,112102,83],{"class":82},[72,112104,112105,112107,112109,112111],{"class":74,"line":370},[72,112106,79],{"class":78},[72,112108,31798],{"class":82},[72,112110,31801],{"class":78},[72,112112,31804],{"class":82},[72,112114,112115],{"class":74,"line":1608},[72,112116,2828],{"emptyLinePlaceholder":490},[72,112118,112119],{"class":74,"line":1623},[72,112120,2828],{"emptyLinePlaceholder":490},[72,112122,112123,112125,112127],{"class":74,"line":1629},[72,112124,101720],{"class":362},[72,112126,13990],{"class":78},[72,112128,101725],{"class":366},[72,112130,112131],{"class":74,"line":1643},[72,112132,112133],{"class":366},"\u003Cmujoco model=\"two_link_reacher\">\n",[72,112135,112136],{"class":74,"line":1649},[72,112137,112138],{"class":366},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[72,112140,112141],{"class":74,"line":1740},[72,112142,2828],{"emptyLinePlaceholder":490},[72,112144,112145],{"class":74,"line":1746},[72,112146,101744],{"class":366},[72,112148,112149],{"class":74,"line":1758},[72,112150,112151],{"class":366},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[72,112153,112154],{"class":74,"line":2041},[72,112155,112156],{"class":366},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[72,112158,112159],{"class":74,"line":2046},[72,112160,2828],{"emptyLinePlaceholder":490},[72,112162,112163],{"class":74,"line":2052},[72,112164,112165],{"class":366},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[72,112167,112168],{"class":74,"line":2057},[72,112169,112170],{"class":366},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[72,112172,112173],{"class":74,"line":2071},[72,112174,112175],{"class":366},"      \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",[72,112177,112178],{"class":74,"line":2076},[72,112179,2828],{"emptyLinePlaceholder":490},[72,112181,112182],{"class":74,"line":2082},[72,112183,112184],{"class":366},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[72,112186,112187],{"class":74,"line":2103},[72,112188,112189],{"class":366},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[72,112191,112192],{"class":74,"line":2108},[72,112193,112194],{"class":366},"        \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",[72,112196,112197],{"class":74,"line":2122},[72,112198,112199],{"class":366},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[72,112201,112202],{"class":74,"line":2127},[72,112203,106838],{"class":366},[72,112205,112206],{"class":74,"line":2156},[72,112207,101773],{"class":366},[72,112209,112210],{"class":74,"line":2161},[72,112211,101778],{"class":366},[72,112213,112214],{"class":74,"line":2178},[72,112215,2828],{"emptyLinePlaceholder":490},[72,112217,112218],{"class":74,"line":2183},[72,112219,106855],{"class":366},[72,112221,112222],{"class":74,"line":2188},[72,112223,112224],{"class":366},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[72,112226,112227],{"class":74,"line":2193},[72,112228,112229],{"class":366},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[72,112231,112232],{"class":74,"line":2207},[72,112233,106865],{"class":366},[72,112235,112236],{"class":74,"line":2212},[72,112237,101783],{"class":366},[72,112239,112240],{"class":74,"line":3005},[72,112241,96115],{"class":366},[72,112243,112244],{"class":74,"line":3019},[72,112245,2828],{"emptyLinePlaceholder":490},[72,112247,112248],{"class":74,"line":3027},[72,112249,2828],{"emptyLinePlaceholder":490},[72,112251,112252,112254,112257,112260,112262],{"class":74,"line":3032},[72,112253,32365],{"class":78},[72,112255,112256],{"class":358}," site_position",[72,112258,112259],{"class":82},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[72,112261,1728],{"class":362},[72,112263,112264],{"class":82},") -> np.ndarray:\n",[72,112266,112267,112269,112271],{"class":74,"line":3038},[72,112268,103804],{"class":82},[72,112270,609],{"class":78},[72,112272,112273],{"class":82}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[72,112275,112276,112278,112280,112282,112284],{"class":74,"line":3044},[72,112277,3529],{"class":78},[72,112279,103853],{"class":82},[72,112281,1464],{"class":78},[72,112283,4521],{"class":362},[72,112285,4167],{"class":82},[72,112287,112288,112290,112292,112294,112296,112299,112301,112303,112305,112307],{"class":74,"line":3049},[72,112289,103836],{"class":78},[72,112291,103839],{"class":362},[72,112293,564],{"class":82},[72,112295,615],{"class":78},[72,112297,112298],{"class":366},"\"site not found: ",[72,112300,1450],{"class":362},[72,112302,80228],{"class":82},[72,112304,1500],{"class":362},[72,112306,805],{"class":366},[72,112308,570],{"class":82},[72,112310,112311,112313],{"class":74,"line":8374},[72,112312,4518],{"class":78},[72,112314,112315],{"class":82}," data.site_xpos[site_id].copy()\n",[72,112317,112318],{"class":74,"line":8398},[72,112319,2828],{"emptyLinePlaceholder":490},[72,112321,112322],{"class":74,"line":8403},[72,112323,2828],{"emptyLinePlaceholder":490},[72,112325,112326,112328,112331],{"class":74,"line":8409},[72,112327,32365],{"class":78},[72,112329,112330],{"class":358}," get_obs",[72,112332,112333],{"class":82},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[72,112335,112336,112339,112341,112344,112346],{"class":74,"line":8436},[72,112337,112338],{"class":82},"    tip ",[72,112340,609],{"class":78},[72,112342,112343],{"class":82}," site_position(model, data, ",[72,112345,111936],{"class":366},[72,112347,570],{"class":82},[72,112349,112350,112353,112355,112357,112360],{"class":74,"line":8441},[72,112351,112352],{"class":82},"    target ",[72,112354,609],{"class":78},[72,112356,112343],{"class":82},[72,112358,112359],{"class":366},"\"target\"",[72,112361,570],{"class":82},[72,112363,112364,112366],{"class":74,"line":8447},[72,112365,4518],{"class":78},[72,112367,112368],{"class":82}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[72,112370,112371],{"class":74,"line":8459},[72,112372,2828],{"emptyLinePlaceholder":490},[72,112374,112375],{"class":74,"line":8471},[72,112376,2828],{"emptyLinePlaceholder":490},[72,112378,112379,112381,112384,112387,112389],{"class":74,"line":8483},[72,112380,32365],{"class":78},[72,112382,112383],{"class":358}," reward",[72,112385,112386],{"class":82},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[72,112388,603],{"class":362},[72,112390,4167],{"class":82},[72,112392,112393,112395,112397,112399,112401],{"class":74,"line":10142},[72,112394,112338],{"class":82},[72,112396,609],{"class":78},[72,112398,112343],{"class":82},[72,112400,111936],{"class":366},[72,112402,570],{"class":82},[72,112404,112405,112407,112409,112411,112413],{"class":74,"line":10167},[72,112406,112352],{"class":82},[72,112408,609],{"class":78},[72,112410,112343],{"class":82},[72,112412,112359],{"class":366},[72,112414,570],{"class":82},[72,112416,112417,112420,112422,112424,112426],{"class":74,"line":10190},[72,112418,112419],{"class":82},"    dist ",[72,112421,609],{"class":78},[72,112423,112001],{"class":82},[72,112425,1086],{"class":78},[72,112427,112006],{"class":82},[72,112429,112430,112433,112435,112438,112440],{"class":74,"line":10214},[72,112431,112432],{"class":82},"    control_cost ",[72,112434,609],{"class":78},[72,112436,112437],{"class":362}," 0.01",[72,112439,6944],{"class":78},[72,112441,112442],{"class":82}," np.sum(np.square(data.ctrl))\n",[72,112444,112445,112447,112449,112451,112453,112455,112457],{"class":74,"line":10219},[72,112446,4518],{"class":78},[72,112448,110197],{"class":362},[72,112450,564],{"class":82},[72,112452,1086],{"class":78},[72,112454,111996],{"class":82},[72,112456,1086],{"class":78},[72,112458,112459],{"class":82}," control_cost)\n",[72,112461,112462],{"class":74,"line":10224},[72,112463,2828],{"emptyLinePlaceholder":490},[72,112465,112466],{"class":74,"line":10229},[72,112467,2828],{"emptyLinePlaceholder":490},[72,112469,112470,112472,112474,112476,112478],{"class":74,"line":10238},[72,112471,32365],{"class":78},[72,112473,2401],{"class":358},[72,112475,101804],{"class":82},[72,112477,96103],{"class":362},[72,112479,4167],{"class":82},[72,112481,112482,112484,112486,112488,112490],{"class":74,"line":10243},[72,112483,101813],{"class":82},[72,112485,609],{"class":78},[72,112487,101818],{"class":82},[72,112489,101720],{"class":362},[72,112491,570],{"class":82},[72,112493,112494,112496,112498],{"class":74,"line":10249},[72,112495,101827],{"class":82},[72,112497,609],{"class":78},[72,112499,101832],{"class":82},[72,112501,112502,112504,112506],{"class":74,"line":10270},[72,112503,110553],{"class":82},[72,112505,609],{"class":78},[72,112507,105162],{"class":362},[72,112509,112510],{"class":74,"line":10276},[72,112511,2828],{"emptyLinePlaceholder":490},[72,112513,112514,112516,112518,112520,112522,112524,112526],{"class":74,"line":10290},[72,112515,3629],{"class":78},[72,112517,32034],{"class":82},[72,112519,26465],{"class":78},[72,112521,32861],{"class":362},[72,112523,564],{"class":82},[72,112525,65492],{"class":362},[72,112527,31204],{"class":82},[72,112529,112530],{"class":74,"line":10296},[72,112531,112532],{"class":82},"        mujoco.mj_forward(model, data)\n",[72,112534,112535,112538,112540,112542,112544],{"class":74,"line":10323},[72,112536,112537],{"class":82},"        tip ",[72,112539,609],{"class":78},[72,112541,112343],{"class":82},[72,112543,111936],{"class":366},[72,112545,570],{"class":82},[72,112547,112548,112551,112553,112555,112557],{"class":74,"line":10332},[72,112549,112550],{"class":82},"        target ",[72,112552,609],{"class":78},[72,112554,112343],{"class":82},[72,112556,112359],{"class":366},[72,112558,570],{"class":82},[72,112560,112561,112564,112566,112569,112571],{"class":74,"line":10338},[72,112562,112563],{"class":82},"        error ",[72,112565,609],{"class":78},[72,112567,112568],{"class":82}," target ",[72,112570,1086],{"class":78},[72,112572,112573],{"class":82}," tip\n",[72,112575,112576],{"class":74,"line":10346},[72,112577,2828],{"emptyLinePlaceholder":490},[72,112579,112580,112582,112584,112586,112588,112591,112593,112595,112598,112600,112603,112605,112607,112609,112611],{"class":74,"line":10351},[72,112581,107017],{"class":82},[72,112583,747],{"class":362},[72,112585,4871],{"class":82},[72,112587,609],{"class":78},[72,112589,112590],{"class":82}," np.clip(",[72,112592,105661],{"class":362},[72,112594,6944],{"class":78},[72,112596,112597],{"class":82}," error[",[72,112599,640],{"class":362},[72,112601,112602],{"class":82},"], ",[72,112604,1086],{"class":78},[72,112606,102807],{"class":362},[72,112608,12861],{"class":82},[72,112610,102807],{"class":362},[72,112612,570],{"class":82},[72,112614,112615,112617,112619,112621,112623,112625,112627,112629,112631,112633,112635,112637,112639,112641,112643],{"class":74,"line":17030},[72,112616,107017],{"class":82},[72,112618,772],{"class":362},[72,112620,4871],{"class":82},[72,112622,609],{"class":78},[72,112624,112590],{"class":82},[72,112626,105661],{"class":362},[72,112628,6944],{"class":78},[72,112630,112597],{"class":82},[72,112632,747],{"class":362},[72,112634,112602],{"class":82},[72,112636,1086],{"class":78},[72,112638,102807],{"class":362},[72,112640,12861],{"class":82},[72,112642,102807],{"class":362},[72,112644,570],{"class":82},[72,112646,112647],{"class":74,"line":17036},[72,112648,2828],{"emptyLinePlaceholder":490},[72,112650,112651],{"class":74,"line":17059},[72,112652,101922],{"class":82},[72,112654,112655,112657,112659],{"class":74,"line":17065},[72,112656,110697],{"class":82},[72,112658,9903],{"class":78},[72,112660,112661],{"class":82}," reward(model, data)\n",[72,112663,112664],{"class":74,"line":17088},[72,112665,2828],{"emptyLinePlaceholder":490},[72,112667,112668,112670,112672,112674,112676,112678,112680],{"class":74,"line":17102},[72,112669,2925],{"class":78},[72,112671,32034],{"class":82},[72,112673,882],{"class":78},[72,112675,6180],{"class":362},[72,112677,101965],{"class":78},[72,112679,4521],{"class":362},[72,112681,4167],{"class":82},[72,112683,112684,112687,112689],{"class":74,"line":17122},[72,112685,112686],{"class":82},"            obs ",[72,112688,609],{"class":78},[72,112690,112691],{"class":82}," get_obs(model, data)\n",[72,112693,112694,112696,112698,112700],{"class":74,"line":17128},[72,112695,35068],{"class":362},[72,112697,564],{"class":82},[72,112699,110731],{"class":366},[72,112701,112702],{"class":82},", step)\n",[72,112704,112705,112707,112709,112712,112715,112717],{"class":74,"line":17139},[72,112706,35068],{"class":362},[72,112708,564],{"class":82},[72,112710,112711],{"class":366},"\"  tip:\"",[72,112713,112714],{"class":82},", np.round(tip, ",[72,112716,634],{"class":362},[72,112718,30915],{"class":82},[72,112720,112721,112723,112725,112728,112731,112733],{"class":74,"line":17162},[72,112722,35068],{"class":362},[72,112724,564],{"class":82},[72,112726,112727],{"class":366},"\"  target:\"",[72,112729,112730],{"class":82},", np.round(target, ",[72,112732,634],{"class":362},[72,112734,30915],{"class":82},[72,112736,112737,112739,112741,112744,112747,112749],{"class":74,"line":17184},[72,112738,35068],{"class":362},[72,112740,564],{"class":82},[72,112742,112743],{"class":366},"\"  ctrl:\"",[72,112745,112746],{"class":82},", np.round(data.ctrl.copy(), ",[72,112748,634],{"class":362},[72,112750,30915],{"class":82},[72,112752,112753,112755,112757,112760,112763,112765],{"class":74,"line":17189},[72,112754,35068],{"class":362},[72,112756,564],{"class":82},[72,112758,112759],{"class":366},"\"  obs_dim:\"",[72,112761,112762],{"class":82},", obs.shape[",[72,112764,747],{"class":362},[72,112766,5085],{"class":82},[72,112768,112769],{"class":74,"line":17195},[72,112770,2828],{"emptyLinePlaceholder":490},[72,112772,112773,112775,112777,112779,112781,112783,112785,112787],{"class":74,"line":17209},[72,112774,31717],{"class":362},[72,112776,564],{"class":82},[72,112778,110776],{"class":366},[72,112780,12861],{"class":82},[72,112782,32436],{"class":362},[72,112784,110783],{"class":82},[72,112786,634],{"class":362},[72,112788,30915],{"class":82},[72,112790,112791,112793,112795,112798,112801,112803,112805,112807],{"class":74,"line":17222},[72,112792,31717],{"class":362},[72,112794,564],{"class":82},[72,112796,112797],{"class":366},"\"final tip:\"",[72,112799,112800],{"class":82},", np.round(site_position(model, data, ",[72,112802,111936],{"class":366},[72,112804,110745],{"class":82},[72,112806,634],{"class":362},[72,112808,30915],{"class":82},[72,112810,112811,112813,112815,112818,112820,112822,112824,112826],{"class":74,"line":17227},[72,112812,31717],{"class":362},[72,112814,564],{"class":82},[72,112816,112817],{"class":366},"\"target:\"",[72,112819,112800],{"class":82},[72,112821,112359],{"class":366},[72,112823,110745],{"class":82},[72,112825,634],{"class":362},[72,112827,30915],{"class":82},[72,112829,112830],{"class":74,"line":17241},[72,112831,2828],{"emptyLinePlaceholder":490},[72,112833,112834],{"class":74,"line":17246},[72,112835,2828],{"emptyLinePlaceholder":490},[72,112837,112838,112840,112842,112844,112846],{"class":74,"line":17252},[72,112839,1960],{"class":78},[72,112841,31638],{"class":362},[72,112843,101965],{"class":78},[72,112845,101968],{"class":366},[72,112847,4167],{"class":82},[72,112849,112850],{"class":74,"line":17257},[72,112851,101975],{"class":82},[15,112853,103974],{},[63,112855,112857],{"className":349,"code":112856,"language":351,"meta":68,"style":68},"touch ch7_reacher.py\n",[34,112858,112859],{"__ignoreMap":68},[72,112860,112861,112863],{"class":74,"line":75},[72,112862,101690],{"class":358},[72,112864,112865],{"class":366}," ch7_reacher.py\n",[15,112867,110844],{},[63,112869,112871],{"className":349,"code":112870,"language":351,"meta":68,"style":68},"python ch7_reacher.py\n",[34,112872,112873],{"__ignoreMap":68},[72,112874,112875,112877],{"class":74,"line":75},[72,112876,67],{"class":358},[72,112878,112865],{"class":366},[531,112880,101978],{"id":101978},[15,112882,112883],{},"读取 site 坐标：",[63,112885,112887],{"className":65,"code":112886,"language":67,"meta":68,"style":68},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[34,112888,112889],{"__ignoreMap":68},[72,112890,112891,112893,112895,112897,112899],{"class":74,"line":75},[72,112892,32365],{"class":78},[72,112894,112256],{"class":358},[72,112896,112259],{"class":82},[72,112898,1728],{"class":362},[72,112900,112264],{"class":82},[15,112902,112903],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[15,112905,110860],{},[63,112907,112909],{"className":65,"code":112908,"language":67,"meta":68,"style":68},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[34,112910,112911],{"__ignoreMap":68},[72,112912,112913,112915],{"class":74,"line":75},[72,112914,17472],{"class":78},[72,112916,112368],{"class":82},[15,112918,112919],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[15,112921,110185],{},[63,112923,112925],{"className":65,"code":112924,"language":67,"meta":68,"style":68},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[34,112926,112927,112939,112952],{"__ignoreMap":68},[72,112928,112929,112931,112933,112935,112937],{"class":74,"line":75},[72,112930,111996],{"class":82},[72,112932,609],{"class":78},[72,112934,112001],{"class":82},[72,112936,1086],{"class":78},[72,112938,112006],{"class":82},[72,112940,112941,112944,112946,112948,112950],{"class":74,"line":370},[72,112942,112943],{"class":82},"control_cost ",[72,112945,609],{"class":78},[72,112947,112437],{"class":362},[72,112949,6944],{"class":78},[72,112951,112442],{"class":82},[72,112953,112954,112956,112958,112960,112962,112964,112966],{"class":74,"line":1608},[72,112955,17472],{"class":78},[72,112957,110197],{"class":362},[72,112959,564],{"class":82},[72,112961,1086],{"class":78},[72,112963,111996],{"class":82},[72,112965,1086],{"class":78},[72,112967,112459],{"class":82},[15,112969,112970],{},"奖励由两部分组成：",[22,112972,112973,112978],{},[25,112974,112975,112977],{},[34,112976,112023],{},"：末端离目标越远，奖励越低。",[25,112979,112980,112983],{},[34,112981,112982],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[15,112985,112986],{},"简单控制器：",[63,112988,112990],{"className":65,"code":112989,"language":67,"meta":68,"style":68},"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",[34,112991,112992,113005,113037],{"__ignoreMap":68},[72,112993,112994,112997,112999,113001,113003],{"class":74,"line":75},[72,112995,112996],{"class":82},"error ",[72,112998,609],{"class":78},[72,113000,112568],{"class":82},[72,113002,1086],{"class":78},[72,113004,112573],{"class":82},[72,113006,113007,113009,113011,113013,113015,113017,113019,113021,113023,113025,113027,113029,113031,113033,113035],{"class":74,"line":370},[72,113008,106271],{"class":82},[72,113010,747],{"class":362},[72,113012,4871],{"class":82},[72,113014,609],{"class":78},[72,113016,112590],{"class":82},[72,113018,105661],{"class":362},[72,113020,6944],{"class":78},[72,113022,112597],{"class":82},[72,113024,640],{"class":362},[72,113026,112602],{"class":82},[72,113028,1086],{"class":78},[72,113030,102807],{"class":362},[72,113032,12861],{"class":82},[72,113034,102807],{"class":362},[72,113036,570],{"class":82},[72,113038,113039,113041,113043,113045,113047,113049,113051,113053,113055,113057,113059,113061,113063,113065,113067],{"class":74,"line":1608},[72,113040,106271],{"class":82},[72,113042,772],{"class":362},[72,113044,4871],{"class":82},[72,113046,609],{"class":78},[72,113048,112590],{"class":82},[72,113050,105661],{"class":362},[72,113052,6944],{"class":78},[72,113054,112597],{"class":82},[72,113056,747],{"class":362},[72,113058,112602],{"class":82},[72,113060,1086],{"class":78},[72,113062,102807],{"class":362},[72,113064,12861],{"class":82},[72,113066,102807],{"class":362},[72,113068,570],{"class":82},[15,113070,113071],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[531,113073,102113],{"id":102113},[63,113075,113076],{"className":65,"code":112886,"language":67,"meta":68,"style":68},[34,113077,113078],{"__ignoreMap":68},[72,113079,113080,113082,113084,113086,113088],{"class":74,"line":75},[72,113081,32365],{"class":78},[72,113083,112256],{"class":358},[72,113085,112259],{"class":82},[72,113087,1728],{"class":362},[72,113089,112264],{"class":82},[15,113091,113092,113093,113095,113096,462,113098,28807],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[34,113094,80228],{}," 是 site 的名字，比如 ",[34,113097,111936],{},[34,113099,112359],{},[63,113101,113103],{"className":65,"code":113102,"language":67,"meta":68,"style":68},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[34,113104,113105],{"__ignoreMap":68},[72,113106,113107,113109,113111],{"class":74,"line":75},[72,113108,104038],{"class":82},[72,113110,609],{"class":78},[72,113112,112273],{"class":82},[15,113114,113115],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[63,113117,113119],{"className":65,"code":113118,"language":67,"meta":68,"style":68},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[34,113120,113121,113133],{"__ignoreMap":68},[72,113122,113123,113125,113127,113129,113131],{"class":74,"line":75},[72,113124,1960],{"class":78},[72,113126,103853],{"class":82},[72,113128,1464],{"class":78},[72,113130,4521],{"class":362},[72,113132,4167],{"class":82},[72,113134,113135,113137,113139,113141,113143,113145,113147,113149,113151,113153],{"class":74,"line":370},[72,113136,104299],{"class":78},[72,113138,103839],{"class":362},[72,113140,564],{"class":82},[72,113142,615],{"class":78},[72,113144,112298],{"class":366},[72,113146,1450],{"class":362},[72,113148,80228],{"class":82},[72,113150,1500],{"class":362},[72,113152,805],{"class":366},[72,113154,570],{"class":82},[15,113156,113157,113158,113161,113162,113164],{},"如果 site 没找到，就主动报错。",[34,113159,113160],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[34,113163,80228],{}," 的值放进字符串里。",[63,113166,113168],{"className":65,"code":113167,"language":67,"meta":68,"style":68},"return data.site_xpos[site_id].copy()\n",[34,113169,113170],{"__ignoreMap":68},[72,113171,113172,113174],{"class":74,"line":75},[72,113173,17472],{"class":78},[72,113175,112315],{"class":82},[15,113177,113178,113179,113181,113182,113185],{},"返回这个 site 的世界坐标。",[34,113180,104084],{}," 里的每一行都是一个 site 的 ",[34,113183,113184],{},"(x, y, z)"," 坐标。",[63,113187,113189],{"className":65,"code":113188,"language":67,"meta":68,"style":68},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[34,113190,113191],{"__ignoreMap":68},[72,113192,113193,113195,113197],{"class":74,"line":75},[72,113194,32365],{"class":78},[72,113196,112330],{"class":358},[72,113198,112333],{"class":82},[15,113200,113201],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[63,113203,113205],{"className":65,"code":113204,"language":67,"meta":68,"style":68},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[34,113206,113207,113219],{"__ignoreMap":68},[72,113208,113209,113211,113213,113215,113217],{"class":74,"line":75},[72,113210,111968],{"class":82},[72,113212,609],{"class":78},[72,113214,112343],{"class":82},[72,113216,111936],{"class":366},[72,113218,570],{"class":82},[72,113220,113221,113223,113225,113227,113229],{"class":74,"line":370},[72,113222,111978],{"class":82},[72,113224,609],{"class":78},[72,113226,112343],{"class":82},[72,113228,112359],{"class":366},[72,113230,570],{"class":82},[15,113232,113233],{},"分别读取末端点和目标点的世界坐标。",[63,113235,113236],{"className":65,"code":112908,"language":67,"meta":68,"style":68},[34,113237,113238],{"__ignoreMap":68},[72,113239,113240,113242],{"class":74,"line":75},[72,113241,17472],{"class":78},[72,113243,112368],{"class":82},[15,113245,113246],{},"把四部分拼成一个观测数组：",[63,113248,113251],{"className":113249,"code":113250,"language":127,"meta":68},[125],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[34,113252,113250],{"__ignoreMap":68},[63,113254,113256],{"className":65,"code":113255,"language":67,"meta":68,"style":68},"dist = np.linalg.norm(tip - target)\n",[34,113257,113258],{"__ignoreMap":68},[72,113259,113260,113262,113264,113266,113268],{"class":74,"line":75},[72,113261,111996],{"class":82},[72,113263,609],{"class":78},[72,113265,112001],{"class":82},[72,113267,1086],{"class":78},[72,113269,112006],{"class":82},[15,113271,113272,113273,113276,113277,113280],{},"计算 tip 到 target 的距离。",[34,113274,113275],{},"tip - target"," 得到一个三维向量，",[34,113278,113279],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[15,113282,15059],{},[63,113284,113287],{"className":113285,"code":113286,"language":127,"meta":68},[125],"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",[34,113288,113286],{"__ignoreMap":68},[63,113290,113292],{"className":65,"code":113291,"language":67,"meta":68,"style":68},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[34,113293,113294],{"__ignoreMap":68},[72,113295,113296,113298,113300,113302,113304],{"class":74,"line":75},[72,113297,112943],{"class":82},[72,113299,609],{"class":78},[72,113301,112437],{"class":362},[72,113303,6944],{"class":78},[72,113305,112442],{"class":82},[15,113307,113308,113309,113312,113313,113316],{},"计算动作惩罚。",[34,113310,113311],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[34,113314,113315],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[63,113318,113320],{"className":65,"code":113319,"language":67,"meta":68,"style":68},"return float(-dist - control_cost)\n",[34,113321,113322],{"__ignoreMap":68},[72,113323,113324,113326,113328,113330,113332,113334,113336],{"class":74,"line":75},[72,113325,17472],{"class":78},[72,113327,110197],{"class":362},[72,113329,564],{"class":82},[72,113331,1086],{"class":78},[72,113333,111996],{"class":82},[72,113335,1086],{"class":78},[72,113337,112459],{"class":82},[15,113339,113340],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[63,113342,113343],{"className":65,"code":111203,"language":67,"meta":68,"style":68},[34,113344,113345],{"__ignoreMap":68},[72,113346,113347,113349,113351],{"class":74,"line":75},[72,113348,111210],{"class":82},[72,113350,609],{"class":78},[72,113352,105162],{"class":362},[15,113354,113355],{},"累计奖励变量，记录整个运行过程的总分。",[63,113357,113359],{"className":65,"code":113358,"language":67,"meta":68,"style":68},"for step in range(500):\n",[34,113360,113361],{"__ignoreMap":68},[72,113362,113363,113365,113367,113369,113371,113373,113375],{"class":74,"line":75},[72,113364,3453],{"class":78},[72,113366,32034],{"class":82},[72,113368,26465],{"class":78},[72,113370,32861],{"class":362},[72,113372,564],{"class":82},[72,113374,65492],{"class":362},[72,113376,31204],{"class":82},[15,113378,113379],{},"运行 500 个控制步。",[63,113381,113382],{"className":65,"code":104944,"language":67,"meta":68,"style":68},[34,113383,113384],{"__ignoreMap":68},[72,113385,113386],{"class":74,"line":75},[72,113387,104944],{"class":82},[15,113389,113390,113391,101432,113393,113395],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[34,113392,103635],{},[34,113394,103638],{}," 是当前状态下的坐标。",[63,113397,113399],{"className":65,"code":113398,"language":67,"meta":68,"style":68},"error = target - tip\n",[34,113400,113401],{"__ignoreMap":68},[72,113402,113403,113405,113407,113409,113411],{"class":74,"line":75},[72,113404,112996],{"class":82},[72,113406,609],{"class":78},[72,113408,112568],{"class":82},[72,113410,1086],{"class":78},[72,113412,112573],{"class":82},[15,113414,113415],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[63,113417,113419],{"className":65,"code":113418,"language":67,"meta":68,"style":68},"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",[34,113420,113421,113453],{"__ignoreMap":68},[72,113422,113423,113425,113427,113429,113431,113433,113435,113437,113439,113441,113443,113445,113447,113449,113451],{"class":74,"line":75},[72,113424,106271],{"class":82},[72,113426,747],{"class":362},[72,113428,4871],{"class":82},[72,113430,609],{"class":78},[72,113432,112590],{"class":82},[72,113434,105661],{"class":362},[72,113436,6944],{"class":78},[72,113438,112597],{"class":82},[72,113440,640],{"class":362},[72,113442,112602],{"class":82},[72,113444,1086],{"class":78},[72,113446,102807],{"class":362},[72,113448,12861],{"class":82},[72,113450,102807],{"class":362},[72,113452,570],{"class":82},[72,113454,113455,113457,113459,113461,113463,113465,113467,113469,113471,113473,113475,113477,113479,113481,113483],{"class":74,"line":370},[72,113456,106271],{"class":82},[72,113458,772],{"class":362},[72,113460,4871],{"class":82},[72,113462,609],{"class":78},[72,113464,112590],{"class":82},[72,113466,105661],{"class":362},[72,113468,6944],{"class":78},[72,113470,112597],{"class":82},[72,113472,747],{"class":362},[72,113474,112602],{"class":82},[72,113476,1086],{"class":78},[72,113478,102807],{"class":362},[72,113480,12861],{"class":82},[72,113482,102807],{"class":362},[72,113484,570],{"class":82},[15,113486,113487,113488,113491],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[34,113489,113490],{},"error -> ctrl -> step"," 的流程。",[63,113493,113494],{"className":65,"code":104906,"language":67,"meta":68,"style":68},[34,113495,113496],{"__ignoreMap":68},[72,113497,113498],{"class":74,"line":75},[72,113499,104906],{"class":82},[15,113501,113502],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[63,113504,113506],{"className":65,"code":113505,"language":67,"meta":68,"style":68},"obs = get_obs(model, data)\n",[34,113507,113508],{"__ignoreMap":68},[72,113509,113510,113512,113514],{"class":74,"line":75},[72,113511,111254],{"class":82},[72,113513,609],{"class":78},[72,113515,112691],{"class":82},[15,113517,113518,113519,113522],{},"读取最新观测。后面打印 ",[34,113520,113521],{},"obs.shape[0]","，用来确认观测维度是 10。",[85,113524,102720],{"id":102719},[15,113526,113527],{},"观测维度为:",[63,113529,113532],{"className":113530,"code":113531,"language":127,"meta":68},[125],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[34,113533,113531],{"__ignoreMap":68},[15,113535,113536],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[15,113538,113539],{},"程序每 100 步打印：",[63,113541,113544],{"className":113542,"code":113543,"language":127,"meta":68},[125],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[34,113545,113543],{"__ignoreMap":68},[15,113547,113548,113549,113551],{},"如果控制有效，你应该看到最终 ",[34,113550,103635],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[85,113553,102752],{"id":102751},[22,113555,113556,113559,113562,113568,113574,113581,113591],{},[25,113557,113558],{},"修改目标点位置。",[25,113560,113561],{},"重新运行，观察最终 tip 是否变化。",[25,113563,113564,113565,113567],{},"把 gravity 改成 ",[34,113566,102993],{},"，观察控制是否变差。",[25,113569,111581,113570,111585,113572,28807],{},[34,113571,456],{},[34,113573,640],{},[25,113575,102815,113576,102818,113578,113580],{},[34,113577,110996],{},[34,113579,107707],{},"，观察机械臂是否更难移动。",[25,113582,102815,113583,82948,113585,102818,113587,113590],{},[34,113584,103638],{},[34,113586,104549],{},[34,113588,113589],{},"0.2 0 0.6","，观察 reward 和 final tip。",[25,113592,113593],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[85,113595,102857],{"id":102856},[531,113597,113599],{"id":113598},"site-not-found",[34,113600,113601],{},"site not found",[15,113603,113604,113605,101432,113608,28807],{},"检查 XML 中是否有 ",[34,113606,113607],{},"site name=\"tip\"",[34,113609,113610],{},"site name=\"target\"",[531,113612,113613],{"id":113613},"机械臂完全不动",[15,113615,102927],{},[22,113617,113618,113623,113626,113631],{},[25,113619,113620,113622],{},[34,113621,456],{}," 是否为 2",[25,113624,113625],{},"actuator 是否引用正确 joint",[25,113627,113628,113630],{},[34,113629,452],{}," 是否被赋值",[25,113632,113633,113634],{},"是否执行了 ",[34,113635,101102],{},[531,113637,113638],{"id":113638},"控制效果不好",[15,113640,113641],{},"正常。本章重点不是控制器最优，而是任务结构:",[63,113643,113646],{"className":113644,"code":113645,"language":127,"meta":68},[125],"obs → action → mj_step → reward → next_obs\n",[34,113647,113645],{"__ignoreMap":68},[531,113649,113651],{"id":113650},"tip-坐标不变化","tip 坐标不变化",[15,113653,102979],{},[22,113655,113656,113661,113669,113678],{},[25,113657,113658,113659,28807],{},"是否每步调用了 ",[34,113660,101102],{},[25,113662,113663,113664,101432,113666,28807],{},"是否写入了 ",[34,113665,106526],{},[34,113667,113668],{},"data.ctrl[1]",[25,113670,113671,113672,37,113675,28807],{},"actuator 是否正确引用 ",[34,113673,113674],{},"joint1",[34,113676,113677],{},"joint2",[25,113679,113680],{},"控制输入是否太小。",[531,113682,113683],{"id":113683},"目标点不会动",[15,113685,113686],{},"本章的 target 是固定 site：",[63,113688,113690],{"className":53485,"code":113689,"language":53487,"meta":68,"style":68},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[34,113691,113692],{"__ignoreMap":68},[72,113693,113694,113696,113698,113700,113702,113704,113706,113708,113711],{"class":74,"line":75},[72,113695,1464],{"class":82},[72,113697,103614],{"class":51718},[72,113699,15346],{"class":358},[72,113701,609],{"class":82},[72,113703,112359],{"class":366},[72,113705,101517],{"class":358},[72,113707,609],{"class":82},[72,113709,113710],{"class":366},"\"0.5 0 0.4\"",[72,113712,113713],{"class":82}," ...\u002F>\n",[15,113715,113716,113717,113719],{},"它直接挂在 ",[34,113718,102246],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[531,113721,113722],{"id":113722},"机械臂不像真实机械臂",[15,113724,113725],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[85,113727,103011],{"id":103010},[15,113729,113730],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[15,113732,113733],{},"核心公式：",[63,113735,113738],{"className":113736,"code":113737,"language":127,"meta":68},[125],"distance = ||tip - target||\nreward = -distance - action_cost\n",[34,113739,113737],{"__ignoreMap":68},[15,113741,113742],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[473,113744,113745],{},"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":68,"searchDepth":370,"depth":370,"links":113747},[113748,113749,113750,113755,113759,113760,113761,113769],{"id":101063,"depth":370,"text":101064},{"id":101184,"depth":370,"text":101185},{"id":101456,"depth":370,"text":101457,"children":113751},[113752,113753,113754],{"id":111951,"depth":1608,"text":111952},{"id":112027,"depth":1608,"text":112027},{"id":112057,"depth":1608,"text":112058},{"id":101662,"depth":370,"text":101663,"children":113756},[113757,113758],{"id":101978,"depth":1608,"text":101978},{"id":102113,"depth":1608,"text":102113},{"id":102719,"depth":370,"text":102720},{"id":102751,"depth":370,"text":102752},{"id":102856,"depth":370,"text":102857,"children":113762},[113763,113764,113765,113766,113767,113768],{"id":113598,"depth":1608,"text":113601},{"id":113613,"depth":1608,"text":113613},{"id":113638,"depth":1608,"text":113638},{"id":113650,"depth":1608,"text":113651},{"id":113683,"depth":1608,"text":113683},{"id":113722,"depth":1608,"text":113722},{"id":103010,"depth":370,"text":103011},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111755,"description":68},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113776,"title":113777,"body":113778,"description":68,"extension":487,"meta":117240,"navigation":490,"path":117241,"seo":117242,"stem":117243,"__hash__":117244},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113779,"toc":117211},[113780,113783,113785,113788,113791,113816,113819,113825,113828,113834,113836,113838,113862,113864,113882,113884,113927,113929,113956,113958,113961,114013,114016,114022,114031,114034,114072,114075,114114,114117,114125,114132,114135,114141,114143,114197,114204,114249,114252,114256,114272,114282,114284,115545,115547,115559,115561,115572,115574,115577,115598,115601,115604,115637,115643,115646,115679,115682,115685,115726,115731,115745,115748,115761,115766,115789,115791,115806,115816,115831,115838,115858,115873,115891,115894,115911,115919,115935,115941,115973,115986,116018,116028,116063,116077,116123,116137,116179,116190,116203,116209,116242,116245,116272,116282,116322,116332,116349,116356,116374,116377,116418,116431,116446,116449,116472,116475,116487,116490,116509,116514,116535,116538,116553,116556,116590,116602,116617,116620,116645,116648,116667,116670,116702,116705,116729,116735,116765,116772,116785,116788,116790,116792,116798,116801,116804,116816,116819,116821,116875,116877,116881,116887,116896,116899,116906,116908,116931,116934,116938,116940,116958,116964,116966,116999,117002,117008,117012,117015,117035,117040,117044,117051,117071,117076,117080,117083,117103,117106,117192,117196,117199,117205,117208],[10,113781,113777],{"id":113782},"_8gymnasium-风格强化学习接口基础",[85,113784,101064],{"id":101063},[15,113786,113787],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[15,113789,113790],{},"你将实现:",[63,113792,113794],{"className":65,"code":113793,"language":67,"meta":68,"style":68},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[34,113795,113796,113806],{"__ignoreMap":68},[72,113797,113798,113801,113803],{"class":74,"line":75},[72,113799,113800],{"class":82},"obs, info ",[72,113802,609],{"class":78},[72,113804,113805],{"class":82}," env.reset()\n",[72,113807,113808,113811,113813],{"class":74,"line":370},[72,113809,113810],{"class":82},"obs, reward, terminated, truncated, info ",[72,113812,609],{"class":78},[72,113814,113815],{"class":82}," env.step(action)\n",[15,113817,113818],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[15,113820,113821,113822,113824],{},"前面章节的代码都是“脚本式”的：在 ",[34,113823,102699],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[15,113826,113827],{},"可以先记住 Gymnasium 环境的核心交互：",[63,113829,113832],{"className":113830,"code":113831,"language":127,"meta":68},[125],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[34,113833,113831],{"__ignoreMap":68},[85,113835,101185],{"id":101184},[15,113837,101188],{},[63,113839,113840],{"className":349,"code":104789,"language":351,"meta":68,"style":68},[34,113841,113842],{"__ignoreMap":68},[72,113843,113844,113846,113848,113850,113852,113854,113856,113858,113860],{"class":74,"line":75},[72,113845,24998],{"class":358},[72,113847,26737],{"class":366},[72,113849,24256],{"class":366},[72,113851,26822],{"class":362},[72,113853,104804],{"class":366},[72,113855,101213],{"class":366},[72,113857,102905],{"class":366},[72,113859,101229],{"class":366},[72,113861,104813],{"class":366},[15,113863,103223],{},[63,113865,113867],{"className":349,"code":113866,"language":351,"meta":68,"style":68},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[34,113868,113869],{"__ignoreMap":68},[72,113870,113871,113873,113875,113877,113879],{"class":74,"line":75},[72,113872,24253],{"class":358},[72,113874,24256],{"class":366},[72,113876,101345],{"class":366},[72,113878,108111],{"class":366},[72,113880,113881],{"class":366}," gymnasium\n",[15,113883,103240],{},[63,113885,113887],{"className":349,"code":113886,"language":351,"meta":68,"style":68},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[34,113888,113889,113906,113915],{"__ignoreMap":68},[72,113890,113891,113893,113895,113897,113900,113902,113904],{"class":74,"line":75},[72,113892,30751],{"class":358},[72,113894,29598],{"class":366},[72,113896,25537],{"class":362},[72,113898,113899],{"class":366}," mujoco-gym-api",[72,113901,101390],{"class":366},[72,113903,101393],{"class":362},[72,113905,101396],{"class":362},[72,113907,113908,113910,113912],{"class":74,"line":370},[72,113909,30751],{"class":358},[72,113911,101403],{"class":366},[72,113913,113914],{"class":366}," mujoco-gym-api\n",[72,113916,113917,113919,113921,113923,113925],{"class":74,"line":1608},[72,113918,24253],{"class":358},[72,113920,24256],{"class":366},[72,113922,101345],{"class":366},[72,113924,108111],{"class":366},[72,113926,113881],{"class":366},[15,113928,101419],{},[22,113930,113931,113941,113944,113950],{},[25,113932,113933,113934,113937,113938,28807],{},"本章使用 ",[34,113935,113936],{},"gymnasium","，不是旧版 ",[34,113939,113940],{},"gym",[25,113942,113943],{},"Gymnasium API 与旧 Gym API 有差异。",[25,113945,113946,113947,28807],{},"旧 Gym 常见返回值是 4 个: ",[34,113948,113949],{},"obs, reward, done, info",[25,113951,113952,113953,28807],{},"Gymnasium 返回值是 5 个: ",[34,113954,113955],{},"obs, reward, terminated, truncated, info",[85,113957,101457],{"id":101456},[15,113959,113960],{},"强化学习环境接口包含:",[154,113962,113963,113972],{},[157,113964,113965],{},[160,113966,113967,113970],{},[163,113968,113969],{"align":165},"方法",[163,113971,103100],{"align":165},[174,113973,113974,113984,113994,114004],{},[160,113975,113976,113981],{},[179,113977,113978],{"align":165},[34,113979,113980],{},"reset()",[179,113982,113983],{"align":165},"重置环境",[160,113985,113986,113991],{},[179,113987,113988],{"align":165},[34,113989,113990],{},"step(action)",[179,113992,113993],{"align":165},"执行动作",[160,113995,113996,114001],{},[179,113997,113998],{"align":165},[34,113999,114000],{},"observation_space",[179,114002,114003],{"align":165},"观测空间",[160,114005,114006,114011],{},[179,114007,114008],{"align":165},[34,114009,114010],{},"action_space",[179,114012,24079],{"align":165},[15,114014,114015],{},"一个最小环境需要完成:",[63,114017,114020],{"className":114018,"code":114019,"language":127,"meta":68},[125],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[34,114021,114019],{"__ignoreMap":68},[531,114023,114025,101432,114028,105039],{"id":114024},"terminated-和-truncated-的区别",[34,114026,114027],{},"terminated",[34,114029,114030],{},"truncated",[15,114032,114033],{},"Gymnasium 把“结束”拆成两个概念：",[154,114035,114036,114046],{},[157,114037,114038],{},[160,114039,114040,114042,114044],{},[163,114041,104975],{"align":165},[163,114043,101117],{"align":165},[163,114045,172],{"align":165},[174,114047,114048,114060],{},[160,114049,114050,114054,114057],{},[179,114051,114052],{"align":165},[34,114053,114027],{},[179,114055,114056],{"align":165},"任务自然结束",[179,114058,114059],{"align":165},"机械臂到达目标、机器人摔倒",[160,114061,114062,114066,114069],{},[179,114063,114064],{"align":165},[34,114065,114030],{},[179,114067,114068],{"align":165},"因外部限制截断",[179,114070,114071],{"align":165},"达到最大步数、时间限制",[15,114073,114074],{},"本章中：",[63,114076,114078],{"className":65,"code":114077,"language":67,"meta":68,"style":68},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[34,114079,114080,114095],{"__ignoreMap":68},[72,114081,114082,114085,114087,114090,114092],{"class":74,"line":75},[72,114083,114084],{"class":82},"terminated ",[72,114086,609],{"class":78},[72,114088,114089],{"class":82}," dist ",[72,114091,1464],{"class":78},[72,114093,114094],{"class":362}," 0.05\n",[72,114096,114097,114100,114102,114104,114107,114109,114111],{"class":74,"line":370},[72,114098,114099],{"class":82},"truncated ",[72,114101,609],{"class":78},[72,114103,39291],{"class":362},[72,114105,114106],{"class":82},".steps ",[72,114108,2139],{"class":78},[72,114110,39291],{"class":362},[72,114112,114113],{"class":82},".max_steps\n",[15,114115,114116],{},"也就是：",[22,114118,114119,114122],{},[25,114120,114121],{},"末端距离目标小于 0.05，任务成功结束。",[25,114123,114124],{},"步数超过上限，episode 被截断。",[531,114126,114128,101432,114130],{"id":114127},"observation_space-和-action_space",[34,114129,114000],{},[34,114131,114010],{},[15,114133,114134],{},"这两个对象告诉算法：",[63,114136,114139],{"className":114137,"code":114138,"language":127,"meta":68},[125],"观测长什么样\n动作允许多大\n",[34,114140,114138],{"__ignoreMap":68},[15,114142,15059],{},[63,114144,114146],{"className":65,"code":114145,"language":67,"meta":68,"style":68},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[34,114147,114148],{"__ignoreMap":68},[72,114149,114150,114152,114155,114157,114160,114163,114166,114168,114170,114173,114175,114177,114179,114181,114183,114185,114187,114190,114192,114194],{"class":74,"line":75},[72,114151,31241],{"class":362},[72,114153,114154],{"class":82},".action_space ",[72,114156,609],{"class":78},[72,114158,114159],{"class":82}," spaces.Box(",[72,114161,114162],{"class":5642},"low",[72,114164,114165],{"class":78},"=-",[72,114167,102807],{"class":362},[72,114169,12861],{"class":82},[72,114171,114172],{"class":5642},"high",[72,114174,609],{"class":78},[72,114176,102807],{"class":362},[72,114178,12861],{"class":82},[72,114180,96380],{"class":5642},[72,114182,609],{"class":78},[72,114184,564],{"class":82},[72,114186,640],{"class":362},[72,114188,114189],{"class":82},",), ",[72,114191,93917],{"class":5642},[72,114193,609],{"class":78},[72,114195,114196],{"class":82},"np.float32)\n",[15,114198,114199,114200,114203],{},"表示动作是 2 维数组，每个值都在 ",[34,114201,114202],{},"[-1, 1]"," 范围内。",[63,114205,114207],{"className":65,"code":114206,"language":67,"meta":68,"style":68},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[34,114208,114209],{"__ignoreMap":68},[72,114210,114211,114213,114216,114218,114220,114222,114224,114227,114229,114231,114233,114235,114237,114239,114241,114243,114245,114247],{"class":74,"line":75},[72,114212,31241],{"class":362},[72,114214,114215],{"class":82},".observation_space ",[72,114217,609],{"class":78},[72,114219,114159],{"class":82},[72,114221,114162],{"class":5642},[72,114223,114165],{"class":78},[72,114225,114226],{"class":82},"np.inf, ",[72,114228,114172],{"class":5642},[72,114230,609],{"class":78},[72,114232,114226],{"class":82},[72,114234,96380],{"class":5642},[72,114236,609],{"class":78},[72,114238,564],{"class":82},[72,114240,1000],{"class":362},[72,114242,114189],{"class":82},[72,114244,93917],{"class":5642},[72,114246,609],{"class":78},[72,114248,114196],{"class":82},[15,114250,114251],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[531,114253,114255],{"id":114254},"frame_skip-是什么","frame_skip 是什么",[63,114257,114259],{"className":65,"code":114258,"language":67,"meta":68,"style":68},"self.frame_skip = 5\n",[34,114260,114261],{"__ignoreMap":68},[72,114262,114263,114265,114268,114270],{"class":74,"line":75},[72,114264,31241],{"class":362},[72,114266,114267],{"class":82},".frame_skip ",[72,114269,609],{"class":78},[72,114271,54845],{"class":362},[15,114273,114274,114275,114278,114279,114281],{},"表示外部调用一次 ",[34,114276,114277],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[34,114280,220],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[85,114283,101663],{"id":101662},[63,114285,114287],{"className":65,"code":114286,"language":67,"meta":68,"style":68},"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",[34,114288,114289,114301,114307,114317,114328,114332,114336,114344,114349,114353,114357,114361,114365,114369,114373,114377,114382,114386,114390,114394,114399,114403,114407,114411,114415,114419,114423,114427,114431,114435,114439,114443,114447,114451,114469,114484,114488,114501,114511,114526,114543,114547,114568,114587,114612,114626,114630,114640,114652,114662,114666,114708,114746,114750,114760,114776,114791,114810,114817,114821,114834,114849,114864,114877,114896,114912,114916,114957,114972,114987,114991,115030,115041,115054,115058,115068,115077,115081,115091,115106,115124,115128,115139,115156,115169,115173,115183,115187,115198,115209,115213,115227,115241,115257,115261,115274,115291,115306,115313,115317,115321,115333,115343,115361,115373,115385,115389,115397,115413,115422,115431,115439,115481,115494,115499,115503,115521,115525,115529,115541],{"__ignoreMap":68},[72,114290,114291,114293,114296,114298],{"class":74,"line":75},[72,114292,79],{"class":78},[72,114294,114295],{"class":82}," gymnasium ",[72,114297,31801],{"class":78},[72,114299,114300],{"class":82}," gym\n",[72,114302,114303,114305],{"class":74,"line":370},[72,114304,79],{"class":78},[72,114306,83],{"class":82},[72,114308,114309,114311,114313,114315],{"class":74,"line":1608},[72,114310,79],{"class":78},[72,114312,31798],{"class":82},[72,114314,31801],{"class":78},[72,114316,31804],{"class":82},[72,114318,114319,114321,114323,114325],{"class":74,"line":1623},[72,114320,31155],{"class":78},[72,114322,114295],{"class":82},[72,114324,79],{"class":78},[72,114326,114327],{"class":82}," spaces\n",[72,114329,114330],{"class":74,"line":1629},[72,114331,2828],{"emptyLinePlaceholder":490},[72,114333,114334],{"class":74,"line":1643},[72,114335,2828],{"emptyLinePlaceholder":490},[72,114337,114338,114340,114342],{"class":74,"line":1649},[72,114339,101720],{"class":362},[72,114341,13990],{"class":78},[72,114343,101725],{"class":366},[72,114345,114346],{"class":74,"line":1740},[72,114347,114348],{"class":366},"\u003Cmujoco model=\"gym_reacher\">\n",[72,114350,114351],{"class":74,"line":1746},[72,114352,112138],{"class":366},[72,114354,114355],{"class":74,"line":1758},[72,114356,2828],{"emptyLinePlaceholder":490},[72,114358,114359],{"class":74,"line":2041},[72,114360,101744],{"class":366},[72,114362,114363],{"class":74,"line":2046},[72,114364,112156],{"class":366},[72,114366,114367],{"class":74,"line":2052},[72,114368,2828],{"emptyLinePlaceholder":490},[72,114370,114371],{"class":74,"line":2057},[72,114372,112165],{"class":366},[72,114374,114375],{"class":74,"line":2071},[72,114376,112170],{"class":366},[72,114378,114379],{"class":74,"line":2076},[72,114380,114381],{"class":366},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[72,114383,114384],{"class":74,"line":2082},[72,114385,2828],{"emptyLinePlaceholder":490},[72,114387,114388],{"class":74,"line":2103},[72,114389,112184],{"class":366},[72,114391,114392],{"class":74,"line":2108},[72,114393,112189],{"class":366},[72,114395,114396],{"class":74,"line":2122},[72,114397,114398],{"class":366},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[72,114400,114401],{"class":74,"line":2127},[72,114402,112199],{"class":366},[72,114404,114405],{"class":74,"line":2156},[72,114406,106838],{"class":366},[72,114408,114409],{"class":74,"line":2161},[72,114410,101773],{"class":366},[72,114412,114413],{"class":74,"line":2178},[72,114414,101778],{"class":366},[72,114416,114417],{"class":74,"line":2183},[72,114418,2828],{"emptyLinePlaceholder":490},[72,114420,114421],{"class":74,"line":2188},[72,114422,106855],{"class":366},[72,114424,114425],{"class":74,"line":2193},[72,114426,112224],{"class":366},[72,114428,114429],{"class":74,"line":2207},[72,114430,112229],{"class":366},[72,114432,114433],{"class":74,"line":2212},[72,114434,106865],{"class":366},[72,114436,114437],{"class":74,"line":3005},[72,114438,101783],{"class":366},[72,114440,114441],{"class":74,"line":3019},[72,114442,96115],{"class":366},[72,114444,114445],{"class":74,"line":3027},[72,114446,2828],{"emptyLinePlaceholder":490},[72,114448,114449],{"class":74,"line":3032},[72,114450,2828],{"emptyLinePlaceholder":490},[72,114452,114453,114455,114458,114460,114462,114464,114467],{"class":74,"line":3038},[72,114454,15120],{"class":78},[72,114456,114457],{"class":358}," ReacherEnv",[72,114459,564],{"class":82},[72,114461,113940],{"class":358},[72,114463,1112],{"class":82},[72,114465,114466],{"class":358},"Env",[72,114468,31204],{"class":82},[72,114470,114471,114474,114476,114478,114481],{"class":74,"line":3044},[72,114472,114473],{"class":82},"    metadata ",[72,114475,609],{"class":78},[72,114477,4876],{"class":82},[72,114479,114480],{"class":366},"\"render_modes\"",[72,114482,114483],{"class":82},": []}\n",[72,114485,114486],{"class":74,"line":3049},[72,114487,2828],{"emptyLinePlaceholder":490},[72,114489,114490,114492,114494,114497,114499],{"class":74,"line":8374},[72,114491,31219],{"class":78},[72,114493,31222],{"class":362},[72,114495,114496],{"class":82},"(self) -> ",[72,114498,96103],{"class":362},[72,114500,4167],{"class":82},[72,114502,114503,114505,114507,114509],{"class":74,"line":8398},[72,114504,31235],{"class":362},[72,114506,17687],{"class":82},[72,114508,31247],{"class":362},[72,114510,2404],{"class":82},[72,114512,114513,114515,114518,114520,114522,114524],{"class":74,"line":8403},[72,114514,31263],{"class":362},[72,114516,114517],{"class":82},".model ",[72,114519,609],{"class":78},[72,114521,101818],{"class":82},[72,114523,101720],{"class":362},[72,114525,570],{"class":82},[72,114527,114528,114530,114533,114535,114538,114540],{"class":74,"line":8409},[72,114529,31263],{"class":362},[72,114531,114532],{"class":82},".data ",[72,114534,609],{"class":78},[72,114536,114537],{"class":82}," mujoco.MjData(",[72,114539,31241],{"class":362},[72,114541,114542],{"class":82},".model)\n",[72,114544,114545],{"class":74,"line":8436},[72,114546,2828],{"emptyLinePlaceholder":490},[72,114548,114549,114551,114554,114556,114559,114561,114564,114566],{"class":74,"line":8441},[72,114550,31263],{"class":362},[72,114552,114553],{"class":82},".tip_site_id ",[72,114555,609],{"class":78},[72,114557,114558],{"class":82}," mujoco.mj_name2id(",[72,114560,31241],{"class":362},[72,114562,114563],{"class":82},".model, mujoco.mjtObj.mjOBJ_SITE, ",[72,114565,111936],{"class":366},[72,114567,570],{"class":82},[72,114569,114570,114572,114575,114577,114579,114581,114583,114585],{"class":74,"line":8447},[72,114571,31263],{"class":362},[72,114573,114574],{"class":82},".target_site_id ",[72,114576,609],{"class":78},[72,114578,114558],{"class":82},[72,114580,31241],{"class":362},[72,114582,114563],{"class":82},[72,114584,112359],{"class":366},[72,114586,570],{"class":82},[72,114588,114589,114591,114593,114595,114597,114599,114602,114604,114606,114608,114610],{"class":74,"line":8459},[72,114590,2925],{"class":78},[72,114592,39291],{"class":362},[72,114594,114553],{"class":82},[72,114596,1464],{"class":78},[72,114598,4521],{"class":362},[72,114600,114601],{"class":78}," or",[72,114603,39291],{"class":362},[72,114605,114574],{"class":82},[72,114607,1464],{"class":78},[72,114609,4521],{"class":362},[72,114611,4167],{"class":82},[72,114613,114614,114617,114619,114621,114624],{"class":74,"line":8471},[72,114615,114616],{"class":78},"            raise",[72,114618,103839],{"class":362},[72,114620,564],{"class":82},[72,114622,114623],{"class":366},"\"required sites not found\"",[72,114625,570],{"class":82},[72,114627,114628],{"class":74,"line":8483},[72,114629,2828],{"emptyLinePlaceholder":490},[72,114631,114632,114634,114636,114638],{"class":74,"line":10142},[72,114633,31263],{"class":362},[72,114635,114267],{"class":82},[72,114637,609],{"class":78},[72,114639,54845],{"class":362},[72,114641,114642,114644,114647,114649],{"class":74,"line":10167},[72,114643,31263],{"class":362},[72,114645,114646],{"class":82},".max_steps ",[72,114648,609],{"class":78},[72,114650,114651],{"class":362}," 200\n",[72,114653,114654,114656,114658,114660],{"class":74,"line":10190},[72,114655,31263],{"class":362},[72,114657,114106],{"class":82},[72,114659,609],{"class":78},[72,114661,47751],{"class":362},[72,114663,114664],{"class":74,"line":10214},[72,114665,2828],{"emptyLinePlaceholder":490},[72,114667,114668,114670,114672,114674,114676,114678,114680,114682,114684,114686,114688,114690,114692,114694,114696,114698,114700,114702,114704,114706],{"class":74,"line":10219},[72,114669,31263],{"class":362},[72,114671,114154],{"class":82},[72,114673,609],{"class":78},[72,114675,114159],{"class":82},[72,114677,114162],{"class":5642},[72,114679,114165],{"class":78},[72,114681,102807],{"class":362},[72,114683,12861],{"class":82},[72,114685,114172],{"class":5642},[72,114687,609],{"class":78},[72,114689,102807],{"class":362},[72,114691,12861],{"class":82},[72,114693,96380],{"class":5642},[72,114695,609],{"class":78},[72,114697,564],{"class":82},[72,114699,640],{"class":362},[72,114701,114189],{"class":82},[72,114703,93917],{"class":5642},[72,114705,609],{"class":78},[72,114707,114196],{"class":82},[72,114709,114710,114712,114714,114716,114718,114720,114722,114724,114726,114728,114730,114732,114734,114736,114738,114740,114742,114744],{"class":74,"line":10224},[72,114711,31263],{"class":362},[72,114713,114215],{"class":82},[72,114715,609],{"class":78},[72,114717,114159],{"class":82},[72,114719,114162],{"class":5642},[72,114721,114165],{"class":78},[72,114723,114226],{"class":82},[72,114725,114172],{"class":5642},[72,114727,609],{"class":78},[72,114729,114226],{"class":82},[72,114731,96380],{"class":5642},[72,114733,609],{"class":78},[72,114735,564],{"class":82},[72,114737,1000],{"class":362},[72,114739,114189],{"class":82},[72,114741,93917],{"class":5642},[72,114743,609],{"class":78},[72,114745,114196],{"class":82},[72,114747,114748],{"class":74,"line":10229},[72,114749,2828],{"emptyLinePlaceholder":490},[72,114751,114752,114754,114757],{"class":74,"line":10238},[72,114753,31219],{"class":78},[72,114755,114756],{"class":358}," _get_obs",[72,114758,114759],{"class":82},"(self) -> np.ndarray:\n",[72,114761,114762,114764,114766,114768,114771,114773],{"class":74,"line":10243},[72,114763,112537],{"class":82},[72,114765,609],{"class":78},[72,114767,39291],{"class":362},[72,114769,114770],{"class":82},".data.site_xpos[",[72,114772,31241],{"class":362},[72,114774,114775],{"class":82},".tip_site_id].copy()\n",[72,114777,114778,114780,114782,114784,114786,114788],{"class":74,"line":10249},[72,114779,112550],{"class":82},[72,114781,609],{"class":78},[72,114783,39291],{"class":362},[72,114785,114770],{"class":82},[72,114787,31241],{"class":362},[72,114789,114790],{"class":82},".target_site_id].copy()\n",[72,114792,114793,114795,114797,114800,114802,114805,114807],{"class":74,"line":10270},[72,114794,110582],{"class":82},[72,114796,609],{"class":78},[72,114798,114799],{"class":82}," np.concatenate([",[72,114801,31241],{"class":362},[72,114803,114804],{"class":82},".data.qpos.copy(), ",[72,114806,31241],{"class":362},[72,114808,114809],{"class":82},".data.qvel.copy(), tip, target])\n",[72,114811,114812,114814],{"class":74,"line":10276},[72,114813,15178],{"class":78},[72,114815,114816],{"class":82}," obs.astype(np.float32)\n",[72,114818,114819],{"class":74,"line":10290},[72,114820,2828],{"emptyLinePlaceholder":490},[72,114822,114823,114825,114828,114830,114832],{"class":74,"line":10296},[72,114824,31219],{"class":78},[72,114826,114827],{"class":358}," _get_reward",[72,114829,114496],{"class":82},[72,114831,603],{"class":362},[72,114833,4167],{"class":82},[72,114835,114836,114838,114840,114842,114844,114846],{"class":74,"line":10323},[72,114837,112537],{"class":82},[72,114839,609],{"class":78},[72,114841,39291],{"class":362},[72,114843,114770],{"class":82},[72,114845,31241],{"class":362},[72,114847,114848],{"class":82},".tip_site_id]\n",[72,114850,114851,114853,114855,114857,114859,114861],{"class":74,"line":10332},[72,114852,112550],{"class":82},[72,114854,609],{"class":78},[72,114856,39291],{"class":362},[72,114858,114770],{"class":82},[72,114860,31241],{"class":362},[72,114862,114863],{"class":82},".target_site_id]\n",[72,114865,114866,114869,114871,114873,114875],{"class":74,"line":10338},[72,114867,114868],{"class":82},"        dist ",[72,114870,609],{"class":78},[72,114872,112001],{"class":82},[72,114874,1086],{"class":78},[72,114876,112006],{"class":82},[72,114878,114879,114882,114884,114886,114888,114891,114893],{"class":74,"line":10346},[72,114880,114881],{"class":82},"        control_cost ",[72,114883,609],{"class":78},[72,114885,112437],{"class":362},[72,114887,6944],{"class":78},[72,114889,114890],{"class":82}," np.sum(np.square(",[72,114892,31241],{"class":362},[72,114894,114895],{"class":82},".data.ctrl))\n",[72,114897,114898,114900,114902,114904,114906,114908,114910],{"class":74,"line":10351},[72,114899,15178],{"class":78},[72,114901,110197],{"class":362},[72,114903,564],{"class":82},[72,114905,1086],{"class":78},[72,114907,111996],{"class":82},[72,114909,1086],{"class":78},[72,114911,112459],{"class":82},[72,114913,114914],{"class":74,"line":17030},[72,114915,2828],{"emptyLinePlaceholder":490},[72,114917,114918,114920,114923,114926,114928,114931,114933,114935,114937,114939,114941,114944,114947,114949,114951,114953,114955],{"class":74,"line":17036},[72,114919,31219],{"class":78},[72,114921,114922],{"class":358}," reset",[72,114924,114925],{"class":82},"(self, ",[72,114927,1009],{"class":78},[72,114929,114930],{"class":82},", seed: ",[72,114932,567],{"class":362},[72,114934,25531],{"class":78},[72,114936,39351],{"class":362},[72,114938,13990],{"class":78},[72,114940,39351],{"class":362},[72,114942,114943],{"class":82},", options: ",[72,114945,114946],{"class":362},"dict",[72,114948,25531],{"class":78},[72,114950,39351],{"class":362},[72,114952,13990],{"class":78},[72,114954,39351],{"class":362},[72,114956,31204],{"class":82},[72,114958,114959,114961,114964,114967,114969],{"class":74,"line":17059},[72,114960,31235],{"class":362},[72,114962,114963],{"class":82},"().reset(",[72,114965,114966],{"class":5642},"seed",[72,114968,609],{"class":78},[72,114970,114971],{"class":82},"seed)\n",[72,114973,114974,114977,114979,114982,114984],{"class":74,"line":17065},[72,114975,114976],{"class":82},"        mujoco.mj_resetData(",[72,114978,31241],{"class":362},[72,114980,114981],{"class":82},".model, ",[72,114983,31241],{"class":362},[72,114985,114986],{"class":82},".data)\n",[72,114988,114989],{"class":74,"line":17088},[72,114990,2828],{"emptyLinePlaceholder":490},[72,114992,114993,114995,114998,115000,115002,115005,115007,115009,115011,115013,115015,115017,115019,115021,115023,115025,115027],{"class":74,"line":17102},[72,114994,31263],{"class":362},[72,114996,114997],{"class":82},".data.qpos[:] ",[72,114999,609],{"class":78},[72,115001,39291],{"class":362},[72,115003,115004],{"class":82},".np_random.uniform(",[72,115006,114162],{"class":5642},[72,115008,114165],{"class":78},[72,115010,86627],{"class":362},[72,115012,12861],{"class":82},[72,115014,114172],{"class":5642},[72,115016,609],{"class":78},[72,115018,86627],{"class":362},[72,115020,12861],{"class":82},[72,115022,31914],{"class":5642},[72,115024,609],{"class":78},[72,115026,31241],{"class":362},[72,115028,115029],{"class":82},".model.nq)\n",[72,115031,115032,115034,115037,115039],{"class":74,"line":17122},[72,115033,31263],{"class":362},[72,115035,115036],{"class":82},".data.qvel[:] ",[72,115038,609],{"class":78},[72,115040,105162],{"class":362},[72,115042,115043,115046,115048,115050,115052],{"class":74,"line":17128},[72,115044,115045],{"class":82},"        mujoco.mj_forward(",[72,115047,31241],{"class":362},[72,115049,114981],{"class":82},[72,115051,31241],{"class":362},[72,115053,114986],{"class":82},[72,115055,115056],{"class":74,"line":17139},[72,115057,2828],{"emptyLinePlaceholder":490},[72,115059,115060,115062,115064,115066],{"class":74,"line":17162},[72,115061,31263],{"class":362},[72,115063,114106],{"class":82},[72,115065,609],{"class":78},[72,115067,47751],{"class":362},[72,115069,115070,115072,115074],{"class":74,"line":17184},[72,115071,15178],{"class":78},[72,115073,39291],{"class":362},[72,115075,115076],{"class":82},"._get_obs(), {}\n",[72,115078,115079],{"class":74,"line":17189},[72,115080,2828],{"emptyLinePlaceholder":490},[72,115082,115083,115085,115088],{"class":74,"line":17195},[72,115084,31219],{"class":78},[72,115086,115087],{"class":358}," step",[72,115089,115090],{"class":82},"(self, action):\n",[72,115092,115093,115095,115097,115100,115102,115104],{"class":74,"line":17209},[72,115094,110622],{"class":82},[72,115096,609],{"class":78},[72,115098,115099],{"class":82}," np.asarray(action, ",[72,115101,93917],{"class":5642},[72,115103,609],{"class":78},[72,115105,114196],{"class":82},[72,115107,115108,115110,115112,115114,115116,115119,115121],{"class":74,"line":17222},[72,115109,110622],{"class":82},[72,115111,609],{"class":78},[72,115113,107847],{"class":82},[72,115115,31241],{"class":362},[72,115117,115118],{"class":82},".action_space.low, ",[72,115120,31241],{"class":362},[72,115122,115123],{"class":82},".action_space.high)\n",[72,115125,115126],{"class":74,"line":17227},[72,115127,2828],{"emptyLinePlaceholder":490},[72,115129,115130,115132,115135,115137],{"class":74,"line":17241},[72,115131,31263],{"class":362},[72,115133,115134],{"class":82},".data.ctrl[:] ",[72,115136,609],{"class":78},[72,115138,107870],{"class":82},[72,115140,115141,115143,115145,115147,115149,115151,115153],{"class":74,"line":17246},[72,115142,3831],{"class":78},[72,115144,101907],{"class":82},[72,115146,26465],{"class":78},[72,115148,32861],{"class":362},[72,115150,564],{"class":82},[72,115152,31241],{"class":362},[72,115154,115155],{"class":82},".frame_skip):\n",[72,115157,115158,115161,115163,115165,115167],{"class":74,"line":17252},[72,115159,115160],{"class":82},"            mujoco.mj_step(",[72,115162,31241],{"class":362},[72,115164,114981],{"class":82},[72,115166,31241],{"class":362},[72,115168,114986],{"class":82},[72,115170,115171],{"class":74,"line":17257},[72,115172,2828],{"emptyLinePlaceholder":490},[72,115174,115175,115177,115179,115181],{"class":74,"line":17271},[72,115176,31263],{"class":362},[72,115178,114106],{"class":82},[72,115180,9903],{"class":78},[72,115182,56117],{"class":362},[72,115184,115185],{"class":74,"line":17276},[72,115186,2828],{"emptyLinePlaceholder":490},[72,115188,115189,115191,115193,115195],{"class":74,"line":17281},[72,115190,110582],{"class":82},[72,115192,609],{"class":78},[72,115194,39291],{"class":362},[72,115196,115197],{"class":82},"._get_obs()\n",[72,115199,115200,115202,115204,115206],{"class":74,"line":17295},[72,115201,110687],{"class":82},[72,115203,609],{"class":78},[72,115205,39291],{"class":362},[72,115207,115208],{"class":82},"._get_reward()\n",[72,115210,115211],{"class":74,"line":17307},[72,115212,2828],{"emptyLinePlaceholder":490},[72,115214,115215,115217,115219,115221,115223,115225],{"class":74,"line":17312},[72,115216,112537],{"class":82},[72,115218,609],{"class":78},[72,115220,39291],{"class":362},[72,115222,114770],{"class":82},[72,115224,31241],{"class":362},[72,115226,114848],{"class":82},[72,115228,115229,115231,115233,115235,115237,115239],{"class":74,"line":17325},[72,115230,112550],{"class":82},[72,115232,609],{"class":78},[72,115234,39291],{"class":362},[72,115236,114770],{"class":82},[72,115238,31241],{"class":362},[72,115240,114863],{"class":82},[72,115242,115243,115245,115247,115249,115252,115254],{"class":74,"line":17330},[72,115244,114868],{"class":82},[72,115246,609],{"class":78},[72,115248,110197],{"class":362},[72,115250,115251],{"class":82},"(np.linalg.norm(tip ",[72,115253,1086],{"class":78},[72,115255,115256],{"class":82}," target))\n",[72,115258,115259],{"class":74,"line":17335},[72,115260,2828],{"emptyLinePlaceholder":490},[72,115262,115263,115266,115268,115270,115272],{"class":74,"line":17340},[72,115264,115265],{"class":82},"        terminated ",[72,115267,609],{"class":78},[72,115269,114089],{"class":82},[72,115271,1464],{"class":78},[72,115273,114094],{"class":362},[72,115275,115276,115279,115281,115283,115285,115287,115289],{"class":74,"line":17353},[72,115277,115278],{"class":82},"        truncated ",[72,115280,609],{"class":78},[72,115282,39291],{"class":362},[72,115284,114106],{"class":82},[72,115286,2139],{"class":78},[72,115288,39291],{"class":362},[72,115290,114113],{"class":82},[72,115292,115293,115296,115298,115300,115303],{"class":74,"line":17358},[72,115294,115295],{"class":82},"        info ",[72,115297,609],{"class":78},[72,115299,4876],{"class":82},[72,115301,115302],{"class":366},"\"distance\"",[72,115304,115305],{"class":82},": dist}\n",[72,115307,115308,115310],{"class":74,"line":33051},[72,115309,15178],{"class":78},[72,115311,115312],{"class":82}," obs, reward, terminated, truncated, info\n",[72,115314,115315],{"class":74,"line":33057},[72,115316,2828],{"emptyLinePlaceholder":490},[72,115318,115319],{"class":74,"line":33063},[72,115320,2828],{"emptyLinePlaceholder":490},[72,115322,115323,115325,115327,115329,115331],{"class":74,"line":33069},[72,115324,32365],{"class":78},[72,115326,2401],{"class":358},[72,115328,101804],{"class":82},[72,115330,96103],{"class":362},[72,115332,4167],{"class":82},[72,115334,115335,115338,115340],{"class":74,"line":33075},[72,115336,115337],{"class":82},"    env ",[72,115339,609],{"class":78},[72,115341,115342],{"class":82}," ReacherEnv()\n",[72,115344,115345,115348,115350,115353,115355,115357,115359],{"class":74,"line":33086},[72,115346,115347],{"class":82},"    obs, info ",[72,115349,609],{"class":78},[72,115351,115352],{"class":82}," env.reset(",[72,115354,114966],{"class":5642},[72,115356,609],{"class":78},[72,115358,747],{"class":362},[72,115360,570],{"class":82},[72,115362,115363,115365,115367,115370],{"class":74,"line":33092},[72,115364,31717],{"class":362},[72,115366,564],{"class":82},[72,115368,115369],{"class":366},"\"initial obs shape:\"",[72,115371,115372],{"class":82},", obs.shape)\n",[72,115374,115375,115377,115379,115382],{"class":74,"line":33112},[72,115376,31717],{"class":362},[72,115378,564],{"class":82},[72,115380,115381],{"class":366},"\"initial info:\"",[72,115383,115384],{"class":82},", info)\n",[72,115386,115387],{"class":74,"line":33118},[72,115388,2828],{"emptyLinePlaceholder":490},[72,115390,115391,115393,115395],{"class":74,"line":33129},[72,115392,110553],{"class":82},[72,115394,609],{"class":78},[72,115396,105162],{"class":362},[72,115398,115399,115401,115403,115405,115407,115409,115411],{"class":74,"line":33135},[72,115400,3629],{"class":78},[72,115402,32034],{"class":82},[72,115404,26465],{"class":78},[72,115406,32861],{"class":362},[72,115408,564],{"class":82},[72,115410,1254],{"class":362},[72,115412,31204],{"class":82},[72,115414,115415,115417,115419],{"class":74,"line":33141},[72,115416,110622],{"class":82},[72,115418,609],{"class":78},[72,115420,115421],{"class":82}," env.action_space.sample()\n",[72,115423,115424,115427,115429],{"class":74,"line":33147},[72,115425,115426],{"class":82},"        obs, reward, terminated, truncated, info ",[72,115428,609],{"class":78},[72,115430,113815],{"class":82},[72,115432,115433,115435,115437],{"class":74,"line":33153},[72,115434,110697],{"class":82},[72,115436,9903],{"class":78},[72,115438,110702],{"class":82},[72,115440,115441,115443,115445,115447,115449,115452,115454,115456,115459,115461,115463,115466,115468,115470,115473,115475,115477,115479],{"class":74,"line":33159},[72,115442,32869],{"class":362},[72,115444,564],{"class":82},[72,115446,110731],{"class":366},[72,115448,110734],{"class":82},[72,115450,115451],{"class":366},"\"reward:\"",[72,115453,12861],{"class":82},[72,115455,32436],{"class":362},[72,115457,115458],{"class":82},"(reward, ",[72,115460,634],{"class":362},[72,115462,110745],{"class":82},[72,115464,115465],{"class":366},"\"distance:\"",[72,115467,12861],{"class":82},[72,115469,32436],{"class":362},[72,115471,115472],{"class":82},"(info[",[72,115474,115302],{"class":366},[72,115476,112602],{"class":82},[72,115478,634],{"class":362},[72,115480,30915],{"class":82},[72,115482,115483,115485,115488,115491],{"class":74,"line":33165},[72,115484,2925],{"class":78},[72,115486,115487],{"class":82}," terminated ",[72,115489,115490],{"class":78},"or",[72,115492,115493],{"class":82}," truncated:\n",[72,115495,115496],{"class":74,"line":33171},[72,115497,115498],{"class":78},"            break\n",[72,115500,115501],{"class":74,"line":33191},[72,115502,2828],{"emptyLinePlaceholder":490},[72,115504,115505,115507,115509,115511,115513,115515,115517,115519],{"class":74,"line":33197},[72,115506,31717],{"class":362},[72,115508,564],{"class":82},[72,115510,110776],{"class":366},[72,115512,12861],{"class":82},[72,115514,32436],{"class":362},[72,115516,110783],{"class":82},[72,115518,634],{"class":362},[72,115520,30915],{"class":82},[72,115522,115523],{"class":74,"line":33213},[72,115524,2828],{"emptyLinePlaceholder":490},[72,115526,115527],{"class":74,"line":33219},[72,115528,2828],{"emptyLinePlaceholder":490},[72,115530,115531,115533,115535,115537,115539],{"class":74,"line":33233},[72,115532,1960],{"class":78},[72,115534,31638],{"class":362},[72,115536,101965],{"class":78},[72,115538,101968],{"class":366},[72,115540,4167],{"class":82},[72,115542,115543],{"class":74,"line":33239},[72,115544,101975],{"class":82},[15,115546,103974],{},[63,115548,115550],{"className":349,"code":115549,"language":351,"meta":68,"style":68},"touch ch8_gym_env.py\n",[34,115551,115552],{"__ignoreMap":68},[72,115553,115554,115556],{"class":74,"line":75},[72,115555,101690],{"class":358},[72,115557,115558],{"class":366}," ch8_gym_env.py\n",[15,115560,110844],{},[63,115562,115564],{"className":349,"code":115563,"language":351,"meta":68,"style":68},"python ch8_gym_env.py\n",[34,115565,115566],{"__ignoreMap":68},[72,115567,115568,115570],{"class":74,"line":75},[72,115569,67],{"class":358},[72,115571,115558],{"class":366},[531,115573,101978],{"id":101978},[15,115575,115576],{},"继承 Gymnasium 环境：",[63,115578,115580],{"className":65,"code":115579,"language":67,"meta":68,"style":68},"class ReacherEnv(gym.Env):\n",[34,115581,115582],{"__ignoreMap":68},[72,115583,115584,115586,115588,115590,115592,115594,115596],{"class":74,"line":75},[72,115585,15120],{"class":78},[72,115587,114457],{"class":358},[72,115589,564],{"class":82},[72,115591,113940],{"class":358},[72,115593,1112],{"class":82},[72,115595,114466],{"class":358},[72,115597,31204],{"class":82},[15,115599,115600],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[15,115602,115603],{},"初始化模型：",[63,115605,115607],{"className":65,"code":115606,"language":67,"meta":68,"style":68},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[34,115608,115609,115623],{"__ignoreMap":68},[72,115610,115611,115613,115615,115617,115619,115621],{"class":74,"line":75},[72,115612,31241],{"class":362},[72,115614,114517],{"class":82},[72,115616,609],{"class":78},[72,115618,101818],{"class":82},[72,115620,101720],{"class":362},[72,115622,570],{"class":82},[72,115624,115625,115627,115629,115631,115633,115635],{"class":74,"line":370},[72,115626,31241],{"class":362},[72,115628,114532],{"class":82},[72,115630,609],{"class":78},[72,115632,114537],{"class":82},[72,115634,31241],{"class":362},[72,115636,114542],{"class":82},[15,115638,115639,115640,115642],{},"这和前面章节一样，只是现在放到了类的 ",[34,115641,31247],{}," 里。",[15,115644,115645],{},"缓存 site ID：",[63,115647,115649],{"className":65,"code":115648,"language":67,"meta":68,"style":68},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[34,115650,115651,115665],{"__ignoreMap":68},[72,115652,115653,115655,115657,115659,115661,115663],{"class":74,"line":75},[72,115654,31241],{"class":362},[72,115656,114553],{"class":82},[72,115658,609],{"class":78},[72,115660,114558],{"class":82},[72,115662,89971],{"class":362},[72,115664,570],{"class":82},[72,115666,115667,115669,115671,115673,115675,115677],{"class":74,"line":370},[72,115668,31241],{"class":362},[72,115670,114574],{"class":82},[72,115672,609],{"class":78},[72,115674,114558],{"class":82},[72,115676,89971],{"class":362},[72,115678,570],{"class":82},[15,115680,115681],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[15,115683,115684],{},"reset：",[63,115686,115688],{"className":65,"code":115687,"language":67,"meta":68,"style":68},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[34,115689,115690],{"__ignoreMap":68},[72,115691,115692,115694,115696,115698,115700,115702,115704,115706,115708,115710,115712,115714,115716,115718,115720,115722,115724],{"class":74,"line":75},[72,115693,32365],{"class":78},[72,115695,114922],{"class":358},[72,115697,114925],{"class":82},[72,115699,1009],{"class":78},[72,115701,114930],{"class":82},[72,115703,567],{"class":362},[72,115705,25531],{"class":78},[72,115707,39351],{"class":362},[72,115709,13990],{"class":78},[72,115711,39351],{"class":362},[72,115713,114943],{"class":82},[72,115715,114946],{"class":362},[72,115717,25531],{"class":78},[72,115719,39351],{"class":362},[72,115721,13990],{"class":78},[72,115723,39351],{"class":362},[72,115725,31204],{"class":82},[15,115727,115728,115730],{},[34,115729,70474],{}," 做四件事：",[22,115732,115733,115736,115739,115742],{},[25,115734,115735],{},"设置随机种子。",[25,115737,115738],{},"重置 MuJoCo data。",[25,115740,115741],{},"随机初始化关节角。",[25,115743,115744],{},"返回初始观测和 info。",[15,115746,115747],{},"step：",[63,115749,115751],{"className":65,"code":115750,"language":67,"meta":68,"style":68},"def step(self, action):\n",[34,115752,115753],{"__ignoreMap":68},[72,115754,115755,115757,115759],{"class":74,"line":75},[72,115756,32365],{"class":78},[72,115758,115087],{"class":358},[72,115760,115090],{"class":82},[15,115762,115763,115765],{},[34,115764,107534],{}," 做六件事：",[22,115767,115768,115771,115777,115780,115783,115786],{},[25,115769,115770],{},"检查并裁剪 action。",[25,115772,115773,115774,28807],{},"写入 ",[34,115775,115776],{},"self.data.ctrl",[25,115778,115779],{},"连续推进若干个 MuJoCo 物理步。",[25,115781,115782],{},"计算新观测。",[25,115784,115785],{},"计算奖励和结束条件。",[25,115787,115788],{},"返回 Gymnasium 标准五元组。",[531,115790,102113],{"id":102113},[63,115792,115794],{"className":65,"code":115793,"language":67,"meta":68,"style":68},"import gymnasium as gym\n",[34,115795,115796],{"__ignoreMap":68},[72,115797,115798,115800,115802,115804],{"class":74,"line":75},[72,115799,79],{"class":78},[72,115801,114295],{"class":82},[72,115803,31801],{"class":78},[72,115805,114300],{"class":82},[15,115807,115808,115809,115811,115812,115815],{},"导入 Gymnasium，并起别名 ",[34,115810,113940],{},"。后面写 ",[34,115813,115814],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[63,115817,115819],{"className":65,"code":115818,"language":67,"meta":68,"style":68},"from gymnasium import spaces\n",[34,115820,115821],{"__ignoreMap":68},[72,115822,115823,115825,115827,115829],{"class":74,"line":75},[72,115824,31155],{"class":78},[72,115826,114295],{"class":82},[72,115828,79],{"class":78},[72,115830,114327],{"class":82},[15,115832,115833,115834,115837],{},"导入空间定义工具。",[34,115835,115836],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[63,115839,115840],{"className":65,"code":115579,"language":67,"meta":68,"style":68},[34,115841,115842],{"__ignoreMap":68},[72,115843,115844,115846,115848,115850,115852,115854,115856],{"class":74,"line":75},[72,115845,15120],{"class":78},[72,115847,114457],{"class":358},[72,115849,564],{"class":82},[72,115851,113940],{"class":358},[72,115853,1112],{"class":82},[72,115855,114466],{"class":358},[72,115857,31204],{"class":82},[15,115859,115860,115861,115864,115865,115867,115868,101432,115870,115872],{},"定义一个类，名字叫 ",[34,115862,115863],{},"ReacherEnv","。括号里的 ",[34,115866,115814],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[34,115869,70474],{},[34,115871,107534],{}," 这两个核心方法。",[63,115874,115876],{"className":65,"code":115875,"language":67,"meta":68,"style":68},"metadata = {\"render_modes\": []}\n",[34,115877,115878],{"__ignoreMap":68},[72,115879,115880,115883,115885,115887,115889],{"class":74,"line":75},[72,115881,115882],{"class":82},"metadata ",[72,115884,609],{"class":78},[72,115886,4876],{"class":82},[72,115888,114480],{"class":366},[72,115890,114483],{"class":82},[15,115892,115893],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[63,115895,115897],{"className":65,"code":115896,"language":67,"meta":68,"style":68},"def __init__(self) -> None:\n",[34,115898,115899],{"__ignoreMap":68},[72,115900,115901,115903,115905,115907,115909],{"class":74,"line":75},[72,115902,32365],{"class":78},[72,115904,31222],{"class":362},[72,115906,114496],{"class":82},[72,115908,96103],{"class":362},[72,115910,4167],{"class":82},[15,115912,115913,115915,115916,28807],{},[34,115914,31247],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[34,115917,115918],{},"env = ReacherEnv()",[63,115920,115922],{"className":65,"code":115921,"language":67,"meta":68,"style":68},"super().__init__()\n",[34,115923,115924],{"__ignoreMap":68},[72,115925,115926,115929,115931,115933],{"class":74,"line":75},[72,115927,115928],{"class":362},"super",[72,115930,17687],{"class":82},[72,115932,31247],{"class":362},[72,115934,2404],{"class":82},[15,115936,115937,115938,115940],{},"调用父类 ",[34,115939,115814],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[63,115942,115943],{"className":65,"code":115606,"language":67,"meta":68,"style":68},[34,115944,115945,115959],{"__ignoreMap":68},[72,115946,115947,115949,115951,115953,115955,115957],{"class":74,"line":75},[72,115948,31241],{"class":362},[72,115950,114517],{"class":82},[72,115952,609],{"class":78},[72,115954,101818],{"class":82},[72,115956,101720],{"class":362},[72,115958,570],{"class":82},[72,115960,115961,115963,115965,115967,115969,115971],{"class":74,"line":370},[72,115962,31241],{"class":362},[72,115964,114532],{"class":82},[72,115966,609],{"class":78},[72,115968,114537],{"class":82},[72,115970,31241],{"class":362},[72,115972,114542],{"class":82},[15,115974,115975,115976,115978,115979,101432,115982,115985],{},"把 MuJoCo 模型和状态保存到 ",[34,115977,31241],{}," 上。",[34,115980,115981],{},"self.model",[34,115983,115984],{},"self.data"," 表示这个环境对象自己的模型和状态。",[63,115987,115988],{"className":65,"code":115648,"language":67,"meta":68,"style":68},[34,115989,115990,116004],{"__ignoreMap":68},[72,115991,115992,115994,115996,115998,116000,116002],{"class":74,"line":75},[72,115993,31241],{"class":362},[72,115995,114553],{"class":82},[72,115997,609],{"class":78},[72,115999,114558],{"class":82},[72,116001,89971],{"class":362},[72,116003,570],{"class":82},[72,116005,116006,116008,116010,116012,116014,116016],{"class":74,"line":370},[72,116007,31241],{"class":362},[72,116009,114574],{"class":82},[72,116011,609],{"class":78},[72,116013,114558],{"class":82},[72,116015,89971],{"class":362},[72,116017,570],{"class":82},[15,116019,116020,116021,101432,116024,116027],{},"提前查好 tip 和 target 的 site ID。这样 ",[34,116022,116023],{},"_get_obs",[34,116025,116026],{},"_get_reward"," 里就不用每次按名字查找。",[63,116029,116031],{"className":65,"code":116030,"language":67,"meta":68,"style":68},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[34,116032,116033,116043,116053],{"__ignoreMap":68},[72,116034,116035,116037,116039,116041],{"class":74,"line":75},[72,116036,31241],{"class":362},[72,116038,114267],{"class":82},[72,116040,609],{"class":78},[72,116042,54845],{"class":362},[72,116044,116045,116047,116049,116051],{"class":74,"line":370},[72,116046,31241],{"class":362},[72,116048,114646],{"class":82},[72,116050,609],{"class":78},[72,116052,114651],{"class":362},[72,116054,116055,116057,116059,116061],{"class":74,"line":1608},[72,116056,31241],{"class":362},[72,116058,114106],{"class":82},[72,116060,609],{"class":78},[72,116062,47751],{"class":362},[15,116064,116065,116068,116069,116072,116073,116076],{},[34,116066,116067],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[34,116070,116071],{},"max_steps"," 是一个 episode 最多运行多少步。",[34,116074,116075],{},"steps"," 记录当前 episode 已经走了多少步。",[63,116078,116079],{"className":65,"code":114145,"language":67,"meta":68,"style":68},[34,116080,116081],{"__ignoreMap":68},[72,116082,116083,116085,116087,116089,116091,116093,116095,116097,116099,116101,116103,116105,116107,116109,116111,116113,116115,116117,116119,116121],{"class":74,"line":75},[72,116084,31241],{"class":362},[72,116086,114154],{"class":82},[72,116088,609],{"class":78},[72,116090,114159],{"class":82},[72,116092,114162],{"class":5642},[72,116094,114165],{"class":78},[72,116096,102807],{"class":362},[72,116098,12861],{"class":82},[72,116100,114172],{"class":5642},[72,116102,609],{"class":78},[72,116104,102807],{"class":362},[72,116106,12861],{"class":82},[72,116108,96380],{"class":5642},[72,116110,609],{"class":78},[72,116112,564],{"class":82},[72,116114,640],{"class":362},[72,116116,114189],{"class":82},[72,116118,93917],{"class":5642},[72,116120,609],{"class":78},[72,116122,114196],{"class":82},[15,116124,116125,116126,116129,116130,101432,116133,116136],{},"定义动作空间。",[34,116127,116128],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[34,116131,116132],{},"low=-1.0",[34,116134,116135],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[63,116138,116139],{"className":65,"code":114206,"language":67,"meta":68,"style":68},[34,116140,116141],{"__ignoreMap":68},[72,116142,116143,116145,116147,116149,116151,116153,116155,116157,116159,116161,116163,116165,116167,116169,116171,116173,116175,116177],{"class":74,"line":75},[72,116144,31241],{"class":362},[72,116146,114215],{"class":82},[72,116148,609],{"class":78},[72,116150,114159],{"class":82},[72,116152,114162],{"class":5642},[72,116154,114165],{"class":78},[72,116156,114226],{"class":82},[72,116158,114172],{"class":5642},[72,116160,609],{"class":78},[72,116162,114226],{"class":82},[72,116164,96380],{"class":5642},[72,116166,609],{"class":78},[72,116168,564],{"class":82},[72,116170,1000],{"class":362},[72,116172,114189],{"class":82},[72,116174,93917],{"class":5642},[72,116176,609],{"class":78},[72,116178,114196],{"class":82},[15,116180,116181,116182,116185,116186,116189],{},"定义观测空间。",[34,116183,116184],{},"shape=(10,)"," 表示观测是 10 个数。",[34,116187,116188],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[63,116191,116193],{"className":65,"code":116192,"language":67,"meta":68,"style":68},"def _get_obs(self) -> np.ndarray:\n",[34,116194,116195],{"__ignoreMap":68},[72,116196,116197,116199,116201],{"class":74,"line":75},[72,116198,32365],{"class":78},[72,116200,114756],{"class":358},[72,116202,114759],{"class":82},[15,116204,116205,116206,116208],{},"定义内部函数，用来生成观测。函数名前面的 ",[34,116207,1546],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[63,116210,116212],{"className":65,"code":116211,"language":67,"meta":68,"style":68},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[34,116213,116214,116228],{"__ignoreMap":68},[72,116215,116216,116218,116220,116222,116224,116226],{"class":74,"line":75},[72,116217,111968],{"class":82},[72,116219,609],{"class":78},[72,116221,39291],{"class":362},[72,116223,114770],{"class":82},[72,116225,31241],{"class":362},[72,116227,114775],{"class":82},[72,116229,116230,116232,116234,116236,116238,116240],{"class":74,"line":370},[72,116231,111978],{"class":82},[72,116233,609],{"class":78},[72,116235,39291],{"class":362},[72,116237,114770],{"class":82},[72,116239,31241],{"class":362},[72,116241,114790],{"class":82},[15,116243,116244],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[63,116246,116248],{"className":65,"code":116247,"language":67,"meta":68,"style":68},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[34,116249,116250,116266],{"__ignoreMap":68},[72,116251,116252,116254,116256,116258,116260,116262,116264],{"class":74,"line":75},[72,116253,111254],{"class":82},[72,116255,609],{"class":78},[72,116257,114799],{"class":82},[72,116259,31241],{"class":362},[72,116261,114804],{"class":82},[72,116263,31241],{"class":362},[72,116265,114809],{"class":82},[72,116267,116268,116270],{"class":74,"line":370},[72,116269,17472],{"class":78},[72,116271,114816],{"class":82},[15,116273,116274,116275,116278,116279,116281],{},"拼接观测，并转换成 ",[34,116276,116277],{},"float32","。很多强化学习库默认使用 ",[34,116280,116277],{},"，所以这里主动转换。",[63,116283,116284],{"className":65,"code":115687,"language":67,"meta":68,"style":68},[34,116285,116286],{"__ignoreMap":68},[72,116287,116288,116290,116292,116294,116296,116298,116300,116302,116304,116306,116308,116310,116312,116314,116316,116318,116320],{"class":74,"line":75},[72,116289,32365],{"class":78},[72,116291,114922],{"class":358},[72,116293,114925],{"class":82},[72,116295,1009],{"class":78},[72,116297,114930],{"class":82},[72,116299,567],{"class":362},[72,116301,25531],{"class":78},[72,116303,39351],{"class":362},[72,116305,13990],{"class":78},[72,116307,39351],{"class":362},[72,116309,114943],{"class":82},[72,116311,114946],{"class":362},[72,116313,25531],{"class":78},[72,116315,39351],{"class":362},[72,116317,13990],{"class":78},[72,116319,39351],{"class":362},[72,116321,31204],{"class":82},[15,116323,116324,116325,116327,116328,116331],{},"定义 reset。",[34,116326,114966],{}," 用来控制随机数，保证实验可以复现。",[34,116329,116330],{},"options"," 用来接收额外配置，本章暂时不用。",[63,116333,116335],{"className":65,"code":116334,"language":67,"meta":68,"style":68},"super().reset(seed=seed)\n",[34,116336,116337],{"__ignoreMap":68},[72,116338,116339,116341,116343,116345,116347],{"class":74,"line":75},[72,116340,115928],{"class":362},[72,116342,114963],{"class":82},[72,116344,114966],{"class":5642},[72,116346,609],{"class":78},[72,116348,114971],{"class":82},[15,116350,116351,116352,116355],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[34,116353,116354],{},"self.np_random"," 生成可复现的随机数。",[63,116357,116359],{"className":65,"code":116358,"language":67,"meta":68,"style":68},"mujoco.mj_resetData(self.model, self.data)\n",[34,116360,116361],{"__ignoreMap":68},[72,116362,116363,116366,116368,116370,116372],{"class":74,"line":75},[72,116364,116365],{"class":82},"mujoco.mj_resetData(",[72,116367,31241],{"class":362},[72,116369,114981],{"class":82},[72,116371,31241],{"class":362},[72,116373,114986],{"class":82},[15,116375,116376],{},"把 MuJoCo 状态重置到默认状态。",[63,116378,116380],{"className":65,"code":116379,"language":67,"meta":68,"style":68},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[34,116381,116382],{"__ignoreMap":68},[72,116383,116384,116386,116388,116390,116392,116394,116396,116398,116400,116402,116404,116406,116408,116410,116412,116414,116416],{"class":74,"line":75},[72,116385,31241],{"class":362},[72,116387,114997],{"class":82},[72,116389,609],{"class":78},[72,116391,39291],{"class":362},[72,116393,115004],{"class":82},[72,116395,114162],{"class":5642},[72,116397,114165],{"class":78},[72,116399,86627],{"class":362},[72,116401,12861],{"class":82},[72,116403,114172],{"class":5642},[72,116405,609],{"class":78},[72,116407,86627],{"class":362},[72,116409,12861],{"class":82},[72,116411,31914],{"class":5642},[72,116413,609],{"class":78},[72,116415,31241],{"class":362},[72,116417,115029],{"class":82},[15,116419,115741,116420,116423,116424,116427,116428,116430],{},[34,116421,116422],{},"[:]"," 表示修改整个数组。",[34,116425,116426],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[34,116429,102555],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[63,116432,116434],{"className":65,"code":116433,"language":67,"meta":68,"style":68},"self.data.qvel[:] = 0.0\n",[34,116435,116436],{"__ignoreMap":68},[72,116437,116438,116440,116442,116444],{"class":74,"line":75},[72,116439,31241],{"class":362},[72,116441,115036],{"class":82},[72,116443,609],{"class":78},[72,116445,105162],{"class":362},[15,116447,116448],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[63,116450,116452],{"className":65,"code":116451,"language":67,"meta":68,"style":68},"self.steps = 0\nreturn self._get_obs(), {}\n",[34,116453,116454,116464],{"__ignoreMap":68},[72,116455,116456,116458,116460,116462],{"class":74,"line":75},[72,116457,31241],{"class":362},[72,116459,114106],{"class":82},[72,116461,609],{"class":78},[72,116463,47751],{"class":362},[72,116465,116466,116468,116470],{"class":74,"line":370},[72,116467,17472],{"class":78},[72,116469,39291],{"class":362},[72,116471,115076],{"class":82},[15,116473,116474],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[63,116476,116477],{"className":65,"code":115750,"language":67,"meta":68,"style":68},[34,116478,116479],{"__ignoreMap":68},[72,116480,116481,116483,116485],{"class":74,"line":75},[72,116482,32365],{"class":78},[72,116484,115087],{"class":358},[72,116486,115090],{"class":82},[15,116488,116489],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[63,116491,116493],{"className":65,"code":116492,"language":67,"meta":68,"style":68},"action = np.asarray(action, dtype=np.float32)\n",[34,116494,116495],{"__ignoreMap":68},[72,116496,116497,116499,116501,116503,116505,116507],{"class":74,"line":75},[72,116498,107842],{"class":82},[72,116500,609],{"class":78},[72,116502,115099],{"class":82},[72,116504,93917],{"class":5642},[72,116506,609],{"class":78},[72,116508,114196],{"class":82},[15,116510,116511,116512,28807],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[34,116513,116277],{},[63,116515,116517],{"className":65,"code":116516,"language":67,"meta":68,"style":68},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[34,116518,116519],{"__ignoreMap":68},[72,116520,116521,116523,116525,116527,116529,116531,116533],{"class":74,"line":75},[72,116522,107842],{"class":82},[72,116524,609],{"class":78},[72,116526,107847],{"class":82},[72,116528,31241],{"class":362},[72,116530,115118],{"class":82},[72,116532,31241],{"class":362},[72,116534,115123],{"class":82},[15,116536,116537],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[63,116539,116541],{"className":65,"code":116540,"language":67,"meta":68,"style":68},"self.data.ctrl[:] = action\n",[34,116542,116543],{"__ignoreMap":68},[72,116544,116545,116547,116549,116551],{"class":74,"line":75},[72,116546,31241],{"class":362},[72,116548,115134],{"class":82},[72,116550,609],{"class":78},[72,116552,107870],{"class":82},[15,116554,116555],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[63,116557,116559],{"className":65,"code":116558,"language":67,"meta":68,"style":68},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[34,116560,116561,116577],{"__ignoreMap":68},[72,116562,116563,116565,116567,116569,116571,116573,116575],{"class":74,"line":75},[72,116564,3453],{"class":78},[72,116566,101907],{"class":82},[72,116568,26465],{"class":78},[72,116570,32861],{"class":362},[72,116572,564],{"class":82},[72,116574,31241],{"class":362},[72,116576,115155],{"class":82},[72,116578,116579,116582,116584,116586,116588],{"class":74,"line":370},[72,116580,116581],{"class":82},"    mujoco.mj_step(",[72,116583,31241],{"class":362},[72,116585,114981],{"class":82},[72,116587,31241],{"class":362},[72,116589,114986],{"class":82},[15,116591,116592,116593,116596,116597,116599,116600,28807],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[34,116594,116595],{},"frame_skip=5","，所以外部调用一次 ",[34,116598,114277],{},"，内部实际执行 5 次 ",[34,116601,220],{},[63,116603,116605],{"className":65,"code":116604,"language":67,"meta":68,"style":68},"self.steps += 1\n",[34,116606,116607],{"__ignoreMap":68},[72,116608,116609,116611,116613,116615],{"class":74,"line":75},[72,116610,31241],{"class":362},[72,116612,114106],{"class":82},[72,116614,9903],{"class":78},[72,116616,56117],{"class":362},[15,116618,116619],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[63,116621,116623],{"className":65,"code":116622,"language":67,"meta":68,"style":68},"obs = self._get_obs()\nreward = self._get_reward()\n",[34,116624,116625,116635],{"__ignoreMap":68},[72,116626,116627,116629,116631,116633],{"class":74,"line":75},[72,116628,111254],{"class":82},[72,116630,609],{"class":78},[72,116632,39291],{"class":362},[72,116634,115197],{"class":82},[72,116636,116637,116639,116641,116643],{"class":74,"line":370},[72,116638,111405],{"class":82},[72,116640,609],{"class":78},[72,116642,39291],{"class":362},[72,116644,115208],{"class":82},[15,116646,116647],{},"计算新的观测和奖励。",[63,116649,116651],{"className":65,"code":116650,"language":67,"meta":68,"style":68},"dist = float(np.linalg.norm(tip - target))\n",[34,116652,116653],{"__ignoreMap":68},[72,116654,116655,116657,116659,116661,116663,116665],{"class":74,"line":75},[72,116656,111996],{"class":82},[72,116658,609],{"class":78},[72,116660,110197],{"class":362},[72,116662,115251],{"class":82},[72,116664,1086],{"class":78},[72,116666,115256],{"class":82},[15,116668,116669],{},"计算末端到目标的距离，并转换成 Python float。",[63,116671,116672],{"className":65,"code":114077,"language":67,"meta":68,"style":68},[34,116673,116674,116686],{"__ignoreMap":68},[72,116675,116676,116678,116680,116682,116684],{"class":74,"line":75},[72,116677,114084],{"class":82},[72,116679,609],{"class":78},[72,116681,114089],{"class":82},[72,116683,1464],{"class":78},[72,116685,114094],{"class":362},[72,116687,116688,116690,116692,116694,116696,116698,116700],{"class":74,"line":370},[72,116689,114099],{"class":82},[72,116691,609],{"class":78},[72,116693,39291],{"class":362},[72,116695,114106],{"class":82},[72,116697,2139],{"class":78},[72,116699,39291],{"class":362},[72,116701,114113],{"class":82},[15,116703,116704],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[63,116706,116708],{"className":65,"code":116707,"language":67,"meta":68,"style":68},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[34,116709,116710,116723],{"__ignoreMap":68},[72,116711,116712,116715,116717,116719,116721],{"class":74,"line":75},[72,116713,116714],{"class":82},"info ",[72,116716,609],{"class":78},[72,116718,4876],{"class":82},[72,116720,115302],{"class":366},[72,116722,115305],{"class":82},[72,116724,116725,116727],{"class":74,"line":370},[72,116726,17472],{"class":78},[72,116728,115312],{"class":82},[15,116730,116731,116734],{},[34,116732,116733],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[63,116736,116738],{"className":65,"code":116737,"language":67,"meta":68,"style":68},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[34,116739,116740,116749],{"__ignoreMap":68},[72,116741,116742,116745,116747],{"class":74,"line":75},[72,116743,116744],{"class":82},"env ",[72,116746,609],{"class":78},[72,116748,115342],{"class":82},[72,116750,116751,116753,116755,116757,116759,116761,116763],{"class":74,"line":370},[72,116752,113800],{"class":82},[72,116754,609],{"class":78},[72,116756,115352],{"class":82},[72,116758,114966],{"class":5642},[72,116760,609],{"class":78},[72,116762,747],{"class":362},[72,116764,570],{"class":82},[15,116766,116767,116768,116771],{},"创建环境并重置。",[34,116769,116770],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[63,116773,116775],{"className":65,"code":116774,"language":67,"meta":68,"style":68},"action = env.action_space.sample()\n",[34,116776,116777],{"__ignoreMap":68},[72,116778,116779,116781,116783],{"class":74,"line":75},[72,116780,107842],{"class":82},[72,116782,609],{"class":78},[72,116784,115421],{"class":82},[15,116786,116787],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[85,116789,102720],{"id":102719},[15,116791,105885],{},[63,116793,116796],{"className":116794,"code":116795,"language":127,"meta":68},[125],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[34,116797,116795],{"__ignoreMap":68},[15,116799,116800],{},"这个环境已经具备强化学习环境的基本结构。",[15,116802,116803],{},"主函数里使用随机动作：",[63,116805,116806],{"className":65,"code":116774,"language":67,"meta":68,"style":68},[34,116807,116808],{"__ignoreMap":68},[72,116809,116810,116812,116814],{"class":74,"line":75},[72,116811,107842],{"class":82},[72,116813,609],{"class":78},[72,116815,115421],{"class":82},[15,116817,116818],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[85,116820,102752],{"id":102751},[22,116822,116823,116826,116832,116841,116850,116859,116865],{},[25,116824,116825],{},"运行程序。",[25,116827,116828,116829,28807],{},"确认 ",[34,116830,116831],{},"obs.shape == (10,)",[25,116833,111581,116834,116837,116838,28807],{},[34,116835,116836],{},"env.action_space","，应类似 ",[34,116839,116840],{},"Box(-1.0, 1.0, (2,), float32)",[25,116842,459,116843,116846,116847,28807],{},[34,116844,116845],{},"self.max_steps = 10","，确认环境会更快 ",[34,116848,116849],{},"truncated=True",[25,116851,102815,116852,102818,116855,116858],{},[34,116853,116854],{},"terminated = dist \u003C 0.05",[34,116856,116857],{},"dist \u003C 0.2","，观察是否更容易结束。",[25,116860,102815,116861,116864],{},[34,116862,116863],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[25,116866,116867,116868,116870,116871,116874],{},"在 ",[34,116869,116733],{}," 里加入 ",[34,116872,116873],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[85,116876,102857],{"id":102856},[531,116878,116880],{"id":116879},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[15,116882,116883,116884,116886],{},"Gymnasium 的 ",[34,116885,107534],{}," 返回 5 个值:",[63,116888,116890],{"className":65,"code":116889,"language":67,"meta":68,"style":68},"obs, reward, terminated, truncated, info\n",[34,116891,116892],{"__ignoreMap":68},[72,116893,116894],{"class":74,"line":75},[72,116895,116889],{"class":82},[15,116897,116898],{},"不是旧 Gym 的 4 个值。",[531,116900,116902,116905],{"id":116901},"datactrl-action-维度错误",[34,116903,116904],{},"data.ctrl[:] = action"," 维度错误",[15,116907,102927],{},[63,116909,116911],{"className":65,"code":116910,"language":67,"meta":68,"style":68},"print(self.model.nu)\nprint(action.shape)\n",[34,116912,116913,116924],{"__ignoreMap":68},[72,116914,116915,116917,116919,116921],{"class":74,"line":75},[72,116916,30833],{"class":362},[72,116918,564],{"class":82},[72,116920,31241],{"class":362},[72,116922,116923],{"class":82},".model.nu)\n",[72,116925,116926,116928],{"class":74,"line":370},[72,116927,30833],{"class":362},[72,116929,116930],{"class":82},"(action.shape)\n",[15,116932,116933],{},"两者必须匹配。",[531,116935,116937],{"id":116936},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[15,116939,102866],{},[63,116941,116943],{"className":65,"code":116942,"language":67,"meta":68,"style":68},"mujoco.mj_forward(self.model, self.data)\n",[34,116944,116945],{"__ignoreMap":68},[72,116946,116947,116950,116952,116954,116956],{"class":74,"line":75},[72,116948,116949],{"class":82},"mujoco.mj_forward(",[72,116951,31241],{"class":362},[72,116953,114981],{"class":82},[72,116955,31241],{"class":362},[72,116957,114986],{"class":82},[531,116959,116961,116963],{"id":116960},"observation_space-维度和-obs-不一致",[34,116962,114000],{}," 维度和 obs 不一致",[15,116965,102979],{},[63,116967,116969],{"className":65,"code":116968,"language":67,"meta":68,"style":68},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[34,116970,116971,116981,116988],{"__ignoreMap":68},[72,116972,116973,116975,116977,116979],{"class":74,"line":75},[72,116974,111254],{"class":82},[72,116976,609],{"class":78},[72,116978,39291],{"class":362},[72,116980,115197],{"class":82},[72,116982,116983,116985],{"class":74,"line":370},[72,116984,30833],{"class":362},[72,116986,116987],{"class":82},"(obs.shape)\n",[72,116989,116990,116992,116994,116996],{"class":74,"line":1608},[72,116991,30833],{"class":362},[72,116993,564],{"class":82},[72,116995,31241],{"class":362},[72,116997,116998],{"class":82},".observation_space.shape)\n",[15,117000,117001],{},"两者必须一致。本章观测是：",[63,117003,117006],{"className":117004,"code":117005,"language":127,"meta":68},[125],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[34,117007,117005],{"__ignoreMap":68},[531,117009,117011],{"id":117010},"action-超过范围","action 超过范围",[15,117013,117014],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[63,117016,117017],{"className":65,"code":116516,"language":67,"meta":68,"style":68},[34,117018,117019],{"__ignoreMap":68},[72,117020,117021,117023,117025,117027,117029,117031,117033],{"class":74,"line":75},[72,117022,107842],{"class":82},[72,117024,609],{"class":78},[72,117026,107847],{"class":82},[72,117028,31241],{"class":362},[72,117030,115118],{"class":82},[72,117032,31241],{"class":362},[72,117034,115123],{"class":82},[15,117036,117037,117038,28807],{},"这能避免无效动作直接写入 ",[34,117039,452],{},[531,117041,117043],{"id":117042},"忘记返回-info","忘记返回 info",[15,117045,116883,117046,101432,117048,117050],{},[34,117047,70474],{},[34,117049,107534],{}," 都会返回 info：",[63,117052,117053],{"className":65,"code":113793,"language":67,"meta":68,"style":68},[34,117054,117055,117063],{"__ignoreMap":68},[72,117056,117057,117059,117061],{"class":74,"line":75},[72,117058,113800],{"class":82},[72,117060,609],{"class":78},[72,117062,113805],{"class":82},[72,117064,117065,117067,117069],{"class":74,"line":370},[72,117066,113810],{"class":82},[72,117068,609],{"class":78},[72,117070,113815],{"class":82},[15,117072,117073,117074,28807],{},"即使暂时没有额外信息，也返回 ",[34,117075,32877],{},[85,117077,117079],{"id":117078},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[15,117081,117082],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[22,117084,117085,117088,117091,117094,117097,117100],{},[25,117086,117087],{},"更稳定的 reward。",[25,117089,117090],{},"合理的 episode 长度。",[25,117092,117093],{},"可重复的随机目标采样。",[25,117095,117096],{},"render 接口。",[25,117098,117099],{},"环境注册代码。",[25,117101,117102],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[15,117104,117105],{},"如果只是自己写训练循环，最小形式是：",[63,117107,117109],{"className":65,"code":117108,"language":67,"meta":68,"style":68},"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",[34,117110,117111,117119,117135,117139,117155,117164,117173,117183],{"__ignoreMap":68},[72,117112,117113,117115,117117],{"class":74,"line":75},[72,117114,116744],{"class":82},[72,117116,609],{"class":78},[72,117118,115342],{"class":82},[72,117120,117121,117123,117125,117127,117129,117131,117133],{"class":74,"line":370},[72,117122,113800],{"class":82},[72,117124,609],{"class":78},[72,117126,115352],{"class":82},[72,117128,114966],{"class":5642},[72,117130,609],{"class":78},[72,117132,747],{"class":362},[72,117134,570],{"class":82},[72,117136,117137],{"class":74,"line":1608},[72,117138,2828],{"emptyLinePlaceholder":490},[72,117140,117141,117143,117145,117147,117149,117151,117153],{"class":74,"line":1623},[72,117142,3453],{"class":78},[72,117144,101907],{"class":82},[72,117146,26465],{"class":78},[72,117148,32861],{"class":362},[72,117150,564],{"class":82},[72,117152,6836],{"class":362},[72,117154,31204],{"class":82},[72,117156,117157,117160,117162],{"class":74,"line":1629},[72,117158,117159],{"class":82},"    action ",[72,117161,609],{"class":78},[72,117163,115421],{"class":82},[72,117165,117166,117169,117171],{"class":74,"line":1643},[72,117167,117168],{"class":82},"    obs, reward, terminated, truncated, info ",[72,117170,609],{"class":78},[72,117172,113815],{"class":82},[72,117174,117175,117177,117179,117181],{"class":74,"line":1649},[72,117176,3529],{"class":78},[72,117178,115487],{"class":82},[72,117180,115490],{"class":78},[72,117182,115493],{"class":82},[72,117184,117185,117188,117190],{"class":74,"line":1740},[72,117186,117187],{"class":82},"        obs, info ",[72,117189,609],{"class":78},[72,117191,113805],{"class":82},[85,117193,117195],{"id":117194},"_9本章小结","9.本章小结",[15,117197,117198],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[63,117200,117203],{"className":117201,"code":117202,"language":127,"meta":68},[125],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[34,117204,117202],{"__ignoreMap":68},[15,117206,117207],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[473,117209,117210],{},"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":68,"searchDepth":370,"depth":370,"links":117212},[117213,117214,117215,117222,117226,117227,117228,117238,117239],{"id":101063,"depth":370,"text":101064},{"id":101184,"depth":370,"text":101185},{"id":101456,"depth":370,"text":101457,"children":117216},[117217,117219,117221],{"id":114024,"depth":1608,"text":117218},"terminated 和 truncated 的区别",{"id":114127,"depth":1608,"text":117220},"observation_space 和 action_space",{"id":114254,"depth":1608,"text":114255},{"id":101662,"depth":370,"text":101663,"children":117223},[117224,117225],{"id":101978,"depth":1608,"text":101978},{"id":102113,"depth":1608,"text":102113},{"id":102719,"depth":370,"text":102720},{"id":102751,"depth":370,"text":102752},{"id":102856,"depth":370,"text":102857,"children":117229},[117230,117231,117233,117234,117236,117237],{"id":116879,"depth":1608,"text":116880},{"id":116901,"depth":1608,"text":117232},"data.ctrl[:] = action 维度错误",{"id":116936,"depth":1608,"text":116937},{"id":116960,"depth":1608,"text":117235},"observation_space 维度和 obs 不一致",{"id":117010,"depth":1608,"text":117011},{"id":117042,"depth":1608,"text":117043},{"id":117078,"depth":370,"text":117079},{"id":117194,"depth":370,"text":117195},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113777,"description":68},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":4,"title":5,"body":117246,"description":486,"extension":487,"meta":117565,"navigation":490,"path":491,"seo":117566,"stem":493,"__hash__":494},{"type":7,"value":117247,"toc":117555},[117248,117250,117252,117254,117270,117274,117278,117288,117290,117292,117306,117308,117310,117312,117317,117319,117329,117331,117333,117393,117395,117400,117402,117419,117421,117455,117457,117462,117464,117466,117468,117486,117488,117493,117495,117497,117499,117513,117515,117517,117519,117553],[10,117249,13],{"id":12},[15,117251,17],{},[15,117253,20],{},[22,117255,117256,117258,117260,117268],{},[25,117257,27],{},[25,117259,30],{},[25,117261,117262,37,117264,37,117266,44],{},[34,117263,36],{},[34,117265,40],{},[34,117267,43],{},[25,117269,47],{},[15,117271,50,117272,54],{},[34,117273,53],{},[15,117275,57,117276,61],{},[34,117277,60],{},[63,117279,117280],{"className":65,"code":66,"language":67,"meta":68,"style":68},[34,117281,117282],{"__ignoreMap":68},[72,117283,117284,117286],{"class":74,"line":75},[72,117285,79],{"class":78},[72,117287,83],{"class":82},[85,117289,87],{"id":87},[15,117291,90],{},[22,117293,117294,117296,117298,117300],{},[25,117295,95],{},[25,117297,98],{},[25,117299,101],{},[25,117301,104,117302,107,117304,111],{},[34,117303,60],{},[34,117305,110],{},[15,117307,114],{},[85,117309,118],{"id":117},[15,117311,121],{},[63,117313,117315],{"className":117314,"code":126,"language":127,"meta":68},[125],[34,117316,126],{"__ignoreMap":68},[15,117318,132],{},[22,117320,117321,117323,117325,117327],{},[25,117322,137],{},[25,117324,140],{},[25,117326,143],{},[25,117328,146],{},[85,117330,149],{"id":149},[15,117332,152],{},[154,117334,117335,117345],{},[157,117336,117337],{},[160,117338,117339,117341,117343],{},[163,117340,166],{"align":165},[163,117342,169],{"align":165},[163,117344,172],{"align":165},[174,117346,117347,117355,117365,117375,117385],{},[160,117348,117349,117351,117353],{},[179,117350,181],{"align":165},[179,117352,184],{"align":165},[179,117354,187],{"align":165},[160,117356,117357,117361,117363],{},[179,117358,117359],{"align":165},[34,117360,194],{},[179,117362,197],{"align":165},[179,117364,200],{"align":165},[160,117366,117367,117371,117373],{},[179,117368,117369],{"align":165},[34,117370,207],{},[179,117372,210],{"align":165},[179,117374,213],{"align":165},[160,117376,117377,117381,117383],{},[179,117378,117379],{"align":165},[34,117380,220],{},[179,117382,223],{"align":165},[179,117384,226],{"align":165},[160,117386,117387,117389,117391],{},[179,117388,231],{"align":165},[179,117390,234],{"align":165},[179,117392,237],{"align":165},[15,117394,240],{},[63,117396,117398],{"className":117397,"code":244,"language":127,"meta":68},[125],[34,117399,244],{"__ignoreMap":68},[15,117401,249],{},[251,117403,117404,117409,117414],{},[25,117405,255,117406],{},[257,117407,259],{"href":259,"rel":117408},[261],[25,117410,264,117411],{},[257,117412,267],{"href":267,"rel":117413},[261],[25,117415,271,117416],{},[257,117417,274],{"href":274,"rel":117418},[261],[85,117420,278],{"id":278},[22,117422,117423,117427,117431,117435,117439,117443,117447,117451],{},[25,117424,117425],{},[257,117426,286],{"href":285},[25,117428,117429],{},[257,117430,292],{"href":291},[25,117432,117433],{},[257,117434,298],{"href":297},[25,117436,117437],{},[257,117438,304],{"href":303},[25,117440,117441],{},[257,117442,310],{"href":309},[25,117444,117445],{},[257,117446,316],{"href":315},[25,117448,117449],{},[257,117450,322],{"href":321},[25,117452,117453],{},[257,117454,328],{"href":327},[85,117456,331],{"id":331},[63,117458,117460],{"className":117459,"code":335,"language":127,"meta":68},[125],[34,117461,335],{"__ignoreMap":68},[15,117463,340],{},[85,117465,343],{"id":343},[15,117467,346],{},[63,117469,117470],{"className":349,"code":350,"language":351,"meta":68,"style":68},[34,117471,117472,117480],{"__ignoreMap":68},[72,117473,117474,117476,117478],{"class":74,"line":75},[72,117475,359],{"class":358},[72,117477,363],{"class":362},[72,117479,367],{"class":366},[72,117481,117482,117484],{"class":74,"line":370},[72,117483,373],{"class":362},[72,117485,367],{"class":366},[15,117487,378],{},[63,117489,117491],{"className":117490,"code":382,"language":127,"meta":68},[125],[34,117492,382],{"__ignoreMap":68},[15,117494,387],{},[85,117496,390],{"id":390},[15,117498,393],{},[22,117500,117501,117503,117505,117507,117509,117511],{},[25,117502,398],{},[25,117504,401],{},[25,117506,404],{},[25,117508,407],{},[25,117510,410],{},[25,117512,413],{},[15,117514,416],{},[85,117516,419],{"id":419},[15,117518,422],{},[22,117520,117521,117525,117529,117533,117535,117537,117543,117551],{},[25,117522,427,117523],{},[34,117524,430],{},[25,117526,433,117527],{},[34,117528,436],{},[25,117530,439,117531],{},[34,117532,60],{},[25,117534,444],{},[25,117536,447],{},[25,117538,117539,453,117541],{},[34,117540,452],{},[34,117542,456],{},[25,117544,459,117545,462,117547,465,117549],{},[34,117546,36],{},[34,117548,40],{},[34,117550,468],{},[25,117552,471],{},[473,117554,475],{},{"title":68,"searchDepth":370,"depth":370,"links":117556},[117557,117558,117559,117560,117561,117562,117563,117564],{"id":87,"depth":370,"text":87},{"id":117,"depth":370,"text":118},{"id":149,"depth":370,"text":149},{"id":278,"depth":370,"text":278},{"id":331,"depth":370,"text":331},{"id":343,"depth":370,"text":343},{"id":390,"depth":370,"text":390},{"id":419,"depth":370,"text":419},{"category":489},{"title":5,"description":486},{"id":117568,"title":117569,"body":117570,"description":23802,"extension":487,"meta":118025,"navigation":490,"path":118026,"seo":118027,"stem":118028,"__hash__":118029},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117571,"toc":118023},[117572,117575,117578,117584,118020],[10,117573,117569],{"id":117574},"_1-最常用的基本操作更新",[15,117576,117577],{},"装linux系统教程：",[15,117579,117580],{},[257,117581,117582],{"href":117582,"rel":117583},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[261],[63,117585,117589],{"className":117586,"code":117587,"language":117588,"meta":68,"style":68},"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",[34,117590,117591,117596,117601,117610,117615,117624,117629,117649,117654,117665,117670,117679,117684,117712,117717,117736,117741,117760,117764,117769,117785,117789,117794,117824,117828,117833,117849,117853,117858,117873,117877,117882,117898,117902,117907,117919,117931,117935,117940,117957,117961,117966,117984,117988,117993,118002,118006,118011],{"__ignoreMap":68},[72,117592,117593],{"class":74,"line":75},[72,117594,117595],{"class":621},"#更新相关的知识\n",[72,117597,117598],{"class":74,"line":370},[72,117599,117600],{"class":621},"# 更新软件包列表（从服务器获取最新软件信息）\n",[72,117602,117603,117605,117608],{"class":74,"line":1608},[72,117604,24998],{"class":358},[72,117606,117607],{"class":366}," apt",[72,117609,26664],{"class":366},[72,117611,117612],{"class":74,"line":1623},[72,117613,117614],{"class":621},"# 升级所有可更新的软件包（不删除旧包）\n",[72,117616,117617,117619,117621],{"class":74,"line":1629},[72,117618,24998],{"class":358},[72,117620,117607],{"class":366},[72,117622,117623],{"class":366}," upgrade\n",[72,117625,117626],{"class":74,"line":1643},[72,117627,117628],{"class":621},"#更新和升级软件包\n",[72,117630,117631,117633,117635,117638,117640,117642,117644,117647],{"class":74,"line":1649},[72,117632,24998],{"class":358},[72,117634,117607],{"class":366},[72,117636,117637],{"class":366}," update",[72,117639,26612],{"class":82},[72,117641,24998],{"class":358},[72,117643,117607],{"class":366},[72,117645,117646],{"class":366}," upgrade",[72,117648,101396],{"class":362},[72,117650,117651],{"class":74,"line":1740},[72,117652,117653],{"class":621},"#列出可更新的软件包及版本信息\n",[72,117655,117656,117659,117662],{"class":74,"line":1746},[72,117657,117658],{"class":358},"apt",[72,117660,117661],{"class":366}," list",[72,117663,117664],{"class":362}," --upgradable\n",[72,117666,117667],{"class":74,"line":1758},[72,117668,117669],{"class":621},"#彻底升级（处理依赖关系，可能删除旧包）\n",[72,117671,117672,117674,117676],{"class":74,"line":2041},[72,117673,24998],{"class":358},[72,117675,117607],{"class":366},[72,117677,117678],{"class":366}," full-upgrade\n",[72,117680,117681],{"class":74,"line":2046},[72,117682,117683],{"class":621},"#设置指定版本\n",[72,117685,117686,117688,117690,117692,117694,117697,117699,117701,117703,117705,117708,117710],{"class":74,"line":2052},[72,117687,24998],{"class":358},[72,117689,117607],{"class":366},[72,117691,24256],{"class":366},[72,117693,29324],{"class":78},[72,117695,117696],{"class":366},"package_nam",[72,117698,637],{"class":82},[72,117700,1514],{"class":78},[72,117702,609],{"class":366},[72,117704,1464],{"class":78},[72,117706,117707],{"class":366},"version_numbe",[72,117709,1224],{"class":82},[72,117711,51725],{"class":78},[72,117713,117714],{"class":74,"line":2057},[72,117715,117716],{"class":621},"#只安装软件包不升级\n",[72,117718,117719,117721,117723,117725,117727,117729,117731,117733],{"class":74,"line":2071},[72,117720,24998],{"class":358},[72,117722,117607],{"class":366},[72,117724,24256],{"class":366},[72,117726,29324],{"class":78},[72,117728,117696],{"class":366},[72,117730,637],{"class":82},[72,117732,1514],{"class":78},[72,117734,117735],{"class":362}," --no-upgrade\n",[72,117737,117738],{"class":74,"line":2076},[72,117739,117740],{"class":621},"#只升级，不存在就不安装\n",[72,117742,117743,117745,117747,117749,117751,117753,117755,117757],{"class":74,"line":2082},[72,117744,24998],{"class":358},[72,117746,117607],{"class":366},[72,117748,24256],{"class":366},[72,117750,29324],{"class":78},[72,117752,117696],{"class":366},[72,117754,637],{"class":82},[72,117756,1514],{"class":78},[72,117758,117759],{"class":362}," --only-upgrade\n",[72,117761,117762],{"class":74,"line":2103},[72,117763,2828],{"emptyLinePlaceholder":490},[72,117765,117766],{"class":74,"line":2108},[72,117767,117768],{"class":621},"#安装指定的软件命令\n",[72,117770,117771,117773,117775,117777,117779,117781,117783],{"class":74,"line":2122},[72,117772,24998],{"class":358},[72,117774,117607],{"class":366},[72,117776,24256],{"class":366},[72,117778,29324],{"class":78},[72,117780,117696],{"class":366},[72,117782,637],{"class":82},[72,117784,51725],{"class":78},[72,117786,117787],{"class":74,"line":2127},[72,117788,2828],{"emptyLinePlaceholder":490},[72,117790,117791],{"class":74,"line":2156},[72,117792,117793],{"class":621},"#安装多个软件包\n",[72,117795,117796,117798,117800,117802,117804,117807,117810,117812,117814,117817,117819,117821],{"class":74,"line":2161},[72,117797,24998],{"class":358},[72,117799,117607],{"class":366},[72,117801,24256],{"class":366},[72,117803,29324],{"class":78},[72,117805,117806],{"class":366},"package_",[72,117808,117809],{"class":78},"1>",[72,117811,29324],{"class":78},[72,117813,117806],{"class":366},[72,117815,117816],{"class":78},"2>",[72,117818,29324],{"class":78},[72,117820,117806],{"class":366},[72,117822,117823],{"class":78},"3>\n",[72,117825,117826],{"class":74,"line":2178},[72,117827,2828],{"emptyLinePlaceholder":490},[72,117829,117830],{"class":74,"line":2183},[72,117831,117832],{"class":621},"#更新指定的软件命令\n",[72,117834,117835,117837,117839,117841,117843,117845,117847],{"class":74,"line":2188},[72,117836,24998],{"class":358},[72,117838,117607],{"class":366},[72,117840,117637],{"class":366},[72,117842,29324],{"class":78},[72,117844,117696],{"class":366},[72,117846,637],{"class":82},[72,117848,51725],{"class":78},[72,117850,117851],{"class":74,"line":2193},[72,117852,2828],{"emptyLinePlaceholder":490},[72,117854,117855],{"class":74,"line":2207},[72,117856,117857],{"class":621},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[72,117859,117860,117862,117865,117867,117869,117871],{"class":74,"line":2212},[72,117861,117658],{"class":358},[72,117863,117864],{"class":366}," show",[72,117866,29324],{"class":78},[72,117868,117696],{"class":366},[72,117870,637],{"class":82},[72,117872,51725],{"class":78},[72,117874,117875],{"class":74,"line":3005},[72,117876,2828],{"emptyLinePlaceholder":490},[72,117878,117879],{"class":74,"line":3019},[72,117880,117881],{"class":621},"#删除软件包命令\n",[72,117883,117884,117886,117888,117890,117892,117894,117896],{"class":74,"line":3027},[72,117885,24998],{"class":358},[72,117887,117607],{"class":366},[72,117889,26501],{"class":366},[72,117891,29324],{"class":78},[72,117893,117696],{"class":366},[72,117895,637],{"class":82},[72,117897,51725],{"class":78},[72,117899,117900],{"class":74,"line":3032},[72,117901,2828],{"emptyLinePlaceholder":490},[72,117903,117904],{"class":74,"line":3038},[72,117905,117906],{"class":621},"# 清理旧版本和缓存（释放磁盘空间）\n",[72,117908,117909,117911,117913,117916],{"class":74,"line":3044},[72,117910,24998],{"class":358},[72,117912,117607],{"class":366},[72,117914,117915],{"class":366}," autoremove",[72,117917,117918],{"class":621},"  # 删除不再需要的依赖和库文件\n",[72,117920,117921,117923,117925,117928],{"class":74,"line":3049},[72,117922,24998],{"class":358},[72,117924,117607],{"class":366},[72,117926,117927],{"class":366}," clean",[72,117929,117930],{"class":621},"       # 清理下载的缓存包\n",[72,117932,117933],{"class":74,"line":8374},[72,117934,2828],{"emptyLinePlaceholder":490},[72,117936,117937],{"class":74,"line":8398},[72,117938,117939],{"class":621},"#移除软件包及配置文件\n",[72,117941,117942,117944,117946,117949,117951,117953,117955],{"class":74,"line":8403},[72,117943,24998],{"class":358},[72,117945,117607],{"class":366},[72,117947,117948],{"class":366}," purge",[72,117950,29324],{"class":78},[72,117952,117696],{"class":366},[72,117954,637],{"class":82},[72,117956,51725],{"class":78},[72,117958,117959],{"class":74,"line":8409},[72,117960,2828],{"emptyLinePlaceholder":490},[72,117962,117963],{"class":74,"line":8436},[72,117964,117965],{"class":621},"#查找软件包命令\n",[72,117967,117968,117970,117972,117975,117977,117980,117982],{"class":74,"line":8441},[72,117969,24998],{"class":358},[72,117971,117607],{"class":366},[72,117973,117974],{"class":366}," search",[72,117976,29324],{"class":78},[72,117978,117979],{"class":366},"keywor",[72,117981,868],{"class":82},[72,117983,51725],{"class":78},[72,117985,117986],{"class":74,"line":8447},[72,117987,2828],{"emptyLinePlaceholder":490},[72,117989,117990],{"class":74,"line":8459},[72,117991,117992],{"class":621},"#列出所有已安装的包\n",[72,117994,117995,117997,117999],{"class":74,"line":8471},[72,117996,117658],{"class":358},[72,117998,117661],{"class":366},[72,118000,118001],{"class":362}," --installed\n",[72,118003,118004],{"class":74,"line":8483},[72,118005,2828],{"emptyLinePlaceholder":490},[72,118007,118008],{"class":74,"line":10142},[72,118009,118010],{"class":621},"#列出所有已安装的包的版本信息\n",[72,118012,118013,118015,118017],{"class":74,"line":10167},[72,118014,117658],{"class":358},[72,118016,117661],{"class":366},[72,118018,118019],{"class":362}," --all-versions\n",[473,118021,118022],{},"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":68,"searchDepth":370,"depth":370,"links":118024},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117569,"description":23802},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":118031,"title":118032,"body":118033,"description":23802,"extension":487,"meta":118774,"navigation":490,"path":118775,"seo":118776,"stem":118777,"__hash__":118778},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":118034,"toc":118761},[118035,118038,118042,118045,118051,118055,118059,118065,118070,118075,118080,118085,118090,118093,118096,118099,118102,118106,118109,118114,118117,118122,118125,118130,118137,118140,118143,118146,118149,118152,118163,118167,118171,118176,118181,118185,118190,118194,118199,118203,118207,118212,118215,118260,118265,118269,118273,118278,118284,118289,118299,118304,118314,118319,118324,118351,118355,118358,118363,118366,118391,118395,118400,118403,118408,118413,118433,118438,118441,118456,118460,118513,118516,118521,118525,118528,118543,118546,118549,118554,118558,118562,118565,118569,118573,118576,118581,118586,118590,118597,118605,118608,118615,118620,118625,118628,118633,118640,118645,118652,118656,118658,118663,118667,118670,118673,118678,118681,118686,118689,118694,118699,118704,118708,118713,118717,118758],[10,118036,118032],{"id":118037},"_2-linux装机教程",[85,118039,118041],{"id":118040},"_21-实体机","2.1 实体机",[15,118043,118044],{},"使用清华源：（Ubuntu24.04）",[15,118046,118047],{},[257,118048,118049],{"href":118049,"rel":118050},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[261],[85,118052,118054],{"id":118053},"_22-普通虚拟机","2.2 普通虚拟机",[531,118056,118058],{"id":118057},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[15,118060,118061],{},[257,118062,118063],{"href":118063,"rel":118064},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[261],[15,118066,118067],{},[1891,118068],{"alt":68,"src":118069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[15,118071,118072],{},[1891,118073],{"alt":68,"src":118074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[15,118076,118077],{},[1891,118078],{"alt":68,"src":118079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[15,118081,118082],{},[1891,118083],{"alt":68,"src":118084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[15,118086,118087],{},[1891,118088],{"alt":68,"src":118089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[15,118091,118092],{},"内存4G（4096MB）；",[15,118094,118095],{},"CPU给4个核；",[15,118097,118098],{},"硬盘动态分配60G；",[15,118100,118101],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[531,118103,118105],{"id":118104},"_222-安装ubuntu","2.2.2 安装Ubuntu",[15,118107,118108],{},"按照1.1的步骤下载Ubuntu",[15,118110,118111],{},[1891,118112],{"alt":68,"src":118113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[15,118115,118116],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[15,118118,118119],{},[1891,118120],{"alt":68,"src":118121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[15,118123,118124],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[15,118126,118127],{},[1891,118128],{"alt":68,"src":118129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[15,118131,118132,118133,118136],{},"选择“正常安装”(找不到都用Alt+F7)， ",[707,118134,118135],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[15,118138,118139],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[15,118141,118142],{},"将改动写入磁盘吗 继续",[15,118144,118145],{},"选择东八区（shanghai，大致在地图上点一下），继续",[15,118147,118148],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[15,118150,118151],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[15,118153,118154,118155,118158,118159,118162],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[707,118156,118157],{},"除了"," 选不发送系统信息与不升级之外， ",[707,118160,118161],{},"其它"," 都跳过或前进）",[531,118164,118166],{"id":118165},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[22423,118168,118170],{"id":118169},"_2231-全屏","2.2.3.1 全屏",[15,118172,118173],{},[1891,118174],{"alt":68,"src":118175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[15,118177,118178],{},[1891,118179],{"alt":68,"src":118180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[22423,118182,118184],{"id":118183},"_2232-文件交换","2.2.3.2 文件交换",[15,118186,118187],{},[1891,118188],{"alt":68,"src":118189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[22423,118191,118193],{"id":118192},"_2233-新建文本文档","2.2.3.3 新建文本文档",[15,118195,118196],{},[1891,118197],{"alt":68,"src":118198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[85,118200,118202],{"id":118201},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[531,118204,118206],{"id":118205},"_231-简介与优缺点","2.3.1 简介与优缺点",[22,118208,118209],{},[25,118210,118211],{},"什么情况下推荐？",[15,118213,118214],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[22,118216,118217],{"start":370},[25,118218,118219,118220],{},"优缺点：",[22,118221,118222,118252],{},[25,118223,118224,118225],{},"优点：",[22,118226,118227,118230,118237,118240,118243,118246,118249],{},[25,118228,118229],{},"WSL2是最好的Linux发行版;(bushi)",[25,118231,118232,118233,118236],{},"性能损耗极低。且比在Windows上跑深度性能 ",[707,118234,118235],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[25,118238,118239],{},"非常方便调用USB设备，可以USB直通;",[25,118241,118242],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[25,118244,118245],{},"非常方便Win与WSL2互相传文件等协同操作;",[25,118247,118248],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[25,118250,118251],{},"非常方便使用Windows的VScode远程开发;",[25,118253,118254,118255],{},"缺点：",[22,118256,118257],{},[25,118258,118259],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[15,118261,118262],{},[1891,118263],{"alt":68,"src":118264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[531,118266,118268],{"id":118267},"_232-安装教程","2.3.2 安装教程",[22423,118270,118272],{"id":118271},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[22,118274,118275],{},[25,118276,118277],{},"方法一(图形界面)",[15,118279,118280,118281,25040],{},"用Win+R输入",[34,118282,118283],{},"appwiz.cpl",[15,118285,118286],{},[1891,118287],{"alt":68,"src":118288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[15,118290,118291,118292,118295,118296,26895],{},"点击OK进入 ",[707,118293,118294],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[707,118297,118298],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[15,118300,118301],{},[1891,118302],{"alt":68,"src":118303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[15,118305,118306,118307,101432,118310,118313],{},"选择 ",[707,118308,118309],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[707,118311,118312],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[15,118315,118316],{},[1891,118317],{"alt":68,"src":118318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[22,118320,118321],{"start":370},[25,118322,118323],{},"方法二(命令行)",[63,118325,118329],{"className":118326,"code":118327,"language":118328,"meta":68,"style":68},"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",[34,118330,118331,118336,118341,118346],{"__ignoreMap":68},[72,118332,118333],{"class":74,"line":75},[72,118334,118335],{},"# 开启 Linux 子系统\n",[72,118337,118338],{"class":74,"line":370},[72,118339,118340],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[72,118342,118343],{"class":74,"line":1608},[72,118344,118345],{},"# 开启虚拟机平台\n",[72,118347,118348],{"class":74,"line":1623},[72,118349,118350],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[22423,118352,118354],{"id":118353},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[15,118356,118357],{},"用管理员权限打开powershell",[15,118359,118360],{},[1891,118361],{"alt":68,"src":118362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[15,118364,118365],{},"升级WSL并设置默认版本为WSL2",[63,118367,118369],{"className":118326,"code":118368,"language":118328,"meta":68,"style":68},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[34,118370,118371,118376,118381,118386],{"__ignoreMap":68},[72,118372,118373],{"class":74,"line":75},[72,118374,118375],{},"# 更新 wsl\n",[72,118377,118378],{"class":74,"line":370},[72,118379,118380],{},"wsl --update\n",[72,118382,118383],{"class":74,"line":1608},[72,118384,118385],{},"# 将 wsl 版本设置为 wsl2\n",[72,118387,118388],{"class":74,"line":1623},[72,118389,118390],{},"wsl --set-default-version 2\n",[22423,118392,118394],{"id":118393},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[22,118396,118397],{},[25,118398,118399],{},"方式一(商店下载)",[15,118401,118402],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[15,118404,118405],{},[1891,118406],{"alt":68,"src":118407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[22,118409,118410],{"start":370},[25,118411,118412],{},"方式二(命令行安装)",[63,118414,118416],{"className":118326,"code":118415,"language":118328,"meta":68,"style":68},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[34,118417,118418,118423,118428],{"__ignoreMap":68},[72,118419,118420],{"class":74,"line":75},[72,118421,118422],{},"# 列出可安装的 Linux 版本\n",[72,118424,118425],{"class":74,"line":370},[72,118426,118427],{},"#（需要科学手段）\n",[72,118429,118430],{"class":74,"line":1608},[72,118431,118432],{},"wsl --list --online\n",[15,118434,118435],{},[1891,118436],{"alt":68,"src":118437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[15,118439,118440],{},"选择对应发行版并安装",[63,118442,118444],{"className":118326,"code":118443,"language":118328,"meta":68,"style":68},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[34,118445,118446,118451],{"__ignoreMap":68},[72,118447,118448],{"class":74,"line":75},[72,118449,118450],{},"# Ubuntu安装完毕后需要重启系统\n",[72,118452,118453],{"class":74,"line":370},[72,118454,118455],{},"wsl --install -d Ubuntu-24.04\n",[22423,118457,118459],{"id":118458},"_2324-查看系统状态","2.3.2.4 查看系统状态",[63,118461,118463],{"className":118326,"code":118462,"language":118328,"meta":68,"style":68},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[34,118464,118465,118470,118475,118480,118485,118489,118493,118498,118503,118508],{"__ignoreMap":68},[72,118466,118467],{"class":74,"line":75},[72,118468,118469],{},"# 查看 wsl\n",[72,118471,118472],{"class":74,"line":370},[72,118473,118474],{},"wsl -l\n",[72,118476,118477],{"class":74,"line":1608},[72,118478,118479],{},"# 查看 wsl 运行版本或模式\n",[72,118481,118482],{"class":74,"line":1623},[72,118483,118484],{},"wsl -l -v\n",[72,118486,118487],{"class":74,"line":1629},[72,118488,2828],{"emptyLinePlaceholder":490},[72,118490,118491],{"class":74,"line":1643},[72,118492,2828],{"emptyLinePlaceholder":490},[72,118494,118495],{"class":74,"line":1649},[72,118496,118497],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[72,118499,118500],{"class":74,"line":1740},[72,118501,118502],{},"wsl --set-version \u003Cdistro> 2\n",[72,118504,118505],{"class":74,"line":1746},[72,118506,118507],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[72,118509,118510],{"class":74,"line":1758},[72,118511,118512],{},"wsl --unregister \u003Cdistro>\n",[15,118514,118515],{},"输出Version为2即正常",[15,118517,118518],{},[1891,118519],{"alt":68,"src":118520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[22423,118522,118524],{"id":118523},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[15,118526,118527],{},"直接在Powershell里输入wsl命令进入子系统",[63,118529,118531],{"className":118326,"code":118530,"language":118328,"meta":68,"style":68},"# 进入子系统\nwsl\n",[34,118532,118533,118538],{"__ignoreMap":68},[72,118534,118535],{"class":74,"line":75},[72,118536,118537],{},"# 进入子系统\n",[72,118539,118540],{"class":74,"line":370},[72,118541,118542],{},"wsl\n",[15,118544,118545],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[15,118547,118548],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[15,118550,118551],{},[1891,118552],{"alt":68,"src":118553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[531,118555,118557],{"id":118556},"_233-配置各种环境","2.3.3 配置各种环境",[22423,118559,118561],{"id":118560},"_2331-换源","2.3.3.1 换源",[15,118563,118564],{},"(同实体机LINUX，往下找教程)",[22423,118566,118568],{"id":118567},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[23335,118570,118572],{"id":118571},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[15,118574,118575],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[15,118577,118578],{},[1891,118579],{"alt":68,"src":118580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[15,118582,118583],{},[1891,118584],{"alt":68,"src":118585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[23335,118587,118589],{"id":118588},"_23322-cuda","2.3.3.2.2 CUDA",[15,118591,118592,118593],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[257,118594,118595],{"href":118595,"rel":118596},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[261],[15,118598,118599,118602],{},[1891,118600],{"alt":68,"src":118601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[1891,118603],{"alt":68,"src":118604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[15,118606,118607],{},"在下方的网站，选择合适的版本。",[15,118609,118610,118611],{},"WSL2 专属 CUDA 指南：",[257,118612,118613],{"href":118613,"rel":118614},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[261],[15,118616,118617],{},[707,118618,118619],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[15,118621,118622],{},[1891,118623],{"alt":68,"src":118624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[15,118626,118627],{},"挨行敲一遍",[15,118629,118630],{},[1891,118631],{"alt":68,"src":118632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[15,118634,118635,118636,118639],{},"敲完后，输入",[34,118637,118638],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[15,118641,118642],{},[1891,118643],{"alt":68,"src":118644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[15,118646,118647,118648,118651],{},"（请详看下方教程的",[707,118649,118650],{},"安装CUDA的配置环境来看","如何配置环境）",[23335,118653,118655],{"id":118654},"_23323-cudnn","2.3.3.2.3 cuDNN",[15,118657,118564],{},[15,118659,118660],{},[1891,118661],{"alt":68,"src":118662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[22423,118664,118666],{"id":118665},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[15,118668,118669],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[15,118671,118672],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[15,118674,118675],{},[1891,118676],{"alt":68,"src":118677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[15,118679,118680],{},"连接WSL2",[15,118682,118683],{},[1891,118684],{"alt":68,"src":118685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[15,118687,118688],{},"远程开发成功。",[15,118690,118691],{},[1891,118692],{"alt":68,"src":118693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[15,118695,118696],{},[1891,118697],{"alt":68,"src":118698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[15,118700,118701],{},[1891,118702],{"alt":68,"src":118703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[22423,118705,118707],{"id":118706},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[15,118709,118710],{},[1891,118711],{"alt":68,"src":118712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[22423,118714,118716],{"id":118715},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[63,118718,118720],{"className":117586,"code":118719,"language":117588,"meta":68,"style":68},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[34,118721,118722,118730,118738,118749,118753],{"__ignoreMap":68},[72,118723,118724,118726,118728],{"class":74,"line":75},[72,118725,24998],{"class":358},[72,118727,117607],{"class":366},[72,118729,26664],{"class":366},[72,118731,118732,118734,118736],{"class":74,"line":370},[72,118733,24998],{"class":358},[72,118735,117607],{"class":366},[72,118737,117623],{"class":366},[72,118739,118740,118742,118744,118746],{"class":74,"line":1608},[72,118741,24998],{"class":358},[72,118743,117607],{"class":366},[72,118745,24256],{"class":366},[72,118747,118748],{"class":366}," mesa-utils\n",[72,118750,118751],{"class":74,"line":1623},[72,118752,2828],{"emptyLinePlaceholder":490},[72,118754,118755],{"class":74,"line":1629},[72,118756,118757],{"class":621},"#然后重启wsl2即可\n",[473,118759,118760],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":68,"searchDepth":370,"depth":370,"links":118762},[118763,118764,118769],{"id":118040,"depth":370,"text":118041},{"id":118053,"depth":370,"text":118054,"children":118765},[118766,118767,118768],{"id":118057,"depth":1608,"text":118058},{"id":118104,"depth":1608,"text":118105},{"id":118165,"depth":1608,"text":118166},{"id":118201,"depth":370,"text":118202,"children":118770},[118771,118772,118773],{"id":118205,"depth":1608,"text":118206},{"id":118267,"depth":1608,"text":118268},{"id":118556,"depth":1608,"text":118557},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":118032,"description":23802},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118780,"title":118781,"body":118782,"description":23802,"extension":487,"meta":121718,"navigation":490,"path":121719,"seo":121720,"stem":121721,"__hash__":121722},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":118783,"toc":121690},[118784,118787,118791,118797,118801,118807,118811,118999,119002,119007,119011,119015,119018,119021,119027,119032,119035,119038,119043,119076,119081,119085,119162,119165,119170,119174,119177,119216,119219,119228,119246,119251,119258,119375,119380,119383,119410,119415,119419,119428,119478,119485,119489,119492,119506,119513,119547,119552,119556,119579,119582,119587,119591,119594,119597,119600,119642,119646,119649,119652,119693,119697,119701,119704,119709,119714,119717,119740,119743,119751,119756,119759,119764,119769,119772,119777,119781,119786,119809,119814,119876,119884,119889,119894,119897,119902,119905,119910,119915,119933,119938,119944,119949,119963,119967,119970,119973,119976,120019,120022,120027,120128,120131,120136,120140,120144,120181,120185,120189,120193,120239,120243,120288,120292,120299,120307,120362,120365,120442,120445,120468,120472,120475,120480,120485,120493,120496,120501,120506,120511,120514,120519,120528,120531,120536,120539,120610,120615,120618,120623,120626,120631,120634,120639,120642,120647,120652,120655,120730,120733,120746,120751,120754,120768,120771,120800,120805,120834,120837,120842,120846,120851,120860,120863,120868,120871,120876,120879,120882,120887,120890,120895,120900,120903,120908,120911,121036,121041,121071,121074,121079,121084,121101,121104,121147,121150,121177,121182,121195,121338,121342,121347,121361,121364,121415,121418,121448,121451,121467,121472,121486,121489,121556,121561,121570,121575,121578,121590,121595,121602,121626,121629,121634,121637,121656,121661,121668,121680,121687],[10,118785,118781],{"id":118786},"_3-安装必备配置",[85,118788,118790],{"id":118789},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[63,118792,118795],{"className":118793,"code":118794,"language":127},[125],"  打开下方网站（注意，该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",[34,118796,118794],{"__ignoreMap":68},[531,118798,118800],{"id":118799},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[63,118802,118805],{"className":118803,"code":118804,"language":127},[125],"  输入以下命令\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",[34,118806,118804],{"__ignoreMap":68},[531,118808,118810],{"id":118809},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[63,118812,118816],{"className":118813,"code":118814,"language":118815,"meta":68,"style":68},"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",[34,118817,118818,118826,118837,118849,118863,118867,118877,118882,118886,118890,118895,118899,118911,118915,118920,118924,118935,118939,118955,118959,118970,118974,118979,118983,118991],{"__ignoreMap":68},[72,118819,118820,118822,118824],{"class":74,"line":75},[72,118821,24998],{"class":358},[72,118823,117607],{"class":366},[72,118825,26664],{"class":366},[72,118827,118828,118830,118832,118834],{"class":74,"line":370},[72,118829,24998],{"class":358},[72,118831,117607],{"class":366},[72,118833,24256],{"class":366},[72,118835,118836],{"class":366}," vim\n",[72,118838,118839,118841,118844,118846],{"class":74,"line":1608},[72,118840,24998],{"class":358},[72,118842,118843],{"class":366}," rm",[72,118845,25747],{"class":362},[72,118847,118848],{"class":366}," \u002Fetc\u002Fapt\u002Fsources.list\n",[72,118850,118851,118853,118855,118857,118860],{"class":74,"line":1623},[72,118852,24998],{"class":358},[72,118854,118843],{"class":366},[72,118856,25747],{"class":362},[72,118858,118859],{"class":366}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[72,118861,118862],{"class":362},"**\n",[72,118864,118865],{"class":74,"line":1629},[72,118866,2828],{"emptyLinePlaceholder":490},[72,118868,118869,118871,118874],{"class":74,"line":1643},[72,118870,24998],{"class":358},[72,118872,118873],{"class":366}," vim",[72,118875,118876],{"class":366}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[72,118878,118879],{"class":74,"line":1649},[72,118880,118881],{"class":366},"```\n",[72,118883,118884],{"class":74,"line":1740},[72,118885,2828],{"emptyLinePlaceholder":490},[72,118887,118888],{"class":74,"line":1746},[72,118889,2828],{"emptyLinePlaceholder":490},[72,118891,118892],{"class":74,"line":1758},[72,118893,118894],{"class":358},"选择好Ubuntu版本后，复制下方的内容。\n",[72,118896,118897],{"class":74,"line":2041},[72,118898,2828],{"emptyLinePlaceholder":490},[72,118900,118901,118903,118906,118909],{"class":74,"line":2046},[72,118902,781],{"class":78},[72,118904,118905],{"class":366},"[](",[72,118907,118908],{"class":358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[72,118910,570],{"class":366},[72,118912,118913],{"class":74,"line":2052},[72,118914,2828],{"emptyLinePlaceholder":490},[72,118916,118917],{"class":74,"line":2057},[72,118918,118919],{"class":358},"粘贴进去\n",[72,118921,118922],{"class":74,"line":2071},[72,118923,2828],{"emptyLinePlaceholder":490},[72,118925,118926,118928,118930,118933],{"class":74,"line":2076},[72,118927,781],{"class":78},[72,118929,118905],{"class":366},[72,118931,118932],{"class":358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[72,118934,570],{"class":366},[72,118936,118937],{"class":74,"line":2082},[72,118938,2828],{"emptyLinePlaceholder":490},[72,118940,118941,118944,118947,118950,118952],{"class":74,"line":2103},[72,118942,118943],{"class":358},"按一下ESC，然后英文冒号，输入",[72,118945,118946],{"class":366}," `",[72,118948,118949],{"class":358},":wq!",[72,118951,1526],{"class":366},[72,118953,118954],{"class":358},"然后回车\n",[72,118956,118957],{"class":74,"line":2108},[72,118958,2828],{"emptyLinePlaceholder":490},[72,118960,118961,118963,118965,118968],{"class":74,"line":2122},[72,118962,781],{"class":78},[72,118964,118905],{"class":366},[72,118966,118967],{"class":358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[72,118969,570],{"class":366},[72,118971,118972],{"class":74,"line":2127},[72,118973,2828],{"emptyLinePlaceholder":490},[72,118975,118976],{"class":74,"line":2156},[72,118977,118978],{"class":358},"输入以下命令\n",[72,118980,118981],{"class":74,"line":2161},[72,118982,2828],{"emptyLinePlaceholder":490},[72,118984,118985,118988],{"class":74,"line":2178},[72,118986,118987],{"class":366},"```",[72,118989,118990],{"class":358},"Bash\n",[72,118992,118993,118995,118997],{"class":74,"line":2183},[72,118994,24998],{"class":358},[72,118996,117607],{"class":366},[72,118998,26664],{"class":366},[15,119000,119001],{},"这里被替换成对应学校则成功",[15,119003,119004],{},[1891,119005],{"alt":68,"src":119006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[85,119008,119010],{"id":119009},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[531,119012,119014],{"id":119013},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[15,119016,119017],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[15,119019,119020],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[15,119022,119023],{},[257,119024,119025],{"href":119025,"rel":119026},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[261],[15,119028,119029],{},[1891,119030],{"alt":68,"src":119031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[15,119033,119034],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[15,119036,119037],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[15,119039,119040],{},[1891,119041],{"alt":68,"src":119042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[63,119044,119046],{"className":117586,"code":119045,"language":117588,"meta":68,"style":68},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[34,119047,119048,119053,119060,119065],{"__ignoreMap":68},[72,119049,119050],{"class":74,"line":75},[72,119051,119052],{"class":621},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[72,119054,119055,119057],{"class":74,"line":370},[72,119056,373],{"class":362},[72,119058,119059],{"class":366}," ~\u002FDownloads\n",[72,119061,119062],{"class":74,"line":1608},[72,119063,119064],{"class":621},"#下方chrome安装包名不一定是这个，根据名字来看\n",[72,119066,119067,119069,119071,119073],{"class":74,"line":1623},[72,119068,24998],{"class":358},[72,119070,117607],{"class":366},[72,119072,24256],{"class":366},[72,119074,119075],{"class":366}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[15,119077,119078],{},[1891,119079],{"alt":68,"src":119080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[531,119082,119084],{"id":119083},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[63,119086,119088],{"className":117586,"code":119087,"language":117588,"meta":68,"style":68},"# 老版\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",[34,119089,119090,119095,119103,119114,119119,119123,119128,119138,119146,119157],{"__ignoreMap":68},[72,119091,119092],{"class":74,"line":75},[72,119093,119094],{"class":621},"# 老版\n",[72,119096,119097,119099,119101],{"class":74,"line":370},[72,119098,24998],{"class":358},[72,119100,117607],{"class":366},[72,119102,26664],{"class":366},[72,119104,119105,119107,119109,119111],{"class":74,"line":1608},[72,119106,24998],{"class":358},[72,119108,117607],{"class":366},[72,119110,24256],{"class":366},[72,119112,119113],{"class":366}," neofetch\n",[72,119115,119116],{"class":74,"line":1623},[72,119117,119118],{"class":358},"neofetch\n",[72,119120,119121],{"class":74,"line":1629},[72,119122,2828],{"emptyLinePlaceholder":490},[72,119124,119125],{"class":74,"line":1643},[72,119126,119127],{"class":621},"# 新版\n",[72,119129,119130,119132,119135],{"class":74,"line":1649},[72,119131,24998],{"class":358},[72,119133,119134],{"class":366}," add-apt-repository",[72,119136,119137],{"class":366}," ppa:zhangsongcui3371\u002Ffastfetch\n",[72,119139,119140,119142,119144],{"class":74,"line":1740},[72,119141,24998],{"class":358},[72,119143,117607],{"class":366},[72,119145,26664],{"class":366},[72,119147,119148,119150,119152,119154],{"class":74,"line":1746},[72,119149,24998],{"class":358},[72,119151,117607],{"class":366},[72,119153,24256],{"class":366},[72,119155,119156],{"class":366}," fastfetch\n",[72,119158,119159],{"class":74,"line":1758},[72,119160,119161],{"class":358},"fastfetch\n",[15,119163,119164],{},"这里显示，一共有3162个debian的程序，7个snap程序",[15,119166,119167],{},[1891,119168],{"alt":68,"src":119169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[531,119171,119173],{"id":119172},"_323-移除snap应用","3.2.3 移除snap应用",[15,119175,119176],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[63,119178,119180],{"className":117586,"code":119179,"language":117588,"meta":68,"style":68},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[34,119181,119182,119194,119205],{"__ignoreMap":68},[72,119183,119184,119186,119188,119191],{"class":74,"line":75},[72,119185,24998],{"class":358},[72,119187,26935],{"class":366},[72,119189,119190],{"class":366}," disable",[72,119192,119193],{"class":366}," snapd.service\n",[72,119195,119196,119198,119200,119202],{"class":74,"line":370},[72,119197,24998],{"class":358},[72,119199,26935],{"class":366},[72,119201,119190],{"class":366},[72,119203,119204],{"class":366}," snapd.socket\n",[72,119206,119207,119209,119211,119213],{"class":74,"line":1608},[72,119208,24998],{"class":358},[72,119210,26935],{"class":366},[72,119212,119190],{"class":366},[72,119214,119215],{"class":366}," snapd.seeded.service\n",[15,119217,119218],{},"然后查看snap应用列表",[15,119220,119221,119222,119227],{},"根据你安装的选择不同（最小安装或普通安装），有",[257,119223,119226],{"href":119224,"rel":119225},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[261],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[63,119229,119231],{"className":117586,"code":119230,"language":117588,"meta":68,"style":68},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[34,119232,119233,119238],{"__ignoreMap":68},[72,119234,119235],{"class":74,"line":75},[72,119236,119237],{"class":621},"# 查询当前系统上snap安装了哪些app\n",[72,119239,119240,119243],{"class":74,"line":370},[72,119241,119242],{"class":358},"snap",[72,119244,119245],{"class":366}," list\n",[15,119247,119248],{},[1891,119249],{"alt":68,"src":119250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[15,119252,119253,119254,119257],{},"卸载掉图中所有应用，按照 ",[707,119255,119256],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[63,119259,119261],{"className":117586,"code":119260,"language":117588,"meta":68,"style":68},"#移除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",[34,119262,119263,119268,119280,119285,119296,119301,119312,119317,119328,119333,119337,119342,119353,119364],{"__ignoreMap":68},[72,119264,119265],{"class":74,"line":75},[72,119266,119267],{"class":621},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[72,119269,119270,119272,119275,119277],{"class":74,"line":370},[72,119271,24998],{"class":358},[72,119273,119274],{"class":366}," snap",[72,119276,26501],{"class":366},[72,119278,119279],{"class":366}," snap-store\n",[72,119281,119282],{"class":74,"line":1608},[72,119283,119284],{"class":621},"#移除firefox浏览器\n",[72,119286,119287,119289,119291,119293],{"class":74,"line":1623},[72,119288,24998],{"class":358},[72,119290,119274],{"class":366},[72,119292,26501],{"class":366},[72,119294,119295],{"class":366}," firefox\n",[72,119297,119298],{"class":74,"line":1629},[72,119299,119300],{"class":621},"#移除gnome-42-2204\n",[72,119302,119303,119305,119307,119309],{"class":74,"line":1643},[72,119304,24998],{"class":358},[72,119306,119274],{"class":366},[72,119308,26501],{"class":366},[72,119310,119311],{"class":366}," gnome-42-2204\n",[72,119313,119314],{"class":74,"line":1649},[72,119315,119316],{"class":621},"#移除gtk-common-themes\n",[72,119318,119319,119321,119323,119325],{"class":74,"line":1740},[72,119320,24998],{"class":358},[72,119322,119274],{"class":366},[72,119324,26501],{"class":366},[72,119326,119327],{"class":366}," gtk-common-themes\n",[72,119329,119330],{"class":74,"line":1746},[72,119331,119332],{"class":621},"#移除其它...\n",[72,119334,119335],{"class":74,"line":1758},[72,119336,3102],{"class":82},[72,119338,119339],{"class":74,"line":2041},[72,119340,119341],{"class":621},"#移除core22,bare以及snapd\n",[72,119343,119344,119346,119348,119350],{"class":74,"line":2046},[72,119345,24998],{"class":358},[72,119347,119274],{"class":366},[72,119349,26501],{"class":366},[72,119351,119352],{"class":366}," core22\n",[72,119354,119355,119357,119359,119361],{"class":74,"line":2052},[72,119356,24998],{"class":358},[72,119358,119274],{"class":366},[72,119360,26501],{"class":366},[72,119362,119363],{"class":366}," bare\n",[72,119365,119366,119368,119370,119372],{"class":74,"line":2057},[72,119367,24998],{"class":358},[72,119369,119274],{"class":366},[72,119371,26501],{"class":366},[72,119373,119374],{"class":366}," snapd\n",[15,119376,119377],{},[1891,119378],{"alt":68,"src":119379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[15,119381,119382],{},"输入以下命令查看是否还有snap包",[63,119384,119386],{"className":117586,"code":119385,"language":117588,"meta":68,"style":68},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[34,119387,119388,119394,119398,119402,119406],{"__ignoreMap":68},[72,119389,119390,119392],{"class":74,"line":75},[72,119391,119242],{"class":358},[72,119393,119245],{"class":366},[72,119395,119396],{"class":74,"line":370},[72,119397,119094],{"class":621},[72,119399,119400],{"class":74,"line":1608},[72,119401,119118],{"class":358},[72,119403,119404],{"class":74,"line":1623},[72,119405,119127],{"class":621},[72,119407,119408],{"class":74,"line":1629},[72,119409,119161],{"class":358},[15,119411,119412],{},[1891,119413],{"alt":68,"src":119414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[531,119416,119418],{"id":119417},"_324-移除snap","3.2.4 移除snap",[15,119420,119421,119422,119427],{},"在删除掉",[257,119423,119426],{"href":119424,"rel":119425},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[261],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[63,119429,119431],{"className":117586,"code":119430,"language":117588,"meta":68,"style":68}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[34,119432,119433,119438,119451,119456,119467],{"__ignoreMap":68},[72,119434,119435],{"class":74,"line":75},[72,119436,119437],{"class":621}," #使用apt移除掉snap\n",[72,119439,119440,119442,119444,119446,119449],{"class":74,"line":370},[72,119441,24998],{"class":358},[72,119443,117607],{"class":366},[72,119445,117915],{"class":366},[72,119447,119448],{"class":362}," --purge",[72,119450,119374],{"class":366},[72,119452,119453],{"class":74,"line":1608},[72,119454,119455],{"class":621},"#移除snapd的一些目录\n",[72,119457,119458,119460,119462,119464],{"class":74,"line":1623},[72,119459,24998],{"class":358},[72,119461,118843],{"class":366},[72,119463,25747],{"class":362},[72,119465,119466],{"class":366}," \u002Fvar\u002Fcache\u002Fsnapd\n",[72,119468,119469,119471,119473,119475],{"class":74,"line":1629},[72,119470,24998],{"class":358},[72,119472,118843],{"class":366},[72,119474,25747],{"class":362},[72,119476,119477],{"class":366}," ~\u002Fsnap\n",[15,119479,119480,119481,119484],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[34,119482,119483],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[531,119486,119488],{"id":119487},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[15,119490,119491],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[63,119493,119495],{"className":117586,"code":119494,"language":117588,"meta":68,"style":68},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[34,119496,119497],{"__ignoreMap":68},[72,119498,119499,119501,119503],{"class":74,"line":75},[72,119500,24998],{"class":358},[72,119502,118873],{"class":366},[72,119504,119505],{"class":366}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[15,119507,119508,119509,119512],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[34,119510,119511],{},":wq"," 回车",[63,119514,119516],{"className":117586,"code":119515,"language":117588,"meta":68,"style":68},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[34,119517,119518,119525,119539],{"__ignoreMap":68},[72,119519,119520,119523],{"class":74,"line":75},[72,119521,119522],{"class":358},"Package:",[72,119524,119374],{"class":366},[72,119526,119527,119530,119533,119536],{"class":74,"line":370},[72,119528,119529],{"class":358},"Pin:",[72,119531,119532],{"class":366}," release",[72,119534,119535],{"class":366}," a=",[72,119537,119538],{"class":362},"*\n",[72,119540,119541,119544],{"class":74,"line":1608},[72,119542,119543],{"class":358},"Pin-Priority:",[72,119545,119546],{"class":362}," -10\n",[15,119548,119549],{},[1891,119550],{"alt":68,"src":119551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[531,119553,119555],{"id":119554},"_326-测试是否成功","3.2.6 测试是否成功",[63,119557,119559],{"className":117586,"code":119558,"language":117588,"meta":68,"style":68},"sudo apt update\nsudo apt install firefox\n",[34,119560,119561,119569],{"__ignoreMap":68},[72,119562,119563,119565,119567],{"class":74,"line":75},[72,119564,24998],{"class":358},[72,119566,117607],{"class":366},[72,119568,26664],{"class":366},[72,119570,119571,119573,119575,119577],{"class":74,"line":370},[72,119572,24998],{"class":358},[72,119574,117607],{"class":366},[72,119576,24256],{"class":366},[72,119578,119295],{"class":366},[15,119580,119581],{},"这里提示snapd无法被安装，就证明成功了",[15,119583,119584],{},[1891,119585],{"alt":68,"src":119586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[531,119588,119590],{"id":119589},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[15,119592,119593],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[15,119595,119596],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[15,119598,119599],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[63,119601,119603],{"className":117586,"code":119602,"language":117588,"meta":68,"style":68},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[34,119604,119605,119610,119619,119624,119632],{"__ignoreMap":68},[72,119606,119607],{"class":74,"line":75},[72,119608,119609],{"class":621},"# 添加Mozilla提供的源\n",[72,119611,119612,119614,119616],{"class":74,"line":370},[72,119613,24998],{"class":358},[72,119615,119134],{"class":366},[72,119617,119618],{"class":366}," ppa:mozillateam\u002Fppa\n",[72,119620,119621],{"class":74,"line":1608},[72,119622,119623],{"class":621},"# 安装Firefox\n",[72,119625,119626,119628,119630],{"class":74,"line":1623},[72,119627,24998],{"class":358},[72,119629,117607],{"class":366},[72,119631,26664],{"class":366},[72,119633,119634,119636,119638,119640],{"class":74,"line":1629},[72,119635,24998],{"class":358},[72,119637,117607],{"class":366},[72,119639,24256],{"class":366},[72,119641,119295],{"class":366},[531,119643,119645],{"id":119644},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[15,119647,119648],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[15,119650,119651],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[63,119653,119655],{"className":117586,"code":119654,"language":117588,"meta":68,"style":68},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[34,119656,119657,119662,119672,119680,119684],{"__ignoreMap":68},[72,119658,119659],{"class":74,"line":75},[72,119660,119661],{"class":621},"#删掉禁止安装snap的配置文件\n",[72,119663,119664,119666,119668,119670],{"class":74,"line":370},[72,119665,24998],{"class":358},[72,119667,118843],{"class":366},[72,119669,25747],{"class":362},[72,119671,119505],{"class":366},[72,119673,119674,119676,119678],{"class":74,"line":1608},[72,119675,24998],{"class":358},[72,119677,117607],{"class":366},[72,119679,26664],{"class":366},[72,119681,119682],{"class":74,"line":1623},[72,119683,2828],{"emptyLinePlaceholder":490},[72,119685,119686,119688,119690],{"class":74,"line":1629},[72,119687,24998],{"class":358},[72,119689,117607],{"class":366},[72,119691,119692],{"class":366}," dist-update\n",[85,119694,119696],{"id":119695},"_33-中文输入法","3.3 中文输入法",[531,119698,119700],{"id":119699},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[15,119702,119703],{},"官网下载搜狗输入法",[15,119705,119706],{},[1891,119707],{"alt":68,"src":119708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[15,119710,119711],{},[1891,119712],{"alt":68,"src":119713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[15,119715,119716],{},"打开终端输入如下",[63,119718,119720],{"className":117586,"code":119719,"language":117588,"meta":68,"style":68},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[34,119721,119722,119729],{"__ignoreMap":68},[72,119723,119724,119726],{"class":74,"line":75},[72,119725,373],{"class":362},[72,119727,119728],{"class":366}," ~\u002FDownloads\u002F\n",[72,119730,119731,119733,119735,119737],{"class":74,"line":370},[72,119732,24998],{"class":358},[72,119734,117607],{"class":366},[72,119736,24256],{"class":366},[72,119738,119739],{"class":366}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[15,119741,119742],{},"打开Fcitx",[15,119744,119745,119748],{},[1891,119746],{"alt":68,"src":119747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[1891,119749],{"alt":68,"src":119750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[15,119752,119753],{},[1891,119754],{"alt":68,"src":119755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[15,119757,119758],{},"添加搜狗输入法",[15,119760,119761],{},[1891,119762],{"alt":68,"src":119763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[15,119765,119766],{},[1891,119767],{"alt":68,"src":119768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[15,119770,119771],{},"将搜狗输入法设置为唯一输入法",[15,119773,119774],{},[1891,119775],{"alt":68,"src":119776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[531,119778,119780],{"id":119779},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[22,119782,119783],{},[25,119784,119785],{},"卸载旧输入法",[63,119787,119789],{"className":118813,"code":119788,"language":118815,"meta":68,"style":68},"sudo apt purge fcitx* ibus*\n",[34,119790,119791],{"__ignoreMap":68},[72,119792,119793,119795,119797,119799,119802,119804,119807],{"class":74,"line":75},[72,119794,24998],{"class":358},[72,119796,117607],{"class":366},[72,119798,117948],{"class":366},[72,119800,119801],{"class":366}," fcitx",[72,119803,1009],{"class":362},[72,119805,119806],{"class":366}," ibus",[72,119808,119538],{"class":362},[22,119810,119811],{"start":370},[25,119812,119813],{},"安装Fcitx5",[63,119815,119817],{"className":117586,"code":119816,"language":117588,"meta":68,"style":68},"# 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",[34,119818,119819,119824,119838,119842,119847,119856,119864],{"__ignoreMap":68},[72,119820,119821],{"class":74,"line":75},[72,119822,119823],{"class":621},"# Ubuntu22.04及以上、Debian12及以上\n",[72,119825,119826,119828,119830,119832,119835],{"class":74,"line":370},[72,119827,24998],{"class":358},[72,119829,117607],{"class":366},[72,119831,24256],{"class":366},[72,119833,119834],{"class":366}," fcitx5",[72,119836,119837],{"class":366}," fcitx5-chinese-addons\n",[72,119839,119840],{"class":74,"line":1608},[72,119841,2828],{"emptyLinePlaceholder":490},[72,119843,119844],{"class":74,"line":1623},[72,119845,119846],{"class":621},"# Ubuntu20.04\n",[72,119848,119849,119851,119853],{"class":74,"line":1629},[72,119850,24998],{"class":358},[72,119852,119134],{"class":366},[72,119854,119855],{"class":366}," ppa:zhsj\u002Ffcitx5\n",[72,119857,119858,119860,119862],{"class":74,"line":1643},[72,119859,24998],{"class":358},[72,119861,117607],{"class":366},[72,119863,26664],{"class":366},[72,119865,119866,119868,119870,119872,119874],{"class":74,"line":1649},[72,119867,24998],{"class":358},[72,119869,117607],{"class":366},[72,119871,24256],{"class":366},[72,119873,119834],{"class":366},[72,119875,119837],{"class":366},[22,119877,119878,119881],{"start":1608},[25,119879,119880],{},"Reboot System",[25,119882,119883],{},"启动Fcitx5",[15,119885,119886],{},[1891,119887],{"alt":68,"src":119888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[22,119890,119891],{"start":1629},[25,119892,119893],{},"修改一些设置",[15,119895,119896],{},"将Pinyin和Keyboard - English US加入到左边。",[15,119898,119899],{},[1891,119900],{"alt":68,"src":119901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[15,119903,119904],{},"添加快捷键以便于更好切换中英文",[15,119906,119907],{},[1891,119908],{"alt":68,"src":119909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[22,119911,119912],{"start":1643},[25,119913,119914],{},"重启",[63,119916,119918],{"className":118813,"code":119917,"language":118815,"meta":68,"style":68},"sudo shutdown -r now\n",[34,119919,119920],{"__ignoreMap":68},[72,119921,119922,119924,119927,119930],{"class":74,"line":75},[72,119923,24998],{"class":358},[72,119925,119926],{"class":366}," shutdown",[72,119928,119929],{"class":362}," -r",[72,119931,119932],{"class":366}," now\n",[22,119934,119935],{"start":1649},[25,119936,119937],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[15,119939,119940],{},[257,119941,119942],{"href":119942,"rel":119943},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[261],[22,119945,119946],{"start":1740},[25,119947,119948],{},"再重启",[63,119950,119951],{"className":118813,"code":119917,"language":118815,"meta":68,"style":68},[34,119952,119953],{"__ignoreMap":68},[72,119954,119955,119957,119959,119961],{"class":74,"line":75},[72,119956,24998],{"class":358},[72,119958,119926],{"class":366},[72,119960,119929],{"class":362},[72,119962,119932],{"class":366},[85,119964,119966],{"id":119965},"_34-pip3源替换","3.4 pip3源替换",[15,119968,119969],{},"非Debian系发行版需要做。",[15,119971,119972],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[15,119974,119975],{},"使用dnf的系统也可能不用做。",[63,119977,119979],{"className":117586,"code":119978,"language":117588,"meta":68,"style":68},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[34,119980,119981,119986,119993,119998,120003],{"__ignoreMap":68},[72,119982,119983],{"class":74,"line":75},[72,119984,119985],{"class":621},"# 检查是否已安装 pip\n",[72,119987,119988,119991],{"class":74,"line":370},[72,119989,119990],{"class":358},"pip3",[72,119992,26715],{"class":362},[72,119994,119995],{"class":74,"line":1608},[72,119996,119997],{"class":621},"# 如果未安装，先安装 pip3（见下方）\n",[72,119999,120000],{"class":74,"line":1623},[72,120001,120002],{"class":621},"# 配置 pip 使用清华源\n",[72,120004,120005,120007,120010,120013,120016],{"class":74,"line":1629},[72,120006,119990],{"class":358},[72,120008,120009],{"class":366}," config",[72,120011,120012],{"class":366}," set",[72,120014,120015],{"class":366}," global.index-url",[72,120017,120018],{"class":366}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[15,120020,120021],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[15,120023,120024],{},[1891,120025],{"alt":68,"src":120026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[63,120028,120030],{"className":117586,"code":120029,"language":117588,"meta":68,"style":68},"#安装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",[34,120031,120032,120037,120045,120056,120060,120065,120084,120088,120093,120105,120109,120114],{"__ignoreMap":68},[72,120033,120034],{"class":74,"line":75},[72,120035,120036],{"class":621},"#安装pip3\n",[72,120038,120039,120041,120043],{"class":74,"line":370},[72,120040,24998],{"class":358},[72,120042,117607],{"class":366},[72,120044,26664],{"class":366},[72,120046,120047,120049,120051,120053],{"class":74,"line":1608},[72,120048,24998],{"class":358},[72,120050,26498],{"class":366},[72,120052,24256],{"class":366},[72,120054,120055],{"class":366}," python3-pip\n",[72,120057,120058],{"class":74,"line":1623},[72,120059,2828],{"emptyLinePlaceholder":490},[72,120061,120062],{"class":74,"line":1629},[72,120063,120064],{"class":621},"#更新pip3\n",[72,120066,120067,120069,120071,120073,120075,120077,120080,120082],{"class":74,"line":1643},[72,120068,101294],{"class":358},[72,120070,101297],{"class":362},[72,120072,101320],{"class":366},[72,120074,24256],{"class":366},[72,120076,26852],{"class":362},[72,120078,120079],{"class":366}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[72,120081,101325],{"class":362},[72,120083,101328],{"class":366},[72,120085,120086],{"class":74,"line":1649},[72,120087,2828],{"emptyLinePlaceholder":490},[72,120089,120090],{"class":74,"line":1740},[72,120091,120092],{"class":621},"#设置pip源为清华源\n",[72,120094,120095,120097,120099,120101,120103],{"class":74,"line":1746},[72,120096,119990],{"class":358},[72,120098,120009],{"class":366},[72,120100,120012],{"class":366},[72,120102,120015],{"class":366},[72,120104,120018],{"class":366},[72,120106,120107],{"class":74,"line":1758},[72,120108,2828],{"emptyLinePlaceholder":490},[72,120110,120111],{"class":74,"line":2041},[72,120112,120113],{"class":621},"#测试\n",[72,120115,120116,120118,120120,120122,120124,120126],{"class":74,"line":2046},[72,120117,101294],{"class":358},[72,120119,101297],{"class":362},[72,120121,101320],{"class":366},[72,120123,24256],{"class":366},[72,120125,101325],{"class":362},[72,120127,101328],{"class":366},[15,120129,120130],{},"成功的话，会看到Looking后面是tsinghua字样。",[15,120132,120133],{},[1891,120134],{"alt":68,"src":120135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[85,120137,120139],{"id":120138},"_35-显卡驱动安装","3.5 显卡驱动安装",[531,120141,120143],{"id":120142},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[63,120145,120147],{"className":118813,"code":120146,"language":118815,"meta":68,"style":68},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[34,120148,120149,120154,120169,120174],{"__ignoreMap":68},[72,120150,120151],{"class":74,"line":75},[72,120152,120153],{"class":621},"# 如果是使用apt安装的驱动\n",[72,120155,120156,120158,120160,120162,120164,120167],{"class":74,"line":370},[72,120157,24998],{"class":358},[72,120159,26498],{"class":366},[72,120161,26501],{"class":366},[72,120163,119448],{"class":362},[72,120165,120166],{"class":366}," nvidia",[72,120168,119538],{"class":362},[72,120170,120171],{"class":74,"line":1608},[72,120172,120173],{"class":621},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[72,120175,120176,120178],{"class":74,"line":1623},[72,120177,24998],{"class":358},[72,120179,120180],{"class":366}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[531,120182,120184],{"id":120183},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[22423,120186,120188],{"id":120187},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[23335,120190,120192],{"id":120191},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[63,120194,120196],{"className":118813,"code":120195,"language":118815,"meta":68,"style":68},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[34,120197,120198,120203,120214,120219,120229,120234],{"__ignoreMap":68},[72,120199,120200],{"class":74,"line":75},[72,120201,120202],{"class":621},"# 安装英伟达驱动\n",[72,120204,120205,120207,120209,120211],{"class":74,"line":370},[72,120206,24998],{"class":358},[72,120208,117607],{"class":366},[72,120210,24256],{"class":366},[72,120212,120213],{"class":366}," nvidia-driver-版本号\n",[72,120215,120216],{"class":74,"line":1608},[72,120217,120218],{"class":621},"# 重启 \n",[72,120220,120221,120223,120225,120227],{"class":74,"line":1623},[72,120222,24998],{"class":358},[72,120224,119926],{"class":366},[72,120226,119929],{"class":362},[72,120228,119932],{"class":366},[72,120230,120231],{"class":74,"line":1629},[72,120232,120233],{"class":621},"# 检查驱动是否安装成功\n",[72,120235,120236],{"class":74,"line":1643},[72,120237,120238],{"class":358},"nvidia-smi\n",[23335,120240,120242],{"id":120241},"_35212-debian","3.5.2.1.2 Debian",[63,120244,120246],{"className":118813,"code":120245,"language":118815,"meta":68,"style":68},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[34,120247,120248,120252,120266,120270,120280,120284],{"__ignoreMap":68},[72,120249,120250],{"class":74,"line":75},[72,120251,120202],{"class":621},[72,120253,120254,120256,120258,120260,120263],{"class":74,"line":370},[72,120255,24998],{"class":358},[72,120257,117607],{"class":366},[72,120259,24256],{"class":366},[72,120261,120262],{"class":366}," nvidia-driver",[72,120264,120265],{"class":366}," nvidia-settings\n",[72,120267,120268],{"class":74,"line":1608},[72,120269,120218],{"class":621},[72,120271,120272,120274,120276,120278],{"class":74,"line":1623},[72,120273,24998],{"class":358},[72,120275,119926],{"class":366},[72,120277,119929],{"class":362},[72,120279,119932],{"class":366},[72,120281,120282],{"class":74,"line":1629},[72,120283,120233],{"class":621},[72,120285,120286],{"class":74,"line":1643},[72,120287,120238],{"class":358},[22423,120289,120291],{"id":120290},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[15,120293,120294,120295,120298],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[707,120296,120297],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[15,120300,120301,120302],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[23978,120303,120304],{},[707,120305,120306],{},"（也可以不禁用桌面环境，直接进行下一步。）",[63,120308,120310],{"className":118813,"code":120309,"language":118815,"meta":68,"style":68},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[34,120311,120312,120317,120327,120332,120345,120350],{"__ignoreMap":68},[72,120313,120314],{"class":74,"line":75},[72,120315,120316],{"class":621},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[72,120318,120319,120321,120324],{"class":74,"line":370},[72,120320,24998],{"class":358},[72,120322,120323],{"class":366}," telinit",[72,120325,120326],{"class":362}," 3\n",[72,120328,120329],{"class":74,"line":1608},[72,120330,120331],{"class":621},"# ubuntu 使用下方命令\n",[72,120333,120334,120336,120339,120342],{"class":74,"line":1623},[72,120335,24998],{"class":358},[72,120337,120338],{"class":366}," service",[72,120340,120341],{"class":366}," lightdm",[72,120343,120344],{"class":366}," stop\n",[72,120346,120347],{"class":74,"line":1629},[72,120348,120349],{"class":621},"# Fedora 使用下方命令\n",[72,120351,120352,120354,120356,120359],{"class":74,"line":1643},[72,120353,24998],{"class":358},[72,120355,26935],{"class":366},[72,120357,120358],{"class":366}," isolate",[72,120360,120361],{"class":366}," multi-user.target\n",[15,120363,120364],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[63,120366,120368],{"className":118813,"code":120367,"language":118815,"meta":68,"style":68},"# 编译环境+准备工作\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",[34,120369,120370,120375,120386,120391,120398,120403,120415,120420,120427,120432],{"__ignoreMap":68},[72,120371,120372],{"class":74,"line":75},[72,120373,120374],{"class":621},"# 编译环境+准备工作\n",[72,120376,120377,120379,120381,120383],{"class":74,"line":370},[72,120378,24998],{"class":358},[72,120380,117607],{"class":366},[72,120382,24256],{"class":366},[72,120384,120385],{"class":366}," build-essential\n",[72,120387,120388],{"class":74,"line":1608},[72,120389,120390],{"class":621},"# 进入到.run目录中\n",[72,120392,120393,120395],{"class":74,"line":1623},[72,120394,373],{"class":362},[72,120396,120397],{"class":366}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[72,120399,120400],{"class":74,"line":1629},[72,120401,120402],{"class":621},"# 给驱动文件增加可执行权限：\n",[72,120404,120405,120407,120409,120412],{"class":74,"line":1643},[72,120406,24998],{"class":358},[72,120408,25001],{"class":366},[72,120410,120411],{"class":366}," a+x",[72,120413,120414],{"class":366}," NVIDIA-Linux-x86_64-550.107.02.run\n",[72,120416,120417],{"class":74,"line":1649},[72,120418,120419],{"class":621},"# 然后执行安装：\n",[72,120421,120422,120424],{"class":74,"line":1740},[72,120423,24998],{"class":358},[72,120425,120426],{"class":366}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[72,120428,120429],{"class":74,"line":1746},[72,120430,120431],{"class":621},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[72,120433,120434,120436,120439],{"class":74,"line":1758},[72,120435,24998],{"class":358},[72,120437,120438],{"class":366}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[72,120440,120441],{"class":362},"  --no-opengl-files\n",[15,120443,120444],{},"安装完毕重启即可",[63,120446,120448],{"className":118813,"code":120447,"language":118815,"meta":68,"style":68},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[34,120449,120450,120454,120460,120464],{"__ignoreMap":68},[72,120451,120452],{"class":74,"line":75},[72,120453,120218],{"class":621},[72,120455,120456,120458],{"class":74,"line":370},[72,120457,24998],{"class":358},[72,120459,27069],{"class":366},[72,120461,120462],{"class":74,"line":1608},[72,120463,120233],{"class":621},[72,120465,120466],{"class":74,"line":1623},[72,120467,120238],{"class":358},[531,120469,120471],{"id":120470},"_353-安装cuda","3.5.3 安装CUDA",[15,120473,120474],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[15,120476,120477],{},[1891,120478],{"alt":68,"src":120479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[22,120481,120482],{},[25,120483,120484],{},"先查看显卡驱动所支持的最高CUDA版本",[63,120486,120487],{"className":118813,"code":120238,"language":118815,"meta":68,"style":68},[34,120488,120489],{"__ignoreMap":68},[72,120490,120491],{"class":74,"line":75},[72,120492,120238],{"class":358},[15,120494,120495],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[15,120497,120498],{},[1891,120499],{"alt":68,"src":120500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[22,120502,120503],{"start":370},[25,120504,120505],{},"下载CUDA并安装CUDA",[15,120507,118592,120508],{},[257,120509,118595],{"href":118595,"rel":120510},[261],[15,120512,120513],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[15,120515,120516],{},[1891,120517],{"alt":68,"src":120518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[15,120520,120521,120522,120527],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[257,120523,120526],{"href":120524,"rel":120525},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[261],"Vinci机器人队单片机教程","）",[15,120529,120530],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[15,120532,120533],{},[1891,120534],{"alt":68,"src":120535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[15,120537,120538],{},"将最下方框框里的命令敲入终端",[63,120540,120542],{"className":118813,"code":120541,"language":118815,"meta":68,"style":68},"# 在当前文件夹下创建一个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",[34,120543,120544,120549,120558,120563,120570,120575,120583,120588,120599,120604],{"__ignoreMap":68},[72,120545,120546],{"class":74,"line":75},[72,120547,120548],{"class":621},"# 在当前文件夹下创建一个ttt的子文件夹\n",[72,120550,120551,120553,120555],{"class":74,"line":370},[72,120552,359],{"class":358},[72,120554,363],{"class":362},[72,120556,120557],{"class":366}," .\u002Fttt\n",[72,120559,120560],{"class":74,"line":1608},[72,120561,120562],{"class":621},"# 进入ttt文件夹\n",[72,120564,120565,120567],{"class":74,"line":1623},[72,120566,373],{"class":362},[72,120568,120569],{"class":366}," ttt\n",[72,120571,120572],{"class":74,"line":1629},[72,120573,120574],{"class":621},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[72,120576,120577,120580],{"class":74,"line":1643},[72,120578,120579],{"class":358},"wget",[72,120581,120582],{"class":366}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[72,120584,120585],{"class":74,"line":1649},[72,120586,120587],{"class":621},"# 给予权限\n",[72,120589,120590,120592,120594,120596],{"class":74,"line":1740},[72,120591,24998],{"class":358},[72,120593,25001],{"class":366},[72,120595,120411],{"class":366},[72,120597,120598],{"class":366}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[72,120600,120601],{"class":74,"line":1746},[72,120602,120603],{"class":621},"# 运行脚本\n",[72,120605,120606,120608],{"class":74,"line":1758},[72,120607,24998],{"class":358},[72,120609,120598],{"class":366},[15,120611,120612],{},[1891,120613],{"alt":68,"src":120614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[15,120616,120617],{},"正在安装中：",[15,120619,120620],{},[1891,120621],{"alt":68,"src":120622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[15,120624,120625],{},"输入accept接受即可",[15,120627,120628],{},[1891,120629],{"alt":68,"src":120630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[15,120632,120633],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[15,120635,120636],{},[1891,120637],{"alt":68,"src":120638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[15,120640,120641],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[15,120643,120644],{},[1891,120645],{"alt":68,"src":120646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[22,120648,120649],{"start":1608},[25,120650,120651],{},"配置环境",[15,120653,120654],{},"根据上方确认一下路径，比如我上面红色框起来的为",[63,120656,120658],{"className":118813,"code":120657,"language":118815,"meta":68,"style":68},"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",[34,120659,120660,120676,120691],{"__ignoreMap":68},[72,120661,120662,120665,120668,120671,120674],{"class":74,"line":75},[72,120663,120664],{"class":358},"Please",[72,120666,120667],{"class":366}," make",[72,120669,120670],{"class":366}," sure",[72,120672,120673],{"class":366}," that",[72,120675,3102],{"class":82},[72,120677,120678,120680,120683,120686,120689],{"class":74,"line":370},[72,120679,52689],{"class":358},[72,120681,120682],{"class":366},"   PATH",[72,120684,120685],{"class":366}," includes",[72,120687,120688],{"class":366}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[72,120690,3102],{"class":82},[72,120692,120693,120695,120698,120700,120703,120706,120708,120711,120714,120717,120720,120722,120725,120727],{"class":74,"line":1608},[72,120694,52689],{"class":358},[72,120696,120697],{"class":366},"   LD_LIBRARY_PATH",[72,120699,120685],{"class":366},[72,120701,120702],{"class":366}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[72,120704,120705],{"class":366}," or,",[72,120707,5635],{"class":366},[72,120709,120710],{"class":366}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[72,120712,120713],{"class":366}," to",[72,120715,120716],{"class":366}," \u002Fetc\u002Fld.so.conf",[72,120718,120719],{"class":366}," and",[72,120721,27652],{"class":366},[72,120723,120724],{"class":366}," ldconfig",[72,120726,65022],{"class":366},[72,120728,120729],{"class":366}," root\n",[15,120731,120732],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[63,120734,120736],{"className":118813,"code":120735,"language":118815,"meta":68,"style":68},"which nvcc\n",[34,120737,120738],{"__ignoreMap":68},[72,120739,120740,120743],{"class":74,"line":75},[72,120741,120742],{"class":362},"which",[72,120744,120745],{"class":366}," nvcc\n",[15,120747,120748],{},[1891,120749],{"alt":68,"src":120750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[15,120752,120753],{},"所以我进行以下操作：",[63,120755,120757],{"className":118813,"code":120756,"language":118815,"meta":68,"style":68},"sudo vim ~\u002F.bashrc\n",[34,120758,120759],{"__ignoreMap":68},[72,120760,120761,120763,120765],{"class":74,"line":75},[72,120762,24998],{"class":358},[72,120764,118873],{"class":366},[72,120766,120767],{"class":366}," ~\u002F.bashrc\n",[15,120769,120770],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[63,120772,120774],{"className":118813,"code":120773,"language":118815,"meta":68,"style":68},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[34,120775,120776,120788],{"__ignoreMap":68},[72,120777,120778,120780,120783,120785],{"class":74,"line":75},[72,120779,25464],{"class":78},[72,120781,120782],{"class":82}," PATH",[72,120784,609],{"class":78},[72,120786,120787],{"class":82},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[72,120789,120790,120792,120795,120797],{"class":74,"line":370},[72,120791,25464],{"class":78},[72,120793,120794],{"class":82}," LD_LIBRARY_PATH",[72,120796,609],{"class":78},[72,120798,120799],{"class":82},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[15,120801,120802],{},[1891,120803],{"alt":68,"src":120804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[63,120806,120808],{"className":118813,"code":120807,"language":118815,"meta":68,"style":68},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[34,120809,120810,120815,120821,120826],{"__ignoreMap":68},[72,120811,120812],{"class":74,"line":75},[72,120813,120814],{"class":621},"# 刷新当前终端的环境变量\n",[72,120816,120817,120819],{"class":74,"line":370},[72,120818,101308],{"class":362},[72,120820,120767],{"class":366},[72,120822,120823],{"class":74,"line":1608},[72,120824,120825],{"class":621},"# 验证CUDA是否安装成功\n",[72,120827,120828,120831],{"class":74,"line":1623},[72,120829,120830],{"class":358},"nvcc",[72,120832,120833],{"class":362}," -V\n",[15,120835,120836],{},"出现下图这种则安装成功。",[15,120838,120839],{},[1891,120840],{"alt":68,"src":120841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[531,120843,120845],{"id":120844},"_354-安装cudnn","3.5.4 安装cuDNN",[22,120847,120848],{},[25,120849,120850],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[15,120852,120853,120854,120859],{},"前往 NVIDIA cuDNN 下载页面：",[257,120855,120858],{"href":120856,"rel":120857},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[261],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[15,120861,120862],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[15,120864,120865],{},[1891,120866],{"alt":68,"src":120867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[15,120869,120870],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[15,120872,120873],{},[1891,120874],{"alt":68,"src":120875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[15,120877,120878],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[15,120880,120881],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[15,120883,120884],{},[707,120885,120886],{},"我这里选择所有Linux X86_64最通用的办法：",[15,120888,120889],{},"下载好的：",[15,120891,120892],{},[1891,120893],{"alt":68,"src":120894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[22,120896,120897],{"start":370},[25,120898,120899],{},"安装cuDNN",[15,120901,120902],{},"找到该文件所在目录，并打开终端，cd到该目录。",[15,120904,120905],{},[1891,120906],{"alt":68,"src":120907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[15,120909,120910],{},"解压文件，并复制到对应位置完成安装",[63,120912,120914],{"className":118813,"code":120913,"language":118815,"meta":68,"style":68},"# 解压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",[34,120915,120916,120921,120932,120937,120944,120949,120965,120979,120984,120995,121004,121008,121024],{"__ignoreMap":68},[72,120917,120918],{"class":74,"line":75},[72,120919,120920],{"class":621},"# 解压cuDNN文件\n",[72,120922,120923,120926,120929],{"class":74,"line":370},[72,120924,120925],{"class":358},"tar",[72,120927,120928],{"class":362}," -xvf",[72,120930,120931],{"class":366}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[72,120933,120934],{"class":74,"line":1608},[72,120935,120936],{"class":621},"# cd进文件夹\n",[72,120938,120939,120941],{"class":74,"line":1623},[72,120940,373],{"class":362},[72,120942,120943],{"class":366}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[72,120945,120946],{"class":74,"line":1629},[72,120947,120948],{"class":621},"# 复制cuDNN文件到CUDA目录\n",[72,120950,120951,120953,120955,120958,120960,120963],{"class":74,"line":1643},[72,120952,24998],{"class":358},[72,120954,28283],{"class":366},[72,120956,120957],{"class":366}," include\u002Fcudnn",[72,120959,1009],{"class":362},[72,120961,120962],{"class":366},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[72,120964,3102],{"class":82},[72,120966,120967,120969,120971,120974,120976],{"class":74,"line":1649},[72,120968,24998],{"class":358},[72,120970,28283],{"class":366},[72,120972,120973],{"class":366}," lib\u002Flibcudnn",[72,120975,1009],{"class":362},[72,120977,120978],{"class":366},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[72,120980,120981],{"class":74,"line":1740},[72,120982,120983],{"class":621},"# 对比一下有没有缺文件\n",[72,120985,120986,120988,120991,120993],{"class":74,"line":1746},[72,120987,27183],{"class":358},[72,120989,120990],{"class":366}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[72,120992,1009],{"class":362},[72,120994,3102],{"class":82},[72,120996,120997,120999,121002],{"class":74,"line":1758},[72,120998,27183],{"class":358},[72,121000,121001],{"class":366}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[72,121003,119538],{"class":362},[72,121005,121006],{"class":74,"line":2041},[72,121007,120587],{"class":621},[72,121009,121010,121012,121014,121017,121019,121021],{"class":74,"line":2046},[72,121011,24998],{"class":358},[72,121013,25001],{"class":366},[72,121015,121016],{"class":366}," a+r",[72,121018,120990],{"class":366},[72,121020,1009],{"class":362},[72,121022,121023],{"class":82},"   \n",[72,121025,121026,121028,121030,121032,121034],{"class":74,"line":2052},[72,121027,24998],{"class":358},[72,121029,25001],{"class":366},[72,121031,121016],{"class":366},[72,121033,121001],{"class":366},[72,121035,119538],{"class":362},[22,121037,121038],{"start":1608},[25,121039,121040],{},"检查是否安装成功",[63,121042,121044],{"className":118813,"code":121043,"language":118815,"meta":68,"style":68},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[34,121045,121046,121051],{"__ignoreMap":68},[72,121047,121048],{"class":74,"line":75},[72,121049,121050],{"class":621},"# 检查cuDNN版本命令\n",[72,121052,121053,121056,121059,121061,121063,121066,121069],{"class":74,"line":370},[72,121054,121055],{"class":358},"cat",[72,121057,121058],{"class":366}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[72,121060,25531],{"class":78},[72,121062,30657],{"class":358},[72,121064,121065],{"class":366}," CUDNN_MAJOR",[72,121067,121068],{"class":362}," -A",[72,121070,48141],{"class":362},[15,121072,121073],{},"出现下图这样的就是安装成功了",[15,121075,121076],{},[1891,121077],{"alt":68,"src":121078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[22,121080,121081],{"start":1623},[25,121082,121083],{},"软链接(一般不需要)",[63,121085,121087],{"className":118813,"code":121086,"language":118815,"meta":68,"style":68},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[34,121088,121089,121094],{"__ignoreMap":68},[72,121090,121091],{"class":74,"line":75},[72,121092,121093],{"class":621},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[72,121095,121096,121098],{"class":74,"line":370},[72,121097,24998],{"class":358},[72,121099,121100],{"class":366}," ldconfig\n",[15,121102,121103],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[63,121105,121110],{"className":121106,"code":121107,"language":121108,"meta":121109,"style":68},"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",[34,121111,121112,121117,121122,121127,121132,121137,121142],{"__ignoreMap":68},[72,121113,121114],{"class":74,"line":75},[72,121115,121116],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[72,121118,121119],{"class":74,"line":370},[72,121120,121121],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[72,121123,121124],{"class":74,"line":1608},[72,121125,121126],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[72,121128,121129],{"class":74,"line":1623},[72,121130,121131],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[72,121133,121134],{"class":74,"line":1629},[72,121135,121136],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[72,121138,121139],{"class":74,"line":1643},[72,121140,121141],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[72,121143,121144],{"class":74,"line":1649},[72,121145,121146],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[15,121148,121149],{},"运行下方的命令",[63,121151,121153],{"className":118813,"code":121152,"language":118815,"meta":68,"style":68},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[34,121154,121155,121160,121167,121172],{"__ignoreMap":68},[72,121156,121157],{"class":74,"line":75},[72,121158,121159],{"class":621},"# cd进入CUDA路径\n",[72,121161,121162,121164],{"class":74,"line":370},[72,121163,373],{"class":362},[72,121165,121166],{"class":366}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[72,121168,121169],{"class":74,"line":1608},[72,121170,121171],{"class":621}," # 查看本路径下的需要软链接的文件名\n",[72,121173,121174],{"class":74,"line":1623},[72,121175,121176],{"class":358}," ls\n",[15,121178,121179],{},[1891,121180],{"alt":68,"src":121181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[15,121183,121184,121185,18836,121188,18836,121191,121194],{},"如上图，我需要将",[34,121186,121187],{},"libcudnn_xxx_xxxxx.so.8.9.7",[34,121189,121190],{},"libcudnn_xxx_xxxxx.so.8",[34,121192,121193],{},"libcudnn_xxx_xxxxx.so","软链接",[63,121196,121198],{"className":118813,"code":121197,"language":118815,"meta":68,"style":68},"# 创建符号链接。对于每个 .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",[34,121199,121200,121205,121221,121235,121249,121263,121277,121291,121305,121310,121316,121321],{"__ignoreMap":68},[72,121201,121202],{"class":74,"line":75},[72,121203,121204],{"class":621},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[72,121206,121207,121209,121212,121215,121218],{"class":74,"line":370},[72,121208,24998],{"class":358},[72,121210,121211],{"class":366}," ln",[72,121213,121214],{"class":362}," -sf",[72,121216,121217],{"class":366}," libcudnn_cnn_train.so.8.9.7",[72,121219,121220],{"class":366}," libcudnn_cnn_train.so.8\n",[72,121222,121223,121225,121227,121229,121232],{"class":74,"line":1608},[72,121224,24998],{"class":358},[72,121226,121211],{"class":366},[72,121228,121214],{"class":362},[72,121230,121231],{"class":366}," libcudnn_adv_infer.so.8.9.7",[72,121233,121234],{"class":366}," libcudnn_adv_infer.so.8\n",[72,121236,121237,121239,121241,121243,121246],{"class":74,"line":1623},[72,121238,24998],{"class":358},[72,121240,121211],{"class":366},[72,121242,121214],{"class":362},[72,121244,121245],{"class":366}," libcudnn_adv_train.so.8.9.7",[72,121247,121248],{"class":366}," libcudnn_adv_train.so.8\n",[72,121250,121251,121253,121255,121257,121260],{"class":74,"line":1629},[72,121252,24998],{"class":358},[72,121254,121211],{"class":366},[72,121256,121214],{"class":362},[72,121258,121259],{"class":366}," libcudnn_cnn_infer.so.8.9.7",[72,121261,121262],{"class":366}," libcudnn_cnn_infer.so.8\n",[72,121264,121265,121267,121269,121271,121274],{"class":74,"line":1643},[72,121266,24998],{"class":358},[72,121268,121211],{"class":366},[72,121270,121214],{"class":362},[72,121272,121273],{"class":366}," libcudnn.so.8.9.7",[72,121275,121276],{"class":366}," libcudnn.so.8\n",[72,121278,121279,121281,121283,121285,121288],{"class":74,"line":1649},[72,121280,24998],{"class":358},[72,121282,121211],{"class":366},[72,121284,121214],{"class":362},[72,121286,121287],{"class":366}," libcudnn_ops_infer.so.8.9.7",[72,121289,121290],{"class":366}," libcudnn_ops_infer.so.8\n",[72,121292,121293,121295,121297,121299,121302],{"class":74,"line":1740},[72,121294,24998],{"class":358},[72,121296,121211],{"class":366},[72,121298,121214],{"class":362},[72,121300,121301],{"class":366}," libcudnn_ops_train.so.8.9.7",[72,121303,121304],{"class":366}," libcudnn_ops_train.so.8\n",[72,121306,121307],{"class":74,"line":1746},[72,121308,121309],{"class":621},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[72,121311,121312,121314],{"class":74,"line":1758},[72,121313,24998],{"class":358},[72,121315,121100],{"class":366},[72,121317,121318],{"class":74,"line":2041},[72,121319,121320],{"class":621},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[72,121322,121323,121325,121328,121331,121333,121336],{"class":74,"line":2046},[72,121324,27183],{"class":358},[72,121326,121327],{"class":362}," -l",[72,121329,121330],{"class":366}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[72,121332,1009],{"class":362},[72,121334,121335],{"class":366},".so",[72,121337,119538],{"class":362},[531,121339,121341],{"id":121340},"_355-常见问题","3.5.5 常见问题",[22,121343,121344],{},[25,121345,121346],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[63,121348,121350],{"className":118813,"code":121349,"language":118815,"meta":68,"style":68},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[34,121351,121352],{"__ignoreMap":68},[72,121353,121354,121356,121358],{"class":74,"line":75},[72,121355,24998],{"class":358},[72,121357,118873],{"class":366},[72,121359,121360],{"class":366}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[15,121362,121363],{},"blacklist-nouveau.conf文件内容如下：",[63,121365,121367],{"className":118813,"code":121366,"language":118815,"meta":68,"style":68},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[34,121368,121369,121377,121384,121396,121406],{"__ignoreMap":68},[72,121370,121371,121374],{"class":74,"line":75},[72,121372,121373],{"class":358},"blacklist",[72,121375,121376],{"class":366}," nouveau\n",[72,121378,121379,121381],{"class":74,"line":370},[72,121380,121373],{"class":358},[72,121382,121383],{"class":366}," lbm-nouveau\n",[72,121385,121386,121388,121391,121394],{"class":74,"line":1608},[72,121387,116330],{"class":358},[72,121389,121390],{"class":366}," nouveau",[72,121392,121393],{"class":366}," modeset=",[72,121395,3513],{"class":362},[72,121397,121398,121401,121403],{"class":74,"line":1623},[72,121399,121400],{"class":362},"alias",[72,121402,121390],{"class":366},[72,121404,121405],{"class":366}," off\n",[72,121407,121408,121410,121413],{"class":74,"line":1629},[72,121409,121400],{"class":362},[72,121411,121412],{"class":366}," lbm-nouveau",[72,121414,121405],{"class":366},[15,121416,121417],{},"接着运行下方命令",[63,121419,121421],{"className":118813,"code":121420,"language":118815,"meta":68,"style":68},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[34,121422,121423,121433,121438],{"__ignoreMap":68},[72,121424,121425,121427,121430],{"class":74,"line":75},[72,121426,24998],{"class":358},[72,121428,121429],{"class":366}," update-initramfs",[72,121431,121432],{"class":362}," -u\n",[72,121434,121435],{"class":74,"line":370},[72,121436,121437],{"class":358},"或者\n",[72,121439,121440,121442,121445],{"class":74,"line":1608},[72,121441,24998],{"class":358},[72,121443,121444],{"class":366}," dracut",[72,121446,121447],{"class":362}," --force\n",[15,121449,121450],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[63,121452,121454],{"className":118813,"code":121453,"language":118815,"meta":68,"style":68},"lsmod | grep nouveau\n",[34,121455,121456],{"__ignoreMap":68},[72,121457,121458,121461,121463,121465],{"class":74,"line":75},[72,121459,121460],{"class":358},"lsmod",[72,121462,25531],{"class":78},[72,121464,30657],{"class":358},[72,121466,121376],{"class":366},[22,121468,121469],{"start":370},[25,121470,121471],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[63,121473,121475],{"className":118813,"code":121474,"language":118815,"meta":68,"style":68},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[34,121476,121477],{"__ignoreMap":68},[72,121478,121479,121481,121483],{"class":74,"line":75},[72,121480,24998],{"class":358},[72,121482,118873],{"class":366},[72,121484,121485],{"class":366}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[15,121487,121488],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[63,121490,121492],{"className":118813,"code":121491,"language":118815,"meta":68,"style":68},"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",[34,121493,121494,121502,121510,121518,121525,121533,121543,121551],{"__ignoreMap":68},[72,121495,121496,121499],{"class":74,"line":75},[72,121497,121498],{"class":358},"Section",[72,121500,121501],{"class":366}," \"OutputClass\"\n",[72,121503,121504,121507],{"class":74,"line":370},[72,121505,121506],{"class":358},"   Identifier",[72,121508,121509],{"class":366}," \"nvidia\"\n",[72,121511,121512,121515],{"class":74,"line":1608},[72,121513,121514],{"class":358},"   MatchDriver",[72,121516,121517],{"class":366}," \"nvidia-drm\"\n",[72,121519,121520,121523],{"class":74,"line":1623},[72,121521,121522],{"class":358},"   Driver",[72,121524,121509],{"class":366},[72,121526,121527,121530],{"class":74,"line":1629},[72,121528,121529],{"class":358},"   Option",[72,121531,121532],{"class":366}," \"AllowEmptyInitialConfiguration\"\n",[72,121534,121535,121537,121540],{"class":74,"line":1643},[72,121536,121529],{"class":358},[72,121538,121539],{"class":366}," \"PrimaryGPU\"",[72,121541,121542],{"class":366}," \"yes\"\n",[72,121544,121545,121548],{"class":74,"line":1649},[72,121546,121547],{"class":358},"   ModulePath",[72,121549,121550],{"class":366}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[72,121552,121553],{"class":74,"line":1740},[72,121554,121555],{"class":358},"EndSection\n",[22,121557,121558],{"start":1608},[25,121559,121560],{},"安装N卡驱动提示错误",[63,121562,121564],{"className":121106,"code":121563,"language":121108,"meta":121109,"style":68},"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",[34,121565,121566],{"__ignoreMap":68},[72,121567,121568],{"class":74,"line":75},[72,121569,121563],{},[22,121571,121572],{},[25,121573,121574],{},"检查当前运行的内核版本：",[15,121576,121577],{},"运行以下命令以查看你当前正在使用的内核版本：",[63,121579,121581],{"className":117586,"code":121580,"language":117588,"meta":68,"style":68},"uname -r\n",[34,121582,121583],{"__ignoreMap":68},[72,121584,121585,121587],{"class":74,"line":75},[72,121586,70622],{"class":358},[72,121588,121589],{"class":362}," -r\n",[22,121591,121592],{"start":370},[25,121593,121594],{},"安装内核开发文件：",[15,121596,121597,121598,121601],{},"确保你已经安装了与当前内核版本相匹配的 ",[34,121599,121600],{},"kernel-devel"," 包。运行以下命令来安装：",[63,121603,121605],{"className":117586,"code":121604,"language":117588,"meta":68,"style":68},"sudo dnf install kernel-devel-$(uname -r)\n",[34,121606,121607],{"__ignoreMap":68},[72,121608,121609,121611,121613,121615,121618,121620,121622,121624],{"class":74,"line":75},[72,121610,24998],{"class":358},[72,121612,26737],{"class":366},[72,121614,24256],{"class":366},[72,121616,121617],{"class":366}," kernel-devel-",[72,121619,25521],{"class":82},[72,121621,70622],{"class":358},[72,121623,119929],{"class":362},[72,121625,570],{"class":82},[15,121627,121628],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[22,121630,121631],{"start":1608},[25,121632,121633],{},"安装内核源代码（如果需要）：",[15,121635,121636],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[63,121638,121640],{"className":117586,"code":121639,"language":117588,"meta":68,"style":68},"sudo dnf install kernel-headers kernel-source\n",[34,121641,121642],{"__ignoreMap":68},[72,121643,121644,121646,121648,121650,121653],{"class":74,"line":75},[72,121645,24998],{"class":358},[72,121647,26737],{"class":366},[72,121649,24256],{"class":366},[72,121651,121652],{"class":366}," kernel-headers",[72,121654,121655],{"class":366}," kernel-source\n",[22,121657,121658],{"start":1623},[25,121659,121660],{},"检查安装：",[15,121662,121663,121664,121667],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[34,121665,121666],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[63,121669,121671],{"className":117586,"code":121670,"language":117588,"meta":68,"style":68},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[34,121672,121673],{"__ignoreMap":68},[72,121674,121675,121677],{"class":74,"line":75},[72,121676,27183],{"class":358},[72,121678,121679],{"class":366}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[15,121681,121682,121683,121686],{},"如果仍然遇到问题，可以通过 ",[34,121684,121685],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[473,121688,121689],{},"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":68,"searchDepth":370,"depth":370,"links":121691},[121692,121696,121706,121710,121711],{"id":118789,"depth":370,"text":118790,"children":121693},[121694,121695],{"id":118799,"depth":1608,"text":118800},{"id":118809,"depth":1608,"text":118810},{"id":119009,"depth":370,"text":119010,"children":121697},[121698,121699,121700,121701,121702,121703,121704,121705],{"id":119013,"depth":1608,"text":119014},{"id":119083,"depth":1608,"text":119084},{"id":119172,"depth":1608,"text":119173},{"id":119417,"depth":1608,"text":119418},{"id":119487,"depth":1608,"text":119488},{"id":119554,"depth":1608,"text":119555},{"id":119589,"depth":1608,"text":119590},{"id":119644,"depth":1608,"text":119645},{"id":119695,"depth":370,"text":119696,"children":121707},[121708,121709],{"id":119699,"depth":1608,"text":119700},{"id":119779,"depth":1608,"text":119780},{"id":119965,"depth":370,"text":119966},{"id":120138,"depth":370,"text":120139,"children":121712},[121713,121714,121715,121716,121717],{"id":120142,"depth":1608,"text":120143},{"id":120183,"depth":1608,"text":120184},{"id":120470,"depth":1608,"text":120471},{"id":120844,"depth":1608,"text":120845},{"id":121340,"depth":1608,"text":121341},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118781,"description":23802},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121724,"title":121725,"body":121726,"description":23802,"extension":487,"meta":122066,"navigation":490,"path":122067,"seo":122068,"stem":122069,"__hash__":122070},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121727,"toc":122064},[121728,121731,121736,121739,121985,121990,121993,122029,122032,122061],[10,121729,121725],{"id":121730},"_4-命令教程长期积累",[22,121732,121733],{},[25,121734,121735],{},"大多数命令",[15,121737,121738],{},"常用 Linux 命令速查：",[63,121740,121742],{"className":117586,"code":121741,"language":117588,"meta":68,"style":68},"# 文件与目录\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",[34,121743,121744,121749,121756,121763,121771,121778,121785,121793,121801,121808,121815,121823,121827,121832,121839,121847,121854,121858,121863,121870,121878,121886,121894,121902,121906,121911,121919,121926,121933,121941,121949,121953,121958,121967,121976],{"__ignoreMap":68},[72,121745,121746],{"class":74,"line":75},[72,121747,121748],{"class":621},"# 文件与目录\n",[72,121750,121751,121753],{"class":74,"line":370},[72,121752,27183],{"class":358},[72,121754,121755],{"class":621},"        # 列出目录内容\n",[72,121757,121758,121760],{"class":74,"line":1608},[72,121759,373],{"class":362},[72,121761,121762],{"class":621},"        # 切换目录\n",[72,121764,121765,121768],{"class":74,"line":1623},[72,121766,121767],{"class":362},"pwd",[72,121769,121770],{"class":621},"       # 显示当前路径\n",[72,121772,121773,121775],{"class":74,"line":1629},[72,121774,359],{"class":358},[72,121776,121777],{"class":621},"     # 创建目录\n",[72,121779,121780,121782],{"class":74,"line":1643},[72,121781,25744],{"class":358},[72,121783,121784],{"class":621},"        # 删除文件或目录\n",[72,121786,121787,121790],{"class":74,"line":1649},[72,121788,121789],{"class":358},"cp",[72,121791,121792],{"class":621},"        # 复制文件或目录\n",[72,121794,121795,121798],{"class":74,"line":1740},[72,121796,121797],{"class":358},"mv",[72,121799,121800],{"class":621},"        # 移动\u002F重命名文件或目录\n",[72,121802,121803,121805],{"class":74,"line":1746},[72,121804,101690],{"class":358},[72,121806,121807],{"class":621},"     # 创建空文件\n",[72,121809,121810,121812],{"class":74,"line":1758},[72,121811,121055],{"class":358},[72,121813,121814],{"class":621},"       # 查看文件内容\n",[72,121816,121817,121820],{"class":74,"line":2041},[72,121818,121819],{"class":358},"head\u002Ftail",[72,121821,121822],{"class":621}," # 查看文件头部\u002F尾部\n",[72,121824,121825],{"class":74,"line":2046},[72,121826,2828],{"emptyLinePlaceholder":490},[72,121828,121829],{"class":74,"line":2052},[72,121830,121831],{"class":621},"# 权限管理\n",[72,121833,121834,121836],{"class":74,"line":2057},[72,121835,25033],{"class":358},[72,121837,121838],{"class":621},"     # 修改文件权限\n",[72,121840,121841,121844],{"class":74,"line":2071},[72,121842,121843],{"class":358},"chown",[72,121845,121846],{"class":621},"     # 修改文件所有者\n",[72,121848,121849,121851],{"class":74,"line":2076},[72,121850,24998],{"class":358},[72,121852,121853],{"class":621},"      # 以管理员身份执行\n",[72,121855,121856],{"class":74,"line":2082},[72,121857,2828],{"emptyLinePlaceholder":490},[72,121859,121860],{"class":74,"line":2103},[72,121861,121862],{"class":621},"# 系统信息\n",[72,121864,121865,121867],{"class":74,"line":2108},[72,121866,70622],{"class":358},[72,121868,121869],{"class":621},"     # 系统信息\n",[72,121871,121872,121875],{"class":74,"line":2122},[72,121873,121874],{"class":358},"df",[72,121876,121877],{"class":621},"        # 磁盘使用情况\n",[72,121879,121880,121883],{"class":74,"line":2127},[72,121881,121882],{"class":358},"free",[72,121884,121885],{"class":621},"      # 内存使用情况\n",[72,121887,121888,121891],{"class":74,"line":2156},[72,121889,121890],{"class":358},"top\u002Fhtop",[72,121892,121893],{"class":621},"  # 进程监控\n",[72,121895,121896,121899],{"class":74,"line":2161},[72,121897,121898],{"class":358},"ps",[72,121900,121901],{"class":621},"        # 查看进程\n",[72,121903,121904],{"class":74,"line":2178},[72,121905,2828],{"emptyLinePlaceholder":490},[72,121907,121908],{"class":74,"line":2183},[72,121909,121910],{"class":621},"# 网络\n",[72,121912,121913,121916],{"class":74,"line":2188},[72,121914,121915],{"class":358},"ping",[72,121917,121918],{"class":621},"      # 测试网络连通性\n",[72,121920,121921,121923],{"class":74,"line":2193},[72,121922,27271],{"class":358},[72,121924,121925],{"class":621},"      # 发送 HTTP 请求\n",[72,121927,121928,121930],{"class":74,"line":2207},[72,121929,120579],{"class":358},[72,121931,121932],{"class":621},"      # 下载文件\n",[72,121934,121935,121938],{"class":74,"line":2212},[72,121936,121937],{"class":358},"ssh",[72,121939,121940],{"class":621},"       # 远程登录\n",[72,121942,121943,121946],{"class":74,"line":3005},[72,121944,121945],{"class":358},"scp",[72,121947,121948],{"class":621},"       # 远程文件传输\n",[72,121950,121951],{"class":74,"line":3019},[72,121952,2828],{"emptyLinePlaceholder":490},[72,121954,121955],{"class":74,"line":3027},[72,121956,121957],{"class":621},"# 包管理（Debian\u002FUbuntu）\n",[72,121959,121960,121962,121964],{"class":74,"line":3032},[72,121961,117658],{"class":358},[72,121963,117637],{"class":366},[72,121965,121966],{"class":621},"   # 更新软件源\n",[72,121968,121969,121971,121973],{"class":74,"line":3038},[72,121970,117658],{"class":358},[72,121972,24256],{"class":366},[72,121974,121975],{"class":621},"  # 安装软件包\n",[72,121977,121978,121980,121982],{"class":74,"line":3044},[72,121979,117658],{"class":358},[72,121981,26501],{"class":366},[72,121983,121984],{"class":621},"   # 卸载软件包\n",[22,121986,121987],{"start":370},[25,121988,121989],{},"KDE Dolphin 以root打开",[15,121991,121992],{},"kde5",[63,121994,121996],{"className":117586,"code":121995,"language":117588,"meta":68,"style":68},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[34,121997,121998],{"__ignoreMap":68},[72,121999,122000,122003,122006,122009,122011,122013,122016,122019,122021,122024,122026],{"class":74,"line":75},[72,122001,122002],{"class":358},"pkexec",[72,122004,122005],{"class":366}," env",[72,122007,122008],{"class":366}," DISPLAY=",[72,122010,28565],{"class":82},[72,122012,28623],{"class":366},[72,122014,122015],{"class":82},"$XAUTHORITY ",[72,122017,122018],{"class":366},"KDE_SESSION_VERSION=",[72,122020,873],{"class":362},[72,122022,122023],{"class":366}," KDE_FULL_SESSION=",[72,122025,1791],{"class":362},[72,122027,122028],{"class":366}," dolphin\n",[15,122030,122031],{},"kde6",[63,122033,122035],{"className":117586,"code":122034,"language":117588,"meta":68,"style":68},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[34,122036,122037],{"__ignoreMap":68},[72,122038,122039,122041,122043,122045,122047,122049,122051,122053,122055,122057,122059],{"class":74,"line":75},[72,122040,122002],{"class":358},[72,122042,122005],{"class":366},[72,122044,122008],{"class":366},[72,122046,28565],{"class":82},[72,122048,28623],{"class":366},[72,122050,122015],{"class":82},[72,122052,122018],{"class":366},[72,122054,898],{"class":362},[72,122056,122023],{"class":366},[72,122058,1791],{"class":362},[72,122060,122028],{"class":366},[473,122062,122063],{},"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":68,"searchDepth":370,"depth":370,"links":122065},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121725,"description":23802},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":122072,"title":122073,"body":122074,"description":23802,"extension":487,"meta":122088,"navigation":490,"path":122089,"seo":122090,"stem":122091,"__hash__":122092},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":122075,"toc":122086},[122076,122079],[10,122077,122073],{"id":122078},"_5-各种环境配置",[15,122080,122081],{},[257,122082,122085],{"href":122083,"rel":122084},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[261],"电控组环境搭建大全",{"title":68,"searchDepth":370,"depth":370,"links":122087},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":122073,"description":23802},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":122094,"title":122095,"body":122096,"description":23802,"extension":487,"meta":122444,"navigation":490,"path":122445,"seo":122446,"stem":122447,"__hash__":122448},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":122097,"toc":122436},[122098,122101,122105,122109,122113,122118,122125,122129,122422,122426,122433],[10,122099,122095],{"id":122100},"_6-拓展功能",[85,122102,122104],{"id":122103},"_61-wine","6.1 Wine",[85,122106,122108],{"id":122107},"_62-android","6.2 Android",[531,122110,122112],{"id":122111},"_621-i卡a卡","6.2.1 I卡、A卡",[22,122114,122115],{},[25,122116,122117],{},"Wayland-Waydroid(体验超级好)",[15,122119,122120,122121],{},"Waydroid 官网与安装指南：",[257,122122,122123],{"href":122123,"rel":122124},"https:\u002F\u002Fwaydro.id\u002F",[261],[531,122126,122128],{"id":122127},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[22,122130,122131],{},[25,122132,122133,122134,122136,122137,122141,122143,122146,122151,122348],{},"QEMU-KVM虚拟机 + BlissOS-X86",[54134,122135],{},"BlissOS 官网下载：",[257,122138,122139],{"href":122139,"rel":122140},"https:\u002F\u002Fblissos.org\u002F",[261],[54134,122142],{},[1891,122144],{"alt":68,"src":122145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[22,122147,122148],{"start":1608},[25,122149,122150],{},"比较推荐的配置",[63,122152,122154],{"className":117586,"code":122153,"language":117588,"meta":68,"style":68},"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",[34,122155,122156,122163,122173,122183,122193,122205,122215,122222,122232,122241,122250,122260,122270,122279,122289,122299,122311,122321,122330,122340],{"__ignoreMap":68},[72,122157,122158,122161],{"class":74,"line":75},[72,122159,122160],{"class":358},"qemu-system-x86_64",[72,122162,25100],{"class":362},[72,122164,122165,122168,122171],{"class":74,"line":370},[72,122166,122167],{"class":362},"        -M",[72,122169,122170],{"class":366}," q35,vmport=off",[72,122172,25100],{"class":362},[72,122174,122175,122178,122181],{"class":74,"line":1608},[72,122176,122177],{"class":362},"        -accel",[72,122179,122180],{"class":366}," kvm",[72,122182,25100],{"class":362},[72,122184,122185,122188,122191],{"class":74,"line":1623},[72,122186,122187],{"class":362},"        -cpu",[72,122189,122190],{"class":366}," qemu64,+sse3,+sse4.2",[72,122192,25100],{"class":362},[72,122194,122195,122198,122201,122203],{"class":74,"line":1629},[72,122196,122197],{"class":362},"        -smp",[72,122199,122200],{"class":366}," 8,cores=",[72,122202,847],{"class":362},[72,122204,25100],{"class":362},[72,122206,122207,122210,122213],{"class":74,"line":1643},[72,122208,122209],{"class":362},"        -m",[72,122211,122212],{"class":366}," 6G",[72,122214,25100],{"class":362},[72,122216,122217,122220],{"class":74,"line":1649},[72,122218,122219],{"class":362},"        -usb",[72,122221,25100],{"class":362},[72,122223,122224,122227,122230],{"class":74,"line":1740},[72,122225,122226],{"class":362},"        -device",[72,122228,122229],{"class":366}," virtio-tablet",[72,122231,25100],{"class":362},[72,122233,122234,122236,122239],{"class":74,"line":1746},[72,122235,122226],{"class":362},[72,122237,122238],{"class":366}," virtio-keyboard",[72,122240,25100],{"class":362},[72,122242,122243,122245,122248],{"class":74,"line":1758},[72,122244,122226],{"class":362},[72,122246,122247],{"class":366}," usb-tablet",[72,122249,25100],{"class":362},[72,122251,122252,122255,122258],{"class":74,"line":2041},[72,122253,122254],{"class":362},"        -bios",[72,122256,122257],{"class":366}," OVMF-pure-efi64.fd",[72,122259,25100],{"class":362},[72,122261,122262,122265,122268],{"class":74,"line":2046},[72,122263,122264],{"class":362},"        -net",[72,122266,122267],{"class":366}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[72,122269,25100],{"class":362},[72,122271,122272,122274,122277],{"class":74,"line":2052},[72,122273,122264],{"class":362},[72,122275,122276],{"class":366}," nic,model=virtio",[72,122278,25100],{"class":362},[72,122280,122281,122284,122287],{"class":74,"line":2057},[72,122282,122283],{"class":362},"        -audio",[72,122285,122286],{"class":366}," sdl,model=hda",[72,122288,25100],{"class":362},[72,122290,122291,122294,122297],{"class":74,"line":2071},[72,122292,122293],{"class":362},"        -display",[72,122295,122296],{"class":366}," sdl,gl=on,show-cursor=on",[72,122298,25100],{"class":362},[72,122300,122301,122303,122306,122309],{"class":74,"line":2076},[72,122302,122226],{"class":362},[72,122304,122305],{"class":366}," virtio-vga-gl,xres=1920,yres=",[72,122307,122308],{"class":362},"1080",[72,122310,25100],{"class":362},[72,122312,122313,122316,122319],{"class":74,"line":2082},[72,122314,122315],{"class":362},"        -drive",[72,122317,122318],{"class":366}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[72,122320,25100],{"class":362},[72,122322,122323,122325,122328],{"class":74,"line":2103},[72,122324,122315],{"class":362},[72,122326,122327],{"class":366}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[72,122329,25100],{"class":362},[72,122331,122332,122335,122338],{"class":74,"line":2108},[72,122333,122334],{"class":362},"        -monitor",[72,122336,122337],{"class":366}," stdio",[72,122339,25100],{"class":362},[72,122341,122342,122345],{"class":74,"line":2122},[72,122343,122344],{"class":362},"        -serial",[72,122346,122347],{"class":366}," none\n",[22,122349,122350],{"start":1629},[25,122351,122352,122353],{},"常用操作：",[22,122354,122355,122358,122414],{},[25,122356,122357],{},"全屏：Ctrl+Alt+F",[25,122359,122360,122361,122366],{},"adb调试",[22,122362,122363],{},[25,122364,122365],{},"使Linux与Android用ADB连接。",[63,122367,122369],{"className":117586,"code":122368,"language":117588,"meta":68,"style":68},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[34,122370,122371,122376,122387,122392,122404,122409],{"__ignoreMap":68},[72,122372,122373],{"class":74,"line":75},[72,122374,122375],{"class":621},"# 连接安卓\n",[72,122377,122378,122381,122384],{"class":74,"line":370},[72,122379,122380],{"class":358},"adb",[72,122382,122383],{"class":366}," connect",[72,122385,122386],{"class":362}," 127.0.0.1\n",[72,122388,122389],{"class":74,"line":1608},[72,122390,122391],{"class":621},"# 打开shell\n",[72,122393,122394,122396,122398,122401],{"class":74,"line":1623},[72,122395,122380],{"class":358},[72,122397,27305],{"class":362},[72,122399,122400],{"class":366}," 127.0.0.1:5555",[72,122402,122403],{"class":366}," shell\n",[72,122405,122406],{"class":74,"line":1629},[72,122407,122408],{"class":621},"# 使用root权限\n",[72,122410,122411],{"class":74,"line":1643},[72,122412,122413],{"class":358},"su\n",[25,122415,122416,122417],{},"中文输入法",[22,122418,122419],{},[25,122420,122421],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[85,122423,122425],{"id":122424},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[15,122427,122428,122429],{},"rEFInd 官网与文档：",[257,122430,122431],{"href":122431,"rel":122432},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[261],[473,122434,122435],{},"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":68,"searchDepth":370,"depth":370,"links":122437},[122438,122439,122443],{"id":122103,"depth":370,"text":122104},{"id":122107,"depth":370,"text":122108,"children":122440},[122441,122442],{"id":122111,"depth":1608,"text":122112},{"id":122127,"depth":1608,"text":122128},{"id":122424,"depth":370,"text":122425},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":122095,"description":23802},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122450,"title":122451,"body":122452,"description":23802,"extension":487,"meta":125751,"navigation":490,"path":125752,"seo":125753,"stem":125754,"__hash__":125755},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122453,"toc":125725},[122454,122457,122461,122464,122471,122721,122724,122796,122799,122803,122807,122812,122815,122818,122821,122826,122829,122832,122835,122840,122843,122848,122851,122854,122859,122862,122867,122870,122874,122878,122881,122886,122889,122903,122906,122909,122918,122921,122930,122933,122936,122945,122948,122957,122960,122963,122972,122975,122978,122993,122996,122999,123008,123013,123016,123019,123028,123031,123040,123043,123052,123055,123064,123069,123072,123080,123085,123088,123097,123100,123108,123113,123116,123125,123128,123131,123135,123138,123143,123146,123151,123165,123170,123175,123186,123191,123197,123202,123217,123222,123225,123230,123235,123240,123248,123253,123260,123265,123276,123281,123284,123288,123291,123294,123299,123302,123321,123326,123329,123338,123343,123346,123368,123371,123401,123404,123409,123412,123426,123431,123450,123453,123456,123461,123473,123478,123483,123486,123491,123494,123509,123512,123517,123522,123526,123531,123571,123574,123578,123584,123590,123595,123598,123605,123610,123617,123620,123623,123630,123644,123647,123707,123710,123724,123736,123739,123742,123745,123809,123812,123815,123818,123838,123841,123846,123853,123857,123860,123864,123869,123874,123878,123881,123884,123926,123931,123934,123956,123971,123973,123978,123990,124050,124052,124054,124108,124110,124112,124118,124123,124126,124131,124135,124138,124200,124205,124208,124210,124214,124226,124308,124310,124312,124366,124372,124374,124378,124383,124385,124390,124394,124414,124449,124453,124456,124459,124462,124469,124472,124484,124487,124502,124505,124524,124572,124575,124592,124595,124609,124614,124617,124626,124641,124653,124691,124696,124705,124710,124715,124741,124750,124754,124758,124763,124766,124770,124774,124779,124782,124787,124790,124795,124798,124803,124806,124810,124815,124818,124823,124826,124830,124835,124838,124843,124846,124851,124854,124858,124863,124866,124871,124874,124879,124882,124886,124891,124894,124899,124902,124907,124910,124915,124918,124923,124926,124931,124934,124938,124943,124946,124951,124958,124962,124967,124970,124975,124978,124982,124987,124990,124993,124996,124999,125002,125006,125009,125019,125024,125029,125051,125056,125061,125068,125072,125077,125080,125083,125088,125091,125094,125097,125100,125103,125106,125109,125112,125115,125118,125121,125124,125129,125134,125139,125144,125149,125154,125159,125162,125166,125169,125173,125178,125183,125188,125193,125197,125203,125211,125216,125219,125224,125239,125242,125247,125281,125296,125299,125354,125380,125392,125395,125404,125407,125422,125427,125430,125436,125441,125444,125449,125452,125457,125462,125469,125472,125487,125490,125525,125530,125538,125576,125579,125582,125587,125590,125595,125606,125640,125645,125648,125657,125662,125668,125671,125676,125685,125690,125693,125696,125701,125709,125712,125717,125722],[10,122455,122451],{"id":122456},"_7-其他操作",[85,122458,122460],{"id":122459},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[15,122462,122463],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[15,122465,122466,122467,122470],{},"进入工控机的硬盘目录，进入",[34,122468,122469],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[63,122472,122476],{"className":122473,"code":122474,"language":122475,"meta":68,"style":68},"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",[34,122477,122478,122486,122497,122504,122511,122523,122530,122542,122553,122564,122571,122578,122585,122597,122609,122616,122628,122640,122647,122659,122671,122683,122694,122701,122712],{"__ignoreMap":68},[72,122479,122480,122483],{"class":74,"line":75},[72,122481,122482],{"class":51718},"network",[72,122484,122485],{"class":82},": \n",[72,122487,122488,122491,122493,122495],{"class":74,"line":370},[72,122489,122490],{"class":51718},"  version",[72,122492,51855],{"class":82},[72,122494,640],{"class":362},[72,122496,3102],{"class":82},[72,122498,122499,122502],{"class":74,"line":1608},[72,122500,122501],{"class":51718},"  wifis",[72,122503,122485],{"class":82},[72,122505,122506,122509],{"class":74,"line":1623},[72,122507,122508],{"class":51718},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[72,122510,122485],{"class":82},[72,122512,122513,122516,122518,122521],{"class":74,"line":1629},[72,122514,122515],{"class":51718},"      renderer",[72,122517,51855],{"class":82},[72,122519,122520],{"class":366},"NetworkManager",[72,122522,3102],{"class":82},[72,122524,122525,122528],{"class":74,"line":1643},[72,122526,122527],{"class":51718},"      match",[72,122529,122485],{"class":82},[72,122531,122532,122535,122537,122540],{"class":74,"line":1649},[72,122533,122534],{"class":51718},"        name",[72,122536,51855],{"class":82},[72,122538,122539],{"class":366},"\"wlan0\"",[72,122541,3102],{"class":82},[72,122543,122544,122547,122549,122551],{"class":74,"line":1740},[72,122545,122546],{"class":51718},"      dhcp4",[72,122548,51855],{"class":82},[72,122550,1791],{"class":362},[72,122552,3102],{"class":82},[72,122554,122555,122558,122560,122562],{"class":74,"line":1746},[72,122556,122557],{"class":51718},"      dhcp6",[72,122559,51855],{"class":82},[72,122561,1791],{"class":362},[72,122563,3102],{"class":82},[72,122565,122566,122569],{"class":74,"line":1758},[72,122567,122568],{"class":51718},"      access-points",[72,122570,122485],{"class":82},[72,122572,122573,122576],{"class":74,"line":2041},[72,122574,122575],{"class":366},"        \"EMIS_Vinci_Robocon_5G\"",[72,122577,122485],{"class":82},[72,122579,122580,122583],{"class":74,"line":2046},[72,122581,122582],{"class":51718},"          auth",[72,122584,122485],{"class":82},[72,122586,122587,122590,122592,122595],{"class":74,"line":2052},[72,122588,122589],{"class":51718},"            key-management",[72,122591,51855],{"class":82},[72,122593,122594],{"class":366},"\"psk\"",[72,122596,3102],{"class":82},[72,122598,122599,122602,122604,122607],{"class":74,"line":2057},[72,122600,122601],{"class":51718},"            password",[72,122603,51855],{"class":82},[72,122605,122606],{"class":366},"\"vinci666\"",[72,122608,3102],{"class":82},[72,122610,122611,122614],{"class":74,"line":2071},[72,122612,122613],{"class":51718},"          networkmanager",[72,122615,122485],{"class":82},[72,122617,122618,122621,122623,122626],{"class":74,"line":2076},[72,122619,122620],{"class":51718},"            uuid",[72,122622,51855],{"class":82},[72,122624,122625],{"class":366},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[72,122627,3102],{"class":82},[72,122629,122630,122633,122635,122638],{"class":74,"line":2082},[72,122631,122632],{"class":51718},"            name",[72,122634,51855],{"class":82},[72,122636,122637],{"class":366},"\"EMIS_Vinci_Robocon_5G\"",[72,122639,3102],{"class":82},[72,122641,122642,122645],{"class":74,"line":2103},[72,122643,122644],{"class":51718},"            passthrough",[72,122646,122485],{"class":82},[72,122648,122649,122652,122654,122657],{"class":74,"line":2108},[72,122650,122651],{"class":51718},"              wifi-security.auth-alg",[72,122653,51855],{"class":82},[72,122655,122656],{"class":366},"\"open\"",[72,122658,3102],{"class":82},[72,122660,122661,122664,122666,122669],{"class":74,"line":2122},[72,122662,122663],{"class":51718},"              ipv6.addr-gen-mode",[72,122665,51855],{"class":82},[72,122667,122668],{"class":366},"\"default\"",[72,122670,3102],{"class":82},[72,122672,122673,122676,122678,122681],{"class":74,"line":2127},[72,122674,122675],{"class":51718},"              ipv6.ip6-privacy",[72,122677,51855],{"class":82},[72,122679,122680],{"class":366},"\"-1\"",[72,122682,3102],{"class":82},[72,122684,122685,122688,122690,122692],{"class":74,"line":2156},[72,122686,122687],{"class":51718},"              proxy._",[72,122689,51855],{"class":82},[72,122691,8078],{"class":366},[72,122693,3102],{"class":82},[72,122695,122696,122699],{"class":74,"line":2161},[72,122697,122698],{"class":51718},"      networkmanager",[72,122700,122485],{"class":82},[72,122702,122703,122706,122708,122710],{"class":74,"line":2178},[72,122704,122705],{"class":51718},"        uuid",[72,122707,51855],{"class":82},[72,122709,122625],{"class":366},[72,122711,3102],{"class":82},[72,122713,122714,122716,122718],{"class":74,"line":2183},[72,122715,122534],{"class":51718},[72,122717,51855],{"class":82},[72,122719,122720],{"class":366},"\"EMIS_Vinci_Robocon_5G\"\n",[15,122722,122723],{},"将其改为新wifi的名和密码：",[63,122725,122727],{"className":122473,"code":122726,"language":122475,"meta":68,"style":68},"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",[34,122728,122729,122735,122744,122750,122757,122766,122774,122780,122786],{"__ignoreMap":68},[72,122730,122731,122733],{"class":74,"line":75},[72,122732,122482],{"class":51718},[72,122734,4167],{"class":82},[72,122736,122737,122739,122741],{"class":74,"line":370},[72,122738,122490],{"class":51718},[72,122740,51855],{"class":82},[72,122742,122743],{"class":362},"2\n",[72,122745,122746,122748],{"class":74,"line":1608},[72,122747,122501],{"class":51718},[72,122749,4167],{"class":82},[72,122751,122752,122755],{"class":74,"line":1623},[72,122753,122754],{"class":51718},"    wlan0",[72,122756,4167],{"class":82},[72,122758,122759,122761,122763],{"class":74,"line":1629},[72,122760,122546],{"class":51718},[72,122762,51855],{"class":82},[72,122764,122765],{"class":362},"true\n",[72,122767,122768,122770,122772],{"class":74,"line":1643},[72,122769,122557],{"class":51718},[72,122771,51855],{"class":82},[72,122773,122765],{"class":362},[72,122775,122776,122778],{"class":74,"line":1649},[72,122777,122568],{"class":51718},[72,122779,4167],{"class":82},[72,122781,122782,122784],{"class":74,"line":1740},[72,122783,122575],{"class":366},[72,122785,4167],{"class":82},[72,122787,122788,122791,122793],{"class":74,"line":1746},[72,122789,122790],{"class":51718},"          password",[72,122792,51855],{"class":82},[72,122794,122795],{"class":366},"\"vinci666\"\n",[15,122797,122798],{},"工控机开机即可连上网。",[85,122800,122802],{"id":122801},"_72-ssh远程开发","7.2 SSH远程开发",[531,122804,122806],{"id":122805},"_721-环境准备","7.2.1 环境准备",[15,122808,122809],{},[707,122810,122811],{},"1.硬件准备",[15,122813,122814],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[15,122816,122817],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[15,122819,122820],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[15,122822,122823],{},[707,122824,122825],{},"2.设置固定IP",[15,122827,122828],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[15,122830,122831],{},"1.进入设置界面",[15,122833,122834],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[15,122836,122837],{},[1891,122838],{"alt":68,"src":122839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[15,122841,122842],{},"2.配置所连接的网络",[15,122844,122845],{},[1891,122846],{"alt":68,"src":122847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[15,122849,122850],{},"3.设置固定IP",[15,122852,122853],{},"查看当前IP地址。",[15,122855,122856],{},[1891,122857],{"alt":68,"src":122858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[15,122860,122861],{},"设置固定IP。",[15,122863,122864],{},[1891,122865],{"alt":68,"src":122866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[15,122868,122869],{},"至此，IP配置完毕。",[531,122871,122873],{"id":122872},"_722-环境搭建","7.2.2 环境搭建",[15,122875,122876],{},[707,122877,26175],{},[15,122879,122880],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[15,122882,122883],{},[707,122884,122885],{},"实现",[15,122887,122888],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[22,122890,122891,122894,122897,122900],{},[25,122892,122893],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[25,122895,122896],{},"远程主机启动SSH服务；",[25,122898,122899],{},"本地主机登陆远程主机；",[25,122901,122902],{},"实现数据传输。",[15,122904,122905],{},"1.安装SSH客户端与服务端",[15,122907,122908],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[63,122910,122912],{"className":121106,"code":122911,"language":121108,"meta":121109,"style":68}," sudo apt install openssh-server\n",[34,122913,122914],{"__ignoreMap":68},[72,122915,122916],{"class":74,"line":75},[72,122917,122911],{},[15,122919,122920],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[63,122922,122924],{"className":121106,"code":122923,"language":121108,"meta":121109,"style":68},"sudo apt install openssh-client\n",[34,122925,122926],{"__ignoreMap":68},[72,122927,122928],{"class":74,"line":75},[72,122929,122923],{},[15,122931,122932],{},"2.远程主机启动SSH服务",[15,122934,122935],{},"远程主机启动 ssh 服务命令如下：",[63,122937,122939],{"className":121106,"code":122938,"language":121108,"meta":121109,"style":68},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[34,122940,122941],{"__ignoreMap":68},[72,122942,122943],{"class":74,"line":75},[72,122944,122938],{},[15,122946,122947],{},"启动后可使用如下命令查看服务是否正常运行：",[63,122949,122951],{"className":121106,"code":122950,"language":121108,"meta":121109,"style":68},"ps -e | grep ssh\n",[34,122952,122953],{"__ignoreMap":68},[72,122954,122955],{"class":74,"line":75},[72,122956,122950],{},[15,122958,122959],{},"如果启动成功，会包含 sshd 程序。",[15,122961,122962],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[63,122964,122966],{"className":121106,"code":122965,"language":121108,"meta":121109,"style":68},"sudo systemctl enable ssh\n",[34,122967,122968],{"__ignoreMap":68},[72,122969,122970],{"class":74,"line":75},[72,122971,122965],{},[15,122973,122974],{},"3.本地远程登录",[15,122976,122977],{},"登录远程主机可以调用如下命令:",[63,122979,122981],{"className":117586,"code":122980,"language":117588,"meta":68,"style":68},"ssh -X 用户名@ip地址\n",[34,122982,122983],{"__ignoreMap":68},[72,122984,122985,122987,122990],{"class":74,"line":75},[72,122986,121937],{"class":358},[72,122988,122989],{"class":362}," -X",[72,122991,122992],{"class":366}," 用户名@ip地址\n",[15,122994,122995],{},"然后根据提示，录入登陆密码，即可成功登录。",[15,122997,122998],{},"如果退出，可以调用exit命令：",[63,123000,123002],{"className":121106,"code":123001,"language":121108,"meta":121109,"style":68},"exit\n",[34,123003,123004],{"__ignoreMap":68},[72,123005,123006],{"class":74,"line":75},[72,123007,123001],{},[15,123009,123010],{},[707,123011,123012],{},"4.实现数据传输",[15,123014,123015],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[15,123017,123018],{},"上传文件指令格式如下：",[63,123020,123022],{"className":121106,"code":123021,"language":121108,"meta":121109,"style":68},"scp 本地文件路径 账号@ip:路径\n",[34,123023,123024],{"__ignoreMap":68},[72,123025,123026],{"class":74,"line":75},[72,123027,123021],{},[15,123029,123030],{},"上传文件夹指令格式如下：",[63,123032,123034],{"className":121106,"code":123033,"language":121108,"meta":121109,"style":68},"scp -r 本地文件夹路径 账号@ip:路径\n",[34,123035,123036],{"__ignoreMap":68},[72,123037,123038],{"class":74,"line":75},[72,123039,123033],{},[15,123041,123042],{},"下载文件指令格式如下：",[63,123044,123046],{"className":121106,"code":123045,"language":121108,"meta":121109,"style":68},"scp 账号@ip:路径 本地文件夹路径\n",[34,123047,123048],{"__ignoreMap":68},[72,123049,123050],{"class":74,"line":75},[72,123051,123045],{},[15,123053,123054],{},"下载文件夹指令格式如下：",[63,123056,123058],{"className":121106,"code":123057,"language":121108,"meta":121109,"style":68},"scp -r 账号@ip:路径 本地文件夹路径\n",[34,123059,123060],{"__ignoreMap":68},[72,123061,123062],{"class":74,"line":75},[72,123063,123057],{},[15,123065,123066],{},[707,123067,123068],{},"优化",[15,123070,123071],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[22,123073,123074,123077],{},[25,123075,123076],{},"本地生成密钥对；",[25,123078,123079],{},"将公钥上传至远程主机。",[15,123081,123082],{},[707,123083,123084],{},"1.生成密钥对",[15,123086,123087],{},"本地客户端生成公私钥：（一路回车默认即可）",[63,123089,123091],{"className":121106,"code":123090,"language":121108,"meta":121109,"style":68},"ssh-keygen\n",[34,123092,123093],{"__ignoreMap":68},[72,123094,123095],{"class":74,"line":75},[72,123096,123090],{},[15,123098,123099],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[22,123101,123102,123105],{},[25,123103,123104],{},"id_rsa （私钥）；",[25,123106,123107],{},"id_rsa.pub (公钥)。",[15,123109,123110],{},[707,123111,123112],{},"2.公钥上传",[15,123114,123115],{},"上传指令如下：",[63,123117,123119],{"className":121106,"code":123118,"language":121108,"meta":121109,"style":68},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[34,123120,123121],{"__ignoreMap":68},[72,123122,123123],{"class":74,"line":75},[72,123124,123118],{},[15,123126,123127],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[15,123129,123130],{},"以后再远程登录就无需录入密码了。",[531,123132,123134],{"id":123133},"_723-使用vscode优化","7.2.3 使用VScode优化",[15,123136,123137],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[15,123139,123140],{},[707,123141,123142],{},"1.准备工作",[15,123144,123145],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[15,123147,123148],{},[707,123149,123150],{},"2.为VScode安装远程开发插件",[15,123152,123153,123154,123157,123158,123161,123162,28807],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[34,123155,123156],{},"扩展：商店","的搜索栏输入",[34,123159,123160],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[34,123163,123164],{},"安装",[15,123166,123167],{},[1891,123168],{"alt":68,"src":123169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[15,123171,123172],{},[707,123173,123174],{},"3.配置远程连接",[15,123176,123177,123178,123181,123182,123185],{},"步骤1：使用快捷键",[34,123179,123180],{},"ctrl + shift + p","打开命令输入窗口，并输入",[34,123183,123184],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[15,123187,123188],{},[1891,123189],{"alt":68,"src":123190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[15,123192,123193,123194,28807],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[34,123195,123196],{},"Add New SSH Host",[15,123198,123199],{},[1891,123200],{"alt":68,"src":123201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[15,123203,123204,123205,123208,123209,123212,123213,123216],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[34,123206,123207],{},"ssh +X ubuntu@192.168.43.164","，其中，",[34,123210,123211],{},"ubuntu","需要替换为你的登录用户名，",[34,123214,123215],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[15,123218,123219],{},[1891,123220],{"alt":68,"src":123221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[15,123223,123224],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[15,123226,123227],{},[1891,123228],{"alt":68,"src":123229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[15,123231,123232],{},[1891,123233],{"alt":68,"src":123234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[15,123236,123237],{},[707,123238,123239],{},"4.使用",[15,123241,123242,123243,123181,123245,123247],{},"步骤1：继续使用快捷键",[34,123244,123180],{},[34,123246,123184],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[15,123249,123250],{},[1891,123251],{"alt":68,"src":123252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[15,123254,123255,123256,123259],{},"或者，也可以点击侧边栏的",[34,123257,123258],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[15,123261,123262],{},[1891,123263],{"alt":68,"src":123264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[15,123266,123267,123268,123271,123272,123275],{},"步骤2：选择菜单栏的",[34,123269,123270],{},"文件","下的",[34,123273,123274],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[15,123277,123278],{},[1891,123279],{"alt":68,"src":123280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[15,123282,123283],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[85,123285,123287],{"id":123286},"_73-远程桌面","7.3 远程桌面",[15,123289,123290],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[15,123292,123293],{},"我们选择使用VNC来看。",[22,123295,123296],{},[25,123297,123298],{},"安装VNC服务器：",[15,123300,123301],{},"这里以TigerVNC为例进行安装：",[63,123303,123305],{"className":117586,"code":123304,"language":117588,"meta":68,"style":68},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[34,123306,123307],{"__ignoreMap":68},[72,123308,123309,123311,123313,123315,123318],{"class":74,"line":75},[72,123310,24998],{"class":358},[72,123312,117607],{"class":366},[72,123314,24256],{"class":366},[72,123316,123317],{"class":366}," tigervnc-standalone-server",[72,123319,123320],{"class":366}," tigervnc-common\n",[22,123322,123323],{"start":370},[25,123324,123325],{},"设置VNC密码：",[15,123327,123328],{},"为VNC用户设置密码，运行以下命令：",[63,123330,123332],{"className":117586,"code":123331,"language":117588,"meta":68,"style":68},"vncpasswd\n",[34,123333,123334],{"__ignoreMap":68},[72,123335,123336],{"class":74,"line":75},[72,123337,123331],{"class":358},[22,123339,123340],{"start":1608},[25,123341,123342],{},"配置VNC启动脚本:",[15,123344,123345],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[63,123347,123349],{"className":117586,"code":123348,"language":117588,"meta":68,"style":68},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[34,123350,123351,123360],{"__ignoreMap":68},[72,123352,123353,123355,123357],{"class":74,"line":75},[72,123354,359],{"class":358},[72,123356,363],{"class":362},[72,123358,123359],{"class":366}," ~\u002F.vnc\n",[72,123361,123362,123365],{"class":74,"line":370},[72,123363,123364],{"class":358},"nano",[72,123366,123367],{"class":366}," ~\u002F.vnc\u002Fxstartup\n",[15,123369,123370],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[63,123372,123374],{"className":117586,"code":123373,"language":117588,"meta":68,"style":68},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[34,123375,123376,123381,123389,123396],{"__ignoreMap":68},[72,123377,123378],{"class":74,"line":75},[72,123379,123380],{"class":621},"#!\u002Fbin\u002Fsh\n",[72,123382,123383,123386],{"class":74,"line":370},[72,123384,123385],{"class":362},"unset",[72,123387,123388],{"class":366}," SESSION_MANAGER\n",[72,123390,123391,123393],{"class":74,"line":1608},[72,123392,123385],{"class":362},[72,123394,123395],{"class":366}," DBUS_SESSION_BUS_ADDRESS\n",[72,123397,123398],{"class":74,"line":1623},[72,123399,123400],{"class":358},"gnome-session\n",[15,123402,123403],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[22,123405,123406],{"start":1623},[25,123407,123408],{},"给予执行权限：",[15,123410,123411],{},"为xstartup文件设置执行权限：",[63,123413,123415],{"className":117586,"code":123414,"language":117588,"meta":68,"style":68},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[34,123416,123417],{"__ignoreMap":68},[72,123418,123419,123421,123424],{"class":74,"line":75},[72,123420,25033],{"class":358},[72,123422,123423],{"class":366}," +x",[72,123425,123367],{"class":366},[22,123427,123428],{"start":1629},[25,123429,123430],{},"启动VNC服务器：",[63,123432,123434],{"className":117586,"code":123433,"language":117588,"meta":68,"style":68},"vncserver -geometry 1920x1080 -localhost=0\n",[34,123435,123436],{"__ignoreMap":68},[72,123437,123438,123441,123444,123447],{"class":74,"line":75},[72,123439,123440],{"class":358},"vncserver",[72,123442,123443],{"class":362}," -geometry",[72,123445,123446],{"class":366}," 1920x1080",[72,123448,123449],{"class":362}," -localhost=0\n",[15,123451,123452],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[15,123454,123455],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[22,123457,123458],{"start":1643},[25,123459,123460],{},"查看已开启的VNC服务器：",[63,123462,123464],{"className":117586,"code":123463,"language":117588,"meta":68,"style":68},"vncserver -list\n",[34,123465,123466],{"__ignoreMap":68},[72,123467,123468,123470],{"class":74,"line":75},[72,123469,123440],{"class":358},[72,123471,123472],{"class":362}," -list\n",[15,123474,123475],{},[1891,123476],{"alt":68,"src":123477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[22,123479,123480],{"start":1649},[25,123481,123482],{},"连接到VNC服务器：",[15,123484,123485],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[22,123487,123488],{"start":1740},[25,123489,123490],{},"停止VNC服务器：",[15,123492,123493],{},"如果需要停止VNC服务器，可以使用以下命令：",[63,123495,123497],{"className":117586,"code":123496,"language":117588,"meta":68,"style":68},"vncserver -kill :1\n",[34,123498,123499],{"__ignoreMap":68},[72,123500,123501,123503,123506],{"class":74,"line":75},[72,123502,123440],{"class":358},[72,123504,123505],{"class":362}," -kill",[72,123507,123508],{"class":366}," :1\n",[15,123510,123511],{},"将:1替换为你实际使用的显示编号。",[15,123513,123514],{},[1891,123515],{"alt":68,"src":123516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[15,123518,123519],{},[1891,123520],{"alt":68,"src":123521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[85,123523,123525],{"id":123524},"_74-usb端口设置","7.4 USB端口设置",[15,123527,123528],{},[707,123529,123530],{},"首先先配置好权限",[63,123532,123534],{"className":117586,"code":123533,"language":117588,"meta":68,"style":68},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[34,123535,123536,123541,123554,123561,123566],{"__ignoreMap":68},[72,123537,123538],{"class":74,"line":75},[72,123539,123540],{"class":621},"# 将用户权限提高\n",[72,123542,123543,123545,123547,123549,123552],{"class":74,"line":370},[72,123544,24998],{"class":358},[72,123546,26996],{"class":366},[72,123548,26999],{"class":362},[72,123550,123551],{"class":366}," dialout",[72,123553,27004],{"class":82},[72,123555,123556,123558],{"class":74,"line":1608},[72,123557,27023],{"class":358},[72,123559,123560],{"class":366}," dialout\n",[72,123562,123563],{"class":74,"line":1623},[72,123564,123565],{"class":621},"# 查看下面命令是否输出dialout（若输出才正常）\n",[72,123567,123568],{"class":74,"line":1629},[72,123569,123570],{"class":358},"groups\n",[15,123572,123573],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[531,123575,123577],{"id":123576},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[15,123579,123580,123583],{},[707,123581,123582],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[15,123585,123586,123589],{},[707,123587,123588],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[15,123591,123592],{},[707,123593,123594],{},"流程如下：",[15,123596,123597],{},"（1）.查找设备idVendor和idProduct",[15,123599,123600,123601,123604],{},"接入两个USB设备，在终端调用指令",[34,123602,123603],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[15,123606,123607],{},[1891,123608],{"alt":68,"src":123609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[15,123611,123612,123613,123616],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[34,123614,123615],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[15,123618,123619],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[15,123621,123622],{},"（2）.编写映射规则",[15,123624,123625,123626,123629],{},"在",[34,123627,123628],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[63,123631,123633],{"className":117586,"code":123632,"language":117588,"meta":68,"style":68},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[34,123634,123635],{"__ignoreMap":68},[72,123636,123637,123639,123641],{"class":74,"line":75},[72,123638,24998],{"class":358},[72,123640,118873],{"class":366},[72,123642,123643],{"class":366}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[15,123645,123646],{},"输入如下内容：",[63,123648,123650],{"className":117586,"code":123649,"language":117588,"meta":68,"style":68},"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",[34,123651,123652,123682],{"__ignoreMap":68},[72,123653,123654,123657,123659,123662,123665,123668,123671,123673,123676,123679],{"class":74,"line":75},[72,123655,123656],{"class":82},"KERNEL",[72,123658,609],{"class":78},[72,123660,123661],{"class":366},"=\"ttyUSB*\",",[72,123663,123664],{"class":358}," ATTRS",[72,123666,123667],{"class":366},"{idVendor}==",[72,123669,123670],{"class":358},"\"10c4\"",[72,123672,932],{"class":358},[72,123674,123675],{"class":366}," ATTRS{idProduct}==\"ea60\",",[72,123677,123678],{"class":366}," MODE:=\"0777\",",[72,123680,123681],{"class":366}," SYMLINK+=\"mylidar\"\n",[72,123683,123684,123686,123688,123690,123692,123694,123697,123699,123702,123704],{"class":74,"line":370},[72,123685,123656],{"class":82},[72,123687,609],{"class":78},[72,123689,123661],{"class":366},[72,123691,123664],{"class":358},[72,123693,123667],{"class":366},[72,123695,123696],{"class":358},"\"1a86\"",[72,123698,932],{"class":358},[72,123700,123701],{"class":366}," ATTRS{idProduct}==\"7523\",",[72,123703,123678],{"class":366},[72,123705,123706],{"class":366}," SYMLINK+=\"mycar\"\n",[15,123708,123709],{},"代码解释：",[251,123711,123712,123715,123718,123721],{},[25,123713,123714],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[25,123716,123717],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[25,123719,123720],{},"SYMLINK是符号连接，即绑定的别名；",[25,123722,123723],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[15,123725,123726,123727,123730,123733],{},"***小提示：***",[23978,123728,123729],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[34,123731,123732],{},"\u002Fetc\u002Fudev\u002Frule.d",[23978,123734,123735],{},"目录即可。",[15,123737,123738],{},"表格 还在加载中，请等待加载完成后再尝试复制",[15,123740,123741],{},"（3）.使规则生效",[15,123743,123744],{},"在终端下输入如下指令：",[63,123746,123748],{"className":117586,"code":123747,"language":117588,"meta":68,"style":68},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[34,123749,123750,123755,123767,123778,123782,123787,123800],{"__ignoreMap":68},[72,123751,123752],{"class":74,"line":75},[72,123753,123754],{"class":621},"# Ubuntu用下方命令\n",[72,123756,123757,123759,123761,123764],{"class":74,"line":370},[72,123758,24998],{"class":358},[72,123760,120338],{"class":366},[72,123762,123763],{"class":366}," udev",[72,123765,123766],{"class":366}," reload\n",[72,123768,123769,123771,123773,123775],{"class":74,"line":1608},[72,123770,24998],{"class":358},[72,123772,120338],{"class":366},[72,123774,123763],{"class":366},[72,123776,123777],{"class":366}," restart\n",[72,123779,123780],{"class":74,"line":1623},[72,123781,2828],{"emptyLinePlaceholder":490},[72,123783,123784],{"class":74,"line":1629},[72,123785,123786],{"class":621},"#Fedora用下方命令\n",[72,123788,123789,123791,123794,123797],{"class":74,"line":1643},[72,123790,24998],{"class":358},[72,123792,123793],{"class":366}," udevadm",[72,123795,123796],{"class":366}," control",[72,123798,123799],{"class":362}," --reload\n",[72,123801,123802,123804,123806],{"class":74,"line":1649},[72,123803,24998],{"class":358},[72,123805,123793],{"class":366},[72,123807,123808],{"class":366}," trigger\n",[15,123810,123811],{},"再重新插拔设备即可。",[15,123813,123814],{},"（4）.测试",[15,123816,123817],{},"终端下输入如下指令",[63,123819,123821],{"className":117586,"code":123820,"language":117588,"meta":68,"style":68},"ll \u002Fdev | grep ttyUSB\n",[34,123822,123823],{"__ignoreMap":68},[72,123824,123825,123828,123831,123833,123835],{"class":74,"line":75},[72,123826,123827],{"class":358},"ll",[72,123829,123830],{"class":366}," \u002Fdev",[72,123832,25531],{"class":78},[72,123834,30657],{"class":358},[72,123836,123837],{"class":366}," ttyUSB\n",[15,123839,123840],{},"运行结果如下：",[15,123842,123843],{},[1891,123844],{"alt":68,"src":123845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[15,123847,123848,123849,123852],{},"也可以多次插拔USB设备，会发现设备端口",[34,123850,123851],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[15,123854,123855],{},[707,123856,118254],{},[15,123858,123859],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[531,123861,123863],{"id":123862},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[15,123865,123866,123868],{},[707,123867,123582],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[15,123870,123871,123873],{},[707,123872,123588],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[15,123875,123876],{},[707,123877,123594],{},[15,123879,123880],{},"（1）.查看所连接的主机USB接口的KERNELS",[15,123882,123883],{},"调用如下指令查看第一台雷达的USB信息：",[63,123885,123887],{"className":117586,"code":123886,"language":117588,"meta":68,"style":68},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[34,123888,123889,123909],{"__ignoreMap":68},[72,123890,123891,123894,123896,123899,123902,123904,123906],{"class":74,"line":75},[72,123892,123893],{"class":358},"udevadm",[72,123895,70239],{"class":366},[72,123897,123898],{"class":362}," --attribute-walk",[72,123900,123901],{"class":362}," --name=\u002Fdev\u002FttyUSB0",[72,123903,25531],{"class":78},[72,123905,30657],{"class":358},[72,123907,123908],{"class":366}," KERNELS\n",[72,123910,123911,123913,123915,123917,123920,123922,123924],{"class":74,"line":370},[72,123912,123893],{"class":358},[72,123914,70239],{"class":366},[72,123916,123898],{"class":362},[72,123918,123919],{"class":362}," --name=\u002Fdev\u002FttyACM0",[72,123921,25531],{"class":78},[72,123923,30657],{"class":358},[72,123925,123908],{"class":366},[15,123927,123928],{},[1891,123929],{"alt":68,"src":123930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[15,123932,123933],{},"调用如下指令查看第二台雷达的USB信息：",[63,123935,123937],{"className":117586,"code":123936,"language":117588,"meta":68,"style":68},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[34,123938,123939],{"__ignoreMap":68},[72,123940,123941,123943,123945,123947,123950,123952,123954],{"class":74,"line":75},[72,123942,123893],{"class":358},[72,123944,70239],{"class":366},[72,123946,123898],{"class":362},[72,123948,123949],{"class":362}," --name=\u002Fdev\u002FttyUSB1",[72,123951,25531],{"class":78},[72,123953,30657],{"class":358},[72,123955,123908],{"class":366},[15,123957,123958,123959,123962,123963,123966,123967,123970],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[34,123960,123961],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[34,123964,123965],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[707,123968,123969],{},"唯一性标识","”。",[15,123972,123622],{},[15,123974,123625,123975,123977],{},[34,123976,123628],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[63,123979,123980],{"className":117586,"code":123632,"language":117588,"meta":68,"style":68},[34,123981,123982],{"__ignoreMap":68},[72,123983,123984,123986,123988],{"class":74,"line":75},[72,123985,24998],{"class":358},[72,123987,118873],{"class":366},[72,123989,123643],{"class":366},[63,123991,123993],{"className":117586,"code":123992,"language":117588,"meta":68,"style":68},"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",[34,123994,123995,124024],{"__ignoreMap":68},[72,123996,123997,123999,124001,124003,124006,124008,124011,124014,124016,124019,124021],{"class":74,"line":75},[72,123998,123656],{"class":82},[72,124000,609],{"class":78},[72,124002,123661],{"class":366},[72,124004,124005],{"class":82}," KERNELS",[72,124007,609],{"class":78},[72,124009,124010],{"class":366},"=\"1-1.3:1.0\",",[72,124012,124013],{"class":358}," MODE:",[72,124015,609],{"class":366},[72,124017,124018],{"class":358},"\"0777\"",[72,124020,932],{"class":358},[72,124022,124023],{"class":366}," SYMLINK+=\"rplidar_front\"\n",[72,124025,124026,124028,124030,124032,124034,124036,124039,124041,124043,124045,124047],{"class":74,"line":370},[72,124027,123656],{"class":82},[72,124029,609],{"class":78},[72,124031,123661],{"class":366},[72,124033,124005],{"class":82},[72,124035,609],{"class":78},[72,124037,124038],{"class":366},"=\"1-1.4:1.0\",",[72,124040,124013],{"class":358},[72,124042,609],{"class":366},[72,124044,124018],{"class":358},[72,124046,932],{"class":358},[72,124048,124049],{"class":366}," SYMLINK+=\"rplidar_back\"\n",[15,124051,123741],{},[15,124053,123744],{},[63,124055,124056],{"className":117586,"code":123747,"language":117588,"meta":68,"style":68},[34,124057,124058,124062,124072,124082,124086,124090,124100],{"__ignoreMap":68},[72,124059,124060],{"class":74,"line":75},[72,124061,123754],{"class":621},[72,124063,124064,124066,124068,124070],{"class":74,"line":370},[72,124065,24998],{"class":358},[72,124067,120338],{"class":366},[72,124069,123763],{"class":366},[72,124071,123766],{"class":366},[72,124073,124074,124076,124078,124080],{"class":74,"line":1608},[72,124075,24998],{"class":358},[72,124077,120338],{"class":366},[72,124079,123763],{"class":366},[72,124081,123777],{"class":366},[72,124083,124084],{"class":74,"line":1623},[72,124085,2828],{"emptyLinePlaceholder":490},[72,124087,124088],{"class":74,"line":1629},[72,124089,123786],{"class":621},[72,124091,124092,124094,124096,124098],{"class":74,"line":1643},[72,124093,24998],{"class":358},[72,124095,123793],{"class":366},[72,124097,123796],{"class":366},[72,124099,123799],{"class":362},[72,124101,124102,124104,124106],{"class":74,"line":1649},[72,124103,24998],{"class":358},[72,124105,123793],{"class":366},[72,124107,123808],{"class":366},[15,124109,123811],{},[15,124111,123814],{},[15,124113,123817,124114,124117],{},[34,124115,124116],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[15,124119,124120],{},[1891,124121],{"alt":68,"src":124122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[15,124124,124125],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[15,124127,124128,124130],{},[707,124129,118254],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[531,124132,124134],{"id":124133},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[15,124136,124137],{},"（1）.查看所连接的主机USB接口的信息",[63,124139,124141],{"className":117586,"code":124140,"language":117588,"meta":68,"style":68},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[34,124142,124143,124173],{"__ignoreMap":68},[72,124144,124145,124147,124149,124152,124154,124156,124158,124160,124163,124166,124168,124171],{"class":74,"line":75},[72,124146,123893],{"class":358},[72,124148,70239],{"class":366},[72,124150,124151],{"class":362}," -a",[72,124153,363],{"class":362},[72,124155,28844],{"class":82},[72,124157,123893],{"class":358},[72,124159,70239],{"class":366},[72,124161,124162],{"class":362}," -q",[72,124164,124165],{"class":366}," path",[72,124167,25537],{"class":362},[72,124169,124170],{"class":366}," \u002Fdev\u002FttyACM0",[72,124172,570],{"class":82},[72,124174,124175,124177,124179,124181,124183,124185,124187,124189,124191,124193,124195,124198],{"class":74,"line":370},[72,124176,123893],{"class":358},[72,124178,70239],{"class":366},[72,124180,124151],{"class":362},[72,124182,363],{"class":362},[72,124184,28844],{"class":82},[72,124186,123893],{"class":358},[72,124188,70239],{"class":366},[72,124190,124162],{"class":362},[72,124192,124165],{"class":366},[72,124194,25537],{"class":362},[72,124196,124197],{"class":366}," \u002Fdev\u002FttyUSB0",[72,124199,570],{"class":82},[15,124201,124202],{},[1891,124203],{"alt":68,"src":124204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[15,124206,124207],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[15,124209,123622],{},[15,124211,123625,124212,123977],{},[34,124213,123628],{},[63,124215,124216],{"className":117586,"code":123632,"language":117588,"meta":68,"style":68},[34,124217,124218],{"__ignoreMap":68},[72,124219,124220,124222,124224],{"class":74,"line":75},[72,124221,24998],{"class":358},[72,124223,118873],{"class":366},[72,124225,123643],{"class":366},[63,124227,124229],{"className":117586,"code":124228,"language":117588,"meta":68,"style":68},"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",[34,124230,124231,124259,124285],{"__ignoreMap":68},[72,124232,124233,124235,124237,124240,124242,124244,124246,124248,124251,124254,124256],{"class":74,"line":75},[72,124234,123656],{"class":82},[72,124236,609],{"class":78},[72,124238,124239],{"class":366},"=\"ttyACM*\",",[72,124241,123664],{"class":358},[72,124243,123667],{"class":366},[72,124245,123696],{"class":358},[72,124247,932],{"class":358},[72,124249,124250],{"class":366}," ATTRS{idProduct}==\"55d4\",",[72,124252,124253],{"class":366}," ATTRS{serial}==\"0001\",",[72,124255,123678],{"class":366},[72,124257,124258],{"class":366}," SYMLINK+=\"ttyACM_MCU\"\n",[72,124260,124261,124263,124265,124267,124269,124271,124273,124275,124277,124280,124282],{"class":74,"line":370},[72,124262,123656],{"class":82},[72,124264,609],{"class":78},[72,124266,124239],{"class":366},[72,124268,123664],{"class":358},[72,124270,123667],{"class":366},[72,124272,123696],{"class":358},[72,124274,932],{"class":358},[72,124276,124250],{"class":366},[72,124278,124279],{"class":366}," ATTRS{serial}==\"0002\",",[72,124281,123678],{"class":366},[72,124283,124284],{"class":366}," SYMLINK+=\"ttyACM_Lidar\"\n",[72,124286,124287,124289,124291,124293,124295,124297,124299,124301,124303,124305],{"class":74,"line":1608},[72,124288,123656],{"class":82},[72,124290,609],{"class":78},[72,124292,123661],{"class":366},[72,124294,123664],{"class":358},[72,124296,123667],{"class":366},[72,124298,123696],{"class":358},[72,124300,932],{"class":358},[72,124302,123701],{"class":366},[72,124304,123678],{"class":366},[72,124306,124307],{"class":366}," SYMLINK+=\"ttyUSB_IMU\"\n",[15,124309,123741],{},[15,124311,123744],{},[63,124313,124314],{"className":117586,"code":123747,"language":117588,"meta":68,"style":68},[34,124315,124316,124320,124330,124340,124344,124348,124358],{"__ignoreMap":68},[72,124317,124318],{"class":74,"line":75},[72,124319,123754],{"class":621},[72,124321,124322,124324,124326,124328],{"class":74,"line":370},[72,124323,24998],{"class":358},[72,124325,120338],{"class":366},[72,124327,123763],{"class":366},[72,124329,123766],{"class":366},[72,124331,124332,124334,124336,124338],{"class":74,"line":1608},[72,124333,24998],{"class":358},[72,124335,120338],{"class":366},[72,124337,123763],{"class":366},[72,124339,123777],{"class":366},[72,124341,124342],{"class":74,"line":1623},[72,124343,2828],{"emptyLinePlaceholder":490},[72,124345,124346],{"class":74,"line":1629},[72,124347,123786],{"class":621},[72,124349,124350,124352,124354,124356],{"class":74,"line":1643},[72,124351,24998],{"class":358},[72,124353,123793],{"class":366},[72,124355,123796],{"class":366},[72,124357,123799],{"class":362},[72,124359,124360,124362,124364],{"class":74,"line":1649},[72,124361,24998],{"class":358},[72,124363,123793],{"class":366},[72,124365,123808],{"class":366},[15,124367,124368,124369],{},"再重新插拔设备即可，或者 ",[707,124370,124371],{},"直接重启系统。",[15,124373,123814],{},[15,124375,123817,124376,124117],{},[34,124377,124116],{},[15,124379,124380],{},[1891,124381],{"alt":68,"src":124382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[15,124384,124125],{},[15,124386,124387,124389],{},[707,124388,118254],{}," 一些设备可能没有串口号等。",[531,124391,124393],{"id":124392},"_744-其他注意事项","7.4.4 其他注意事项",[15,124395,124396,124397,124399,124400,124403,124404,18836,124407,124410,124411,124413],{},"并非所有的USB设备端口号都是",[34,124398,123851],{},"的格式，比如Arduino的端口号可能是",[34,124401,124402],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[34,124405,124406],{},"videon",[34,124408,124409],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[34,124412,124406],{},"端口，绑定时需要关联的也是该接口。",[15,124415,124416,124417,124420,124421,124424,124425,124427,124428,124431,124432,124435,124436,124439,124440,124439,124443,124439,124446,28807],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[34,124418,124419],{},"KERNEL==\"ttyUSB*\"","修改为",[34,124422,124423],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[34,124426,124419],{},"修改为类似于",[34,124429,124430],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[34,124433,124434],{},"video[0,2,4,6]","表示可以绑定的端口为",[34,124437,124438],{},"video0","或",[34,124441,124442],{},"video2",[34,124444,124445],{},"video4",[34,124447,124448],{},"video6",[85,124450,124452],{"id":124451},"_75-挂载内网网页","7.5 挂载内网网页",[15,124454,124455],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[15,124457,124458],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[15,124460,124461],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[15,124463,124464,124465],{},"Termux 下载地址（F-Droid）：",[257,124466,124467],{"href":124467,"rel":124468},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[261],[15,124470,124471],{},"首先打开app后，先更新软件缓存：",[63,124473,124475],{"className":117586,"code":124474,"language":117588,"meta":68,"style":68},"pkg update\n",[34,124476,124477],{"__ignoreMap":68},[72,124478,124479,124482],{"class":74,"line":75},[72,124480,124481],{"class":358},"pkg",[72,124483,26664],{"class":366},[15,124485,124486],{},"然后换源",[63,124488,124490],{"className":117586,"code":124489,"language":117588,"meta":68,"style":68},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[34,124491,124492],{"__ignoreMap":68},[72,124493,124494,124496,124499],{"class":74,"line":75},[72,124495,123364],{"class":358},[72,124497,124498],{"class":82}," $PREFIX",[72,124500,124501],{"class":366},"\u002Fetc\u002Fapt\u002Fsources.list\n",[15,124503,124504],{},"将该文件内容替换为下面：",[63,124506,124508],{"className":117586,"code":124507,"language":117588,"meta":68,"style":68},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[34,124509,124510],{"__ignoreMap":68},[72,124511,124512,124515,124518,124521],{"class":74,"line":75},[72,124513,124514],{"class":358},"deb",[72,124516,124517],{"class":366}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[72,124519,124520],{"class":366}," stable",[72,124522,124523],{"class":366}," main\n",[251,124525,124526,124553],{},[25,124527,124528,124529,124531,124532],{},"如果你使用的是",[34,124530,123364],{},"编辑器：",[251,124533,124534,124541,124547],{},[25,124535,124536,124537,124540],{},"按 ",[34,124538,124539],{},"Ctrl+O"," 保存文件。",[25,124542,124536,124543,124546],{},[34,124544,124545],{},"Enter"," 确认文件名。",[25,124548,124536,124549,124552],{},[34,124550,124551],{},"Ctrl+X"," 退出编辑器。",[25,124554,124528,124555,124531,124558],{},[34,124556,124557],{},"vim",[251,124559,124560,124566],{},[25,124561,124536,124562,124565],{},[34,124563,124564],{},"Esc"," 退出编辑模式。",[25,124567,124568,124569,124571],{},"输入 ",[34,124570,119511],{}," 保存并退出。",[15,124573,124574],{},"接下来重新更新软件源：",[63,124576,124578],{"className":117586,"code":124577,"language":117588,"meta":68,"style":68},"pkg update && pkg upgrade\n",[34,124579,124580],{"__ignoreMap":68},[72,124581,124582,124584,124586,124588,124590],{"class":74,"line":75},[72,124583,124481],{"class":358},[72,124585,117637],{"class":366},[72,124587,26612],{"class":82},[72,124589,124481],{"class":358},[72,124591,117623],{"class":366},[15,124593,124594],{},"安装python：",[63,124596,124598],{"className":117586,"code":124597,"language":117588,"meta":68,"style":68},"pkg install python\n",[34,124599,124600],{"__ignoreMap":68},[72,124601,124602,124604,124606],{"class":74,"line":75},[72,124603,124481],{"class":358},[72,124605,24256],{"class":366},[72,124607,124608],{"class":366}," python\n",[15,124610,124611,26895],{},[707,124612,124613],{},"通过Termux访问设备存储",[15,124615,124616],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[63,124618,124620],{"className":117586,"code":124619,"language":117588,"meta":68,"style":68},"termux-setup-storage\n",[34,124621,124622],{"__ignoreMap":68},[72,124623,124624],{"class":74,"line":75},[72,124625,124619],{"class":358},[22,124627,124628],{},[25,124629,124630,26895,124633],{},[707,124631,124632],{},"进入HTML文件所在的目录",[22,124634,124635],{},[25,124636,124637,124638,124640],{},"使用",[34,124639,373],{},"命令进入HTML文件所在的目录：",[63,124642,124644],{"className":117586,"code":124643,"language":117588,"meta":68,"style":68},"cd ~\u002Fyour_html_folder\n",[34,124645,124646],{"__ignoreMap":68},[72,124647,124648,124650],{"class":74,"line":75},[72,124649,373],{"class":362},[72,124651,124652],{"class":366}," ~\u002Fyour_html_folder\n",[22,124654,124655],{"start":370},[25,124656,124657,26895,124660,124665,124682],{},[707,124658,124659],{},"启动Python HTTP服务器",[22,124661,124662],{},[25,124663,124664],{},"运行以下命令启动一个简单的HTTP服务器：",[63,124666,124668],{"className":117586,"code":124667,"language":117588,"meta":68,"style":68},"python -m http.server 8000\n",[34,124669,124670],{"__ignoreMap":68},[72,124671,124672,124674,124676,124679],{"class":74,"line":75},[72,124673,67],{"class":358},[72,124675,101297],{"class":362},[72,124677,124678],{"class":366}," http.server",[72,124680,124681],{"class":362}," 8000\n",[22,124683,124684],{"start":1608},[25,124685,124686,124687,124690],{},"这会在端口",[34,124688,124689],{},"8000","上启动一个Web服务器。",[251,124692,124693],{},[25,124694,124695],{},"启动服务器后，Termux会显示日志信息，例如：",[63,124697,124699],{"className":121106,"code":124698,"language":121108,"meta":121109,"style":68},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[34,124700,124701],{"__ignoreMap":68},[72,124702,124703],{"class":74,"line":75},[72,124704,124698],{},[251,124706,124707],{},[25,124708,124709],{},"这表示服务器已成功启动。",[15,124711,124712],{},[707,124713,124714],{},"在浏览器中访问HTML文件",[22,124716,124717],{},[25,124718,124719,26895,124722,124727],{},[707,124720,124721],{},"在同一设备上访问",[22,124723,124724],{},[25,124725,124726],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[63,124728,124731],{"className":124729,"code":124730,"language":72082,"meta":68,"style":68},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[34,124732,124733],{"__ignoreMap":68},[72,124734,124735,124738],{"class":74,"line":75},[72,124736,124737],{"class":82},"http:",[72,124739,124740],{"class":621},"\u002F\u002Flocalhost:8000\n",[251,124742,124743],{},[25,124744,124745,124746,124749],{},"如果HTML文件中有",[34,124747,124748],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[85,124751,124753],{"id":124752},"_76-linux重点知识","7.6 Linux重点知识",[531,124755,124757],{"id":124756},"_761-关于点的说明","7.6.1 关于点的说明",[15,124759,124760],{},[1891,124761],{"alt":68,"src":124762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[15,124764,124765],{},"一点本目录，两点上目录",[531,124767,124769],{"id":124768},"_762-目录","7.6.2 目录",[22423,124771,124773],{"id":124772},"_7621-系统启动必须","7.6.2.1 系统启动必须",[15,124775,124776],{},[707,124777,124778],{},"\u002Fboot:",[15,124780,124781],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[15,124783,124784],{},[707,124785,124786],{},"\u002Fetc:",[15,124788,124789],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[15,124791,124792],{},[707,124793,124794],{},"\u002Flib：",[15,124796,124797],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[15,124799,124800],{},[707,124801,124802],{},"\u002Fsys:",[15,124804,124805],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[22423,124807,124809],{"id":124808},"_7622-指令集合","7.6.2.2 指令集合",[15,124811,124812],{},[707,124813,124814],{},"\u002Fbin:",[15,124816,124817],{},"为二进制文件的缩写，存放最经常使用的命令",[15,124819,124820],{},[707,124821,124822],{},"\u002Fsbin:",[15,124824,124825],{},"只有系统管理员才能使用的程序和指令",[22423,124827,124829],{"id":124828},"_7623-外部文件管理","7.6.2.3 外部文件管理",[15,124831,124832],{},[707,124833,124834],{},"\u002Fdev:",[15,124836,124837],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[15,124839,124840],{},[707,124841,124842],{},"\u002Fmedia:",[15,124844,124845],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[15,124847,124848],{},[707,124849,124850],{},"\u002Fmnt:",[15,124852,124853],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[22423,124855,124857],{"id":124856},"_7624-临时文件","7.6.2.4 临时文件",[15,124859,124860],{},[707,124861,124862],{},"\u002Frun:",[15,124864,124865],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[15,124867,124868],{},[707,124869,124870],{},"\u002Flost+found:",[15,124872,124873],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[15,124875,124876],{},[707,124877,124878],{},"\u002Ftmp:",[15,124880,124881],{},"这个目录是用来存放一些临时文件的",[22423,124883,124885],{"id":124884},"_7625-账户","7.6.2.5 账户",[15,124887,124888],{},[707,124889,124890],{},"\u002Froot：",[15,124892,124893],{},"系统管理员的用户主目录",[15,124895,124896,26895],{},[707,124897,124898],{},"\u002Fhome",[15,124900,124901],{},"用户的主目录，以用户的账号命名的",[15,124903,124904,26895],{},[707,124905,124906],{},"\u002Fusr",[15,124908,124909],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[15,124911,124912],{},[707,124913,124914],{},"\u002Fusr\u002Fbin：",[15,124916,124917],{},"系统用户使用的应用程序与指令",[15,124919,124920],{},[707,124921,124922],{},"\u002Fusr\u002Fsbin：",[15,124924,124925],{},"超级用户使用的比较高级的管理程序和系统守护程序",[15,124927,124928],{},[707,124929,124930],{},"\u002Fusr\u002Fsrc：",[15,124932,124933],{},"内核源代码默认的放置目录",[22423,124935,124937],{"id":124936},"_7626-运行过程要用","7.6.2.6 运行过程要用",[15,124939,124940],{},[707,124941,124942],{},"\u002Fvar：",[15,124944,124945],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[15,124947,124948],{},[707,124949,124950],{},"\u002Fproc:",[15,124952,124953,124954,124957],{},"管理 ",[707,124955,124956],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[22423,124959,124961],{"id":124960},"_7627-扩展用的","7.6.2.7 扩展用的",[15,124963,124964],{},[707,124965,124966],{},"\u002Fopt:",[15,124968,124969],{},"默认是空的，我们安装额外软件可以放在这个里面",[15,124971,124972],{},[707,124973,124974],{},"\u002Fsrv:",[15,124976,124977],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[531,124979,124981],{"id":124980},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[15,124983,124984],{},[1891,124985],{"alt":68,"src":124986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[15,124988,124989],{},"windows-->linux:",[15,124991,124992],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[15,124994,124995],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[15,124997,124998],{},"linux传输文件到windows",[15,125000,125001],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[531,125003,125005],{"id":125004},"_764-易忘知识","7.6.4 易忘知识",[15,125007,125008],{},"操作系统内核查看",[63,125010,125011],{"className":117586,"code":121580,"language":117588,"meta":68,"style":68},[34,125012,125013],{"__ignoreMap":68},[72,125014,125015,125017],{"class":74,"line":75},[72,125016,70622],{"class":358},[72,125018,121589],{"class":362},[15,125020,125021],{},[1891,125022],{"alt":68,"src":125023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[15,125025,125026],{},[1891,125027],{"alt":68,"src":125028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[63,125030,125032],{"className":117586,"code":125031,"language":117588,"meta":68,"style":68},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[34,125033,125034,125046],{"__ignoreMap":68},[72,125035,125036,125038,125041,125044],{"class":74,"line":75},[72,125037,121797],{"class":358},[72,125039,125040],{"class":366}," mvtest",[72,125042,125043],{"class":366}," mvtest2",[72,125045,3102],{"class":82},[72,125047,125048],{"class":74,"line":370},[72,125049,125050],{"class":358},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[15,125052,125053],{},[1891,125054],{"alt":68,"src":125055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[15,125057,125058],{},[1891,125059],{"alt":68,"src":125060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[15,125062,125063,125064,125067],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[34,125065,125066],{},"du -a"," 可以快速查看磁盘使用细节。",[531,125069,125071],{"id":125070},"_765-vim","7.6.5 Vim",[15,125073,125074],{},[1891,125075],{"alt":68,"src":125076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[15,125078,125079],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[15,125081,125082],{},"一开始进去为命令模式，此时点击输入的字母为命令",[15,125084,125085],{},[707,125086,125087],{},"1.命令模式：",[15,125089,125090],{},"i 切换到输入模式，在光标当前位置开始输入文本",[15,125092,125093],{},"x 删除当前光标所在处的字符",[15,125095,125096],{},"：切换到底线命令模式，以在最底一行输入命令",[15,125098,125099],{},"a 进行插入模式，在光标下一个位置输入文本",[15,125101,125102],{},"o 在当前的下方插入一个新行，并进入插入模式",[15,125104,125105],{},"0 在当前行的上方插入一个新行，并进入插入模式",[15,125107,125108],{},"dd 剪切当前行",[15,125110,125111],{},"yy 复制当前行",[15,125113,125114],{},"p 粘贴剪贴板内容到光标下方",[15,125116,125117],{},"P 粘贴剪贴板内容到光标上方",[15,125119,125120],{},"u 撤销上一次操作",[15,125122,125123],{},"ctrl+r 重做上一次操作",[15,125125,125126,125128],{},[1349,125127],{}," 保存文件",[15,125130,125131,125133],{},[1199,125132],{}," 退出Vim编辑器",[15,125135,125136,125138],{},[1199,125137],{},"! 强制退出Vim编辑器，不保存修改",[15,125140,125141],{},[707,125142,125143],{},"2.输入模式：",[15,125145,125146],{},[1891,125147],{"alt":68,"src":125148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[15,125150,125151],{},[707,125152,125153],{},"3.底线命令模式：",[15,125155,125156],{},[1891,125157],{"alt":68,"src":125158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[15,125160,125161],{},"按下esc可以退出底线命令模式",[531,125163,125165],{"id":125164},"_766-apt","7.6.6 apt",[15,125167,125168],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[531,125170,125172],{"id":125171},"_767-home与root的区别","7.6.7 home与root的区别",[15,125174,125175],{},[1891,125176],{"alt":68,"src":125177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[15,125179,125180],{},[1891,125181],{"alt":68,"src":125182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[15,125184,125185],{},[1891,125186],{"alt":68,"src":125187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[15,125189,125190],{},[1891,125191],{"alt":68,"src":125192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[531,125194,125196],{"id":125195},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[15,125198,125199],{},[257,125200,125201],{"href":125201,"rel":125202},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[261],[22,125204,125205,125208],{},[25,125206,125207],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[25,125209,125210],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[15,125212,125213],{},[1891,125214],{"alt":68,"src":125215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[15,125217,125218],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[15,125220,125221],{},[1891,125222],{"alt":68,"src":125223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[63,125225,125227],{"className":121106,"code":125226,"language":121108,"meta":121109,"style":68},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[34,125228,125229,125234],{"__ignoreMap":68},[72,125230,125231],{"class":74,"line":75},[72,125232,125233],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[72,125235,125236],{"class":74,"line":370},[72,125237,125238],{},".\u002Fpycharm.sh\n",[15,125240,125241],{},"3️⃣创建.desktop文件",[15,125243,125244],{},[707,125245,125246],{},"原理：",[251,125248,125249,125259],{},[25,125250,125251,125252,125258],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[707,125253,125254,125257],{},[34,125255,125256],{},".desktop"," 文件"," 来识别应用。",[25,125260,125261,125263,125264],{},[34,125262,125256],{}," 文件相当于一个“应用注册表”，告诉系统：",[251,125265,125266,125269,125272,125275,125278],{},[25,125267,125268],{},"应用名字（Name）",[25,125270,125271],{},"图标（Icon）",[25,125273,125274],{},"执行命令（Exec）",[25,125276,125277],{},"分类（Categories）",[25,125279,125280],{},"是否需要终端（Terminal）",[63,125282,125284],{"className":121106,"code":125283,"language":121108,"meta":121109,"style":68},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[34,125285,125286,125291],{"__ignoreMap":68},[72,125287,125288],{"class":74,"line":75},[72,125289,125290],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[72,125292,125293],{"class":74,"line":370},[72,125294,125295],{},"nano pycharm.desktop\n",[15,125297,125298],{},"nano是一个命令行下的编辑器，也可以使用vim",[63,125300,125302],{"className":121106,"code":125301,"language":121108,"meta":121109,"style":68},"[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",[34,125303,125304,125309,125314,125319,125324,125329,125334,125339,125344,125349],{"__ignoreMap":68},[72,125305,125306],{"class":74,"line":75},[72,125307,125308],{},"[Desktop Entry]\n",[72,125310,125311],{"class":74,"line":370},[72,125312,125313],{},"Version=1.0\n",[72,125315,125316],{"class":74,"line":1608},[72,125317,125318],{},"Type=Application\n",[72,125320,125321],{"class":74,"line":1623},[72,125322,125323],{},"Name=PyCharm\n",[72,125325,125326],{"class":74,"line":1629},[72,125327,125328],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[72,125330,125331],{"class":74,"line":1643},[72,125332,125333],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[72,125335,125336],{"class":74,"line":1649},[72,125337,125338],{},"Comment=JetBrains PyCharm IDE\n",[72,125340,125341],{"class":74,"line":1740},[72,125342,125343],{},"Categories=Development;IDE;\n",[72,125345,125346],{"class":74,"line":1746},[72,125347,125348],{},"Terminal=false\n",[72,125350,125351],{"class":74,"line":1758},[72,125352,125353],{},"StartupWMClass=jetbrains-pycharm\n",[251,125355,125356,125362,125368,125374],{},[25,125357,125358,125361],{},[34,125359,125360],{},"Exec"," → 点击图标时执行的命令",[25,125363,125364,125367],{},[34,125365,125366],{},"Icon"," → 显示在菜单和桌面上的图标",[25,125369,125370,125373],{},[34,125371,125372],{},"Terminal=false"," → 不打开终端",[25,125375,125376,125379],{},[34,125377,125378],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125381,125382,125383],"blockquote",{},[15,125384,125385,125386,125388,125389],{},"可以理解成 ",[34,125387,125256],{}," 文件是 Linux 的 ",[707,125390,125391],{},"快捷方式配置文件",[15,125393,125394],{},"4️⃣设置可执行权限",[63,125396,125398],{"className":121106,"code":125397,"language":121108,"meta":121109,"style":68},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[34,125399,125400],{"__ignoreMap":68},[72,125401,125402],{"class":74,"line":75},[72,125403,125397],{},[15,125405,125406],{},"5️⃣桌面图标启动的话如下：",[63,125408,125410],{"className":121106,"code":125409,"language":121108,"meta":121109,"style":68},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[34,125411,125412,125417],{"__ignoreMap":68},[72,125413,125414],{"class":74,"line":75},[72,125415,125416],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[72,125418,125419],{"class":74,"line":370},[72,125420,125421],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[22,125423,125424],{"start":1608},[25,125425,125426],{},"下载Appimage文件实现软件的安装",[15,125428,125429],{},"1️⃣先下载appimage",[15,125431,125432],{},[257,125433,125434],{"href":125434,"rel":125435},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[261],[15,125437,125438],{},[1891,125439],{"alt":68,"src":125440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[15,125442,125443],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[15,125445,125446],{},[1891,125447],{"alt":68,"src":125448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[15,125450,125451],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[15,125453,125454],{},[1891,125455],{"alt":68,"src":125456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[15,125458,125459],{},[1891,125460],{"alt":68,"src":125461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[15,125463,125464,125465,125468],{},"3️⃣给他们放在",[34,125466,125467],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[15,125470,125471],{},"4️⃣给软件执行权限",[63,125473,125475],{"className":121106,"code":125474,"language":121108,"meta":121109,"style":68},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[34,125476,125477,125482],{"__ignoreMap":68},[72,125478,125479],{"class":74,"line":75},[72,125480,125481],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[72,125483,125484],{"class":74,"line":370},[72,125485,125486],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[15,125488,125489],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[63,125491,125493],{"className":117586,"code":125492,"language":117588,"meta":68,"style":68},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[34,125494,125495,125502,125509,125515],{"__ignoreMap":68},[72,125496,125497,125499],{"class":74,"line":75},[72,125498,373],{"class":362},[72,125500,125501],{"class":366}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[72,125503,125504,125506],{"class":74,"line":370},[72,125505,101690],{"class":358},[72,125507,125508],{"class":366}," .\u002Fqqmusic.desktop\n",[72,125510,125511,125513],{"class":74,"line":1608},[72,125512,124557],{"class":358},[72,125514,125508],{"class":366},[72,125516,125517,125519,125521,125523],{"class":74,"line":1623},[72,125518,24998],{"class":358},[72,125520,25001],{"class":366},[72,125522,123423],{"class":366},[72,125524,125508],{"class":366},[15,125526,125527,125529],{},[34,125528,101690],{},"：一个 Linux 命令，主要功能是：",[251,125531,125532,125535],{},[25,125533,125534],{},"如果文件不存在，就创建一个新的空文件",[25,125536,125537],{},"如果文件已存在，就更新该文件的最后修改时间",[63,125539,125541],{"className":121106,"code":125540,"language":121108,"meta":121109,"style":68},"[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",[34,125542,125543,125547,125552,125557,125562,125566,125571],{"__ignoreMap":68},[72,125544,125545],{"class":74,"line":75},[72,125546,125308],{},[72,125548,125549],{"class":74,"line":370},[72,125550,125551],{},"Name=QQ音乐\n",[72,125553,125554],{"class":74,"line":1608},[72,125555,125556],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[72,125558,125559],{"class":74,"line":1623},[72,125560,125561],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[72,125563,125564],{"class":74,"line":1629},[72,125565,125318],{},[72,125567,125568],{"class":74,"line":1643},[72,125569,125570],{},"Categories=Audio;Music;Player;\n",[72,125572,125573],{"class":74,"line":1649},[72,125574,125575],{},"Comment=QQ Music Client for Linux\n",[15,125577,125578],{},"将文件复制进去",[15,125580,125581],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[15,125583,125584],{},[1891,125585],{"alt":68,"src":125586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[15,125588,125589],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[15,125591,125592],{},[1891,125593],{"alt":68,"src":125594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[15,125596,125597,125598,125601,125602,125605],{},"如果你用的不是KDE，那么也可以直接修改",[34,125599,125600],{},"qqmuic.desktop","：在exec的末尾加上",[34,125603,125604],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[63,125607,125609],{"className":121106,"code":125608,"language":121108,"meta":121109,"style":68},"[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",[34,125610,125611,125615,125619,125624,125628,125632,125636],{"__ignoreMap":68},[72,125612,125613],{"class":74,"line":75},[72,125614,125308],{},[72,125616,125617],{"class":74,"line":370},[72,125618,125551],{},[72,125620,125621],{"class":74,"line":1608},[72,125622,125623],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[72,125625,125626],{"class":74,"line":1623},[72,125627,125561],{},[72,125629,125630],{"class":74,"line":1629},[72,125631,125318],{},[72,125633,125634],{"class":74,"line":1643},[72,125635,125570],{},[72,125637,125638],{"class":74,"line":1649},[72,125639,125575],{},[15,125641,125642],{},[1891,125643],{"alt":68,"src":125644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[15,125646,125647],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[63,125649,125651],{"className":121106,"code":125650,"language":121108,"meta":121109,"style":68},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[34,125652,125653],{"__ignoreMap":68},[72,125654,125655],{"class":74,"line":75},[72,125656,125650],{},[22,125658,125659],{"start":1623},[25,125660,125661],{},"去Flathub上安装软件",[15,125663,125664],{},[257,125665,125666],{"href":125666,"rel":125667},"https:\u002F\u002Fflathub.org\u002F",[261],[15,125669,125670],{},"1️⃣去上面的官网搜索软件+下载软件",[15,125672,125673],{},[1891,125674],{"alt":68,"src":125675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[63,125677,125679],{"className":121106,"code":125678,"language":121108,"meta":121109,"style":68},"flatpak install flathub com.obsproject.Studio\n",[34,125680,125681],{"__ignoreMap":68},[72,125682,125683],{"class":74,"line":75},[72,125684,125678],{},[15,125686,125687],{},[1891,125688],{"alt":68,"src":125689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[15,125691,125692],{},"2️⃣运行软件",[15,125694,125695],{},"a.官方方式：",[15,125697,125698],{},[1891,125699],{"alt":68,"src":125700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[63,125702,125703],{"className":121106,"code":125678,"language":121108,"meta":121109,"style":68},[34,125704,125705],{"__ignoreMap":68},[72,125706,125707],{"class":74,"line":75},[72,125708,125678],{},[15,125710,125711],{},"b.当普通软件运行：",[15,125713,125714],{},[1891,125715],{"alt":68,"src":125716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[15,125718,125719],{},[1891,125720],{"alt":68,"src":125721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[473,125723,125724],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":68,"searchDepth":370,"depth":370,"links":125726},[125727,125728,125733,125734,125740,125741],{"id":122459,"depth":370,"text":122460},{"id":122801,"depth":370,"text":122802,"children":125729},[125730,125731,125732],{"id":122805,"depth":1608,"text":122806},{"id":122872,"depth":1608,"text":122873},{"id":123133,"depth":1608,"text":123134},{"id":123286,"depth":370,"text":123287},{"id":123524,"depth":370,"text":123525,"children":125735},[125736,125737,125738,125739],{"id":123576,"depth":1608,"text":123577},{"id":123862,"depth":1608,"text":123863},{"id":124133,"depth":1608,"text":124134},{"id":124392,"depth":1608,"text":124393},{"id":124451,"depth":370,"text":124452},{"id":124752,"depth":370,"text":124753,"children":125742},[125743,125744,125745,125746,125747,125748,125749,125750],{"id":124756,"depth":1608,"text":124757},{"id":124768,"depth":1608,"text":124769},{"id":124980,"depth":1608,"text":124981},{"id":125004,"depth":1608,"text":125005},{"id":125070,"depth":1608,"text":125071},{"id":125164,"depth":1608,"text":125165},{"id":125171,"depth":1608,"text":125172},{"id":125195,"depth":1608,"text":125196},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122451,"description":23802},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125757,"title":125758,"body":125759,"description":23802,"extension":487,"meta":125763,"navigation":490,"path":125764,"seo":125765,"stem":125766,"__hash__":125767},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125760,"toc":125761},[],{"title":68,"searchDepth":370,"depth":370,"links":125762},[],{"category":30684},"\u002Fwiki\u002F2025-01-27-linux",{"title":125758,"description":23802},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125769,"title":125770,"body":125771,"description":125775,"extension":487,"meta":126166,"navigation":490,"path":126167,"seo":126168,"stem":126169,"__hash__":126170},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":125772,"toc":126164},[125773,125776,125780,125797,125800,125853,125857,125859,125899,125908,125912,125915,126156,126161],[15,125774,125775],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,125777,125779],{"id":125778},"_1ubuntu环境配置","1.Ubuntu环境配置",[22,125781,125782,125785,125788,125791,125794],{},[25,125783,125784],{},"ubuntu环境换源",[25,125786,125787],{},"安装cuda",[25,125789,125790],{},"安装miniconda",[25,125792,125793],{},"安装pytorch",[25,125795,125796],{},"安装genesis",[15,125798,125799],{},"参考链接：",[63,125801,125803],{"className":349,"code":125802,"language":351,"meta":68,"style":68},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[34,125804,125805],{"__ignoreMap":68},[72,125806,125807,125810,125813,125816,125818,125821,125824,125826,125829,125832,125834,125837,125840,125842,125845,125848,125850],{"class":74,"line":75},[72,125808,125809],{"class":358},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[72,125811,125812],{"class":366},"=blogdetail",[72,125814,125815],{"class":82},"&sharetype",[72,125817,609],{"class":78},[72,125819,125820],{"class":366},"blogdetail",[72,125822,125823],{"class":82},"&sharerId",[72,125825,609],{"class":78},[72,125827,125828],{"class":366},"144728092",[72,125830,125831],{"class":82},"&sharerefer",[72,125833,609],{"class":78},[72,125835,125836],{"class":366},"PC",[72,125838,125839],{"class":82},"&sharesource",[72,125841,609],{"class":78},[72,125843,125844],{"class":366},"qq_69379513",[72,125846,125847],{"class":82},"&sharefrom",[72,125849,609],{"class":78},[72,125851,125852],{"class":366},"from_link\n",[10,125854,125856],{"id":125855},"_2genesis-报错issue","2.Genesis 报错issue",[15,125858,125799],{},[63,125860,125861],{"className":349,"code":125802,"language":351,"meta":68,"style":68},[34,125862,125863],{"__ignoreMap":68},[72,125864,125865,125867,125869,125871,125873,125875,125877,125879,125881,125883,125885,125887,125889,125891,125893,125895,125897],{"class":74,"line":75},[72,125866,125809],{"class":358},[72,125868,125812],{"class":366},[72,125870,125815],{"class":82},[72,125872,609],{"class":78},[72,125874,125820],{"class":366},[72,125876,125823],{"class":82},[72,125878,609],{"class":78},[72,125880,125828],{"class":366},[72,125882,125831],{"class":82},[72,125884,609],{"class":78},[72,125886,125836],{"class":366},[72,125888,125839],{"class":82},[72,125890,609],{"class":78},[72,125892,125844],{"class":366},[72,125894,125847],{"class":82},[72,125896,609],{"class":78},[72,125898,125852],{"class":366},[63,125900,125902],{"className":349,"code":125901,"language":351,"meta":68,"style":68},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[34,125903,125904],{"__ignoreMap":68},[72,125905,125906],{"class":74,"line":75},[72,125907,125901],{"class":358},[10,125909,125911],{"id":125910},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[15,125913,125914],{},"hello_robot.py",[63,125916,125918],{"className":65,"code":125917,"language":67,"meta":68,"style":68},"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",[34,125919,125920,125926,125941,125945,125957,125969,125973,125986,125990,126009,126019,126029,126043,126047,126051,126056,126060,126070,126077,126091,126098,126108,126113,126117,126135,126140,126144,126151],{"__ignoreMap":68},[72,125921,125922,125924],{"class":74,"line":75},[72,125923,79],{"class":78},[72,125925,45723],{"class":82},[72,125927,125928,125931,125934,125936,125938],{"class":74,"line":370},[72,125929,125930],{"class":82},"os.environ[",[72,125932,125933],{"class":366},"'PYOPENGL_PLATFORM'",[72,125935,4871],{"class":82},[72,125937,609],{"class":78},[72,125939,125940],{"class":366}," 'glx'\n",[72,125942,125943],{"class":74,"line":1608},[72,125944,2828],{"emptyLinePlaceholder":490},[72,125946,125947,125949,125952,125954],{"class":74,"line":1623},[72,125948,79],{"class":78},[72,125950,125951],{"class":82}," genesis ",[72,125953,31801],{"class":78},[72,125955,125956],{"class":82}," gs\n",[72,125958,125959,125961,125964,125966],{"class":74,"line":1629},[72,125960,31155],{"class":78},[72,125962,125963],{"class":82}," pynput ",[72,125965,79],{"class":78},[72,125967,125968],{"class":82}," keyboard\n",[72,125970,125971],{"class":74,"line":1643},[72,125972,2828],{"emptyLinePlaceholder":490},[72,125974,125975,125978,125981,125983],{"class":74,"line":1649},[72,125976,125977],{"class":82},"gs.init(",[72,125979,125980],{"class":5642},"backend",[72,125982,609],{"class":78},[72,125984,125985],{"class":82},"gs.gpu)\n",[72,125987,125988],{"class":74,"line":1740},[72,125989,2828],{"emptyLinePlaceholder":490},[72,125991,125992,125995,125997,126000,126003,126005,126007],{"class":74,"line":1746},[72,125993,125994],{"class":82},"scene ",[72,125996,609],{"class":78},[72,125998,125999],{"class":82}," gs.Scene(",[72,126001,126002],{"class":5642},"show_viewer",[72,126004,609],{"class":78},[72,126006,31894],{"class":362},[72,126008,570],{"class":82},[72,126010,126011,126014,126016],{"class":74,"line":1758},[72,126012,126013],{"class":82},"plane ",[72,126015,609],{"class":78},[72,126017,126018],{"class":82}," scene.add_entity(gs.morphs.Plane())\n",[72,126020,126021,126024,126026],{"class":74,"line":2041},[72,126022,126023],{"class":82},"franka ",[72,126025,609],{"class":78},[72,126027,126028],{"class":82}," scene.add_entity(\n",[72,126030,126031,126034,126036,126038,126041],{"class":74,"line":2046},[72,126032,126033],{"class":82},"    gs.morphs.MJCF(",[72,126035,45772],{"class":5642},[72,126037,609],{"class":78},[72,126039,126040],{"class":366},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[72,126042,38465],{"class":82},[72,126044,126045],{"class":74,"line":2052},[72,126046,570],{"class":82},[72,126048,126049],{"class":74,"line":2057},[72,126050,2828],{"emptyLinePlaceholder":490},[72,126052,126053],{"class":74,"line":2071},[72,126054,126055],{"class":82},"scene.build()\n",[72,126057,126058],{"class":74,"line":2076},[72,126059,2828],{"emptyLinePlaceholder":490},[72,126061,126062,126064,126067],{"class":74,"line":2082},[72,126063,32365],{"class":78},[72,126065,126066],{"class":358}," on_press",[72,126068,126069],{"class":82},"(key):\n",[72,126071,126072,126075],{"class":74,"line":2103},[72,126073,126074],{"class":78},"    try",[72,126076,4167],{"class":82},[72,126078,126079,126081,126084,126086,126089],{"class":74,"line":2108},[72,126080,2925],{"class":78},[72,126082,126083],{"class":82}," key.char ",[72,126085,3377],{"class":78},[72,126087,126088],{"class":366}," 'q'",[72,126090,4167],{"class":82},[72,126092,126093,126095],{"class":74,"line":2122},[72,126094,16158],{"class":78},[72,126096,126097],{"class":362}," False\n",[72,126099,126100,126103,126106],{"class":74,"line":2127},[72,126101,126102],{"class":78},"    except",[72,126104,126105],{"class":362}," AttributeError",[72,126107,4167],{"class":82},[72,126109,126110],{"class":74,"line":2156},[72,126111,126112],{"class":78},"        pass\n",[72,126114,126115],{"class":74,"line":2161},[72,126116,2828],{"emptyLinePlaceholder":490},[72,126118,126119,126122,126124,126127,126130,126132],{"class":74,"line":2178},[72,126120,126121],{"class":82},"listener ",[72,126123,609],{"class":78},[72,126125,126126],{"class":82}," keyboard.Listener(",[72,126128,126129],{"class":5642},"on_press",[72,126131,609],{"class":78},[72,126133,126134],{"class":82},"on_press)\n",[72,126136,126137],{"class":74,"line":2183},[72,126138,126139],{"class":82},"listener.start()\n",[72,126141,126142],{"class":74,"line":2188},[72,126143,2828],{"emptyLinePlaceholder":490},[72,126145,126146,126148],{"class":74,"line":2193},[72,126147,109063],{"class":78},[72,126149,126150],{"class":82}," listener.running:\n",[72,126152,126153],{"class":74,"line":2207},[72,126154,126155],{"class":82},"    scene.step()\n",[15,126157,126158],{},[1891,126159],{"alt":68,"src":126160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[473,126162,126163],{},"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":68,"searchDepth":370,"depth":370,"links":126165},[],{"category":489},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125770,"description":125775},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":126172,"title":126173,"body":126174,"description":23802,"extension":487,"meta":126189,"navigation":490,"path":126190,"seo":126191,"stem":126192,"__hash__":126193},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":126175,"toc":126186},[126176,126179,126183],[10,126177,126173],{"id":126178},"_1-基础知识",[85,126180,126182],{"id":126181},"_11-js的组成","1.1 js的组成",[15,126184,126185],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":68,"searchDepth":370,"depth":370,"links":126187},[126188],{"id":126181,"depth":370,"text":126182},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":126173,"description":23802},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":126195,"title":126196,"body":126197,"description":23802,"extension":487,"meta":126336,"navigation":490,"path":126337,"seo":126338,"stem":126339,"__hash__":126340},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":126198,"toc":126324},[126199,126202,126206,126209,126213,126223,126227,126230,126233,126236,126240,126247,126253,126257,126263,126274,126278,126281,126285,126288,126292,126295,126299,126302,126306,126309,126312,126315,126318,126321],[10,126200,126196],{"id":126201},"_2-vscode必备内容",[85,126203,126205],{"id":126204},"_21-标签分类","2.1 标签分类",[15,126207,126208],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[85,126210,126212],{"id":126211},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[15,126214,126215,126216,126218,126219,126222],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[34,126217,781],{}," 然后按 ",[34,126220,126221],{},"Tab","，快速自动生成基本结构。",[85,126224,126226],{"id":126225},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[15,126228,126229],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[15,126231,126232],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[15,126234,126235],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[85,126237,126239],{"id":126238},"_24-视图缩放","2.4 视图缩放",[15,126241,126242,126243,126246],{},"缩放视图 ",[34,126244,126245],{},"ctrl+"," 可实现代码增大。",[15,126248,126249,126252],{},[34,126250,126251],{},"ctrl-"," 可实现代码减小。",[85,126254,126256],{"id":126255},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[15,126258,126259,126260,28807],{},"VSCode 新建文件快捷键为 ",[34,126261,126262],{},"ctrl+N",[15,126264,126265,126266,126269,126270,126273],{},"保存快捷键为 ",[34,126267,126268],{},"ctrl+S","，将文本保存为 ",[34,126271,126272],{},".html"," 文件。",[85,126275,126277],{"id":126276},"_26-auto-rename-tag","2.6 Auto Rename Tag",[15,126279,126280],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[85,126282,126284],{"id":126283},"_27-vscode-icons","2.7 vscode-icons",[15,126286,126287],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[85,126289,126291],{"id":126290},"_28-easy-less","2.8 Easy LESS",[15,126293,126294],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[85,126296,126298],{"id":126297},"_29-会了吧插件","2.9 会了吧插件",[15,126300,126301],{},"会了吧插件可以展示代码中英语单词的意思。",[85,126303,126305],{"id":126304},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[15,126307,126308],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[15,126310,126311],{},"②选定多个相同的单词:ctrl+D",[15,126313,126314],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[15,126316,126317],{},"④全局替换某些单词:ctrl+h",[15,126319,126320],{},"⑤快速定位到某一行:ctrl+g",[15,126322,126323],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":68,"searchDepth":370,"depth":370,"links":126325},[126326,126327,126328,126329,126330,126331,126332,126333,126334,126335],{"id":126204,"depth":370,"text":126205},{"id":126211,"depth":370,"text":126212},{"id":126225,"depth":370,"text":126226},{"id":126238,"depth":370,"text":126239},{"id":126255,"depth":370,"text":126256},{"id":126276,"depth":370,"text":126277},{"id":126283,"depth":370,"text":126284},{"id":126290,"depth":370,"text":126291},{"id":126297,"depth":370,"text":126298},{"id":126304,"depth":370,"text":126305},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":126196,"description":23802},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126342,"title":126343,"body":126344,"description":23802,"extension":487,"meta":126503,"navigation":490,"path":126504,"seo":126505,"stem":126506,"__hash__":126507},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126345,"toc":126495},[126346,126349,126353,126363,126369,126375,126379,126388,126392,126397,126400,126403,126407,126410,126420,126429,126438,126447,126457,126464,126469,126474,126487],[10,126347,126343],{"id":126348},"_3-html文本与容器标签",[85,126350,126352],{"id":126351},"_31-标题标签","3.1 标题标签",[15,126354,126355,126358,126359,126362],{},[34,126356,126357],{},"\u003Ch1>","我是一级标签",[34,126360,126361],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[15,126364,126365,126358,126367],{},[34,126366,126357],{},[34,126368,126361],{},[15,126370,123625,126371,126374],{},[34,126372,126373],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[85,126376,126378],{"id":126377},"_32-段落标签","3.2 段落标签",[15,126380,126381,126384,126385],{},[34,126382,126383],{},"\u003Cp>","....",[34,126386,126387],{},"\u003C\u002Fp>",[85,126389,126391],{"id":126390},"_33-换行标签","3.3 换行标签",[15,126393,126394],{},[34,126395,126396],{},"\u003Cbr \u002F>",[15,126398,126399],{},"具有强制换行的作用",[15,126401,126402],{},"单标签",[85,126404,126406],{"id":126405},"_34-文本格式化标签","3.4 文本格式化标签",[15,126408,126409],{},"提供粗体、斜体和下划线等效果",[15,126411,126412,126413,462,126416,126419],{},"加粗：",[34,126414,126415],{},"\u003Cstrong>...\u003C\u002Fstrong>",[34,126417,126418],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[15,126421,126422,126423,462,126426,126419],{},"斜体：",[34,126424,126425],{},"\u003Cem>...\u003C\u002Fem>",[34,126427,126428],{},"\u003Ci>...\u003C\u002Fi>",[15,126430,126431,126432,462,126435,126419],{},"删除线：",[34,126433,126434],{},"\u003Cdel>...\u003C\u002Fdel>",[34,126436,126437],{},"\u003Cs>...\u003C\u002Fs>",[15,126439,126440,126441,462,126444,126419],{},"下划线：",[34,126442,126443],{},"\u003Cins>...\u003C\u002Fins>",[34,126445,126446],{},"\u003Cu>...\u003C\u002Fu>",[85,126448,126450,126451,18836,126454,103097],{"id":126449},"_35-div和span标签","3.5 ",[34,126452,126453],{},"\u003Cdiv>",[34,126455,126456],{},"\u003Cspan>",[15,126458,126459,101432,126461,126463],{},[34,126460,126453],{},[34,126462,126456],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[15,126465,126466],{},[34,126467,126468],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[15,126470,126471],{},[34,126472,126473],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[15,126475,126476,126477,126479,126480,126482,126483,126486],{},"两者特点：①",[34,126478,126453],{}," 标签用来布局，但一行通常只放一个 ",[34,126481,126453],{},"。可以理解为一个大盒子，独占一行，在 ",[34,126484,126485],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[15,126488,77667,126489,126491,126492,126494],{},[34,126490,126456],{}," 标签也可用于布局，一行可以放多个 ",[34,126493,126456],{},"，可理解为小盒子。",{"title":68,"searchDepth":370,"depth":370,"links":126496},[126497,126498,126499,126500,126501],{"id":126351,"depth":370,"text":126352},{"id":126377,"depth":370,"text":126378},{"id":126390,"depth":370,"text":126391},{"id":126405,"depth":370,"text":126406},{"id":126449,"depth":370,"text":126502},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126343,"description":23802},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126509,"title":126510,"body":126511,"description":23802,"extension":487,"meta":126708,"navigation":490,"path":126709,"seo":126710,"stem":126711,"__hash__":126712},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126512,"toc":126700},[126513,126516,126520,126523,126529,126536,126542,126548,126551,126554,126557,126560,126563,126566,126569,126573,126576,126579,126582,126588,126594,126600,126607,126611,126617,126623,126626,126629,126635,126641,126647,126650,126653,126657,126660,126670,126676,126680,126689,126693,126696],[10,126514,126510],{"id":126515},"_4-html图像与链接",[85,126517,126519],{"id":126518},"_41-图像标签","4.1 图像标签",[15,126521,126522],{},"（1）标签",[15,126524,126525,126528],{},[34,126526,126527],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[15,126530,126531,126532,126535],{},"src是",[34,126533,126534],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[15,126537,126538,126539],{},"alt:文本，替换文本。图像不能显示的文字 ",[34,126540,126541],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[15,126543,126544,126545],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[34,126546,126547],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[15,126549,126550],{},"width:像素，设置图像的宽度",[15,126552,126553],{},"height:像素，设置图像的高度",[15,126555,126556],{},"border：像素，设置图像的边框粗细",[15,126558,126559],{},"（2）图像标签属性的注意点：",[15,126561,126562],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[15,126564,126565],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[15,126567,126568],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[85,126570,126572],{"id":126571},"_42-路径注意要点","4.2 路径注意要点：",[15,126574,126575],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[15,126577,126578],{},"（2）根目录：就是打开文件夹的第一层根目录",[15,126580,126581],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[15,126583,126584,126585],{},"①同一级路径：图像文件位于HTML文件同一级，如",[34,126586,126587],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[15,126589,126590,126591],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[34,126592,126593],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[15,126595,126596,126597],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[34,126598,126599],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[15,126601,126602,126603,805],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[257,126604,126605],{"href":126605,"rel":126606},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[261],[85,126608,126610],{"id":126609},"_43-超链接标签","4.3 超链接标签",[15,126612,126613,126616],{},[34,126614,126615],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[15,126618,126619,126620],{},"①语法格式：",[34,126621,126622],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[15,126624,126625],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[15,126627,126628],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[15,126630,126631,126632],{},"③链接分类：外部链接：",[34,126633,126634],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[15,126636,126637,126638],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[34,126639,126640],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[15,126642,126643,126644],{},"空链接：如果当时没有确定链接目标时，",[34,126645,126646],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[15,126648,126649],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[15,126651,126652],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[85,126654,126656],{"id":126655},"_44-锚点链接","4.4 锚点链接",[15,126658,126659],{},"点我们点击链接，可以快速定位到页面中的某个位置",[15,126661,126662,126663,126666,126667],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[34,126664,126665],{},"\u003Ca href=\"#two\">","第二级",[34,126668,126669],{},"\u003C\u002Fa>",[15,126671,126672,126673],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[34,126674,126675],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[85,126677,126679],{"id":126678},"_45-注释标签","4.5 注释标签",[15,126681,126682,126685,126686],{},[34,126683,126684],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[34,126687,126688],{},"ctrl+\u002F",[85,126690,126692],{"id":126691},"_46-特殊字符","4.6 特殊字符",[15,126694,126695],{},"可以实现添加多个空格",[1891,126697],{"style":126698,"src":126699},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":68,"searchDepth":370,"depth":370,"links":126701},[126702,126703,126704,126705,126706,126707],{"id":126518,"depth":370,"text":126519},{"id":126571,"depth":370,"text":126572},{"id":126609,"depth":370,"text":126610},{"id":126655,"depth":370,"text":126656},{"id":126678,"depth":370,"text":126679},{"id":126691,"depth":370,"text":126692},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126510,"description":23802},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126714,"title":126715,"body":126716,"description":23802,"extension":487,"meta":127009,"navigation":490,"path":127010,"seo":127011,"stem":127012,"__hash__":127013},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126717,"toc":127000},[126718,126721,126725,126728,126731,126734,126737,126740,126743,126746,126749,126752,126772,126778,126782,126785,126788,126791,126794,126797,126800,126804,126807,126810,126813,126816,126829,126834,126837,126840,126855,126858,126861,126864,126867,126870,126874,126877,126884,126887,126890,126893,126896,126899,126905,126908,126911,126917,126920,126923,126926,126932,126935,126938,126952,126959,126962,126965,126972,126981,126984,126987,126990,126994,126997],[10,126719,126715],{"id":126720},"_5-html表格列表与表单",[85,126722,126724],{"id":126723},"_51-表格标签","5.1 表格标签",[15,126726,126727],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[15,126729,126730],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[15,126732,126733],{},"②表格基本语法：",[1891,126735],{"style":126698,"src":126736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[15,126738,126739],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[1891,126741],{"style":126698,"src":126742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[15,126744,126745],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[1891,126747],{"style":126698,"src":126748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[15,126750,126751],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[15,126753,126754,126757,126758,126760,126761,126764,126765,126767,126768,126771],{},[34,126755,126756],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[34,126759,126756],{},"内部必须拥有",[34,126762,126763],{},"\u003Ctr>","标签，一般位于第一行，",[34,126766,126756],{},"比",[34,126769,126770],{},"\u003Cth>","范围广",[15,126773,126774,126777],{},[34,126775,126776],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[85,126779,126781],{"id":126780},"_52-合并单元格","5.2 合并单元格",[15,126783,126784],{},"（1）合并单元格方式：",[15,126786,126787],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[15,126789,126790],{},"②跨列合并：colspan=\"合并单元格的个数\"",[15,126792,126793],{},"（2）目标单元格：",[15,126795,126796],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[15,126798,126799],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[85,126801,126803],{"id":126802},"_53-列表标签","5.3 列表标签",[15,126805,126806],{},"（1）分类：无序列表、有序列表、自定义列表",[15,126808,126809],{},"①无序列表：",[1891,126811],{"style":126698,"src":126812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[15,126814,126815],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[15,126817,126818,126821,126822,126825,126826,126828],{},[34,126819,126820],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[34,126823,126824],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[34,126827,126820],{},"中输入其他标签或文字是不对的",[15,126830,126831,126833],{},[34,126832,126824],{},"之间相当于一个容器，可以容纳所有元素",[15,126835,126836],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[15,126838,126839],{},"在css中去除前边的小圆点采用如下代码:",[63,126841,126845],{"className":126842,"code":126843,"language":126844,"meta":68,"style":68},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[34,126846,126847],{"__ignoreMap":68},[72,126848,126849,126852],{"class":74,"line":75},[72,126850,126851],{"class":51718},"list-style",[72,126853,126854],{"class":82},": none;\n",[15,126856,126857],{},"②有序列表：",[1891,126859],{"style":126698,"src":126860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[15,126862,126863],{},"③自定义列表：",[1891,126865],{"style":126698,"src":126866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[1891,126868],{"style":126698,"src":126869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[85,126871,126873],{"id":126872},"_54-表单标签","5.4 表单标签",[15,126875,126876],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[15,126878,126879,126880,126883],{},"（1）表单域：包含单元素的区域，",[34,126881,126882],{},"\u003Cform>","标签可以实现信息的收集和传递。",[1891,126885],{"style":126698,"src":126886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[15,126888,126889],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[15,126891,126892],{},"表单元素提交必须有name属性",[15,126894,126895],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[15,126897,126898],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[15,126900,77644,126901,126904],{},[34,126902,126903],{},"\u003Cinput>","输入表单元素",[1891,126906],{"style":126698,"src":126907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[1891,126909],{"style":126698,"src":126910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[15,126912,126913,126914],{},"单选按钮：",[34,126915,126916],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[1891,126918],{"style":126698,"src":126919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[15,126921,126922],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[1891,126924],{"style":126698,"src":126925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[15,126927,126928,126931],{},[707,126929,126930],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[15,126933,126934],{},"②select下拉表单元素：可以节约页面控件",[1891,126936],{"style":126698,"src":126937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[15,126939,126940,14221,126942,126945,126946,126948,126949,126951],{},[707,126941,593],{},[34,126943,126944],{},"\u003Cselect>","中至少包含一对",[34,126947,103118],{},"；在",[34,126950,103118],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[15,126953,126954,126955,126958],{},"③",[34,126956,126957],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[1891,126960],{"style":126698,"src":126961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[15,126963,126964],{},"3行20列",[85,126966,126968,126969,103097],{"id":126967},"_55-lable标签","5.5 ",[34,126970,126971],{},"\u003Clable>",[15,126973,126974,126975,126977,126978,126980],{},"它不是表单标签，但常常与表单标签搭配使用，",[34,126976,126971],{},"标签用于绑定一个表单标签，当点击",[34,126979,126971],{},"标签内的文本",[15,126982,126983],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[1891,126985],{"style":126698,"src":126986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[1891,126988],{"style":126698,"src":126989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[85,126991,126993],{"id":126992},"_56-实例","5.6 实例",[1891,126995],{"style":126698,"src":126996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[473,126998,126999],{},"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":68,"searchDepth":370,"depth":370,"links":127001},[127002,127003,127004,127005,127006,127008],{"id":126723,"depth":370,"text":126724},{"id":126780,"depth":370,"text":126781},{"id":126802,"depth":370,"text":126803},{"id":126872,"depth":370,"text":126873},{"id":126967,"depth":370,"text":127007},"5.5 \u003Clable>标签",{"id":126992,"depth":370,"text":126993},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126715,"description":23802},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":127015,"title":127016,"body":127017,"description":23802,"extension":487,"meta":127566,"navigation":490,"path":127567,"seo":127568,"stem":127569,"__hash__":127570},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":127018,"toc":127541},[127019,127022,127026,127029,127032,127036,127039,127042,127045,127048,127051,127054,127057,127061,127064,127068,127071,127074,127077,127081,127084,127087,127090,127096,127099,127102,127105,127108,127111,127114,127117,127150,127154,127157,127160,127163,127167,127170,127173,127176,127179,127182,127186,127189,127192,127195,127199,127202,127206,127209,127213,127216,127221,127225,127228,127232,127235,127238,127241,127244,127271,127274,127278,127281,127284,127289,127292,127295,127299,127302,127307,127310,127313,127316,127320,127323,127326,127329,127333,127336,127339,127342,127346,127350,127353,127393,127396,127400,127407,127410,127414,127417,127463,127467,127470,127473,127476,127504,127508,127511,127538],[10,127020,127016],{"id":127021},"_6-css语法与文本样式",[85,127023,127025],{"id":127024},"_61-css语法规范","6.1 css语法规范",[15,127027,127028],{},"由两部分组成，选择器及一条或多条声明",[1891,127030],{"style":126698,"src":127031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[15,127033,127034],{},[707,127035,593],{},[15,127037,127038],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[15,127040,127041],{},"②属性与属性值以“键值对”的形式出现",[15,127043,127044],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[15,127046,127047],{},"④属性和属性值之间用英文“;”分开",[1891,127049],{"style":126698,"src":127050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[1891,127052],{"style":126698,"src":127053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[1891,127055],{"style":126698,"src":127056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[85,127058,127060],{"id":127059},"_62-css选择器","6.2 css选择器",[15,127062,127063],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[531,127065,127067],{"id":127066},"_621-标签选择器","6.2.1 标签选择器",[15,127069,127070],{},"①优点：能快速为页面中同类型的标签统一设置样式",[15,127072,127073],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[1891,127075],{"style":126698,"src":127076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[531,127078,127080],{"id":127079},"_622-类选择器","6.2.2 类选择器",[15,127082,127083],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[15,127085,127086],{},"②样例",[1891,127088],{"style":126698,"src":127089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[15,127091,127092,127093,127095],{},"③ ",[707,127094,126930],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[15,127097,127098],{},"可以理解为给这个标签起了个名字，来表示；",[15,127100,127101],{},"长名称或词组可以使用横线来为选择器命名；",[15,127103,127104],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[15,127106,127107],{},"命名要有意义；",[1891,127109],{"style":126698,"src":127110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[15,127112,127113],{},"类选择器也可以指定特殊的元素p.center{}",[15,127115,127116],{},"p.center和.center都对",[63,127118,127120],{"className":126842,"code":127119,"language":126844,"meta":68,"style":68},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[34,127121,127122,127127,127136,127146],{"__ignoreMap":68},[72,127123,127124],{"class":74,"line":75},[72,127125,127126],{"class":621},"\u002F* 类选择器指定特殊元素 *\u002F\n",[72,127128,127129,127131,127134],{"class":74,"line":370},[72,127130,15],{"class":51718},[72,127132,127133],{"class":358},".center",[72,127135,15998],{"class":82},[72,127137,127138,127140,127142,127144],{"class":74,"line":1608},[72,127139,70944],{"class":362},[72,127141,51855],{"class":82},[72,127143,52010],{"class":362},[72,127145,1719],{"class":82},[72,127147,127148],{"class":74,"line":1623},[72,127149,1994],{"class":82},[531,127151,127153],{"id":127152},"_623-多类名使用","6.2.3 多类名使用",[15,127155,127156],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[1891,127158],{"style":126698,"src":127159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[15,127161,127162],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[531,127164,127166],{"id":127165},"_624-id选择器","6.2.4 id选择器",[15,127168,127169],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[15,127171,127172],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[1891,127174],{"style":126698,"src":127175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[15,127177,127178],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[15,127180,127181],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[531,127183,127185],{"id":127184},"_625-通配符选择器","6.2.5 通配符选择器",[15,127187,127188],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[15,127190,127191],{},"* {",[15,127193,127194],{},"color=\"red\"}",[531,127196,127198],{"id":127197},"_626-总结","6.2.6 总结",[1891,127200],{"style":126698,"src":127201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[85,127203,127205],{"id":127204},"_63-css字体属性","6.3 css字体属性",[15,127207,127208],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[531,127210,127212],{"id":127211},"_631-字体系列","6.3.1 字体系列",[15,127214,127215],{},"font-family: '宋体';",[15,127217,127218,127220],{},[707,127219,593],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[531,127222,127224],{"id":127223},"_632-字体大小","6.3.2 字体大小",[15,127226,127227],{},"font-size: 20px",[15,127229,127230,26895],{},[707,127231,126930],{},[15,127233,127234],{},"①px（像素）大小是网页的最常用单位",[15,127236,127237],{},"②谷歌浏览器默认为16px",[15,127239,127240],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[15,127242,127243],{},"④可以给body指定整个页面的大小：会自动引用",[63,127245,127247],{"className":126842,"code":127246,"language":126844,"meta":68,"style":68},"body {\n  font-size: 16px;\n}\n",[34,127248,127249,127255,127267],{"__ignoreMap":68},[72,127250,127251,127253],{"class":74,"line":75},[72,127252,52218],{"class":51718},[72,127254,15998],{"class":82},[72,127256,127257,127259,127261,127263,127265],{"class":74,"line":370},[72,127258,71044],{"class":362},[72,127260,51855],{"class":82},[72,127262,1155],{"class":362},[72,127264,51910],{"class":78},[72,127266,1719],{"class":82},[72,127268,127269],{"class":74,"line":1608},[72,127270,1994],{"class":82},[15,127272,127273],{},"⑤标题标签比较特殊，需要单独指定大小",[531,127275,127277],{"id":127276},"_633-字体粗细","6.3.3 字体粗细",[15,127279,127280],{},"font-weight: bold;",[15,127282,127283],{},"font-weight: 100；",[15,127285,127286,127288],{},[707,127287,593],{}," ①粗体文字变细：尽量别用normal，多用数字",[15,127290,127291],{},"font-weight= 400;",[15,127293,127294],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[531,127296,127298],{"id":127297},"_634-文字样式","6.3.4 文字样式",[15,127300,127301],{},"font-style: normal；",[15,127303,127304,26895],{},[707,127305,127306],{},"属性值",[15,127308,127309],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[15,127311,127312],{},"②italic：浏览器会显示斜体的字体样式",[1891,127314],{"style":126698,"src":127315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[531,127317,127319],{"id":127318},"_635-字体符合属性","6.3.5 字体符合属性",[1891,127321],{"style":126698,"src":127322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[1891,127324],{"style":126698,"src":127325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[15,127327,127328],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[15,127330,127331,26895],{},[707,127332,126930],{},[15,127334,127335],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[15,127337,127338],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[15,127340,127341],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[85,127343,127345],{"id":127344},"_64-css-test文本属性","6.4 css test文本属性",[531,127347,127349],{"id":127348},"_641-文本颜色","6.4.1 文本颜色",[15,127351,127352],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[63,127354,127356],{"className":126842,"code":127355,"language":126844,"meta":68,"style":68},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[34,127357,127358,127363,127369,127379,127384,127389],{"__ignoreMap":68},[72,127359,127360],{"class":74,"line":75},[72,127361,127362],{"class":621},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[72,127364,127365,127367],{"class":74,"line":370},[72,127366,15],{"class":51718},[72,127368,15998],{"class":82},[72,127370,127371,127373,127375,127377],{"class":74,"line":1608},[72,127372,71323],{"class":362},[72,127374,51855],{"class":82},[72,127376,57839],{"class":362},[72,127378,1719],{"class":82},[72,127380,127381],{"class":74,"line":1623},[72,127382,127383],{"class":621},"  \u002F* color: #ff0000; *\u002F\n",[72,127385,127386],{"class":74,"line":1629},[72,127387,127388],{"class":621},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[72,127390,127391],{"class":74,"line":1643},[72,127392,1994],{"class":82},[1891,127394],{"style":126698,"src":127395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[531,127397,127399],{"id":127398},"_642-对齐文本","6.4.2 对齐文本",[15,127401,127402,127403,127406],{},"text-align属于用于设置元素内文本内容的 ",[707,127404,127405],{},"水平对齐"," 方式",[15,127408,127409],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[531,127411,127413],{"id":127412},"_643-装饰文本","6.4.3 装饰文本",[15,127415,127416],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[63,127418,127420],{"className":126842,"code":127419,"language":126844,"meta":68,"style":68},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[34,127421,127422,127428,127438,127442,127448,127459],{"__ignoreMap":68},[72,127423,127424,127426],{"class":74,"line":75},[72,127425,257],{"class":51718},[72,127427,15998],{"class":82},[72,127429,127430,127432,127434,127436],{"class":74,"line":370},[72,127431,70920],{"class":362},[72,127433,51855],{"class":82},[72,127435,55155],{"class":362},[72,127437,1719],{"class":82},[72,127439,127440],{"class":74,"line":1608},[72,127441,1994],{"class":82},[72,127443,127444,127446],{"class":74,"line":1623},[72,127445,15],{"class":51718},[72,127447,15998],{"class":82},[72,127449,127450,127452,127454,127457],{"class":74,"line":1629},[72,127451,70920],{"class":362},[72,127453,51855],{"class":82},[72,127455,127456],{"class":362},"underline",[72,127458,1719],{"class":82},[72,127460,127461],{"class":74,"line":1643},[72,127462,1994],{"class":82},[531,127464,127466],{"id":127465},"_644-文本缩进","6.4.4 文本缩进",[15,127468,127469],{},"实现文本的第一行首行缩进自己指定的距离",[15,127471,127472],{},"20px往右边走；-20px往左边走",[15,127474,127475],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[63,127477,127479],{"className":126842,"code":127478,"language":126844,"meta":68,"style":68},"p {\n  text-indent: 2em;\n}\n",[34,127480,127481,127487,127500],{"__ignoreMap":68},[72,127482,127483,127485],{"class":74,"line":75},[72,127484,15],{"class":51718},[72,127486,15998],{"class":82},[72,127488,127489,127492,127494,127496,127498],{"class":74,"line":370},[72,127490,127491],{"class":362},"  text-indent",[72,127493,51855],{"class":82},[72,127495,640],{"class":362},[72,127497,23978],{"class":78},[72,127499,1719],{"class":82},[72,127501,127502],{"class":74,"line":1608},[72,127503,1994],{"class":82},[531,127505,127507],{"id":127506},"_645-行间距","6.4.5 行间距",[15,127509,127510],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[63,127512,127514],{"className":126842,"code":127513,"language":126844,"meta":68,"style":68},"p {\n  line-height: 1.6;\n}\n",[34,127515,127516,127522,127534],{"__ignoreMap":68},[72,127517,127518,127520],{"class":74,"line":75},[72,127519,15],{"class":51718},[72,127521,15998],{"class":82},[72,127523,127524,127527,127529,127532],{"class":74,"line":370},[72,127525,127526],{"class":362},"  line-height",[72,127528,51855],{"class":82},[72,127530,127531],{"class":362},"1.6",[72,127533,1719],{"class":82},[72,127535,127536],{"class":74,"line":1608},[72,127537,1994],{"class":82},[473,127539,127540],{},"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":68,"searchDepth":370,"depth":370,"links":127542},[127543,127544,127552,127559],{"id":127024,"depth":370,"text":127025},{"id":127059,"depth":370,"text":127060,"children":127545},[127546,127547,127548,127549,127550,127551],{"id":127066,"depth":1608,"text":127067},{"id":127079,"depth":1608,"text":127080},{"id":127152,"depth":1608,"text":127153},{"id":127165,"depth":1608,"text":127166},{"id":127184,"depth":1608,"text":127185},{"id":127197,"depth":1608,"text":127198},{"id":127204,"depth":370,"text":127205,"children":127553},[127554,127555,127556,127557,127558],{"id":127211,"depth":1608,"text":127212},{"id":127223,"depth":1608,"text":127224},{"id":127276,"depth":1608,"text":127277},{"id":127297,"depth":1608,"text":127298},{"id":127318,"depth":1608,"text":127319},{"id":127344,"depth":370,"text":127345,"children":127560},[127561,127562,127563,127564,127565],{"id":127348,"depth":1608,"text":127349},{"id":127398,"depth":1608,"text":127399},{"id":127412,"depth":1608,"text":127413},{"id":127465,"depth":1608,"text":127466},{"id":127506,"depth":1608,"text":127507},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":127016,"description":23802},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127572,"title":127573,"body":127574,"description":23802,"extension":487,"meta":128223,"navigation":490,"path":128224,"seo":128225,"stem":128226,"__hash__":128227},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127575,"toc":128204},[127576,127579,127583,127587,127647,127651,127661,127664,127667,127671,127696,127700,127703,127706,127709,127712,127715,127719,127722,127725,127767,127770,127796,127802,127805,127809,127813,127819,127822,127825,127828,127831,127834,127837,127882,127886,127889,127892,127896,127900,127929,127932,127937,127940,127943,127946,127949,127953,127957,127960,127962,127965,127969,127972,127976,127979,127982,127985,127989,127993,127999,128009,128012,128015,128018,128021,128024,128147,128155,128163,128201],[10,127577,127573],{"id":127578},"_7-css引入方式与选择器进阶",[85,127580,127582],{"id":127581},"_71-css引入方式","7.1 css引入方式",[531,127584,127586],{"id":127585},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[63,127588,127592],{"className":127589,"code":127590,"language":127591,"meta":68,"style":68},"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",[34,127593,127594,127602,127609,127621,127634,127639],{"__ignoreMap":68},[72,127595,127596,127598,127600],{"class":74,"line":75},[72,127597,1464],{"class":82},[72,127599,473],{"class":51718},[72,127601,51725],{"class":82},[72,127603,127604,127607],{"class":74,"line":370},[72,127605,127606],{"class":51718},"  h1",[72,127608,15998],{"class":82},[72,127610,127611,127614,127616,127619],{"class":74,"line":1608},[72,127612,127613],{"class":362},"    color",[72,127615,51855],{"class":82},[72,127617,127618],{"class":362},"blue",[72,127620,1719],{"class":82},[72,127622,127623,127626,127628,127630,127632],{"class":74,"line":1623},[72,127624,127625],{"class":362},"    font-size",[72,127627,51855],{"class":82},[72,127629,1354],{"class":362},[72,127631,51910],{"class":78},[72,127633,1719],{"class":82},[72,127635,127636],{"class":74,"line":1629},[72,127637,127638],{"class":82},"  }\n",[72,127640,127641,127643,127645],{"class":74,"line":1643},[72,127642,52203],{"class":82},[72,127644,473],{"class":51718},[72,127646,51725],{"class":82},[15,127648,127649,26895],{},[707,127650,126930],{},[15,127652,77644,127653,127656,127657,127660],{},[34,127654,127655],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[34,127658,127659],{},"\u003Chead>","标签中",[15,127662,127663],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[15,127665,127666],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[531,127668,127670],{"id":127669},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[63,127672,127674],{"className":127589,"code":127673,"language":127591,"meta":68,"style":68},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[34,127675,127676],{"__ignoreMap":68},[72,127677,127678,127680,127682,127684,127686,127689,127692,127694],{"class":74,"line":75},[72,127679,1464],{"class":82},[72,127681,15],{"class":51718},[72,127683,63044],{"class":358},[72,127685,609],{"class":82},[72,127687,127688],{"class":366},"\"color: red; font-size: 16px;\"",[72,127690,127691],{"class":82},">这是一个段落\u003C\u002F",[72,127693,15],{"class":51718},[72,127695,51725],{"class":82},[15,127697,127698,26895],{},[707,127699,126930],{},[15,127701,127702],{},"①style其实就是标签的属性",[15,127704,127705],{},"②在双引号中间，写法要符合css规范",[15,127707,127708],{},"③可以控制当前的标签设置样式",[15,127710,127711],{},"④书写繁琐，简单时才用",[15,127713,127714],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[531,127716,127718],{"id":127717},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[15,127720,127721],{},"使用最多，单独建一个css文件，然后html引用",[15,127723,127724],{},"①css文件部分： style.css",[63,127726,127728],{"className":126842,"code":127727,"language":126844,"meta":68,"style":68},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[34,127729,127730,127735,127741,127751,127763],{"__ignoreMap":68},[72,127731,127732],{"class":74,"line":75},[72,127733,127734],{"class":621},"\u002F* style.css *\u002F\n",[72,127736,127737,127739],{"class":74,"line":370},[72,127738,10],{"class":51718},[72,127740,15998],{"class":82},[72,127742,127743,127745,127747,127749],{"class":74,"line":1608},[72,127744,71323],{"class":362},[72,127746,51855],{"class":82},[72,127748,127618],{"class":362},[72,127750,1719],{"class":82},[72,127752,127753,127755,127757,127759,127761],{"class":74,"line":1623},[72,127754,71044],{"class":362},[72,127756,51855],{"class":82},[72,127758,1354],{"class":362},[72,127760,51910],{"class":78},[72,127762,1719],{"class":82},[72,127764,127765],{"class":74,"line":1629},[72,127766,1994],{"class":82},[15,127768,127769],{},"②html部分",[63,127771,127773],{"className":127589,"code":127772,"language":127591,"meta":68,"style":68},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[34,127774,127775],{"__ignoreMap":68},[72,127776,127777,127779,127781,127783,127785,127787,127789,127791,127794],{"class":74,"line":75},[72,127778,1464],{"class":82},[72,127780,69423],{"class":51718},[72,127782,69426],{"class":358},[72,127784,609],{"class":82},[72,127786,69431],{"class":366},[72,127788,61475],{"class":358},[72,127790,609],{"class":82},[72,127792,127793],{"class":366},"\"style.css\"",[72,127795,51725],{"class":82},[15,127797,127798,127801],{},[34,127799,127800],{},"\u003Chr>","水平线标签（但是不常用！）",[15,127803,127804],{},"ctrl+0回到页面原来大小",[85,127806,127808],{"id":127807},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[531,127810,127812],{"id":127811},"_721-快速生成html","7.2.1 快速生成html",[15,127814,127815,127816],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[34,127817,127818],{},"\u003Cdiv>``\u003C\u002Fdiv>",[15,127820,127821],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[15,127823,127824],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[15,127826,127827],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[15,127829,127830],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[15,127832,127833],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[15,127835,127836],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[63,127838,127840],{"className":127589,"code":127839,"language":127591,"meta":68,"style":68},"\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",[34,127841,127842,127847,127852,127857,127862,127867,127872,127877],{"__ignoreMap":68},[72,127843,127844],{"class":74,"line":75},[72,127845,127846],{"class":621},"\u003C!-- Emmet 语法示例 -->\n",[72,127848,127849],{"class":74,"line":370},[72,127850,127851],{"class":621},"\u003C!-- div*3        → 生成3个div -->\n",[72,127853,127854],{"class":74,"line":1608},[72,127855,127856],{"class":621},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[72,127858,127859],{"class":74,"line":1623},[72,127860,127861],{"class":621},"\u003C!-- div+p        → 兄弟div和p -->\n",[72,127863,127864],{"class":74,"line":1629},[72,127865,127866],{"class":621},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[72,127868,127869],{"class":74,"line":1643},[72,127870,127871],{"class":621},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[72,127873,127874],{"class":74,"line":1649},[72,127875,127876],{"class":621},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[72,127878,127879],{"class":74,"line":1740},[72,127880,127881],{"class":621},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[531,127883,127885],{"id":127884},"_722-快速生成css","7.2.2 快速生成css",[15,127887,127888],{},"简写开头",[15,127890,127891],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[85,127893,127895],{"id":127894},"_73-css复合选择器","7.3 css复合选择器",[531,127897,127899],{"id":127898},"_731-后代选择器","7.3.1 后代选择器",[63,127901,127903],{"className":126842,"code":127902,"language":126844,"meta":68,"style":68},".parent .child {\n  color: blue;\n}\n",[34,127904,127905,127915,127925],{"__ignoreMap":68},[72,127906,127907,127910,127913],{"class":74,"line":75},[72,127908,127909],{"class":358},".parent",[72,127911,127912],{"class":358}," .child",[72,127914,15998],{"class":82},[72,127916,127917,127919,127921,127923],{"class":74,"line":370},[72,127918,71323],{"class":362},[72,127920,51855],{"class":82},[72,127922,127618],{"class":362},[72,127924,1719],{"class":82},[72,127926,127927],{"class":74,"line":1608},[72,127928,1994],{"class":82},[15,127930,127931],{},"元素1 元素2 {样式声明}",[15,127933,127934],{},[707,127935,127936],{},"注意点:",[15,127938,127939],{},"①元素1和元素2中间用空格隔开",[15,127941,127942],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[15,127944,127945],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[15,127947,127948],{},"④元素1和元素2可以是任意基础选择器",[531,127950,127952],{"id":127951},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[15,127954,127955],{},[707,127956,127936],{},[15,127958,127959],{},"①元素1和元素2中间用大于号隔开",[15,127961,127942],{},[15,127963,127964],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[531,127966,127968],{"id":127967},"_733-并集选择器","7.3.3 并集选择器",[15,127970,127971],{},"元素1，元素2 {样式声明}",[15,127973,127974],{},[707,127975,127936],{},[15,127977,127978],{},"①元素1和元素2中间用逗号隔开",[15,127980,127981],{},"②逗号可以理解为和的意思",[15,127983,127984],{},"③并集选择器通常用于集体声明",[531,127986,127988],{"id":127987},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[15,127990,127991],{},[707,127992,127936],{},[15,127994,127995,127996,127998],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[69423,127997],{},"－:visited－:hover－:active。",[15,128000,128001,128002,128005,128006,26162],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[128003,128004],"hover",{}," 、 ",[128007,128008],"first-child",{},[15,128010,128011],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[15,128013,128014],{},"link对没访问的进行设置",[15,128016,128017],{},"vistied对已访问的进行改变",[15,128019,128020],{},"hover鼠标经过就会变",[15,128022,128023],{},"active常按(点)就会变",[63,128025,128027],{"className":126842,"code":128026,"language":126844,"meta":68,"style":68},"\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",[34,128028,128029,128034,128043,128053,128063,128067,128076,128087,128091,128099,128109,128119,128123,128132,128143],{"__ignoreMap":68},[72,128030,128031],{"class":74,"line":75},[72,128032,128033],{"class":621},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[72,128035,128036,128038,128041],{"class":74,"line":370},[72,128037,257],{"class":51718},[72,128039,128040],{"class":358},":link",[72,128042,15998],{"class":82},[72,128044,128045,128047,128049,128051],{"class":74,"line":1608},[72,128046,71323],{"class":362},[72,128048,51855],{"class":82},[72,128050,62787],{"class":362},[72,128052,1719],{"class":82},[72,128054,128055,128057,128059,128061],{"class":74,"line":1623},[72,128056,70920],{"class":362},[72,128058,51855],{"class":82},[72,128060,55155],{"class":362},[72,128062,1719],{"class":82},[72,128064,128065],{"class":74,"line":1629},[72,128066,1994],{"class":82},[72,128068,128069,128071,128074],{"class":74,"line":1643},[72,128070,257],{"class":51718},[72,128072,128073],{"class":358},":visited",[72,128075,15998],{"class":82},[72,128077,128078,128080,128082,128085],{"class":74,"line":1649},[72,128079,71323],{"class":362},[72,128081,51855],{"class":82},[72,128083,128084],{"class":362},"purple",[72,128086,1719],{"class":82},[72,128088,128089],{"class":74,"line":1740},[72,128090,1994],{"class":82},[72,128092,128093,128095,128097],{"class":74,"line":1746},[72,128094,257],{"class":51718},[72,128096,61358],{"class":358},[72,128098,15998],{"class":82},[72,128100,128101,128103,128105,128107],{"class":74,"line":1758},[72,128102,71323],{"class":362},[72,128104,51855],{"class":82},[72,128106,55307],{"class":362},[72,128108,1719],{"class":82},[72,128110,128111,128113,128115,128117],{"class":74,"line":2041},[72,128112,70920],{"class":362},[72,128114,51855],{"class":82},[72,128116,127456],{"class":362},[72,128118,1719],{"class":82},[72,128120,128121],{"class":74,"line":2046},[72,128122,1994],{"class":82},[72,128124,128125,128127,128130],{"class":74,"line":2052},[72,128126,257],{"class":51718},[72,128128,128129],{"class":358},":active",[72,128131,15998],{"class":82},[72,128133,128134,128136,128138,128141],{"class":74,"line":2057},[72,128135,71323],{"class":362},[72,128137,51855],{"class":82},[72,128139,128140],{"class":362},"green",[72,128142,1719],{"class":82},[72,128144,128145],{"class":74,"line":2071},[72,128146,1994],{"class":82},[531,128148,128150,128151,128154],{"id":128149},"_735-伪类选择器","7.3.5 ",[128152,128153],"focus",{},"伪类选择器",[15,128156,128157,128159,128160,128162],{},[128152,128158],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[34,128161,126903],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[63,128164,128166],{"className":126842,"code":128165,"language":126844,"meta":68,"style":68},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[34,128167,128168,128176,128187,128197],{"__ignoreMap":68},[72,128169,128170,128172,128174],{"class":74,"line":75},[72,128171,54239],{"class":51718},[72,128173,62318],{"class":358},[72,128175,15998],{"class":82},[72,128177,128178,128181,128183,128185],{"class":74,"line":370},[72,128179,128180],{"class":362},"  border-color",[72,128182,51855],{"class":82},[72,128184,55307],{"class":362},[72,128186,1719],{"class":82},[72,128188,128189,128191,128193,128195],{"class":74,"line":1608},[72,128190,71216],{"class":362},[72,128192,51855],{"class":82},[72,128194,55155],{"class":362},[72,128196,1719],{"class":82},[72,128198,128199],{"class":74,"line":1623},[72,128200,1994],{"class":82},[473,128202,128203],{},"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":68,"searchDepth":370,"depth":370,"links":128205},[128206,128211,128215],{"id":127581,"depth":370,"text":127582,"children":128207},[128208,128209,128210],{"id":127585,"depth":1608,"text":127586},{"id":127669,"depth":1608,"text":127670},{"id":127717,"depth":1608,"text":127718},{"id":127807,"depth":370,"text":127808,"children":128212},[128213,128214],{"id":127811,"depth":1608,"text":127812},{"id":127884,"depth":1608,"text":127885},{"id":127894,"depth":370,"text":127895,"children":128216},[128217,128218,128219,128220,128221],{"id":127898,"depth":1608,"text":127899},{"id":127951,"depth":1608,"text":127952},{"id":127967,"depth":1608,"text":127968},{"id":127987,"depth":1608,"text":127988},{"id":128149,"depth":1608,"text":128222},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127573,"description":23802},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":128229,"title":128230,"body":128231,"description":23802,"extension":487,"meta":130154,"navigation":490,"path":130155,"seo":130156,"stem":130157,"__hash__":130158},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":128232,"toc":130128},[128233,128236,128240,128249,128253,128279,128284,128287,128290,128293,128296,128300,128303,128313,128321,128325,128360,128365,128368,128371,128374,128377,128381,128384,128393,128397,128410,128415,128418,128421,128424,128428,128431,128435,128438,128493,128496,128527,128530,128584,128588,128591,128757,128880,128883,128886,128889,128892,128896,128899,128903,128906,128909,128913,128916,128947,128974,129002,129005,129009,129035,129078,129082,129176,129179,129206,129209,129212,129215,129218,129221,129224,129227,129230,129233,129237,129294,129321,129325,129373,129377,129418,129420,129423,129426,129429,129432,129436,129528,129531,129534,129537,129541,129664,129865,129869,129873,129876,129879,129882,129886,129889,129892,129917,129920,129923,129926,129929,129932,129936,129944,130006,130009,130067,130070,130073,130076,130079,130082,130085,130088,130125],[10,128234,128230],{"id":128235},"_8-css显示模式与背景特性",[85,128237,128239],{"id":128238},"_81-css元素显示模式","8.1 css元素显示模式",[15,128241,128242,128243,128245,128246,128248],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[34,128244,126453],{},"自己占一行，比如一行可以放多个",[34,128247,126456],{},"，HTML 元素一般分为块元素和行内元素两种类型",[531,128250,128252],{"id":128251},"_811-块元素","8.1.1 块元素",[15,128254,128255,128256,128258,128259,37,128262,37,128264,37,128266,37,128269,37,128272,128275,128276,128278],{},"常见的块元素有",[34,128257,126357],{},"~",[34,128260,128261],{},"\u003Ch6>",[34,128263,126383],{},[34,128265,126453],{},[34,128267,128268],{},"\u003Cul>",[34,128270,128271],{},"\u003Col>",[34,128273,128274],{},"\u003Cli>","等，其中 ",[34,128277,126453],{}," 标签是最典型的块元素",[15,128280,128281],{},[707,128282,128283],{},"块级元素的特点：",[15,128285,128286],{},"① 比较霸道，自己独占一行。",[15,128288,128289],{},"② 高度，宽度、外边距以及内边距都可以控制。",[15,128291,128292],{},"③ 宽度默认是容器（父级宽度）的100%。",[15,128294,128295],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[15,128297,128298],{},[707,128299,593],{},[15,128301,128302],{},"①文字类的元素内不能使用块级元素",[15,128304,77667,128305,128307,128308,128310,128311],{},[34,128306,126383],{}," 标签主要用于存放文字，因此 ",[34,128309,126383],{}," 里面不能放块级元素，特别是不能放",[34,128312,126453],{},[15,128314,128315,128316,128258,128318,128320],{},"⑥同理， ",[34,128317,126357],{},[34,128319,128261],{},"等都是文字类块级标签，里面也不能放其他块级元素",[531,128322,128324],{"id":128323},"_812-行内元素","8.1.2 行内元素",[15,128326,128327,128328,37,128330,37,128333,37,128336,37,128339,37,128342,37,128345,37,128348,37,128351,37,128354,128356,128357,128359],{},"常见的行内元素有 ",[34,128329,126615],{},[34,128331,128332],{},"\u003Cstrong>",[34,128334,128335],{},"\u003Cb>",[34,128337,128338],{},"\u003Cem>",[34,128340,128341],{},"\u003Ci>",[34,128343,128344],{},"\u003Cdel>",[34,128346,128347],{},"\u003Cs>",[34,128349,128350],{},"\u003Cins>",[34,128352,128353],{},"\u003Cu>",[34,128355,126456],{}," 等，其中 ",[34,128358,126456],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[15,128361,128362],{},[707,128363,128364],{},"特点：",[15,128366,128367],{},"① 相邻行内元素在一行上，一行可以显示多个。",[15,128369,128370],{},"② 高、宽直接设置是无效的。",[15,128372,128373],{},"③ 默认宽度就是它本身内容的宽度。",[15,128375,128376],{},"④ 行内元素只能容纳文本或其他行内元素。",[15,128378,128379],{},[707,128380,593],{},[15,128382,128383],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[15,128385,128386,128387,128389,128390,128392],{},"②特殊情况链接 ",[34,128388,126615],{}," 里面可以放块级元素，但是给 ",[34,128391,126615],{}," 转换一下块级模式最安全",[531,128394,128396],{"id":128395},"_813-行内块元素","8.1.3 行内块元素",[15,128398,128399,128400,37,128403,37,128406,128409],{},"在行内元素中有几个特殊的标签 —— ",[34,128401,128402],{},"\u003Cimg \u002F>",[34,128404,128405],{},"\u003Cinput \u002F>",[34,128407,128408],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[15,128411,128412],{},[707,128413,128414],{},"行内块元素的特点：",[15,128416,128417],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[15,128419,128420],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[15,128422,128423],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[531,128425,128427],{"id":128426},"_814-总结","8.1.4 总结",[1891,128429],{"style":126698,"src":128430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[531,128432,128434],{"id":128433},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[15,128436,128437],{},"①转换为块元素：display:block;",[63,128439,128441],{"className":126842,"code":128440,"language":126844,"meta":68,"style":68},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[34,128442,128443,128448,128454,128465,128477,128489],{"__ignoreMap":68},[72,128444,128445],{"class":74,"line":75},[72,128446,128447],{"class":621},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[72,128449,128450,128452],{"class":74,"line":370},[72,128451,257],{"class":51718},[72,128453,15998],{"class":82},[72,128455,128456,128459,128461,128463],{"class":74,"line":1608},[72,128457,128458],{"class":362},"  display",[72,128460,51855],{"class":82},[72,128462,61287],{"class":362},[72,128464,1719],{"class":82},[72,128466,128467,128469,128471,128473,128475],{"class":74,"line":1623},[72,128468,70986],{"class":362},[72,128470,51855],{"class":82},[72,128472,865],{"class":362},[72,128474,51910],{"class":78},[72,128476,1719],{"class":82},[72,128478,128479,128481,128483,128485,128487],{"class":74,"line":1629},[72,128480,71206],{"class":362},[72,128482,51855],{"class":82},[72,128484,955],{"class":362},[72,128486,51910],{"class":78},[72,128488,1719],{"class":82},[72,128490,128491],{"class":74,"line":1643},[72,128492,1994],{"class":82},[15,128494,128495],{},"②转换为行内元素：display:inline;",[63,128497,128499],{"className":126842,"code":128498,"language":126844,"meta":68,"style":68},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[34,128500,128501,128506,128512,128523],{"__ignoreMap":68},[72,128502,128503],{"class":74,"line":75},[72,128504,128505],{"class":621},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[72,128507,128508,128510],{"class":74,"line":370},[72,128509,52029],{"class":51718},[72,128511,15998],{"class":82},[72,128513,128514,128516,128518,128521],{"class":74,"line":1608},[72,128515,128458],{"class":362},[72,128517,51855],{"class":82},[72,128519,128520],{"class":362},"inline",[72,128522,1719],{"class":82},[72,128524,128525],{"class":74,"line":1623},[72,128526,1994],{"class":82},[15,128528,128529],{},"③转换为行内块：display:inline-block;",[63,128531,128533],{"className":126842,"code":128532,"language":126844,"meta":68,"style":68},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[34,128534,128535,128540,128546,128556,128568,128580],{"__ignoreMap":68},[72,128536,128537],{"class":74,"line":75},[72,128538,128539],{"class":621},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[72,128541,128542,128544],{"class":74,"line":370},[72,128543,72],{"class":51718},[72,128545,15998],{"class":82},[72,128547,128548,128550,128552,128554],{"class":74,"line":1608},[72,128549,128458],{"class":362},[72,128551,51855],{"class":82},[72,128553,72801],{"class":362},[72,128555,1719],{"class":82},[72,128557,128558,128560,128562,128564,128566],{"class":74,"line":1623},[72,128559,70986],{"class":362},[72,128561,51855],{"class":82},[72,128563,1166],{"class":362},[72,128565,51910],{"class":78},[72,128567,1719],{"class":82},[72,128569,128570,128572,128574,128576,128578],{"class":74,"line":1629},[72,128571,71206],{"class":362},[72,128573,51855],{"class":82},[72,128575,1505],{"class":362},[72,128577,51910],{"class":78},[72,128579,1719],{"class":82},[72,128581,128582],{"class":74,"line":1643},[72,128583,1994],{"class":82},[531,128585,128587],{"id":128586},"_816-小米侧边栏","8.1.6 小米侧边栏",[1891,128589],{"style":126698,"src":128590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[63,128592,128594],{"className":127589,"code":128593,"language":127591,"meta":68,"style":68},"\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",[34,128595,128596,128601,128616,128635,128654,128673,128692,128711,128730,128749],{"__ignoreMap":68},[72,128597,128598],{"class":74,"line":75},[72,128599,128600],{"class":621},"\u003C!-- 小米侧边栏案例 -->\n",[72,128602,128603,128605,128607,128609,128611,128614],{"class":74,"line":370},[72,128604,1464],{"class":82},[72,128606,52029],{"class":51718},[72,128608,53904],{"class":358},[72,128610,609],{"class":82},[72,128612,128613],{"class":366},"\"sidebar\"",[72,128615,51725],{"class":82},[72,128617,128618,128620,128622,128624,128626,128628,128631,128633],{"class":74,"line":1608},[72,128619,52562],{"class":82},[72,128621,257],{"class":51718},[72,128623,61475],{"class":358},[72,128625,609],{"class":82},[72,128627,61480],{"class":366},[72,128629,128630],{"class":82},">手机 电话卡\u003C\u002F",[72,128632,257],{"class":51718},[72,128634,51725],{"class":82},[72,128636,128637,128639,128641,128643,128645,128647,128650,128652],{"class":74,"line":1623},[72,128638,52562],{"class":82},[72,128640,257],{"class":51718},[72,128642,61475],{"class":358},[72,128644,609],{"class":82},[72,128646,61480],{"class":366},[72,128648,128649],{"class":82},">电视 盒子\u003C\u002F",[72,128651,257],{"class":51718},[72,128653,51725],{"class":82},[72,128655,128656,128658,128660,128662,128664,128666,128669,128671],{"class":74,"line":1629},[72,128657,52562],{"class":82},[72,128659,257],{"class":51718},[72,128661,61475],{"class":358},[72,128663,609],{"class":82},[72,128665,61480],{"class":366},[72,128667,128668],{"class":82},">笔记本 平板\u003C\u002F",[72,128670,257],{"class":51718},[72,128672,51725],{"class":82},[72,128674,128675,128677,128679,128681,128683,128685,128688,128690],{"class":74,"line":1643},[72,128676,52562],{"class":82},[72,128678,257],{"class":51718},[72,128680,61475],{"class":358},[72,128682,609],{"class":82},[72,128684,61480],{"class":366},[72,128686,128687],{"class":82},">出行 穿戴\u003C\u002F",[72,128689,257],{"class":51718},[72,128691,51725],{"class":82},[72,128693,128694,128696,128698,128700,128702,128704,128707,128709],{"class":74,"line":1649},[72,128695,52562],{"class":82},[72,128697,257],{"class":51718},[72,128699,61475],{"class":358},[72,128701,609],{"class":82},[72,128703,61480],{"class":366},[72,128705,128706],{"class":82},">智能 路由器\u003C\u002F",[72,128708,257],{"class":51718},[72,128710,51725],{"class":82},[72,128712,128713,128715,128717,128719,128721,128723,128726,128728],{"class":74,"line":1740},[72,128714,52562],{"class":82},[72,128716,257],{"class":51718},[72,128718,61475],{"class":358},[72,128720,609],{"class":82},[72,128722,61480],{"class":366},[72,128724,128725],{"class":82},">健康 儿童\u003C\u002F",[72,128727,257],{"class":51718},[72,128729,51725],{"class":82},[72,128731,128732,128734,128736,128738,128740,128742,128745,128747],{"class":74,"line":1746},[72,128733,52562],{"class":82},[72,128735,257],{"class":51718},[72,128737,61475],{"class":358},[72,128739,609],{"class":82},[72,128741,61480],{"class":366},[72,128743,128744],{"class":82},">耳机 音响\u003C\u002F",[72,128746,257],{"class":51718},[72,128748,51725],{"class":82},[72,128750,128751,128753,128755],{"class":74,"line":1758},[72,128752,52203],{"class":82},[72,128754,52029],{"class":51718},[72,128756,51725],{"class":82},[63,128758,128760],{"className":126842,"code":128759,"language":126844,"meta":68,"style":68},".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",[34,128761,128762,128771,128781,128794,128806,128818,128830,128840,128851,128855,128865,128876],{"__ignoreMap":68},[72,128763,128764,128767,128769],{"class":74,"line":75},[72,128765,128766],{"class":358},".sidebar",[72,128768,1827],{"class":51718},[72,128770,15998],{"class":82},[72,128772,128773,128775,128777,128779],{"class":74,"line":370},[72,128774,128458],{"class":362},[72,128776,51855],{"class":82},[72,128778,61287],{"class":362},[72,128780,1719],{"class":82},[72,128782,128783,128785,128787,128790,128792],{"class":74,"line":1608},[72,128784,70986],{"class":362},[72,128786,51855],{"class":82},[72,128788,128789],{"class":362},"234",[72,128791,51910],{"class":78},[72,128793,1719],{"class":82},[72,128795,128796,128798,128800,128802,128804],{"class":74,"line":1623},[72,128797,71206],{"class":362},[72,128799,51855],{"class":82},[72,128801,1006],{"class":362},[72,128803,51910],{"class":78},[72,128805,1719],{"class":82},[72,128807,128808,128810,128812,128814,128816],{"class":74,"line":1629},[72,128809,127526],{"class":362},[72,128811,51855],{"class":82},[72,128813,1006],{"class":362},[72,128815,51910],{"class":78},[72,128817,1719],{"class":82},[72,128819,128820,128822,128824,128826,128828],{"class":74,"line":1643},[72,128821,71241],{"class":362},[72,128823,51855],{"class":82},[72,128825,1505],{"class":362},[72,128827,51910],{"class":78},[72,128829,1719],{"class":82},[72,128831,128832,128834,128836,128838],{"class":74,"line":1649},[72,128833,71323],{"class":362},[72,128835,51855],{"class":82},[72,128837,61260],{"class":362},[72,128839,1719],{"class":82},[72,128841,128842,128844,128846,128849],{"class":74,"line":1740},[72,128843,71296],{"class":362},[72,128845,51855],{"class":82},[72,128847,128848],{"class":362},"#55585a",[72,128850,1719],{"class":82},[72,128852,128853],{"class":74,"line":1746},[72,128854,1994],{"class":82},[72,128856,128857,128859,128861,128863],{"class":74,"line":1758},[72,128858,128766],{"class":358},[72,128860,1827],{"class":51718},[72,128862,61358],{"class":358},[72,128864,15998],{"class":82},[72,128866,128867,128869,128871,128874],{"class":74,"line":2041},[72,128868,71296],{"class":362},[72,128870,51855],{"class":82},[72,128872,128873],{"class":362},"#ff6700",[72,128875,1719],{"class":82},[72,128877,128878],{"class":74,"line":2046},[72,128879,1994],{"class":82},[1891,128881],{"style":126698,"src":128882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[15,128884,128885],{},"行高=盒子高度：实现文字的垂直居中",[15,128887,128888],{},"原理讲解：",[1891,128890],{"style":126698,"src":128891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[85,128893,128895],{"id":128894},"_82-css背景","8.2 css背景",[15,128897,128898],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[531,128900,128902],{"id":128901},"_821-背景颜色","8.2.1 背景颜色",[15,128904,128905],{},"background-color:颜色值;",[15,128907,128908],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[531,128910,128912],{"id":128911},"_822-背景图片","8.2.2 背景图片",[15,128914,128915],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[63,128917,128919],{"className":126842,"code":128918,"language":126844,"meta":68,"style":68},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[34,128920,128921,128927,128943],{"__ignoreMap":68},[72,128922,128923,128925],{"class":74,"line":75},[72,128924,52029],{"class":51718},[72,128926,15998],{"class":82},[72,128928,128929,128932,128934,128936,128938,128941],{"class":74,"line":370},[72,128930,128931],{"class":362},"  background-image",[72,128933,51855],{"class":82},[72,128935,62144],{"class":362},[72,128937,564],{"class":82},[72,128939,128940],{"class":5642},"images\u002Fbg.png",[72,128942,3147],{"class":82},[72,128944,128945],{"class":74,"line":1608},[72,128946,1994],{"class":82},[154,128948,128949,128958],{},[157,128950,128951],{},[160,128952,128953,128956],{},[163,128954,128955],{"align":165},"参数值",[163,128957,103100],{"align":165},[174,128959,128960,128967],{},[160,128961,128962,128964],{},[179,128963,55155],{"align":165},[179,128965,128966],{"align":165},"无背景图（默认的）",[160,128968,128969,128971],{},[179,128970,62144],{"align":165},[179,128972,128973],{"align":165},"使用绝对或相对地址指定背景图像",[63,128975,128976],{"className":126842,"code":128918,"language":126844,"meta":68,"style":68},[34,128977,128978,128984,128998],{"__ignoreMap":68},[72,128979,128980,128982],{"class":74,"line":75},[72,128981,52029],{"class":51718},[72,128983,15998],{"class":82},[72,128985,128986,128988,128990,128992,128994,128996],{"class":74,"line":370},[72,128987,128931],{"class":362},[72,128989,51855],{"class":82},[72,128991,62144],{"class":362},[72,128993,564],{"class":82},[72,128995,128940],{"class":5642},[72,128997,3147],{"class":82},[72,128999,129000],{"class":74,"line":1608},[72,129001,1994],{"class":82},[15,129003,129004],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[531,129006,129008],{"id":129007},"_823-背景平铺","8.2.3 背景平铺",[63,129010,129012],{"className":126842,"code":129011,"language":126844,"meta":68,"style":68},"div {\n  background-repeat: no-repeat;\n}\n",[34,129013,129014,129020,129031],{"__ignoreMap":68},[72,129015,129016,129018],{"class":74,"line":75},[72,129017,52029],{"class":51718},[72,129019,15998],{"class":82},[72,129021,129022,129025,129027,129029],{"class":74,"line":370},[72,129023,129024],{"class":362},"  background-repeat",[72,129026,51855],{"class":82},[72,129028,62154],{"class":362},[72,129030,1719],{"class":82},[72,129032,129033],{"class":74,"line":1608},[72,129034,1994],{"class":82},[154,129036,129037,129045],{},[157,129038,129039],{},[160,129040,129041,129043],{},[163,129042,128955],{"align":165},[163,129044,103100],{"align":165},[174,129046,129047,129055,129062,129070],{},[160,129048,129049,129052],{},[179,129050,129051],{"align":165},"repeat",[179,129053,129054],{"align":165},"背景图像在纵向和横向上平铺（默认的）",[160,129056,129057,129059],{},[179,129058,62154],{"align":165},[179,129060,129061],{"align":165},"背景图像不平铺",[160,129063,129064,129067],{},[179,129065,129066],{"align":165},"repeat-x",[179,129068,129069],{"align":165},"背景图像在横向上平铺",[160,129071,129072,129075],{},[179,129073,129074],{"align":165},"repeat-y",[179,129076,129077],{"align":165},"背景图像在纵向平铺",[531,129079,129081],{"id":129080},"_824-背景图片位置","8.2.4 背景图片位置",[63,129083,129085],{"className":126842,"code":129084,"language":126844,"meta":68,"style":68},"\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",[34,129086,129087,129092,129098,129112,129116,129121,129127,129143,129147,129152,129158,129172],{"__ignoreMap":68},[72,129088,129089],{"class":74,"line":75},[72,129090,129091],{"class":621},"\u002F* 方位名词 *\u002F\n",[72,129093,129094,129096],{"class":74,"line":370},[72,129095,52029],{"class":51718},[72,129097,15998],{"class":82},[72,129099,129100,129103,129105,129107,129110],{"class":74,"line":1608},[72,129101,129102],{"class":362},"  background-position",[72,129104,51855],{"class":82},[72,129106,52010],{"class":362},[72,129108,129109],{"class":362}," top",[72,129111,1719],{"class":82},[72,129113,129114],{"class":74,"line":1623},[72,129115,1994],{"class":82},[72,129117,129118],{"class":74,"line":1629},[72,129119,129120],{"class":621},"\u002F* 精确单位 *\u002F\n",[72,129122,129123,129125],{"class":74,"line":1643},[72,129124,52029],{"class":51718},[72,129126,15998],{"class":82},[72,129128,129129,129131,129133,129135,129137,129139,129141],{"class":74,"line":1649},[72,129130,129102],{"class":362},[72,129132,51855],{"class":82},[72,129134,1254],{"class":362},[72,129136,51910],{"class":78},[72,129138,57922],{"class":362},[72,129140,51910],{"class":78},[72,129142,1719],{"class":82},[72,129144,129145],{"class":74,"line":1740},[72,129146,1994],{"class":82},[72,129148,129149],{"class":74,"line":1746},[72,129150,129151],{"class":621},"\u002F* 混合单位 *\u002F\n",[72,129153,129154,129156],{"class":74,"line":1758},[72,129155,52029],{"class":51718},[72,129157,15998],{"class":82},[72,129159,129160,129162,129164,129166,129168,129170],{"class":74,"line":2041},[72,129161,129102],{"class":362},[72,129163,51855],{"class":82},[72,129165,1254],{"class":362},[72,129167,51910],{"class":78},[72,129169,17570],{"class":362},[72,129171,1719],{"class":82},[72,129173,129174],{"class":74,"line":2046},[72,129175,1994],{"class":82},[15,129177,129178],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[154,129180,129181,129189],{},[157,129182,129183],{},[160,129184,129185,129187],{},[163,129186,128955],{"align":165},[163,129188,26291],{"align":165},[174,129190,129191,129198],{},[160,129192,129193,129195],{},[179,129194,52386],{"align":165},[179,129196,129197],{"align":165},"百分数|由浮点数和单位标识符组成的长度值",[160,129199,129200,129203],{},[179,129201,129202],{"align":165},"position",[179,129204,129205],{"align":165},"top|center|bottom|left|center|right 方位名词",[15,129207,129208],{},"其他说明：",[15,129210,129211],{},"①参数是方位名词",[15,129213,129214],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[15,129216,129217],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[15,129219,129220],{},"②参数是精确单位",[15,129222,129223],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[15,129225,129226],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[15,129228,129229],{},"③参数是混合单位",[15,129231,129232],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[531,129234,129236],{"id":129235},"_825-背景图片固定","8.2.5 背景图片固定",[63,129238,129240],{"className":126842,"code":129239,"language":126844,"meta":68,"style":68},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[34,129241,129242,129247,129253,129265,129269,129274,129280,129290],{"__ignoreMap":68},[72,129243,129244],{"class":74,"line":75},[72,129245,129246],{"class":621},"\u002F* 背景滚动（默认） *\u002F\n",[72,129248,129249,129251],{"class":74,"line":370},[72,129250,52029],{"class":51718},[72,129252,15998],{"class":82},[72,129254,129255,129258,129260,129263],{"class":74,"line":1608},[72,129256,129257],{"class":362},"  background-attachment",[72,129259,51855],{"class":82},[72,129261,129262],{"class":362},"scroll",[72,129264,1719],{"class":82},[72,129266,129267],{"class":74,"line":1623},[72,129268,1994],{"class":82},[72,129270,129271],{"class":74,"line":1629},[72,129272,129273],{"class":621},"\u002F* 背景固定 *\u002F\n",[72,129275,129276,129278],{"class":74,"line":1643},[72,129277,52029],{"class":51718},[72,129279,15998],{"class":82},[72,129281,129282,129284,129286,129288],{"class":74,"line":1649},[72,129283,129257],{"class":362},[72,129285,51855],{"class":82},[72,129287,86650],{"class":362},[72,129289,1719],{"class":82},[72,129291,129292],{"class":74,"line":1740},[72,129293,1994],{"class":82},[154,129295,129296,129305],{},[157,129297,129298],{},[160,129299,129300,129303],{},[163,129301,129302],{"align":165},"参数",[163,129304,103100],{"align":165},[174,129306,129307,129314],{},[160,129308,129309,129311],{},[179,129310,129262],{"align":165},[179,129312,129313],{"align":165},"背景图像是随对象内容滚动",[160,129315,129316,129318],{},[179,129317,86650],{"align":165},[179,129319,129320],{"align":165},"背景图像固定",[531,129322,129324],{"id":129323},"_826-背景样式合写","8.2.6 背景样式合写",[63,129326,129328],{"className":126842,"code":129327,"language":126844,"meta":68,"style":68},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[34,129329,129330,129335,129341,129369],{"__ignoreMap":68},[72,129331,129332],{"class":74,"line":75},[72,129333,129334],{"class":621},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[72,129336,129337,129339],{"class":74,"line":370},[72,129338,52029],{"class":51718},[72,129340,15998],{"class":82},[72,129342,129343,129345,129347,129349,129352,129354,129356,129358,129360,129363,129365,129367],{"class":74,"line":1608},[72,129344,71029],{"class":362},[72,129346,51855],{"class":82},[72,129348,61260],{"class":362},[72,129350,129351],{"class":362}," url",[72,129353,564],{"class":82},[72,129355,128940],{"class":5642},[72,129357,14140],{"class":82},[72,129359,62154],{"class":362},[72,129361,129362],{"class":362}," fixed",[72,129364,17570],{"class":362},[72,129366,129109],{"class":362},[72,129368,1719],{"class":82},[72,129370,129371],{"class":74,"line":1623},[72,129372,1994],{"class":82},[531,129374,129376],{"id":129375},"_827-背景色半透明","8.2.7 背景色半透明",[63,129378,129380],{"className":126842,"code":129379,"language":126844,"meta":68,"style":68},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[34,129381,129382,129388,129414],{"__ignoreMap":68},[72,129383,129384,129386],{"class":74,"line":75},[72,129385,52029],{"class":51718},[72,129387,15998],{"class":82},[72,129389,129390,129392,129394,129396,129398,129400,129402,129404,129406,129408,129410,129412],{"class":74,"line":370},[72,129391,71029],{"class":362},[72,129393,51855],{"class":82},[72,129395,55528],{"class":362},[72,129397,564],{"class":82},[72,129399,747],{"class":362},[72,129401,12861],{"class":82},[72,129403,747],{"class":362},[72,129405,12861],{"class":82},[72,129407,747],{"class":362},[72,129409,12861],{"class":82},[72,129411,100938],{"class":362},[72,129413,3147],{"class":82},[72,129415,129416],{"class":74,"line":1608},[72,129417,1994],{"class":82},[15,129419,99813],{},[15,129421,129422],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[15,129424,129425],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[15,129427,129428],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[15,129430,129431],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[531,129433,129435],{"id":129434},"_828-总结","8.2.8 总结",[154,129437,129438,129449],{},[157,129439,129440],{},[160,129441,129442,129445,129447],{},[163,129443,129444],{"align":165},"属性",[163,129446,103100],{"align":165},[163,129448,710],{"align":165},[174,129450,129451,129462,129473,129484,129495,129506,129517],{},[160,129452,129453,129456,129459],{},[179,129454,129455],{"align":165},"background-color",[179,129457,129458],{"align":165},"背景颜色",[179,129460,129461],{"align":165},"预定义的颜色值\u002F十六进制\u002FRGB代码",[160,129463,129464,129467,129470],{},[179,129465,129466],{"align":165},"background-image",[179,129468,129469],{"align":165},"背景图片",[179,129471,129472],{"align":165},"url(图片路径)",[160,129474,129475,129478,129481],{},[179,129476,129477],{"align":165},"background-repeat",[179,129479,129480],{"align":165},"是否平铺",[179,129482,129483],{"align":165},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[160,129485,129486,129489,129492],{},[179,129487,129488],{"align":165},"background-position",[179,129490,129491],{"align":165},"背景位置",[179,129493,129494],{"align":165},"length\u002Fposition 分别是x和y坐标",[160,129496,129497,129500,129503],{},[179,129498,129499],{"align":165},"background-attachment",[179,129501,129502],{"align":165},"背景附着",[179,129504,129505],{"align":165},"scroll(背景滚动) \u002Ffixed (背景固定)",[160,129507,129508,129511,129514],{},[179,129509,129510],{"align":165},"背景简写",[179,129512,129513],{"align":165},"书写更简单",[179,129515,129516],{"align":165},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[160,129518,129519,129522,129525],{},[179,129520,129521],{"align":165},"背景半透明",[179,129523,129524],{"align":165},"背景颜色半透明",[179,129526,129527],{"align":165},"background: rgba(0,0,0.3); 后面必须是4个值",[15,129529,129530],{},"颜色渐变：",[1891,129532],{"style":126698,"src":129533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[1891,129535],{"style":126698,"src":129536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[531,129538,129540],{"id":129539},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[63,129542,129544],{"className":127589,"code":129543,"language":127591,"meta":68,"style":68},"\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",[34,129545,129546,129561,129580,129599,129618,129637,129656],{"__ignoreMap":68},[72,129547,129548,129550,129552,129554,129556,129559],{"class":74,"line":75},[72,129549,1464],{"class":82},[72,129551,52029],{"class":51718},[72,129553,53904],{"class":358},[72,129555,609],{"class":82},[72,129557,129558],{"class":366},"\"nav\"",[72,129560,51725],{"class":82},[72,129562,129563,129565,129567,129569,129571,129573,129576,129578],{"class":74,"line":370},[72,129564,52562],{"class":82},[72,129566,257],{"class":51718},[72,129568,61475],{"class":358},[72,129570,609],{"class":82},[72,129572,61480],{"class":366},[72,129574,129575],{"class":82},">五彩导航1\u003C\u002F",[72,129577,257],{"class":51718},[72,129579,51725],{"class":82},[72,129581,129582,129584,129586,129588,129590,129592,129595,129597],{"class":74,"line":1608},[72,129583,52562],{"class":82},[72,129585,257],{"class":51718},[72,129587,61475],{"class":358},[72,129589,609],{"class":82},[72,129591,61480],{"class":366},[72,129593,129594],{"class":82},">五彩导航2\u003C\u002F",[72,129596,257],{"class":51718},[72,129598,51725],{"class":82},[72,129600,129601,129603,129605,129607,129609,129611,129614,129616],{"class":74,"line":1623},[72,129602,52562],{"class":82},[72,129604,257],{"class":51718},[72,129606,61475],{"class":358},[72,129608,609],{"class":82},[72,129610,61480],{"class":366},[72,129612,129613],{"class":82},">五彩导航3\u003C\u002F",[72,129615,257],{"class":51718},[72,129617,51725],{"class":82},[72,129619,129620,129622,129624,129626,129628,129630,129633,129635],{"class":74,"line":1629},[72,129621,52562],{"class":82},[72,129623,257],{"class":51718},[72,129625,61475],{"class":358},[72,129627,609],{"class":82},[72,129629,61480],{"class":366},[72,129631,129632],{"class":82},">五彩导航4\u003C\u002F",[72,129634,257],{"class":51718},[72,129636,51725],{"class":82},[72,129638,129639,129641,129643,129645,129647,129649,129652,129654],{"class":74,"line":1643},[72,129640,52562],{"class":82},[72,129642,257],{"class":51718},[72,129644,61475],{"class":358},[72,129646,609],{"class":82},[72,129648,61480],{"class":366},[72,129650,129651],{"class":82},">五彩导航5\u003C\u002F",[72,129653,257],{"class":51718},[72,129655,51725],{"class":82},[72,129657,129658,129660,129662],{"class":74,"line":1649},[72,129659,52203],{"class":82},[72,129661,52029],{"class":51718},[72,129663,51725],{"class":82},[63,129665,129667],{"className":126842,"code":129666,"language":126844,"meta":68,"style":68},".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",[34,129668,129669,129678,129688,129700,129712,129722,129734,129744,129748,129773,129796,129819,129842],{"__ignoreMap":68},[72,129670,129671,129674,129676],{"class":74,"line":75},[72,129672,129673],{"class":358},".nav",[72,129675,1827],{"class":51718},[72,129677,15998],{"class":82},[72,129679,129680,129682,129684,129686],{"class":74,"line":370},[72,129681,128458],{"class":362},[72,129683,51855],{"class":82},[72,129685,72801],{"class":362},[72,129687,1719],{"class":82},[72,129689,129690,129692,129694,129696,129698],{"class":74,"line":1608},[72,129691,70986],{"class":362},[72,129693,51855],{"class":82},[72,129695,1371],{"class":362},[72,129697,51910],{"class":78},[72,129699,1719],{"class":82},[72,129701,129702,129704,129706,129708,129710],{"class":74,"line":1623},[72,129703,71206],{"class":362},[72,129705,51855],{"class":82},[72,129707,1410],{"class":362},[72,129709,51910],{"class":78},[72,129711,1719],{"class":82},[72,129713,129714,129716,129718,129720],{"class":74,"line":1629},[72,129715,70944],{"class":362},[72,129717,51855],{"class":82},[72,129719,52010],{"class":362},[72,129721,1719],{"class":82},[72,129723,129724,129726,129728,129730,129732],{"class":74,"line":1643},[72,129725,127526],{"class":362},[72,129727,51855],{"class":82},[72,129729,1410],{"class":362},[72,129731,51910],{"class":78},[72,129733,1719],{"class":82},[72,129735,129736,129738,129740,129742],{"class":74,"line":1649},[72,129737,71323],{"class":362},[72,129739,51855],{"class":82},[72,129741,61260],{"class":362},[72,129743,1719],{"class":82},[72,129745,129746],{"class":74,"line":1740},[72,129747,1994],{"class":82},[72,129749,129750,129752,129754,129757,129759,129761,129764,129766,129768,129770],{"class":74,"line":1746},[72,129751,129673],{"class":358},[72,129753,1827],{"class":51718},[72,129755,129756],{"class":358},":nth-child",[72,129758,564],{"class":82},[72,129760,772],{"class":362},[72,129762,129763],{"class":82},") { ",[72,129765,129455],{"class":362},[72,129767,51855],{"class":82},[72,129769,128873],{"class":362},[72,129771,129772],{"class":82},"; }\n",[72,129774,129775,129777,129779,129781,129783,129785,129787,129789,129791,129794],{"class":74,"line":1758},[72,129776,129673],{"class":358},[72,129778,1827],{"class":51718},[72,129780,129756],{"class":358},[72,129782,564],{"class":82},[72,129784,640],{"class":362},[72,129786,129763],{"class":82},[72,129788,129455],{"class":362},[72,129790,51855],{"class":82},[72,129792,129793],{"class":362},"#ff0000",[72,129795,129772],{"class":82},[72,129797,129798,129800,129802,129804,129806,129808,129810,129812,129814,129817],{"class":74,"line":2041},[72,129799,129673],{"class":358},[72,129801,1827],{"class":51718},[72,129803,129756],{"class":358},[72,129805,564],{"class":82},[72,129807,634],{"class":362},[72,129809,129763],{"class":82},[72,129811,129455],{"class":362},[72,129813,51855],{"class":82},[72,129815,129816],{"class":362},"#00a4ff",[72,129818,129772],{"class":82},[72,129820,129821,129823,129825,129827,129829,129831,129833,129835,129837,129840],{"class":74,"line":2046},[72,129822,129673],{"class":358},[72,129824,1827],{"class":51718},[72,129826,129756],{"class":358},[72,129828,564],{"class":82},[72,129830,847],{"class":362},[72,129832,129763],{"class":82},[72,129834,129455],{"class":362},[72,129836,51855],{"class":82},[72,129838,129839],{"class":362},"#ff00ff",[72,129841,129772],{"class":82},[72,129843,129844,129846,129848,129850,129852,129854,129856,129858,129860,129863],{"class":74,"line":2052},[72,129845,129673],{"class":358},[72,129847,1827],{"class":51718},[72,129849,129756],{"class":358},[72,129851,564],{"class":82},[72,129853,873],{"class":362},[72,129855,129763],{"class":82},[72,129857,129455],{"class":362},[72,129859,51855],{"class":82},[72,129861,129862],{"class":362},"#00ff00",[72,129864,129772],{"class":82},[85,129866,129868],{"id":129867},"_83-css三大特性","8.3 css三大特性",[531,129870,129872],{"id":129871},"_831-层叠性","8.3.1 层叠性",[15,129874,129875],{},"为了解决样式冲突问题",[15,129877,129878],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[15,129880,129881],{},"   ②样式不冲突，不会层叠",[531,129883,129885],{"id":129884},"_832-继承性","8.3.2 继承性",[15,129887,129888],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[15,129890,129891],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[63,129893,129895],{"className":126842,"code":129894,"language":126844,"meta":68,"style":68},"p {\n  color: #333;\n}\n",[34,129896,129897,129903,129913],{"__ignoreMap":68},[72,129898,129899,129901],{"class":74,"line":75},[72,129900,15],{"class":51718},[72,129902,15998],{"class":82},[72,129904,129905,129907,129909,129911],{"class":74,"line":370},[72,129906,71323],{"class":362},[72,129908,51855],{"class":82},[72,129910,62787],{"class":362},[72,129912,1719],{"class":82},[72,129914,129915],{"class":74,"line":1608},[72,129916,1994],{"class":82},[1891,129918],{"style":126698,"src":129919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[15,129921,129922],{},"解释：①行高可以跟单位也可以不跟单位",[15,129924,129925],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[15,129927,129928],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[15,129930,129931],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[531,129933,129935],{"id":129934},"_833-优先级","8.3.3 优先级",[22,129937,129938,129941],{},[25,129939,129940],{},"选择器相同，则执行层叠性",[25,129942,129943],{},"选择器不同，则根据选择器权重执行",[154,129945,129946,129956],{},[157,129947,129948],{},[160,129949,129950,129953],{},[163,129951,129952],{"align":165},"选择器",[163,129954,129955],{"align":165},"选择器权重",[174,129957,129958,129966,129974,129982,129990,129998],{},[160,129959,129960,129963],{},[179,129961,129962],{"align":165},"继承 或者*",[179,129964,129965],{"align":165},"0，0，0，0",[160,129967,129968,129971],{},[179,129969,129970],{"align":165},"标签选择器",[179,129972,129973],{"align":165},"0，0，0，1",[160,129975,129976,129979],{},[179,129977,129978],{"align":165},"类选择器，伪类选择器",[179,129980,129981],{"align":165},"0，0，1，0",[160,129983,129984,129987],{},[179,129985,129986],{"align":165},"ID选择器",[179,129988,129989],{"align":165},"0，1，0，0",[160,129991,129992,129995],{},[179,129993,129994],{"align":165},"行内样式",[179,129996,129997],{"align":165},"1，0，0，0",[160,129999,130000,130003],{},[179,130001,130002],{"align":165},"！important",[179,130004,130005],{"align":165},"无穷大",[15,130007,130008],{},"! important用法：",[63,130010,130012],{"className":126842,"code":130011,"language":126844,"meta":68,"style":68},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[34,130013,130014,130019,130025,130038,130042,130047,130053,130063],{"__ignoreMap":68},[72,130015,130016],{"class":74,"line":75},[72,130017,130018],{"class":621},"\u002F* !important 拥有最高优先级 *\u002F\n",[72,130020,130021,130023],{"class":74,"line":370},[72,130022,52029],{"class":51718},[72,130024,15998],{"class":82},[72,130026,130027,130029,130031,130033,130036],{"class":74,"line":1608},[72,130028,71323],{"class":362},[72,130030,51855],{"class":82},[72,130032,52063],{"class":362},[72,130034,130035],{"class":78}," !important",[72,130037,1719],{"class":82},[72,130039,130040],{"class":74,"line":1623},[72,130041,1994],{"class":82},[72,130043,130044],{"class":74,"line":1629},[72,130045,130046],{"class":621},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[72,130048,130049,130051],{"class":74,"line":1643},[72,130050,52029],{"class":51718},[72,130052,15998],{"class":82},[72,130054,130055,130057,130059,130061],{"class":74,"line":1649},[72,130056,71323],{"class":362},[72,130058,51855],{"class":82},[72,130060,57839],{"class":362},[72,130062,1719],{"class":82},[72,130064,130065],{"class":74,"line":1740},[72,130066,1994],{"class":82},[15,130068,130069],{},"优先级注意点：",[15,130071,130072],{},"①权重是有4组数字组成,但是不会有进位",[15,130074,130075],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[15,130077,130078],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[15,130080,130081],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[15,130083,130084],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[15,130086,130087],{},"⑥复合选择器",[154,130089,130090,130100],{},[157,130091,130092],{},[160,130093,130094,130097],{},[163,130095,130096],{"align":165},"div ul li",[163,130098,130099],{"align":165},"0,0,0,3",[174,130101,130102,130110,130118],{},[160,130103,130104,130107],{},[179,130105,130106],{"align":165},".nav ul li",[179,130108,130109],{"align":165},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[160,130111,130112,130115],{},[179,130113,130114],{"align":165},"a:hover",[179,130116,130117],{"align":165},"0,0,1,1",[160,130119,130120,130123],{},[179,130121,130122],{"align":165},".nav a",[179,130124,130117],{"align":165},[473,130126,130127],{},"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":68,"searchDepth":370,"depth":370,"links":130129},[130130,130138,130149],{"id":128238,"depth":370,"text":128239,"children":130131},[130132,130133,130134,130135,130136,130137],{"id":128251,"depth":1608,"text":128252},{"id":128323,"depth":1608,"text":128324},{"id":128395,"depth":1608,"text":128396},{"id":128426,"depth":1608,"text":128427},{"id":128433,"depth":1608,"text":128434},{"id":128586,"depth":1608,"text":128587},{"id":128894,"depth":370,"text":128895,"children":130139},[130140,130141,130142,130143,130144,130145,130146,130147,130148],{"id":128901,"depth":1608,"text":128902},{"id":128911,"depth":1608,"text":128912},{"id":129007,"depth":1608,"text":129008},{"id":129080,"depth":1608,"text":129081},{"id":129235,"depth":1608,"text":129236},{"id":129323,"depth":1608,"text":129324},{"id":129375,"depth":1608,"text":129376},{"id":129434,"depth":1608,"text":129435},{"id":129539,"depth":1608,"text":129540},{"id":129867,"depth":370,"text":129868,"children":130150},[130151,130152,130153],{"id":129871,"depth":1608,"text":129872},{"id":129884,"depth":1608,"text":129885},{"id":129934,"depth":1608,"text":129935},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":128230,"description":23802},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":130160,"title":130161,"body":130162,"description":23802,"extension":487,"meta":131752,"navigation":490,"path":131753,"seo":131754,"stem":131755,"__hash__":131756},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":130163,"toc":131731},[130164,130167,130171,130174,130177,130180,130183,130186,130189,130192,130196,130204,130241,130277,130280,130294,130299,130333,130336,130429,130434,130437,130467,130470,130475,130483,130487,130494,130540,130584,130589,130592,130595,130598,130601,130604,130607,130609,130612,130616,130621,130665,130670,130673,130676,130713,130718,130721,130724,130727,130730,130762,130765,130768,130771,130803,130806,130809,130812,130816,130819,130851,130854,130858,130878,130881,130889,130892,130896,130901,130904,130936,130941,130944,130982,130986,130991,130994,130997,131028,131031,131048,131053,131105,131165,131170,131224,131262,131266,131270,131273,131277,131285,131288,131290,131301,131306,131354,131388,131391,131394,131397,131400,131444,131447,131450,131453,131456,131459,131462,131506,131509,131512,131515,131518,131521,131524,131530,131533,131577,131580,131583,131586,131589,131592,131636,131639,131641,131644,131648,131652,131690,131694,131697,131700,131704,131712,131716,131719,131722,131725,131728],[10,130165,130161],{"id":130166},"_9-css盒模型浮动与切图",[85,130168,130170],{"id":130169},"_91-盒子模型","9.1 盒子模型",[15,130172,130173],{},"利用盒子来设计网页",[15,130175,130176],{},"盒子包含：边框、外边距、内边距、实际内容",[15,130178,130179],{},"网页布局设置：",[15,130181,130182],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[15,130184,130185],{},"②利用css设置好盒子样式，然后摆放到相应位置",[15,130187,130188],{},"③往盒子里装内容",[1891,130190],{"style":126698,"src":130191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[531,130193,130195],{"id":130194},"_911-边框border","9.1.1 边框（border）",[22,130197,130198,130201],{},[25,130199,130200],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[25,130202,130203],{},"语法",[63,130205,130207],{"className":126842,"code":130206,"language":126844,"meta":68,"style":68},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[34,130208,130209,130214,130220,130237],{"__ignoreMap":68},[72,130210,130211],{"class":74,"line":75},[72,130212,130213],{"class":621},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[72,130215,130216,130218],{"class":74,"line":370},[72,130217,52029],{"class":51718},[72,130219,15998],{"class":82},[72,130221,130222,130224,130226,130228,130230,130232,130235],{"class":74,"line":1608},[72,130223,71314],{"class":362},[72,130225,51855],{"class":82},[72,130227,772],{"class":362},[72,130229,51910],{"class":78},[72,130231,51939],{"class":362},[72,130233,130234],{"class":362}," #ccc",[72,130236,1719],{"class":82},[72,130238,130239],{"class":74,"line":1623},[72,130240,1994],{"class":82},[154,130242,130243,130251],{},[157,130244,130245],{},[160,130246,130247,130249],{},[163,130248,129444],{"align":165},[163,130250,103100],{"align":165},[174,130252,130253,130261,130269],{},[160,130254,130255,130258],{},[179,130256,130257],{"align":165},"border-width",[179,130259,130260],{"align":165},"定义边框粗细，单位是px",[160,130262,130263,130266],{},[179,130264,130265],{"align":165},"border-style",[179,130267,130268],{"align":165},"边框的样式",[160,130270,130271,130274],{},[179,130272,130273],{"align":165},"border-color",[179,130275,130276],{"align":165},"边框的颜色",[15,130278,130279],{},"边框样式 border-style 可以设置如下值：",[251,130281,130282,130285,130288,130291],{},[25,130283,130284],{},"none：没有边框即忽略所有边框的宽度（默认值）",[25,130286,130287],{},"solid：边框为单实线(最为常用的)",[25,130289,130290],{},"dashed：边框为虚线",[25,130292,130293],{},"dotted：边框为点线",[22,130295,130296],{"start":1608},[25,130297,130298],{},"边框的合写分写",[63,130300,130301],{"className":126842,"code":130206,"language":126844,"meta":68,"style":68},[34,130302,130303,130307,130313,130329],{"__ignoreMap":68},[72,130304,130305],{"class":74,"line":75},[72,130306,130213],{"class":621},[72,130308,130309,130311],{"class":74,"line":370},[72,130310,52029],{"class":51718},[72,130312,15998],{"class":82},[72,130314,130315,130317,130319,130321,130323,130325,130327],{"class":74,"line":1608},[72,130316,71314],{"class":362},[72,130318,51855],{"class":82},[72,130320,772],{"class":362},[72,130322,51910],{"class":78},[72,130324,51939],{"class":362},[72,130326,130234],{"class":362},[72,130328,1719],{"class":82},[72,130330,130331],{"class":74,"line":1623},[72,130332,1994],{"class":82},[15,130334,130335],{},"边框分开写法：",[63,130337,130339],{"className":126842,"code":130338,"language":126844,"meta":68,"style":68},"\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",[34,130340,130341,130346,130352,130370,130388,130407,130425],{"__ignoreMap":68},[72,130342,130343],{"class":74,"line":75},[72,130344,130345],{"class":621},"\u002F* 边框分开写法 *\u002F\n",[72,130347,130348,130350],{"class":74,"line":370},[72,130349,52029],{"class":51718},[72,130351,15998],{"class":82},[72,130353,130354,130357,130359,130361,130363,130365,130368],{"class":74,"line":1608},[72,130355,130356],{"class":362},"  border-top",[72,130358,51855],{"class":82},[72,130360,772],{"class":362},[72,130362,51910],{"class":78},[72,130364,51939],{"class":362},[72,130366,130367],{"class":362}," #000",[72,130369,1719],{"class":82},[72,130371,130372,130375,130377,130379,130381,130383,130386],{"class":74,"line":1623},[72,130373,130374],{"class":362},"  border-right",[72,130376,51855],{"class":82},[72,130378,640],{"class":362},[72,130380,51910],{"class":78},[72,130382,62659],{"class":362},[72,130384,130385],{"class":362}," #333",[72,130387,1719],{"class":82},[72,130389,130390,130393,130395,130397,130399,130402,130405],{"class":74,"line":1629},[72,130391,130392],{"class":362},"  border-bottom",[72,130394,51855],{"class":82},[72,130396,634],{"class":362},[72,130398,51910],{"class":78},[72,130400,130401],{"class":362}," dotted",[72,130403,130404],{"class":362}," #666",[72,130406,1719],{"class":82},[72,130408,130409,130412,130414,130416,130418,130420,130423],{"class":74,"line":1643},[72,130410,130411],{"class":362},"  border-left",[72,130413,51855],{"class":82},[72,130415,772],{"class":362},[72,130417,51910],{"class":78},[72,130419,51939],{"class":362},[72,130421,130422],{"class":362}," #999",[72,130424,1719],{"class":82},[72,130426,130427],{"class":74,"line":1649},[72,130428,1994],{"class":82},[22,130430,130431],{"start":1623},[25,130432,130433],{},"表格的细线边框",[15,130435,130436],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[63,130438,130440],{"className":126842,"code":130439,"language":126844,"meta":68,"style":68},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[34,130441,130442,130447,130453,130463],{"__ignoreMap":68},[72,130443,130444],{"class":74,"line":75},[72,130445,130446],{"class":621},"\u002F* 表格细线边框合并 *\u002F\n",[72,130448,130449,130451],{"class":74,"line":370},[72,130450,154],{"class":51718},[72,130452,15998],{"class":82},[72,130454,130455,130457,130459,130461],{"class":74,"line":1608},[72,130456,70996],{"class":362},[72,130458,51855],{"class":82},[72,130460,65453],{"class":362},[72,130462,1719],{"class":82},[72,130464,130465],{"class":74,"line":1623},[72,130466,1994],{"class":82},[15,130468,130469],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[22,130471,130472],{"start":1629},[25,130473,130474],{},"解决边框额外增加盒子的实际大小的方法：",[251,130476,130477,130480],{},[25,130478,130479],{},"测量盒子大小的时候,不量边框",[25,130481,130482],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[531,130484,130486],{"id":130485},"_912-内边距","9.1.2 内边距",[22,130488,130489,130492],{},[25,130490,130491],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[25,130493,130203],{},[154,130495,130496,130506],{},[157,130497,130498],{},[160,130499,130500,130503],{},[163,130501,130502],{"align":165},"值的个数",[163,130504,130505],{"align":165},"表达意思",[174,130507,130508,130516,130524,130532],{},[160,130509,130510,130513],{},[179,130511,130512],{"align":165},"padding: 5px;",[179,130514,130515],{"align":165},"1个值，代表上下左右都有5个元素",[160,130517,130518,130521],{},[179,130519,130520],{"align":165},"padding: 5px 10px;",[179,130522,130523],{"align":165},"2个值，代表上下内边距为5像素，左右内边距为10像素",[160,130525,130526,130529],{},[179,130527,130528],{"align":165},"padding: 5px 10px 20px;",[179,130530,130531],{"align":165},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[160,130533,130534,130537],{},[179,130535,130536],{"align":165},"padding: 5px 10px 20px 30px;",[179,130538,130539],{"align":165},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[154,130541,130542,130550],{},[157,130543,130544],{},[160,130545,130546,130548],{},[163,130547,129444],{"align":165},[163,130549,103100],{"align":165},[174,130551,130552,130560,130568,130576],{},[160,130553,130554,130557],{},[179,130555,130556],{"align":165},"padding-left",[179,130558,130559],{"align":165},"左内边距",[160,130561,130562,130565],{},[179,130563,130564],{"align":165},"padding-right",[179,130566,130567],{"align":165},"右内边距",[160,130569,130570,130573],{},[179,130571,130572],{"align":165},"padding-top",[179,130574,130575],{"align":165},"上内边距",[160,130577,130578,130581],{},[179,130579,130580],{"align":165},"padding-bottom",[179,130582,130583],{"align":165},"下内边距",[22,130585,130586],{"start":1608},[25,130587,130588],{},"内边距会影响盒子的实际大小",[15,130590,130591],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[15,130593,130594],{},"①内容和边框有了距离，添加了内边距",[15,130596,130597],{},"②padding影响了盒子实际大小",[15,130599,130600],{},"内边距对盒子大小的影响：",[15,130602,130603],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[15,130605,130606],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[15,130608,95637],{},[15,130610,130611],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[531,130613,130615],{"id":130614},"_913-外边距","9.1.3 外边距",[22,130617,130618],{},[25,130619,130620],{},"控制盒子与盒子之间的距离",[154,130622,130623,130631],{},[157,130624,130625],{},[160,130626,130627,130629],{},[163,130628,129444],{"align":165},[163,130630,103100],{"align":165},[174,130632,130633,130641,130649,130657],{},[160,130634,130635,130638],{},[179,130636,130637],{"align":165},"margin-left",[179,130639,130640],{"align":165},"左外边距",[160,130642,130643,130646],{},[179,130644,130645],{"align":165},"margin-right",[179,130647,130648],{"align":165},"右外边距",[160,130650,130651,130654],{},[179,130652,130653],{"align":165},"margin-top",[179,130655,130656],{"align":165},"上外边距",[160,130658,130659,130662],{},[179,130660,130661],{"align":165},"margin-bottom",[179,130663,130664],{"align":165},"下外边距",[22,130666,130667],{"start":370},[25,130668,130669],{},"外边距可以让块级盒子水平居中的两个条件：",[15,130671,130672],{},"①盒子必须指定了宽度（width）",[15,130674,130675],{},"②盒子左右的外边距都设置为 auto",[63,130677,130679],{"className":126842,"code":130678,"language":126844,"meta":68,"style":68},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[34,130680,130681,130686,130693,130709],{"__ignoreMap":68},[72,130682,130683],{"class":74,"line":75},[72,130684,130685],{"class":621},"\u002F* margin 复合写法（同上） *\u002F\n",[72,130687,130688,130691],{"class":74,"line":370},[72,130689,130690],{"class":358},".box",[72,130692,15998],{"class":82},[72,130694,130695,130697,130699,130701,130703,130706],{"class":74,"line":1608},[72,130696,70888],{"class":362},[72,130698,51855],{"class":82},[72,130700,747],{"class":362},[72,130702,51974],{"class":362},[72,130704,130705],{"class":82},";  ",[72,130707,130708],{"class":621},"\u002F* 块级盒子水平居中 *\u002F\n",[72,130710,130711],{"class":74,"line":1623},[72,130712,1994],{"class":82},[22,130714,130715],{"start":1608},[25,130716,130717],{},"外边距塌陷问题",[15,130719,130720],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[1891,130722],{"style":126698,"src":130723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[15,130725,130726],{},"解决方案：",[15,130728,130729],{},"①可以为父亲元素定义上边距",[63,130731,130732],{"className":126842,"code":130678,"language":126844,"meta":68,"style":68},[34,130733,130734,130738,130744,130758],{"__ignoreMap":68},[72,130735,130736],{"class":74,"line":75},[72,130737,130685],{"class":621},[72,130739,130740,130742],{"class":74,"line":370},[72,130741,130690],{"class":358},[72,130743,15998],{"class":82},[72,130745,130746,130748,130750,130752,130754,130756],{"class":74,"line":1608},[72,130747,70888],{"class":362},[72,130749,51855],{"class":82},[72,130751,747],{"class":362},[72,130753,51974],{"class":362},[72,130755,130705],{"class":82},[72,130757,130708],{"class":621},[72,130759,130760],{"class":74,"line":1623},[72,130761,1994],{"class":82},[15,130763,130764],{},"②可以为父亲元素定义上内边距",[15,130766,130767],{},"③可以为父亲元素添加overflow:hidden",[1891,130769],{"style":126698,"src":130770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[63,130772,130773],{"className":126842,"code":130678,"language":126844,"meta":68,"style":68},[34,130774,130775,130779,130785,130799],{"__ignoreMap":68},[72,130776,130777],{"class":74,"line":75},[72,130778,130685],{"class":621},[72,130780,130781,130783],{"class":74,"line":370},[72,130782,130690],{"class":358},[72,130784,15998],{"class":82},[72,130786,130787,130789,130791,130793,130795,130797],{"class":74,"line":1608},[72,130788,70888],{"class":362},[72,130790,51855],{"class":82},[72,130792,747],{"class":362},[72,130794,51974],{"class":362},[72,130796,130705],{"class":82},[72,130798,130708],{"class":621},[72,130800,130801],{"class":74,"line":1623},[72,130802,1994],{"class":82},[1891,130804],{"style":126698,"src":130805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[15,130807,130808],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[15,130810,130811],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[531,130813,130815],{"id":130814},"_914-清除内外边距","9.1.4 清除内外边距",[15,130817,130818],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[63,130820,130821],{"className":126842,"code":130678,"language":126844,"meta":68,"style":68},[34,130822,130823,130827,130833,130847],{"__ignoreMap":68},[72,130824,130825],{"class":74,"line":75},[72,130826,130685],{"class":621},[72,130828,130829,130831],{"class":74,"line":370},[72,130830,130690],{"class":358},[72,130832,15998],{"class":82},[72,130834,130835,130837,130839,130841,130843,130845],{"class":74,"line":1608},[72,130836,70888],{"class":362},[72,130838,51855],{"class":82},[72,130840,747],{"class":362},[72,130842,51974],{"class":362},[72,130844,130705],{"class":82},[72,130846,130708],{"class":621},[72,130848,130849],{"class":74,"line":1623},[72,130850,1994],{"class":82},[15,130852,130853],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[531,130855,130857],{"id":130856},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[251,130859,130860,130863,130866,130869,130872,130875],{},[25,130861,130862],{},"文件→打开 ：可以打开我们要测量的图片",[25,130864,130865],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[25,130867,130868],{},"右击标尺，把里面的单位改为像素",[25,130870,130871],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[25,130873,130874],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[25,130876,130877],{},"用选区拖动 可以测量大小",[1891,130879],{"style":126698,"src":130880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[251,130882,130883,130886],{},[25,130884,130885],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[25,130887,130888],{},"吸管取色工具",[1891,130890],{"style":126698,"src":130891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[531,130893,130895],{"id":130894},"_916-案例","9.1.6 案例",[22,130897,130898],{},[25,130899,130900],{},"小米商品",[1891,130902],{"style":126698,"src":130903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[63,130905,130906],{"className":126842,"code":130678,"language":126844,"meta":68,"style":68},[34,130907,130908,130912,130918,130932],{"__ignoreMap":68},[72,130909,130910],{"class":74,"line":75},[72,130911,130685],{"class":621},[72,130913,130914,130916],{"class":74,"line":370},[72,130915,130690],{"class":358},[72,130917,15998],{"class":82},[72,130919,130920,130922,130924,130926,130928,130930],{"class":74,"line":1608},[72,130921,70888],{"class":362},[72,130923,51855],{"class":82},[72,130925,747],{"class":362},[72,130927,51974],{"class":362},[72,130929,130705],{"class":82},[72,130931,130708],{"class":621},[72,130933,130934],{"class":74,"line":1623},[72,130935,1994],{"class":82},[22,130937,130938],{"start":370},[25,130939,130940],{},"快报模块",[1891,130942],{"style":126698,"src":130943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[63,130945,130947],{"className":127589,"code":130946,"language":127591,"meta":68,"style":68},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[34,130948,130949,130954,130969,130974],{"__ignoreMap":68},[72,130950,130951],{"class":74,"line":75},[72,130952,130953],{"class":621},"\u003C!-- HTML 代码示例 -->\n",[72,130955,130956,130958,130960,130962,130964,130967],{"class":74,"line":370},[72,130957,1464],{"class":82},[72,130959,52029],{"class":51718},[72,130961,53904],{"class":358},[72,130963,609],{"class":82},[72,130965,130966],{"class":366},"\"example\"",[72,130968,51725],{"class":82},[72,130970,130971],{"class":74,"line":1608},[72,130972,130973],{"class":82},"  示例内容\n",[72,130975,130976,130978,130980],{"class":74,"line":1623},[72,130977,52203],{"class":82},[72,130979,52029],{"class":51718},[72,130981,51725],{"class":82},[531,130983,130985],{"id":130984},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[22,130987,130988],{},[25,130989,130990],{},"圆角边框",[15,130992,130993],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[1891,130995],{"style":126698,"src":130996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[63,130998,131000],{"className":126842,"code":130999,"language":126844,"meta":68,"style":68},"div {\n  border: 1px solid #ccc;\n}\n",[34,131001,131002,131008,131024],{"__ignoreMap":68},[72,131003,131004,131006],{"class":74,"line":75},[72,131005,52029],{"class":51718},[72,131007,15998],{"class":82},[72,131009,131010,131012,131014,131016,131018,131020,131022],{"class":74,"line":370},[72,131011,71314],{"class":362},[72,131013,51855],{"class":82},[72,131015,772],{"class":362},[72,131017,51910],{"class":78},[72,131019,51939],{"class":362},[72,131021,130234],{"class":362},[72,131023,1719],{"class":82},[72,131025,131026],{"class":74,"line":1608},[72,131027,1994],{"class":82},[15,131029,131030],{},"解释:",[251,131032,131033,131036,131039,131042,131045],{},[25,131034,131035],{},"参数值可以为数值或百分比的形式",[25,131037,131038],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[25,131040,131041],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[25,131043,131044],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[25,131046,131047],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[22,131049,131050],{"start":370},[25,131051,131052],{},"盒子阴影",[63,131054,131056],{"className":126842,"code":131055,"language":126844,"meta":68,"style":68},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[34,131057,131058,131064,131101],{"__ignoreMap":68},[72,131059,131060,131062],{"class":74,"line":75},[72,131061,52029],{"class":51718},[72,131063,15998],{"class":82},[72,131065,131066,131069,131071,131073,131075,131077,131079,131081,131083,131085,131087,131089,131091,131093,131095,131097,131099],{"class":74,"line":370},[72,131067,131068],{"class":362},"  box-shadow",[72,131070,51855],{"class":82},[72,131072,747],{"class":362},[72,131074,15181],{"class":362},[72,131076,51910],{"class":78},[72,131078,2466],{"class":362},[72,131080,51910],{"class":78},[72,131082,79185],{"class":362},[72,131084,564],{"class":82},[72,131086,747],{"class":362},[72,131088,12861],{"class":82},[72,131090,747],{"class":362},[72,131092,12861],{"class":82},[72,131094,747],{"class":362},[72,131096,12861],{"class":82},[72,131098,86627],{"class":362},[72,131100,3147],{"class":82},[72,131102,131103],{"class":74,"line":1608},[72,131104,1994],{"class":82},[154,131106,131107,131115],{},[157,131108,131109],{},[160,131110,131111,131113],{},[163,131112,710],{"align":165},[163,131114,27911],{"align":165},[174,131116,131117,131125,131133,131141,131149,131157],{},[160,131118,131119,131122],{},[179,131120,131121],{"align":165},"h-shadow",[179,131123,131124],{"align":165},"必需,水平阴影的位置,允许负值",[160,131126,131127,131130],{},[179,131128,131129],{"align":165},"v-shadow",[179,131131,131132],{"align":165},"必需,垂直阴影的位置,允许负值",[160,131134,131135,131138],{},[179,131136,131137],{"align":165},"blur",[179,131139,131140],{"align":165},"可选,模糊距离,就是影子的虚实",[160,131142,131143,131146],{},[179,131144,131145],{"align":165},"spread",[179,131147,131148],{"align":165},"可选,阴影尺寸",[160,131150,131151,131154],{},[179,131152,131153],{"align":165},"color",[179,131155,131156],{"align":165},"可选,阴影的颜色",[160,131158,131159,131162],{},[179,131160,131161],{"align":165},"inset",[179,131163,131164],{"align":165},"可选,将外部阴影(outset)改为内部阴影",[22,131166,131167],{"start":1608},[25,131168,131169],{},"文字阴影",[63,131171,131173],{"className":126842,"code":131172,"language":126844,"meta":68,"style":68},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[34,131174,131175,131181,131220],{"__ignoreMap":68},[72,131176,131177,131179],{"class":74,"line":75},[72,131178,15],{"class":51718},[72,131180,15998],{"class":82},[72,131182,131183,131186,131188,131190,131192,131194,131196,131198,131200,131202,131204,131206,131208,131210,131212,131214,131216,131218],{"class":74,"line":370},[72,131184,131185],{"class":362},"  text-shadow",[72,131187,51855],{"class":82},[72,131189,772],{"class":362},[72,131191,51910],{"class":78},[72,131193,25540],{"class":362},[72,131195,51910],{"class":78},[72,131197,15181],{"class":362},[72,131199,51910],{"class":78},[72,131201,79185],{"class":362},[72,131203,564],{"class":82},[72,131205,747],{"class":362},[72,131207,12861],{"class":82},[72,131209,747],{"class":362},[72,131211,12861],{"class":82},[72,131213,747],{"class":362},[72,131215,12861],{"class":82},[72,131217,100938],{"class":362},[72,131219,3147],{"class":82},[72,131221,131222],{"class":74,"line":1608},[72,131223,1994],{"class":82},[154,131225,131226,131234],{},[157,131227,131228],{},[160,131229,131230,131232],{},[163,131231,710],{"align":165},[163,131233,27911],{"align":165},[174,131235,131236,131242,131249,131256],{},[160,131237,131238,131240],{},[179,131239,131121],{"align":165},[179,131241,131124],{"align":165},[160,131243,131244,131246],{},[179,131245,131129],{"align":165},[179,131247,131248],{"align":165},"必需,垂直阴影位置,允许负值",[160,131250,131251,131253],{},[179,131252,131137],{"align":165},[179,131254,131255],{"align":165},"可选,模糊的距离",[160,131257,131258,131260],{},[179,131259,131153],{"align":165},[179,131261,131156],{"align":165},[85,131263,131265],{"id":131264},"_92-浮动","9.2 浮动",[531,131267,131269],{"id":131268},"_921-浮动介绍","9.2.1 浮动介绍",[15,131271,131272],{},"在16.2中详细介绍",[531,131274,131276],{"id":131275},"_922-清除浮动","9.2.2 清除浮动",[22,131278,131279,131282],{},[25,131280,131281],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[25,131283,131284],{},"清除浮动的本质",[15,131286,131287],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[15,131289,9451],{},[251,131291,131292,131295,131298],{},[25,131293,131294],{},"如果父盒子本身有高度，则不需要清除浮动",[25,131296,131297],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[25,131299,131300],{},"父级有了高度，就不会影响下面的标准流了",[22,131302,131303],{"start":1608},[25,131304,131305],{},"清除浮动样式",[63,131307,131309],{"className":126842,"code":131308,"language":126844,"meta":68,"style":68},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[34,131310,131311,131318,131329,131333,131340,131350],{"__ignoreMap":68},[72,131312,131313,131316],{"class":74,"line":75},[72,131314,131315],{"class":358},".left",[72,131317,15998],{"class":82},[72,131319,131320,131323,131325,131327],{"class":74,"line":370},[72,131321,131322],{"class":362},"  float",[72,131324,51855],{"class":82},[72,131326,165],{"class":362},[72,131328,1719],{"class":82},[72,131330,131331],{"class":74,"line":1608},[72,131332,1994],{"class":82},[72,131334,131335,131338],{"class":74,"line":1623},[72,131336,131337],{"class":358},".right",[72,131339,15998],{"class":82},[72,131341,131342,131344,131346,131348],{"class":74,"line":1629},[72,131343,131322],{"class":362},[72,131345,51855],{"class":82},[72,131347,72940],{"class":362},[72,131349,1719],{"class":82},[72,131351,131352],{"class":74,"line":1643},[72,131353,1994],{"class":82},[154,131355,131356,131364],{},[157,131357,131358],{},[160,131359,131360,131362],{},[163,131361,127306],{"align":165},[163,131363,27911],{"align":165},[174,131365,131366,131373,131380],{},[160,131367,131368,131370],{},[179,131369,165],{"align":165},[179,131371,131372],{"align":165},"不允许左侧有浮动元素（清除左侧浮动的影响）",[160,131374,131375,131377],{},[179,131376,72940],{"align":165},[179,131378,131379],{"align":165},"不允许右侧有浮动元素（清除右侧浮动的影响）",[160,131381,131382,131385],{},[179,131383,131384],{"align":165},"both",[179,131386,131387],{"align":165},"同时清除左右侧浮动的影响",[15,131389,131390],{},"法一",[15,131392,131393],{},"额外标签法也称为隔墙法",[15,131395,131396],{},"使用方式：",[15,131398,131399],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[63,131401,131402],{"className":126842,"code":131308,"language":126844,"meta":68,"style":68},[34,131403,131404,131410,131420,131424,131430,131440],{"__ignoreMap":68},[72,131405,131406,131408],{"class":74,"line":75},[72,131407,131315],{"class":358},[72,131409,15998],{"class":82},[72,131411,131412,131414,131416,131418],{"class":74,"line":370},[72,131413,131322],{"class":362},[72,131415,51855],{"class":82},[72,131417,165],{"class":362},[72,131419,1719],{"class":82},[72,131421,131422],{"class":74,"line":1608},[72,131423,1994],{"class":82},[72,131425,131426,131428],{"class":74,"line":1623},[72,131427,131337],{"class":358},[72,131429,15998],{"class":82},[72,131431,131432,131434,131436,131438],{"class":74,"line":1629},[72,131433,131322],{"class":362},[72,131435,51855],{"class":82},[72,131437,72940],{"class":362},[72,131439,1719],{"class":82},[72,131441,131442],{"class":74,"line":1643},[72,131443,1994],{"class":82},[15,131445,131446],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[15,131448,131449],{},"优点： 通俗易懂，书写方便",[15,131451,131452],{},"缺点： 添加许多无意义的标签，结构化较差",[15,131454,131455],{},"注意： 要求这个新的空标签必须是块级元素。",[15,131457,131458],{},"法二",[15,131460,131461],{},"父级添加overflow属性",[63,131463,131464],{"className":126842,"code":131308,"language":126844,"meta":68,"style":68},[34,131465,131466,131472,131482,131486,131492,131502],{"__ignoreMap":68},[72,131467,131468,131470],{"class":74,"line":75},[72,131469,131315],{"class":358},[72,131471,15998],{"class":82},[72,131473,131474,131476,131478,131480],{"class":74,"line":370},[72,131475,131322],{"class":362},[72,131477,51855],{"class":82},[72,131479,165],{"class":362},[72,131481,1719],{"class":82},[72,131483,131484],{"class":74,"line":1608},[72,131485,1994],{"class":82},[72,131487,131488,131490],{"class":74,"line":1623},[72,131489,131337],{"class":358},[72,131491,15998],{"class":82},[72,131493,131494,131496,131498,131500],{"class":74,"line":1629},[72,131495,131322],{"class":362},[72,131497,51855],{"class":82},[72,131499,72940],{"class":362},[72,131501,1719],{"class":82},[72,131503,131504],{"class":74,"line":1643},[72,131505,1994],{"class":82},[15,131507,131508],{},"overflow: hidden;",[15,131510,131511],{},"优点：代码简洁",[15,131513,131514],{},"缺点：无法显示溢出的部分",[15,131516,131517],{},"注意：是给父元素添加代码",[15,131519,131520],{},"法三",[15,131522,131523],{},"父级添加after伪元素",[15,131525,131526,131529],{},[131527,131528],"after",{}," 方式是额外标签法的升级版",[15,131531,131532],{},"使用的时候复制就可以",[63,131534,131535],{"className":126842,"code":131308,"language":126844,"meta":68,"style":68},[34,131536,131537,131543,131553,131557,131563,131573],{"__ignoreMap":68},[72,131538,131539,131541],{"class":74,"line":75},[72,131540,131315],{"class":358},[72,131542,15998],{"class":82},[72,131544,131545,131547,131549,131551],{"class":74,"line":370},[72,131546,131322],{"class":362},[72,131548,51855],{"class":82},[72,131550,165],{"class":362},[72,131552,1719],{"class":82},[72,131554,131555],{"class":74,"line":1608},[72,131556,1994],{"class":82},[72,131558,131559,131561],{"class":74,"line":1623},[72,131560,131337],{"class":358},[72,131562,15998],{"class":82},[72,131564,131565,131567,131569,131571],{"class":74,"line":1629},[72,131566,131322],{"class":362},[72,131568,51855],{"class":82},[72,131570,72940],{"class":362},[72,131572,1719],{"class":82},[72,131574,131575],{"class":74,"line":1643},[72,131576,1994],{"class":82},[15,131578,131579],{},"优点：没有增加标签，结构更简单",[15,131581,131582],{},"缺点：照顾低版本浏览器",[15,131584,131585],{},"代表网站： 百度、淘宝网、网易等",[15,131587,131588],{},"法四",[15,131590,131591],{},"父级添加双伪元素",[63,131593,131594],{"className":126842,"code":131308,"language":126844,"meta":68,"style":68},[34,131595,131596,131602,131612,131616,131622,131632],{"__ignoreMap":68},[72,131597,131598,131600],{"class":74,"line":75},[72,131599,131315],{"class":358},[72,131601,15998],{"class":82},[72,131603,131604,131606,131608,131610],{"class":74,"line":370},[72,131605,131322],{"class":362},[72,131607,51855],{"class":82},[72,131609,165],{"class":362},[72,131611,1719],{"class":82},[72,131613,131614],{"class":74,"line":1608},[72,131615,1994],{"class":82},[72,131617,131618,131620],{"class":74,"line":1623},[72,131619,131337],{"class":358},[72,131621,15998],{"class":82},[72,131623,131624,131626,131628,131630],{"class":74,"line":1629},[72,131625,131322],{"class":362},[72,131627,51855],{"class":82},[72,131629,72940],{"class":362},[72,131631,1719],{"class":82},[72,131633,131634],{"class":74,"line":1643},[72,131635,1994],{"class":82},[15,131637,131638],{},"优点：代码更简洁",[15,131640,131582],{},[15,131642,131643],{},"代表网站：小米、腾讯等",[85,131645,131647],{"id":131646},"_93-ps切图","9.3 PS切图",[531,131649,131651],{"id":131650},"_931-常见图片格式","9.3.1 常见图片格式",[154,131653,131654,131664],{},[157,131655,131656],{},[160,131657,131658,131661],{},[163,131659,131660],{"align":165},"jpg图像格式",[163,131662,131663],{"align":165},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[174,131665,131666,131674,131682],{},[160,131667,131668,131671],{},[179,131669,131670],{"align":165},"gif图像格式",[179,131672,131673],{"align":165},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[160,131675,131676,131679],{},[179,131677,131678],{"align":165},"png图像格式",[179,131680,131681],{"align":165},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[160,131683,131684,131687],{},[179,131685,131686],{"align":165},"PSD图像格式",[179,131688,131689],{"align":165},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[531,131691,131693],{"id":131692},"_932-图层切图","9.3.2 图层切图",[15,131695,131696],{},"最简单的切图方式：右击图层 → 导出 → 切片",[15,131698,131699],{},"按住shift选中两个图层->图层菜单->合并图层",[531,131701,131703],{"id":131702},"_933-切片切图","9.3.3 切片切图",[251,131705,131706,131709],{},[25,131707,131708],{},"利用切片工具手动划出",[25,131710,131711],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[531,131713,131715],{"id":131714},"_934-切图步骤","9.3.4 切图步骤",[15,131717,131718],{},"用切片工具选中：",[1891,131720],{"style":126698,"src":131721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[15,131723,131724],{},"文件 -> 导出",[1891,131726],{"style":126698,"src":131727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[473,131729,131730],{},"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":68,"searchDepth":370,"depth":370,"links":131732},[131733,131742,131746],{"id":130169,"depth":370,"text":130170,"children":131734},[131735,131736,131737,131738,131739,131740,131741],{"id":130194,"depth":1608,"text":130195},{"id":130485,"depth":1608,"text":130486},{"id":130614,"depth":1608,"text":130615},{"id":130814,"depth":1608,"text":130815},{"id":130856,"depth":1608,"text":130857},{"id":130894,"depth":1608,"text":130895},{"id":130984,"depth":1608,"text":130985},{"id":131264,"depth":370,"text":131265,"children":131743},[131744,131745],{"id":131268,"depth":1608,"text":131269},{"id":131275,"depth":1608,"text":131276},{"id":131646,"depth":370,"text":131647,"children":131747},[131748,131749,131750,131751],{"id":131650,"depth":1608,"text":131651},{"id":131692,"depth":1608,"text":131693},{"id":131702,"depth":1608,"text":131703},{"id":131714,"depth":1608,"text":131715},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":130161,"description":23802},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131758,"title":131759,"body":131760,"description":23802,"extension":487,"meta":132401,"navigation":490,"path":132402,"seo":132403,"stem":132404,"__hash__":132405},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131761,"toc":132389},[131762,131765,131769,131795,131829,131833,131837,131840,131882,131889,131899,131907,131909,131912,131915,131918,131925,131939,131943,131946,131975,131979,131982,131996,132000,132003,132031,132035,132038,132064,132068,132073,132106,132111,132139,132143,132160,132206,132211,132255,132272,132379,132387],[10,131763,131759],{"id":131764},"_10-css规范与学成在线案例",[85,131766,131768],{"id":131767},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[22,131770,131771,131777,131783,131789],{},[25,131772,131773,131776],{},[707,131774,131775],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[25,131778,131779,131782],{},[707,131780,131781],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[25,131784,131785,131788],{},[707,131786,131787],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[25,131790,131791,131794],{},[707,131792,131793],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[63,131796,131797],{"className":126842,"code":130206,"language":126844,"meta":68,"style":68},[34,131798,131799,131803,131809,131825],{"__ignoreMap":68},[72,131800,131801],{"class":74,"line":75},[72,131802,130213],{"class":621},[72,131804,131805,131807],{"class":74,"line":370},[72,131806,52029],{"class":51718},[72,131808,15998],{"class":82},[72,131810,131811,131813,131815,131817,131819,131821,131823],{"class":74,"line":1608},[72,131812,71314],{"class":362},[72,131814,51855],{"class":82},[72,131816,772],{"class":362},[72,131818,51910],{"class":78},[72,131820,51939],{"class":362},[72,131822,130234],{"class":362},[72,131824,1719],{"class":82},[72,131826,131827],{"class":74,"line":1623},[72,131828,1994],{"class":82},[85,131830,131832],{"id":131831},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[531,131834,131836],{"id":131835},"_1021-header头部制作","10.2.1 header头部制作",[1891,131838],{"style":126698,"src":131839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[251,131841,131842,131849,131856,131862,131869,131876],{},[25,131843,131844,131845,131848],{},"1号是版心盒子 ",[707,131846,131847],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[25,131850,131851,131852,131855],{},"版心盒子 里面包含 2号盒子 ",[707,131853,131854],{},"logo"," 图标",[25,131857,131858,131859,131861],{},"版心盒子 里面包含 3号盒子 ",[707,131860,54131],{}," 导航栏",[25,131863,131864,131865,131868],{},"版心盒子 里面包含 4号盒子 ",[707,131866,131867],{},"search"," 搜索框",[25,131870,131871,131872,131875],{},"版心盒子 里面包含 5号盒子 ",[707,131873,131874],{},"user"," 个人信息",[25,131877,131878,131879],{},"注意，要求里面的 ",[707,131880,131881],{},"4个子盒子 必须都浮动",[22,131883,131884],{},[25,131885,131886],{},[707,131887,131888],{},"导航栏注意点:",[15,131890,131891,131892,131895,131896],{},"实际开发中， ",[707,131893,131894],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[707,131897,131898],{},"用 li 包含链接(li+a)的做法",[251,131900,131901,131904],{},[25,131902,131903],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[25,131905,131906],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[15,131908,9451],{},[15,131910,131911],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[15,131913,131914],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[15,131916,131917],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[22,131919,131920],{"start":370},[25,131921,131922],{},[707,131923,131924],{},"4号盒子search的细节：",[251,131926,131927,131930,131933],{},[25,131928,131929],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[25,131931,131932],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[25,131934,131935,131938],{},[34,131936,131937],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[531,131940,131942],{"id":131941},"_1022-banner制作","10.2.2 banner制作",[1891,131944],{"style":126698,"src":131945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[251,131947,131948,131955,131961,131968],{},[25,131949,131950,131951,131954],{},"1号盒子是通栏的大盒子 ",[707,131952,131953],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[25,131956,131957,131958,131960],{},"2号盒子是版心 ",[707,131959,1349],{}," ， 要水平居中对齐",[25,131962,131963,131964,131967],{},"3号盒子版心内，左对齐 ",[707,131965,131966],{},"subnav"," 侧导航栏",[25,131969,131970,131971,131974],{},"4号盒子版心内，右对齐 ",[707,131972,131973],{},"course"," 课程",[531,131976,131978],{"id":131977},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[1891,131980],{"style":126698,"src":131981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[251,131983,131984,131987,131990,131993],{},[25,131985,131986],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[25,131988,131989],{},"1号盒子是标题 H3 左侧浮动",[25,131991,131992],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[25,131994,131995],{},"3号盒子 右浮动 mod 修改",[531,131997,131999],{"id":131998},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[1891,132001],{"style":126698,"src":132002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[251,132004,132005,132011,132018,132025,132028],{},[25,132006,132007,132008,132010],{},"1号盒子为最大的盒子 ",[707,132009,54132],{}," 版心水平居中对齐",[25,132012,132013,132014,132017],{},"2号盒子为上面部分 ",[707,132015,132016],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[25,132019,132020,132021,132024],{},"3号盒子为底下部分 ",[707,132022,132023],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[25,132026,132027],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[25,132029,132030],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[531,132032,132034],{"id":132033},"_1025-底部模块制作","10.2.5 底部模块制作",[1891,132036],{"style":126698,"src":132037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[251,132039,132040,132047,132050,132057],{},[25,132041,132042,132043,132046],{},"1号盒子通栏大盒子 底部 ",[707,132044,132045],{},"footer"," 给高度 底色是白色",[25,132048,132049],{},"2号盒子版心水平居中",[25,132051,132052,132053,132056],{},"3号盒子版权 ",[707,132054,132055],{},"copyright"," 左对齐",[25,132058,132059,132060,132063],{},"4号盒子 链接组 ",[707,132061,132062],{},"links"," 右对齐",[531,132065,132067],{"id":132066},"_1026-代码模块","10.2.6 代码模块",[22,132069,132070],{},[25,132071,132072],{},"html部分",[63,132074,132076],{"className":127589,"code":132075,"language":127591,"meta":68,"style":68},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[34,132077,132078],{"__ignoreMap":68},[72,132079,132080,132082,132084,132086,132088,132091,132094,132096,132099,132102,132104],{"class":74,"line":75},[72,132081,1464],{"class":82},[72,132083,257],{"class":51718},[72,132085,61475],{"class":358},[72,132087,609],{"class":82},[72,132089,132090],{"class":366},"\"https:\u002F\u002Fexample.com\"",[72,132092,132093],{"class":358}," target",[72,132095,609],{"class":82},[72,132097,132098],{"class":366},"\"_blank\"",[72,132100,132101],{"class":82},">链接文字\u003C\u002F",[72,132103,257],{"class":51718},[72,132105,51725],{"class":82},[22,132107,132108],{"start":370},[25,132109,132110],{},"css部分",[63,132112,132113],{"className":127589,"code":132075,"language":127591,"meta":68,"style":68},[34,132114,132115],{"__ignoreMap":68},[72,132116,132117,132119,132121,132123,132125,132127,132129,132131,132133,132135,132137],{"class":74,"line":75},[72,132118,1464],{"class":82},[72,132120,257],{"class":51718},[72,132122,61475],{"class":358},[72,132124,609],{"class":82},[72,132126,132090],{"class":366},[72,132128,132093],{"class":358},[72,132130,609],{"class":82},[72,132132,132098],{"class":366},[72,132134,132101],{"class":82},[72,132136,257],{"class":51718},[72,132138,51725],{"class":82},[531,132140,132142],{"id":132141},"_1027-收获","10.2.7 收获",[22,132144,132145,132148,132151,132154,132157],{},[25,132146,132147],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[25,132149,132150],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[25,132152,132153],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[25,132155,132156],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[25,132158,132159],{},"遗忘代码",[63,132161,132163],{"className":126842,"code":132162,"language":126844,"meta":68,"style":68},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[34,132164,132165,132187,132192,132202],{"__ignoreMap":68},[72,132166,132167,132169,132171,132173,132175,132177,132179,132181,132183,132185],{"class":74,"line":75},[72,132168,52029],{"class":51718},[72,132170,12861],{"class":82},[72,132172,15],{"class":51718},[72,132174,12861],{"class":82},[72,132176,10],{"class":51718},[72,132178,12861],{"class":82},[72,132180,251],{"class":51718},[72,132182,12861],{"class":82},[72,132184,25],{"class":51718},[72,132186,15998],{"class":82},[72,132188,132189],{"class":74,"line":370},[72,132190,132191],{"class":621},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[72,132193,132194,132196,132198,132200],{"class":74,"line":1608},[72,132195,128458],{"class":362},[72,132197,51855],{"class":82},[72,132199,61287],{"class":362},[72,132201,1719],{"class":82},[72,132203,132204],{"class":74,"line":1623},[72,132205,1994],{"class":82},[22,132207,132208],{"start":1643},[25,132209,132210],{},"html引css的程序",[63,132212,132213],{"className":126842,"code":132162,"language":126844,"meta":68,"style":68},[34,132214,132215,132237,132241,132251],{"__ignoreMap":68},[72,132216,132217,132219,132221,132223,132225,132227,132229,132231,132233,132235],{"class":74,"line":75},[72,132218,52029],{"class":51718},[72,132220,12861],{"class":82},[72,132222,15],{"class":51718},[72,132224,12861],{"class":82},[72,132226,10],{"class":51718},[72,132228,12861],{"class":82},[72,132230,251],{"class":51718},[72,132232,12861],{"class":82},[72,132234,25],{"class":51718},[72,132236,15998],{"class":82},[72,132238,132239],{"class":74,"line":370},[72,132240,132191],{"class":621},[72,132242,132243,132245,132247,132249],{"class":74,"line":1608},[72,132244,128458],{"class":362},[72,132246,51855],{"class":82},[72,132248,61287],{"class":362},[72,132250,1719],{"class":82},[72,132252,132253],{"class":74,"line":1623},[72,132254,1994],{"class":82},[22,132256,132257,132260,132263,132266,132269],{"start":1649},[25,132258,132259],{},"浮动的盒子不会有外边距合并问题",[25,132261,132262],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[25,132264,132265],{},"ctrl+g快速定位行；shift+alt多个光标",[25,132267,132268],{},"学习上方各个模块的选择器起名方法，以后就这样用",[25,132270,132271],{},"在写选择器时尽量写全一些，例如",[63,132273,132275],{"className":126842,"code":132274,"language":126844,"meta":68,"style":68},"\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",[34,132276,132277,132282,132298,132303,132318,132323,132338,132343,132358,132363],{"__ignoreMap":68},[72,132278,132279],{"class":74,"line":75},[72,132280,132281],{"class":621},"\u002F* 静态定位（默认） *\u002F\n",[72,132283,132284,132287,132289,132291,132293,132296],{"class":74,"line":370},[72,132285,132286],{"class":358},".static",[72,132288,80225],{"class":82},[72,132290,129202],{"class":362},[72,132292,51855],{"class":82},[72,132294,132295],{"class":362},"static",[72,132297,129772],{"class":82},[72,132299,132300],{"class":74,"line":1608},[72,132301,132302],{"class":621},"\u002F* 相对定位 *\u002F\n",[72,132304,132305,132308,132310,132312,132314,132316],{"class":74,"line":1623},[72,132306,132307],{"class":358},".relative",[72,132309,80225],{"class":82},[72,132311,129202],{"class":362},[72,132313,51855],{"class":82},[72,132315,55182],{"class":362},[72,132317,129772],{"class":82},[72,132319,132320],{"class":74,"line":1629},[72,132321,132322],{"class":621},"\u002F* 绝对定位 *\u002F\n",[72,132324,132325,132328,132330,132332,132334,132336],{"class":74,"line":1643},[72,132326,132327],{"class":358},".absolute",[72,132329,80225],{"class":82},[72,132331,129202],{"class":362},[72,132333,51855],{"class":82},[72,132335,55249],{"class":362},[72,132337,129772],{"class":82},[72,132339,132340],{"class":74,"line":1649},[72,132341,132342],{"class":621},"\u002F* 固定定位 *\u002F\n",[72,132344,132345,132348,132350,132352,132354,132356],{"class":74,"line":1740},[72,132346,132347],{"class":358},".fixed",[72,132349,80225],{"class":82},[72,132351,129202],{"class":362},[72,132353,51855],{"class":82},[72,132355,86650],{"class":362},[72,132357,129772],{"class":82},[72,132359,132360],{"class":74,"line":1746},[72,132361,132362],{"class":621},"\u002F* 粘性定位 *\u002F\n",[72,132364,132365,132368,132370,132372,132374,132377],{"class":74,"line":1758},[72,132366,132367],{"class":358},".sticky",[72,132369,80225],{"class":82},[72,132371,129202],{"class":362},[72,132373,51855],{"class":82},[72,132375,132376],{"class":362},"sticky",[72,132378,129772],{"class":82},[22,132380,132381,132384],{"start":2046},[25,132382,132383],{},"一定要用好注释",[25,132385,132386],{},"浮动的盒子不会有外边距合并的问题",[473,132388,131730],{},{"title":68,"searchDepth":370,"depth":370,"links":132390},[132391,132392],{"id":131767,"depth":370,"text":131768},{"id":131831,"depth":370,"text":131832,"children":132393},[132394,132395,132396,132397,132398,132399,132400],{"id":131835,"depth":1608,"text":131836},{"id":131941,"depth":1608,"text":131942},{"id":131977,"depth":1608,"text":131978},{"id":131998,"depth":1608,"text":131999},{"id":132033,"depth":1608,"text":132034},{"id":132066,"depth":1608,"text":132067},{"id":132141,"depth":1608,"text":132142},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131759,"description":23802},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132407,"title":132408,"body":132409,"description":23802,"extension":487,"meta":133895,"navigation":490,"path":133896,"seo":133897,"stem":133898,"__hash__":133899},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132410,"toc":133887},[132411,132414,132418,132422,132433,132437,132454,132498,132531,132534,132551,132554,132557,132601,132605,132609,132612,132615,132619,132622,132633,132696,132737,132740,132755,132809,132817,132820,132831,132885,132911,132914,132927,132981,133013,133067,133090,133144,133147,133150,133157,133211,133232,133286,133289,133292,133377,133385,133442,133465,133469,133472,133490,133494,133513,133567,133605,133609,133612,133615,133637,133641,133649,133652,133657,133668,133671,133675,133689,133733,133736,133740,133743,133748,133774,133779,133856,133859,133863,133866,133869,133872,133875,133878,133881,133884],[10,132412,132408],{"id":132413},"_11-传统布局与定位体系",[85,132415,132417],{"id":132416},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[531,132419,132421],{"id":132420},"_1111-普通流标准流","11.1.1 普通流（标准流）",[251,132423,132424,132427,132430],{},[25,132425,132426],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[25,132428,132429],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[25,132431,132432],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[531,132434,132436],{"id":132435},"_1112-浮动","11.1.2 浮动",[251,132438,132439,132442,132445,132448,132451],{},[25,132440,132441],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[25,132443,132444],{},"浮动可以改变元素标签默认的排列方式",[25,132446,132447],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[25,132449,132450],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[25,132452,132453],{},"在使用行内块转换时盒子之间是有空隙的",[63,132455,132456],{"className":126842,"code":131308,"language":126844,"meta":68,"style":68},[34,132457,132458,132464,132474,132478,132484,132494],{"__ignoreMap":68},[72,132459,132460,132462],{"class":74,"line":75},[72,132461,131315],{"class":358},[72,132463,15998],{"class":82},[72,132465,132466,132468,132470,132472],{"class":74,"line":370},[72,132467,131322],{"class":362},[72,132469,51855],{"class":82},[72,132471,165],{"class":362},[72,132473,1719],{"class":82},[72,132475,132476],{"class":74,"line":1608},[72,132477,1994],{"class":82},[72,132479,132480,132482],{"class":74,"line":1623},[72,132481,131337],{"class":358},[72,132483,15998],{"class":82},[72,132485,132486,132488,132490,132492],{"class":74,"line":1629},[72,132487,131322],{"class":362},[72,132489,51855],{"class":82},[72,132491,72940],{"class":362},[72,132493,1719],{"class":82},[72,132495,132496],{"class":74,"line":1643},[72,132497,1994],{"class":82},[154,132499,132500,132508],{},[157,132501,132502],{},[160,132503,132504,132506],{},[163,132505,127306],{"align":165},[163,132507,27911],{"align":165},[174,132509,132510,132517,132524],{},[160,132511,132512,132514],{},[179,132513,55155],{"align":165},[179,132515,132516],{"align":165},"元素不浮动（默认值）",[160,132518,132519,132521],{},[179,132520,165],{"align":165},[179,132522,132523],{"align":165},"元素向左浮动",[160,132525,132526,132528],{},[179,132527,72940],{"align":165},[179,132529,132530],{"align":165},"元素向右浮动",[15,132532,132533],{},"浮动重点：",[251,132535,132536,132539,132542,132545,132548],{},[25,132537,132538],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[25,132540,132541],{},"浮动的元素会一行内显示并且元素顶部对齐",[25,132543,132544],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[25,132546,132547],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[25,132549,132550],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[15,132552,132553],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[15,132555,132556],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[63,132558,132559],{"className":126842,"code":131308,"language":126844,"meta":68,"style":68},[34,132560,132561,132567,132577,132581,132587,132597],{"__ignoreMap":68},[72,132562,132563,132565],{"class":74,"line":75},[72,132564,131315],{"class":358},[72,132566,15998],{"class":82},[72,132568,132569,132571,132573,132575],{"class":74,"line":370},[72,132570,131322],{"class":362},[72,132572,51855],{"class":82},[72,132574,165],{"class":362},[72,132576,1719],{"class":82},[72,132578,132579],{"class":74,"line":1608},[72,132580,1994],{"class":82},[72,132582,132583,132585],{"class":74,"line":1623},[72,132584,131337],{"class":358},[72,132586,15998],{"class":82},[72,132588,132589,132591,132593,132595],{"class":74,"line":1629},[72,132590,131322],{"class":362},[72,132592,51855],{"class":82},[72,132594,72940],{"class":362},[72,132596,1719],{"class":82},[72,132598,132599],{"class":74,"line":1643},[72,132600,1994],{"class":82},[531,132602,132604],{"id":132603},"_1113-定位","11.1.3 定位",[22423,132606,132608],{"id":132607},"_11131-使用场景","11.1.3.1 使用场景",[15,132610,132611],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[15,132613,132614],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[22423,132616,132618],{"id":132617},"_11132-定位组成","11.1.3.2 定位组成",[15,132620,132621],{},"定位 = 定位模式 + 边偏移",[22,132623,132624],{},[25,132625,132626,132629,132630],{},[707,132627,132628],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[707,132631,132632],{},"定位模式",[63,132634,132636],{"className":126842,"code":132635,"language":126844,"meta":68,"style":68},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[34,132637,132638,132644,132658,132675,132692],{"__ignoreMap":68},[72,132639,132640,132642],{"class":74,"line":75},[72,132641,130690],{"class":358},[72,132643,15998],{"class":82},[72,132645,132646,132649,132651,132653,132655],{"class":74,"line":370},[72,132647,132648],{"class":362},"  position",[72,132650,51855],{"class":82},[72,132652,55182],{"class":362},[72,132654,130705],{"class":82},[72,132656,132657],{"class":621},"\u002F* 定位模式 *\u002F\n",[72,132659,132660,132663,132665,132667,132669,132672],{"class":74,"line":1608},[72,132661,132662],{"class":362},"  top",[72,132664,51855],{"class":82},[72,132666,1000],{"class":362},[72,132668,51910],{"class":78},[72,132670,132671],{"class":82},";           ",[72,132673,132674],{"class":621},"\u002F* 边偏移：上 *\u002F\n",[72,132676,132677,132680,132682,132684,132686,132689],{"class":74,"line":1623},[72,132678,132679],{"class":362},"  left",[72,132681,51855],{"class":82},[72,132683,1254],{"class":362},[72,132685,51910],{"class":78},[72,132687,132688],{"class":82},";          ",[72,132690,132691],{"class":621},"\u002F* 边偏移：左 *\u002F\n",[72,132693,132694],{"class":74,"line":1629},[72,132695,1994],{"class":82},[154,132697,132698,132707],{},[157,132699,132700],{},[160,132701,132702,132704],{},[163,132703,710],{"align":165},[163,132705,132706],{"align":165},"语义",[174,132708,132709,132716,132723,132730],{},[160,132710,132711,132713],{},[179,132712,132295],{"align":165},[179,132714,132715],{"align":165},"静态定位",[160,132717,132718,132720],{},[179,132719,55182],{"align":165},[179,132721,132722],{"align":165},"相对定位",[160,132724,132725,132727],{},[179,132726,55249],{"align":165},[179,132728,132729],{"align":165},"绝对定位",[160,132731,132732,132734],{},[179,132733,86650],{"align":165},[179,132735,132736],{"align":165},"固定定位",[15,132738,132739],{},"（1）静态定位：",[251,132741,132742,132753],{},[25,132743,132744,132745,132748,132749,132752],{},"静态定位是元素的 ",[707,132746,132747],{},"默认定位方式"," ， ",[707,132750,132751],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[25,132754,5609],{},[63,132756,132757],{"className":126842,"code":132635,"language":126844,"meta":68,"style":68},[34,132758,132759,132765,132777,132791,132805],{"__ignoreMap":68},[72,132760,132761,132763],{"class":74,"line":75},[72,132762,130690],{"class":358},[72,132764,15998],{"class":82},[72,132766,132767,132769,132771,132773,132775],{"class":74,"line":370},[72,132768,132648],{"class":362},[72,132770,51855],{"class":82},[72,132772,55182],{"class":362},[72,132774,130705],{"class":82},[72,132776,132657],{"class":621},[72,132778,132779,132781,132783,132785,132787,132789],{"class":74,"line":1608},[72,132780,132662],{"class":362},[72,132782,51855],{"class":82},[72,132784,1000],{"class":362},[72,132786,51910],{"class":78},[72,132788,132671],{"class":82},[72,132790,132674],{"class":621},[72,132792,132793,132795,132797,132799,132801,132803],{"class":74,"line":1623},[72,132794,132679],{"class":362},[72,132796,51855],{"class":82},[72,132798,1254],{"class":362},[72,132800,51910],{"class":78},[72,132802,132688],{"class":82},[72,132804,132691],{"class":621},[72,132806,132807],{"class":74,"line":1629},[72,132808,1994],{"class":82},[251,132810,132811,132814],{},[25,132812,132813],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[25,132815,132816],{},"静态定位在布局时我们几乎不用的",[15,132818,132819],{},"（2）相对定位",[251,132821,132822,132829],{},[25,132823,132824,132825,132828],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[707,132826,132827],{},"原来的位置"," 来说的（自恋型）",[25,132830,5609],{},[63,132832,132833],{"className":126842,"code":132635,"language":126844,"meta":68,"style":68},[34,132834,132835,132841,132853,132867,132881],{"__ignoreMap":68},[72,132836,132837,132839],{"class":74,"line":75},[72,132838,130690],{"class":358},[72,132840,15998],{"class":82},[72,132842,132843,132845,132847,132849,132851],{"class":74,"line":370},[72,132844,132648],{"class":362},[72,132846,51855],{"class":82},[72,132848,55182],{"class":362},[72,132850,130705],{"class":82},[72,132852,132657],{"class":621},[72,132854,132855,132857,132859,132861,132863,132865],{"class":74,"line":1608},[72,132856,132662],{"class":362},[72,132858,51855],{"class":82},[72,132860,1000],{"class":362},[72,132862,51910],{"class":78},[72,132864,132671],{"class":82},[72,132866,132674],{"class":621},[72,132868,132869,132871,132873,132875,132877,132879],{"class":74,"line":1623},[72,132870,132679],{"class":362},[72,132872,51855],{"class":82},[72,132874,1254],{"class":362},[72,132876,51910],{"class":78},[72,132878,132688],{"class":82},[72,132880,132691],{"class":621},[72,132882,132883],{"class":74,"line":1629},[72,132884,1994],{"class":82},[251,132886,132887],{},[25,132888,132889,132890,132892,132893,132895,132896,132899,132900,132903,132904,132906,132907,132910],{},"相对定位的特点：",[54134,132891],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[54134,132894],{},"  ② ",[707,132897,132898],{},"原来"," 在标准流的 ",[707,132901,132902],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[54134,132905],{},"  ③因此， ",[707,132908,132909],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[15,132912,132913],{},"（3）绝对定位",[251,132915,132916,132925],{},[25,132917,132918,132920,132921,132924],{},[707,132919,132729],{}," 是元素在移动位置的时候，是相对于它 ",[707,132922,132923],{},"祖先元素"," 来说的（拼爹型）",[25,132926,5609],{},[63,132928,132929],{"className":126842,"code":132635,"language":126844,"meta":68,"style":68},[34,132930,132931,132937,132949,132963,132977],{"__ignoreMap":68},[72,132932,132933,132935],{"class":74,"line":75},[72,132934,130690],{"class":358},[72,132936,15998],{"class":82},[72,132938,132939,132941,132943,132945,132947],{"class":74,"line":370},[72,132940,132648],{"class":362},[72,132942,51855],{"class":82},[72,132944,55182],{"class":362},[72,132946,130705],{"class":82},[72,132948,132657],{"class":621},[72,132950,132951,132953,132955,132957,132959,132961],{"class":74,"line":1608},[72,132952,132662],{"class":362},[72,132954,51855],{"class":82},[72,132956,1000],{"class":362},[72,132958,51910],{"class":78},[72,132960,132671],{"class":82},[72,132962,132674],{"class":621},[72,132964,132965,132967,132969,132971,132973,132975],{"class":74,"line":1623},[72,132966,132679],{"class":362},[72,132968,51855],{"class":82},[72,132970,1254],{"class":362},[72,132972,51910],{"class":78},[72,132974,132688],{"class":82},[72,132976,132691],{"class":621},[72,132978,132979],{"class":74,"line":1629},[72,132980,1994],{"class":82},[251,132982,132983,132998,133007,133010],{},[25,132984,132985,132986,132988,132989,132991,132992,132994,132995,132997],{},"绝对定位的特点：",[54134,132987],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[54134,132990],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[54134,132993],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[54134,132996],{},"  (4)固定定位",[25,132999,133000,133002,133003,133006],{},[707,133001,132736],{}," 是元素 ",[707,133004,133005],{},"固定于浏览器可视区的位置"," 。（认死理型）",[25,133008,133009],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[25,133011,133012],{},"语法:",[63,133014,133015],{"className":126842,"code":132635,"language":126844,"meta":68,"style":68},[34,133016,133017,133023,133035,133049,133063],{"__ignoreMap":68},[72,133018,133019,133021],{"class":74,"line":75},[72,133020,130690],{"class":358},[72,133022,15998],{"class":82},[72,133024,133025,133027,133029,133031,133033],{"class":74,"line":370},[72,133026,132648],{"class":362},[72,133028,51855],{"class":82},[72,133030,55182],{"class":362},[72,133032,130705],{"class":82},[72,133034,132657],{"class":621},[72,133036,133037,133039,133041,133043,133045,133047],{"class":74,"line":1608},[72,133038,132662],{"class":362},[72,133040,51855],{"class":82},[72,133042,1000],{"class":362},[72,133044,51910],{"class":78},[72,133046,132671],{"class":82},[72,133048,132674],{"class":621},[72,133050,133051,133053,133055,133057,133059,133061],{"class":74,"line":1623},[72,133052,132679],{"class":362},[72,133054,51855],{"class":82},[72,133056,1254],{"class":362},[72,133058,51910],{"class":78},[72,133060,132688],{"class":82},[72,133062,132691],{"class":621},[72,133064,133065],{"class":74,"line":1629},[72,133066,1994],{"class":82},[251,133068,133069,133078],{},[25,133070,133071,133072,133074,133075,133077],{},"特点:",[54134,133073],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[54134,133076],{},"  ②固定定位不再占有原先的位置,完全脱标",[25,133079,133080,133081,133083,133084,133086,133087,133089],{},"固定在版心位置的方法:",[54134,133082],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[54134,133085],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[54134,133088],{},"  实例：",[63,133091,133092],{"className":126842,"code":132635,"language":126844,"meta":68,"style":68},[34,133093,133094,133100,133112,133126,133140],{"__ignoreMap":68},[72,133095,133096,133098],{"class":74,"line":75},[72,133097,130690],{"class":358},[72,133099,15998],{"class":82},[72,133101,133102,133104,133106,133108,133110],{"class":74,"line":370},[72,133103,132648],{"class":362},[72,133105,51855],{"class":82},[72,133107,55182],{"class":362},[72,133109,130705],{"class":82},[72,133111,132657],{"class":621},[72,133113,133114,133116,133118,133120,133122,133124],{"class":74,"line":1608},[72,133115,132662],{"class":362},[72,133117,51855],{"class":82},[72,133119,1000],{"class":362},[72,133121,51910],{"class":78},[72,133123,132671],{"class":82},[72,133125,132674],{"class":621},[72,133127,133128,133130,133132,133134,133136,133138],{"class":74,"line":1623},[72,133129,132679],{"class":362},[72,133131,51855],{"class":82},[72,133133,1254],{"class":362},[72,133135,51910],{"class":78},[72,133137,132688],{"class":82},[72,133139,132691],{"class":621},[72,133141,133142],{"class":74,"line":1629},[72,133143,1994],{"class":82},[1891,133145],{"style":126698,"src":133146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[15,133148,133149],{},"(5)粘性定位",[251,133151,133152,133155],{},[25,133153,133154],{},"粘性定位可以被认为是相对定位和固定定位的混合",[25,133156,5609],{},[63,133158,133159],{"className":126842,"code":132635,"language":126844,"meta":68,"style":68},[34,133160,133161,133167,133179,133193,133207],{"__ignoreMap":68},[72,133162,133163,133165],{"class":74,"line":75},[72,133164,130690],{"class":358},[72,133166,15998],{"class":82},[72,133168,133169,133171,133173,133175,133177],{"class":74,"line":370},[72,133170,132648],{"class":362},[72,133172,51855],{"class":82},[72,133174,55182],{"class":362},[72,133176,130705],{"class":82},[72,133178,132657],{"class":621},[72,133180,133181,133183,133185,133187,133189,133191],{"class":74,"line":1608},[72,133182,132662],{"class":362},[72,133184,51855],{"class":82},[72,133186,1000],{"class":362},[72,133188,51910],{"class":78},[72,133190,132671],{"class":82},[72,133192,132674],{"class":621},[72,133194,133195,133197,133199,133201,133203,133205],{"class":74,"line":1623},[72,133196,132679],{"class":362},[72,133198,51855],{"class":82},[72,133200,1254],{"class":362},[72,133202,51910],{"class":78},[72,133204,132688],{"class":82},[72,133206,132691],{"class":621},[72,133208,133209],{"class":74,"line":1629},[72,133210,1994],{"class":82},[251,133212,133213],{},[25,133214,133215,133216,133218,133219,133221,133222,133224,133225,133228,133229,133231],{},"粘性定位的特点：",[54134,133217],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[54134,133220],{},"  ②粘性定位占有原先的位置（相对定位特点）",[54134,133223],{},"  ③必须添加 top 、left、right、bottom ",[707,133226,133227],{},"其中一个"," 才有效",[54134,133230],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[63,133233,133234],{"className":126842,"code":132635,"language":126844,"meta":68,"style":68},[34,133235,133236,133242,133254,133268,133282],{"__ignoreMap":68},[72,133237,133238,133240],{"class":74,"line":75},[72,133239,130690],{"class":358},[72,133241,15998],{"class":82},[72,133243,133244,133246,133248,133250,133252],{"class":74,"line":370},[72,133245,132648],{"class":362},[72,133247,51855],{"class":82},[72,133249,55182],{"class":362},[72,133251,130705],{"class":82},[72,133253,132657],{"class":621},[72,133255,133256,133258,133260,133262,133264,133266],{"class":74,"line":1608},[72,133257,132662],{"class":362},[72,133259,51855],{"class":82},[72,133261,1000],{"class":362},[72,133263,51910],{"class":78},[72,133265,132671],{"class":82},[72,133267,132674],{"class":621},[72,133269,133270,133272,133274,133276,133278,133280],{"class":74,"line":1623},[72,133271,132679],{"class":362},[72,133273,51855],{"class":82},[72,133275,1254],{"class":362},[72,133277,51910],{"class":78},[72,133279,132688],{"class":82},[72,133281,132691],{"class":621},[72,133283,133284],{"class":74,"line":1629},[72,133285,1994],{"class":82},[1891,133287],{"style":126698,"src":133288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[15,133290,133291],{},"(6)总结",[154,133293,133294,133309],{},[157,133295,133296],{},[160,133297,133298,133300,133303,133306],{},[163,133299,132632],{"align":165},[163,133301,133302],{"align":165},"是否脱标",[163,133304,133305],{"align":165},"移动位置",[163,133307,133308],{"align":165},"是否常用",[174,133310,133311,133324,133338,133352,133365],{},[160,133312,133313,133316,133318,133321],{},[179,133314,133315],{"align":165},"Static 静态定位",[179,133317,105079],{"align":165},[179,133319,133320],{"align":165},"不能使用边偏移",[179,133322,133323],{"align":165},"很少",[160,133325,133326,133329,133332,133335],{},[179,133327,133328],{"align":165},"Relative 相对定位",[179,133330,133331],{"align":165},"否(占有位置)",[179,133333,133334],{"align":165},"相对于自身位置移动",[179,133336,133337],{"align":165},"基本单独使用",[160,133339,133340,133343,133346,133349],{},[179,133341,133342],{"align":165},"Absolute 绝对定位",[179,133344,133345],{"align":165},"是(不占有位置)",[179,133347,133348],{"align":165},"带有定位的父级",[179,133350,133351],{"align":165},"要和定位父级元素搭配使用",[160,133353,133354,133357,133359,133362],{},[179,133355,133356],{"align":165},"Fixed 固定定位",[179,133358,133345],{"align":165},[179,133360,133361],{"align":165},"浏览器可视区",[179,133363,133364],{"align":165},"单独使用,不需要父级",[160,133366,133367,133370,133372,133374],{},[179,133368,133369],{"align":165},"Sticky 粘性定位",[179,133371,133331],{"align":165},[179,133373,133361],{"align":165},[179,133375,133376],{"align":165},"当前阶段少",[22,133378,133379],{"start":370},[25,133380,133381,133384],{},[707,133382,133383],{},"边偏移"," 则决定了该元素的最终位置",[154,133386,133387,133398],{},[157,133388,133389],{},[160,133390,133391,133394,133396],{},[163,133392,133393],{"align":165},"边偏移属性",[163,133395,27914],{"align":165},[163,133397,27911],{"align":165},[174,133399,133400,133411,133422,133432],{},[160,133401,133402,133405,133408],{},[179,133403,133404],{"align":165},"top",[179,133406,133407],{"align":165},"top: 80px;",[179,133409,133410],{"align":165},"顶端偏移量，定义元素相对于父元素上边线的距离",[160,133412,133413,133416,133419],{},[179,133414,133415],{"align":165},"bottom",[179,133417,133418],{"align":165},"bottom: 80px ;",[179,133420,133421],{"align":165},"底部偏移量，定义元素相对于其父元素下边线的距离",[160,133423,133424,133426,133429],{},[179,133425,165],{"align":165},[179,133427,133428],{"align":165},"left: 80px ;",[179,133430,133431],{"align":165},"左侧偏移量，定义元素相对于其父元素左边线的距离",[160,133433,133434,133436,133439],{},[179,133435,72940],{"align":165},[179,133437,133438],{"align":165},"right: 80px ;",[179,133440,133441],{"align":165},"右侧偏移量，定义元素相对于其父元素右边线的距离",[251,133443,133444],{},[25,133445,9451,133446,133448,133449,133451,133452,133454,133455,133458,133459,133461,133462,133464],{},[54134,133447],{},"  ① ",[707,133450,133383],{}," 需要和 ",[707,133453,132632],{}," 联合使用， ",[707,133456,133457],{},"单独使用无效"," ；",[54134,133460],{},"  ②top和bottom不要同时使用",[54134,133463],{},"  ③left和right不要同时使用",[22423,133466,133468],{"id":133467},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[15,133470,133471],{},"子级是绝对定位的话，父级要用相对定位",[251,133473,133474,133477,133480,133483],{},[25,133475,133476],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[25,133478,133479],{},"父盒子需要加定位限制子盒子在父盒子内显示",[25,133481,133482],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[25,133484,133485,133486,133489],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[707,133487,133488],{},"子绝父绝"," 也会遇到",[22423,133491,133493],{"id":133492},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[251,133495,133496,133511],{},[25,133497,133498,133499,133502,133503,133506,133507,133510],{},"在使用 ",[707,133500,133501],{},"定位"," 布局时，可能会 ",[707,133504,133505],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[707,133508,133509],{},"z-index"," 来控制盒子的前后次序 (z轴)",[25,133512,5609],{},[63,133514,133515],{"className":126842,"code":132635,"language":126844,"meta":68,"style":68},[34,133516,133517,133523,133535,133549,133563],{"__ignoreMap":68},[72,133518,133519,133521],{"class":74,"line":75},[72,133520,130690],{"class":358},[72,133522,15998],{"class":82},[72,133524,133525,133527,133529,133531,133533],{"class":74,"line":370},[72,133526,132648],{"class":362},[72,133528,51855],{"class":82},[72,133530,55182],{"class":362},[72,133532,130705],{"class":82},[72,133534,132657],{"class":621},[72,133536,133537,133539,133541,133543,133545,133547],{"class":74,"line":1608},[72,133538,132662],{"class":362},[72,133540,51855],{"class":82},[72,133542,1000],{"class":362},[72,133544,51910],{"class":78},[72,133546,132671],{"class":82},[72,133548,132674],{"class":621},[72,133550,133551,133553,133555,133557,133559,133561],{"class":74,"line":1623},[72,133552,132679],{"class":362},[72,133554,51855],{"class":82},[72,133556,1254],{"class":362},[72,133558,51910],{"class":78},[72,133560,132688],{"class":82},[72,133562,132691],{"class":621},[72,133564,133565],{"class":74,"line":1629},[72,133566,1994],{"class":82},[251,133568,133569],{},[25,133570,133571,133572,133448,133574,133576,133577,128005,133580,462,133583,133585,133586,133588,133589,133592,133593,133458,133596,133598,133599,133602,133604],{},"z-index的特性",[54134,133573],{},[707,133575,127306],{}," ： ",[707,133578,133579],{},"正整数",[707,133581,133582],{},"负整数",[707,133584,747],{}," ，默认值是 0，数值越大，盒子越靠上；",[54134,133587],{},"  ②如果 ",[707,133590,133591],{},"属性值相同"," ，则按照书写顺序， ",[707,133594,133595],{},"后来居上",[54134,133597],{},"  ③数字后面 ",[707,133600,133601],{},"不能加单位",[54134,133603],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[22423,133606,133608],{"id":133607},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[15,133610,133611],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[15,133613,133614],{},"方法:",[251,133616,133617,133627],{},[25,133618,133619,133620,133623,133624],{},"left: 50%; 让 ",[707,133621,133622],{},"盒子的左侧"," 移动到 ",[707,133625,133626],{},"父级元素的水平中心位置",[25,133628,133629,133630,133633,133634],{},"margin-left: -100px; 让盒子 ",[707,133631,133632],{},"向左"," 移动 ",[707,133635,133636],{},"自身宽度的一半",[22423,133638,133640],{"id":133639},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[22,133642,133643,133646],{},[25,133644,133645],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[25,133647,133648],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[15,133650,133651],{},"也就是说绝对定位和固定定位和浮动类似",[22,133653,133654],{"start":1608},[25,133655,133656],{},"display 是显示模式， 可以改变显示模式有以下方式:",[251,133658,133659,133662,133665],{},[25,133660,133661],{},"可以用inline-block 转换为行内块",[25,133663,133664],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[25,133666,133667],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[15,133669,133670],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[22423,133672,133674],{"id":133673},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[22,133676,133677,133680,133683,133686],{},[25,133678,133679],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[25,133681,133682],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[25,133684,133685],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[25,133687,133688],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[63,133690,133691],{"className":126842,"code":131308,"language":126844,"meta":68,"style":68},[34,133692,133693,133699,133709,133713,133719,133729],{"__ignoreMap":68},[72,133694,133695,133697],{"class":74,"line":75},[72,133696,131315],{"class":358},[72,133698,15998],{"class":82},[72,133700,133701,133703,133705,133707],{"class":74,"line":370},[72,133702,131322],{"class":362},[72,133704,51855],{"class":82},[72,133706,165],{"class":362},[72,133708,1719],{"class":82},[72,133710,133711],{"class":74,"line":1608},[72,133712,1994],{"class":82},[72,133714,133715,133717],{"class":74,"line":1623},[72,133716,131337],{"class":358},[72,133718,15998],{"class":82},[72,133720,133721,133723,133725,133727],{"class":74,"line":1629},[72,133722,131322],{"class":362},[72,133724,51855],{"class":82},[72,133726,72940],{"class":362},[72,133728,1719],{"class":82},[72,133730,133731],{"class":74,"line":1643},[72,133732,1994],{"class":82},[1891,133734],{"style":126698,"src":133735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[22423,133737,133739],{"id":133738},"_11138-轮播图","11.1.3.8 轮播图",[1891,133741],{"style":126698,"src":133742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[22,133744,133745],{},[25,133746,133747],{},"制作顺序:",[251,133749,133750,133753,133756,133765],{},[25,133751,133752],{},"大盒子我们类名为： tb-promo 淘宝广告",[25,133754,133755],{},"里面先放一张图片",[25,133757,133758,133759,133761,133762,133764],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[54134,133760],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[54134,133763],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[25,133766,133767,133768,133770,133771,133773],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[54134,133769],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[54134,133772],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[22,133775,133776],{"start":370},[25,133777,133778],{},"代码模块",[63,133780,133782],{"className":126842,"code":133781,"language":126844,"meta":68,"style":68},"\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",[34,133783,133784,133789,133796,133806,133816,133826,133830,133835,133842,133852],{"__ignoreMap":68},[72,133785,133786],{"class":74,"line":75},[72,133787,133788],{"class":621},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[72,133790,133791,133794],{"class":74,"line":370},[72,133792,133793],{"class":358},".son",[72,133795,15998],{"class":82},[72,133797,133798,133800,133802,133804],{"class":74,"line":1608},[72,133799,132648],{"class":362},[72,133801,51855],{"class":82},[72,133803,55249],{"class":362},[72,133805,1719],{"class":82},[72,133807,133808,133810,133812,133814],{"class":74,"line":1623},[72,133809,132662],{"class":362},[72,133811,51855],{"class":82},[72,133813,747],{"class":362},[72,133815,1719],{"class":82},[72,133817,133818,133820,133822,133824],{"class":74,"line":1629},[72,133819,132679],{"class":362},[72,133821,51855],{"class":82},[72,133823,747],{"class":362},[72,133825,1719],{"class":82},[72,133827,133828],{"class":74,"line":1643},[72,133829,1994],{"class":82},[72,133831,133832],{"class":74,"line":1649},[72,133833,133834],{"class":621},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[72,133836,133837,133840],{"class":74,"line":1740},[72,133838,133839],{"class":358},".father",[72,133841,15998],{"class":82},[72,133843,133844,133846,133848,133850],{"class":74,"line":1746},[72,133845,132648],{"class":362},[72,133847,51855],{"class":82},[72,133849,55182],{"class":362},[72,133851,1719],{"class":82},[72,133853,133854],{"class":74,"line":1758},[72,133855,1994],{"class":82},[15,133857,133858],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[531,133860,133862],{"id":133861},"_1114-定位数值的移动","11.1.4 定位数值的移动",[1891,133864],{"style":126698,"src":133865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[15,133867,133868],{},"✨ 黄金口诀：",[15,133870,133871],{},"\"TOP正下负上，LEFT正右负左\"",[15,133873,133874],{},"\"RIGHT正左负右，BOTTOM正上负下",[15,133876,133877],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[15,133879,133880],{},"✨ 简单记：",[15,133882,133883],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[473,133885,133886],{},"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":68,"searchDepth":370,"depth":370,"links":133888},[133889],{"id":132416,"depth":370,"text":132417,"children":133890},[133891,133892,133893,133894],{"id":132420,"depth":1608,"text":132421},{"id":132435,"depth":1608,"text":132436},{"id":132603,"depth":1608,"text":132604},{"id":133861,"depth":1608,"text":133862},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132408,"description":23802},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":133901,"title":133902,"body":133903,"description":23802,"extension":487,"meta":135326,"navigation":490,"path":135327,"seo":135328,"stem":135329,"__hash__":135330},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":133904,"toc":135305},[133905,133908,133912,133920,133924,133929,133937,133949,133953,133958,133966,133977,133981,133986,134027,134035,134039,134042,134045,134048,134142,134145,134239,134242,134336,134339,134342,134377,134380,134383,134413,134416,134419,134422,134425,134428,134431,134434,134504,134507,134511,134515,134556,134560,134566,134569,134572,134576,134579,134582,134585,134666,134669,134672,134676,134680,134683,134686,134689,134692,134695,134701,134710,134714,134733,134737,134747,134750,134753,134756,134759,134762,134765,134768,134771,134780,134784,134793,134796,134801,134854,134859,135025,135028,135031,135036,135039,135042,135045,135048,135053,135201,135204,135207,135212,135215,135220,135254,135257,135260,135264,135267,135274,135277,135280,135283,135286,135289,135292,135295,135299,135302],[10,133906,133902],{"id":133907},"_12-显示隐藏与图形资源",[85,133909,133911],{"id":133910},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[251,133913,133914,133917],{},[25,133915,133916],{},"目的:让一个元素在页面中消失或者显示出来",[25,133918,133919],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[531,133921,133923],{"id":133922},"_1211-display-显示","12.1.1 display 显示",[22,133925,133926],{},[25,133927,133928],{},"display 设置或检索对象是否及如何显示",[251,133930,133931,133934],{},[25,133932,133933],{},"display: none;隐藏对象",[25,133935,133936],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[22,133938,133939,133946],{"start":370},[25,133940,133941,133942,133945],{},"特点： display 隐藏元素后， ",[707,133943,133944],{},"不再占"," 有原来的位置",[25,133947,133948],{},"在js中使用非常的广泛",[531,133950,133952],{"id":133951},"_1212-visibility可见性","12.1.2 visibility可见性",[22,133954,133955],{},[25,133956,133957],{},"visibility 属性用于指定一个元素应可见还是隐藏",[251,133959,133960,133963],{},[25,133961,133962],{},"visibility： visible；元素可见",[25,133964,133965],{},"visibility：hidden；元素隐藏",[22,133967,133968,133971,133974],{"start":370},[25,133969,133970],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[25,133972,133973],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[25,133975,133976],{},"隐藏后继续占有原有位置",[531,133978,133980],{"id":133979},"_1213-overflow溢出","12.1.3 overflow溢出",[251,133982,133983],{},[25,133984,133985],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[154,133987,133988,133996],{},[157,133989,133990],{},[160,133991,133992,133994],{},[163,133993,127306],{"align":165},[163,133995,27911],{"align":165},[174,133997,133998,134006,134013,134020],{},[160,133999,134000,134003],{},[179,134001,134002],{"align":165},"visible",[179,134004,134005],{"align":165},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[160,134007,134008,134010],{},[179,134009,62132],{"align":165},[179,134011,134012],{"align":165},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[160,134014,134015,134017],{},[179,134016,129262],{"align":165},[179,134018,134019],{"align":165},"不管超出内容否，总是显示滚动条",[160,134021,134022,134024],{},[179,134023,73081],{"align":165},[179,134025,134026],{"align":165},"超出自动显示滚动条，不超出不显示滚动条",[251,134028,134029,134032],{},[25,134030,134031],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[25,134033,134034],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[531,134036,134038],{"id":134037},"_1214-案例收获","12.1.4 案例收获",[1891,134040],{"style":126698,"src":134041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[15,134043,134044],{},"问题：没做出来动态效果，使用hover没实现",[15,134046,134047],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[63,134049,134050],{"className":126842,"code":132274,"language":126844,"meta":68,"style":68},[34,134051,134052,134056,134070,134074,134088,134092,134106,134110,134124,134128],{"__ignoreMap":68},[72,134053,134054],{"class":74,"line":75},[72,134055,132281],{"class":621},[72,134057,134058,134060,134062,134064,134066,134068],{"class":74,"line":370},[72,134059,132286],{"class":358},[72,134061,80225],{"class":82},[72,134063,129202],{"class":362},[72,134065,51855],{"class":82},[72,134067,132295],{"class":362},[72,134069,129772],{"class":82},[72,134071,134072],{"class":74,"line":1608},[72,134073,132302],{"class":621},[72,134075,134076,134078,134080,134082,134084,134086],{"class":74,"line":1623},[72,134077,132307],{"class":358},[72,134079,80225],{"class":82},[72,134081,129202],{"class":362},[72,134083,51855],{"class":82},[72,134085,55182],{"class":362},[72,134087,129772],{"class":82},[72,134089,134090],{"class":74,"line":1629},[72,134091,132322],{"class":621},[72,134093,134094,134096,134098,134100,134102,134104],{"class":74,"line":1643},[72,134095,132327],{"class":358},[72,134097,80225],{"class":82},[72,134099,129202],{"class":362},[72,134101,51855],{"class":82},[72,134103,55249],{"class":362},[72,134105,129772],{"class":82},[72,134107,134108],{"class":74,"line":1649},[72,134109,132342],{"class":621},[72,134111,134112,134114,134116,134118,134120,134122],{"class":74,"line":1740},[72,134113,132347],{"class":358},[72,134115,80225],{"class":82},[72,134117,129202],{"class":362},[72,134119,51855],{"class":82},[72,134121,86650],{"class":362},[72,134123,129772],{"class":82},[72,134125,134126],{"class":74,"line":1746},[72,134127,132362],{"class":621},[72,134129,134130,134132,134134,134136,134138,134140],{"class":74,"line":1758},[72,134131,132367],{"class":358},[72,134133,80225],{"class":82},[72,134135,129202],{"class":362},[72,134137,51855],{"class":82},[72,134139,132376],{"class":362},[72,134141,129772],{"class":82},[15,134143,134144],{},"完整代码：",[63,134146,134147],{"className":126842,"code":132274,"language":126844,"meta":68,"style":68},[34,134148,134149,134153,134167,134171,134185,134189,134203,134207,134221,134225],{"__ignoreMap":68},[72,134150,134151],{"class":74,"line":75},[72,134152,132281],{"class":621},[72,134154,134155,134157,134159,134161,134163,134165],{"class":74,"line":370},[72,134156,132286],{"class":358},[72,134158,80225],{"class":82},[72,134160,129202],{"class":362},[72,134162,51855],{"class":82},[72,134164,132295],{"class":362},[72,134166,129772],{"class":82},[72,134168,134169],{"class":74,"line":1608},[72,134170,132302],{"class":621},[72,134172,134173,134175,134177,134179,134181,134183],{"class":74,"line":1623},[72,134174,132307],{"class":358},[72,134176,80225],{"class":82},[72,134178,129202],{"class":362},[72,134180,51855],{"class":82},[72,134182,55182],{"class":362},[72,134184,129772],{"class":82},[72,134186,134187],{"class":74,"line":1629},[72,134188,132322],{"class":621},[72,134190,134191,134193,134195,134197,134199,134201],{"class":74,"line":1643},[72,134192,132327],{"class":358},[72,134194,80225],{"class":82},[72,134196,129202],{"class":362},[72,134198,51855],{"class":82},[72,134200,55249],{"class":362},[72,134202,129772],{"class":82},[72,134204,134205],{"class":74,"line":1649},[72,134206,132342],{"class":621},[72,134208,134209,134211,134213,134215,134217,134219],{"class":74,"line":1740},[72,134210,132347],{"class":358},[72,134212,80225],{"class":82},[72,134214,129202],{"class":362},[72,134216,51855],{"class":82},[72,134218,86650],{"class":362},[72,134220,129772],{"class":82},[72,134222,134223],{"class":74,"line":1746},[72,134224,132362],{"class":621},[72,134226,134227,134229,134231,134233,134235,134237],{"class":74,"line":1758},[72,134228,132367],{"class":358},[72,134230,80225],{"class":82},[72,134232,129202],{"class":362},[72,134234,51855],{"class":82},[72,134236,132376],{"class":362},[72,134238,129772],{"class":82},[15,134240,134241],{},"分布思路重点详解：",[63,134243,134244],{"className":126842,"code":132274,"language":126844,"meta":68,"style":68},[34,134245,134246,134250,134264,134268,134282,134286,134300,134304,134318,134322],{"__ignoreMap":68},[72,134247,134248],{"class":74,"line":75},[72,134249,132281],{"class":621},[72,134251,134252,134254,134256,134258,134260,134262],{"class":74,"line":370},[72,134253,132286],{"class":358},[72,134255,80225],{"class":82},[72,134257,129202],{"class":362},[72,134259,51855],{"class":82},[72,134261,132295],{"class":362},[72,134263,129772],{"class":82},[72,134265,134266],{"class":74,"line":1608},[72,134267,132302],{"class":621},[72,134269,134270,134272,134274,134276,134278,134280],{"class":74,"line":1623},[72,134271,132307],{"class":358},[72,134273,80225],{"class":82},[72,134275,129202],{"class":362},[72,134277,51855],{"class":82},[72,134279,55182],{"class":362},[72,134281,129772],{"class":82},[72,134283,134284],{"class":74,"line":1629},[72,134285,132322],{"class":621},[72,134287,134288,134290,134292,134294,134296,134298],{"class":74,"line":1643},[72,134289,132327],{"class":358},[72,134291,80225],{"class":82},[72,134293,129202],{"class":362},[72,134295,51855],{"class":82},[72,134297,55249],{"class":362},[72,134299,129772],{"class":82},[72,134301,134302],{"class":74,"line":1649},[72,134303,132342],{"class":621},[72,134305,134306,134308,134310,134312,134314,134316],{"class":74,"line":1740},[72,134307,132347],{"class":358},[72,134309,80225],{"class":82},[72,134311,129202],{"class":362},[72,134313,51855],{"class":82},[72,134315,86650],{"class":362},[72,134317,129772],{"class":82},[72,134319,134320],{"class":74,"line":1746},[72,134321,132362],{"class":621},[72,134323,134324,134326,134328,134330,134332,134334],{"class":74,"line":1758},[72,134325,132367],{"class":358},[72,134327,80225],{"class":82},[72,134329,129202],{"class":362},[72,134331,51855],{"class":82},[72,134333,132376],{"class":362},[72,134335,129772],{"class":82},[1891,134337],{"style":126698,"src":134338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[15,134340,134341],{},"图片太大，盒子太小，此时需要修改图片的大小",[63,134343,134345],{"className":127589,"code":134344,"language":127591,"meta":68,"style":68},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[34,134346,134347],{"__ignoreMap":68},[72,134348,134349,134351,134353,134355,134357,134360,134362,134364,134367,134370,134372,134375],{"class":74,"line":75},[72,134350,1464],{"class":82},[72,134352,1891],{"class":51718},[72,134354,55657],{"class":358},[72,134356,609],{"class":82},[72,134358,134359],{"class":366},"\"images\u002Fpic.jpg\"",[72,134361,55665],{"class":358},[72,134363,609],{"class":82},[72,134365,134366],{"class":366},"\"描述文字\"",[72,134368,134369],{"class":358}," title",[72,134371,609],{"class":82},[72,134373,134374],{"class":366},"\"悬停提示\"",[72,134376,51725],{"class":82},[1891,134378],{"style":126698,"src":134379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[15,134381,134382],{},"制造遮罩层",[63,134384,134385],{"className":127589,"code":134344,"language":127591,"meta":68,"style":68},[34,134386,134387],{"__ignoreMap":68},[72,134388,134389,134391,134393,134395,134397,134399,134401,134403,134405,134407,134409,134411],{"class":74,"line":75},[72,134390,1464],{"class":82},[72,134392,1891],{"class":51718},[72,134394,55657],{"class":358},[72,134396,609],{"class":82},[72,134398,134359],{"class":366},[72,134400,55665],{"class":358},[72,134402,609],{"class":82},[72,134404,134366],{"class":366},[72,134406,134369],{"class":358},[72,134408,609],{"class":82},[72,134410,134374],{"class":366},[72,134412,51725],{"class":82},[15,134414,134415],{},"此时是这样的为标准流",[1891,134417],{"style":126698,"src":134418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[15,134420,134421],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[15,134423,134424],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[15,134426,134427],{},"让他在中间，用center(background-position)",[15,134429,134430],{},"将需要变的尽可能放到一个盒子中",[15,134432,134433],{},"放大盒子上内部盒子发生变化",[63,134435,134437],{"className":126842,"code":134436,"language":126844,"meta":68,"style":68},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[34,134438,134439,134445,134455,134459,134466,134476,134488,134500],{"__ignoreMap":68},[72,134440,134441,134443],{"class":74,"line":75},[72,134442,127909],{"class":358},[72,134444,15998],{"class":82},[72,134446,134447,134449,134451,134453],{"class":74,"line":370},[72,134448,132648],{"class":362},[72,134450,51855],{"class":82},[72,134452,55182],{"class":362},[72,134454,1719],{"class":82},[72,134456,134457],{"class":74,"line":1608},[72,134458,1994],{"class":82},[72,134460,134461,134464],{"class":74,"line":1623},[72,134462,134463],{"class":358},".child",[72,134465,15998],{"class":82},[72,134467,134468,134470,134472,134474],{"class":74,"line":1629},[72,134469,132648],{"class":362},[72,134471,51855],{"class":82},[72,134473,55249],{"class":362},[72,134475,1719],{"class":82},[72,134477,134478,134480,134482,134484,134486],{"class":74,"line":1643},[72,134479,132662],{"class":362},[72,134481,51855],{"class":82},[72,134483,1210],{"class":362},[72,134485,882],{"class":78},[72,134487,1719],{"class":82},[72,134489,134490,134492,134494,134496,134498],{"class":74,"line":1649},[72,134491,132679],{"class":362},[72,134493,51855],{"class":82},[72,134495,1210],{"class":362},[72,134497,882],{"class":78},[72,134499,1719],{"class":82},[72,134501,134502],{"class":74,"line":1740},[72,134503,1994],{"class":82},[15,134505,134506],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[85,134508,134510],{"id":134509},"_122-精灵图","12.2 精灵图",[531,134512,134514],{"id":134513},"_1221-理解","12.2.1 理解",[22,134516,134517,134535],{},[25,134518,134519,134520,132748,134523,134526,134527,134530,134531,134534],{},"目的： ",[707,134521,134522],{},"为了有效地减少服务器接收和发送请求的次数",[707,134524,134525],{},"提高"," 页面的 ",[707,134528,134529],{},"加载速度"," ，出现了 ",[707,134532,134533],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[25,134536,134537,134538,134540,134541,134543,134544,134546,134547,134549,134550,134552,134553,134555],{},"使用精灵图核心：",[54134,134539],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[54134,134542],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[54134,134545],{},"  ③移动背景图片位置， 此时可以使用 background-position",[54134,134548],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[54134,134551],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[54134,134554],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[531,134557,134559],{"id":134558},"_1222-扒图","12.2.2 扒图",[63,134561,134564],{"className":134562,"code":134563,"language":127},[125],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[34,134565,134563],{"__ignoreMap":68},[1891,134567],{"style":126698,"src":134568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[1891,134570],{"style":126698,"src":134571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[531,134573,134575],{"id":134574},"_1223-精灵图的实现","12.2.3 精灵图的实现",[1891,134577],{"style":126698,"src":134578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[15,134580,134581],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[1891,134583],{"style":126698,"src":134584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[63,134586,134588],{"className":126842,"code":134587,"language":126844,"meta":68,"style":68},"\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",[34,134589,134590,134595,134602,134614,134626,134645,134662],{"__ignoreMap":68},[72,134591,134592],{"class":74,"line":75},[72,134593,134594],{"class":621},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[72,134596,134597,134600],{"class":74,"line":370},[72,134598,134599],{"class":358},".icon",[72,134601,15998],{"class":82},[72,134603,134604,134606,134608,134610,134612],{"class":74,"line":1608},[72,134605,70986],{"class":362},[72,134607,51855],{"class":82},[72,134609,1254],{"class":362},[72,134611,51910],{"class":78},[72,134613,1719],{"class":82},[72,134615,134616,134618,134620,134622,134624],{"class":74,"line":1623},[72,134617,71206],{"class":362},[72,134619,51855],{"class":82},[72,134621,1254],{"class":362},[72,134623,51910],{"class":78},[72,134625,1719],{"class":82},[72,134627,134628,134630,134632,134634,134636,134639,134641,134643],{"class":74,"line":1629},[72,134629,71029],{"class":362},[72,134631,51855],{"class":82},[72,134633,62144],{"class":362},[72,134635,564],{"class":82},[72,134637,134638],{"class":5642},"sprites.png",[72,134640,14140],{"class":82},[72,134642,62154],{"class":362},[72,134644,1719],{"class":82},[72,134646,134647,134649,134651,134653,134655,134658,134660],{"class":74,"line":1643},[72,134648,129102],{"class":362},[72,134650,51855],{"class":82},[72,134652,52181],{"class":362},[72,134654,51910],{"class":78},[72,134656,134657],{"class":362}," -20",[72,134659,51910],{"class":78},[72,134661,1719],{"class":82},[72,134663,134664],{"class":74,"line":1649},[72,134665,1994],{"class":82},[1891,134667],{"style":126698,"src":134668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[15,134670,134671],{},"在前端中坐标轴的正方向是右和下",[85,134673,134675],{"id":134674},"_123-字体图标","12.3 字体图标",[531,134677,134679],{"id":134678},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[15,134681,134682],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[15,134684,134685],{},"精灵图是有诸多优点的，但是缺点很明显。",[15,134687,134688],{},"1.图片文件还是比较大的。",[15,134690,134691],{},"2.图片本身放大和缩小会失真。",[15,134693,134694],{},"3.一旦图片制作完毕想要更换非常复杂。",[15,134696,134697,134698,26162],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[707,134699,134700],{},"字体图标 iconfont",[15,134702,134703,134706,134707,28807],{},[707,134704,134705],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[707,134708,134709],{},"展示的是图标，本质属于字体",[531,134711,134713],{"id":134712},"_1232-字体图标的优点","12.3.2 字体图标的优点",[251,134715,134716,134721,134724,134727,134730],{},[25,134717,134718,134720],{},[707,134719,26298],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[25,134722,134723],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[25,134725,134726],{},"兼容性：几乎支持所有的浏览器，请放心使用",[25,134728,134729],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[25,134731,134732],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[531,134734,134736],{"id":134735},"_1233-字体库下载网站","12.3.3 字体库下载网站",[251,134738,134739],{},[25,134740,134741,134742],{},"icomoon字体库：",[257,134743,134746],{"href":134744,"rel":134745},"http:\u002F\u002Ficomoon.io\u002F",[261],"http:\u002F\u002Ficomoon.io",[15,134748,134749],{},"进去之后点icomoon app",[1891,134751],{"style":126698,"src":134752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[15,134754,134755],{},"可以对其编辑：",[1891,134757],{"style":126698,"src":134758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[15,134760,134761],{},"生成字体：",[1891,134763],{"style":126698,"src":134764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[15,134766,134767],{},"下载：",[1891,134769],{"style":126698,"src":134770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[251,134772,134773],{},[25,134774,134775,134776],{},"阿里iconfont字体库： ",[257,134777,134778],{"href":134778,"rel":134779},"http:\u002F\u002Fwww.iconfont.cn\u002F",[261],[531,134781,134783],{"id":134782},"_1234-字体图标的引入","12.3.4 字体图标的引入",[22,134785,134786],{},[25,134787,134788,134789,134792],{},"把下载包里面的 ",[707,134790,134791],{},"fonts"," 文件夹放入页面根目录下",[1891,134794],{"style":126698,"src":134795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[22,134797,134798],{"start":370},[25,134799,134800],{},"字体文件格式",[154,134802,134803,134812],{},[157,134804,134805],{},[160,134806,134807,134810],{},[163,134808,134809],{"align":165},"格式",[163,134811,24164],{"align":165},[174,134813,134814,134824,134834,134844],{},[160,134815,134816,134821],{},[179,134817,134818],{"align":165},[707,134819,134820],{},".ttf",[179,134822,134823],{"align":165},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[160,134825,134826,134831],{},[179,134827,134828],{"align":165},[707,134829,134830],{},".woff",[179,134832,134833],{"align":165},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[160,134835,134836,134841],{},[179,134837,134838],{"align":165},[707,134839,134840],{},".eot",[179,134842,134843],{"align":165},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[160,134845,134846,134851],{},[179,134847,134848],{"align":165},[707,134849,134850],{},"svg",[179,134852,134853],{"align":165},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[22,134855,134856],{"start":1608},[25,134857,134858],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[63,134860,134862],{"className":126842,"code":134861,"language":126844,"meta":68,"style":68},"\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",[34,134863,134864,134869,134876,134888,134904,134929,134950,134970,134990,134994,135000,135010,135021],{"__ignoreMap":68},[72,134865,134866],{"class":74,"line":75},[72,134867,134868],{"class":621},"\u002F* 引入字体图标 *\u002F\n",[72,134870,134871,134874],{"class":74,"line":370},[72,134872,134873],{"class":78},"@font-face",[72,134875,15998],{"class":82},[72,134877,134878,134881,134883,134886],{"class":74,"line":1608},[72,134879,134880],{"class":362},"  font-family",[72,134882,51855],{"class":82},[72,134884,134885],{"class":366},"'icomoon'",[72,134887,1719],{"class":82},[72,134889,134890,134893,134895,134897,134899,134902],{"class":74,"line":1623},[72,134891,134892],{"class":362},"  src",[72,134894,51855],{"class":82},[72,134896,62144],{"class":362},[72,134898,564],{"class":82},[72,134900,134901],{"class":366},"'fonts\u002Ficomoon.eot'",[72,134903,3147],{"class":82},[72,134905,134906,134908,134910,134912,134914,134917,134919,134922,134924,134927],{"class":74,"line":1629},[72,134907,134892],{"class":362},[72,134909,51855],{"class":82},[72,134911,62144],{"class":362},[72,134913,564],{"class":82},[72,134915,134916],{"class":366},"'fonts\u002Ficomoon.eot?#iefix'",[72,134918,14140],{"class":82},[72,134920,134921],{"class":362},"format",[72,134923,564],{"class":82},[72,134925,134926],{"class":366},"'embedded-opentype'",[72,134928,38465],{"class":82},[72,134930,134931,134934,134936,134939,134941,134943,134945,134948],{"class":74,"line":1643},[72,134932,134933],{"class":362},"       url",[72,134935,564],{"class":82},[72,134937,134938],{"class":366},"'fonts\u002Ficomoon.woff'",[72,134940,14140],{"class":82},[72,134942,134921],{"class":362},[72,134944,564],{"class":82},[72,134946,134947],{"class":366},"'woff'",[72,134949,38465],{"class":82},[72,134951,134952,134954,134956,134959,134961,134963,134965,134968],{"class":74,"line":1649},[72,134953,134933],{"class":362},[72,134955,564],{"class":82},[72,134957,134958],{"class":366},"'fonts\u002Ficomoon.ttf'",[72,134960,14140],{"class":82},[72,134962,134921],{"class":362},[72,134964,564],{"class":82},[72,134966,134967],{"class":366},"'truetype'",[72,134969,38465],{"class":82},[72,134971,134972,134974,134976,134979,134981,134983,134985,134988],{"class":74,"line":1740},[72,134973,134933],{"class":362},[72,134975,564],{"class":82},[72,134977,134978],{"class":366},"'fonts\u002Ficomoon.svg#icomoon'",[72,134980,14140],{"class":82},[72,134982,134921],{"class":362},[72,134984,564],{"class":82},[72,134986,134987],{"class":366},"'svg'",[72,134989,3147],{"class":82},[72,134991,134992],{"class":74,"line":1746},[72,134993,1994],{"class":82},[72,134995,134996,134998],{"class":74,"line":1758},[72,134997,134599],{"class":358},[72,134999,15998],{"class":82},[72,135001,135002,135004,135006,135008],{"class":74,"line":2041},[72,135003,134880],{"class":362},[72,135005,51855],{"class":82},[72,135007,134885],{"class":366},[72,135009,1719],{"class":82},[72,135011,135012,135015,135017,135019],{"class":74,"line":2046},[72,135013,135014],{"class":362},"  font-style",[72,135016,51855],{"class":82},[72,135018,64259],{"class":362},[72,135020,1719],{"class":82},[72,135022,135023],{"class":74,"line":2052},[72,135024,1994],{"class":82},[15,135026,135027],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[1891,135029],{"style":126698,"src":135030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[22,135032,135033],{"start":1623},[25,135034,135035],{},"添加字体",[1891,135037],{"style":126698,"src":135038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[15,135040,135041],{},"复制：",[1891,135043],{"style":126698,"src":135044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[15,135046,135047],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[22,135049,135050],{"start":1629},[25,135051,135052],{},"代码展示：",[63,135054,135055],{"className":126842,"code":134861,"language":126844,"meta":68,"style":68},[34,135056,135057,135061,135067,135077,135091,135113,135131,135149,135167,135171,135177,135187,135197],{"__ignoreMap":68},[72,135058,135059],{"class":74,"line":75},[72,135060,134868],{"class":621},[72,135062,135063,135065],{"class":74,"line":370},[72,135064,134873],{"class":78},[72,135066,15998],{"class":82},[72,135068,135069,135071,135073,135075],{"class":74,"line":1608},[72,135070,134880],{"class":362},[72,135072,51855],{"class":82},[72,135074,134885],{"class":366},[72,135076,1719],{"class":82},[72,135078,135079,135081,135083,135085,135087,135089],{"class":74,"line":1623},[72,135080,134892],{"class":362},[72,135082,51855],{"class":82},[72,135084,62144],{"class":362},[72,135086,564],{"class":82},[72,135088,134901],{"class":366},[72,135090,3147],{"class":82},[72,135092,135093,135095,135097,135099,135101,135103,135105,135107,135109,135111],{"class":74,"line":1629},[72,135094,134892],{"class":362},[72,135096,51855],{"class":82},[72,135098,62144],{"class":362},[72,135100,564],{"class":82},[72,135102,134916],{"class":366},[72,135104,14140],{"class":82},[72,135106,134921],{"class":362},[72,135108,564],{"class":82},[72,135110,134926],{"class":366},[72,135112,38465],{"class":82},[72,135114,135115,135117,135119,135121,135123,135125,135127,135129],{"class":74,"line":1643},[72,135116,134933],{"class":362},[72,135118,564],{"class":82},[72,135120,134938],{"class":366},[72,135122,14140],{"class":82},[72,135124,134921],{"class":362},[72,135126,564],{"class":82},[72,135128,134947],{"class":366},[72,135130,38465],{"class":82},[72,135132,135133,135135,135137,135139,135141,135143,135145,135147],{"class":74,"line":1649},[72,135134,134933],{"class":362},[72,135136,564],{"class":82},[72,135138,134958],{"class":366},[72,135140,14140],{"class":82},[72,135142,134921],{"class":362},[72,135144,564],{"class":82},[72,135146,134967],{"class":366},[72,135148,38465],{"class":82},[72,135150,135151,135153,135155,135157,135159,135161,135163,135165],{"class":74,"line":1740},[72,135152,134933],{"class":362},[72,135154,564],{"class":82},[72,135156,134978],{"class":366},[72,135158,14140],{"class":82},[72,135160,134921],{"class":362},[72,135162,564],{"class":82},[72,135164,134987],{"class":366},[72,135166,3147],{"class":82},[72,135168,135169],{"class":74,"line":1746},[72,135170,1994],{"class":82},[72,135172,135173,135175],{"class":74,"line":1758},[72,135174,134599],{"class":358},[72,135176,15998],{"class":82},[72,135178,135179,135181,135183,135185],{"class":74,"line":2041},[72,135180,134880],{"class":362},[72,135182,51855],{"class":82},[72,135184,134885],{"class":366},[72,135186,1719],{"class":82},[72,135188,135189,135191,135193,135195],{"class":74,"line":2046},[72,135190,135014],{"class":362},[72,135192,51855],{"class":82},[72,135194,64259],{"class":362},[72,135196,1719],{"class":82},[72,135198,135199],{"class":74,"line":2052},[72,135200,1994],{"class":82},[1891,135202],{"style":126698,"src":135203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[15,135205,135206],{},"更加细节展示：",[22,135208,135209],{},[25,135210,135211],{},"html 标签内添加小图标",[1891,135213],{"style":126698,"src":135214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[22,135216,135217],{"start":370},[25,135218,135219],{},"给标签定义字体",[63,135221,135222],{"className":127589,"code":130946,"language":127591,"meta":68,"style":68},[34,135223,135224,135228,135242,135246],{"__ignoreMap":68},[72,135225,135226],{"class":74,"line":75},[72,135227,130953],{"class":621},[72,135229,135230,135232,135234,135236,135238,135240],{"class":74,"line":370},[72,135231,1464],{"class":82},[72,135233,52029],{"class":51718},[72,135235,53904],{"class":358},[72,135237,609],{"class":82},[72,135239,130966],{"class":366},[72,135241,51725],{"class":82},[72,135243,135244],{"class":74,"line":1608},[72,135245,130973],{"class":82},[72,135247,135248,135250,135252],{"class":74,"line":1623},[72,135249,52203],{"class":82},[72,135251,52029],{"class":51718},[72,135253,51725],{"class":82},[15,135255,135256],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[1891,135258],{"style":126698,"src":135259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[531,135261,135263],{"id":135262},"_1235-字体图标的追加","12.3.5 字体图标的追加",[15,135265,135266],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[15,135268,135269,135270,135273],{},"把压缩包里面的 ",[707,135271,135272],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[15,135275,135276],{},"打开网站，点下方：",[1891,135278],{"style":126698,"src":135279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[1891,135281],{"style":126698,"src":135282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[1891,135284],{"style":126698,"src":135285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[15,135287,135288],{},"点yes重新加载",[15,135290,135291],{},"然后重复之前的操作就可以实现了",[15,135293,135294],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[531,135296,135298],{"id":135297},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[1891,135300],{"style":126698,"src":135301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[473,135303,135304],{},"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":68,"searchDepth":370,"depth":370,"links":135306},[135307,135313,135318],{"id":133910,"depth":370,"text":133911,"children":135308},[135309,135310,135311,135312],{"id":133922,"depth":1608,"text":133923},{"id":133951,"depth":1608,"text":133952},{"id":133979,"depth":1608,"text":133980},{"id":134037,"depth":1608,"text":134038},{"id":134509,"depth":370,"text":134510,"children":135314},[135315,135316,135317],{"id":134513,"depth":1608,"text":134514},{"id":134558,"depth":1608,"text":134559},{"id":134574,"depth":1608,"text":134575},{"id":134674,"depth":370,"text":134675,"children":135319},[135320,135321,135322,135323,135324,135325],{"id":134678,"depth":1608,"text":134679},{"id":134712,"depth":1608,"text":134713},{"id":134735,"depth":1608,"text":134736},{"id":134782,"depth":1608,"text":134783},{"id":135262,"depth":1608,"text":135263},{"id":135297,"depth":1608,"text":135298},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":133902,"description":23802},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135332,"title":135333,"body":135334,"description":23802,"extension":487,"meta":136561,"navigation":490,"path":136562,"seo":136563,"stem":136564,"__hash__":136565},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135335,"toc":136542},[135336,135339,135343,135346,135360,135428,135458,135461,135465,135469,135571,135618,135622,135625,135628,135662,135665,135668,135671,135674,135677,135680,135683,135685,135688,135691,135694,135697,135700,135703,135706,135734,135737,135741,135744,135751,135754,135757,135783,135786,135790,135793,135796,135803,135807,135810,135812,135844,135847,135850,135862,135868,135871,135874,135877,135879,135883,135886,135889,135892,135937,135941,135943,135946,135953,135995,135998,136002,136007,136021,136025,136028,136031,136034,136037,136040,136074,136077,136080,136134,136137,136140,136143,136146,136198,136201,136204,136253,136257,136259,136262,136265,136268,136271,136274,136332,136335,136341,136344,136347,136379,136382,136386,136390,136393,136425,136429,136432,136476,136480,136483,136486,136489,136492,136495,136498,136501,136503,136506,136508,136511,136514,136517,136520,136525,136528,136530,136533,136536,136539],[10,135337,135333],{"id":135338},"_13-界面样式与布局技巧",[85,135340,135342],{"id":135341},"_131-css三角","13.1 css三角",[15,135344,135345],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[251,135347,135348,135351,135354,135357],{},[25,135349,135350],{},"用css 边框可以模拟三角效果",[25,135352,135353],{},"宽度高度为0",[25,135355,135356],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[25,135358,135359],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[63,135361,135363],{"className":126842,"code":135362,"language":126844,"meta":68,"style":68},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[34,135364,135365,135370,135377,135387,135397,135413,135424],{"__ignoreMap":68},[72,135366,135367],{"class":74,"line":75},[72,135368,135369],{"class":621},"\u002F* CSS 实现三角形 *\u002F\n",[72,135371,135372,135375],{"class":74,"line":370},[72,135373,135374],{"class":358},".triangle",[72,135376,15998],{"class":82},[72,135378,135379,135381,135383,135385],{"class":74,"line":1608},[72,135380,70986],{"class":362},[72,135382,51855],{"class":82},[72,135384,747],{"class":362},[72,135386,1719],{"class":82},[72,135388,135389,135391,135393,135395],{"class":74,"line":1623},[72,135390,71206],{"class":362},[72,135392,51855],{"class":82},[72,135394,747],{"class":362},[72,135396,1719],{"class":82},[72,135398,135399,135401,135403,135405,135407,135409,135411],{"class":74,"line":1629},[72,135400,71314],{"class":362},[72,135402,51855],{"class":82},[72,135404,1000],{"class":362},[72,135406,51910],{"class":78},[72,135408,51939],{"class":362},[72,135410,64409],{"class":362},[72,135412,1719],{"class":82},[72,135414,135415,135418,135420,135422],{"class":74,"line":1643},[72,135416,135417],{"class":362},"  border-bottom-color",[72,135419,51855],{"class":82},[72,135421,62787],{"class":362},[72,135423,1719],{"class":82},[72,135425,135426],{"class":74,"line":1649},[72,135427,1994],{"class":82},[63,135429,135430],{"className":126842,"code":130999,"language":126844,"meta":68,"style":68},[34,135431,135432,135438,135454],{"__ignoreMap":68},[72,135433,135434,135436],{"class":74,"line":75},[72,135435,52029],{"class":51718},[72,135437,15998],{"class":82},[72,135439,135440,135442,135444,135446,135448,135450,135452],{"class":74,"line":370},[72,135441,71314],{"class":362},[72,135443,51855],{"class":82},[72,135445,772],{"class":362},[72,135447,51910],{"class":78},[72,135449,51939],{"class":362},[72,135451,130234],{"class":362},[72,135453,1719],{"class":82},[72,135455,135456],{"class":74,"line":1608},[72,135457,1994],{"class":82},[1891,135459],{"style":126698,"src":135460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[85,135462,135464],{"id":135463},"_132-css用户界面样式","13.2 css用户界面样式",[531,135466,135468],{"id":135467},"_1321-鼠标样式","13.2.1 鼠标样式",[63,135470,135472],{"className":126842,"code":135471,"language":126844,"meta":68,"style":68},"\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",[34,135473,135474,135479,135498,135516,135535,135552],{"__ignoreMap":68},[72,135475,135476],{"class":74,"line":75},[72,135477,135478],{"class":621},"\u002F* 鼠标样式 *\u002F\n",[72,135480,135481,135483,135485,135488,135490,135492,135495],{"class":74,"line":370},[72,135482,52029],{"class":51718},[72,135484,80225],{"class":82},[72,135486,135487],{"class":362},"cursor",[72,135489,51855],{"class":82},[72,135491,62448],{"class":362},[72,135493,135494],{"class":82},"; }   ",[72,135496,135497],{"class":621},"\u002F* 手型 *\u002F\n",[72,135499,135500,135502,135504,135506,135508,135511,135513],{"class":74,"line":1608},[72,135501,52029],{"class":51718},[72,135503,80225],{"class":82},[72,135505,135487],{"class":362},[72,135507,51855],{"class":82},[72,135509,135510],{"class":362},"default",[72,135512,135494],{"class":82},[72,135514,135515],{"class":621},"\u002F* 默认 *\u002F\n",[72,135517,135518,135520,135522,135524,135526,135529,135532],{"class":74,"line":1623},[72,135519,52029],{"class":51718},[72,135521,80225],{"class":82},[72,135523,135487],{"class":362},[72,135525,51855],{"class":82},[72,135527,135528],{"class":362},"move",[72,135530,135531],{"class":82},"; }      ",[72,135533,135534],{"class":621},"\u002F* 移动 *\u002F\n",[72,135536,135537,135539,135541,135543,135545,135547,135549],{"class":74,"line":1629},[72,135538,52029],{"class":51718},[72,135540,80225],{"class":82},[72,135542,135487],{"class":362},[72,135544,51855],{"class":82},[72,135546,127],{"class":362},[72,135548,135531],{"class":82},[72,135550,135551],{"class":621},"\u002F* 文本 *\u002F\n",[72,135553,135554,135556,135558,135560,135562,135565,135568],{"class":74,"line":1643},[72,135555,52029],{"class":51718},[72,135557,80225],{"class":82},[72,135559,135487],{"class":362},[72,135561,51855],{"class":82},[72,135563,135564],{"class":362},"not-allowed",[72,135566,135567],{"class":82},"; } ",[72,135569,135570],{"class":621},"\u002F* 禁止 *\u002F\n",[154,135572,135573,135581],{},[157,135574,135575],{},[160,135576,135577,135579],{},[163,135578,127306],{"align":165},[163,135580,27911],{"align":165},[174,135582,135583,135590,135597,135604,135611],{},[160,135584,135585,135587],{},[179,135586,135510],{"align":165},[179,135588,135589],{"align":165},"小白 默认",[160,135591,135592,135594],{},[179,135593,62448],{"align":165},[179,135595,135596],{"align":165},"小手",[160,135598,135599,135601],{},[179,135600,135528],{"align":165},[179,135602,135603],{"align":165},"移动",[160,135605,135606,135608],{},[179,135607,127],{"align":165},[179,135609,135610],{"align":165},"文本",[160,135612,135613,135615],{},[179,135614,135564],{"align":165},[179,135616,135617],{"align":165},"禁止",[531,135619,135621],{"id":135620},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[15,135623,135624],{},"去除表单轮廓线",[15,135626,135627],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[63,135629,135630],{"className":126842,"code":130206,"language":126844,"meta":68,"style":68},[34,135631,135632,135636,135642,135658],{"__ignoreMap":68},[72,135633,135634],{"class":74,"line":75},[72,135635,130213],{"class":621},[72,135637,135638,135640],{"class":74,"line":370},[72,135639,52029],{"class":51718},[72,135641,15998],{"class":82},[72,135643,135644,135646,135648,135650,135652,135654,135656],{"class":74,"line":1608},[72,135645,71314],{"class":362},[72,135647,51855],{"class":82},[72,135649,772],{"class":362},[72,135651,51910],{"class":78},[72,135653,51939],{"class":362},[72,135655,130234],{"class":362},[72,135657,1719],{"class":82},[72,135659,135660],{"class":74,"line":1623},[72,135661,1994],{"class":82},[15,135663,135664],{},"文本域：",[1891,135666],{"style":126698,"src":135667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[15,135669,135670],{},"此时会有一个空白区域",[1891,135672],{"style":126698,"src":135673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[15,135675,135676],{},"写在同一行就不会出现这个问题",[1891,135678],{"style":126698,"src":135679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[15,135681,135682],{},"文本域是行内块元素，一定记住！！！",[15,135684,98650],{},[1891,135686],{"style":126698,"src":135687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[15,135689,135690],{},"文本域尽量放在一行",[15,135692,135693],{},"知识回顾：cols是列，rols是行",[1891,135695],{"style":126698,"src":135696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[15,135698,135699],{},"它可以进行拖动，显然这是我们不愿意看到的",[1891,135701],{"style":126698,"src":135702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[15,135704,135705],{},"使用resize进行解决",[63,135707,135709],{"className":126842,"code":135708,"language":126844,"meta":68,"style":68},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[34,135710,135711,135717,135730],{"__ignoreMap":68},[72,135712,135713,135715],{"class":74,"line":75},[72,135714,54239],{"class":51718},[72,135716,15998],{"class":82},[72,135718,135719,135721,135723,135725,135727],{"class":74,"line":370},[72,135720,71216],{"class":362},[72,135722,51855],{"class":82},[72,135724,55155],{"class":362},[72,135726,130705],{"class":82},[72,135728,135729],{"class":621},"\u002F* 取消表单轮廓线 *\u002F\n",[72,135731,135732],{"class":74,"line":1608},[72,135733,1994],{"class":82},[15,135735,135736],{},"此时就无法通过右下方实现拖动了",[531,135738,135740],{"id":135739},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[15,135742,135743],{},"实现一个盒子中的文字和图片对齐",[15,135745,135746,135747,135750],{},"用于设置一个元素的 ",[707,135748,135749],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[15,135752,135753],{},"图片和文字默认是基线对齐",[1891,135755],{"style":126698,"src":135756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[63,135758,135759],{"className":126842,"code":135708,"language":126844,"meta":68,"style":68},[34,135760,135761,135767,135779],{"__ignoreMap":68},[72,135762,135763,135765],{"class":74,"line":75},[72,135764,54239],{"class":51718},[72,135766,15998],{"class":82},[72,135768,135769,135771,135773,135775,135777],{"class":74,"line":370},[72,135770,71216],{"class":362},[72,135772,51855],{"class":82},[72,135774,55155],{"class":362},[72,135776,130705],{"class":82},[72,135778,135729],{"class":621},[72,135780,135781],{"class":74,"line":1608},[72,135782,1994],{"class":82},[1891,135784],{"style":126698,"src":135785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[22423,135787,135789],{"id":135788},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[15,135791,135792],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[1891,135794],{"style":126698,"src":135795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[15,135797,135798,135799,135802],{},"此时可以给图片、表单这些行内块元素的 ",[707,135800,135801],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[22423,135804,135806],{"id":135805},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[15,135808,135809],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[15,135811,15059],{},[63,135813,135815],{"className":126842,"code":135814,"language":126844,"meta":68,"style":68},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[34,135816,135817,135822,135828,135840],{"__ignoreMap":68},[72,135818,135819],{"class":74,"line":75},[72,135820,135821],{"class":621},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[72,135823,135824,135826],{"class":74,"line":370},[72,135825,1891],{"class":51718},[72,135827,15998],{"class":82},[72,135829,135830,135833,135835,135838],{"class":74,"line":1608},[72,135831,135832],{"class":362},"  vertical-align",[72,135834,51855],{"class":82},[72,135836,135837],{"class":362},"middle",[72,135839,1719],{"class":82},[72,135841,135842],{"class":74,"line":1623},[72,135843,1994],{"class":82},[1891,135845],{"style":126698,"src":135846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[15,135848,135849],{},"主要解决方法有两种：",[22,135851,135852],{},[25,135853,135854,135857,135858,135861],{},[707,135855,135856],{},"给图片"," 添加 ",[707,135859,135860],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[15,135863,135864,135865],{},"2.把图片转换为块级元素 ",[707,135866,135867],{},"display: block",[15,135869,135870],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[15,135872,135873],{},"img {",[15,135875,135876],{},"vertical-align:middle;",[15,135878,1500],{},[531,135880,135882],{"id":135881},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[15,135884,135885],{},"效果：",[1891,135887],{"style":126698,"src":135888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[15,135890,135891],{},"单行文本溢出显示省略号--必须满足三个条件：",[63,135893,135895],{"className":126842,"code":135894,"language":126844,"meta":68,"style":68},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[34,135896,135897,135902,135908,135918,135923,135933],{"__ignoreMap":68},[72,135898,135899],{"class":74,"line":75},[72,135900,135901],{"class":621},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[72,135903,135904,135906],{"class":74,"line":370},[72,135905,1891],{"class":51718},[72,135907,15998],{"class":82},[72,135909,135910,135912,135914,135916],{"class":74,"line":1608},[72,135911,135832],{"class":362},[72,135913,51855],{"class":82},[72,135915,135837],{"class":362},[72,135917,1719],{"class":82},[72,135919,135920],{"class":74,"line":1623},[72,135921,135922],{"class":621},"  \u002F* 或 *\u002F\n",[72,135924,135925,135927,135929,135931],{"class":74,"line":1629},[72,135926,128458],{"class":362},[72,135928,51855],{"class":82},[72,135930,61287],{"class":362},[72,135932,1719],{"class":82},[72,135934,135935],{"class":74,"line":1643},[72,135936,1994],{"class":82},[531,135938,135940],{"id":135939},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[15,135942,135885],{},[1891,135944],{"style":126698,"src":135945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[15,135947,135948,135949,135952],{},"多行文本溢出显示省略号， ",[707,135950,135951],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[63,135954,135955],{"className":126842,"code":135894,"language":126844,"meta":68,"style":68},[34,135956,135957,135961,135967,135977,135981,135991],{"__ignoreMap":68},[72,135958,135959],{"class":74,"line":75},[72,135960,135901],{"class":621},[72,135962,135963,135965],{"class":74,"line":370},[72,135964,1891],{"class":51718},[72,135966,15998],{"class":82},[72,135968,135969,135971,135973,135975],{"class":74,"line":1608},[72,135970,135832],{"class":362},[72,135972,51855],{"class":82},[72,135974,135837],{"class":362},[72,135976,1719],{"class":82},[72,135978,135979],{"class":74,"line":1623},[72,135980,135922],{"class":621},[72,135982,135983,135985,135987,135989],{"class":74,"line":1629},[72,135984,128458],{"class":362},[72,135986,51855],{"class":82},[72,135988,61287],{"class":362},[72,135990,1719],{"class":82},[72,135992,135993],{"class":74,"line":1643},[72,135994,1994],{"class":82},[15,135996,135997],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[85,135999,136001],{"id":136000},"_133-常见布局技巧","13.3 常见布局技巧",[15,136003,136004],{},[707,136005,136006],{},"巧妙利用一个技术更快更好的布局：",[22,136008,136009,136012,136015,136018],{},[25,136010,136011],{},"margin负值的运用",[25,136013,136014],{},"文字围绕浮动元素",[25,136016,136017],{},"行内块的巧妙运用",[25,136019,136020],{},"CSS三角强化",[531,136022,136024],{"id":136023},"_1331-margin负值的运用","13.3.1 margin负值的运用",[15,136026,136027],{},"应用场景：",[1891,136029],{"style":126698,"src":136030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[1891,136032],{"style":126698,"src":136033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[15,136035,136036],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[15,136038,136039],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[63,136041,136042],{"className":126842,"code":130206,"language":126844,"meta":68,"style":68},[34,136043,136044,136048,136054,136070],{"__ignoreMap":68},[72,136045,136046],{"class":74,"line":75},[72,136047,130213],{"class":621},[72,136049,136050,136052],{"class":74,"line":370},[72,136051,52029],{"class":51718},[72,136053,15998],{"class":82},[72,136055,136056,136058,136060,136062,136064,136066,136068],{"class":74,"line":1608},[72,136057,71314],{"class":362},[72,136059,51855],{"class":82},[72,136061,772],{"class":362},[72,136063,51910],{"class":78},[72,136065,51939],{"class":362},[72,136067,130234],{"class":362},[72,136069,1719],{"class":82},[72,136071,136072],{"class":74,"line":1623},[72,136073,1994],{"class":82},[1891,136075],{"style":126698,"src":136076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[15,136078,136079],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[63,136081,136083],{"className":126842,"code":136082,"language":126844,"meta":68,"style":68},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[34,136084,136085,136090,136096,136106,136118,136130],{"__ignoreMap":68},[72,136086,136087],{"class":74,"line":75},[72,136088,136089],{"class":621},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[72,136091,136092,136094],{"class":74,"line":370},[72,136093,130690],{"class":358},[72,136095,15998],{"class":82},[72,136097,136098,136100,136102,136104],{"class":74,"line":1608},[72,136099,132648],{"class":362},[72,136101,51855],{"class":82},[72,136103,55182],{"class":362},[72,136105,1719],{"class":82},[72,136107,136108,136110,136112,136114,136116],{"class":74,"line":1623},[72,136109,132662],{"class":362},[72,136111,51855],{"class":82},[72,136113,1000],{"class":362},[72,136115,51910],{"class":78},[72,136117,1719],{"class":82},[72,136119,136120,136122,136124,136126,136128],{"class":74,"line":1629},[72,136121,132679],{"class":362},[72,136123,51855],{"class":82},[72,136125,1254],{"class":362},[72,136127,51910],{"class":78},[72,136129,1719],{"class":82},[72,136131,136132],{"class":74,"line":1643},[72,136133,1994],{"class":82},[15,136135,136136],{},"加上上述代码会发现：",[1891,136138],{"style":126698,"src":136139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[15,136141,136142],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[15,136144,136145],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[63,136147,136148],{"className":126842,"code":136082,"language":126844,"meta":68,"style":68},[34,136149,136150,136154,136160,136170,136182,136194],{"__ignoreMap":68},[72,136151,136152],{"class":74,"line":75},[72,136153,136089],{"class":621},[72,136155,136156,136158],{"class":74,"line":370},[72,136157,130690],{"class":358},[72,136159,15998],{"class":82},[72,136161,136162,136164,136166,136168],{"class":74,"line":1608},[72,136163,132648],{"class":362},[72,136165,51855],{"class":82},[72,136167,55182],{"class":362},[72,136169,1719],{"class":82},[72,136171,136172,136174,136176,136178,136180],{"class":74,"line":1623},[72,136173,132662],{"class":362},[72,136175,51855],{"class":82},[72,136177,1000],{"class":362},[72,136179,51910],{"class":78},[72,136181,1719],{"class":82},[72,136183,136184,136186,136188,136190,136192],{"class":74,"line":1629},[72,136185,132679],{"class":362},[72,136187,51855],{"class":82},[72,136189,1254],{"class":362},[72,136191,51910],{"class":78},[72,136193,1719],{"class":82},[72,136195,136196],{"class":74,"line":1643},[72,136197,1994],{"class":82},[15,136199,136200],{},"解决方式2：",[15,136202,136203],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[63,136205,136207],{"className":126842,"code":136206,"language":126844,"meta":68,"style":68},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[34,136208,136209,136215,136225,136237,136249],{"__ignoreMap":68},[72,136210,136211,136213],{"class":74,"line":75},[72,136212,52029],{"class":51718},[72,136214,15998],{"class":82},[72,136216,136217,136219,136221,136223],{"class":74,"line":370},[72,136218,132648],{"class":362},[72,136220,51855],{"class":82},[72,136222,55182],{"class":362},[72,136224,1719],{"class":82},[72,136226,136227,136229,136231,136233,136235],{"class":74,"line":1608},[72,136228,132662],{"class":362},[72,136230,51855],{"class":82},[72,136232,1000],{"class":362},[72,136234,51910],{"class":78},[72,136236,1719],{"class":82},[72,136238,136239,136241,136243,136245,136247],{"class":74,"line":1623},[72,136240,132679],{"class":362},[72,136242,51855],{"class":82},[72,136244,1254],{"class":362},[72,136246,51910],{"class":78},[72,136248,1719],{"class":82},[72,136250,136251],{"class":74,"line":1629},[72,136252,1994],{"class":82},[531,136254,136256],{"id":136255},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[15,136258,136027],{},[1891,136260],{"style":126698,"src":136261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[15,136263,136264],{},"实现结构图：",[1891,136266],{"style":126698,"src":136267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[15,136269,136270],{},"巧妙运用浮动元素不会压住文字的特性",[15,136272,136273],{},"代码显示：",[63,136275,136277],{"className":126842,"code":136276,"language":126844,"meta":68,"style":68},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[34,136278,136279,136285,136295,136299,136304,136308,136314,136328],{"__ignoreMap":68},[72,136280,136281,136283],{"class":74,"line":75},[72,136282,130690],{"class":358},[72,136284,15998],{"class":82},[72,136286,136287,136289,136291,136293],{"class":74,"line":370},[72,136288,131322],{"class":362},[72,136290,51855],{"class":82},[72,136292,165],{"class":362},[72,136294,1719],{"class":82},[72,136296,136297],{"class":74,"line":1608},[72,136298,1994],{"class":82},[72,136300,136301],{"class":74,"line":1623},[72,136302,136303],{"class":82},"```Css\n",[72,136305,136306],{"class":74,"line":1629},[72,136307,130685],{"class":621},[72,136309,136310,136312],{"class":74,"line":1643},[72,136311,130690],{"class":358},[72,136313,15998],{"class":82},[72,136315,136316,136318,136320,136322,136324,136326],{"class":74,"line":1649},[72,136317,70888],{"class":362},[72,136319,51855],{"class":82},[72,136321,747],{"class":362},[72,136323,51974],{"class":362},[72,136325,130705],{"class":82},[72,136327,130708],{"class":621},[72,136329,136330],{"class":74,"line":1740},[72,136331,1994],{"class":82},[15,136333,136334],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[63,136336,136339],{"className":136337,"code":136338,"language":127},[125],"\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",[34,136340,136338],{"__ignoreMap":68},[1891,136342],{"style":126698,"src":136343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[15,136345,136346],{},"最终展示结果：",[63,136348,136349],{"className":126842,"code":130678,"language":126844,"meta":68,"style":68},[34,136350,136351,136355,136361,136375],{"__ignoreMap":68},[72,136352,136353],{"class":74,"line":75},[72,136354,130685],{"class":621},[72,136356,136357,136359],{"class":74,"line":370},[72,136358,130690],{"class":358},[72,136360,15998],{"class":82},[72,136362,136363,136365,136367,136369,136371,136373],{"class":74,"line":1608},[72,136364,70888],{"class":362},[72,136366,51855],{"class":82},[72,136368,747],{"class":362},[72,136370,51974],{"class":362},[72,136372,130705],{"class":82},[72,136374,130708],{"class":621},[72,136376,136377],{"class":74,"line":1623},[72,136378,1994],{"class":82},[1891,136380],{"style":126698,"src":136381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[85,136383,136385],{"id":136384},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[531,136387,136389],{"id":136388},"_1341-原理","13.4.1 原理",[1891,136391],{"style":126698,"src":136392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[63,136394,136395],{"className":126842,"code":130678,"language":126844,"meta":68,"style":68},[34,136396,136397,136401,136407,136421],{"__ignoreMap":68},[72,136398,136399],{"class":74,"line":75},[72,136400,130685],{"class":621},[72,136402,136403,136405],{"class":74,"line":370},[72,136404,130690],{"class":358},[72,136406,15998],{"class":82},[72,136408,136409,136411,136413,136415,136417,136419],{"class":74,"line":1608},[72,136410,70888],{"class":362},[72,136412,51855],{"class":82},[72,136414,747],{"class":362},[72,136416,51974],{"class":362},[72,136418,130705],{"class":82},[72,136420,130708],{"class":621},[72,136422,136423],{"class":74,"line":1623},[72,136424,1994],{"class":82},[531,136426,136428],{"id":136427},"_1342-实例","13.4.2 实例",[1891,136430],{"style":126698,"src":136431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[63,136433,136434],{"className":126842,"code":131308,"language":126844,"meta":68,"style":68},[34,136435,136436,136442,136452,136456,136462,136472],{"__ignoreMap":68},[72,136437,136438,136440],{"class":74,"line":75},[72,136439,131315],{"class":358},[72,136441,15998],{"class":82},[72,136443,136444,136446,136448,136450],{"class":74,"line":370},[72,136445,131322],{"class":362},[72,136447,51855],{"class":82},[72,136449,165],{"class":362},[72,136451,1719],{"class":82},[72,136453,136454],{"class":74,"line":1608},[72,136455,1994],{"class":82},[72,136457,136458,136460],{"class":74,"line":1623},[72,136459,131337],{"class":358},[72,136461,15998],{"class":82},[72,136463,136464,136466,136468,136470],{"class":74,"line":1629},[72,136465,131322],{"class":362},[72,136467,51855],{"class":82},[72,136469,72940],{"class":362},[72,136471,1719],{"class":82},[72,136473,136474],{"class":74,"line":1643},[72,136475,1994],{"class":82},[85,136477,136479],{"id":136478},"_135-css的初始化","13.5 css的初始化",[15,136481,136482],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[15,136484,136485],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[15,136487,136488],{},"每个网页都必须首先进行 CSS初始化。",[15,136490,136491],{},"这里我们以 京东CSS初始化代码为例。",[15,136493,136494],{},"在网页右键查看网页源代码",[15,136496,136497],{},"找到css的link引入语句",[15,136499,136500],{},"然后ctrl+f 输入body",[15,136502,77644],{},[1891,136504],{"style":126698,"src":136505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[15,136507,77667],{},[1891,136509],{"style":126698,"src":136510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[15,136512,136513],{},"③打开了网页上传压缩的代码",[1891,136515],{"style":126698,"src":136516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[15,136518,136519],{},"④从body前可以查看这个网页的初始化代码",[15,136521,136522],{},[707,136523,136524],{},"Unicode编码字体：",[15,136526,136527],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[15,136529,83624],{},[15,136531,136532],{},"黑体 \\9ED1\\4F53",[15,136534,136535],{},"宋体 \\5B8B\\4F53",[15,136537,136538],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[473,136540,136541],{},"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":68,"searchDepth":370,"depth":370,"links":136543},[136544,136545,136552,136556,136560],{"id":135341,"depth":370,"text":135342},{"id":135463,"depth":370,"text":135464,"children":136546},[136547,136548,136549,136550,136551],{"id":135467,"depth":1608,"text":135468},{"id":135620,"depth":1608,"text":135621},{"id":135739,"depth":1608,"text":135740},{"id":135881,"depth":1608,"text":135882},{"id":135939,"depth":1608,"text":135940},{"id":136000,"depth":370,"text":136001,"children":136553},[136554,136555],{"id":136023,"depth":1608,"text":136024},{"id":136255,"depth":1608,"text":136256},{"id":136384,"depth":370,"text":136385,"children":136557},[136558,136559],{"id":136388,"depth":1608,"text":136389},{"id":136427,"depth":1608,"text":136428},{"id":136478,"depth":370,"text":136479},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135333,"description":23802},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136567,"title":136568,"body":136569,"description":23802,"extension":487,"meta":138255,"navigation":490,"path":138256,"seo":138257,"stem":138258,"__hash__":138259},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136570,"toc":138244},[136571,136574,136578,136582,136585,136592,136595,136598,136636,136639,136641,136655,136659,136668,136672,136677,136680,136683,136686,136721,136726,136729,136759,136762,136767,136770,136773,136803,136806,136860,136863,136867,136872,136884,136887,136891,136921,136924,136929,136932,136962,136965,136969,136986,136990,136994,136997,137030,137033,137037,137040,137043,137046,137049,137052,137163,137166,137169,137172,137274,137277,137281,137285,137289,137292,137332,137335,137337,137353,137357,137360,137365,137446,137449,137452,137578,137583,137586,137594,137597,137602,137687,137690,137694,137697,137700,137704,137724,137729,137813,137816,137821,137824,137827,137905,137908,137911,137914,137917,137920,137925,137928,137931,138003,138006,138011,138014,138111,138114,138120,138123,138126,138129,138132,138135,138138,138141,138144,138148,138153,138156,138189,138194,138197,138238,138241],[10,136572,136568],{"id":136573},"_14-html5与css3新特性",[85,136575,136577],{"id":136576},"_141-html5的新特性","14.1 HTML5的新特性",[531,136579,136581],{"id":136580},"_1411-基本标签","14.1.1 基本标签",[15,136583,136584],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[15,136586,136587,136588,136591],{},"这些新特性都有兼容性问题，基本是 ",[707,136589,136590],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[15,136593,136594],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[15,136596,136597],{},"现在使用的是新特性：",[251,136599,136600,136606,136612,136618,136624,136630],{},[25,136601,136602,136605],{},[34,136603,136604],{},"\u003Cheader>"," 头部标签",[25,136607,136608,136611],{},[34,136609,136610],{},"\u003Cnav>"," 导航标签",[25,136613,136614,136617],{},[34,136615,136616],{},"\u003Carticle>"," 内容标签",[25,136619,136620,136623],{},[34,136621,136622],{},"\u003Csection>"," 定义文档某个区域",[25,136625,136626,136629],{},[34,136627,136628],{},"\u003Caside>"," 侧边栏标签",[25,136631,136632,136635],{},[34,136633,136634],{},"\u003Cfooter>"," 尾部标签",[1891,136637],{"style":126698,"src":136638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[15,136640,593],{},[251,136642,136643,136646,136649,136652],{},[25,136644,136645],{},"这种语义化标准主要是针对搜索引擎的",[25,136647,136648],{},"这些标签页面中可以经常使用",[25,136650,136651],{},"在IE9中，需要把这些元素转换为块级元素",[25,136653,136654],{},"移动端更喜欢使用这些标签",[531,136656,136658],{"id":136657},"_1412-多媒体标签","14.1.2 多媒体标签",[15,136660,136661,136662,136664,136665,136667],{},"音频 ",[707,136663,28596],{}," 和视频 ",[707,136666,28605],{}," 两个标签",[22423,136669,136671],{"id":136670},"_14121-视频标签-video","14.1.2.1 视频标签- video",[22,136673,136674],{},[25,136675,136676],{},"支持格式：",[1891,136678],{"style":126698,"src":136679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[15,136681,136682],{},"尽量使用MP4，兼容性好",[15,136684,136685],{},"用MP4就可以",[63,136687,136689],{"className":127589,"code":136688,"language":127591,"meta":68,"style":68},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[34,136690,136691],{"__ignoreMap":68},[72,136692,136693,136695,136697,136699,136701,136704,136706,136709,136712,136715,136717,136719],{"class":74,"line":75},[72,136694,1464],{"class":82},[72,136696,28605],{"class":51718},[72,136698,55657],{"class":358},[72,136700,609],{"class":82},[72,136702,136703],{"class":366},"\"movie.mp4\"",[72,136705,92840],{"class":358},[72,136707,136708],{"class":358}," autoplay",[72,136710,136711],{"class":358}," muted",[72,136713,136714],{"class":358}," loop",[72,136716,55732],{"class":82},[72,136718,28605],{"class":51718},[72,136720,51725],{"class":82},[22,136722,136723],{"start":370},[25,136724,136725],{},"兼容写法",[15,136727,136728],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[63,136730,136731],{"className":127589,"code":136688,"language":127591,"meta":68,"style":68},[34,136732,136733],{"__ignoreMap":68},[72,136734,136735,136737,136739,136741,136743,136745,136747,136749,136751,136753,136755,136757],{"class":74,"line":75},[72,136736,1464],{"class":82},[72,136738,28605],{"class":51718},[72,136740,55657],{"class":358},[72,136742,609],{"class":82},[72,136744,136703],{"class":366},[72,136746,92840],{"class":358},[72,136748,136708],{"class":358},[72,136750,136711],{"class":358},[72,136752,136714],{"class":358},[72,136754,55732],{"class":82},[72,136756,28605],{"class":51718},[72,136758,51725],{"class":82},[15,136760,136761],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[22,136763,136764],{"start":1608},[25,136765,136766],{},"video常用属性",[1891,136768],{"style":126698,"src":136769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[15,136771,136772],{},"poster属性后面是跟的等待加载图片的地址",[63,136774,136775],{"className":127589,"code":134344,"language":127591,"meta":68,"style":68},[34,136776,136777],{"__ignoreMap":68},[72,136778,136779,136781,136783,136785,136787,136789,136791,136793,136795,136797,136799,136801],{"class":74,"line":75},[72,136780,1464],{"class":82},[72,136782,1891],{"class":51718},[72,136784,55657],{"class":358},[72,136786,609],{"class":82},[72,136788,134359],{"class":366},[72,136790,55665],{"class":358},[72,136792,609],{"class":82},[72,136794,134366],{"class":366},[72,136796,134369],{"class":358},[72,136798,609],{"class":82},[72,136800,134374],{"class":366},[72,136802,51725],{"class":82},[15,136804,136805],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[63,136807,136809],{"className":126842,"code":136808,"language":126844,"meta":68,"style":68},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[34,136810,136811,136816,136822,136846,136851,136856],{"__ignoreMap":68},[72,136812,136813],{"class":74,"line":75},[72,136814,136815],{"class":621},"\u002F* 2D 位移 *\u002F\n",[72,136817,136818,136820],{"class":74,"line":370},[72,136819,52029],{"class":51718},[72,136821,15998],{"class":82},[72,136823,136824,136827,136829,136832,136834,136836,136838,136840,136842,136844],{"class":74,"line":1608},[72,136825,136826],{"class":362},"  transform",[72,136828,51855],{"class":82},[72,136830,136831],{"class":362},"translate",[72,136833,564],{"class":82},[72,136835,865],{"class":362},[72,136837,51910],{"class":78},[72,136839,12861],{"class":82},[72,136841,1210],{"class":362},[72,136843,51910],{"class":78},[72,136845,3147],{"class":82},[72,136847,136848],{"class":74,"line":1623},[72,136849,136850],{"class":621},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[72,136852,136853],{"class":74,"line":1629},[72,136854,136855],{"class":621},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[72,136857,136858],{"class":74,"line":1643},[72,136859,1994],{"class":82},[15,136861,136862],{},"muted:自动静音属性",[22423,136864,136866],{"id":136865},"_14122-音频标签audio","14.1.2.2 音频标签audio",[22,136868,136869],{},[25,136870,136871],{},"基本使用",[15,136873,136874,136875,136880,136881],{},"当前 ",[707,136876,136877],{},[34,136878,136879],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[707,136882,136883],{},"mp3格式",[1891,136885],{"style":126698,"src":136886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[22,136888,136889],{"start":370},[25,136890,136725],{},[63,136892,136893],{"className":127589,"code":136688,"language":127591,"meta":68,"style":68},[34,136894,136895],{"__ignoreMap":68},[72,136896,136897,136899,136901,136903,136905,136907,136909,136911,136913,136915,136917,136919],{"class":74,"line":75},[72,136898,1464],{"class":82},[72,136900,28605],{"class":51718},[72,136902,55657],{"class":358},[72,136904,609],{"class":82},[72,136906,136703],{"class":366},[72,136908,92840],{"class":358},[72,136910,136708],{"class":358},[72,136912,136711],{"class":358},[72,136914,136714],{"class":358},[72,136916,55732],{"class":82},[72,136918,28605],{"class":51718},[72,136920,51725],{"class":82},[15,136922,136923],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[22,136925,136926],{"start":1608},[25,136927,136928],{},"常用属性",[1891,136930],{"style":126698,"src":136931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[63,136933,136934],{"className":127589,"code":136688,"language":127591,"meta":68,"style":68},[34,136935,136936],{"__ignoreMap":68},[72,136937,136938,136940,136942,136944,136946,136948,136950,136952,136954,136956,136958,136960],{"class":74,"line":75},[72,136939,1464],{"class":82},[72,136941,28605],{"class":51718},[72,136943,55657],{"class":358},[72,136945,609],{"class":82},[72,136947,136703],{"class":366},[72,136949,92840],{"class":358},[72,136951,136708],{"class":358},[72,136953,136711],{"class":358},[72,136955,136714],{"class":358},[72,136957,55732],{"class":82},[72,136959,28605],{"class":51718},[72,136961,51725],{"class":82},[15,136963,136964],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[22423,136966,136968],{"id":136967},"_14123-总结","14.1.2.3 总结",[251,136970,136971,136974,136977,136980,136983],{},[25,136972,136973],{},"音频标签和视频标签使用方式基本一致",[25,136975,136976],{},"浏览器支持情况不同",[25,136978,136979],{},"谷歌浏览器把音频和视频自动播放禁止了",[25,136981,136982],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[25,136984,136985],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[531,136987,136989],{"id":136988},"_1413-表单元素","14.1.3 表单元素",[22423,136991,136993],{"id":136992},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[1891,136995],{"style":126698,"src":136996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[63,136998,137000],{"className":127589,"code":136999,"language":127591,"meta":68,"style":68},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[34,137001,137002],{"__ignoreMap":68},[72,137003,137004,137006,137008,137010,137012,137014,137016,137018,137021,137023,137025,137028],{"class":74,"line":75},[72,137005,1464],{"class":82},[72,137007,54239],{"class":51718},[72,137009,54242],{"class":358},[72,137011,609],{"class":82},[72,137013,63117],{"class":366},[72,137015,15346],{"class":358},[72,137017,609],{"class":82},[72,137019,137020],{"class":366},"\"username\"",[72,137022,61438],{"class":358},[72,137024,609],{"class":82},[72,137026,137027],{"class":366},"\"请输入用户名\"",[72,137029,51725],{"class":82},[1891,137031],{"style":126698,"src":137032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[22423,137034,137036],{"id":137035},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[1891,137038],{"style":126698,"src":137039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[15,137041,137042],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[15,137044,137045],{},"快捷操作：",[1891,137047],{"style":126698,"src":137048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[15,137050,137051],{},"例子1：",[63,137053,137055],{"className":127589,"code":137054,"language":127591,"meta":68,"style":68},"\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",[34,137056,137057,137080,137107,137136,137155],{"__ignoreMap":68},[72,137058,137059,137061,137063,137065,137067,137070,137073,137075,137078],{"class":74,"line":75},[72,137060,1464],{"class":82},[72,137062,67043],{"class":51718},[72,137064,67046],{"class":358},[72,137066,609],{"class":82},[72,137068,137069],{"class":366},"\"\u002Fsubmit\"",[72,137071,137072],{"class":358}," method",[72,137074,609],{"class":82},[72,137076,137077],{"class":366},"\"post\"",[72,137079,51725],{"class":82},[72,137081,137082,137084,137086,137088,137090,137092,137094,137096,137098,137100,137102,137105],{"class":74,"line":370},[72,137083,52562],{"class":82},[72,137085,54239],{"class":51718},[72,137087,54242],{"class":358},[72,137089,609],{"class":82},[72,137091,63117],{"class":366},[72,137093,15346],{"class":358},[72,137095,609],{"class":82},[72,137097,137020],{"class":366},[72,137099,61438],{"class":358},[72,137101,609],{"class":82},[72,137103,137104],{"class":366},"\"用户名\"",[72,137106,51725],{"class":82},[72,137108,137109,137111,137113,137115,137117,137120,137122,137124,137127,137129,137131,137134],{"class":74,"line":1608},[72,137110,52562],{"class":82},[72,137112,54239],{"class":51718},[72,137114,54242],{"class":358},[72,137116,609],{"class":82},[72,137118,137119],{"class":366},"\"password\"",[72,137121,15346],{"class":358},[72,137123,609],{"class":82},[72,137125,137126],{"class":366},"\"pwd\"",[72,137128,61438],{"class":358},[72,137130,609],{"class":82},[72,137132,137133],{"class":366},"\"密码\"",[72,137135,51725],{"class":82},[72,137137,137138,137140,137142,137144,137146,137148,137151,137153],{"class":74,"line":1623},[72,137139,52562],{"class":82},[72,137141,54305],{"class":51718},[72,137143,54242],{"class":358},[72,137145,609],{"class":82},[72,137147,67066],{"class":366},[72,137149,137150],{"class":82},">提交\u003C\u002F",[72,137152,54305],{"class":51718},[72,137154,51725],{"class":82},[72,137156,137157,137159,137161],{"class":74,"line":1629},[72,137158,52203],{"class":82},[72,137160,67043],{"class":51718},[72,137162,51725],{"class":82},[1891,137164],{"style":126698,"src":137165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[15,137167,137168],{},"value是表单域的内容",[15,137170,137171],{},"例子2：",[63,137173,137174],{"className":127589,"code":137054,"language":127591,"meta":68,"style":68},[34,137175,137176,137196,137222,137248,137266],{"__ignoreMap":68},[72,137177,137178,137180,137182,137184,137186,137188,137190,137192,137194],{"class":74,"line":75},[72,137179,1464],{"class":82},[72,137181,67043],{"class":51718},[72,137183,67046],{"class":358},[72,137185,609],{"class":82},[72,137187,137069],{"class":366},[72,137189,137072],{"class":358},[72,137191,609],{"class":82},[72,137193,137077],{"class":366},[72,137195,51725],{"class":82},[72,137197,137198,137200,137202,137204,137206,137208,137210,137212,137214,137216,137218,137220],{"class":74,"line":370},[72,137199,52562],{"class":82},[72,137201,54239],{"class":51718},[72,137203,54242],{"class":358},[72,137205,609],{"class":82},[72,137207,63117],{"class":366},[72,137209,15346],{"class":358},[72,137211,609],{"class":82},[72,137213,137020],{"class":366},[72,137215,61438],{"class":358},[72,137217,609],{"class":82},[72,137219,137104],{"class":366},[72,137221,51725],{"class":82},[72,137223,137224,137226,137228,137230,137232,137234,137236,137238,137240,137242,137244,137246],{"class":74,"line":1608},[72,137225,52562],{"class":82},[72,137227,54239],{"class":51718},[72,137229,54242],{"class":358},[72,137231,609],{"class":82},[72,137233,137119],{"class":366},[72,137235,15346],{"class":358},[72,137237,609],{"class":82},[72,137239,137126],{"class":366},[72,137241,61438],{"class":358},[72,137243,609],{"class":82},[72,137245,137133],{"class":366},[72,137247,51725],{"class":82},[72,137249,137250,137252,137254,137256,137258,137260,137262,137264],{"class":74,"line":1623},[72,137251,52562],{"class":82},[72,137253,54305],{"class":51718},[72,137255,54242],{"class":358},[72,137257,609],{"class":82},[72,137259,67066],{"class":366},[72,137261,137150],{"class":82},[72,137263,54305],{"class":51718},[72,137265,51725],{"class":82},[72,137267,137268,137270,137272],{"class":74,"line":1629},[72,137269,52203],{"class":82},[72,137271,67043],{"class":51718},[72,137273,51725],{"class":82},[1891,137275],{"style":126698,"src":137276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[85,137278,137280],{"id":137279},"_142-css新特性","14.2 CSS新特性",[531,137282,137284],{"id":137283},"_1421-新增选择器","14.2.1 新增选择器",[22423,137286,137288],{"id":137287},"_14211-属性选择器","14.2.1.1 属性选择器",[1891,137290],{"style":126698,"src":137291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[63,137293,137295],{"className":126842,"code":137294,"language":126844,"meta":68,"style":68},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[34,137296,137297,137312,137328],{"__ignoreMap":68},[72,137298,137299,137301,137303,137305,137307,137309],{"class":74,"line":75},[72,137300,54239],{"class":51718},[72,137302,1444],{"class":82},[72,137304,103511],{"class":358},[72,137306,609],{"class":78},[72,137308,63117],{"class":366},[72,137310,137311],{"class":82},"] {\n",[72,137313,137314,137316,137318,137320,137322,137324,137326],{"class":74,"line":370},[72,137315,71314],{"class":362},[72,137317,51855],{"class":82},[72,137319,772],{"class":362},[72,137321,51910],{"class":78},[72,137323,51939],{"class":362},[72,137325,130422],{"class":362},[72,137327,1719],{"class":82},[72,137329,137330],{"class":74,"line":1608},[72,137331,1994],{"class":82},[1891,137333],{"style":126698,"src":137334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[15,137336,593],{},[251,137338,137339,137342,137345,137348],{},[25,137340,137341],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[25,137343,137344],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[25,137346,137347],{},"属性选择器也可以选择出来自定义的属性",[25,137349,137350,137352],{},[707,137351,9451],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[22423,137354,137356],{"id":137355},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[1891,137358],{"style":126698,"src":137359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[22,137361,137362],{},[25,137363,137364],{},"fist-child",[63,137366,137368],{"className":126842,"code":137367,"language":126844,"meta":68,"style":68},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[34,137369,137370,137375,137390,137410,137428],{"__ignoreMap":68},[72,137371,137372],{"class":74,"line":75},[72,137373,137374],{"class":621},"\u002F* 属性选择器 *\u002F\n",[72,137376,137377,137379,137381,137383,137385,137387],{"class":74,"line":370},[72,137378,54239],{"class":51718},[72,137380,1444],{"class":82},[72,137382,103511],{"class":358},[72,137384,609],{"class":78},[72,137386,63117],{"class":366},[72,137388,137389],{"class":82},"] { }\n",[72,137391,137392,137394,137396,137398,137401,137404,137407],{"class":74,"line":1608},[72,137393,54239],{"class":51718},[72,137395,1444],{"class":82},[72,137397,15120],{"class":358},[72,137399,137400],{"class":78},"^=",[72,137402,137403],{"class":366},"\"icon\"",[72,137405,137406],{"class":82},"] { }  ",[72,137408,137409],{"class":621},"\u002F* 以 icon 开头 *\u002F\n",[72,137411,137412,137414,137416,137418,137421,137423,137425],{"class":74,"line":1623},[72,137413,54239],{"class":51718},[72,137415,1444],{"class":82},[72,137417,15120],{"class":358},[72,137419,137420],{"class":78},"$=",[72,137422,137403],{"class":366},[72,137424,137406],{"class":82},[72,137426,137427],{"class":621},"\u002F* 以 icon 结尾 *\u002F\n",[72,137429,137430,137432,137434,137436,137439,137441,137443],{"class":74,"line":1629},[72,137431,54239],{"class":51718},[72,137433,1444],{"class":82},[72,137435,15120],{"class":358},[72,137437,137438],{"class":78},"*=",[72,137440,137403],{"class":366},[72,137442,137406],{"class":82},[72,137444,137445],{"class":621},"\u002F* 包含 icon *\u002F\n",[15,137447,137448],{},"ul的第一个儿子文本为红色",[15,137450,137451],{},"一定要在冒号前加空格，不然就是选中所有的了",[63,137453,137455],{"className":126842,"code":137454,"language":126844,"meta":68,"style":68},".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",[34,137456,137457,137463,137473,137477,137481,137486,137499,137512,137528,137545,137562],{"__ignoreMap":68},[72,137458,137459,137461],{"class":74,"line":75},[72,137460,127133],{"class":358},[72,137462,15998],{"class":82},[72,137464,137465,137467,137469,137471],{"class":74,"line":370},[72,137466,71323],{"class":362},[72,137468,51855],{"class":82},[72,137470,57839],{"class":362},[72,137472,1719],{"class":82},[72,137474,137475],{"class":74,"line":1608},[72,137476,1994],{"class":82},[72,137478,137479],{"class":74,"line":1623},[72,137480,136303],{"class":82},[72,137482,137483],{"class":74,"line":1629},[72,137484,137485],{"class":621},"\u002F* 结构伪类选择器 *\u002F\n",[72,137487,137488,137490,137493,137496],{"class":74,"line":1643},[72,137489,25],{"class":51718},[72,137491,137492],{"class":358},":first-child",[72,137494,137495],{"class":82}," { }           ",[72,137497,137498],{"class":621},"\u002F* 第一个 *\u002F\n",[72,137500,137501,137503,137506,137509],{"class":74,"line":1649},[72,137502,25],{"class":51718},[72,137504,137505],{"class":358},":last-child",[72,137507,137508],{"class":82}," { }            ",[72,137510,137511],{"class":621},"\u002F* 最后一个 *\u002F\n",[72,137513,137514,137516,137518,137520,137522,137525],{"class":74,"line":1740},[72,137515,25],{"class":51718},[72,137517,129756],{"class":358},[72,137519,564],{"class":82},[72,137521,640],{"class":362},[72,137523,137524],{"class":82},") { }          ",[72,137526,137527],{"class":621},"\u002F* 第2个 *\u002F\n",[72,137529,137530,137532,137534,137536,137539,137542],{"class":74,"line":1746},[72,137531,25],{"class":51718},[72,137533,129756],{"class":358},[72,137535,564],{"class":82},[72,137537,137538],{"class":362},"2n",[72,137540,137541],{"class":82},") { }         ",[72,137543,137544],{"class":621},"\u002F* 偶数 *\u002F\n",[72,137546,137547,137549,137551,137553,137556,137559],{"class":74,"line":1758},[72,137548,25],{"class":51718},[72,137550,129756],{"class":358},[72,137552,564],{"class":82},[72,137554,137555],{"class":362},"2n+1",[72,137557,137558],{"class":82},") { }       ",[72,137560,137561],{"class":621},"\u002F* 奇数 *\u002F\n",[72,137563,137564,137566,137568,137570,137573,137575],{"class":74,"line":2041},[72,137565,25],{"class":51718},[72,137567,129756],{"class":358},[72,137569,564],{"class":82},[72,137571,137572],{"class":362},"-n+3",[72,137574,137558],{"class":82},[72,137576,137577],{"class":621},"\u002F* 前3个 *\u002F\n",[52029,137579,137582],{"className":137580},[137581],"example","\n  示例内容\n",[15,137584,137585],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[251,137587,137588],{},[25,137589,137590,137593],{},[34,137591,137592],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[15,137595,137596],{},"也就是说它选择的是熊大",[22,137598,137599],{"start":1643},[25,137600,137601],{},"权重",[63,137603,137605],{"className":126842,"code":137604,"language":126844,"meta":68,"style":68},"\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",[34,137606,137607,137611,137621,137631,137645,137659,137673],{"__ignoreMap":68},[72,137608,137609],{"class":74,"line":75},[72,137610,137485],{"class":621},[72,137612,137613,137615,137617,137619],{"class":74,"line":370},[72,137614,25],{"class":51718},[72,137616,137492],{"class":358},[72,137618,137495],{"class":82},[72,137620,137498],{"class":621},[72,137622,137623,137625,137627,137629],{"class":74,"line":1608},[72,137624,25],{"class":51718},[72,137626,137505],{"class":358},[72,137628,137508],{"class":82},[72,137630,137511],{"class":621},[72,137632,137633,137635,137637,137639,137641,137643],{"class":74,"line":1623},[72,137634,25],{"class":51718},[72,137636,129756],{"class":358},[72,137638,564],{"class":82},[72,137640,640],{"class":362},[72,137642,137524],{"class":82},[72,137644,137527],{"class":621},[72,137646,137647,137649,137651,137653,137655,137657],{"class":74,"line":1629},[72,137648,25],{"class":51718},[72,137650,129756],{"class":358},[72,137652,564],{"class":82},[72,137654,137538],{"class":362},[72,137656,137541],{"class":82},[72,137658,137544],{"class":621},[72,137660,137661,137663,137665,137667,137669,137671],{"class":74,"line":1643},[72,137662,25],{"class":51718},[72,137664,129756],{"class":358},[72,137666,564],{"class":82},[72,137668,137555],{"class":362},[72,137670,137558],{"class":82},[72,137672,137561],{"class":621},[72,137674,137675,137677,137679,137681,137683,137685],{"class":74,"line":1649},[72,137676,25],{"class":51718},[72,137678,129756],{"class":358},[72,137680,564],{"class":82},[72,137682,137572],{"class":362},[72,137684,137558],{"class":82},[72,137686,137577],{"class":621},[15,137688,137689],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[22423,137691,137693],{"id":137692},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[15,137695,137696],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[1891,137698],{"style":126698,"src":137699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[22,137701,137702],{},[25,137703,593],{},[251,137705,137706,137709,137712,137715,137718,137721],{},[25,137707,137708],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[25,137710,137711],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[25,137713,137714],{},"语法： element::before {}",[25,137716,137717],{},"before 和 after 必须有 content 属性",[25,137719,137720],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[25,137722,137723],{},"伪元素选择器和标签选择器一样，权重为 1",[22,137725,137726],{"start":370},[25,137727,137728],{},"实例",[63,137730,137731],{"className":126842,"code":137604,"language":126844,"meta":68,"style":68},[34,137732,137733,137737,137747,137757,137771,137785,137799],{"__ignoreMap":68},[72,137734,137735],{"class":74,"line":75},[72,137736,137485],{"class":621},[72,137738,137739,137741,137743,137745],{"class":74,"line":370},[72,137740,25],{"class":51718},[72,137742,137492],{"class":358},[72,137744,137495],{"class":82},[72,137746,137498],{"class":621},[72,137748,137749,137751,137753,137755],{"class":74,"line":1608},[72,137750,25],{"class":51718},[72,137752,137505],{"class":358},[72,137754,137508],{"class":82},[72,137756,137511],{"class":621},[72,137758,137759,137761,137763,137765,137767,137769],{"class":74,"line":1623},[72,137760,25],{"class":51718},[72,137762,129756],{"class":358},[72,137764,564],{"class":82},[72,137766,640],{"class":362},[72,137768,137524],{"class":82},[72,137770,137527],{"class":621},[72,137772,137773,137775,137777,137779,137781,137783],{"class":74,"line":1629},[72,137774,25],{"class":51718},[72,137776,129756],{"class":358},[72,137778,564],{"class":82},[72,137780,137538],{"class":362},[72,137782,137541],{"class":82},[72,137784,137544],{"class":621},[72,137786,137787,137789,137791,137793,137795,137797],{"class":74,"line":1643},[72,137788,25],{"class":51718},[72,137790,129756],{"class":358},[72,137792,564],{"class":82},[72,137794,137555],{"class":362},[72,137796,137558],{"class":82},[72,137798,137561],{"class":621},[72,137800,137801,137803,137805,137807,137809,137811],{"class":74,"line":1649},[72,137802,25],{"class":51718},[72,137804,129756],{"class":358},[72,137806,564],{"class":82},[72,137808,137572],{"class":362},[72,137810,137558],{"class":82},[72,137812,137577],{"class":621},[1891,137814],{"style":126698,"src":137815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[22,137817,137818],{"start":1608},[25,137819,137820],{},"使用场景1",[1891,137822],{"style":126698,"src":137823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[15,137825,137826],{},"不需要再加盒子来整红色那部分了",[63,137828,137830],{"className":126842,"code":137829,"language":126844,"meta":68,"style":68},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[34,137831,137832,137837,137846,137857,137867,137871,137880,137891,137901],{"__ignoreMap":68},[72,137833,137834],{"class":74,"line":75},[72,137835,137836],{"class":621},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[72,137838,137839,137841,137844],{"class":74,"line":370},[72,137840,52029],{"class":51718},[72,137842,137843],{"class":358},"::before",[72,137845,15998],{"class":82},[72,137847,137848,137851,137853,137855],{"class":74,"line":1608},[72,137849,137850],{"class":362},"  content",[72,137852,51855],{"class":82},[72,137854,8078],{"class":366},[72,137856,1719],{"class":82},[72,137858,137859,137861,137863,137865],{"class":74,"line":1623},[72,137860,128458],{"class":362},[72,137862,51855],{"class":82},[72,137864,61287],{"class":362},[72,137866,1719],{"class":82},[72,137868,137869],{"class":74,"line":1629},[72,137870,1994],{"class":82},[72,137872,137873,137875,137878],{"class":74,"line":1643},[72,137874,52029],{"class":51718},[72,137876,137877],{"class":358},"::after",[72,137879,15998],{"class":82},[72,137881,137882,137884,137886,137889],{"class":74,"line":1649},[72,137883,137850],{"class":362},[72,137885,51855],{"class":82},[72,137887,137888],{"class":366},"\"→\"",[72,137890,1719],{"class":82},[72,137892,137893,137895,137897,137899],{"class":74,"line":1740},[72,137894,71323],{"class":362},[72,137896,51855],{"class":82},[72,137898,62488],{"class":362},[72,137900,1719],{"class":82},[72,137902,137903],{"class":74,"line":1746},[72,137904,1994],{"class":82},[1891,137906],{"style":126698,"src":137907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[15,137909,137910],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[1891,137912],{"style":126698,"src":137913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[15,137915,137916],{},"但是在引用时需要先转义一下",[15,137918,137919],{},"content='\\e930'",[22,137921,137922],{"start":1623},[25,137923,137924],{},"使用场景2",[15,137926,137927],{},"仿土豆效果",[15,137929,137930],{},"通过使用伪元素选择器可以减少body中盒子的数量",[63,137932,137933],{"className":126842,"code":137829,"language":126844,"meta":68,"style":68},[34,137934,137935,137939,137947,137957,137967,137971,137979,137989,137999],{"__ignoreMap":68},[72,137936,137937],{"class":74,"line":75},[72,137938,137836],{"class":621},[72,137940,137941,137943,137945],{"class":74,"line":370},[72,137942,52029],{"class":51718},[72,137944,137843],{"class":358},[72,137946,15998],{"class":82},[72,137948,137949,137951,137953,137955],{"class":74,"line":1608},[72,137950,137850],{"class":362},[72,137952,51855],{"class":82},[72,137954,8078],{"class":366},[72,137956,1719],{"class":82},[72,137958,137959,137961,137963,137965],{"class":74,"line":1623},[72,137960,128458],{"class":362},[72,137962,51855],{"class":82},[72,137964,61287],{"class":362},[72,137966,1719],{"class":82},[72,137968,137969],{"class":74,"line":1629},[72,137970,1994],{"class":82},[72,137972,137973,137975,137977],{"class":74,"line":1643},[72,137974,52029],{"class":51718},[72,137976,137877],{"class":358},[72,137978,15998],{"class":82},[72,137980,137981,137983,137985,137987],{"class":74,"line":1649},[72,137982,137850],{"class":362},[72,137984,51855],{"class":82},[72,137986,137888],{"class":366},[72,137988,1719],{"class":82},[72,137990,137991,137993,137995,137997],{"class":74,"line":1740},[72,137992,71323],{"class":362},[72,137994,51855],{"class":82},[72,137996,62488],{"class":362},[72,137998,1719],{"class":82},[72,138000,138001],{"class":74,"line":1746},[72,138002,1994],{"class":82},[1891,138004],{"style":126698,"src":138005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[22,138007,138008],{"start":1629},[25,138009,138010],{},"使用场景3",[15,138012,138013],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[63,138015,138017],{"className":126842,"code":138016,"language":126844,"meta":68,"style":68},".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",[34,138018,138019,138025,138035,138039,138043,138047,138055,138065,138075,138079,138087,138097,138107],{"__ignoreMap":68},[72,138020,138021,138023],{"class":74,"line":75},[72,138022,130690],{"class":358},[72,138024,15998],{"class":82},[72,138026,138027,138029,138031,138033],{"class":74,"line":370},[72,138028,131322],{"class":362},[72,138030,51855],{"class":82},[72,138032,165],{"class":362},[72,138034,1719],{"class":82},[72,138036,138037],{"class":74,"line":1608},[72,138038,1994],{"class":82},[72,138040,138041],{"class":74,"line":1623},[72,138042,136303],{"class":82},[72,138044,138045],{"class":74,"line":1629},[72,138046,137836],{"class":621},[72,138048,138049,138051,138053],{"class":74,"line":1643},[72,138050,52029],{"class":51718},[72,138052,137843],{"class":358},[72,138054,15998],{"class":82},[72,138056,138057,138059,138061,138063],{"class":74,"line":1649},[72,138058,137850],{"class":362},[72,138060,51855],{"class":82},[72,138062,8078],{"class":366},[72,138064,1719],{"class":82},[72,138066,138067,138069,138071,138073],{"class":74,"line":1740},[72,138068,128458],{"class":362},[72,138070,51855],{"class":82},[72,138072,61287],{"class":362},[72,138074,1719],{"class":82},[72,138076,138077],{"class":74,"line":1746},[72,138078,1994],{"class":82},[72,138080,138081,138083,138085],{"class":74,"line":1758},[72,138082,52029],{"class":51718},[72,138084,137877],{"class":358},[72,138086,15998],{"class":82},[72,138088,138089,138091,138093,138095],{"class":74,"line":2041},[72,138090,137850],{"class":362},[72,138092,51855],{"class":82},[72,138094,137888],{"class":366},[72,138096,1719],{"class":82},[72,138098,138099,138101,138103,138105],{"class":74,"line":2046},[72,138100,71323],{"class":362},[72,138102,51855],{"class":82},[72,138104,62488],{"class":362},[72,138106,1719],{"class":82},[72,138108,138109],{"class":74,"line":2052},[72,138110,1994],{"class":82},[15,138112,138113],{},"div {\nmargin: 0 auto;\n}",[63,138115,138118],{"className":138116,"code":138117,"language":127},[125],"\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",[34,138119,138117],{"__ignoreMap":68},[15,138121,138122],{},"如果想让多个元素都发生变化",[15,138124,138125],{},"不能如下操作：",[15,138127,138128],{},"transition: width 2s ease 0.5s;",[15,138130,138131],{},"transition: height 2s ease 0.5s;不对！！！",[15,138133,138134],{},"上方会样式冲突，导致不显示任何过渡效果",[15,138136,138137],{},"使用如下：加逗号隔开",[15,138139,138140],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[15,138142,138143],{},"transition all 2s ease;",[531,138145,138147],{"id":138146},"_1426-过渡练习","14.2.6 过渡练习",[22,138149,138150],{},[25,138151,138152],{},"进度条",[1891,138154],{"style":126698,"src":138155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[63,138157,138159],{"className":126842,"code":138158,"language":126844,"meta":68,"style":68},"div {\n  transition: all 0.3s ease;\n}\n",[34,138160,138161,138167,138185],{"__ignoreMap":68},[72,138162,138163,138165],{"class":74,"line":75},[72,138164,52029],{"class":51718},[72,138166,15998],{"class":82},[72,138168,138169,138172,138174,138176,138179,138181,138183],{"class":74,"line":370},[72,138170,138171],{"class":362},"  transition",[72,138173,51855],{"class":82},[72,138175,28543],{"class":362},[72,138177,138178],{"class":362}," 0.3",[72,138180,1249],{"class":78},[72,138182,79098],{"class":362},[72,138184,1719],{"class":82},[72,138186,138187],{"class":74,"line":1608},[72,138188,1994],{"class":82},[22,138190,138191],{"start":370},[25,138192,138193],{},"小米logo",[15,138195,138196],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[63,138198,138200],{"className":126842,"code":138199,"language":126844,"meta":68,"style":68},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[34,138201,138202,138207,138213,138229,138234],{"__ignoreMap":68},[72,138203,138204],{"class":74,"line":75},[72,138205,138206],{"class":621},"\u002F* CSS3 过渡 *\u002F\n",[72,138208,138209,138211],{"class":74,"line":370},[72,138210,52029],{"class":51718},[72,138212,15998],{"class":82},[72,138214,138215,138217,138219,138221,138223,138225,138227],{"class":74,"line":1608},[72,138216,138171],{"class":362},[72,138218,51855],{"class":82},[72,138220,28543],{"class":362},[72,138222,138178],{"class":362},[72,138224,1249],{"class":78},[72,138226,79098],{"class":362},[72,138228,1719],{"class":82},[72,138230,138231],{"class":74,"line":1623},[72,138232,138233],{"class":621},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[72,138235,138236],{"class":74,"line":1629},[72,138237,1994],{"class":82},[15,138239,138240],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[473,138242,138243],{},"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":68,"searchDepth":370,"depth":370,"links":138245},[138246,138251],{"id":136576,"depth":370,"text":136577,"children":138247},[138248,138249,138250],{"id":136580,"depth":1608,"text":136581},{"id":136657,"depth":1608,"text":136658},{"id":136988,"depth":1608,"text":136989},{"id":137279,"depth":370,"text":137280,"children":138252},[138253,138254],{"id":137283,"depth":1608,"text":137284},{"id":138146,"depth":1608,"text":138147},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136568,"description":23802},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":138261,"title":138262,"body":138263,"description":23802,"extension":487,"meta":140007,"navigation":490,"path":140008,"seo":140009,"stem":140010,"__hash__":140011},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":138264,"toc":139988},[138265,138268,138272,138275,138281,138287,138291,138293,138296,138299,138302,138305,138308,138311,138314,138318,138322,138325,138328,138331,138335,138338,138341,138346,138349,138352,138355,138359,138362,138371,138374,138377,138381,138384,138387,138392,138399,138413,138421,138428,138433,138436,138439,138442,138449,138453,138459,138465,138468,138471,138476,138482,138484,138492,138497,138500,138506,138508,138513,138518,138521,138523,138528,138531,138536,138541,138575,138579,138583,138586,138590,138593,138679,138682,138719,138722,138758,138762,138767,138780,138834,138836,138864,138866,138894,138900,138914,138916,138960,138962,139006,139009,139016,139027,139029,139056,139058,139084,139091,139107,139109,139203,139205,139299,139306,139309,139314,139320,139394,139397,139399,139435,139437,139473,139476,139483,139502,139505,139508,139510,139535,139537,139561,139564,139567,139597,139601,139604,139667,139669,139735,139737,139801,139804,139836,139838,139864,139866,139892,139895,139926,139928,139954,139956,139982,139985],[10,138266,138262],{"id":138267},"_15-品优购项目上篇-搭建与公共模块",[85,138269,138271],{"id":138270},"_151-项目规划","15.1 项目规划",[1891,138273],{"style":126698,"src":138274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[15,138276,138277,138280],{},[707,138278,138279],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[15,138282,138283,138286],{},[707,138284,138285],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[85,138288,138290],{"id":138289},"_152-项目介绍","15.2 项目介绍",[15,138292,138279],{},[1891,138294],{"style":126698,"src":138295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[15,138297,138298],{},"主页：",[1891,138300],{"style":126698,"src":138301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[15,138303,138304],{},"列表页：",[1891,138306],{"style":126698,"src":138307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[15,138309,138310],{},"注册页：",[1891,138312],{"style":126698,"src":138313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[85,138315,138317],{"id":138316},"_153-项目搭建工作","15.3 项目搭建工作",[531,138319,138321],{"id":138320},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[1891,138323],{"style":126698,"src":138324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[15,138326,138327],{},"经常更换的图片要放到upload文件夹中",[15,138329,138330],{},"不经常换的放到images文件夹中",[531,138332,138334],{"id":138333},"_1532-创建文件如下","15.3.2 创建文件如下",[1891,138336],{"style":126698,"src":138337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[1891,138339],{"style":126698,"src":138340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[15,138342,138343],{},[707,138344,138345],{},"初始化样式：",[15,138347,138348],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[15,138350,138351],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[15,138353,138354],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[531,138356,138358],{"id":138357},"_1533-项目模块化开发","15.3.3 项目模块化开发",[15,138360,138361],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[15,138363,138364,138365,138370],{},"这里最典型的应用就是 ",[707,138366,138367],{},[34,138368,138369],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[1891,138372],{"style":126698,"src":138373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[15,138375,138376],{},"通过link方法来引入",[531,138378,138380],{"id":138379},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[1891,138382],{"style":126698,"src":138383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[15,138385,138386],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[22,138388,138389],{},[25,138390,138391],{},"制作favicon图标",[15,138393,138394,138395,138398],{},"①把品优购图标切成 ",[34,138396,138397],{},"png"," 图片",[15,138400,138401,138402,138404,138405,138408,138409],{},"②把 ",[34,138403,138397],{}," 图片转换为 ",[34,138406,138407],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[257,138410,138411],{"href":138411,"rel":138412},"http:\u002F\u002Fwww.bitbug.net\u002F",[261],[22,138414,138415,138418],{"start":370},[25,138416,138417],{},"favicon图标放到网站根目录下",[25,138419,138420],{},"HTML页面引入favicon",[15,138422,138423,138424,138427],{},"在html 页面里面的 ",[34,138425,138426],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[15,138429,138430],{},[34,138431,138432],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[15,138434,138435],{},"复制这行代码或者在生成这个的网站进行复制",[1891,138437],{"style":126698,"src":138438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[15,138440,138441],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[15,138443,138444,138445],{},"例如:",[257,138446,138447],{"href":138447,"rel":138448},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[261],[531,138450,138452],{"id":138451},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[15,138454,138455,138458],{},[707,138456,138457],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[15,138460,138461,138464],{},[707,138462,138463],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[15,138466,138467],{},"页面必须有三个标签用来符合 SEO 优化",[1891,138469],{"style":126698,"src":138470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[22,138472,138473],{},[25,138474,138475],{},"title网站标题",[15,138477,138478,138481],{},[707,138479,138480],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[15,138483,69208],{},[251,138485,138486,138489],{},[25,138487,138488],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[25,138490,138491],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[22,138493,138494],{"start":370},[25,138495,138496],{},"description网站描述",[15,138498,138499],{},"简要说明我们网站主要是做什么的",[15,138501,138502,138505],{},[707,138503,138504],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[15,138507,69208],{},[15,138509,138510],{},[34,138511,138512],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[22,138514,138515],{"start":1608},[25,138516,138517],{},"keywords关键词",[15,138519,138520],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[15,138522,69208],{},[15,138524,138525],{},[34,138526,138527],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[15,138529,138530],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[15,138532,138533],{},[707,138534,138535],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[22,138537,138538],{"start":1623},[25,138539,138540],{},"代码总结",[63,138542,138543],{"className":127589,"code":130946,"language":127591,"meta":68,"style":68},[34,138544,138545,138549,138563,138567],{"__ignoreMap":68},[72,138546,138547],{"class":74,"line":75},[72,138548,130953],{"class":621},[72,138550,138551,138553,138555,138557,138559,138561],{"class":74,"line":370},[72,138552,1464],{"class":82},[72,138554,52029],{"class":51718},[72,138556,53904],{"class":358},[72,138558,609],{"class":82},[72,138560,130966],{"class":366},[72,138562,51725],{"class":82},[72,138564,138565],{"class":74,"line":1608},[72,138566,130973],{"class":82},[72,138568,138569,138571,138573],{"class":74,"line":1623},[72,138570,52203],{"class":82},[72,138572,52029],{"class":51718},[72,138574,51725],{"class":82},[85,138576,138578],{"id":138577},"_154-项目公共部分制作","15.4 项目公共部分制作",[531,138580,138582],{"id":138581},"_1541-常用模块类命名","15.4.1 常用模块类命名",[1891,138584],{"style":126698,"src":138585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[531,138587,138589],{"id":138588},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[15,138591,138592],{},"布局思路：",[251,138594,138595,138598,138601,138623,138656],{},[25,138596,138597],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[25,138599,138600],{},"里面包含版心的盒子",[25,138602,138603,138604],{},"版心盒子里面包含 1 号左侧盒子左浮动",[251,138605,138606,138614,138620],{},[25,138607,138608,138609,21925,138611,138613],{},"1 号盒子 里面包含一个",[34,138610,251],{},[34,138612,251],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[25,138615,138616,138617,138619],{},"里面的内容是水平排列，所以需要给",[34,138618,25],{},"设置浮动",[25,138621,138622],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[25,138624,138625,138626],{},"版心盒子里面包含 2 号右侧盒子右浮动",[251,138627,138628,138642,138647],{},[25,138629,138630,138631,21925,138633,138635,138636,138638,138639,138641],{},"2 号盒子 里面包含一个",[34,138632,251],{},[34,138634,251],{},"包裹",[34,138637,25],{},"，中间的",[34,138640,1475],{},"可以用样式去设置，也可以用字符 |",[25,138643,138644,138645,138619],{},"里面内容水平排列，给",[34,138646,25],{},[25,138648,138649,138650,138652,138653,138655],{},"找到里面所有偶数的 ",[34,138651,25],{}," 设置样式（偶数的 ",[34,138654,25],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[25,138657,138658,138659],{},"需要用到字体图标",[251,138660,138661,138667,138670,138673,138676],{},[25,138662,138663,138664],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[34,138665,138666],{},"arrow-icon",[25,138668,138669],{},"先要引入字体图片的资源",[25,138671,138672],{},"在样式里面利用 font-face 来进行声明",[25,138674,138675],{},"在伪元素的 content属性设置 图标的编码",[25,138677,138678],{},"给伪元素设置font-family属性",[15,138680,138681],{},"结构实例代码：",[63,138683,138685],{"className":126842,"code":138684,"language":126844,"meta":68,"style":68},"div::before {\n  content: \"\";\n  display: block;\n}\n",[34,138686,138687,138695,138705,138715],{"__ignoreMap":68},[72,138688,138689,138691,138693],{"class":74,"line":75},[72,138690,52029],{"class":51718},[72,138692,137843],{"class":358},[72,138694,15998],{"class":82},[72,138696,138697,138699,138701,138703],{"class":74,"line":370},[72,138698,137850],{"class":362},[72,138700,51855],{"class":82},[72,138702,8078],{"class":366},[72,138704,1719],{"class":82},[72,138706,138707,138709,138711,138713],{"class":74,"line":1608},[72,138708,128458],{"class":362},[72,138710,51855],{"class":82},[72,138712,61287],{"class":362},[72,138714,1719],{"class":82},[72,138716,138717],{"class":74,"line":1623},[72,138718,1994],{"class":82},[15,138720,138721],{},"样式实例代码：",[63,138723,138724],{"className":126842,"code":138684,"language":126844,"meta":68,"style":68},[34,138725,138726,138734,138744,138754],{"__ignoreMap":68},[72,138727,138728,138730,138732],{"class":74,"line":75},[72,138729,52029],{"class":51718},[72,138731,137843],{"class":358},[72,138733,15998],{"class":82},[72,138735,138736,138738,138740,138742],{"class":74,"line":370},[72,138737,137850],{"class":362},[72,138739,51855],{"class":82},[72,138741,8078],{"class":366},[72,138743,1719],{"class":82},[72,138745,138746,138748,138750,138752],{"class":74,"line":1608},[72,138747,128458],{"class":362},[72,138749,51855],{"class":82},[72,138751,61287],{"class":362},[72,138753,1719],{"class":82},[72,138755,138756],{"class":74,"line":1623},[72,138757,1994],{"class":82},[531,138759,138761],{"id":138760},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[251,138763,138764],{},[25,138765,138766],{},"header 盒子必须要有高度",[15,138768,138769,138770,138772,138773],{},"1 号盒子是 ",[34,138771,131854],{}," 标志定位，在正常开发过程中， ",[707,138774,138775,138776,138779],{},"logo的布局其实是有讲究的，需要进行 ",[34,138777,138778],{},"logoSEO","的优化 （★★★）",[251,138781,138782,138790,138798,138825],{},[25,138783,138784,138786,138787,138789],{},[34,138785,131854],{}," 里面首先放一个 ",[34,138788,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[25,138791,138792,138794,138795,138797],{},[34,138793,10],{}," 里面再放一个链接，可以返回首页的，把 ",[34,138796,131854],{}," 的背景图片给链接即可",[25,138799,138800,138801],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[251,138802,138803,138818],{},[25,138804,138805,138806,138809,138810,138813,138814,138817],{},"方法1：",[34,138807,138808],{},"text-indent"," 移到盒子外面（",[34,138811,138812],{},"text-indent: -9999px",") ，然后 ",[34,138815,138816],{},"overflow:hidden"," ，淘宝的做法",[25,138819,138820,138821,138824],{},"方法2：直接给 ",[34,138822,138823],{},"font-size: 0;"," 就看不到文字了，京东的做法",[25,138826,138827,138828,138830,138831,138833],{},"最后给链接一个 ",[34,138829,51825],{}," 属性，这样鼠标放到 ",[34,138832,131854],{}," 上就可以看到提示文字了",[15,138835,138681],{},[63,138837,138838],{"className":127589,"code":132075,"language":127591,"meta":68,"style":68},[34,138839,138840],{"__ignoreMap":68},[72,138841,138842,138844,138846,138848,138850,138852,138854,138856,138858,138860,138862],{"class":74,"line":75},[72,138843,1464],{"class":82},[72,138845,257],{"class":51718},[72,138847,61475],{"class":358},[72,138849,609],{"class":82},[72,138851,132090],{"class":366},[72,138853,132093],{"class":358},[72,138855,609],{"class":82},[72,138857,132098],{"class":366},[72,138859,132101],{"class":82},[72,138861,257],{"class":51718},[72,138863,51725],{"class":82},[15,138865,138721],{},[63,138867,138868],{"className":127589,"code":132075,"language":127591,"meta":68,"style":68},[34,138869,138870],{"__ignoreMap":68},[72,138871,138872,138874,138876,138878,138880,138882,138884,138886,138888,138890,138892],{"class":74,"line":75},[72,138873,1464],{"class":82},[72,138875,257],{"class":51718},[72,138877,61475],{"class":358},[72,138879,609],{"class":82},[72,138881,132090],{"class":366},[72,138883,132093],{"class":358},[72,138885,609],{"class":82},[72,138887,132098],{"class":366},[72,138889,132101],{"class":82},[72,138891,257],{"class":51718},[72,138893,51725],{"class":82},[15,138895,138896,138897,138899],{},"2 号盒子是 ",[34,138898,131867],{}," 搜索模块定位",[251,138901,138902,138905,138908,138911],{},[25,138903,138904],{},"search盒子利用定位的方式放在对应的位置",[25,138906,138907],{},"search盒子设置绝对定位，header盒子设置相对定位",[25,138909,138910],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[25,138912,138913],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[15,138915,138681],{},[63,138917,138918],{"className":126842,"code":132162,"language":126844,"meta":68,"style":68},[34,138919,138920,138942,138946,138956],{"__ignoreMap":68},[72,138921,138922,138924,138926,138928,138930,138932,138934,138936,138938,138940],{"class":74,"line":75},[72,138923,52029],{"class":51718},[72,138925,12861],{"class":82},[72,138927,15],{"class":51718},[72,138929,12861],{"class":82},[72,138931,10],{"class":51718},[72,138933,12861],{"class":82},[72,138935,251],{"class":51718},[72,138937,12861],{"class":82},[72,138939,25],{"class":51718},[72,138941,15998],{"class":82},[72,138943,138944],{"class":74,"line":370},[72,138945,132191],{"class":621},[72,138947,138948,138950,138952,138954],{"class":74,"line":1608},[72,138949,128458],{"class":362},[72,138951,51855],{"class":82},[72,138953,61287],{"class":362},[72,138955,1719],{"class":82},[72,138957,138958],{"class":74,"line":1623},[72,138959,1994],{"class":82},[15,138961,138721],{},[63,138963,138964],{"className":126842,"code":132162,"language":126844,"meta":68,"style":68},[34,138965,138966,138988,138992,139002],{"__ignoreMap":68},[72,138967,138968,138970,138972,138974,138976,138978,138980,138982,138984,138986],{"class":74,"line":75},[72,138969,52029],{"class":51718},[72,138971,12861],{"class":82},[72,138973,15],{"class":51718},[72,138975,12861],{"class":82},[72,138977,10],{"class":51718},[72,138979,12861],{"class":82},[72,138981,251],{"class":51718},[72,138983,12861],{"class":82},[72,138985,25],{"class":51718},[72,138987,15998],{"class":82},[72,138989,138990],{"class":74,"line":370},[72,138991,132191],{"class":621},[72,138993,138994,138996,138998,139000],{"class":74,"line":1608},[72,138995,128458],{"class":362},[72,138997,51855],{"class":82},[72,138999,61287],{"class":362},[72,139001,1719],{"class":82},[72,139003,139004],{"class":74,"line":1623},[72,139005,1994],{"class":82},[15,139007,139008],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[15,139010,139011,139012,139015],{},"3 号盒子是 ",[34,139013,139014],{},"hotwords"," 热词模块定位",[251,139017,139018,139021,139024],{},[25,139019,139020],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[25,139022,139023],{},"给里面所有的a标签设置 左右10px的外边距",[25,139025,139026],{},"给第一个a标签设置文字变红色（#c81623）",[15,139028,138681],{},[63,139030,139032],{"className":126842,"code":139031,"language":126844,"meta":68,"style":68},"div {\n  margin: 0 auto;\n}\n",[34,139033,139034,139040,139052],{"__ignoreMap":68},[72,139035,139036,139038],{"class":74,"line":75},[72,139037,52029],{"class":51718},[72,139039,15998],{"class":82},[72,139041,139042,139044,139046,139048,139050],{"class":74,"line":370},[72,139043,70888],{"class":362},[72,139045,51855],{"class":82},[72,139047,747],{"class":362},[72,139049,51974],{"class":362},[72,139051,1719],{"class":82},[72,139053,139054],{"class":74,"line":1608},[72,139055,1994],{"class":82},[15,139057,138721],{},[63,139059,139060],{"className":126842,"code":139031,"language":126844,"meta":68,"style":68},[34,139061,139062,139068,139080],{"__ignoreMap":68},[72,139063,139064,139066],{"class":74,"line":75},[72,139065,52029],{"class":51718},[72,139067,15998],{"class":82},[72,139069,139070,139072,139074,139076,139078],{"class":74,"line":370},[72,139071,70888],{"class":362},[72,139073,51855],{"class":82},[72,139075,747],{"class":362},[72,139077,51974],{"class":362},[72,139079,1719],{"class":82},[72,139081,139082],{"class":74,"line":1608},[72,139083,1994],{"class":82},[15,139085,139086,139087,139090],{},"4 号盒子是 ",[34,139088,139089],{},"shopcar"," 购物车模块",[251,139092,139093,139098,139101,139104],{},[25,139094,123625,139095,139097],{},[34,139096,139089],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[25,139099,139100],{},"count 统计部分用绝对定位做",[25,139102,139103],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[25,139105,139106],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[15,139108,138681],{},[63,139110,139111],{"className":126842,"code":132274,"language":126844,"meta":68,"style":68},[34,139112,139113,139117,139131,139135,139149,139153,139167,139171,139185,139189],{"__ignoreMap":68},[72,139114,139115],{"class":74,"line":75},[72,139116,132281],{"class":621},[72,139118,139119,139121,139123,139125,139127,139129],{"class":74,"line":370},[72,139120,132286],{"class":358},[72,139122,80225],{"class":82},[72,139124,129202],{"class":362},[72,139126,51855],{"class":82},[72,139128,132295],{"class":362},[72,139130,129772],{"class":82},[72,139132,139133],{"class":74,"line":1608},[72,139134,132302],{"class":621},[72,139136,139137,139139,139141,139143,139145,139147],{"class":74,"line":1623},[72,139138,132307],{"class":358},[72,139140,80225],{"class":82},[72,139142,129202],{"class":362},[72,139144,51855],{"class":82},[72,139146,55182],{"class":362},[72,139148,129772],{"class":82},[72,139150,139151],{"class":74,"line":1629},[72,139152,132322],{"class":621},[72,139154,139155,139157,139159,139161,139163,139165],{"class":74,"line":1643},[72,139156,132327],{"class":358},[72,139158,80225],{"class":82},[72,139160,129202],{"class":362},[72,139162,51855],{"class":82},[72,139164,55249],{"class":362},[72,139166,129772],{"class":82},[72,139168,139169],{"class":74,"line":1649},[72,139170,132342],{"class":621},[72,139172,139173,139175,139177,139179,139181,139183],{"class":74,"line":1740},[72,139174,132347],{"class":358},[72,139176,80225],{"class":82},[72,139178,129202],{"class":362},[72,139180,51855],{"class":82},[72,139182,86650],{"class":362},[72,139184,129772],{"class":82},[72,139186,139187],{"class":74,"line":1746},[72,139188,132362],{"class":621},[72,139190,139191,139193,139195,139197,139199,139201],{"class":74,"line":1758},[72,139192,132367],{"class":358},[72,139194,80225],{"class":82},[72,139196,129202],{"class":362},[72,139198,51855],{"class":82},[72,139200,132376],{"class":362},[72,139202,129772],{"class":82},[15,139204,138721],{},[63,139206,139207],{"className":126842,"code":132274,"language":126844,"meta":68,"style":68},[34,139208,139209,139213,139227,139231,139245,139249,139263,139267,139281,139285],{"__ignoreMap":68},[72,139210,139211],{"class":74,"line":75},[72,139212,132281],{"class":621},[72,139214,139215,139217,139219,139221,139223,139225],{"class":74,"line":370},[72,139216,132286],{"class":358},[72,139218,80225],{"class":82},[72,139220,129202],{"class":362},[72,139222,51855],{"class":82},[72,139224,132295],{"class":362},[72,139226,129772],{"class":82},[72,139228,139229],{"class":74,"line":1608},[72,139230,132302],{"class":621},[72,139232,139233,139235,139237,139239,139241,139243],{"class":74,"line":1623},[72,139234,132307],{"class":358},[72,139236,80225],{"class":82},[72,139238,129202],{"class":362},[72,139240,51855],{"class":82},[72,139242,55182],{"class":362},[72,139244,129772],{"class":82},[72,139246,139247],{"class":74,"line":1629},[72,139248,132322],{"class":621},[72,139250,139251,139253,139255,139257,139259,139261],{"class":74,"line":1643},[72,139252,132327],{"class":358},[72,139254,80225],{"class":82},[72,139256,129202],{"class":362},[72,139258,51855],{"class":82},[72,139260,55249],{"class":362},[72,139262,129772],{"class":82},[72,139264,139265],{"class":74,"line":1649},[72,139266,132342],{"class":621},[72,139268,139269,139271,139273,139275,139277,139279],{"class":74,"line":1740},[72,139270,132347],{"class":358},[72,139272,80225],{"class":82},[72,139274,129202],{"class":362},[72,139276,51855],{"class":82},[72,139278,86650],{"class":362},[72,139280,129772],{"class":82},[72,139282,139283],{"class":74,"line":1746},[72,139284,132362],{"class":621},[72,139286,139287,139289,139291,139293,139295,139297],{"class":74,"line":1758},[72,139288,132367],{"class":358},[72,139290,80225],{"class":82},[72,139292,129202],{"class":362},[72,139294,51855],{"class":82},[72,139296,132376],{"class":362},[72,139298,129772],{"class":82},[531,139300,139302,139303,139305],{"id":139301},"_1544-nav导航模块制作","15.4.4 ",[34,139304,54131],{},"导航模块制作",[1891,139307],{"style":126698,"src":139308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[15,139310,139311,139313],{},[34,139312,54131],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[15,139315,139316,139317],{},"1 号盒子左侧浮动，",[34,139318,139319],{},"dropdown",[251,139321,139322,139332,139340,139346,139354,139364,139372,139383],{},[25,139323,139324,139325,101432,139328,139331],{},"1号盒子有讲究，根据相关性 里面包含 ",[34,139326,139327],{},".dt",[34,139329,139330],{},".dd"," 两个盒子",[25,139333,139334,139336,139337,139339],{},[34,139335,139327],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[34,139338,139330],{}," 挤到下面去了",[25,139341,139342,139343,139345],{},"给 ",[34,139344,139330],{}," 盒子设置宽度 和 高度，以及背景颜色",[25,139347,139342,139348,139350,139351,120527],{},[34,139349,139330],{}," 盒子里面定义 无序列表 （",[34,139352,139353],{},"ul > li > a",[25,139355,139356,139357,139359,139360,139363],{},"每个 ",[34,139358,25],{}," 都有一个高度（",[34,139361,139362],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[25,139365,139342,139366,139368,139369,120527],{},[34,139367,25],{}," 里面的a设置文字大小（",[34,139370,139371],{},"14px",[25,139373,139342,139374,139376,139377,139379,139380,139382],{},[34,139375,25],{}," 设置 ",[34,139378,128003],{},"，当鼠标移入的时候，让",[34,139381,25],{},"的背景变成白色，让里面的文字变成红色",[25,139384,139385,139387,139388,139390,139391,139393],{},[34,139386,25],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[34,139389,25],{},"的右侧，那么给",[34,139392,25],{},"设置相对定位",[15,139395,139396],{},"一定要注意相关性",[15,139398,138681],{},[63,139400,139401],{"className":126842,"code":138684,"language":126844,"meta":68,"style":68},[34,139402,139403,139411,139421,139431],{"__ignoreMap":68},[72,139404,139405,139407,139409],{"class":74,"line":75},[72,139406,52029],{"class":51718},[72,139408,137843],{"class":358},[72,139410,15998],{"class":82},[72,139412,139413,139415,139417,139419],{"class":74,"line":370},[72,139414,137850],{"class":362},[72,139416,51855],{"class":82},[72,139418,8078],{"class":366},[72,139420,1719],{"class":82},[72,139422,139423,139425,139427,139429],{"class":74,"line":1608},[72,139424,128458],{"class":362},[72,139426,51855],{"class":82},[72,139428,61287],{"class":362},[72,139430,1719],{"class":82},[72,139432,139433],{"class":74,"line":1623},[72,139434,1994],{"class":82},[15,139436,138721],{},[63,139438,139439],{"className":126842,"code":138684,"language":126844,"meta":68,"style":68},[34,139440,139441,139449,139459,139469],{"__ignoreMap":68},[72,139442,139443,139445,139447],{"class":74,"line":75},[72,139444,52029],{"class":51718},[72,139446,137843],{"class":358},[72,139448,15998],{"class":82},[72,139450,139451,139453,139455,139457],{"class":74,"line":370},[72,139452,137850],{"class":362},[72,139454,51855],{"class":82},[72,139456,8078],{"class":366},[72,139458,1719],{"class":82},[72,139460,139461,139463,139465,139467],{"class":74,"line":1608},[72,139462,128458],{"class":362},[72,139464,51855],{"class":82},[72,139466,61287],{"class":362},[72,139468,1719],{"class":82},[72,139470,139471],{"class":74,"line":1623},[72,139472,1994],{"class":82},[15,139474,139475],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[15,139477,139478,139479,139482],{},"2 号盒子左侧浮动，",[34,139480,139481],{},"navitems"," 导航栏组",[251,139484,139485,139490,139499],{},[25,139486,139487,139488],{},"里面结构是 ",[34,139489,139353],{},[25,139491,139492,139493,139495,139496,139498],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[34,139494,257],{},"左右的",[34,139497,31301],{},"把两侧撑开",[25,139500,139501],{},"让文字垂直居中（行高等于高度）",[1891,139503],{"style":126698,"src":139504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[15,139506,139507],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[15,139509,138681],{},[63,139511,139513],{"className":126842,"code":139512,"language":126844,"meta":68,"style":68},".box {\n  float: left;\n}\n",[34,139514,139515,139521,139531],{"__ignoreMap":68},[72,139516,139517,139519],{"class":74,"line":75},[72,139518,130690],{"class":358},[72,139520,15998],{"class":82},[72,139522,139523,139525,139527,139529],{"class":74,"line":370},[72,139524,131322],{"class":362},[72,139526,51855],{"class":82},[72,139528,165],{"class":362},[72,139530,1719],{"class":82},[72,139532,139533],{"class":74,"line":1608},[72,139534,1994],{"class":82},[15,139536,138721],{},[63,139538,139539],{"className":126842,"code":139512,"language":126844,"meta":68,"style":68},[34,139540,139541,139547,139557],{"__ignoreMap":68},[72,139542,139543,139545],{"class":74,"line":75},[72,139544,130690],{"class":358},[72,139546,15998],{"class":82},[72,139548,139549,139551,139553,139555],{"class":74,"line":370},[72,139550,131322],{"class":362},[72,139552,51855],{"class":82},[72,139554,165],{"class":362},[72,139556,1719],{"class":82},[72,139558,139559],{"class":74,"line":1608},[72,139560,1994],{"class":82},[15,139562,139563],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[1891,139565],{"style":126698,"src":139566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[63,139568,139569],{"className":126842,"code":130999,"language":126844,"meta":68,"style":68},[34,139570,139571,139577,139593],{"__ignoreMap":68},[72,139572,139573,139575],{"class":74,"line":75},[72,139574,52029],{"class":51718},[72,139576,15998],{"class":82},[72,139578,139579,139581,139583,139585,139587,139589,139591],{"class":74,"line":370},[72,139580,71314],{"class":362},[72,139582,51855],{"class":82},[72,139584,772],{"class":362},[72,139586,51910],{"class":78},[72,139588,51939],{"class":362},[72,139590,130234],{"class":362},[72,139592,1719],{"class":82},[72,139594,139595],{"class":74,"line":1608},[72,139596,1994],{"class":82},[531,139598,139600],{"id":139599},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[1891,139602],{"style":126698,"src":139603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[251,139605,139606,139611,139616],{},[25,139607,139608,139610],{},[34,139609,132045],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[25,139612,139613,139615],{},[34,139614,132045],{}," 里面有一个大的版心",[25,139617,139618,139619,139622,139623],{},"版心里面包含 1 号盒子，",[34,139620,139621],{},"mod_service"," 是服务模块，mod 是模块的意思",[251,139624,139625,139630,139643,139659,139664],{},[25,139626,139342,139627,139629],{},[34,139628,139621],{}," 设置高度（80px）和下边框",[25,139631,139632,139633,139636,139637,139639,139640,139642],{},"在里面定义 ",[34,139634,139635],{},"ul > li"," ,每个",[34,139638,25],{}," 宽度是300px 高度是 50px，给每个",[34,139641,25],{},"设置35px的左内边距",[25,139644,139645,139646,139648,139649,139651,139652,139654,139655,18836,139657,120527],{},"在每个",[34,139647,25],{},"里面，放一个 ",[34,139650,23335],{},"（里面放图标），一个",[34,139653,52029],{},"（里面放",[34,139656,52029],{},[34,139658,15],{},[25,139660,139342,139661,139663],{},[34,139662,23335],{},"设置浮动，让h5与这个div左右排列",[25,139665,139666],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[15,139668,138681],{},[63,139670,139672],{"className":126842,"code":139671,"language":126844,"meta":68,"style":68},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[34,139673,139674,139680,139692,139704,139731],{"__ignoreMap":68},[72,139675,139676,139678],{"class":74,"line":75},[72,139677,134599],{"class":358},[72,139679,15998],{"class":82},[72,139681,139682,139684,139686,139688,139690],{"class":74,"line":370},[72,139683,70986],{"class":362},[72,139685,51855],{"class":82},[72,139687,1254],{"class":362},[72,139689,51910],{"class":78},[72,139691,1719],{"class":82},[72,139693,139694,139696,139698,139700,139702],{"class":74,"line":1608},[72,139695,71206],{"class":362},[72,139697,51855],{"class":82},[72,139699,1254],{"class":362},[72,139701,51910],{"class":78},[72,139703,1719],{"class":82},[72,139705,139706,139708,139710,139712,139714,139716,139718,139720,139723,139725,139727,139729],{"class":74,"line":1623},[72,139707,71029],{"class":362},[72,139709,51855],{"class":82},[72,139711,62144],{"class":362},[72,139713,564],{"class":82},[72,139715,134638],{"class":5642},[72,139717,14140],{"class":82},[72,139719,62154],{"class":362},[72,139721,139722],{"class":362}," -10",[72,139724,51910],{"class":78},[72,139726,134657],{"class":362},[72,139728,51910],{"class":78},[72,139730,1719],{"class":82},[72,139732,139733],{"class":74,"line":1629},[72,139734,1994],{"class":82},[15,139736,138721],{},[63,139738,139739],{"className":126842,"code":139671,"language":126844,"meta":68,"style":68},[34,139740,139741,139747,139759,139771,139797],{"__ignoreMap":68},[72,139742,139743,139745],{"class":74,"line":75},[72,139744,134599],{"class":358},[72,139746,15998],{"class":82},[72,139748,139749,139751,139753,139755,139757],{"class":74,"line":370},[72,139750,70986],{"class":362},[72,139752,51855],{"class":82},[72,139754,1254],{"class":362},[72,139756,51910],{"class":78},[72,139758,1719],{"class":82},[72,139760,139761,139763,139765,139767,139769],{"class":74,"line":1608},[72,139762,71206],{"class":362},[72,139764,51855],{"class":82},[72,139766,1254],{"class":362},[72,139768,51910],{"class":78},[72,139770,1719],{"class":82},[72,139772,139773,139775,139777,139779,139781,139783,139785,139787,139789,139791,139793,139795],{"class":74,"line":1623},[72,139774,71029],{"class":362},[72,139776,51855],{"class":82},[72,139778,62144],{"class":362},[72,139780,564],{"class":82},[72,139782,134638],{"class":5642},[72,139784,14140],{"class":82},[72,139786,62154],{"class":362},[72,139788,139722],{"class":362},[72,139790,51910],{"class":78},[72,139792,134657],{"class":362},[72,139794,51910],{"class":78},[72,139796,1719],{"class":82},[72,139798,139799],{"class":74,"line":1629},[72,139800,1994],{"class":82},[15,139802,139803],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[251,139805,139806,139809,139815,139821,139833],{},[25,139807,139808],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[25,139810,139811,139812,120527],{},"里面的布局利用 自定义列表来实现（",[34,139813,139814],{},"dl > dt + dd",[25,139816,139342,139817,139820],{},[34,139818,139819],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[25,139822,139342,139823,139826,139827,18836,139829,139832],{},[34,139824,139825],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[34,139828,139825],{},[34,139830,139831],{},"dd","之间有些距离",[25,139834,139835],{},"最后一个 dl 结构和样式不一样，需要单独设置",[15,139837,138681],{},[63,139839,139840],{"className":126842,"code":139031,"language":126844,"meta":68,"style":68},[34,139841,139842,139848,139860],{"__ignoreMap":68},[72,139843,139844,139846],{"class":74,"line":75},[72,139845,52029],{"class":51718},[72,139847,15998],{"class":82},[72,139849,139850,139852,139854,139856,139858],{"class":74,"line":370},[72,139851,70888],{"class":362},[72,139853,51855],{"class":82},[72,139855,747],{"class":362},[72,139857,51974],{"class":362},[72,139859,1719],{"class":82},[72,139861,139862],{"class":74,"line":1608},[72,139863,1994],{"class":82},[15,139865,138721],{},[63,139867,139868],{"className":126842,"code":139031,"language":126844,"meta":68,"style":68},[34,139869,139870,139876,139888],{"__ignoreMap":68},[72,139871,139872,139874],{"class":74,"line":75},[72,139873,52029],{"class":51718},[72,139875,15998],{"class":82},[72,139877,139878,139880,139882,139884,139886],{"class":74,"line":370},[72,139879,70888],{"class":362},[72,139881,51855],{"class":82},[72,139883,747],{"class":362},[72,139885,51974],{"class":362},[72,139887,1719],{"class":82},[72,139889,139890],{"class":74,"line":1608},[72,139891,1994],{"class":82},[15,139893,139894],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[251,139896,139897,139906,139909,139920],{},[25,139898,139899,139900,139902,139903,139905],{},"分为上下两块，上面是 ",[34,139901,132062],{}," 友情链接，下面是 ",[34,139904,132055],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[25,139907,139908],{},"把内容分别复制到相应模块中",[25,139910,139342,139911,139913,139914,139916,139917,139919],{},[34,139912,132062],{}," 设置 15px 的下外边距，给",[34,139915,132062],{}," 里面 的 ",[34,139918,257],{}," 标签设置 左右 3px 的外边距",[25,139921,139922,139923,139925],{},"给",[34,139924,132055],{}," 设置 20px 的行高",[15,139927,138681],{},[63,139929,139930],{"className":126842,"code":139031,"language":126844,"meta":68,"style":68},[34,139931,139932,139938,139950],{"__ignoreMap":68},[72,139933,139934,139936],{"class":74,"line":75},[72,139935,52029],{"class":51718},[72,139937,15998],{"class":82},[72,139939,139940,139942,139944,139946,139948],{"class":74,"line":370},[72,139941,70888],{"class":362},[72,139943,51855],{"class":82},[72,139945,747],{"class":362},[72,139947,51974],{"class":362},[72,139949,1719],{"class":82},[72,139951,139952],{"class":74,"line":1608},[72,139953,1994],{"class":82},[15,139955,138721],{},[63,139957,139958],{"className":126842,"code":139031,"language":126844,"meta":68,"style":68},[34,139959,139960,139966,139978],{"__ignoreMap":68},[72,139961,139962,139964],{"class":74,"line":75},[72,139963,52029],{"class":51718},[72,139965,15998],{"class":82},[72,139967,139968,139970,139972,139974,139976],{"class":74,"line":370},[72,139969,70888],{"class":362},[72,139971,51855],{"class":82},[72,139973,747],{"class":362},[72,139975,51974],{"class":362},[72,139977,1719],{"class":82},[72,139979,139980],{"class":74,"line":1608},[72,139981,1994],{"class":82},[15,139983,139984],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[473,139986,139987],{},"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":68,"searchDepth":370,"depth":370,"links":139989},[139990,139991,139992,139999],{"id":138270,"depth":370,"text":138271},{"id":138289,"depth":370,"text":138290},{"id":138316,"depth":370,"text":138317,"children":139993},[139994,139995,139996,139997,139998],{"id":138320,"depth":1608,"text":138321},{"id":138333,"depth":1608,"text":138334},{"id":138357,"depth":1608,"text":138358},{"id":138379,"depth":1608,"text":138380},{"id":138451,"depth":1608,"text":138452},{"id":138577,"depth":370,"text":138578,"children":140000},[140001,140002,140003,140004,140006],{"id":138581,"depth":1608,"text":138582},{"id":138588,"depth":1608,"text":138589},{"id":138760,"depth":1608,"text":138761},{"id":139301,"depth":1608,"text":140005},"15.4.4 nav导航模块制作",{"id":139599,"depth":1608,"text":139600},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":138262,"description":23802},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":140013,"title":140014,"body":140015,"description":23802,"extension":487,"meta":142417,"navigation":490,"path":142418,"seo":142419,"stem":142420,"__hash__":142421},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":140016,"toc":142394},[140017,140020,140024,140028,140040,140043,140046,140049,140060,140062,140086,140088,140112,140117,140120,140122,140158,140160,140196,140199,140204,140207,140210,140213,140243,140250,140253,140263,140265,140299,140302,140336,140342,140359,140361,140397,140399,140435,140440,140465,140467,140493,140495,140519,140526,140529,140593,140595,140637,140639,140679,140686,140691,140693,140723,140725,140755,140759,140762,140769,140781,140783,140809,140811,140835,140838,140840,140864,140870,140880,140882,140912,140914,140944,140951,140992,140994,141030,141032,141068,141072,141075,141078,141081,141087,141092,141095,141118,141121,141145,141148,141172,141177,141180,141183,141186,141189,141192,141266,141268,141298,141300,141330,141333,141336,141368,141372,141376,141390,141399,141402,141407,141409,141503,141505,141599,141622,141624,141648,141650,141674,141681,141684,141694,141696,141720,141725,141733,141735,141765,141770,141810,141812,141838,141840,141866,141870,141873,141878,141881,141885,141893,141900,141908,141910,141940,141942,141972,141980,141983,141986,141988,142018,142020,142050,142053,142058,142060,142084,142086,142110,142113,142198,142200,142224,142226,142250,142254,142256,142280,142282,142316,142320,142334,142337,142342,142345,142350,142353,142383,142391],[10,140018,140014],{"id":140019},"_16-品优购项目下篇-主体与页面开发",[85,140021,140023],{"id":140022},"_161-项目主体模块制作","16.1 项目主体模块制作",[531,140025,140027],{"id":140026},"_1611-首页制作","16.1.1 首页制作",[15,140029,140030,140032,140033,140035,140036,140039],{},[707,140031,102463],{}," 主体模块是 ",[707,140034,74476],{}," 里面专有的，注意需要新的样式文件 ",[707,140037,140038],{},"index.css，"," 就不要写在common.css中了",[1891,140041],{"style":126698,"src":140042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[1891,140044],{"style":126698,"src":140045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[15,140047,140048],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[251,140050,140051,140054,140057],{},[25,140052,140053],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[25,140055,140056],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[25,140058,140059],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[15,140061,138681],{},[63,140063,140064],{"className":126842,"code":139512,"language":126844,"meta":68,"style":68},[34,140065,140066,140072,140082],{"__ignoreMap":68},[72,140067,140068,140070],{"class":74,"line":75},[72,140069,130690],{"class":358},[72,140071,15998],{"class":82},[72,140073,140074,140076,140078,140080],{"class":74,"line":370},[72,140075,131322],{"class":362},[72,140077,51855],{"class":82},[72,140079,165],{"class":362},[72,140081,1719],{"class":82},[72,140083,140084],{"class":74,"line":1608},[72,140085,1994],{"class":82},[15,140087,138721],{},[63,140089,140090],{"className":126842,"code":139512,"language":126844,"meta":68,"style":68},[34,140091,140092,140098,140108],{"__ignoreMap":68},[72,140093,140094,140096],{"class":74,"line":75},[72,140095,130690],{"class":358},[72,140097,15998],{"class":82},[72,140099,140100,140102,140104,140106],{"class":74,"line":370},[72,140101,131322],{"class":362},[72,140103,51855],{"class":82},[72,140105,165],{"class":362},[72,140107,1719],{"class":82},[72,140109,140110],{"class":74,"line":1608},[72,140111,1994],{"class":82},[22,140113,140114],{},[25,140115,140116],{},"左侧focus模块制作",[1891,140118],{"style":126698,"src":140119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[15,140121,138681],{},[63,140123,140124],{"className":126842,"code":128165,"language":126844,"meta":68,"style":68},[34,140125,140126,140134,140144,140154],{"__ignoreMap":68},[72,140127,140128,140130,140132],{"class":74,"line":75},[72,140129,54239],{"class":51718},[72,140131,62318],{"class":358},[72,140133,15998],{"class":82},[72,140135,140136,140138,140140,140142],{"class":74,"line":370},[72,140137,128180],{"class":362},[72,140139,51855],{"class":82},[72,140141,55307],{"class":362},[72,140143,1719],{"class":82},[72,140145,140146,140148,140150,140152],{"class":74,"line":1608},[72,140147,71216],{"class":362},[72,140149,51855],{"class":82},[72,140151,55155],{"class":362},[72,140153,1719],{"class":82},[72,140155,140156],{"class":74,"line":1623},[72,140157,1994],{"class":82},[15,140159,138721],{},[63,140161,140162],{"className":126842,"code":128165,"language":126844,"meta":68,"style":68},[34,140163,140164,140172,140182,140192],{"__ignoreMap":68},[72,140165,140166,140168,140170],{"class":74,"line":75},[72,140167,54239],{"class":51718},[72,140169,62318],{"class":358},[72,140171,15998],{"class":82},[72,140173,140174,140176,140178,140180],{"class":74,"line":370},[72,140175,128180],{"class":362},[72,140177,51855],{"class":82},[72,140179,55307],{"class":362},[72,140181,1719],{"class":82},[72,140183,140184,140186,140188,140190],{"class":74,"line":1608},[72,140185,71216],{"class":362},[72,140187,51855],{"class":82},[72,140189,55155],{"class":362},[72,140191,1719],{"class":82},[72,140193,140194],{"class":74,"line":1623},[72,140195,1994],{"class":82},[15,140197,140198],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[22,140200,140201],{"start":370},[25,140202,140203],{},"右侧newsflash模块制作",[1891,140205],{"style":126698,"src":140206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[15,140208,140209],{},"右侧的模块 分为上中下三个盒子",[15,140211,140212],{},"结构代码：",[63,140214,140215],{"className":127589,"code":134344,"language":127591,"meta":68,"style":68},[34,140216,140217],{"__ignoreMap":68},[72,140218,140219,140221,140223,140225,140227,140229,140231,140233,140235,140237,140239,140241],{"class":74,"line":75},[72,140220,1464],{"class":82},[72,140222,1891],{"class":51718},[72,140224,55657],{"class":358},[72,140226,609],{"class":82},[72,140228,134359],{"class":366},[72,140230,55665],{"class":358},[72,140232,609],{"class":82},[72,140234,134366],{"class":366},[72,140236,134369],{"class":358},[72,140238,609],{"class":82},[72,140240,134374],{"class":366},[72,140242,51725],{"class":82},[15,140244,140245,140246,140249],{},"1 号盒子为 ",[34,140247,140248],{},"news"," 新闻模块 高度为 165px",[1891,140251],{"style":126698,"src":140252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[15,140254,140255,140256,140259,140260],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[34,140257,140258],{},"news-hd","，下面是 ",[34,140261,140262],{},"news-bd",[15,140264,140212],{},[63,140266,140267],{"className":127589,"code":130946,"language":127591,"meta":68,"style":68},[34,140268,140269,140273,140287,140291],{"__ignoreMap":68},[72,140270,140271],{"class":74,"line":75},[72,140272,130953],{"class":621},[72,140274,140275,140277,140279,140281,140283,140285],{"class":74,"line":370},[72,140276,1464],{"class":82},[72,140278,52029],{"class":51718},[72,140280,53904],{"class":358},[72,140282,609],{"class":82},[72,140284,130966],{"class":366},[72,140286,51725],{"class":82},[72,140288,140289],{"class":74,"line":1608},[72,140290,130973],{"class":82},[72,140292,140293,140295,140297],{"class":74,"line":1623},[72,140294,52203],{"class":82},[72,140296,52029],{"class":51718},[72,140298,51725],{"class":82},[15,140300,140301],{},"样式代码：",[63,140303,140304],{"className":127589,"code":130946,"language":127591,"meta":68,"style":68},[34,140305,140306,140310,140324,140328],{"__ignoreMap":68},[72,140307,140308],{"class":74,"line":75},[72,140309,130953],{"class":621},[72,140311,140312,140314,140316,140318,140320,140322],{"class":74,"line":370},[72,140313,1464],{"class":82},[72,140315,52029],{"class":51718},[72,140317,53904],{"class":358},[72,140319,609],{"class":82},[72,140321,130966],{"class":366},[72,140323,51725],{"class":82},[72,140325,140326],{"class":74,"line":1608},[72,140327,130973],{"class":82},[72,140329,140330,140332,140334],{"class":74,"line":1623},[72,140331,52203],{"class":82},[72,140333,52029],{"class":51718},[72,140335,51725],{"class":82},[15,140337,140338,140339,140341],{},"上面是",[34,140340,140258],{},"，设置高度是 33px，设置下边框",[251,140343,140344,140350],{},[25,140345,140346,140347,140349],{},"里面放一个",[34,140348,23335],{}," 标题",[25,140351,140352,140353,140355,140356,140358],{},"放一个a",[34,140354,103097],{},"，内容是 更多，然后让 ",[34,140357,257],{}," 进行右浮动，三角用伪元素设置字体图标就好",[15,140360,140212],{},[63,140362,140363],{"className":126842,"code":138684,"language":126844,"meta":68,"style":68},[34,140364,140365,140373,140383,140393],{"__ignoreMap":68},[72,140366,140367,140369,140371],{"class":74,"line":75},[72,140368,52029],{"class":51718},[72,140370,137843],{"class":358},[72,140372,15998],{"class":82},[72,140374,140375,140377,140379,140381],{"class":74,"line":370},[72,140376,137850],{"class":362},[72,140378,51855],{"class":82},[72,140380,8078],{"class":366},[72,140382,1719],{"class":82},[72,140384,140385,140387,140389,140391],{"class":74,"line":1608},[72,140386,128458],{"class":362},[72,140388,51855],{"class":82},[72,140390,61287],{"class":362},[72,140392,1719],{"class":82},[72,140394,140395],{"class":74,"line":1623},[72,140396,1994],{"class":82},[15,140398,140301],{},[63,140400,140401],{"className":126842,"code":138684,"language":126844,"meta":68,"style":68},[34,140402,140403,140411,140421,140431],{"__ignoreMap":68},[72,140404,140405,140407,140409],{"class":74,"line":75},[72,140406,52029],{"class":51718},[72,140408,137843],{"class":358},[72,140410,15998],{"class":82},[72,140412,140413,140415,140417,140419],{"class":74,"line":370},[72,140414,137850],{"class":362},[72,140416,51855],{"class":82},[72,140418,8078],{"class":366},[72,140420,1719],{"class":82},[72,140422,140423,140425,140427,140429],{"class":74,"line":1608},[72,140424,128458],{"class":362},[72,140426,51855],{"class":82},[72,140428,61287],{"class":362},[72,140430,1719],{"class":82},[72,140432,140433],{"class":74,"line":1623},[72,140434,1994],{"class":82},[15,140436,140437,140438],{},"下面是",[34,140439,140262],{},[251,140441,140442,140450],{},[25,140443,140444,140445,101432,140447,140449],{},"里面包含 ",[34,140446,251],{},[34,140448,25],{}," 还有链接",[25,140451,139922,140452,140454,140455,140457,140458,140461,140462],{},[34,140453,25],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[34,140456,131508],{}," 2.设置 ",[34,140459,140460],{},"white-space: nowrap;"," 3. 设置 ",[34,140463,140464],{},"text-overflow: ellipsis;",[15,140466,140212],{},[63,140468,140470],{"className":126842,"code":140469,"language":126844,"meta":68,"style":68},"div {\n  overflow: hidden;\n}\n",[34,140471,140472,140478,140489],{"__ignoreMap":68},[72,140473,140474,140476],{"class":74,"line":75},[72,140475,52029],{"class":51718},[72,140477,15998],{"class":82},[72,140479,140480,140483,140485,140487],{"class":74,"line":370},[72,140481,140482],{"class":362},"  overflow",[72,140484,51855],{"class":82},[72,140486,62132],{"class":362},[72,140488,1719],{"class":82},[72,140490,140491],{"class":74,"line":1608},[72,140492,1994],{"class":82},[15,140494,140301],{},[63,140496,140497],{"className":126842,"code":140469,"language":126844,"meta":68,"style":68},[34,140498,140499,140505,140515],{"__ignoreMap":68},[72,140500,140501,140503],{"class":74,"line":75},[72,140502,52029],{"class":51718},[72,140504,15998],{"class":82},[72,140506,140507,140509,140511,140513],{"class":74,"line":370},[72,140508,140482],{"class":362},[72,140510,51855],{"class":82},[72,140512,62132],{"class":362},[72,140514,1719],{"class":82},[72,140516,140517],{"class":74,"line":1608},[72,140518,1994],{"class":82},[15,140520,140521,140522,140525],{},"2 号盒子为 ",[34,140523,140524],{},"lifeservice"," 生活服务模块 高度为 209px",[1891,140527],{"style":126698,"src":140528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[251,140530,140531,140534,140544,140568,140579],{},[25,140532,140533],{},"设置边框（左右下边框）",[25,140535,140536,140537,140540,140541,140543],{},"里面的内容 是 ",[34,140538,140539],{},"ul > 12*li","，给",[34,140542,25],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[25,140545,140546,140547],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[251,140548,140549,140554,140563],{},[25,140550,140551,140553],{},[34,140552,140524],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[25,140555,140556,140557,140559,140560,140562],{},"可以让 ",[34,140558,140524],{}," 里面的 ",[34,140561,251],{}," 宽度为 252，就可以装的下 4 个 小 li",[25,140564,140565,140567],{},[34,140566,140524],{}," 盒子 overflow 隐藏多余的部分就可以了",[25,140569,116867,140570,140572,140573,140575,140576,140578],{},[34,140571,25],{}," 里面放一个 ",[34,140574,995],{},"（里面放图标），下面的文本用 ",[34,140577,15],{}," 标签包裹",[25,140580,139342,140581,140583,140584,140586,140587,139376,140589,140592],{},[34,140582,995],{}," 设置 24px宽和28px的高（注意 ",[34,140585,995],{}," 是行内元素， 转成行内块），给 ",[34,140588,25],{},[34,140590,140591],{},"text-align:center"," 让里面内容居中显示",[15,140594,140212],{},[63,140596,140598],{"className":126842,"code":140597,"language":126844,"meta":68,"style":68},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[34,140599,140600,140618,140623,140633],{"__ignoreMap":68},[72,140601,140602,140604,140606,140608,140610,140612,140614,140616],{"class":74,"line":75},[72,140603,72],{"class":51718},[72,140605,12861],{"class":82},[72,140607,257],{"class":51718},[72,140609,12861],{"class":82},[72,140611,23978],{"class":51718},[72,140613,12861],{"class":82},[72,140615,707],{"class":51718},[72,140617,15998],{"class":82},[72,140619,140620],{"class":74,"line":370},[72,140621,140622],{"class":621},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[72,140624,140625,140627,140629,140631],{"class":74,"line":1608},[72,140626,128458],{"class":362},[72,140628,51855],{"class":82},[72,140630,128520],{"class":362},[72,140632,1719],{"class":82},[72,140634,140635],{"class":74,"line":1623},[72,140636,1994],{"class":82},[15,140638,140301],{},[63,140640,140641],{"className":126842,"code":140597,"language":126844,"meta":68,"style":68},[34,140642,140643,140661,140665,140675],{"__ignoreMap":68},[72,140644,140645,140647,140649,140651,140653,140655,140657,140659],{"class":74,"line":75},[72,140646,72],{"class":51718},[72,140648,12861],{"class":82},[72,140650,257],{"class":51718},[72,140652,12861],{"class":82},[72,140654,23978],{"class":51718},[72,140656,12861],{"class":82},[72,140658,707],{"class":51718},[72,140660,15998],{"class":82},[72,140662,140663],{"class":74,"line":370},[72,140664,140622],{"class":621},[72,140666,140667,140669,140671,140673],{"class":74,"line":1608},[72,140668,128458],{"class":362},[72,140670,51855],{"class":82},[72,140672,128520],{"class":362},[72,140674,1719],{"class":82},[72,140676,140677],{"class":74,"line":1623},[72,140678,1994],{"class":82},[15,140680,140681,140682,140685],{},"3 号盒子为 ",[34,140683,140684],{},"bargain"," 特价商品",[251,140687,140688],{},[25,140689,140690],{},"这个比较简单，直接插入一张图片即可",[15,140692,140212],{},[63,140694,140695],{"className":127589,"code":134344,"language":127591,"meta":68,"style":68},[34,140696,140697],{"__ignoreMap":68},[72,140698,140699,140701,140703,140705,140707,140709,140711,140713,140715,140717,140719,140721],{"class":74,"line":75},[72,140700,1464],{"class":82},[72,140702,1891],{"class":51718},[72,140704,55657],{"class":358},[72,140706,609],{"class":82},[72,140708,134359],{"class":366},[72,140710,55665],{"class":358},[72,140712,609],{"class":82},[72,140714,134366],{"class":366},[72,140716,134369],{"class":358},[72,140718,609],{"class":82},[72,140720,134374],{"class":366},[72,140722,51725],{"class":82},[15,140724,140301],{},[63,140726,140727],{"className":127589,"code":134344,"language":127591,"meta":68,"style":68},[34,140728,140729],{"__ignoreMap":68},[72,140730,140731,140733,140735,140737,140739,140741,140743,140745,140747,140749,140751,140753],{"class":74,"line":75},[72,140732,1464],{"class":82},[72,140734,1891],{"class":51718},[72,140736,55657],{"class":358},[72,140738,609],{"class":82},[72,140740,134359],{"class":366},[72,140742,55665],{"class":358},[72,140744,609],{"class":82},[72,140746,134366],{"class":366},[72,140748,134369],{"class":358},[72,140750,609],{"class":82},[72,140752,134374],{"class":366},[72,140754,51725],{"class":82},[531,140756,140758],{"id":140757},"_1612-推荐模块制作","16.1.2 推荐模块制作",[1891,140760],{"style":126698,"src":140761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[15,140763,140764,140765,140768],{},"大盒子 ",[34,140766,140767],{},"recom"," 推荐模块 recommend",[251,140770,140771],{},[25,140772,140773,140774,140776,140777,140780],{},"给这个 ",[34,140775,140767],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[34,140778,140779],{},"#ebebeb","），设置距离上边 12px",[15,140782,140212],{},[63,140784,140786],{"className":126842,"code":140785,"language":126844,"meta":68,"style":68},"div {\n  background-color: #f0f0f0;\n}\n",[34,140787,140788,140794,140805],{"__ignoreMap":68},[72,140789,140790,140792],{"class":74,"line":75},[72,140791,52029],{"class":51718},[72,140793,15998],{"class":82},[72,140795,140796,140798,140800,140803],{"class":74,"line":370},[72,140797,71296],{"class":362},[72,140799,51855],{"class":82},[72,140801,140802],{"class":362},"#f0f0f0",[72,140804,1719],{"class":82},[72,140806,140807],{"class":74,"line":1608},[72,140808,1994],{"class":82},[15,140810,140301],{},[63,140812,140813],{"className":126842,"code":140785,"language":126844,"meta":68,"style":68},[34,140814,140815,140821,140831],{"__ignoreMap":68},[72,140816,140817,140819],{"class":74,"line":75},[72,140818,52029],{"class":51718},[72,140820,15998],{"class":82},[72,140822,140823,140825,140827,140829],{"class":74,"line":370},[72,140824,71296],{"class":362},[72,140826,51855],{"class":82},[72,140828,140802],{"class":362},[72,140830,1719],{"class":82},[72,140832,140833],{"class":74,"line":1608},[72,140834,1994],{"class":82},[15,140836,140837],{},"里面包含 2 个盒子， 浮动即可",[15,140839,140212],{},[63,140841,140842],{"className":126842,"code":139512,"language":126844,"meta":68,"style":68},[34,140843,140844,140850,140860],{"__ignoreMap":68},[72,140845,140846,140848],{"class":74,"line":75},[72,140847,130690],{"class":358},[72,140849,15998],{"class":82},[72,140851,140852,140854,140856,140858],{"class":74,"line":370},[72,140853,131322],{"class":362},[72,140855,51855],{"class":82},[72,140857,165],{"class":362},[72,140859,1719],{"class":82},[72,140861,140862],{"class":74,"line":1608},[72,140863,1994],{"class":82},[15,140865,140866,140867],{},"1 号盒子 ",[34,140868,140869],{},"recom_hd",[251,140871,140872,140875],{},[25,140873,140874],{},"设置宽度205px，高度163px",[25,140876,140346,140877,140879],{},[34,140878,1891],{},"标签，插入图片即可",[15,140881,140212],{},[63,140883,140884],{"className":127589,"code":134344,"language":127591,"meta":68,"style":68},[34,140885,140886],{"__ignoreMap":68},[72,140887,140888,140890,140892,140894,140896,140898,140900,140902,140904,140906,140908,140910],{"class":74,"line":75},[72,140889,1464],{"class":82},[72,140891,1891],{"class":51718},[72,140893,55657],{"class":358},[72,140895,609],{"class":82},[72,140897,134359],{"class":366},[72,140899,55665],{"class":358},[72,140901,609],{"class":82},[72,140903,134366],{"class":366},[72,140905,134369],{"class":358},[72,140907,609],{"class":82},[72,140909,134374],{"class":366},[72,140911,51725],{"class":82},[15,140913,140301],{},[63,140915,140916],{"className":127589,"code":134344,"language":127591,"meta":68,"style":68},[34,140917,140918],{"__ignoreMap":68},[72,140919,140920,140922,140924,140926,140928,140930,140932,140934,140936,140938,140940,140942],{"class":74,"line":75},[72,140921,1464],{"class":82},[72,140923,1891],{"class":51718},[72,140925,55657],{"class":358},[72,140927,609],{"class":82},[72,140929,134359],{"class":366},[72,140931,55665],{"class":358},[72,140933,609],{"class":82},[72,140935,134366],{"class":366},[72,140937,134369],{"class":358},[72,140939,609],{"class":82},[72,140941,134374],{"class":366},[72,140943,51725],{"class":82},[15,140945,140946,140947,140950],{},"2 号盒子 ",[34,140948,140949],{},"recom_bd"," ，注意里面的小竖线",[251,140952,140953,140964,140967,140972,140977],{},[25,140954,140955,140956,140958,140959,140961,140962],{},"右侧结构里面放 ",[34,140957,251],{}," 包含 4个 ",[34,140960,25],{},"，每个li里面包含一个",[34,140963,1891],{},[25,140965,140966],{},"直接利用切片工具把里面的内容当成一张图片",[25,140968,139342,140969,140971],{},[34,140970,25],{}," 设置浮动",[25,140973,139342,140974,140976],{},[34,140975,1891],{}," 设置宽高，宽度 248px，高度 163px",[25,140978,140979,140980,140540,140983,140985,140986,140988,140989],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[34,140981,140982],{},"top 10px",[34,140984,25],{},"设置相对定位（注意，最后一个",[34,140987,25],{},"不用设置伪元素），可以利用 ",[34,140990,140991],{},"nth-child(-n+3){...}",[15,140993,140212],{},[63,140995,140996],{"className":126842,"code":138684,"language":126844,"meta":68,"style":68},[34,140997,140998,141006,141016,141026],{"__ignoreMap":68},[72,140999,141000,141002,141004],{"class":74,"line":75},[72,141001,52029],{"class":51718},[72,141003,137843],{"class":358},[72,141005,15998],{"class":82},[72,141007,141008,141010,141012,141014],{"class":74,"line":370},[72,141009,137850],{"class":362},[72,141011,51855],{"class":82},[72,141013,8078],{"class":366},[72,141015,1719],{"class":82},[72,141017,141018,141020,141022,141024],{"class":74,"line":1608},[72,141019,128458],{"class":362},[72,141021,51855],{"class":82},[72,141023,61287],{"class":362},[72,141025,1719],{"class":82},[72,141027,141028],{"class":74,"line":1623},[72,141029,1994],{"class":82},[15,141031,140301],{},[63,141033,141034],{"className":126842,"code":138684,"language":126844,"meta":68,"style":68},[34,141035,141036,141044,141054,141064],{"__ignoreMap":68},[72,141037,141038,141040,141042],{"class":74,"line":75},[72,141039,52029],{"class":51718},[72,141041,137843],{"class":358},[72,141043,15998],{"class":82},[72,141045,141046,141048,141050,141052],{"class":74,"line":370},[72,141047,137850],{"class":362},[72,141049,51855],{"class":82},[72,141051,8078],{"class":366},[72,141053,1719],{"class":82},[72,141055,141056,141058,141060,141062],{"class":74,"line":1608},[72,141057,128458],{"class":362},[72,141059,51855],{"class":82},[72,141061,61287],{"class":362},[72,141063,1719],{"class":82},[72,141065,141066],{"class":74,"line":1623},[72,141067,1994],{"class":82},[531,141069,141071],{"id":141070},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[1891,141073],{"style":126698,"src":141074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[15,141076,141077],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[15,141079,141080],{},"第一楼是家用电器模块： 里面包含两个盒子",[15,141082,141083,141086],{},[34,141084,141085],{},"box_hd"," 制作",[15,141088,140866,141089,141091],{},[34,141090,141085],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[1891,141093],{"style":126698,"src":141094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[251,141096,141097,141102,141107,141110],{},[25,141098,141099,141101],{},[34,141100,141085],{}," 给 30px 的高度，2个像素的下边框",[25,141103,141104,141105],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[34,141106,139353],{},[25,141108,141109],{},"左侧盒左浮动，右侧盒子右浮动",[25,141111,141112,141114,141115,141117],{},[34,141113,257],{},"标签之间的距离用左右的",[34,141116,31301],{},"撑开即可",[15,141119,141120],{},"结构代码",[63,141122,141123],{"className":126842,"code":139512,"language":126844,"meta":68,"style":68},[34,141124,141125,141131,141141],{"__ignoreMap":68},[72,141126,141127,141129],{"class":74,"line":75},[72,141128,130690],{"class":358},[72,141130,15998],{"class":82},[72,141132,141133,141135,141137,141139],{"class":74,"line":370},[72,141134,131322],{"class":362},[72,141136,51855],{"class":82},[72,141138,165],{"class":362},[72,141140,1719],{"class":82},[72,141142,141143],{"class":74,"line":1608},[72,141144,1994],{"class":82},[15,141146,141147],{},"样式代码",[63,141149,141150],{"className":126842,"code":139512,"language":126844,"meta":68,"style":68},[34,141151,141152,141158,141168],{"__ignoreMap":68},[72,141153,141154,141156],{"class":74,"line":75},[72,141155,130690],{"class":358},[72,141157,15998],{"class":82},[72,141159,141160,141162,141164,141166],{"class":74,"line":370},[72,141161,131322],{"class":362},[72,141163,51855],{"class":82},[72,141165,165],{"class":362},[72,141167,1719],{"class":82},[72,141169,141170],{"class":74,"line":1608},[72,141171,1994],{"class":82},[15,141173,141174,141086],{},[34,141175,141176],{},"box_bd",[15,141178,141179],{},"2 号盒子 box_bd，不要给高度",[1891,141181],{"style":126698,"src":141182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[15,141184,141185],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[15,141187,141188],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[15,141190,141191],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[251,141193,141194,141206,141222],{},[25,141195,141196,141198,141199,141202,141203,141205],{},[34,141197,141176],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[34,141200,141201],{},"tab_content","，在",[34,141204,141201],{}," 里面包裹tab选项卡对应的内容",[25,141207,141208,141209,141212,141213,141215,141216,141218,141219,141221],{},"内容被一个大盒子包裹（",[34,141210,141211],{},"tab_list_item","），里面是 ",[34,141214,251],{}," 包裹 5个 ",[34,141217,25],{},"，每个",[34,141220,25],{},"设置对应的宽度，然后设置浮动",[25,141223,141224,141225,141227,141228,141230,141231],{},"而这5个",[34,141226,25],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[34,141229,25],{},"设置",[251,141232,141233,141251,141254],{},[25,141234,141235,141236,141238,141239,141241,141242,141244,141245,141247,141248,141250],{},"第一个小 ",[34,141237,25],{}," 分为上下结构，上面是 ",[34,141240,251],{}," 包裹 ",[34,141243,25],{}," ，",[34,141246,25],{},"里面包裹 ",[34,141249,257],{},"，下面插入一张图片",[25,141252,141253],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[25,141255,141256,141257,141259,141260,141262,141263,141265],{},"后面的小 ",[34,141258,25],{}," 里面先放一个",[34,141261,257],{},"标签，然后在",[34,141264,257],{},"标签里面插入图片即可",[15,141267,141120],{},[63,141269,141270],{"className":127589,"code":134344,"language":127591,"meta":68,"style":68},[34,141271,141272],{"__ignoreMap":68},[72,141273,141274,141276,141278,141280,141282,141284,141286,141288,141290,141292,141294,141296],{"class":74,"line":75},[72,141275,1464],{"class":82},[72,141277,1891],{"class":51718},[72,141279,55657],{"class":358},[72,141281,609],{"class":82},[72,141283,134359],{"class":366},[72,141285,55665],{"class":358},[72,141287,609],{"class":82},[72,141289,134366],{"class":366},[72,141291,134369],{"class":358},[72,141293,609],{"class":82},[72,141295,134374],{"class":366},[72,141297,51725],{"class":82},[15,141299,141147],{},[63,141301,141302],{"className":127589,"code":134344,"language":127591,"meta":68,"style":68},[34,141303,141304],{"__ignoreMap":68},[72,141305,141306,141308,141310,141312,141314,141316,141318,141320,141322,141324,141326,141328],{"class":74,"line":75},[72,141307,1464],{"class":82},[72,141309,1891],{"class":51718},[72,141311,55657],{"class":358},[72,141313,609],{"class":82},[72,141315,134359],{"class":366},[72,141317,55665],{"class":358},[72,141319,609],{"class":82},[72,141321,134366],{"class":366},[72,141323,134369],{"class":358},[72,141325,609],{"class":82},[72,141327,134374],{"class":366},[72,141329,51725],{"class":82},[15,141331,141332],{},"tab栏切换需求！！！！！！介绍：",[1891,141334],{"style":126698,"src":141335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[251,141337,141338,141346,141352,141355],{},[25,141339,141340,141343,141344],{},[34,141341,141342],{},"tab","栏的布局是 ",[34,141345,139353],{},[25,141347,141348,141349,141351],{},"有多少个",[34,141350,141342],{},"选项卡，那么对应就有多少个内容",[25,141353,141354],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[25,141356,141357,141358,141361,141362,141364,141365,141367],{},"等后面我们学习了",[34,141359,141360],{},"js","之后，我们就会配合",[34,141363,141360],{},"来实现，",[34,141366,141342],{},"栏的切换",[85,141369,141371],{"id":141370},"_162-列表制作","16.2 列表制作",[531,141373,141375],{"id":141374},"_1621-准备工作","16.2.1 准备工作",[251,141377,141378,141381,141384,141387],{},[25,141379,141380],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[25,141382,141383],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[25,141385,141386],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[25,141388,141389],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[531,141391,141393,141394,101432,141396,141398],{"id":141392},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[34,141395,131847],{},[34,141397,54131],{}," 修改",[1891,141400],{"style":126698,"src":141401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[251,141403,141404],{},[25,141405,141406],{},"秒杀盒子 sk（ second kill ） 定位即可",[15,141408,140212],{},[63,141410,141411],{"className":126842,"code":132274,"language":126844,"meta":68,"style":68},[34,141412,141413,141417,141431,141435,141449,141453,141467,141471,141485,141489],{"__ignoreMap":68},[72,141414,141415],{"class":74,"line":75},[72,141416,132281],{"class":621},[72,141418,141419,141421,141423,141425,141427,141429],{"class":74,"line":370},[72,141420,132286],{"class":358},[72,141422,80225],{"class":82},[72,141424,129202],{"class":362},[72,141426,51855],{"class":82},[72,141428,132295],{"class":362},[72,141430,129772],{"class":82},[72,141432,141433],{"class":74,"line":1608},[72,141434,132302],{"class":621},[72,141436,141437,141439,141441,141443,141445,141447],{"class":74,"line":1623},[72,141438,132307],{"class":358},[72,141440,80225],{"class":82},[72,141442,129202],{"class":362},[72,141444,51855],{"class":82},[72,141446,55182],{"class":362},[72,141448,129772],{"class":82},[72,141450,141451],{"class":74,"line":1629},[72,141452,132322],{"class":621},[72,141454,141455,141457,141459,141461,141463,141465],{"class":74,"line":1643},[72,141456,132327],{"class":358},[72,141458,80225],{"class":82},[72,141460,129202],{"class":362},[72,141462,51855],{"class":82},[72,141464,55249],{"class":362},[72,141466,129772],{"class":82},[72,141468,141469],{"class":74,"line":1649},[72,141470,132342],{"class":621},[72,141472,141473,141475,141477,141479,141481,141483],{"class":74,"line":1740},[72,141474,132347],{"class":358},[72,141476,80225],{"class":82},[72,141478,129202],{"class":362},[72,141480,51855],{"class":82},[72,141482,86650],{"class":362},[72,141484,129772],{"class":82},[72,141486,141487],{"class":74,"line":1746},[72,141488,132362],{"class":621},[72,141490,141491,141493,141495,141497,141499,141501],{"class":74,"line":1758},[72,141492,132367],{"class":358},[72,141494,80225],{"class":82},[72,141496,129202],{"class":362},[72,141498,51855],{"class":82},[72,141500,132376],{"class":362},[72,141502,129772],{"class":82},[15,141504,140301],{},[63,141506,141507],{"className":126842,"code":132274,"language":126844,"meta":68,"style":68},[34,141508,141509,141513,141527,141531,141545,141549,141563,141567,141581,141585],{"__ignoreMap":68},[72,141510,141511],{"class":74,"line":75},[72,141512,132281],{"class":621},[72,141514,141515,141517,141519,141521,141523,141525],{"class":74,"line":370},[72,141516,132286],{"class":358},[72,141518,80225],{"class":82},[72,141520,129202],{"class":362},[72,141522,51855],{"class":82},[72,141524,132295],{"class":362},[72,141526,129772],{"class":82},[72,141528,141529],{"class":74,"line":1608},[72,141530,132302],{"class":621},[72,141532,141533,141535,141537,141539,141541,141543],{"class":74,"line":1623},[72,141534,132307],{"class":358},[72,141536,80225],{"class":82},[72,141538,129202],{"class":362},[72,141540,51855],{"class":82},[72,141542,55182],{"class":362},[72,141544,129772],{"class":82},[72,141546,141547],{"class":74,"line":1629},[72,141548,132322],{"class":621},[72,141550,141551,141553,141555,141557,141559,141561],{"class":74,"line":1643},[72,141552,132327],{"class":358},[72,141554,80225],{"class":82},[72,141556,129202],{"class":362},[72,141558,51855],{"class":82},[72,141560,55249],{"class":362},[72,141562,129772],{"class":82},[72,141564,141565],{"class":74,"line":1649},[72,141566,132342],{"class":621},[72,141568,141569,141571,141573,141575,141577,141579],{"class":74,"line":1740},[72,141570,132347],{"class":358},[72,141572,80225],{"class":82},[72,141574,129202],{"class":362},[72,141576,51855],{"class":82},[72,141578,86650],{"class":362},[72,141580,129772],{"class":82},[72,141582,141583],{"class":74,"line":1746},[72,141584,132362],{"class":621},[72,141586,141587,141589,141591,141593,141595,141597],{"class":74,"line":1758},[72,141588,132367],{"class":358},[72,141590,80225],{"class":82},[72,141592,129202],{"class":362},[72,141594,51855],{"class":82},[72,141596,132376],{"class":362},[72,141598,129772],{"class":82},[251,141600,141601,141612],{},[25,141602,141603,141604,141607,141608,101432,141610],{},"1 号盒子左侧浮动 ",[34,141605,141606],{},"sk_list"," 里面包含 ",[34,141609,251],{},[34,141611,25],{},[25,141613,141614,141615,141607,141618,101432,141620],{},"2 号盒子左侧浮动 ",[34,141616,141617],{},"sk_con",[34,141619,251],{},[34,141621,25],{},[15,141623,140212],{},[63,141625,141626],{"className":126842,"code":139512,"language":126844,"meta":68,"style":68},[34,141627,141628,141634,141644],{"__ignoreMap":68},[72,141629,141630,141632],{"class":74,"line":75},[72,141631,130690],{"class":358},[72,141633,15998],{"class":82},[72,141635,141636,141638,141640,141642],{"class":74,"line":370},[72,141637,131322],{"class":362},[72,141639,51855],{"class":82},[72,141641,165],{"class":362},[72,141643,1719],{"class":82},[72,141645,141646],{"class":74,"line":1608},[72,141647,1994],{"class":82},[15,141649,140301],{},[63,141651,141652],{"className":126842,"code":139512,"language":126844,"meta":68,"style":68},[34,141653,141654,141660,141670],{"__ignoreMap":68},[72,141655,141656,141658],{"class":74,"line":75},[72,141657,130690],{"class":358},[72,141659,15998],{"class":82},[72,141661,141662,141664,141666,141668],{"class":74,"line":370},[72,141663,131322],{"class":362},[72,141665,51855],{"class":82},[72,141667,165],{"class":362},[72,141669,1719],{"class":82},[72,141671,141672],{"class":74,"line":1608},[72,141673,1994],{"class":82},[531,141675,141677,141678],{"id":141676},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[34,141679,141680],{},"sk_container",[1891,141682],{"style":126698,"src":141683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[251,141685,141686,141691],{},[25,141687,140866,141688,141690],{},[34,141689,141680],{}," 给宽度 1200，不要给高度",[25,141692,141693],{},"一定不要忘记清除浮动",[15,141695,140212],{},[63,141697,141698],{"className":126842,"code":139512,"language":126844,"meta":68,"style":68},[34,141699,141700,141706,141716],{"__ignoreMap":68},[72,141701,141702,141704],{"class":74,"line":75},[72,141703,130690],{"class":358},[72,141705,15998],{"class":82},[72,141707,141708,141710,141712,141714],{"class":74,"line":370},[72,141709,131322],{"class":362},[72,141711,51855],{"class":82},[72,141713,165],{"class":362},[72,141715,1719],{"class":82},[72,141717,141718],{"class":74,"line":1608},[72,141719,1994],{"class":82},[22,141721,141722],{},[25,141723,141724],{},"sk_hd制作",[251,141726,141727],{},[25,141728,140946,141729,141732],{},[34,141730,141731],{},"sk_hd"," ，插入图片即可",[15,141734,140212],{},[63,141736,141737],{"className":127589,"code":134344,"language":127591,"meta":68,"style":68},[34,141738,141739],{"__ignoreMap":68},[72,141740,141741,141743,141745,141747,141749,141751,141753,141755,141757,141759,141761,141763],{"class":74,"line":75},[72,141742,1464],{"class":82},[72,141744,1891],{"class":51718},[72,141746,55657],{"class":358},[72,141748,609],{"class":82},[72,141750,134359],{"class":366},[72,141752,55665],{"class":358},[72,141754,609],{"class":82},[72,141756,134366],{"class":366},[72,141758,134369],{"class":358},[72,141760,609],{"class":82},[72,141762,134374],{"class":366},[72,141764,51725],{"class":82},[22,141766,141767],{"start":370},[25,141768,141769],{},"sk_bd制作",[251,141771,141772],{},[25,141773,141774,141775,141778,141779,101432,141781,141783],{},"3 号盒子 ",[34,141776,141777],{},"sk_bd"," ，里面包含很多的 ",[34,141780,251],{},[34,141782,25],{},[251,141784,141785,141794],{},[25,141786,141787,141788,141790,141791,141793],{},"当鼠标移入到 ",[34,141789,25],{}," 上面的时候显示红色的边框，在这里先给 ",[34,141792,25],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[25,141795,141796,141797,141799,141800,141802,141803,141806,141807,141809],{},"由于给每个 ",[34,141798,25],{}," 都设置了外边距，导致一行的最后一个 ",[34,141801,25],{}," 掉了下来，在这里我们利用 ",[34,141804,141805],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[34,141808,25],{},"，去掉外边距就好了",[15,141811,140212],{},[63,141813,141814],{"className":126842,"code":139031,"language":126844,"meta":68,"style":68},[34,141815,141816,141822,141834],{"__ignoreMap":68},[72,141817,141818,141820],{"class":74,"line":75},[72,141819,52029],{"class":51718},[72,141821,15998],{"class":82},[72,141823,141824,141826,141828,141830,141832],{"class":74,"line":370},[72,141825,70888],{"class":362},[72,141827,51855],{"class":82},[72,141829,747],{"class":362},[72,141831,51974],{"class":362},[72,141833,1719],{"class":82},[72,141835,141836],{"class":74,"line":1608},[72,141837,1994],{"class":82},[15,141839,140301],{},[63,141841,141842],{"className":126842,"code":139031,"language":126844,"meta":68,"style":68},[34,141843,141844,141850,141862],{"__ignoreMap":68},[72,141845,141846,141848],{"class":74,"line":75},[72,141847,52029],{"class":51718},[72,141849,15998],{"class":82},[72,141851,141852,141854,141856,141858,141860],{"class":74,"line":370},[72,141853,70888],{"class":362},[72,141855,51855],{"class":82},[72,141857,747],{"class":362},[72,141859,51974],{"class":362},[72,141861,1719],{"class":82},[72,141863,141864],{"class":74,"line":1608},[72,141865,1994],{"class":82},[85,141867,141869],{"id":141868},"_163-注册页面制作","16.3 注册页面制作",[1891,141871],{"style":126698,"src":141872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[15,141874,141875,141877],{},[707,141876,9451],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[1891,141879],{"style":126698,"src":141880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[531,141882,141884],{"id":141883},"_1631-准备工作","16.3.1 准备工作",[251,141886,141887,141890],{},[25,141888,141889],{},"创建register.html，引入 base.css，引入favicon图标",[25,141891,141892],{},"创建register.css ，在html页面进行引入",[531,141894,141896,141897,141899],{"id":141895},"_1632-header-头部实现","16.3.2 ",[34,141898,131847],{}," 头部实现",[251,141901,141902,141905],{},[25,141903,141904],{},"整个内容用 版心 进行包裹",[25,141906,141907],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[15,141909,140212],{},[63,141911,141912],{"className":127589,"code":134344,"language":127591,"meta":68,"style":68},[34,141913,141914],{"__ignoreMap":68},[72,141915,141916,141918,141920,141922,141924,141926,141928,141930,141932,141934,141936,141938],{"class":74,"line":75},[72,141917,1464],{"class":82},[72,141919,1891],{"class":51718},[72,141921,55657],{"class":358},[72,141923,609],{"class":82},[72,141925,134359],{"class":366},[72,141927,55665],{"class":358},[72,141929,609],{"class":82},[72,141931,134366],{"class":366},[72,141933,134369],{"class":358},[72,141935,609],{"class":82},[72,141937,134374],{"class":366},[72,141939,51725],{"class":82},[15,141941,140301],{},[63,141943,141944],{"className":127589,"code":134344,"language":127591,"meta":68,"style":68},[34,141945,141946],{"__ignoreMap":68},[72,141947,141948,141950,141952,141954,141956,141958,141960,141962,141964,141966,141968,141970],{"class":74,"line":75},[72,141949,1464],{"class":82},[72,141951,1891],{"class":51718},[72,141953,55657],{"class":358},[72,141955,609],{"class":82},[72,141957,134359],{"class":366},[72,141959,55665],{"class":358},[72,141961,609],{"class":82},[72,141963,134366],{"class":366},[72,141965,134369],{"class":358},[72,141967,609],{"class":82},[72,141969,134374],{"class":366},[72,141971,51725],{"class":82},[531,141973,141975,141976,141979],{"id":141974},"_1633-registerarea-主体模块实现","16.3.3 ",[34,141977,141978],{},"registerarea"," 主体模块实现",[1891,141981],{"style":126698,"src":141982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[15,141984,141985],{},"整个大盒子 高度为 522px，设置4个边框",[15,141987,140212],{},[63,141989,141990],{"className":126842,"code":130999,"language":126844,"meta":68,"style":68},[34,141991,141992,141998,142014],{"__ignoreMap":68},[72,141993,141994,141996],{"class":74,"line":75},[72,141995,52029],{"class":51718},[72,141997,15998],{"class":82},[72,141999,142000,142002,142004,142006,142008,142010,142012],{"class":74,"line":370},[72,142001,71314],{"class":362},[72,142003,51855],{"class":82},[72,142005,772],{"class":362},[72,142007,51910],{"class":78},[72,142009,51939],{"class":362},[72,142011,130234],{"class":362},[72,142013,1719],{"class":82},[72,142015,142016],{"class":74,"line":1608},[72,142017,1994],{"class":82},[15,142019,140301],{},[63,142021,142022],{"className":126842,"code":130999,"language":126844,"meta":68,"style":68},[34,142023,142024,142030,142046],{"__ignoreMap":68},[72,142025,142026,142028],{"class":74,"line":75},[72,142027,52029],{"class":51718},[72,142029,15998],{"class":82},[72,142031,142032,142034,142036,142038,142040,142042,142044],{"class":74,"line":370},[72,142033,71314],{"class":362},[72,142035,51855],{"class":82},[72,142037,772],{"class":362},[72,142039,51910],{"class":78},[72,142041,51939],{"class":362},[72,142043,130234],{"class":362},[72,142045,1719],{"class":82},[72,142047,142048],{"class":74,"line":1608},[72,142049,1994],{"class":82},[15,142051,142052],{},"1号盒子 是一个 h3 标签，放标题",[251,142054,142055],{},[25,142056,142057],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[15,142059,140212],{},[63,142061,142062],{"className":126842,"code":139512,"language":126844,"meta":68,"style":68},[34,142063,142064,142070,142080],{"__ignoreMap":68},[72,142065,142066,142068],{"class":74,"line":75},[72,142067,130690],{"class":358},[72,142069,15998],{"class":82},[72,142071,142072,142074,142076,142078],{"class":74,"line":370},[72,142073,131322],{"class":362},[72,142075,51855],{"class":82},[72,142077,165],{"class":362},[72,142079,1719],{"class":82},[72,142081,142082],{"class":74,"line":1608},[72,142083,1994],{"class":82},[15,142085,140301],{},[63,142087,142088],{"className":126842,"code":139512,"language":126844,"meta":68,"style":68},[34,142089,142090,142096,142106],{"__ignoreMap":68},[72,142091,142092,142094],{"class":74,"line":75},[72,142093,130690],{"class":358},[72,142095,15998],{"class":82},[72,142097,142098,142100,142102,142104],{"class":74,"line":370},[72,142099,131322],{"class":362},[72,142101,51855],{"class":82},[72,142103,165],{"class":362},[72,142105,1719],{"class":82},[72,142107,142108],{"class":74,"line":1608},[72,142109,1994],{"class":82},[15,142111,142112],{},"2号盒子 里面放注册的内容",[251,142114,142115,142118,142127,142141,142154,142157,142160,142178,142192],{},[25,142116,142117],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[25,142119,142120,142121,142123,142124,142126],{},"里面的内容利用 ",[34,142122,251],{}," 包含 ",[34,142125,25],{}," 来实现的（不需要用表格）",[25,142128,139356,142129,142131,142132,142134,142135,142137,142138,142140],{},[34,142130,25],{}," 里面，左侧放 ",[34,142133,34026],{}," 标签， 中间放",[34,142136,54239],{}," 标签， 右侧放 ",[34,142139,72],{}," 提示信息",[25,142142,142143,142144,142146,142147,142149,142150,142153],{},"左侧 ",[34,142145,34026],{},"里面的文字都是右对齐，我们可以给",[34,142148,34026],{},"设置一个宽度（88px），然后利用",[34,142151,142152],{},"text-align"," 来设置右对齐",[25,142155,142156],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[25,142158,142159],{},"右侧 span修饰一下文字颜色",[25,142161,142162,142163],{},"提示信息的样式优化",[251,142164,142165,142168,142171],{},[25,142166,142167],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[25,142169,142170],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[25,142172,142173,142174,142177],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[34,142175,142176],{},"vertical-algin"," 来设置 图片与文字对齐方式",[25,142179,142180,142181],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[251,142182,142183,142189],{},[25,142184,142185,142186,142188],{},"设置 ",[34,142187,23978],{}," 的 左右 12px 的内边距，设置一下文字颜色",[25,142190,142191],{},"分别设置 背景颜色",[25,142193,142194,142195,142197],{},"同意协议 和 完成注册 都是用 ",[34,142196,25],{}," 进行包裹",[15,142199,140212],{},[63,142201,142202],{"className":126842,"code":140785,"language":126844,"meta":68,"style":68},[34,142203,142204,142210,142220],{"__ignoreMap":68},[72,142205,142206,142208],{"class":74,"line":75},[72,142207,52029],{"class":51718},[72,142209,15998],{"class":82},[72,142211,142212,142214,142216,142218],{"class":74,"line":370},[72,142213,71296],{"class":362},[72,142215,51855],{"class":82},[72,142217,140802],{"class":362},[72,142219,1719],{"class":82},[72,142221,142222],{"class":74,"line":1608},[72,142223,1994],{"class":82},[15,142225,140301],{},[63,142227,142228],{"className":126842,"code":140785,"language":126844,"meta":68,"style":68},[34,142229,142230,142236,142246],{"__ignoreMap":68},[72,142231,142232,142234],{"class":74,"line":75},[72,142233,52029],{"class":51718},[72,142235,15998],{"class":82},[72,142237,142238,142240,142242,142244],{"class":74,"line":370},[72,142239,71296],{"class":362},[72,142241,51855],{"class":82},[72,142243,140802],{"class":362},[72,142245,1719],{"class":82},[72,142247,142248],{"class":74,"line":1608},[72,142249,1994],{"class":82},[531,142251,142253],{"id":142252},"_1634-底部实现","16.3.4 底部实现",[15,142255,140212],{},[63,142257,142258],{"className":126842,"code":140785,"language":126844,"meta":68,"style":68},[34,142259,142260,142266,142276],{"__ignoreMap":68},[72,142261,142262,142264],{"class":74,"line":75},[72,142263,52029],{"class":51718},[72,142265,15998],{"class":82},[72,142267,142268,142270,142272,142274],{"class":74,"line":370},[72,142269,71296],{"class":362},[72,142271,51855],{"class":82},[72,142273,140802],{"class":362},[72,142275,1719],{"class":82},[72,142277,142278],{"class":74,"line":1608},[72,142279,1994],{"class":82},[15,142281,140301],{},[63,142283,142284],{"className":127589,"code":130946,"language":127591,"meta":68,"style":68},[34,142285,142286,142290,142304,142308],{"__ignoreMap":68},[72,142287,142288],{"class":74,"line":75},[72,142289,130953],{"class":621},[72,142291,142292,142294,142296,142298,142300,142302],{"class":74,"line":370},[72,142293,1464],{"class":82},[72,142295,52029],{"class":51718},[72,142297,53904],{"class":358},[72,142299,609],{"class":82},[72,142301,130966],{"class":366},[72,142303,51725],{"class":82},[72,142305,142306],{"class":74,"line":1608},[72,142307,130973],{"class":82},[72,142309,142310,142312,142314],{"class":74,"line":1623},[72,142311,52203],{"class":82},[72,142313,52029],{"class":51718},[72,142315,51725],{"class":82},[85,142317,142319],{"id":142318},"_164-项目总结","16.4 项目总结",[22,142321,142322,142325,142328,142331],{},[25,142323,142324],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[25,142326,142327],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[25,142329,142330],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[25,142332,142333],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[1891,142335],{"style":126698,"src":142336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[22,142338,142339],{"start":1629},[25,142340,142341],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[1891,142343],{"style":126698,"src":142344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[22,142346,142347],{"start":1643},[25,142348,142349],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[1891,142351],{"style":126698,"src":142352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[63,142354,142355],{"className":127589,"code":136999,"language":127591,"meta":68,"style":68},[34,142356,142357],{"__ignoreMap":68},[72,142358,142359,142361,142363,142365,142367,142369,142371,142373,142375,142377,142379,142381],{"class":74,"line":75},[72,142360,1464],{"class":82},[72,142362,54239],{"class":51718},[72,142364,54242],{"class":358},[72,142366,609],{"class":82},[72,142368,63117],{"class":366},[72,142370,15346],{"class":358},[72,142372,609],{"class":82},[72,142374,137020],{"class":366},[72,142376,61438],{"class":358},[72,142378,609],{"class":82},[72,142380,137027],{"class":366},[72,142382,51725],{"class":82},[22,142384,142385,142388],{"start":1649},[25,142386,142387],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[25,142389,142390],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[473,142392,142393],{},"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":68,"searchDepth":370,"depth":370,"links":142395},[142396,142401,142408,142416],{"id":140022,"depth":370,"text":140023,"children":142397},[142398,142399,142400],{"id":140026,"depth":1608,"text":140027},{"id":140757,"depth":1608,"text":140758},{"id":141070,"depth":1608,"text":141071},{"id":141370,"depth":370,"text":141371,"children":142402},[142403,142404,142406],{"id":141374,"depth":1608,"text":141375},{"id":141392,"depth":1608,"text":142405},"16.2.2 列表页 header 和 nav 修改",{"id":141676,"depth":1608,"text":142407},"16.2.3 列表页主体 sk_container",{"id":141868,"depth":370,"text":141869,"children":142409},[142410,142411,142413,142415],{"id":141883,"depth":1608,"text":141884},{"id":141895,"depth":1608,"text":142412},"16.3.2 header 头部实现",{"id":141974,"depth":1608,"text":142414},"16.3.3 registerarea 主体模块实现",{"id":142252,"depth":1608,"text":142253},{"id":142318,"depth":370,"text":142319},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":140014,"description":23802},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142423,"title":142424,"body":142425,"description":23802,"extension":487,"meta":142533,"navigation":490,"path":142534,"seo":142535,"stem":142536,"__hash__":142537},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142426,"toc":142528},[142427,142430,142434,142437,142440,142449,142458,142462,142467,142474,142492,142495,142498,142501,142504,142507,142510,142513,142516,142519,142522,142525],[10,142428,142424],{"id":142429},"_17-web服务器与网站发布",[85,142431,142433],{"id":142432},"_171-web服务器","17.1 Web服务器",[15,142435,142436],{},"把自己网站上传到服务器上，可以让其他人访问",[1891,142438],{"style":126698,"src":142439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[15,142441,142442,142445,142446],{},[707,142443,142444],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[707,142447,142448],{},"Web 服务器等",[15,142450,142451,142452,101432,142455,26162],{},"根据服务器在网络中所在的位置不同，又可分为 ",[707,142453,142454],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[707,142456,142457],{},"远程服务器",[531,142459,142461],{"id":142460},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[15,142463,142464],{},[707,142465,142466],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[15,142468,142469,142470],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[257,142471,142472],{"href":142472,"rel":142473},"http:\u002F\u002Ffree.3v.do\u002F",[261],[251,142475,142476,142479,142482,142489],{},[25,142477,142478],{},"去免费空间网站注册账号。",[25,142480,142481],{},"记录下主机名、用户名、密码、域名。",[25,142483,142484,142485,142488],{},"利用 ",[34,142486,142487],{},"utftp"," 软件 上传网站到远程服务器",[25,142490,142491],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[15,142493,142494],{},"使用软件上传，对上传软件文件进行解压",[1891,142496],{"style":126698,"src":142497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[1891,142499],{"style":126698,"src":142500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[15,142502,142503],{},"输入刚刚申请的服务器账号信息：",[1891,142505],{"style":126698,"src":142506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[1891,142508],{"style":126698,"src":142509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[1891,142511],{"style":126698,"src":142512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[1891,142514],{"style":126698,"src":142515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[15,142517,142518],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[1891,142520],{"style":126698,"src":142521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[15,142523,142524],{},"浏览器输入域名即可访问",[15,142526,142527],{},"首页一定必须是index",{"title":68,"searchDepth":370,"depth":370,"links":142529},[142530],{"id":142432,"depth":370,"text":142433,"children":142531},[142532],{"id":142460,"depth":1608,"text":142461},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142424,"description":23802},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142539,"title":142540,"body":142541,"description":23802,"extension":487,"meta":143468,"navigation":490,"path":143469,"seo":143470,"stem":143471,"__hash__":143472},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142542,"toc":143451},[142543,142546,142550,142553,142556,142567,142570,142574,142578,142583,142586,142589,142592,142595,142599,142625,142629,142633,142636,142639,142643,142676,142680,142683,142686,142750,142754,142758,142761,142764,142767,142771,142816,142820,142823,142853,142857,142861,142864,142867,142871,142874,142943,142946,143054,143056,143062,143066,143069,143072,143168,143171,143175,143199,143203,143206,143210,143213,143217,143220,143223,143226,143229,143233,143236,143239,143243,143247,143250,143253,143256,143259,143263,143266,143270,143273,143276,143321,143325,143329,143332,143335,143338,143370,143374,143377,143411,143415,143418,143448],[10,142544,142540],{"id":142545},"_18-2d动画与3d转换",[85,142547,142549],{"id":142548},"_181-css3-2d转换","18.1 CSS3 2D转换",[15,142551,142552],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[15,142554,142555],{},"转换（transform）你可以简单理解为变形",[251,142557,142558,142561,142564],{},[25,142559,142560],{},"移动：translate",[25,142562,142563],{},"旋转：rotate",[25,142565,142566],{},"缩放：scale",[1891,142568],{"style":126698,"src":142569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[531,142571,142573],{"id":142572},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[22423,142575,142577],{"id":142576},"_18111-translate介绍","18.1.1.1 translate介绍",[15,142579,142580,142581],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[707,142582,133501],{},[1891,142584],{"style":126698,"src":142585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[15,142587,142588],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[15,142590,142591],{},"对于行内元素无效",[15,142593,142594],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[22423,142596,142598],{"id":142597},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[63,142600,142601],{"className":126842,"code":139031,"language":126844,"meta":68,"style":68},[34,142602,142603,142609,142621],{"__ignoreMap":68},[72,142604,142605,142607],{"class":74,"line":75},[72,142606,52029],{"class":51718},[72,142608,15998],{"class":82},[72,142610,142611,142613,142615,142617,142619],{"class":74,"line":370},[72,142612,70888],{"class":362},[72,142614,51855],{"class":82},[72,142616,747],{"class":362},[72,142618,51974],{"class":362},[72,142620,1719],{"class":82},[72,142622,142623],{"class":74,"line":1608},[72,142624,1994],{"class":82},[531,142626,142628],{"id":142627},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[22423,142630,142632],{"id":142631},"_18121-rotate介绍","18.1.2.1 rotate介绍",[15,142634,142635],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[1891,142637],{"style":126698,"src":142638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[22423,142640,142642],{"id":142641},"_18122-旋转效果","18.1.2.2 旋转效果",[63,142644,142646],{"className":126842,"code":142645,"language":126844,"meta":68,"style":68},"div {\n  transform: rotate(45deg);\n}\n",[34,142647,142648,142654,142672],{"__ignoreMap":68},[72,142649,142650,142652],{"class":74,"line":75},[72,142651,52029],{"class":51718},[72,142653,15998],{"class":82},[72,142655,142656,142658,142660,142663,142665,142667,142670],{"class":74,"line":370},[72,142657,136826],{"class":362},[72,142659,51855],{"class":82},[72,142661,142662],{"class":362},"rotate",[72,142664,564],{"class":82},[72,142666,1083],{"class":362},[72,142668,142669],{"class":78},"deg",[72,142671,3147],{"class":82},[72,142673,142674],{"class":74,"line":1608},[72,142675,1994],{"class":82},[22423,142677,142679],{"id":142678},"_18123-三角做法","18.1.2.3 三角做法",[15,142681,142682],{},"该下标当经过最外层大盒子时会实现向上反转",[1891,142684],{"style":126698,"src":142685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[63,142687,142688],{"className":126842,"code":135362,"language":126844,"meta":68,"style":68},[34,142689,142690,142694,142700,142710,142720,142736,142746],{"__ignoreMap":68},[72,142691,142692],{"class":74,"line":75},[72,142693,135369],{"class":621},[72,142695,142696,142698],{"class":74,"line":370},[72,142697,135374],{"class":358},[72,142699,15998],{"class":82},[72,142701,142702,142704,142706,142708],{"class":74,"line":1608},[72,142703,70986],{"class":362},[72,142705,51855],{"class":82},[72,142707,747],{"class":362},[72,142709,1719],{"class":82},[72,142711,142712,142714,142716,142718],{"class":74,"line":1623},[72,142713,71206],{"class":362},[72,142715,51855],{"class":82},[72,142717,747],{"class":362},[72,142719,1719],{"class":82},[72,142721,142722,142724,142726,142728,142730,142732,142734],{"class":74,"line":1629},[72,142723,71314],{"class":362},[72,142725,51855],{"class":82},[72,142727,1000],{"class":362},[72,142729,51910],{"class":78},[72,142731,51939],{"class":362},[72,142733,64409],{"class":362},[72,142735,1719],{"class":82},[72,142737,142738,142740,142742,142744],{"class":74,"line":1643},[72,142739,135417],{"class":362},[72,142741,51855],{"class":82},[72,142743,62787],{"class":362},[72,142745,1719],{"class":82},[72,142747,142748],{"class":74,"line":1649},[72,142749,1994],{"class":82},[531,142751,142753],{"id":142752},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[22423,142755,142757],{"id":142756},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[15,142759,142760],{},"设置中心点",[1891,142762],{"style":126698,"src":142763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[15,142765,142766],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[22423,142768,142770],{"id":142769},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[63,142772,142774],{"className":126842,"code":142773,"language":126844,"meta":68,"style":68},"\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",[34,142775,142776,142781,142787,142802,142807,142812],{"__ignoreMap":68},[72,142777,142778],{"class":74,"line":75},[72,142779,142780],{"class":621},"\u002F* 转换中心点 *\u002F\n",[72,142782,142783,142785],{"class":74,"line":370},[72,142784,52029],{"class":51718},[72,142786,15998],{"class":82},[72,142788,142789,142792,142794,142796,142798,142800],{"class":74,"line":1608},[72,142790,142791],{"class":362},"  transform-origin",[72,142793,51855],{"class":82},[72,142795,52010],{"class":362},[72,142797,17570],{"class":362},[72,142799,130705],{"class":82},[72,142801,135515],{"class":621},[72,142803,142804],{"class":74,"line":1623},[72,142805,142806],{"class":621},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[72,142808,142809],{"class":74,"line":1629},[72,142810,142811],{"class":621},"  \u002F* transform-origin: left top; *\u002F\n",[72,142813,142814],{"class":74,"line":1643},[72,142815,1994],{"class":82},[22423,142817,142819],{"id":142818},"_18133-旋转案例","18.1.3.3 旋转案例",[1891,142821],{"style":126698,"src":142822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[63,142824,142825],{"className":126842,"code":142645,"language":126844,"meta":68,"style":68},[34,142826,142827,142833,142849],{"__ignoreMap":68},[72,142828,142829,142831],{"class":74,"line":75},[72,142830,52029],{"class":51718},[72,142832,15998],{"class":82},[72,142834,142835,142837,142839,142841,142843,142845,142847],{"class":74,"line":370},[72,142836,136826],{"class":362},[72,142838,51855],{"class":82},[72,142840,142662],{"class":362},[72,142842,564],{"class":82},[72,142844,1083],{"class":362},[72,142846,142669],{"class":78},[72,142848,3147],{"class":82},[72,142850,142851],{"class":74,"line":1608},[72,142852,1994],{"class":82},[531,142854,142856],{"id":142855},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[22423,142858,142860],{"id":142859},"_18141-scale介绍","18.1.4.1 scale介绍",[15,142862,142863],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[1891,142865],{"style":126698,"src":142866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[22423,142868,142870],{"id":142869},"_18142-分页按钮","18.1.4.2 分页按钮",[1891,142872],{"style":126698,"src":142873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[63,142875,142877],{"className":126842,"code":142876,"language":126844,"meta":68,"style":68},"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",[34,142878,142879,142885,142901,142905,142909,142914,142920,142934,142939],{"__ignoreMap":68},[72,142880,142881,142883],{"class":74,"line":75},[72,142882,52029],{"class":51718},[72,142884,15998],{"class":82},[72,142886,142887,142889,142891,142894,142896,142899],{"class":74,"line":370},[72,142888,136826],{"class":362},[72,142890,51855],{"class":82},[72,142892,142893],{"class":362},"scale",[72,142895,564],{"class":82},[72,142897,142898],{"class":362},"1.2",[72,142900,3147],{"class":82},[72,142902,142903],{"class":74,"line":1608},[72,142904,1994],{"class":82},[72,142906,142907],{"class":74,"line":1623},[72,142908,136303],{"class":82},[72,142910,142911],{"class":74,"line":1629},[72,142912,142913],{"class":621},"\u002F* 2D 缩放 *\u002F\n",[72,142915,142916,142918],{"class":74,"line":1643},[72,142917,52029],{"class":51718},[72,142919,15998],{"class":82},[72,142921,142922,142924,142926,142928,142930,142932],{"class":74,"line":1649},[72,142923,136826],{"class":362},[72,142925,51855],{"class":82},[72,142927,142893],{"class":362},[72,142929,564],{"class":82},[72,142931,142898],{"class":362},[72,142933,3147],{"class":82},[72,142935,142936],{"class":74,"line":1740},[72,142937,142938],{"class":621},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[72,142940,142941],{"class":74,"line":1746},[72,142942,1994],{"class":82},[15,142944,142945],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[63,142947,142949],{"className":126842,"code":142948,"language":126844,"meta":68,"style":68},"\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",[34,142950,142951,142956,142966,142987,143008,143012,143017,143023,143050],{"__ignoreMap":68},[72,142952,142953],{"class":74,"line":75},[72,142954,142955],{"class":621},"\u002F* 定义动画 *\u002F\n",[72,142957,142958,142961,142964],{"class":74,"line":370},[72,142959,142960],{"class":78},"@keyframes",[72,142962,142963],{"class":5642}," move",[72,142965,15998],{"class":82},[72,142967,142968,142971,142973,142975,142977,142980,142982,142984],{"class":74,"line":1608},[72,142969,142970],{"class":358},"  0%",[72,142972,80225],{"class":82},[72,142974,48552],{"class":362},[72,142976,51855],{"class":82},[72,142978,142979],{"class":362},"translateX",[72,142981,564],{"class":82},[72,142983,747],{"class":362},[72,142985,142986],{"class":82},"); }\n",[72,142988,142989,142992,142994,142996,142998,143000,143002,143004,143006],{"class":74,"line":1623},[72,142990,142991],{"class":358},"  100%",[72,142993,80225],{"class":82},[72,142995,48552],{"class":362},[72,142997,51855],{"class":82},[72,142999,142979],{"class":362},[72,143001,564],{"class":82},[72,143003,865],{"class":362},[72,143005,51910],{"class":78},[72,143007,142986],{"class":82},[72,143009,143010],{"class":74,"line":1629},[72,143011,1994],{"class":82},[72,143013,143014],{"class":74,"line":1643},[72,143015,143016],{"class":621},"\u002F* 调用动画 *\u002F\n",[72,143018,143019,143021],{"class":74,"line":1649},[72,143020,52029],{"class":51718},[72,143022,15998],{"class":82},[72,143024,143025,143028,143030,143032,143034,143036,143038,143040,143042,143045,143048],{"class":74,"line":1740},[72,143026,143027],{"class":362},"  animation",[72,143029,51855],{"class":82},[72,143031,135528],{"class":362},[72,143033,25540],{"class":362},[72,143035,1249],{"class":78},[72,143037,79098],{"class":362},[72,143039,4521],{"class":362},[72,143041,1249],{"class":78},[72,143043,143044],{"class":362}," infinite",[72,143046,143047],{"class":362}," alternate",[72,143049,1719],{"class":82},[72,143051,143052],{"class":74,"line":1746},[72,143053,1994],{"class":82},[15,143055,142945],{},[63,143057,143060],{"className":143058,"code":143059,"language":127},[125],"\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",[34,143061,143059],{"__ignoreMap":68},[22423,143063,143065],{"id":143064},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[15,143067,143068],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[1891,143070],{"style":126698,"src":143071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[63,143073,143074],{"className":126842,"code":142948,"language":126844,"meta":68,"style":68},[34,143075,143076,143080,143088,143106,143126,143130,143134,143140,143164],{"__ignoreMap":68},[72,143077,143078],{"class":74,"line":75},[72,143079,142955],{"class":621},[72,143081,143082,143084,143086],{"class":74,"line":370},[72,143083,142960],{"class":78},[72,143085,142963],{"class":5642},[72,143087,15998],{"class":82},[72,143089,143090,143092,143094,143096,143098,143100,143102,143104],{"class":74,"line":1608},[72,143091,142970],{"class":358},[72,143093,80225],{"class":82},[72,143095,48552],{"class":362},[72,143097,51855],{"class":82},[72,143099,142979],{"class":362},[72,143101,564],{"class":82},[72,143103,747],{"class":362},[72,143105,142986],{"class":82},[72,143107,143108,143110,143112,143114,143116,143118,143120,143122,143124],{"class":74,"line":1623},[72,143109,142991],{"class":358},[72,143111,80225],{"class":82},[72,143113,48552],{"class":362},[72,143115,51855],{"class":82},[72,143117,142979],{"class":362},[72,143119,564],{"class":82},[72,143121,865],{"class":362},[72,143123,51910],{"class":78},[72,143125,142986],{"class":82},[72,143127,143128],{"class":74,"line":1629},[72,143129,1994],{"class":82},[72,143131,143132],{"class":74,"line":1643},[72,143133,143016],{"class":621},[72,143135,143136,143138],{"class":74,"line":1649},[72,143137,52029],{"class":51718},[72,143139,15998],{"class":82},[72,143141,143142,143144,143146,143148,143150,143152,143154,143156,143158,143160,143162],{"class":74,"line":1740},[72,143143,143027],{"class":362},[72,143145,51855],{"class":82},[72,143147,135528],{"class":362},[72,143149,25540],{"class":362},[72,143151,1249],{"class":78},[72,143153,79098],{"class":362},[72,143155,4521],{"class":362},[72,143157,1249],{"class":78},[72,143159,143044],{"class":362},[72,143161,143047],{"class":362},[72,143163,1719],{"class":82},[72,143165,143166],{"class":74,"line":1746},[72,143167,1994],{"class":82},[15,143169,143170],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[531,143172,143174],{"id":143173},"_1823-知识点回顾","18.2.3 知识点回顾",[63,143176,143177],{"className":126842,"code":129011,"language":126844,"meta":68,"style":68},[34,143178,143179,143185,143195],{"__ignoreMap":68},[72,143180,143181,143183],{"class":74,"line":75},[72,143182,52029],{"class":51718},[72,143184,15998],{"class":82},[72,143186,143187,143189,143191,143193],{"class":74,"line":370},[72,143188,129024],{"class":362},[72,143190,51855],{"class":82},[72,143192,62154],{"class":362},[72,143194,1719],{"class":82},[72,143196,143197],{"class":74,"line":1608},[72,143198,1994],{"class":82},[85,143200,143202],{"id":143201},"_183-3d-转换","18.3 3D 转换",[15,143204,143205],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[531,143207,143209],{"id":143208},"_1831-坐标轴认识","18.3.1 坐标轴认识",[1891,143211],{"style":126698,"src":143212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[531,143214,143216],{"id":143215},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[1891,143218],{"style":126698,"src":143219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[15,143221,143222],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[15,143224,143225],{},"translate3d的效果需要搭配透视perspective来使用",[1891,143227],{"style":126698,"src":143228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[531,143230,143232],{"id":143231},"_1833-透视-perspective","18.3.3 透视 perspective",[1891,143234],{"style":126698,"src":143235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[15,143237,143238],{},"透视写在父盒子上，单位为像素",[531,143240,143242],{"id":143241},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[22423,143244,143246],{"id":143245},"_18341-分开解释","18.3.4.1 分开解释",[1891,143248],{"style":126698,"src":143249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[1891,143251],{"style":126698,"src":143252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[1891,143254],{"style":126698,"src":143255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[15,143257,143258],{},"总结来说就是左手原则",[22423,143260,143262],{"id":143261},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[1891,143264],{"style":126698,"src":143265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[531,143267,143269],{"id":143268},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[1891,143271],{"style":126698,"src":143272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[1891,143274],{"style":126698,"src":143275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[63,143277,143279],{"className":126842,"code":143278,"language":126844,"meta":68,"style":68},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[34,143280,143281,143287,143300,143317],{"__ignoreMap":68},[72,143282,143283,143285],{"class":74,"line":75},[72,143284,52029],{"class":51718},[72,143286,15998],{"class":82},[72,143288,143289,143292,143294,143296,143298],{"class":74,"line":370},[72,143290,143291],{"class":362},"  perspective",[72,143293,51855],{"class":82},[72,143295,65492],{"class":362},[72,143297,51910],{"class":78},[72,143299,1719],{"class":82},[72,143301,143302,143304,143306,143309,143311,143313,143315],{"class":74,"line":1608},[72,143303,136826],{"class":362},[72,143305,51855],{"class":82},[72,143307,143308],{"class":362},"rotateX",[72,143310,564],{"class":82},[72,143312,1083],{"class":362},[72,143314,142669],{"class":78},[72,143316,3147],{"class":82},[72,143318,143319],{"class":74,"line":1623},[72,143320,1994],{"class":82},[531,143322,143324],{"id":143323},"_1836-案例","18.3.6 案例",[22423,143326,143328],{"id":143327},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[1891,143330],{"style":126698,"src":143331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[1891,143333],{"style":126698,"src":143334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[1891,143336],{"style":126698,"src":143337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[63,143339,143341],{"className":126842,"code":143340,"language":126844,"meta":68,"style":68},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[34,143342,143343,143348,143354,143366],{"__ignoreMap":68},[72,143344,143345],{"class":74,"line":75},[72,143346,143347],{"class":621},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[72,143349,143350,143352],{"class":74,"line":370},[72,143351,133839],{"class":358},[72,143353,15998],{"class":82},[72,143355,143356,143358,143360,143362,143364],{"class":74,"line":1608},[72,143357,143291],{"class":362},[72,143359,51855],{"class":82},[72,143361,65492],{"class":362},[72,143363,51910],{"class":78},[72,143365,1719],{"class":82},[72,143367,143368],{"class":74,"line":1623},[72,143369,1994],{"class":82},[22423,143371,143373],{"id":143372},"_18362-3d导航栏","18.3.6.2 3D导航栏",[1891,143375],{"style":126698,"src":143376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[63,143378,143379],{"className":127589,"code":130946,"language":127591,"meta":68,"style":68},[34,143380,143381,143385,143399,143403],{"__ignoreMap":68},[72,143382,143383],{"class":74,"line":75},[72,143384,130953],{"class":621},[72,143386,143387,143389,143391,143393,143395,143397],{"class":74,"line":370},[72,143388,1464],{"class":82},[72,143390,52029],{"class":51718},[72,143392,53904],{"class":358},[72,143394,609],{"class":82},[72,143396,130966],{"class":366},[72,143398,51725],{"class":82},[72,143400,143401],{"class":74,"line":1608},[72,143402,130973],{"class":82},[72,143404,143405,143407,143409],{"class":74,"line":1623},[72,143406,52203],{"class":82},[72,143408,52029],{"class":51718},[72,143410,51725],{"class":82},[22423,143412,143414],{"id":143413},"_18363-旋转木马","18.3.6.3 旋转木马",[1891,143416],{"style":126698,"src":143417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[63,143419,143420],{"className":126842,"code":142645,"language":126844,"meta":68,"style":68},[34,143421,143422,143428,143444],{"__ignoreMap":68},[72,143423,143424,143426],{"class":74,"line":75},[72,143425,52029],{"class":51718},[72,143427,15998],{"class":82},[72,143429,143430,143432,143434,143436,143438,143440,143442],{"class":74,"line":370},[72,143431,136826],{"class":362},[72,143433,51855],{"class":82},[72,143435,142662],{"class":362},[72,143437,564],{"class":82},[72,143439,1083],{"class":362},[72,143441,142669],{"class":78},[72,143443,3147],{"class":82},[72,143445,143446],{"class":74,"line":1608},[72,143447,1994],{"class":82},[473,143449,143450],{},"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":68,"searchDepth":370,"depth":370,"links":143452},[143453,143460],{"id":142548,"depth":370,"text":142549,"children":143454},[143455,143456,143457,143458,143459],{"id":142572,"depth":1608,"text":142573},{"id":142627,"depth":1608,"text":142628},{"id":142752,"depth":1608,"text":142753},{"id":142855,"depth":1608,"text":142856},{"id":143173,"depth":1608,"text":143174},{"id":143201,"depth":370,"text":143202,"children":143461},[143462,143463,143464,143465,143466,143467],{"id":143208,"depth":1608,"text":143209},{"id":143215,"depth":1608,"text":143216},{"id":143231,"depth":1608,"text":143232},{"id":143241,"depth":1608,"text":143242},{"id":143268,"depth":1608,"text":143269},{"id":143323,"depth":1608,"text":143324},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142540,"description":23802},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143474,"title":143475,"body":143476,"description":23802,"extension":487,"meta":143679,"navigation":490,"path":143680,"seo":143681,"stem":143682,"__hash__":143683},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143477,"toc":143668},[143478,143481,143485,143488,143491,143495,143498,143501,143504,143508,143511,143515,143518,143522,143525,143529,143543,143547,143572,143575,143578,143595,143599,143603,143606,143609,143613,143616,143619,143637,143641,143644,143658,143662,143665],[10,143479,143475],{"id":143480},"_19-移动端基础-前缀现状与视口",[85,143482,143484],{"id":143483},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[1891,143486],{"style":126698,"src":143487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[15,143489,143490],{},"意思就是加个前缀，增加兼容性",[85,143492,143494],{"id":143493},"_192-移动端现状认识","19.2 移动端现状认识",[1891,143496],{"style":126698,"src":143497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[15,143499,143500],{},"调试方法：",[1891,143502],{"style":126698,"src":143503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[85,143505,143507],{"id":143506},"_193-视口","19.3 视口",[15,143509,143510],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[531,143512,143514],{"id":143513},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[1891,143516],{"style":126698,"src":143517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[531,143519,143521],{"id":143520},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[1891,143523],{"style":126698,"src":143524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[531,143526,143528],{"id":143527},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[251,143530,143531,143534,143537,143540],{},[25,143532,143533],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[25,143535,143536],{},"理想视口，对设备来讲，是最理想的视口尺寸",[25,143538,143539],{},"需要手动添写meta视口标签通知浏览器操作",[25,143541,143542],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[531,143544,143546],{"id":143545},"_1934-meta视口标签","19.3.4 meta视口标签",[63,143548,143550],{"className":127589,"code":143549,"language":127591,"meta":68,"style":68},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[34,143551,143552],{"__ignoreMap":68},[72,143553,143554,143556,143558,143560,143562,143564,143566,143568,143570],{"class":74,"line":75},[72,143555,1464],{"class":82},[72,143557,51762],{"class":51718},[72,143559,15346],{"class":358},[72,143561,609],{"class":82},[72,143563,51809],{"class":366},[72,143565,51789],{"class":358},[72,143567,609],{"class":82},[72,143569,51816],{"class":366},[72,143571,51725],{"class":82},[1891,143573],{"style":126698,"src":143574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[15,143576,143577],{},"标准视口设置：",[22,143579,143580,143583,143586,143589,143592],{},[25,143581,143582],{},"视口宽度和设备保持一致",[25,143584,143585],{},"视口的默认缩放比例1.0",[25,143587,143588],{},"不允许用户自行缩放",[25,143590,143591],{},"最大允许的缩放比例1.0",[25,143593,143594],{},"最小允许的缩放比例1.0",[531,143596,143598],{"id":143597},"_1935-二倍图","19.3.5 二倍图",[22423,143600,143602],{"id":143601},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[1891,143604],{"style":126698,"src":143605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[1891,143607],{"style":126698,"src":143608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[22423,143610,143612],{"id":143611},"_19352-多倍图","19.3.5.2 多倍图",[1891,143614],{"style":126698,"src":143615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[15,143617,143618],{},"二倍图法，代码如下：",[63,143620,143622],{"className":126842,"code":143621,"language":126844,"meta":68,"style":68},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[34,143623,143624,143629],{"__ignoreMap":68},[72,143625,143626],{"class":74,"line":75},[72,143627,143628],{"class":621},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[72,143630,143631,143634],{"class":74,"line":370},[72,143632,143633],{"class":51718},"background-size",[72,143635,143636],{"class":82},": 50% 50%;\n",[22423,143638,143640],{"id":143639},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[1891,143642],{"style":126698,"src":143643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[22,143645,143646,143649,143652,143655],{},[25,143647,143648],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[25,143650,143651],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[25,143653,143654],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[25,143656,143657],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[22423,143659,143661],{"id":143660},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[1891,143663],{"style":126698,"src":143664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[473,143666,143667],{},"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":68,"searchDepth":370,"depth":370,"links":143669},[143670,143671,143672],{"id":143483,"depth":370,"text":143484},{"id":143493,"depth":370,"text":143494},{"id":143506,"depth":370,"text":143507,"children":143673},[143674,143675,143676,143677,143678],{"id":143513,"depth":1608,"text":143514},{"id":143520,"depth":1608,"text":143521},{"id":143527,"depth":1608,"text":143528},{"id":143545,"depth":1608,"text":143546},{"id":143597,"depth":1608,"text":143598},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143475,"description":23802},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143685,"title":143686,"body":143687,"description":23802,"extension":487,"meta":144564,"navigation":490,"path":144565,"seo":144566,"stem":144567,"__hash__":144568},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143688,"toc":144548},[143689,143692,143696,143703,143706,143713,143716,143721,143724,143728,143732,143739,143742,143745,143749,143752,143755,143758,143761,143764,143768,143771,143775,143777,143780,143783,143786,143789,143791,143794,143796,143826,143828,143858,143862,143865,143869,143872,143889,143892,143895,143971,143973,143976,143979,143982,143985,143987,143990,143993,143997,144019,144022,144025,144029,144032,144038,144041,144045,144048,144051,144055,144058,144061,144064,144068,144071,144074,144077,144080,144084,144087,144091,144098,144101,144104,144107,144110,144120,144123,144126,144133,144136,144140,144143,144146,144150,144153,144156,144159,144204,144207,144210,144213,144215,144344,144346,144384,144387,144390,144392,144510,144512,144546],[10,143690,143686],{"id":143691},"_20-移动端布局实战上篇",[85,143693,143695],{"id":143694},"_201-移动端主流方案","20.1 移动端主流方案",[22,143697,143698],{},[25,143699,143700],{},[707,143701,143702],{},"单独移动端页面（主流）",[1891,143704],{"style":126698,"src":143705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[22,143707,143708],{"start":370},[25,143709,143710],{},[707,143711,143712],{},"响应式兼容PC移动端",[1891,143714],{"style":126698,"src":143715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[22,143717,143718],{"start":1608},[25,143719,143720],{},"两种页面选型布局方式",[1891,143722],{"style":126698,"src":143723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[85,143725,143727],{"id":143726},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[531,143729,143731],{"id":143730},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[15,143733,143734,143735],{},"官网地址： ",[257,143736,143737],{"href":143737,"rel":143738},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[261],[1891,143740],{"style":126698,"src":143741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[1891,143743],{"style":126698,"src":143744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[531,143746,143748],{"id":143747},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[1891,143750],{"style":126698,"src":143751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[1891,143753],{"style":126698,"src":143754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[15,143756,143757],{},"去除高亮：",[15,143759,143760],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[15,143762,143763],{},"-webkit- tap-highlight-color: transparent;",[85,143765,143767],{"id":143766},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[1891,143769],{"style":126698,"src":143770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[85,143772,143774],{"id":143773},"_204-流式布局案例","20.4 流式布局案例",[15,143776,593],{},[15,143778,143779],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[15,143781,143782],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[15,143784,143785],{},"图片格式：",[1891,143787],{"style":126698,"src":143788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[15,143790,135885],{},[1891,143792],{"style":126698,"src":143793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[15,143795,140212],{},[63,143797,143798],{"className":127589,"code":134344,"language":127591,"meta":68,"style":68},[34,143799,143800],{"__ignoreMap":68},[72,143801,143802,143804,143806,143808,143810,143812,143814,143816,143818,143820,143822,143824],{"class":74,"line":75},[72,143803,1464],{"class":82},[72,143805,1891],{"class":51718},[72,143807,55657],{"class":358},[72,143809,609],{"class":82},[72,143811,134359],{"class":366},[72,143813,55665],{"class":358},[72,143815,609],{"class":82},[72,143817,134366],{"class":366},[72,143819,134369],{"class":358},[72,143821,609],{"class":82},[72,143823,134374],{"class":366},[72,143825,51725],{"class":82},[15,143827,140301],{},[63,143829,143830],{"className":127589,"code":134344,"language":127591,"meta":68,"style":68},[34,143831,143832],{"__ignoreMap":68},[72,143833,143834,143836,143838,143840,143842,143844,143846,143848,143850,143852,143854,143856],{"class":74,"line":75},[72,143835,1464],{"class":82},[72,143837,1891],{"class":51718},[72,143839,55657],{"class":358},[72,143841,609],{"class":82},[72,143843,134359],{"class":366},[72,143845,55665],{"class":358},[72,143847,609],{"class":82},[72,143849,134366],{"class":366},[72,143851,134369],{"class":358},[72,143853,609],{"class":82},[72,143855,134374],{"class":366},[72,143857,51725],{"class":82},[85,143859,143861],{"id":143860},"_205-flex布局","20.5 flex布局",[1891,143863],{"style":126698,"src":143864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[531,143866,143868],{"id":143867},"_2051-布局原理","20.5.1 布局原理",[15,143870,143871],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[251,143873,143874,143877,143880,143883,143886],{},[25,143875,143876],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[25,143878,143879],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[25,143881,143882],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[25,143884,143885],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[25,143887,143888],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[15,143890,143891],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[15,143893,143894],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[63,143896,143898],{"className":126842,"code":143897,"language":126844,"meta":68,"style":68},"\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",[34,143899,143900,143905,143912,143922,143934,143945,143956,143967],{"__ignoreMap":68},[72,143901,143902],{"class":74,"line":75},[72,143903,143904],{"class":621},"\u002F* Flex 弹性布局 *\u002F\n",[72,143906,143907,143910],{"class":74,"line":370},[72,143908,143909],{"class":358},".container",[72,143911,15998],{"class":82},[72,143913,143914,143916,143918,143920],{"class":74,"line":1608},[72,143915,128458],{"class":362},[72,143917,51855],{"class":82},[72,143919,51895],{"class":362},[72,143921,1719],{"class":82},[72,143923,143924,143927,143929,143932],{"class":74,"line":1623},[72,143925,143926],{"class":362},"  flex-direction",[72,143928,51855],{"class":82},[72,143930,143931],{"class":362},"row",[72,143933,1719],{"class":82},[72,143935,143936,143939,143941,143943],{"class":74,"line":1629},[72,143937,143938],{"class":362},"  justify-content",[72,143940,51855],{"class":82},[72,143942,52086],{"class":362},[72,143944,1719],{"class":82},[72,143946,143947,143950,143952,143954],{"class":74,"line":1643},[72,143948,143949],{"class":362},"  align-items",[72,143951,51855],{"class":82},[72,143953,52010],{"class":362},[72,143955,1719],{"class":82},[72,143957,143958,143961,143963,143965],{"class":74,"line":1649},[72,143959,143960],{"class":362},"  flex-wrap",[72,143962,51855],{"class":82},[72,143964,79028],{"class":362},[72,143966,1719],{"class":82},[72,143968,143969],{"class":74,"line":1740},[72,143970,1994],{"class":82},[15,143972,70871],{},[15,143974,143975],{},".form-item .male-label {",[15,143977,143978],{},"   margin-right: 20px;",[15,143980,143981],{},"   display: inline-flex;",[15,143983,143984],{},"   align-items: center;",[15,143986,1500],{},[1891,143988],{"style":126698,"src":143989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[1891,143991],{"style":126698,"src":143992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[531,143994,143996],{"id":143995},"_2052-常见父项属性","20.5.2 常见父项属性",[22,143998,143999,144002,144005,144008,144011,144014,144017],{},[25,144000,144001],{},"flex-direction：设置主轴的方向",[25,144003,144004],{},"justify-content：设置主轴上的子元素排列方式",[25,144006,144007],{},"flex-wrap：设置子元素是否换行",[25,144009,144010],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[25,144012,144013],{},"align-items：设置侧轴上的子元素排列方式（单行）",[25,144015,144016],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[25,144018,144001],{},[1891,144020],{"style":126698,"src":144021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[1891,144023],{"style":126698,"src":144024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[22,144026,144027],{"start":370},[25,144028,144004],{},[1891,144030],{"style":126698,"src":144031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[15,144033,144034,144037],{},[34,144035,144036],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[15,144039,144040],{},"跟着主轴走",[22,144042,144043],{"start":1608},[25,144044,144007],{},[1891,144046],{"style":126698,"src":144047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[15,144049,144050],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[22,144052,144053],{"start":1623},[25,144054,144010],{},[1891,144056],{"style":126698,"src":144057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[15,144059,144060],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[15,144062,144063],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[22,144065,144066],{"start":1629},[25,144067,144013],{},[1891,144069],{"style":126698,"src":144070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[15,144072,144073],{},"align-items与align-content之间的区别：",[15,144075,144076],{},"单找items，多找content",[1891,144078],{"style":126698,"src":144079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[22,144081,144082],{"start":1643},[25,144083,144016],{},[1891,144085],{"style":126698,"src":144086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[531,144088,144090],{"id":144089},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[22,144092,144093],{},[25,144094,144095],{},[707,144096,144097],{},"flex 属性",[15,144099,144100],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[1891,144102],{"style":126698,"src":144103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[15,144105,144106],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[15,144108,144109],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[22,144111,144112],{"start":370},[25,144113,144114,14221,144117],{},[707,144115,144116],{},"align-self",[707,144118,144119],{},"控制子项自己在侧轴上的排列方式",[1891,144121],{"style":126698,"src":144122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[15,144124,144125],{},"单个子盒子在父盒子侧轴上的排列方式",[22,144127,144128],{"start":1608},[25,144129,144130,144132],{},[707,144131,95714],{}," 属性定义项目的排列顺序",[1891,144134],{"style":126698,"src":144135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[531,144137,144139],{"id":144138},"_2054-背景线性渐变","20.5.4 背景线性渐变",[1891,144141],{"style":126698,"src":144142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[15,144144,144145],{},"必须要添加浏览器的私有前缀",[531,144147,144149],{"id":144148},"_2055-携程网首页案例","20.5.5 携程网首页案例",[15,144151,144152],{},"学到最重要的知识：",[15,144154,144155],{},"flex处理这样的布局思路",[1891,144157],{"style":126698,"src":144158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[63,144160,144162],{"className":126842,"code":144161,"language":126844,"meta":68,"style":68},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[34,144163,144164,144170,144180,144190,144200],{"__ignoreMap":68},[72,144165,144166,144168],{"class":74,"line":75},[72,144167,143909],{"class":358},[72,144169,15998],{"class":82},[72,144171,144172,144174,144176,144178],{"class":74,"line":370},[72,144173,128458],{"class":362},[72,144175,51855],{"class":82},[72,144177,51895],{"class":362},[72,144179,1719],{"class":82},[72,144181,144182,144184,144186,144188],{"class":74,"line":1608},[72,144183,143938],{"class":362},[72,144185,51855],{"class":82},[72,144187,52010],{"class":362},[72,144189,1719],{"class":82},[72,144191,144192,144194,144196,144198],{"class":74,"line":1623},[72,144193,143949],{"class":362},[72,144195,51855],{"class":82},[72,144197,52010],{"class":362},[72,144199,1719],{"class":82},[72,144201,144202],{"class":74,"line":1629},[72,144203,1994],{"class":82},[15,144205,144206],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[15,144208,144209],{},"使用属性选择器",[1891,144211],{"style":126698,"src":144212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[15,144214,69307],{},[63,144216,144218],{"className":127589,"code":144217,"language":127591,"meta":68,"style":68},"\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",[34,144219,144220,144225,144239,144244,144264,144269,144288,144293,144312,144317,144336],{"__ignoreMap":68},[72,144221,144222],{"class":74,"line":75},[72,144223,144224],{"class":621},"\u003C!-- 携程网移动端案例结构 -->\n",[72,144226,144227,144229,144231,144233,144235,144237],{"class":74,"line":370},[72,144228,1464],{"class":82},[72,144230,52029],{"class":51718},[72,144232,53904],{"class":358},[72,144234,609],{"class":82},[72,144236,92740],{"class":366},[72,144238,51725],{"class":82},[72,144240,144241],{"class":74,"line":1608},[72,144242,144243],{"class":621},"  \u003C!-- 搜索栏 -->\n",[72,144245,144246,144248,144250,144252,144254,144257,144260,144262],{"class":74,"line":1623},[72,144247,52562],{"class":82},[72,144249,52029],{"class":51718},[72,144251,53904],{"class":358},[72,144253,609],{"class":82},[72,144255,144256],{"class":366},"\"search-index\"",[72,144258,144259],{"class":82},">...\u003C\u002F",[72,144261,52029],{"class":51718},[72,144263,51725],{"class":82},[72,144265,144266],{"class":74,"line":1629},[72,144267,144268],{"class":621},"  \u003C!-- 焦点图 -->\n",[72,144270,144271,144273,144275,144277,144279,144282,144284,144286],{"class":74,"line":1643},[72,144272,52562],{"class":82},[72,144274,52029],{"class":51718},[72,144276,53904],{"class":358},[72,144278,609],{"class":82},[72,144280,144281],{"class":366},"\"focus\"",[72,144283,144259],{"class":82},[72,144285,52029],{"class":51718},[72,144287,51725],{"class":82},[72,144289,144290],{"class":74,"line":1649},[72,144291,144292],{"class":621},"  \u003C!-- 主导航 -->\n",[72,144294,144295,144297,144299,144301,144303,144306,144308,144310],{"class":74,"line":1740},[72,144296,52562],{"class":82},[72,144298,52029],{"class":51718},[72,144300,53904],{"class":358},[72,144302,609],{"class":82},[72,144304,144305],{"class":366},"\"local-nav\"",[72,144307,144259],{"class":82},[72,144309,52029],{"class":51718},[72,144311,51725],{"class":82},[72,144313,144314],{"class":74,"line":1746},[72,144315,144316],{"class":621},"  \u003C!-- 子导航 -->\n",[72,144318,144319,144321,144323,144325,144327,144330,144332,144334],{"class":74,"line":1758},[72,144320,52562],{"class":82},[72,144322,52029],{"class":51718},[72,144324,53904],{"class":358},[72,144326,609],{"class":82},[72,144328,144329],{"class":366},"\"nav-common\"",[72,144331,144259],{"class":82},[72,144333,52029],{"class":51718},[72,144335,51725],{"class":82},[72,144337,144338,144340,144342],{"class":74,"line":2041},[72,144339,52203],{"class":82},[72,144341,52029],{"class":51718},[72,144343,51725],{"class":82},[15,144345,70871],{},[63,144347,144348],{"className":126842,"code":137294,"language":126844,"meta":68,"style":68},[34,144349,144350,144364,144380],{"__ignoreMap":68},[72,144351,144352,144354,144356,144358,144360,144362],{"class":74,"line":75},[72,144353,54239],{"class":51718},[72,144355,1444],{"class":82},[72,144357,103511],{"class":358},[72,144359,609],{"class":78},[72,144361,63117],{"class":366},[72,144363,137311],{"class":82},[72,144365,144366,144368,144370,144372,144374,144376,144378],{"class":74,"line":370},[72,144367,71314],{"class":362},[72,144369,51855],{"class":82},[72,144371,772],{"class":362},[72,144373,51910],{"class":78},[72,144375,51939],{"class":362},[72,144377,130422],{"class":362},[72,144379,1719],{"class":82},[72,144381,144382],{"class":74,"line":1608},[72,144383,1994],{"class":82},[15,144385,144386],{},"总代码和效果展示：",[1891,144388],{"style":126698,"src":144389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[15,144391,69307],{},[63,144393,144394],{"className":127589,"code":144217,"language":127591,"meta":68,"style":68},[34,144395,144396,144400,144414,144418,144436,144440,144458,144462,144480,144484,144502],{"__ignoreMap":68},[72,144397,144398],{"class":74,"line":75},[72,144399,144224],{"class":621},[72,144401,144402,144404,144406,144408,144410,144412],{"class":74,"line":370},[72,144403,1464],{"class":82},[72,144405,52029],{"class":51718},[72,144407,53904],{"class":358},[72,144409,609],{"class":82},[72,144411,92740],{"class":366},[72,144413,51725],{"class":82},[72,144415,144416],{"class":74,"line":1608},[72,144417,144243],{"class":621},[72,144419,144420,144422,144424,144426,144428,144430,144432,144434],{"class":74,"line":1623},[72,144421,52562],{"class":82},[72,144423,52029],{"class":51718},[72,144425,53904],{"class":358},[72,144427,609],{"class":82},[72,144429,144256],{"class":366},[72,144431,144259],{"class":82},[72,144433,52029],{"class":51718},[72,144435,51725],{"class":82},[72,144437,144438],{"class":74,"line":1629},[72,144439,144268],{"class":621},[72,144441,144442,144444,144446,144448,144450,144452,144454,144456],{"class":74,"line":1643},[72,144443,52562],{"class":82},[72,144445,52029],{"class":51718},[72,144447,53904],{"class":358},[72,144449,609],{"class":82},[72,144451,144281],{"class":366},[72,144453,144259],{"class":82},[72,144455,52029],{"class":51718},[72,144457,51725],{"class":82},[72,144459,144460],{"class":74,"line":1649},[72,144461,144292],{"class":621},[72,144463,144464,144466,144468,144470,144472,144474,144476,144478],{"class":74,"line":1740},[72,144465,52562],{"class":82},[72,144467,52029],{"class":51718},[72,144469,53904],{"class":358},[72,144471,609],{"class":82},[72,144473,144305],{"class":366},[72,144475,144259],{"class":82},[72,144477,52029],{"class":51718},[72,144479,51725],{"class":82},[72,144481,144482],{"class":74,"line":1746},[72,144483,144316],{"class":621},[72,144485,144486,144488,144490,144492,144494,144496,144498,144500],{"class":74,"line":1758},[72,144487,52562],{"class":82},[72,144489,52029],{"class":51718},[72,144491,53904],{"class":358},[72,144493,609],{"class":82},[72,144495,144329],{"class":366},[72,144497,144259],{"class":82},[72,144499,52029],{"class":51718},[72,144501,51725],{"class":82},[72,144503,144504,144506,144508],{"class":74,"line":2041},[72,144505,52203],{"class":82},[72,144507,52029],{"class":51718},[72,144509,51725],{"class":82},[15,144511,70871],{},[63,144513,144514],{"className":127589,"code":130946,"language":127591,"meta":68,"style":68},[34,144515,144516,144520,144534,144538],{"__ignoreMap":68},[72,144517,144518],{"class":74,"line":75},[72,144519,130953],{"class":621},[72,144521,144522,144524,144526,144528,144530,144532],{"class":74,"line":370},[72,144523,1464],{"class":82},[72,144525,52029],{"class":51718},[72,144527,53904],{"class":358},[72,144529,609],{"class":82},[72,144531,130966],{"class":366},[72,144533,51725],{"class":82},[72,144535,144536],{"class":74,"line":1608},[72,144537,130973],{"class":82},[72,144539,144540,144542,144544],{"class":74,"line":1623},[72,144541,52203],{"class":82},[72,144543,52029],{"class":51718},[72,144545,51725],{"class":82},[473,144547,138243],{},{"title":68,"searchDepth":370,"depth":370,"links":144549},[144550,144551,144555,144556,144557],{"id":143694,"depth":370,"text":143695},{"id":143726,"depth":370,"text":143727,"children":144552},[144553,144554],{"id":143730,"depth":1608,"text":143731},{"id":143747,"depth":1608,"text":143748},{"id":143766,"depth":370,"text":143767},{"id":143773,"depth":370,"text":143774},{"id":143860,"depth":370,"text":143861,"children":144558},[144559,144560,144561,144562,144563],{"id":143867,"depth":1608,"text":143868},{"id":143995,"depth":1608,"text":143996},{"id":144089,"depth":1608,"text":144090},{"id":144138,"depth":1608,"text":144139},{"id":144148,"depth":1608,"text":144149},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143686,"description":23802},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144570,"title":144571,"body":144572,"description":23802,"extension":487,"meta":145799,"navigation":490,"path":145800,"seo":145801,"stem":145802,"__hash__":145803},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144573,"toc":145777},[144574,144577,144581,144585,144588,144591,144595,144600,144603,144606,144609,144612,144615,144672,144675,144680,144683,144686,144690,144701,144705,144708,144711,144718,144723,144727,144730,144736,144739,144743,144746,144753,144756,144759,144766,144769,144776,144779,144782,144789,144792,144795,144797,144814,144818,144821,144824,144827,144831,144834,144837,144840,144843,144846,144849,144851,144854,144857,144919,144922,145032,145039,145045,145048,145051,145055,145058,145062,145067,145070,145077,145080,145086,145091,145094,145097,145100,145103,145106,145109,145112,145115,145171,145173,145199,145203,145206,145209,145212,145220,145223,145226,145230,145286,145289,145293,145299,145310,145313,145318,145321,145324,145330,145333,145336,145339,145342,145345,145348,145351,145354,145379,145385,145388,145391,145394,145397,145400,145403,145408,145411,145414,145417,145425,145428,145435,145438,145441,145443,145467,145469,145472,145475,145478,145481,145484,145487,145490,145524,145527,145530,145564,145571,145574,145577,145580,145583,145586,145589,145596,145599,145602,145605,145608,145615,145618,145621,145628,145631,145634,145638,145641,145644,145647,145650,145653,145656,145659,145662,145664,145688,145690,145714,145718,145729,145732,145735,145738,145741,145744,145747,145750,145753,145756,145759,145762,145765,145768,145771,145774],[10,144575,144571],{"id":144576},"_21-移动端布局实战下篇",[85,144578,144580],{"id":144579},"_211-rem适配布局","21.1 rem适配布局",[531,144582,144584],{"id":144583},"_2111-rem单位","21.1.1 rem单位",[1891,144586],{"style":126698,"src":144587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[15,144589,144590],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[531,144592,144594],{"id":144593},"_2112-媒体查询","21.1.2 媒体查询",[22,144596,144597],{},[25,144598,144599],{},"参数介绍",[1891,144601],{"style":126698,"src":144602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[1891,144604],{"style":126698,"src":144605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[1891,144607],{"style":126698,"src":144608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[1891,144610],{"style":126698,"src":144611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[1891,144613],{"style":126698,"src":144614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[63,144616,144618],{"className":126842,"code":144617,"language":126844,"meta":68,"style":68},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[34,144619,144620,144625,144644,144651,144664,144668],{"__ignoreMap":68},[72,144621,144622],{"class":74,"line":75},[72,144623,144624],{"class":621},"\u002F* 媒体查询 *\u002F\n",[72,144626,144627,144630,144632,144635,144637,144640,144642],{"class":74,"line":370},[72,144628,144629],{"class":78},"@media",[72,144631,2087],{"class":82},[72,144633,144634],{"class":362},"max-width",[72,144636,51855],{"class":82},[72,144638,144639],{"class":362},"768",[72,144641,51910],{"class":78},[72,144643,12868],{"class":82},[72,144645,144646,144649],{"class":74,"line":1608},[72,144647,144648],{"class":358},"  .container",[72,144650,15998],{"class":82},[72,144652,144653,144656,144658,144660,144662],{"class":74,"line":1623},[72,144654,144655],{"class":362},"    width",[72,144657,51855],{"class":82},[72,144659,865],{"class":362},[72,144661,882],{"class":78},[72,144663,1719],{"class":82},[72,144665,144666],{"class":74,"line":1629},[72,144667,127638],{"class":82},[72,144669,144670],{"class":74,"line":1643},[72,144671,1994],{"class":82},[15,144673,144674],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[22,144676,144677],{"start":370},[25,144678,144679],{},"引入资源",[1891,144681],{"style":126698,"src":144682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[15,144684,144685],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[531,144687,144689],{"id":144688},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[251,144691,144692,144695,144698],{},[25,144693,144694],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[25,144696,144697],{},"媒体查询可以根据不同设备宽度来修改样式",[25,144699,144700],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[85,144702,144704],{"id":144703},"_212-less基础","21.2 Less基础",[15,144706,144707],{},"css冗余度较高，不利于复用，没有很好的计算能力",[15,144709,144710],{},"Less可以解决该问题，它是css的扩展语言",[15,144712,144713,144714],{},"Less中文网址： ",[257,144715,144716],{"href":144716,"rel":144717},"http:\u002F\u002Flesscss.cn\u002F",[261],[15,144719,144720],{},[707,144721,144722],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[531,144724,144726],{"id":144725},"_2121-less安装","21.2.1 less安装",[15,144728,144729],{},"如果使用vscode，则无需进行下方安装步骤",[15,144731,144732],{},[257,144733,144734],{"href":144734,"rel":144735},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[261],[1891,144737],{"style":126698,"src":144738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[531,144740,144742],{"id":144741},"_2122-less使用","21.2.2 less使用",[15,144744,144745],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[22,144747,144748],{},[25,144749,144750],{},[707,144751,144752],{},"Less 变量",[1891,144754],{"style":126698,"src":144755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[1891,144757],{"style":126698,"src":144758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[22,144760,144761],{"start":370},[25,144762,144763],{},[707,144764,144765],{},"Less 编译",[1891,144767],{"style":126698,"src":144768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[22,144770,144771],{"start":1608},[25,144772,144773],{},[707,144774,144775],{},"Less 嵌套",[1891,144777],{"style":126698,"src":144778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[1891,144780],{"style":126698,"src":144781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[22,144783,144784],{"start":1623},[25,144785,144786],{},[707,144787,144788],{},"Less 运算",[1891,144790],{"style":126698,"src":144791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[15,144793,144794],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[15,144796,593],{},[251,144798,144799,144802,144805,144808,144811],{},[25,144800,144801],{},"乘号（*）和除号（\u002F）的写法",[25,144803,144804],{},"运算符中间左右有个空格隔开 1px + 5",[25,144806,144807],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[25,144809,144810],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[25,144812,144813],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[85,144815,144817],{"id":144816},"_213-rem-适配方案","21.3 rem 适配方案",[15,144819,144820],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[15,144822,144823],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[1891,144825],{"style":126698,"src":144826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[531,144828,144830],{"id":144829},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[15,144832,144833],{},"rem + 媒体查询 + less 技术",[1891,144835],{"style":126698,"src":144836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[15,144838,144839],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[15,144841,144842],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[1891,144844],{"style":126698,"src":144845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[15,144847,144848],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[15,144850,15059],{},[1891,144852],{"style":126698,"src":144853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[15,144855,144856],{},"index.html:",[63,144858,144860],{"className":126842,"code":144859,"language":126844,"meta":68,"style":68},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[34,144861,144862,144867,144873,144889,144893,144899,144915],{"__ignoreMap":68},[72,144863,144864],{"class":74,"line":75},[72,144865,144866],{"class":621},"\u002F* rem 适配方案 *\u002F\n",[72,144868,144869,144871],{"class":74,"line":370},[72,144870,51053],{"class":51718},[72,144872,15998],{"class":82},[72,144874,144875,144877,144879,144882,144884,144886],{"class":74,"line":1608},[72,144876,71044],{"class":362},[72,144878,51855],{"class":82},[72,144880,144881],{"class":362},"62.5",[72,144883,882],{"class":78},[72,144885,130705],{"class":82},[72,144887,144888],{"class":621},"\u002F* 1rem = 10px *\u002F\n",[72,144890,144891],{"class":74,"line":1623},[72,144892,1994],{"class":82},[72,144894,144895,144897],{"class":74,"line":1629},[72,144896,130690],{"class":358},[72,144898,15998],{"class":82},[72,144900,144901,144903,144905,144907,144910,144912],{"class":74,"line":1643},[72,144902,70986],{"class":362},[72,144904,51855],{"class":82},[72,144906,1000],{"class":362},[72,144908,144909],{"class":78},"rem",[72,144911,130705],{"class":82},[72,144913,144914],{"class":621},"\u002F* 100px *\u002F\n",[72,144916,144917],{"class":74,"line":1649},[72,144918,1994],{"class":82},[15,144920,144921],{},"common.less",[63,144923,144925],{"className":126842,"code":144924,"language":126844,"meta":68,"style":68},"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",[34,144926,144927,144933,144948,144952,144958,144972,144976,144980,144984,144990,145004,145008,145014,145028],{"__ignoreMap":68},[72,144928,144929,144931],{"class":74,"line":75},[72,144930,51053],{"class":51718},[72,144932,15998],{"class":82},[72,144934,144935,144937,144939,144941,144943,144945],{"class":74,"line":370},[72,144936,71044],{"class":362},[72,144938,51855],{"class":82},[72,144940,144881],{"class":362},[72,144942,882],{"class":78},[72,144944,26489],{"class":82},[72,144946,144947],{"class":621},"\u002F* 10px *\u002F\n",[72,144949,144950],{"class":74,"line":1608},[72,144951,1994],{"class":82},[72,144953,144954,144956],{"class":74,"line":1623},[72,144955,52029],{"class":51718},[72,144957,15998],{"class":82},[72,144959,144960,144962,144964,144966,144968,144970],{"class":74,"line":1629},[72,144961,70986],{"class":362},[72,144963,51855],{"class":82},[72,144965,1000],{"class":362},[72,144967,144909],{"class":78},[72,144969,26489],{"class":82},[72,144971,144914],{"class":621},[72,144973,144974],{"class":74,"line":1643},[72,144975,1994],{"class":82},[72,144977,144978],{"class":74,"line":1649},[72,144979,136303],{"class":82},[72,144981,144982],{"class":74,"line":1740},[72,144983,144866],{"class":621},[72,144985,144986,144988],{"class":74,"line":1746},[72,144987,51053],{"class":51718},[72,144989,15998],{"class":82},[72,144991,144992,144994,144996,144998,145000,145002],{"class":74,"line":1758},[72,144993,71044],{"class":362},[72,144995,51855],{"class":82},[72,144997,144881],{"class":362},[72,144999,882],{"class":78},[72,145001,130705],{"class":82},[72,145003,144888],{"class":621},[72,145005,145006],{"class":74,"line":2041},[72,145007,1994],{"class":82},[72,145009,145010,145012],{"class":74,"line":2046},[72,145011,130690],{"class":358},[72,145013,15998],{"class":82},[72,145015,145016,145018,145020,145022,145024,145026],{"class":74,"line":2052},[72,145017,70986],{"class":362},[72,145019,51855],{"class":82},[72,145021,1000],{"class":362},[72,145023,144909],{"class":78},[72,145025,130705],{"class":82},[72,145027,144914],{"class":621},[72,145029,145030],{"class":74,"line":2057},[72,145031,1994],{"class":82},[15,145033,145034,145035,145038],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[23978,145036,145037],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[63,145040,145043],{"className":145041,"code":145042,"language":127},[125],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[34,145044,145042],{"__ignoreMap":68},[15,145046,145047],{},"less保存时会自动变成.css文件",[15,145049,145050],{},"好好搞懂上述代码写法",[531,145052,145054],{"id":145053},"_2132-样式导入样式","21.3.2 样式导入样式",[1891,145056],{"style":126698,"src":145057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[531,145059,145061],{"id":145060},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[22,145063,145064],{},[25,145065,145066],{},"准备工作",[1891,145068],{"style":126698,"src":145069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[15,145071,145072,145073],{},"github地址：",[257,145074,145075],{"href":145075,"rel":145076},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[261],[15,145078,145079],{},"下载之后，将index.js文件拖到项目中就可以了",[15,145081,145082,145083],{},"js文件引入到index.html中使用的是",[34,145084,145085],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[22,145087,145088],{"start":370},[25,145089,145090],{},"vscode插件",[1891,145092],{"style":126698,"src":145093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[15,145095,145096],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[15,145098,145099],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[1891,145101],{"style":126698,"src":145102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[15,145104,145105],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[1891,145107],{"style":126698,"src":145108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[15,145110,145111],{},"修改成75就可以，alt+z为快捷键",[15,145113,145114],{},"index.css：",[63,145116,145117],{"className":126842,"code":144859,"language":126844,"meta":68,"style":68},[34,145118,145119,145123,145129,145143,145147,145153,145167],{"__ignoreMap":68},[72,145120,145121],{"class":74,"line":75},[72,145122,144866],{"class":621},[72,145124,145125,145127],{"class":74,"line":370},[72,145126,51053],{"class":51718},[72,145128,15998],{"class":82},[72,145130,145131,145133,145135,145137,145139,145141],{"class":74,"line":1608},[72,145132,71044],{"class":362},[72,145134,51855],{"class":82},[72,145136,144881],{"class":362},[72,145138,882],{"class":78},[72,145140,130705],{"class":82},[72,145142,144888],{"class":621},[72,145144,145145],{"class":74,"line":1623},[72,145146,1994],{"class":82},[72,145148,145149,145151],{"class":74,"line":1629},[72,145150,130690],{"class":358},[72,145152,15998],{"class":82},[72,145154,145155,145157,145159,145161,145163,145165],{"class":74,"line":1643},[72,145156,70986],{"class":362},[72,145158,51855],{"class":82},[72,145160,1000],{"class":362},[72,145162,144909],{"class":78},[72,145164,130705],{"class":82},[72,145166,144914],{"class":621},[72,145168,145169],{"class":74,"line":1649},[72,145170,1994],{"class":82},[15,145172,144856],{},[63,145174,145175],{"className":126842,"code":127246,"language":126844,"meta":68,"style":68},[34,145176,145177,145183,145195],{"__ignoreMap":68},[72,145178,145179,145181],{"class":74,"line":75},[72,145180,52218],{"class":51718},[72,145182,15998],{"class":82},[72,145184,145185,145187,145189,145191,145193],{"class":74,"line":370},[72,145186,71044],{"class":362},[72,145188,51855],{"class":82},[72,145190,1155],{"class":362},[72,145192,51910],{"class":78},[72,145194,1719],{"class":82},[72,145196,145197],{"class":74,"line":1608},[72,145198,1994],{"class":82},[85,145200,145202],{"id":145201},"_214-响应式开发","21.4 响应式开发",[15,145204,145205],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[1891,145207],{"style":126698,"src":145208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[15,145210,145211],{},"做法：",[251,145213,145214,145217],{},[25,145215,145216],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[25,145218,145219],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[1891,145221],{"style":126698,"src":145222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[15,145224,145225],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[531,145227,145229],{"id":145228},"_2141-简单代码示范","21.4.1 简单代码示范",[63,145231,145232],{"className":126842,"code":144859,"language":126844,"meta":68,"style":68},[34,145233,145234,145238,145244,145258,145262,145268,145282],{"__ignoreMap":68},[72,145235,145236],{"class":74,"line":75},[72,145237,144866],{"class":621},[72,145239,145240,145242],{"class":74,"line":370},[72,145241,51053],{"class":51718},[72,145243,15998],{"class":82},[72,145245,145246,145248,145250,145252,145254,145256],{"class":74,"line":1608},[72,145247,71044],{"class":362},[72,145249,51855],{"class":82},[72,145251,144881],{"class":362},[72,145253,882],{"class":78},[72,145255,130705],{"class":82},[72,145257,144888],{"class":621},[72,145259,145260],{"class":74,"line":1623},[72,145261,1994],{"class":82},[72,145263,145264,145266],{"class":74,"line":1629},[72,145265,130690],{"class":358},[72,145267,15998],{"class":82},[72,145269,145270,145272,145274,145276,145278,145280],{"class":74,"line":1643},[72,145271,70986],{"class":362},[72,145273,51855],{"class":82},[72,145275,1000],{"class":362},[72,145277,144909],{"class":78},[72,145279,130705],{"class":82},[72,145281,144914],{"class":621},[72,145283,145284],{"class":74,"line":1649},[72,145285,1994],{"class":82},[15,145287,145288],{},"父盒子一般命名为container",[531,145290,145292],{"id":145291},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[15,145294,145295,145296],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[707,145297,145298],{},"使得 Web 开发更加快捷",[251,145300,145301],{},[25,145302,145303,145304],{},"官网：",[707,145305,145306],{},[257,145307,145308],{"href":145308,"rel":145309},"http:\u002F\u002Fgetbootstrap.com\u002F",[261],[15,145311,145312],{},"可以直接去官网拿现成的东西",[22,145314,145315],{},[25,145316,145317],{},"Bootstrap的使用",[15,145319,145320],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[15,145322,145323],{},"Bootstrap 使用四步曲：",[15,145325,145326,145329],{},[707,145327,145328],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[1891,145331],{"style":126698,"src":145332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[15,145334,145335],{},"打开Bootstrap官网，然后下载",[1891,145337],{"style":126698,"src":145338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[1891,145340],{"style":126698,"src":145341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[15,145343,145344],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[15,145346,145347],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[15,145349,145350],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[1891,145352],{"style":126698,"src":145353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[63,145355,145357],{"className":126842,"code":145356,"language":126844,"meta":68,"style":68},".center {\n  color: red;\n}\n",[34,145358,145359,145365,145375],{"__ignoreMap":68},[72,145360,145361,145363],{"class":74,"line":75},[72,145362,127133],{"class":358},[72,145364,15998],{"class":82},[72,145366,145367,145369,145371,145373],{"class":74,"line":370},[72,145368,71323],{"class":362},[72,145370,51855],{"class":82},[72,145372,57839],{"class":362},[72,145374,1719],{"class":82},[72,145376,145377],{"class":74,"line":1608},[72,145378,1994],{"class":82},[15,145380,145381,145384],{},[34,145382,145383],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[1891,145386],{"style":126698,"src":145387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[1891,145389],{"style":126698,"src":145390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[1891,145392],{"style":126698,"src":145393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[15,145395,145396],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[1891,145398],{"style":126698,"src":145399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[15,145401,145402],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[22,145404,145405],{"start":370},[25,145406,145407],{},"布局容器",[1891,145409],{"style":126698,"src":145410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[15,145412,145413],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[15,145415,145416],{},"container-fluid用于移动式布局比较方便",[22,145418,145419],{"start":1608},[25,145420,145421,145422],{},"bootstrap ",[707,145423,145424],{},"栅格系统原理",[1891,145426],{"style":126698,"src":145427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[22,145429,145430],{"start":1623},[25,145431,145432],{},[707,145433,145434],{},"栅格选项参数",[1891,145436],{"style":126698,"src":145437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[15,145439,145440],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[15,145442,15059],{},[63,145444,145445],{"className":126842,"code":145356,"language":126844,"meta":68,"style":68},[34,145446,145447,145453,145463],{"__ignoreMap":68},[72,145448,145449,145451],{"class":74,"line":75},[72,145450,127133],{"class":358},[72,145452,15998],{"class":82},[72,145454,145455,145457,145459,145461],{"class":74,"line":370},[72,145456,71323],{"class":362},[72,145458,51855],{"class":82},[72,145460,57839],{"class":362},[72,145462,1719],{"class":82},[72,145464,145465],{"class":74,"line":1608},[72,145466,1994],{"class":82},[15,145468,135885],{},[1891,145470],{"style":126698,"src":145471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[15,145473,145474],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[15,145476,145477],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[15,145479,145480],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[15,145482,145483],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[15,145485,145486],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[15,145488,145489],{},"汇总展示说明：",[63,145491,145492],{"className":127589,"code":130946,"language":127591,"meta":68,"style":68},[34,145493,145494,145498,145512,145516],{"__ignoreMap":68},[72,145495,145496],{"class":74,"line":75},[72,145497,130953],{"class":621},[72,145499,145500,145502,145504,145506,145508,145510],{"class":74,"line":370},[72,145501,1464],{"class":82},[72,145503,52029],{"class":51718},[72,145505,53904],{"class":358},[72,145507,609],{"class":82},[72,145509,130966],{"class":366},[72,145511,51725],{"class":82},[72,145513,145514],{"class":74,"line":1608},[72,145515,130973],{"class":82},[72,145517,145518,145520,145522],{"class":74,"line":1623},[72,145519,52203],{"class":82},[72,145521,52029],{"class":51718},[72,145523,51725],{"class":82},[1891,145525],{"style":126698,"src":145526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[15,145528,145529],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[63,145531,145532],{"className":127589,"code":130946,"language":127591,"meta":68,"style":68},[34,145533,145534,145538,145552,145556],{"__ignoreMap":68},[72,145535,145536],{"class":74,"line":75},[72,145537,130953],{"class":621},[72,145539,145540,145542,145544,145546,145548,145550],{"class":74,"line":370},[72,145541,1464],{"class":82},[72,145543,52029],{"class":51718},[72,145545,53904],{"class":358},[72,145547,609],{"class":82},[72,145549,130966],{"class":366},[72,145551,51725],{"class":82},[72,145553,145554],{"class":74,"line":1608},[72,145555,130973],{"class":82},[72,145557,145558,145560,145562],{"class":74,"line":1623},[72,145559,52203],{"class":82},[72,145561,52029],{"class":51718},[72,145563,51725],{"class":82},[22,145565,145566],{"start":1629},[25,145567,145568],{},[707,145569,145570],{},"列嵌套",[1891,145572],{"style":126698,"src":145573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[15,145575,145576],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[15,145578,145579],{},"没加row内部这样：",[1891,145581],{"style":126698,"src":145582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[15,145584,145585],{},"加上row之后内部为：",[1891,145587],{"style":126698,"src":145588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[22,145590,145591],{"start":1643},[25,145592,145593],{},[707,145594,145595],{},"列偏移",[1891,145597],{"style":126698,"src":145598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[15,145600,145601],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[15,145603,145604],{},"要加偏移量，即偏移份数",[15,145606,145607],{},"偏移的份数=12-两个盒子的份数",[22,145609,145610],{"start":1649},[25,145611,145612],{},[707,145613,145614],{},"列排序",[1891,145616],{"style":126698,"src":145617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[15,145619,145620],{},"pull拉左；push推右",[22,145622,145623],{"start":1740},[25,145624,145625],{},[707,145626,145627],{},"响应式工具",[1891,145629],{"style":126698,"src":145630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[15,145632,145633],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[531,145635,145637],{"id":145636},"_2143-响应式小项目","21.4.3 响应式小项目",[15,145639,145640],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[15,145642,145643],{},"ul {",[15,145645,145646],{},"list-style: none;",[15,145648,145649],{},"margin:0;",[15,145651,145652],{},"padding:0; }",[1891,145654],{"style":126698,"src":145655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[1891,145657],{"style":126698,"src":145658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[15,145660,145661],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[15,145663,69307],{},[63,145665,145666],{"className":126842,"code":139512,"language":126844,"meta":68,"style":68},[34,145667,145668,145674,145684],{"__ignoreMap":68},[72,145669,145670,145672],{"class":74,"line":75},[72,145671,130690],{"class":358},[72,145673,15998],{"class":82},[72,145675,145676,145678,145680,145682],{"class":74,"line":370},[72,145677,131322],{"class":362},[72,145679,51855],{"class":82},[72,145681,165],{"class":362},[72,145683,1719],{"class":82},[72,145685,145686],{"class":74,"line":1608},[72,145687,1994],{"class":82},[15,145689,70871],{},[63,145691,145692],{"className":126842,"code":139512,"language":126844,"meta":68,"style":68},[34,145693,145694,145700,145710],{"__ignoreMap":68},[72,145695,145696,145698],{"class":74,"line":75},[72,145697,130690],{"class":358},[72,145699,15998],{"class":82},[72,145701,145702,145704,145706,145708],{"class":74,"line":370},[72,145703,131322],{"class":362},[72,145705,51855],{"class":82},[72,145707,165],{"class":362},[72,145709,1719],{"class":82},[72,145711,145712],{"class":74,"line":1608},[72,145713,1994],{"class":82},[85,145715,145717],{"id":145716},"_215-swiper-插件使用","21.5 swiper 插件使用",[251,145719,145720,145723,145726],{},[25,145721,145722],{},"下载需要的css和js文件html页面中 引入相关文件",[25,145724,145725],{},"官网找到类似案例，复制html结构，css样式 js 语法",[25,145727,145728],{},"根据需求定制修改模块",[1891,145730],{"style":126698,"src":145731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[15,145733,145734],{},"解压后将这两部分放到项目中",[1891,145736],{"style":126698,"src":145737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[15,145739,145740],{},"这个插件可以帮助我们实现轮播图效果",[15,145742,145743],{},"用法：",[1891,145745],{"style":126698,"src":145746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[15,145748,145749],{},"找到自己喜欢的",[1891,145751],{"style":126698,"src":145752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[15,145754,145755],{},"右键，查看网页源代码",[1891,145757],{"style":126698,"src":145758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[15,145760,145761],{},"复制人家的结构内容",[15,145763,145764],{},"然后去看API文档：",[1891,145766],{"style":126698,"src":145767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[15,145769,145770],{},"可以看看如何修改样式",[15,145772,145773],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[473,145775,145776],{},"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":68,"searchDepth":370,"depth":370,"links":145778},[145779,145784,145788,145793,145798],{"id":144579,"depth":370,"text":144580,"children":145780},[145781,145782,145783],{"id":144583,"depth":1608,"text":144584},{"id":144593,"depth":1608,"text":144594},{"id":144688,"depth":1608,"text":144689},{"id":144703,"depth":370,"text":144704,"children":145785},[145786,145787],{"id":144725,"depth":1608,"text":144726},{"id":144741,"depth":1608,"text":144742},{"id":144816,"depth":370,"text":144817,"children":145789},[145790,145791,145792],{"id":144829,"depth":1608,"text":144830},{"id":145053,"depth":1608,"text":145054},{"id":145060,"depth":1608,"text":145061},{"id":145201,"depth":370,"text":145202,"children":145794},[145795,145796,145797],{"id":145228,"depth":1608,"text":145229},{"id":145291,"depth":1608,"text":145292},{"id":145636,"depth":1608,"text":145637},{"id":145716,"depth":370,"text":145717},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144571,"description":23802},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145805,"title":145806,"body":145807,"description":23802,"extension":487,"meta":146027,"navigation":490,"path":146028,"seo":146029,"stem":146030,"__hash__":146031},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":145808,"toc":146023},[145809,145812,145816,145819,145834,145839,145842,145847,145882,145887,145899,145904,145917,145922,145939,145944,145964,145969,145987,145990,145993,145996,145999,146003,146006,146009,146012,146015,146018,146021],[10,145810,145806],{"id":145811},"_22-代码提交与新型相对单位",[85,145813,145815],{"id":145814},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[15,145817,145818],{},"法1：",[22,145820,145821,145828,145831],{},[25,145822,145823,145824],{},"登录网站注册：",[257,145825,145826],{"href":145826,"rel":145827},"https:\u002F\u002Fgitee.com\u002F",[261],[25,145829,145830],{},"码云创建新的仓库",[25,145832,145833],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[251,145835,145836],{},[25,145837,145838],{},"在网站根目录右键-- Git Bash Here",[1891,145840],{"style":126698,"src":145841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[251,145843,145844],{},[25,145845,145846],{},"如果是第一次利用git提交，请配置好全局选项",[63,145848,145850],{"className":117586,"code":145849,"language":117588,"meta":68,"style":68},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[34,145851,145852,145868],{"__ignoreMap":68},[72,145853,145854,145857,145859,145862,145865],{"class":74,"line":75},[72,145855,145856],{"class":358},"git",[72,145858,120009],{"class":366},[72,145860,145861],{"class":362}," --global",[72,145863,145864],{"class":366}," user.name",[72,145866,145867],{"class":366}," \"你的名字\"\n",[72,145869,145870,145872,145874,145876,145879],{"class":74,"line":370},[72,145871,145856],{"class":358},[72,145873,120009],{"class":366},[72,145875,145861],{"class":362},[72,145877,145878],{"class":366}," user.email",[72,145880,145881],{"class":366}," \"你的邮箱\"\n",[251,145883,145884],{},[25,145885,145886],{},"初始化仓库",[63,145888,145890],{"className":117586,"code":145889,"language":117588,"meta":68,"style":68},"git init\n",[34,145891,145892],{"__ignoreMap":68},[72,145893,145894,145896],{"class":74,"line":75},[72,145895,145856],{"class":358},[72,145897,145898],{"class":366}," init\n",[251,145900,145901],{},[25,145902,145903],{},"把本地文件放到暂存区",[63,145905,145907],{"className":117586,"code":145906,"language":117588,"meta":68,"style":68},"git add .\n",[34,145908,145909],{"__ignoreMap":68},[72,145910,145911,145913,145915],{"class":74,"line":75},[72,145912,145856],{"class":358},[72,145914,5635],{"class":366},[72,145916,29163],{"class":366},[251,145918,145919],{},[25,145920,145921],{},"把本地文件放到本地仓库里面",[63,145923,145925],{"className":117586,"code":145924,"language":117588,"meta":68,"style":68},"git commit -m \"first commit\"\n",[34,145926,145927],{"__ignoreMap":68},[72,145928,145929,145931,145934,145936],{"class":74,"line":75},[72,145930,145856],{"class":358},[72,145932,145933],{"class":366}," commit",[72,145935,101297],{"class":362},[72,145937,145938],{"class":366}," \"first commit\"\n",[251,145940,145941],{},[25,145942,145943],{},"链接远程仓库",[63,145945,145947],{"className":117586,"code":145946,"language":117588,"meta":68,"style":68},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[34,145948,145949],{"__ignoreMap":68},[72,145950,145951,145953,145956,145958,145961],{"class":74,"line":75},[72,145952,145856],{"class":358},[72,145954,145955],{"class":366}," remote",[72,145957,5635],{"class":366},[72,145959,145960],{"class":366}," origin",[72,145962,145963],{"class":366}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[251,145965,145966],{},[25,145967,145968],{},"把本地仓库的文件推送到远程仓库 push",[63,145970,145972],{"className":117586,"code":145971,"language":117588,"meta":68,"style":68},"git push -u origin master\n",[34,145973,145974],{"__ignoreMap":68},[72,145975,145976,145978,145980,145982,145984],{"class":74,"line":75},[72,145977,145856],{"class":358},[72,145979,29438],{"class":366},[72,145981,28712],{"class":362},[72,145983,145960],{"class":366},[72,145985,145986],{"class":366}," master\n",[1891,145988],{"style":126698,"src":145989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[15,145991,145992],{},"上方方法暂未实现，后边学完git后在整",[15,145994,145995],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[1891,145997],{"style":126698,"src":145998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[85,146000,146002],{"id":146001},"_222-新型相对单位","22.2 新型相对单位",[1891,146004],{"style":126698,"src":146005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[1891,146007],{"style":126698,"src":146008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[15,146010,146011],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[15,146013,146014],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[1891,146016],{"style":126698,"src":146017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[15,146019,146020],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[473,146022,24379],{},{"title":68,"searchDepth":370,"depth":370,"links":146024},[146025,146026],{"id":145814,"depth":370,"text":145815},{"id":146001,"depth":370,"text":146002},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145806,"description":23802},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":146033,"title":146034,"body":146035,"description":146039,"extension":487,"meta":146040,"navigation":490,"path":146041,"seo":146042,"stem":146043,"__hash__":146044},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":146036,"toc":146037},[],{"title":68,"searchDepth":370,"depth":370,"links":146038},[],"自己正经开始学编程的第一门语言！",{"category":93256},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":146034,"description":146039},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":146046,"title":146047,"body":146048,"description":23802,"extension":487,"meta":147195,"navigation":490,"path":147196,"seo":147197,"stem":147198,"__hash__":147199},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":146049,"toc":147171},[146050,146053,146057,146060,146063,146088,146091,146097,146101,146104,146131,146134,146174,146177,146189,146192,146198,146202,146206,146233,146250,146257,146261,146264,146290,146293,146297,146300,146340,146343,146360,146366,146370,146375,146419,146422,146440,146443,146511,146515,146522,146525,146540,146543,146552,146555,146566,146569,146578,146581,146598,146601,146616,146620,146624,146627,146629,146649,146653,146656,146659,146670,146673,146679,146683,146689,146716,146719,146731,146734,146745,146748,146754,146758,146764,146814,146817,146859,146862,146895,146898,146932,146936,146939,146959,146962,146998,147001,147014,147018,147022,147028,147031,147044,147048,147051,147057,147060,147064,147067,147070,147119,147123,147139,147145,147152,147158,147168],[10,146051,146047],{"id":146052},"_1-python环境与第一个程序",[85,146054,146056],{"id":146055},"_11-什么是python","1.1 什么是Python",[15,146058,146059],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[15,146061,146062],{},"理解 Python 时抓住三个关键词：",[22,146064,146065,146068,146071],{},[25,146066,146067],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[25,146069,146070],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[25,146072,146073,146074,37,146077,37,146080,37,146083,37,146085,28807],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[34,146075,146076],{},"os",[34,146078,146079],{},"sys",[34,146081,146082],{},"json",[34,146084,58278],{},[34,146086,146087],{},"datetime",[15,146089,146090],{},"Python 程序的运行链路：",[63,146092,146095],{"className":146093,"code":146094,"language":127,"meta":68},[125],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[34,146096,146094],{"__ignoreMap":68},[85,146098,146100],{"id":146099},"_12-python解释器","1.2 Python解释器",[15,146102,146103],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[63,146105,146107],{"className":349,"code":146106,"language":351,"meta":68,"style":68},"python --version\npython3 --version\npython\npython3\n",[34,146108,146109,146115,146121,146126],{"__ignoreMap":68},[72,146110,146111,146113],{"class":74,"line":75},[72,146112,67],{"class":358},[72,146114,26715],{"class":362},[72,146116,146117,146119],{"class":74,"line":370},[72,146118,101294],{"class":358},[72,146120,26715],{"class":362},[72,146122,146123],{"class":74,"line":1608},[72,146124,146125],{"class":358},"python\n",[72,146127,146128],{"class":74,"line":1623},[72,146129,146130],{"class":358},"python3\n",[15,146132,146133],{},"进入交互模式后，可以直接输入表达式：",[63,146135,146137],{"className":65,"code":146136,"language":67,"meta":68,"style":68},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[34,146138,146139,146150,146155,146169],{"__ignoreMap":68},[72,146140,146141,146144,146146,146148],{"class":74,"line":75},[72,146142,146143],{"class":78},">>>",[72,146145,25540],{"class":362},[72,146147,45984],{"class":78},[72,146149,48141],{"class":362},[72,146151,146152],{"class":74,"line":370},[72,146153,146154],{"class":362},"3\n",[72,146156,146157,146159,146162,146164,146167],{"class":74,"line":1608},[72,146158,146143],{"class":78},[72,146160,146161],{"class":362}," print",[72,146163,564],{"class":82},[72,146165,146166],{"class":366},"\"hello python\"",[72,146168,570],{"class":82},[72,146170,146171],{"class":74,"line":1623},[72,146172,146173],{"class":82},"hello python\n",[15,146175,146176],{},"退出交互模式：",[63,146178,146180],{"className":65,"code":146179,"language":67,"meta":68,"style":68},"exit()\n",[34,146181,146182],{"__ignoreMap":68},[72,146183,146184,146187],{"class":74,"line":75},[72,146185,146186],{"class":362},"exit",[72,146188,2404],{"class":82},[15,146190,146191],{},"或使用快捷键：",[63,146193,146196],{"className":146194,"code":146195,"language":127,"meta":68},[125],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[34,146197,146195],{"__ignoreMap":68},[85,146199,146201],{"id":146200},"_13-安装python","1.3 安装Python",[531,146203,146205],{"id":146204},"_131-windows安装","1.3.1 Windows安装",[22,146207,146208,146215,146218,146224,146230],{},[25,146209,146210,146211],{},"打开 Python 官网：",[257,146212,146213],{"href":146213,"rel":146214},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[261],[25,146216,146217],{},"下载 Windows Installer。",[25,146219,146220,146221,28807],{},"安装时勾选 ",[34,146222,146223],{},"Add Python to PATH",[25,146225,146226,146227,28807],{},"点击 ",[34,146228,146229],{},"Install Now",[25,146231,146232],{},"安装完成后打开命令提示符验证：",[63,146234,146236],{"className":349,"code":146235,"language":351,"meta":68,"style":68},"python --version\npip --version\n",[34,146237,146238,146244],{"__ignoreMap":68},[72,146239,146240,146242],{"class":74,"line":75},[72,146241,67],{"class":358},[72,146243,26715],{"class":362},[72,146245,146246,146248],{"class":74,"line":370},[72,146247,24253],{"class":358},[72,146249,26715],{"class":362},[15,146251,146252,146253,146256],{},"如果提示 ",[34,146254,146255],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[531,146258,146260],{"id":146259},"_132-macos安装","1.3.2 macOS安装",[15,146262,146263],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[63,146265,146267],{"className":349,"code":146266,"language":351,"meta":68,"style":68},"brew install python\npython3 --version\npip3 --version\n",[34,146268,146269,146278,146284],{"__ignoreMap":68},[72,146270,146271,146274,146276],{"class":74,"line":75},[72,146272,146273],{"class":358},"brew",[72,146275,24256],{"class":366},[72,146277,124608],{"class":366},[72,146279,146280,146282],{"class":74,"line":370},[72,146281,101294],{"class":358},[72,146283,26715],{"class":362},[72,146285,146286,146288],{"class":74,"line":1608},[72,146287,119990],{"class":358},[72,146289,26715],{"class":362},[15,146291,146292],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[531,146294,146296],{"id":146295},"_133-linux安装","1.3.3 Linux安装",[15,146298,146299],{},"Ubuntu\u002FDebian：",[63,146301,146303],{"className":349,"code":146302,"language":351,"meta":68,"style":68},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[34,146304,146305,146313,146328,146334],{"__ignoreMap":68},[72,146306,146307,146309,146311],{"class":74,"line":75},[72,146308,24998],{"class":358},[72,146310,117607],{"class":366},[72,146312,26664],{"class":366},[72,146314,146315,146317,146319,146321,146323,146325],{"class":74,"line":370},[72,146316,24998],{"class":358},[72,146318,117607],{"class":366},[72,146320,24256],{"class":366},[72,146322,104804],{"class":366},[72,146324,101213],{"class":366},[72,146326,146327],{"class":366}," python3-venv\n",[72,146329,146330,146332],{"class":74,"line":1608},[72,146331,101294],{"class":358},[72,146333,26715],{"class":362},[72,146335,146336,146338],{"class":74,"line":1623},[72,146337,119990],{"class":358},[72,146339,26715],{"class":362},[15,146341,146342],{},"Fedora：",[63,146344,146346],{"className":349,"code":146345,"language":351,"meta":68,"style":68},"sudo dnf install python3 python3-pip\n",[34,146347,146348],{"__ignoreMap":68},[72,146349,146350,146352,146354,146356,146358],{"class":74,"line":75},[72,146351,24998],{"class":358},[72,146353,26737],{"class":366},[72,146355,24256],{"class":366},[72,146357,104804],{"class":366},[72,146359,120055],{"class":366},[15,146361,146362,146363,146365],{},"Linux 上通常使用 ",[34,146364,101294],{}," 命令，避免和系统旧版本 Python 冲突。",[85,146367,146369],{"id":146368},"_14-pip包管理器","1.4 pip包管理器",[15,146371,146372,146374],{},[34,146373,24253],{}," 用来安装第三方库。",[63,146376,146378],{"className":349,"code":146377,"language":351,"meta":68,"style":68},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[34,146379,146380,146389,146398,146406,146412],{"__ignoreMap":68},[72,146381,146382,146384,146386],{"class":74,"line":75},[72,146383,24253],{"class":358},[72,146385,24256],{"class":366},[72,146387,146388],{"class":366}," requests\n",[72,146390,146391,146393,146396],{"class":74,"line":370},[72,146392,24253],{"class":358},[72,146394,146395],{"class":366}," uninstall",[72,146397,146388],{"class":366},[72,146399,146400,146402,146404],{"class":74,"line":1608},[72,146401,24253],{"class":358},[72,146403,117864],{"class":366},[72,146405,146388],{"class":366},[72,146407,146408,146410],{"class":74,"line":1623},[72,146409,24253],{"class":358},[72,146411,119245],{"class":366},[72,146413,146414,146416],{"class":74,"line":1629},[72,146415,24253],{"class":358},[72,146417,146418],{"class":366}," freeze\n",[15,146420,146421],{},"国内网络较慢时可以临时使用镜像：",[63,146423,146425],{"className":349,"code":146424,"language":351,"meta":68,"style":68},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[34,146426,146427],{"__ignoreMap":68},[72,146428,146429,146431,146433,146436,146438],{"class":74,"line":75},[72,146430,24253],{"class":358},[72,146432,24256],{"class":366},[72,146434,146435],{"class":366}," requests",[72,146437,26852],{"class":362},[72,146439,120018],{"class":366},[15,146441,146442],{},"常见第三方库：",[154,146444,146445,146454],{},[157,146446,146447],{},[160,146448,146449,146452],{},[163,146450,146451],{},"库",[163,146453,103100],{},[174,146455,146456,146464,146471,146479,146487,146495,146503],{},[160,146457,146458,146461],{},[179,146459,146460],{},"requests",[179,146462,146463],{},"网络请求",[160,146465,146466,146468],{},[179,146467,101043],{},[179,146469,146470],{},"数值计算",[160,146472,146473,146476],{},[179,146474,146475],{},"pandas",[179,146477,146478],{},"表格数据处理",[160,146480,146481,146484],{},[179,146482,146483],{},"matplotlib",[179,146485,146486],{},"绘图",[160,146488,146489,146492],{},[179,146490,146491],{},"pyecharts",[179,146493,146494],{},"ECharts 图表",[160,146496,146497,146500],{},[179,146498,146499],{},"flask",[179,146501,146502],{},"Web 后端",[160,146504,146505,146508],{},[179,146506,146507],{},"pytest",[179,146509,146510],{},"自动化测试",[85,146512,146514],{"id":146513},"_15-虚拟环境","1.5 虚拟环境",[15,146516,146517,146518,146521],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[34,146519,146520],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[15,146523,146524],{},"创建虚拟环境：",[63,146526,146528],{"className":349,"code":146527,"language":351,"meta":68,"style":68},"python -m venv .venv\n",[34,146529,146530],{"__ignoreMap":68},[72,146531,146532,146534,146536,146538],{"class":74,"line":75},[72,146533,67],{"class":358},[72,146535,101297],{"class":362},[72,146537,101300],{"class":366},[72,146539,101303],{"class":366},[15,146541,146542],{},"Windows 激活：",[63,146544,146546],{"className":349,"code":146545,"language":351,"meta":68,"style":68},".venv\\Scripts\\activate\n",[34,146547,146548],{"__ignoreMap":68},[72,146549,146550],{"class":74,"line":75},[72,146551,146545],{"class":358},[15,146553,146554],{},"macOS\u002FLinux 激活：",[63,146556,146558],{"className":349,"code":146557,"language":351,"meta":68,"style":68},"source .venv\u002Fbin\u002Factivate\n",[34,146559,146560],{"__ignoreMap":68},[72,146561,146562,146564],{"class":74,"line":75},[72,146563,101308],{"class":362},[72,146565,101311],{"class":366},[15,146567,146568],{},"退出虚拟环境：",[63,146570,146572],{"className":349,"code":146571,"language":351,"meta":68,"style":68},"deactivate\n",[34,146573,146574],{"__ignoreMap":68},[72,146575,146576],{"class":74,"line":75},[72,146577,146571],{"class":358},[15,146579,146580],{},"保存依赖：",[63,146582,146584],{"className":349,"code":146583,"language":351,"meta":68,"style":68},"pip freeze > requirements.txt\n",[34,146585,146586],{"__ignoreMap":68},[72,146587,146588,146590,146593,146595],{"class":74,"line":75},[72,146589,24253],{"class":358},[72,146591,146592],{"class":366}," freeze",[72,146594,26644],{"class":78},[72,146596,146597],{"class":366}," requirements.txt\n",[15,146599,146600],{},"安装依赖：",[63,146602,146604],{"className":349,"code":146603,"language":351,"meta":68,"style":68},"pip install -r requirements.txt\n",[34,146605,146606],{"__ignoreMap":68},[72,146607,146608,146610,146612,146614],{"class":74,"line":75},[72,146609,24253],{"class":358},[72,146611,24256],{"class":366},[72,146613,119929],{"class":362},[72,146615,146597],{"class":366},[85,146617,146619],{"id":146618},"_16-开发工具","1.6 开发工具",[531,146621,146623],{"id":146622},"_161-pycharm","1.6.1 PyCharm",[15,146625,146626],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[15,146628,122352],{},[22,146630,146631,146634,146637,146643,146646],{},[25,146632,146633],{},"New Project：创建项目。",[25,146635,146636],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[25,146638,146639,146640,126273],{},"New Python File：创建 ",[34,146641,146642],{},".py",[25,146644,146645],{},"Run：运行当前文件。",[25,146647,146648],{},"Debug：断点调试。",[531,146650,146652],{"id":146651},"_162-vs-code","1.6.2 VS Code",[15,146654,146655],{},"VS Code 轻量，适合后续多语言开发。",[15,146657,146658],{},"建议安装插件：",[22,146660,146661,146664,146667],{},[25,146662,146663],{},"Python。",[25,146665,146666],{},"Pylance。",[25,146668,146669],{},"Jupyter。",[15,146671,146672],{},"选择解释器：",[63,146674,146677],{"className":146675,"code":146676,"language":127,"meta":68},[125],"Ctrl + Shift + P -> Python: Select Interpreter\n",[34,146678,146676],{"__ignoreMap":68},[85,146680,146682],{"id":146681},"_17-第一个python程序","1.7 第一个Python程序",[15,146684,146685,146686,25040],{},"创建文件 ",[34,146687,146688],{},"hello.py",[63,146690,146692],{"className":65,"code":146691,"language":67,"meta":68,"style":68},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[34,146693,146694,146705],{"__ignoreMap":68},[72,146695,146696,146698,146700,146703],{"class":74,"line":75},[72,146697,30833],{"class":362},[72,146699,564],{"class":82},[72,146701,146702],{"class":366},"\"Hello World\"",[72,146704,570],{"class":82},[72,146706,146707,146709,146711,146714],{"class":74,"line":370},[72,146708,30833],{"class":362},[72,146710,564],{"class":82},[72,146712,146713],{"class":366},"\"你好，Python\"",[72,146715,570],{"class":82},[15,146717,146718],{},"在终端运行：",[63,146720,146722],{"className":349,"code":146721,"language":351,"meta":68,"style":68},"python hello.py\n",[34,146723,146724],{"__ignoreMap":68},[72,146725,146726,146728],{"class":74,"line":75},[72,146727,67],{"class":358},[72,146729,146730],{"class":366}," hello.py\n",[15,146732,146733],{},"或：",[63,146735,146737],{"className":349,"code":146736,"language":351,"meta":68,"style":68},"python3 hello.py\n",[34,146738,146739],{"__ignoreMap":68},[72,146740,146741,146743],{"class":74,"line":75},[72,146742,101294],{"class":358},[72,146744,146730],{"class":366},[15,146746,146747],{},"输出：",[63,146749,146752],{"className":146750,"code":146751,"language":127,"meta":68},[125],"Hello World\n你好，Python\n",[34,146753,146751],{"__ignoreMap":68},[85,146755,146757],{"id":146756},"_18-print函数","1.8 print函数",[15,146759,146760,146763],{},[34,146761,146762],{},"print()"," 用来输出内容。",[63,146765,146767],{"className":65,"code":146766,"language":67,"meta":68,"style":68},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[34,146768,146769,146779,146789,146799],{"__ignoreMap":68},[72,146770,146771,146773,146775,146777],{"class":74,"line":75},[72,146772,30833],{"class":362},[72,146774,564],{"class":82},[72,146776,6270],{"class":366},[72,146778,570],{"class":82},[72,146780,146781,146783,146785,146787],{"class":74,"line":370},[72,146782,30833],{"class":362},[72,146784,564],{"class":82},[72,146786,865],{"class":362},[72,146788,570],{"class":82},[72,146790,146791,146793,146795,146797],{"class":74,"line":1608},[72,146792,30833],{"class":362},[72,146794,564],{"class":82},[72,146796,612],{"class":362},[72,146798,570],{"class":82},[72,146800,146801,146803,146805,146808,146810,146812],{"class":74,"line":1623},[72,146802,30833],{"class":362},[72,146804,564],{"class":82},[72,146806,146807],{"class":366},"\"年龄:\"",[72,146809,12861],{"class":82},[72,146811,1204],{"class":362},[72,146813,570],{"class":82},[15,146815,146816],{},"多个内容用逗号隔开，默认中间加空格：",[63,146818,146820],{"className":65,"code":146819,"language":67,"meta":68,"style":68},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[34,146821,146822,146832,146842],{"__ignoreMap":68},[72,146823,146824,146827,146829],{"class":74,"line":75},[72,146825,146826],{"class":82},"name ",[72,146828,609],{"class":78},[72,146830,146831],{"class":366}," \"张三\"\n",[72,146833,146834,146837,146839],{"class":74,"line":370},[72,146835,146836],{"class":82},"age ",[72,146838,609],{"class":78},[72,146840,146841],{"class":362}," 18\n",[72,146843,146844,146846,146848,146851,146854,146856],{"class":74,"line":1608},[72,146845,30833],{"class":362},[72,146847,564],{"class":82},[72,146849,146850],{"class":366},"\"姓名:\"",[72,146852,146853],{"class":82},", name, ",[72,146855,146807],{"class":366},[72,146857,146858],{"class":82},", age)\n",[15,146860,146861],{},"修改分隔符：",[63,146863,146865],{"className":65,"code":146864,"language":67,"meta":68,"style":68},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[34,146866,146867],{"__ignoreMap":68},[72,146868,146869,146871,146873,146876,146878,146880,146882,146884,146886,146889,146891,146893],{"class":74,"line":75},[72,146870,30833],{"class":362},[72,146872,564],{"class":82},[72,146874,146875],{"class":366},"\"2024\"",[72,146877,12861],{"class":82},[72,146879,54734],{"class":366},[72,146881,12861],{"class":82},[72,146883,54734],{"class":366},[72,146885,12861],{"class":82},[72,146887,146888],{"class":5642},"sep",[72,146890,609],{"class":78},[72,146892,32901],{"class":366},[72,146894,570],{"class":82},[15,146896,146897],{},"修改结尾符：",[63,146899,146901],{"className":65,"code":146900,"language":67,"meta":68,"style":68},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[34,146902,146903,146921],{"__ignoreMap":68},[72,146904,146905,146907,146909,146911,146913,146915,146917,146919],{"class":74,"line":75},[72,146906,30833],{"class":362},[72,146908,564],{"class":82},[72,146910,6270],{"class":366},[72,146912,12861],{"class":82},[72,146914,46219],{"class":5642},[72,146916,609],{"class":78},[72,146918,4787],{"class":366},[72,146920,570],{"class":82},[72,146922,146923,146925,146927,146930],{"class":74,"line":370},[72,146924,30833],{"class":362},[72,146926,564],{"class":82},[72,146928,146929],{"class":366},"\"python\"",[72,146931,570],{"class":82},[85,146933,146935],{"id":146934},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[15,146937,146938],{},"交互运行适合临时验证：",[63,146940,146942],{"className":65,"code":146941,"language":67,"meta":68,"style":68},">>> 10 * 3\n30\n",[34,146943,146944,146954],{"__ignoreMap":68},[72,146945,146946,146948,146950,146952],{"class":74,"line":75},[72,146947,146143],{"class":78},[72,146949,2466],{"class":362},[72,146951,6944],{"class":78},[72,146953,120326],{"class":362},[72,146955,146956],{"class":74,"line":370},[72,146957,146958],{"class":362},"30\n",[15,146960,146961],{},"脚本运行适合保存程序：",[63,146963,146965],{"className":65,"code":146964,"language":67,"meta":68,"style":68},"price = 8\ncount = 5\nprint(price * count)\n",[34,146966,146967,146977,146986],{"__ignoreMap":68},[72,146968,146969,146972,146974],{"class":74,"line":75},[72,146970,146971],{"class":82},"price ",[72,146973,609],{"class":78},[72,146975,146976],{"class":362}," 8\n",[72,146978,146979,146982,146984],{"class":74,"line":370},[72,146980,146981],{"class":82},"count ",[72,146983,609],{"class":78},[72,146985,54845],{"class":362},[72,146987,146988,146990,146993,146995],{"class":74,"line":1608},[72,146989,30833],{"class":362},[72,146991,146992],{"class":82},"(price ",[72,146994,1009],{"class":78},[72,146996,146997],{"class":82}," count)\n",[15,146999,147000],{},"实际学习中推荐：",[22,147002,147003,147006,147011],{},[25,147004,147005],{},"临时试一个语法，用交互模式。",[25,147007,147008,147009,126273],{},"写完整练习，用 ",[34,147010,146642],{},[25,147012,147013],{},"写项目，用独立目录和虚拟环境。",[85,147015,147017],{"id":147016},"_110-常见错误","1.10 常见错误",[531,147019,147021],{"id":147020},"_1101-命令找不到","1.10.1 命令找不到",[63,147023,147026],{"className":147024,"code":147025,"language":127,"meta":68},[125],"python: command not found\n",[34,147027,147025],{"__ignoreMap":68},[15,147029,147030],{},"原因：",[22,147032,147033,147036,147039],{},[25,147034,147035],{},"没安装 Python。",[25,147037,147038],{},"PATH 没配置。",[25,147040,147041,147042,28807],{},"Linux\u002FmacOS 应该使用 ",[34,147043,101294],{},[531,147045,147047],{"id":147046},"_1102-文件名冲突","1.10.2 文件名冲突",[15,147049,147050],{},"不要把文件命名为：",[63,147052,147055],{"className":147053,"code":147054,"language":127,"meta":68},[125],"random.py\njson.py\ntime.py\nrequests.py\n",[34,147056,147054],{"__ignoreMap":68},[15,147058,147059],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[531,147061,147063],{"id":147062},"_1103-中文乱码","1.10.3 中文乱码",[15,147065,147066],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[15,147068,147069],{},"如果读写文件出现乱码，要明确指定编码：",[63,147071,147073],{"className":65,"code":147072,"language":67,"meta":68,"style":68},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[34,147074,147075,147109],{"__ignoreMap":68},[72,147076,147077,147079,147082,147084,147087,147089,147092,147094,147097,147099,147102,147104,147106],{"class":74,"line":75},[72,147078,108233],{"class":78},[72,147080,147081],{"class":362}," open",[72,147083,564],{"class":82},[72,147085,147086],{"class":366},"\"data.txt\"",[72,147088,12861],{"class":82},[72,147090,147091],{"class":366},"\"r\"",[72,147093,12861],{"class":82},[72,147095,147096],{"class":5642},"encoding",[72,147098,609],{"class":78},[72,147100,147101],{"class":366},"\"utf-8\"",[72,147103,14140],{"class":82},[72,147105,31801],{"class":78},[72,147107,147108],{"class":82}," f:\n",[72,147110,147111,147114,147116],{"class":74,"line":370},[72,147112,147113],{"class":82},"    content ",[72,147115,609],{"class":78},[72,147117,147118],{"class":82}," f.read()\n",[85,147120,147122],{"id":147121},"_111-本章练习","1.11 本章练习",[22,147124,147125,147128,147134],{},[25,147126,147127],{},"安装 Python，并在终端输出版本号。",[25,147129,147130,147131,147133],{},"新建 ",[34,147132,146688],{},"，输出自己的姓名、年龄、学习目标。",[25,147135,104767,147136,147138],{},[34,147137,146762],{}," 输出下面格式：",[63,147140,147143],{"className":147141,"code":147142,"language":127,"meta":68},[125],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[34,147144,147142],{"__ignoreMap":68},[22,147146,147147],{"start":1623},[25,147148,104767,147149,147151],{},[34,147150,146888],{}," 输出日期：",[63,147153,147156],{"className":147154,"code":147155,"language":127,"meta":68},[125],"2024-10-10\n",[34,147157,147155],{"__ignoreMap":68},[22,147159,147160],{"start":1629},[25,147161,104767,147162,147164,147165,147167],{},[34,147163,46219],{}," 让两次 ",[34,147166,146762],{}," 输出在同一行。",[473,147169,147170],{},"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":68,"searchDepth":370,"depth":370,"links":147172},[147173,147174,147175,147180,147181,147182,147186,147187,147188,147189,147194],{"id":146055,"depth":370,"text":146056},{"id":146099,"depth":370,"text":146100},{"id":146200,"depth":370,"text":146201,"children":147176},[147177,147178,147179],{"id":146204,"depth":1608,"text":146205},{"id":146259,"depth":1608,"text":146260},{"id":146295,"depth":1608,"text":146296},{"id":146368,"depth":370,"text":146369},{"id":146513,"depth":370,"text":146514},{"id":146618,"depth":370,"text":146619,"children":147183},[147184,147185],{"id":146622,"depth":1608,"text":146623},{"id":146651,"depth":1608,"text":146652},{"id":146681,"depth":370,"text":146682},{"id":146756,"depth":370,"text":146757},{"id":146934,"depth":370,"text":146935},{"id":147016,"depth":370,"text":147017,"children":147190},[147191,147192,147193],{"id":147020,"depth":1608,"text":147021},{"id":147046,"depth":1608,"text":147047},{"id":147062,"depth":1608,"text":147063},{"id":147121,"depth":370,"text":147122},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":146047,"description":23802},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":147201,"title":147202,"body":147203,"description":23802,"extension":487,"meta":149607,"navigation":490,"path":149608,"seo":149609,"stem":149610,"__hash__":149611},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":147204,"toc":149592},[147205,147208,147212,147215,147218,147235,147238,147280,147283,147287,147290,147293,147330,147333,147367,147370,147462,147466,147480,147483,147510,147513,147517,147620,147627,147630,147647,147651,147658,147847,147850,147923,147927,147930,148014,148017,148049,148053,148257,148260,148264,148270,148372,148375,148631,148635,148638,148641,148655,148657,148843,148847,149209,149215,149219,149222,149346,149349,149528,149531,149535,149568,149572,149589],[10,147206,147202],{"id":147207},"_10-json与pyecharts折线图",[85,147209,147211],{"id":147210},"_101-数据可视化","10.1 数据可视化",[15,147213,147214],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[15,147216,147217],{},"常见图表：",[22,147219,147220,147223,147226,147229,147232],{},[25,147221,147222],{},"折线图：看趋势。",[25,147224,147225],{},"柱状图：看分类对比。",[25,147227,147228],{},"饼图：看占比。",[25,147230,147231],{},"地图：看地域分布。",[25,147233,147234],{},"散点图：看两个变量之间的关系。",[15,147236,147237],{},"Python 可视化常用库：",[154,147239,147240,147248],{},[157,147241,147242],{},[160,147243,147244,147246],{},[163,147245,146451],{},[163,147247,24164],{},[174,147249,147250,147257,147265,147272],{},[160,147251,147252,147254],{},[179,147253,146483],{},[179,147255,147256],{},"基础、经典、可定制",[160,147258,147259,147262],{},[179,147260,147261],{},"seaborn",[179,147263,147264],{},"统计图表更美观",[160,147266,147267,147269],{},[179,147268,146491],{},[179,147270,147271],{},"生成交互式网页图表",[160,147273,147274,147277],{},[179,147275,147276],{},"plotly",[179,147278,147279],{},"交互图表能力强",[15,147281,147282],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[85,147284,147286],{"id":147285},"_102-json回顾","10.2 JSON回顾",[15,147288,147289],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[15,147291,147292],{},"Python 字典：",[63,147294,147296],{"className":65,"code":147295,"language":67,"meta":68,"style":68},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[34,147297,147298,147306,147317,147326],{"__ignoreMap":68},[72,147299,147300,147302,147304],{"class":74,"line":75},[72,147301,102063],{"class":82},[72,147303,609],{"class":78},[72,147305,15998],{"class":82},[72,147307,147308,147311,147313,147315],{"class":74,"line":370},[72,147309,147310],{"class":366},"    \"name\"",[72,147312,51855],{"class":82},[72,147314,69687],{"class":366},[72,147316,31884],{"class":82},[72,147318,147319,147322,147324],{"class":74,"line":1608},[72,147320,147321],{"class":366},"    \"value\"",[72,147323,51855],{"class":82},[72,147325,97875],{"class":362},[72,147327,147328],{"class":74,"line":1623},[72,147329,1994],{"class":82},[15,147331,147332],{},"JSON 字符串：",[63,147334,147337],{"className":147335,"code":147336,"language":146082,"meta":68,"style":68},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[34,147338,147339,147343,147354,147363],{"__ignoreMap":68},[72,147340,147341],{"class":74,"line":75},[72,147342,1975],{"class":82},[72,147344,147345,147348,147350,147352],{"class":74,"line":370},[72,147346,147347],{"class":362},"  \"name\"",[72,147349,51855],{"class":82},[72,147351,69687],{"class":366},[72,147353,31884],{"class":82},[72,147355,147356,147359,147361],{"class":74,"line":1608},[72,147357,147358],{"class":362},"  \"value\"",[72,147360,51855],{"class":82},[72,147362,97875],{"class":362},[72,147364,147365],{"class":74,"line":1623},[72,147366,1994],{"class":82},[15,147368,147369],{},"Python 与 JSON 的转换：",[63,147371,147373],{"className":65,"code":147372,"language":67,"meta":68,"style":68},"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",[34,147374,147375,147382,147386,147411,147415,147434,147441,147445,147455],{"__ignoreMap":68},[72,147376,147377,147379],{"class":74,"line":75},[72,147378,79],{"class":78},[72,147380,147381],{"class":82}," json\n",[72,147383,147384],{"class":74,"line":370},[72,147385,2828],{"emptyLinePlaceholder":490},[72,147387,147388,147390,147392,147394,147396,147398,147400,147402,147405,147407,147409],{"class":74,"line":1608},[72,147389,102063],{"class":82},[72,147391,609],{"class":78},[72,147393,4876],{"class":82},[72,147395,63097],{"class":366},[72,147397,51855],{"class":82},[72,147399,69687],{"class":366},[72,147401,12861],{"class":82},[72,147403,147404],{"class":366},"\"value\"",[72,147406,51855],{"class":82},[72,147408,865],{"class":362},[72,147410,1994],{"class":82},[72,147412,147413],{"class":74,"line":1623},[72,147414,2828],{"emptyLinePlaceholder":490},[72,147416,147417,147420,147422,147425,147428,147430,147432],{"class":74,"line":1629},[72,147418,147419],{"class":82},"json_text ",[72,147421,609],{"class":78},[72,147423,147424],{"class":82}," json.dumps(data, ",[72,147426,147427],{"class":5642},"ensure_ascii",[72,147429,609],{"class":78},[72,147431,34405],{"class":362},[72,147433,570],{"class":82},[72,147435,147436,147438],{"class":74,"line":1643},[72,147437,30833],{"class":362},[72,147439,147440],{"class":82},"(json_text)\n",[72,147442,147443],{"class":74,"line":1649},[72,147444,2828],{"emptyLinePlaceholder":490},[72,147446,147447,147450,147452],{"class":74,"line":1740},[72,147448,147449],{"class":82},"new_data ",[72,147451,609],{"class":78},[72,147453,147454],{"class":82}," json.loads(json_text)\n",[72,147456,147457,147459],{"class":74,"line":1746},[72,147458,30833],{"class":362},[72,147460,147461],{"class":82},"(new_data)\n",[85,147463,147465],{"id":147464},"_103-安装pyecharts","10.3 安装pyecharts",[63,147467,147469],{"className":349,"code":147468,"language":351,"meta":68,"style":68},"pip install pyecharts\n",[34,147470,147471],{"__ignoreMap":68},[72,147472,147473,147475,147477],{"class":74,"line":75},[72,147474,24253],{"class":358},[72,147476,24256],{"class":366},[72,147478,147479],{"class":366}," pyecharts\n",[15,147481,147482],{},"验证：",[63,147484,147486],{"className":65,"code":147485,"language":67,"meta":68,"style":68},"import pyecharts\n\nprint(pyecharts.__version__)\n",[34,147487,147488,147494,147498],{"__ignoreMap":68},[72,147489,147490,147492],{"class":74,"line":75},[72,147491,79],{"class":78},[72,147493,147479],{"class":82},[72,147495,147496],{"class":74,"line":370},[72,147497,2828],{"emptyLinePlaceholder":490},[72,147499,147500,147502,147505,147508],{"class":74,"line":1608},[72,147501,30833],{"class":362},[72,147503,147504],{"class":82},"(pyecharts.",[72,147506,147507],{"class":362},"__version__",[72,147509,570],{"class":82},[15,147511,147512],{},"如果使用虚拟环境，要先激活环境再安装。",[85,147514,147516],{"id":147515},"_104-第一个折线图","10.4 第一个折线图",[63,147518,147520],{"className":65,"code":147519,"language":67,"meta":68,"style":68},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[34,147521,147522,147534,147538,147548,147578,147610],{"__ignoreMap":68},[72,147523,147524,147526,147529,147531],{"class":74,"line":75},[72,147525,31155],{"class":78},[72,147527,147528],{"class":82}," pyecharts.charts ",[72,147530,79],{"class":78},[72,147532,147533],{"class":82}," Line\n",[72,147535,147536],{"class":74,"line":370},[72,147537,2828],{"emptyLinePlaceholder":490},[72,147539,147540,147543,147545],{"class":74,"line":1608},[72,147541,147542],{"class":82},"line ",[72,147544,609],{"class":78},[72,147546,147547],{"class":82}," Line()\n",[72,147549,147550,147553,147556,147558,147561,147563,147566,147568,147571,147573,147576],{"class":74,"line":1623},[72,147551,147552],{"class":82},"line.add_xaxis([",[72,147554,147555],{"class":366},"\"周一\"",[72,147557,12861],{"class":82},[72,147559,147560],{"class":366},"\"周二\"",[72,147562,12861],{"class":82},[72,147564,147565],{"class":366},"\"周三\"",[72,147567,12861],{"class":82},[72,147569,147570],{"class":366},"\"周四\"",[72,147572,12861],{"class":82},[72,147574,147575],{"class":366},"\"周五\"",[72,147577,5085],{"class":82},[72,147579,147580,147583,147586,147588,147590,147592,147594,147596,147598,147600,147603,147605,147608],{"class":74,"line":1629},[72,147581,147582],{"class":82},"line.add_yaxis(",[72,147584,147585],{"class":366},"\"销售额\"",[72,147587,77936],{"class":82},[72,147589,865],{"class":362},[72,147591,12861],{"class":82},[72,147593,1371],{"class":362},[72,147595,12861],{"class":82},[72,147597,1416],{"class":362},[72,147599,12861],{"class":82},[72,147601,147602],{"class":362},"150",[72,147604,12861],{"class":82},[72,147606,147607],{"class":362},"180",[72,147609,5085],{"class":82},[72,147611,147612,147615,147618],{"class":74,"line":1643},[72,147613,147614],{"class":82},"line.render(",[72,147616,147617],{"class":366},"\"line.html\"",[72,147619,570],{"class":82},[15,147621,147622,147623,147626],{},"运行后会生成 ",[34,147624,147625],{},"line.html","，用浏览器打开即可看到图表。",[15,147628,147629],{},"核心步骤：",[22,147631,147632,147635,147638,147641,147644],{},[25,147633,147634],{},"导入图表类。",[25,147636,147637],{},"创建图表对象。",[25,147639,147640],{},"添加 x 轴数据。",[25,147642,147643],{},"添加 y 轴数据。",[25,147645,147646],{},"渲染为 HTML。",[85,147648,147650],{"id":147649},"_105-全局配置","10.5 全局配置",[15,147652,147653,147654,147657],{},"常用配置在 ",[34,147655,147656],{},"pyecharts.options"," 中。",[63,147659,147661],{"className":65,"code":147660,"language":67,"meta":68,"style":68},"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",[34,147662,147663,147680,147690,147694,147702,147726,147754,147759,147778,147797,147815,147835,147839],{"__ignoreMap":68},[72,147664,147665,147667,147670,147672,147675,147677],{"class":74,"line":75},[72,147666,31155],{"class":78},[72,147668,147669],{"class":82}," pyecharts ",[72,147671,79],{"class":78},[72,147673,147674],{"class":82}," options ",[72,147676,31801],{"class":78},[72,147678,147679],{"class":82}," opts\n",[72,147681,147682,147684,147686,147688],{"class":74,"line":370},[72,147683,31155],{"class":78},[72,147685,147528],{"class":82},[72,147687,79],{"class":78},[72,147689,147533],{"class":82},[72,147691,147692],{"class":74,"line":1608},[72,147693,2828],{"emptyLinePlaceholder":490},[72,147695,147696,147698,147700],{"class":74,"line":1623},[72,147697,147542],{"class":82},[72,147699,609],{"class":78},[72,147701,147547],{"class":82},[72,147703,147704,147706,147708,147710,147712,147714,147716,147718,147720,147722,147724],{"class":74,"line":1629},[72,147705,147552],{"class":82},[72,147707,147555],{"class":366},[72,147709,12861],{"class":82},[72,147711,147560],{"class":366},[72,147713,12861],{"class":82},[72,147715,147565],{"class":366},[72,147717,12861],{"class":82},[72,147719,147570],{"class":366},[72,147721,12861],{"class":82},[72,147723,147575],{"class":366},[72,147725,5085],{"class":82},[72,147727,147728,147730,147732,147734,147736,147738,147740,147742,147744,147746,147748,147750,147752],{"class":74,"line":1643},[72,147729,147582],{"class":82},[72,147731,147585],{"class":366},[72,147733,77936],{"class":82},[72,147735,865],{"class":362},[72,147737,12861],{"class":82},[72,147739,1371],{"class":362},[72,147741,12861],{"class":82},[72,147743,1416],{"class":362},[72,147745,12861],{"class":82},[72,147747,147602],{"class":362},[72,147749,12861],{"class":82},[72,147751,147607],{"class":362},[72,147753,5085],{"class":82},[72,147755,147756],{"class":74,"line":1649},[72,147757,147758],{"class":82},"line.set_global_opts(\n",[72,147760,147761,147764,147766,147769,147771,147773,147776],{"class":74,"line":1740},[72,147762,147763],{"class":5642},"    title_opts",[72,147765,609],{"class":78},[72,147767,147768],{"class":82},"opts.TitleOpts(",[72,147770,51825],{"class":5642},[72,147772,609],{"class":78},[72,147774,147775],{"class":366},"\"一周销售额\"",[72,147777,38465],{"class":82},[72,147779,147780,147783,147785,147788,147790,147792,147795],{"class":74,"line":1746},[72,147781,147782],{"class":5642},"    xaxis_opts",[72,147784,609],{"class":78},[72,147786,147787],{"class":82},"opts.AxisOpts(",[72,147789,80228],{"class":5642},[72,147791,609],{"class":78},[72,147793,147794],{"class":366},"\"日期\"",[72,147796,38465],{"class":82},[72,147798,147799,147802,147804,147806,147808,147810,147813],{"class":74,"line":1758},[72,147800,147801],{"class":5642},"    yaxis_opts",[72,147803,609],{"class":78},[72,147805,147787],{"class":82},[72,147807,80228],{"class":5642},[72,147809,609],{"class":78},[72,147811,147812],{"class":366},"\"金额\"",[72,147814,38465],{"class":82},[72,147816,147817,147820,147822,147825,147828,147830,147833],{"class":74,"line":2041},[72,147818,147819],{"class":5642},"    tooltip_opts",[72,147821,609],{"class":78},[72,147823,147824],{"class":82},"opts.TooltipOpts(",[72,147826,147827],{"class":5642},"trigger",[72,147829,609],{"class":78},[72,147831,147832],{"class":366},"\"axis\"",[72,147834,38465],{"class":82},[72,147836,147837],{"class":74,"line":2046},[72,147838,570],{"class":82},[72,147840,147841,147843,147845],{"class":74,"line":2052},[72,147842,147614],{"class":82},[72,147844,147617],{"class":366},[72,147846,570],{"class":82},[15,147848,147849],{},"常见全局配置：",[154,147851,147852,147861],{},[157,147853,147854],{},[160,147855,147856,147859],{},[163,147857,147858],{},"配置",[163,147860,103100],{},[174,147862,147863,147873,147883,147893,147903,147913],{},[160,147864,147865,147870],{},[179,147866,147867],{},[34,147868,147869],{},"TitleOpts",[179,147871,147872],{},"标题",[160,147874,147875,147880],{},[179,147876,147877],{},[34,147878,147879],{},"LegendOpts",[179,147881,147882],{},"图例",[160,147884,147885,147890],{},[179,147886,147887],{},[34,147888,147889],{},"TooltipOpts",[179,147891,147892],{},"提示框",[160,147894,147895,147900],{},[179,147896,147897],{},[34,147898,147899],{},"AxisOpts",[179,147901,147902],{},"坐标轴",[160,147904,147905,147910],{},[179,147906,147907],{},[34,147908,147909],{},"VisualMapOpts",[179,147911,147912],{},"视觉映射",[160,147914,147915,147920],{},[179,147916,147917],{},[34,147918,147919],{},"DataZoomOpts",[179,147921,147922],{},"区域缩放",[85,147924,147926],{"id":147925},"_106-系列配置","10.6 系列配置",[15,147928,147929],{},"系列配置作用于某一组数据。",[63,147931,147933],{"className":65,"code":147932,"language":67,"meta":68,"style":68},"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",[34,147934,147935,147940,147951,147980,147991,148010],{"__ignoreMap":68},[72,147936,147937],{"class":74,"line":75},[72,147938,147939],{"class":82},"line.add_yaxis(\n",[72,147941,147942,147945,147947,147949],{"class":74,"line":370},[72,147943,147944],{"class":5642},"    series_name",[72,147946,609],{"class":78},[72,147948,147585],{"class":366},[72,147950,31884],{"class":82},[72,147952,147953,147956,147958,147960,147962,147964,147966,147968,147970,147972,147974,147976,147978],{"class":74,"line":1608},[72,147954,147955],{"class":5642},"    y_axis",[72,147957,609],{"class":78},[72,147959,1444],{"class":82},[72,147961,865],{"class":362},[72,147963,12861],{"class":82},[72,147965,1371],{"class":362},[72,147967,12861],{"class":82},[72,147969,1416],{"class":362},[72,147971,12861],{"class":82},[72,147973,147602],{"class":362},[72,147975,12861],{"class":82},[72,147977,147607],{"class":362},[72,147979,88253],{"class":82},[72,147981,147982,147985,147987,147989],{"class":74,"line":1623},[72,147983,147984],{"class":5642},"    is_smooth",[72,147986,609],{"class":78},[72,147988,31894],{"class":362},[72,147990,31884],{"class":82},[72,147992,147993,147996,147998,148001,148004,148006,148008],{"class":74,"line":1629},[72,147994,147995],{"class":5642},"    label_opts",[72,147997,609],{"class":78},[72,147999,148000],{"class":82},"opts.LabelOpts(",[72,148002,148003],{"class":5642},"is_show",[72,148005,609],{"class":78},[72,148007,31894],{"class":362},[72,148009,38465],{"class":82},[72,148011,148012],{"class":74,"line":1643},[72,148013,570],{"class":82},[15,148015,148016],{},"常用参数：",[22,148018,148019,148025,148031,148037,148043],{},[25,148020,148021,148024],{},[34,148022,148023],{},"series_name","：系列名称。",[25,148026,148027,148030],{},[34,148028,148029],{},"y_axis","：y 轴数据。",[25,148032,148033,148036],{},[34,148034,148035],{},"is_smooth","：是否平滑曲线。",[25,148038,148039,148042],{},[34,148040,148041],{},"label_opts","：标签配置。",[25,148044,148045,148048],{},[34,148046,148047],{},"symbol_size","：标记点大小。",[85,148050,148052],{"id":148051},"_107-多条折线","10.7 多条折线",[63,148054,148056],{"className":65,"code":148055,"language":67,"meta":68,"style":68},"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",[34,148057,148058,148072,148082,148086,148115,148119,148127,148132,148170,148207,148211,148228,148244,148248],{"__ignoreMap":68},[72,148059,148060,148062,148064,148066,148068,148070],{"class":74,"line":75},[72,148061,31155],{"class":78},[72,148063,147669],{"class":82},[72,148065,79],{"class":78},[72,148067,147674],{"class":82},[72,148069,31801],{"class":78},[72,148071,147679],{"class":82},[72,148073,148074,148076,148078,148080],{"class":74,"line":370},[72,148075,31155],{"class":78},[72,148077,147528],{"class":82},[72,148079,79],{"class":78},[72,148081,147533],{"class":82},[72,148083,148084],{"class":74,"line":1608},[72,148085,2828],{"emptyLinePlaceholder":490},[72,148087,148088,148091,148093,148095,148097,148099,148101,148103,148105,148107,148109,148111,148113],{"class":74,"line":1623},[72,148089,148090],{"class":82},"dates ",[72,148092,609],{"class":78},[72,148094,52644],{"class":82},[72,148096,147555],{"class":366},[72,148098,12861],{"class":82},[72,148100,147560],{"class":366},[72,148102,12861],{"class":82},[72,148104,147565],{"class":366},[72,148106,12861],{"class":82},[72,148108,147570],{"class":366},[72,148110,12861],{"class":82},[72,148112,147575],{"class":366},[72,148114,33664],{"class":82},[72,148116,148117],{"class":74,"line":1629},[72,148118,2828],{"emptyLinePlaceholder":490},[72,148120,148121,148123,148125],{"class":74,"line":1643},[72,148122,147542],{"class":82},[72,148124,609],{"class":78},[72,148126,147547],{"class":82},[72,148128,148129],{"class":74,"line":1649},[72,148130,148131],{"class":82},"line.add_xaxis(dates)\n",[72,148133,148134,148136,148139,148141,148143,148145,148148,148150,148152,148154,148156,148158,148160,148162,148164,148166,148168],{"class":74,"line":1740},[72,148135,147582],{"class":82},[72,148137,148138],{"class":366},"\"线上销售\"",[72,148140,77936],{"class":82},[72,148142,865],{"class":362},[72,148144,12861],{"class":82},[72,148146,148147],{"class":362},"130",[72,148149,12861],{"class":82},[72,148151,1371],{"class":362},[72,148153,12861],{"class":82},[72,148155,21474],{"class":362},[72,148157,12861],{"class":82},[72,148159,2151],{"class":362},[72,148161,112602],{"class":82},[72,148163,148035],{"class":5642},[72,148165,609],{"class":78},[72,148167,31894],{"class":362},[72,148169,570],{"class":82},[72,148171,148172,148174,148177,148179,148181,148183,148185,148187,148189,148191,148193,148195,148197,148199,148201,148203,148205],{"class":74,"line":1746},[72,148173,147582],{"class":82},[72,148175,148176],{"class":366},"\"线下销售\"",[72,148178,77936],{"class":82},[72,148180,1166],{"class":362},[72,148182,12861],{"class":82},[72,148184,1416],{"class":362},[72,148186,12861],{"class":82},[72,148188,865],{"class":362},[72,148190,12861],{"class":82},[72,148192,1371],{"class":362},[72,148194,12861],{"class":82},[72,148196,147602],{"class":362},[72,148198,112602],{"class":82},[72,148200,148035],{"class":5642},[72,148202,609],{"class":78},[72,148204,31894],{"class":362},[72,148206,570],{"class":82},[72,148208,148209],{"class":74,"line":1758},[72,148210,147758],{"class":82},[72,148212,148213,148215,148217,148219,148221,148223,148226],{"class":74,"line":2041},[72,148214,147763],{"class":5642},[72,148216,609],{"class":78},[72,148218,147768],{"class":82},[72,148220,51825],{"class":5642},[72,148222,609],{"class":78},[72,148224,148225],{"class":366},"\"线上线下销售趋势\"",[72,148227,38465],{"class":82},[72,148229,148230,148232,148234,148236,148238,148240,148242],{"class":74,"line":2046},[72,148231,147819],{"class":5642},[72,148233,609],{"class":78},[72,148235,147824],{"class":82},[72,148237,147827],{"class":5642},[72,148239,609],{"class":78},[72,148241,147832],{"class":366},[72,148243,38465],{"class":82},[72,148245,148246],{"class":74,"line":2052},[72,148247,570],{"class":82},[72,148249,148250,148252,148255],{"class":74,"line":2057},[72,148251,147614],{"class":82},[72,148253,148254],{"class":366},"\"sales.html\"",[72,148256,570],{"class":82},[15,148258,148259],{},"多条折线适合比较不同指标或不同地区。",[85,148261,148263],{"id":148262},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[15,148265,148266,148267,25040],{},"假设 ",[34,148268,148269],{},"sales.json",[63,148271,148273],{"className":147335,"code":148272,"language":146082,"meta":68,"style":68},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[34,148274,148275,148280,148312,148340,148368],{"__ignoreMap":68},[72,148276,148277],{"class":74,"line":75},[72,148278,148279],{"class":82},"[\n",[72,148281,148282,148285,148288,148290,148292,148294,148297,148299,148301,148303,148306,148308,148310],{"class":74,"line":370},[72,148283,148284],{"class":82},"  {",[72,148286,148287],{"class":362},"\"date\"",[72,148289,51855],{"class":82},[72,148291,147555],{"class":366},[72,148293,12861],{"class":82},[72,148295,148296],{"class":362},"\"online\"",[72,148298,51855],{"class":82},[72,148300,865],{"class":362},[72,148302,12861],{"class":82},[72,148304,148305],{"class":362},"\"offline\"",[72,148307,51855],{"class":82},[72,148309,1166],{"class":362},[72,148311,5358],{"class":82},[72,148313,148314,148316,148318,148320,148322,148324,148326,148328,148330,148332,148334,148336,148338],{"class":74,"line":1608},[72,148315,148284],{"class":82},[72,148317,148287],{"class":362},[72,148319,51855],{"class":82},[72,148321,147560],{"class":366},[72,148323,12861],{"class":82},[72,148325,148296],{"class":362},[72,148327,51855],{"class":82},[72,148329,148147],{"class":362},[72,148331,12861],{"class":82},[72,148333,148305],{"class":362},[72,148335,51855],{"class":82},[72,148337,1416],{"class":362},[72,148339,5358],{"class":82},[72,148341,148342,148344,148346,148348,148350,148352,148354,148356,148358,148360,148362,148364,148366],{"class":74,"line":1623},[72,148343,148284],{"class":82},[72,148345,148287],{"class":362},[72,148347,51855],{"class":82},[72,148349,147565],{"class":366},[72,148351,12861],{"class":82},[72,148353,148296],{"class":362},[72,148355,51855],{"class":82},[72,148357,1371],{"class":362},[72,148359,12861],{"class":82},[72,148361,148305],{"class":362},[72,148363,51855],{"class":82},[72,148365,865],{"class":362},[72,148367,1994],{"class":82},[72,148369,148370],{"class":74,"line":1629},[72,148371,33664],{"class":82},[15,148373,148374],{},"读取并绘图：",[63,148376,148378],{"className":65,"code":148377,"language":67,"meta":68,"style":68},"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",[34,148379,148380,148386,148400,148410,148414,148446,148459,148463,148471,148480,148489,148493,148505,148514,148523,148532,148536,148544,148548,148565,148582,148586,148603,148619,148623],{"__ignoreMap":68},[72,148381,148382,148384],{"class":74,"line":75},[72,148383,79],{"class":78},[72,148385,147381],{"class":82},[72,148387,148388,148390,148392,148394,148396,148398],{"class":74,"line":370},[72,148389,31155],{"class":78},[72,148391,147669],{"class":82},[72,148393,79],{"class":78},[72,148395,147674],{"class":82},[72,148397,31801],{"class":78},[72,148399,147679],{"class":82},[72,148401,148402,148404,148406,148408],{"class":74,"line":1608},[72,148403,31155],{"class":78},[72,148405,147528],{"class":82},[72,148407,79],{"class":78},[72,148409,147533],{"class":82},[72,148411,148412],{"class":74,"line":1623},[72,148413,2828],{"emptyLinePlaceholder":490},[72,148415,148416,148418,148420,148422,148425,148427,148429,148431,148433,148435,148437,148439,148441,148444],{"class":74,"line":1629},[72,148417,108233],{"class":78},[72,148419,147081],{"class":362},[72,148421,564],{"class":82},[72,148423,148424],{"class":366},"\"sales.json\"",[72,148426,12861],{"class":82},[72,148428,147091],{"class":366},[72,148430,12861],{"class":82},[72,148432,147096],{"class":5642},[72,148434,609],{"class":78},[72,148436,147101],{"class":366},[72,148438,14140],{"class":82},[72,148440,31801],{"class":78},[72,148442,148443],{"class":5642}," file",[72,148445,4167],{"class":82},[72,148447,148448,148450,148452,148455,148457],{"class":74,"line":1643},[72,148449,101827],{"class":82},[72,148451,609],{"class":78},[72,148453,148454],{"class":82}," json.load(",[72,148456,45772],{"class":5642},[72,148458,570],{"class":82},[72,148460,148461],{"class":74,"line":1649},[72,148462,2828],{"emptyLinePlaceholder":490},[72,148464,148465,148467,148469],{"class":74,"line":1740},[72,148466,148090],{"class":82},[72,148468,609],{"class":78},[72,148470,52256],{"class":82},[72,148472,148473,148476,148478],{"class":74,"line":1746},[72,148474,148475],{"class":82},"online_sales ",[72,148477,609],{"class":78},[72,148479,52256],{"class":82},[72,148481,148482,148485,148487],{"class":74,"line":1758},[72,148483,148484],{"class":82},"offline_sales ",[72,148486,609],{"class":78},[72,148488,52256],{"class":82},[72,148490,148491],{"class":74,"line":2041},[72,148492,2828],{"emptyLinePlaceholder":490},[72,148494,148495,148497,148500,148502],{"class":74,"line":2046},[72,148496,3453],{"class":78},[72,148498,148499],{"class":82}," item ",[72,148501,26465],{"class":78},[72,148503,148504],{"class":82}," data:\n",[72,148506,148507,148510,148512],{"class":74,"line":2052},[72,148508,148509],{"class":82},"    dates.append(item[",[72,148511,148287],{"class":366},[72,148513,5085],{"class":82},[72,148515,148516,148519,148521],{"class":74,"line":2057},[72,148517,148518],{"class":82},"    online_sales.append(item[",[72,148520,148296],{"class":366},[72,148522,5085],{"class":82},[72,148524,148525,148528,148530],{"class":74,"line":2071},[72,148526,148527],{"class":82},"    offline_sales.append(item[",[72,148529,148305],{"class":366},[72,148531,5085],{"class":82},[72,148533,148534],{"class":74,"line":2076},[72,148535,2828],{"emptyLinePlaceholder":490},[72,148537,148538,148540,148542],{"class":74,"line":2082},[72,148539,147542],{"class":82},[72,148541,609],{"class":78},[72,148543,147547],{"class":82},[72,148545,148546],{"class":74,"line":2103},[72,148547,148131],{"class":82},[72,148549,148550,148552,148554,148557,148559,148561,148563],{"class":74,"line":2108},[72,148551,147582],{"class":82},[72,148553,148138],{"class":366},[72,148555,148556],{"class":82},", online_sales, ",[72,148558,148035],{"class":5642},[72,148560,609],{"class":78},[72,148562,31894],{"class":362},[72,148564,570],{"class":82},[72,148566,148567,148569,148571,148574,148576,148578,148580],{"class":74,"line":2122},[72,148568,147582],{"class":82},[72,148570,148176],{"class":366},[72,148572,148573],{"class":82},", offline_sales, ",[72,148575,148035],{"class":5642},[72,148577,609],{"class":78},[72,148579,31894],{"class":362},[72,148581,570],{"class":82},[72,148583,148584],{"class":74,"line":2127},[72,148585,147758],{"class":82},[72,148587,148588,148590,148592,148594,148596,148598,148601],{"class":74,"line":2156},[72,148589,147763],{"class":5642},[72,148591,609],{"class":78},[72,148593,147768],{"class":82},[72,148595,51825],{"class":5642},[72,148597,609],{"class":78},[72,148599,148600],{"class":366},"\"销售趋势\"",[72,148602,38465],{"class":82},[72,148604,148605,148607,148609,148611,148613,148615,148617],{"class":74,"line":2161},[72,148606,147819],{"class":5642},[72,148608,609],{"class":78},[72,148610,147824],{"class":82},[72,148612,147827],{"class":5642},[72,148614,609],{"class":78},[72,148616,147832],{"class":366},[72,148618,38465],{"class":82},[72,148620,148621],{"class":74,"line":2178},[72,148622,570],{"class":82},[72,148624,148625,148627,148629],{"class":74,"line":2183},[72,148626,147614],{"class":82},[72,148628,148254],{"class":366},[72,148630,570],{"class":82},[85,148632,148634],{"id":148633},"_109-数据清洗","10.9 数据清洗",[15,148636,148637],{},"真实数据经常不整齐，需要清洗。",[15,148639,148640],{},"常见问题：",[22,148642,148643,148646,148649,148652],{},[25,148644,148645],{},"数字是字符串。",[25,148647,148648],{},"字段缺失。",[25,148650,148651],{},"空值。",[25,148653,148654],{},"日期格式不统一。",[15,148656,15561],{},[63,148658,148660],{"className":65,"code":148659,"language":67,"meta":68,"style":68},"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",[34,148661,148662,148671,148694,148714,148735,148739,148743,148751,148760,148764,148775,148789,148798,148803,148807,148815,148825,148829,148836],{"__ignoreMap":68},[72,148663,148664,148667,148669],{"class":74,"line":75},[72,148665,148666],{"class":82},"raw_data ",[72,148668,609],{"class":78},[72,148670,55865],{"class":82},[72,148672,148673,148676,148678,148680,148682,148684,148687,148689,148692],{"class":74,"line":370},[72,148674,148675],{"class":82},"    {",[72,148677,148287],{"class":366},[72,148679,51855],{"class":82},[72,148681,147555],{"class":366},[72,148683,12861],{"class":82},[72,148685,148686],{"class":366},"\"sales\"",[72,148688,51855],{"class":82},[72,148690,148691],{"class":366},"\"100\"",[72,148693,5358],{"class":82},[72,148695,148696,148698,148700,148702,148704,148706,148708,148710,148712],{"class":74,"line":1608},[72,148697,148675],{"class":82},[72,148699,148287],{"class":366},[72,148701,51855],{"class":82},[72,148703,147560],{"class":366},[72,148705,12861],{"class":82},[72,148707,148686],{"class":366},[72,148709,51855],{"class":82},[72,148711,8078],{"class":366},[72,148713,5358],{"class":82},[72,148715,148716,148718,148720,148722,148724,148726,148728,148730,148733],{"class":74,"line":1623},[72,148717,148675],{"class":82},[72,148719,148287],{"class":366},[72,148721,51855],{"class":82},[72,148723,147565],{"class":366},[72,148725,12861],{"class":82},[72,148727,148686],{"class":366},[72,148729,51855],{"class":82},[72,148731,148732],{"class":366},"\"120\"",[72,148734,5358],{"class":82},[72,148736,148737],{"class":74,"line":1629},[72,148738,33664],{"class":82},[72,148740,148741],{"class":74,"line":1643},[72,148742,2828],{"emptyLinePlaceholder":490},[72,148744,148745,148747,148749],{"class":74,"line":1649},[72,148746,148090],{"class":82},[72,148748,609],{"class":78},[72,148750,52256],{"class":82},[72,148752,148753,148756,148758],{"class":74,"line":1740},[72,148754,148755],{"class":82},"sales ",[72,148757,609],{"class":78},[72,148759,52256],{"class":82},[72,148761,148762],{"class":74,"line":1746},[72,148763,2828],{"emptyLinePlaceholder":490},[72,148765,148766,148768,148770,148772],{"class":74,"line":1758},[72,148767,3453],{"class":78},[72,148769,148499],{"class":82},[72,148771,26465],{"class":78},[72,148773,148774],{"class":82}," raw_data:\n",[72,148776,148777,148780,148782,148785,148787],{"class":74,"line":2041},[72,148778,148779],{"class":82},"    value ",[72,148781,609],{"class":78},[72,148783,148784],{"class":82}," item.get(",[72,148786,148686],{"class":366},[72,148788,570],{"class":82},[72,148790,148791,148793,148795],{"class":74,"line":2046},[72,148792,3529],{"class":78},[72,148794,39348],{"class":78},[72,148796,148797],{"class":82}," value:\n",[72,148799,148800],{"class":74,"line":2052},[72,148801,148802],{"class":78},"        continue\n",[72,148804,148805],{"class":74,"line":2057},[72,148806,2828],{"emptyLinePlaceholder":490},[72,148808,148809,148811,148813],{"class":74,"line":2071},[72,148810,148509],{"class":82},[72,148812,148287],{"class":366},[72,148814,5085],{"class":82},[72,148816,148817,148820,148822],{"class":74,"line":2076},[72,148818,148819],{"class":82},"    sales.append(",[72,148821,567],{"class":362},[72,148823,148824],{"class":82},"(value))\n",[72,148826,148827],{"class":74,"line":2082},[72,148828,2828],{"emptyLinePlaceholder":490},[72,148830,148831,148833],{"class":74,"line":2103},[72,148832,30833],{"class":362},[72,148834,148835],{"class":82},"(dates)\n",[72,148837,148838,148840],{"class":74,"line":2108},[72,148839,30833],{"class":362},[72,148841,148842],{"class":82},"(sales)\n",[85,148844,148846],{"id":148845},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[63,148848,148850],{"className":65,"code":148849,"language":67,"meta":68,"style":68},"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",[34,148851,148852,148866,148876,148880,148888,148909,148931,148953,148975,148997,149001,149005,149027,149048,149052,149060,149064,149068,149078,149087,149097,149113,149117,149121,149138,149154,149170,149186,149196,149200],{"__ignoreMap":68},[72,148853,148854,148856,148858,148860,148862,148864],{"class":74,"line":75},[72,148855,31155],{"class":78},[72,148857,147669],{"class":82},[72,148859,79],{"class":78},[72,148861,147674],{"class":82},[72,148863,31801],{"class":78},[72,148865,147679],{"class":82},[72,148867,148868,148870,148872,148874],{"class":74,"line":370},[72,148869,31155],{"class":78},[72,148871,147528],{"class":82},[72,148873,79],{"class":78},[72,148875,147533],{"class":82},[72,148877,148878],{"class":74,"line":1608},[72,148879,2828],{"emptyLinePlaceholder":490},[72,148881,148882,148884,148886],{"class":74,"line":1623},[72,148883,148755],{"class":82},[72,148885,609],{"class":78},[72,148887,55865],{"class":82},[72,148889,148890,148892,148894,148896,148899,148901,148903,148905,148907],{"class":74,"line":1629},[72,148891,148675],{"class":82},[72,148893,148287],{"class":366},[72,148895,51855],{"class":82},[72,148897,148898],{"class":366},"\"2024-10-01\"",[72,148900,12861],{"class":82},[72,148902,84501],{"class":366},[72,148904,51855],{"class":82},[72,148906,92440],{"class":362},[72,148908,5358],{"class":82},[72,148910,148911,148913,148915,148917,148920,148922,148924,148926,148929],{"class":74,"line":1643},[72,148912,148675],{"class":82},[72,148914,148287],{"class":366},[72,148916,51855],{"class":82},[72,148918,148919],{"class":366},"\"2024-10-02\"",[72,148921,12861],{"class":82},[72,148923,84501],{"class":366},[72,148925,51855],{"class":82},[72,148927,148928],{"class":362},"1800",[72,148930,5358],{"class":82},[72,148932,148933,148935,148937,148939,148942,148944,148946,148948,148951],{"class":74,"line":1649},[72,148934,148675],{"class":82},[72,148936,148287],{"class":366},[72,148938,51855],{"class":82},[72,148940,148941],{"class":366},"\"2024-10-03\"",[72,148943,12861],{"class":82},[72,148945,84501],{"class":366},[72,148947,51855],{"class":82},[72,148949,148950],{"class":362},"1500",[72,148952,5358],{"class":82},[72,148954,148955,148957,148959,148961,148964,148966,148968,148970,148973],{"class":74,"line":1740},[72,148956,148675],{"class":82},[72,148958,148287],{"class":366},[72,148960,51855],{"class":82},[72,148962,148963],{"class":366},"\"2024-10-04\"",[72,148965,12861],{"class":82},[72,148967,84501],{"class":366},[72,148969,51855],{"class":82},[72,148971,148972],{"class":362},"2100",[72,148974,5358],{"class":82},[72,148976,148977,148979,148981,148983,148986,148988,148990,148992,148995],{"class":74,"line":1746},[72,148978,148675],{"class":82},[72,148980,148287],{"class":366},[72,148982,51855],{"class":82},[72,148984,148985],{"class":366},"\"2024-10-05\"",[72,148987,12861],{"class":82},[72,148989,84501],{"class":366},[72,148991,51855],{"class":82},[72,148993,148994],{"class":362},"2600",[72,148996,5358],{"class":82},[72,148998,148999],{"class":74,"line":1758},[72,149000,33664],{"class":82},[72,149002,149003],{"class":74,"line":2041},[72,149004,2828],{"emptyLinePlaceholder":490},[72,149006,149007,149009,149011,149014,149016,149018,149020,149022,149024],{"class":74,"line":2046},[72,149008,148090],{"class":82},[72,149010,609],{"class":78},[72,149012,149013],{"class":82}," [item[",[72,149015,148287],{"class":366},[72,149017,4871],{"class":82},[72,149019,3453],{"class":78},[72,149021,148499],{"class":82},[72,149023,26465],{"class":78},[72,149025,149026],{"class":82}," sales]\n",[72,149028,149029,149032,149034,149036,149038,149040,149042,149044,149046],{"class":74,"line":2052},[72,149030,149031],{"class":82},"amounts ",[72,149033,609],{"class":78},[72,149035,149013],{"class":82},[72,149037,84501],{"class":366},[72,149039,4871],{"class":82},[72,149041,3453],{"class":78},[72,149043,148499],{"class":82},[72,149045,26465],{"class":78},[72,149047,149026],{"class":82},[72,149049,149050],{"class":74,"line":2057},[72,149051,2828],{"emptyLinePlaceholder":490},[72,149053,149054,149056,149058],{"class":74,"line":2071},[72,149055,147542],{"class":82},[72,149057,609],{"class":78},[72,149059,147547],{"class":82},[72,149061,149062],{"class":74,"line":2076},[72,149063,148131],{"class":82},[72,149065,149066],{"class":74,"line":2082},[72,149067,147939],{"class":82},[72,149069,149070,149072,149074,149076],{"class":74,"line":2103},[72,149071,147944],{"class":5642},[72,149073,609],{"class":78},[72,149075,147585],{"class":366},[72,149077,31884],{"class":82},[72,149079,149080,149082,149084],{"class":74,"line":2108},[72,149081,147955],{"class":5642},[72,149083,609],{"class":78},[72,149085,149086],{"class":82},"amounts,\n",[72,149088,149089,149091,149093,149095],{"class":74,"line":2122},[72,149090,147984],{"class":5642},[72,149092,609],{"class":78},[72,149094,31894],{"class":362},[72,149096,31884],{"class":82},[72,149098,149099,149101,149103,149105,149107,149109,149111],{"class":74,"line":2127},[72,149100,147995],{"class":5642},[72,149102,609],{"class":78},[72,149104,148000],{"class":82},[72,149106,148003],{"class":5642},[72,149108,609],{"class":78},[72,149110,31894],{"class":362},[72,149112,38465],{"class":82},[72,149114,149115],{"class":74,"line":2156},[72,149116,570],{"class":82},[72,149118,149119],{"class":74,"line":2161},[72,149120,147758],{"class":82},[72,149122,149123,149125,149127,149129,149131,149133,149136],{"class":74,"line":2178},[72,149124,147763],{"class":5642},[72,149126,609],{"class":78},[72,149128,147768],{"class":82},[72,149130,51825],{"class":5642},[72,149132,609],{"class":78},[72,149134,149135],{"class":366},"\"每日销售额\"",[72,149137,38465],{"class":82},[72,149139,149140,149142,149144,149146,149148,149150,149152],{"class":74,"line":2183},[72,149141,147782],{"class":5642},[72,149143,609],{"class":78},[72,149145,147787],{"class":82},[72,149147,80228],{"class":5642},[72,149149,609],{"class":78},[72,149151,147794],{"class":366},[72,149153,38465],{"class":82},[72,149155,149156,149158,149160,149162,149164,149166,149168],{"class":74,"line":2188},[72,149157,147801],{"class":5642},[72,149159,609],{"class":78},[72,149161,147787],{"class":82},[72,149163,80228],{"class":5642},[72,149165,609],{"class":78},[72,149167,147812],{"class":366},[72,149169,38465],{"class":82},[72,149171,149172,149174,149176,149178,149180,149182,149184],{"class":74,"line":2193},[72,149173,147819],{"class":5642},[72,149175,609],{"class":78},[72,149177,147824],{"class":82},[72,149179,147827],{"class":5642},[72,149181,609],{"class":78},[72,149183,147832],{"class":366},[72,149185,38465],{"class":82},[72,149187,149188,149191,149193],{"class":74,"line":2207},[72,149189,149190],{"class":5642},"    datazoom_opts",[72,149192,609],{"class":78},[72,149194,149195],{"class":82},"[opts.DataZoomOpts()],\n",[72,149197,149198],{"class":74,"line":2212},[72,149199,570],{"class":82},[72,149201,149202,149204,149207],{"class":74,"line":3005},[72,149203,147614],{"class":82},[72,149205,149206],{"class":366},"\"daily_sales.html\"",[72,149208,570],{"class":82},[15,149210,149211,149214],{},[34,149212,149213],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[85,149216,149218],{"id":149217},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[15,149220,149221],{},"如果数据结构如下：",[63,149223,149225],{"className":65,"code":149224,"language":67,"meta":68,"style":68},"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",[34,149226,149227,149235,149243,149265,149286,149291,149298,149318,149338,149342],{"__ignoreMap":68},[72,149228,149229,149231,149233],{"class":74,"line":75},[72,149230,102063],{"class":82},[72,149232,609],{"class":78},[72,149234,15998],{"class":82},[72,149236,149237,149240],{"class":74,"line":370},[72,149238,149239],{"class":366},"    \"北京\"",[72,149241,149242],{"class":82},": [\n",[72,149244,149245,149247,149249,149251,149254,149256,149259,149261,149263],{"class":74,"line":1608},[72,149246,5345],{"class":82},[72,149248,148287],{"class":366},[72,149250,51855],{"class":82},[72,149252,149253],{"class":366},"\"2024-01-01\"",[72,149255,12861],{"class":82},[72,149257,149258],{"class":366},"\"confirm\"",[72,149260,51855],{"class":82},[72,149262,1000],{"class":362},[72,149264,5358],{"class":82},[72,149266,149267,149269,149271,149273,149276,149278,149280,149282,149284],{"class":74,"line":1623},[72,149268,5345],{"class":82},[72,149270,148287],{"class":366},[72,149272,51855],{"class":82},[72,149274,149275],{"class":366},"\"2024-01-02\"",[72,149277,12861],{"class":82},[72,149279,149258],{"class":366},[72,149281,51855],{"class":82},[72,149283,1052],{"class":362},[72,149285,5358],{"class":82},[72,149287,149288],{"class":74,"line":1629},[72,149289,149290],{"class":82},"    ],\n",[72,149292,149293,149296],{"class":74,"line":1643},[72,149294,149295],{"class":366},"    \"上海\"",[72,149297,149242],{"class":82},[72,149299,149300,149302,149304,149306,149308,149310,149312,149314,149316],{"class":74,"line":1649},[72,149301,5345],{"class":82},[72,149303,148287],{"class":366},[72,149305,51855],{"class":82},[72,149307,149253],{"class":366},[72,149309,12861],{"class":82},[72,149311,149258],{"class":366},[72,149313,51855],{"class":82},[72,149315,949],{"class":362},[72,149317,5358],{"class":82},[72,149319,149320,149322,149324,149326,149328,149330,149332,149334,149336],{"class":74,"line":1740},[72,149321,5345],{"class":82},[72,149323,148287],{"class":366},[72,149325,51855],{"class":82},[72,149327,149275],{"class":366},[72,149329,12861],{"class":82},[72,149331,149258],{"class":366},[72,149333,51855],{"class":82},[72,149335,1077],{"class":362},[72,149337,5358],{"class":82},[72,149339,149340],{"class":74,"line":1746},[72,149341,149290],{"class":82},[72,149343,149344],{"class":74,"line":1758},[72,149345,1994],{"class":82},[15,149347,149348],{},"绘制多地区趋势：",[63,149350,149352],{"className":65,"code":149351,"language":67,"meta":68,"style":68},"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",[34,149353,149354,149368,149378,149382,149407,149411,149419,149423,149427,149439,149461,149474,149478,149482,149499,149515,149519],{"__ignoreMap":68},[72,149355,149356,149358,149360,149362,149364,149366],{"class":74,"line":75},[72,149357,31155],{"class":78},[72,149359,147669],{"class":82},[72,149361,79],{"class":78},[72,149363,147674],{"class":82},[72,149365,31801],{"class":78},[72,149367,147679],{"class":82},[72,149369,149370,149372,149374,149376],{"class":74,"line":370},[72,149371,31155],{"class":78},[72,149373,147528],{"class":82},[72,149375,79],{"class":78},[72,149377,147533],{"class":82},[72,149379,149380],{"class":74,"line":1608},[72,149381,2828],{"emptyLinePlaceholder":490},[72,149383,149384,149386,149388,149390,149392,149394,149396,149398,149400,149403,149405],{"class":74,"line":1623},[72,149385,148090],{"class":82},[72,149387,609],{"class":78},[72,149389,149013],{"class":82},[72,149391,148287],{"class":366},[72,149393,4871],{"class":82},[72,149395,3453],{"class":78},[72,149397,148499],{"class":82},[72,149399,26465],{"class":78},[72,149401,149402],{"class":82}," data[",[72,149404,69687],{"class":366},[72,149406,77945],{"class":82},[72,149408,149409],{"class":74,"line":1629},[72,149410,2828],{"emptyLinePlaceholder":490},[72,149412,149413,149415,149417],{"class":74,"line":1643},[72,149414,147542],{"class":82},[72,149416,609],{"class":78},[72,149418,147547],{"class":82},[72,149420,149421],{"class":74,"line":1649},[72,149422,148131],{"class":82},[72,149424,149425],{"class":74,"line":1740},[72,149426,2828],{"emptyLinePlaceholder":490},[72,149428,149429,149431,149434,149436],{"class":74,"line":1746},[72,149430,3453],{"class":78},[72,149432,149433],{"class":82}," city, records ",[72,149435,26465],{"class":78},[72,149437,149438],{"class":82}," data.items():\n",[72,149440,149441,149444,149446,149448,149450,149452,149454,149456,149458],{"class":74,"line":1758},[72,149442,149443],{"class":82},"    values ",[72,149445,609],{"class":78},[72,149447,149013],{"class":82},[72,149449,149258],{"class":366},[72,149451,4871],{"class":82},[72,149453,3453],{"class":78},[72,149455,148499],{"class":82},[72,149457,26465],{"class":78},[72,149459,149460],{"class":82}," records]\n",[72,149462,149463,149466,149468,149470,149472],{"class":74,"line":2041},[72,149464,149465],{"class":82},"    line.add_yaxis(city, values, ",[72,149467,148035],{"class":5642},[72,149469,609],{"class":78},[72,149471,31894],{"class":362},[72,149473,570],{"class":82},[72,149475,149476],{"class":74,"line":2046},[72,149477,2828],{"emptyLinePlaceholder":490},[72,149479,149480],{"class":74,"line":2052},[72,149481,147758],{"class":82},[72,149483,149484,149486,149488,149490,149492,149494,149497],{"class":74,"line":2057},[72,149485,147763],{"class":5642},[72,149487,609],{"class":78},[72,149489,147768],{"class":82},[72,149491,51825],{"class":5642},[72,149493,609],{"class":78},[72,149495,149496],{"class":366},"\"多地区趋势图\"",[72,149498,38465],{"class":82},[72,149500,149501,149503,149505,149507,149509,149511,149513],{"class":74,"line":2071},[72,149502,147819],{"class":5642},[72,149504,609],{"class":78},[72,149506,147824],{"class":82},[72,149508,147827],{"class":5642},[72,149510,609],{"class":78},[72,149512,147832],{"class":366},[72,149514,38465],{"class":82},[72,149516,149517],{"class":74,"line":2076},[72,149518,570],{"class":82},[72,149520,149521,149523,149526],{"class":74,"line":2082},[72,149522,147614],{"class":82},[72,149524,149525],{"class":366},"\"trend.html\"",[72,149527,570],{"class":82},[15,149529,149530],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[85,149532,149534],{"id":149533},"_1012-易错点","10.12 易错点",[22,149536,149537,149543,149549,149559,149565],{},[25,149538,149539,149542],{},[34,149540,149541],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[25,149544,149545,149548],{},[34,149546,149547],{},"render()"," 生成的是 HTML，不是图片。",[25,149550,149551,149552,149555,149556,28807],{},"JSON 字符串用 ",[34,149553,149554],{},"json.loads()","，JSON 文件用 ",[34,149557,149558],{},"json.load()",[25,149560,149561,149562,28807],{},"中文 JSON 保存时加 ",[34,149563,149564],{},"ensure_ascii=False",[25,149566,149567],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[85,149569,149571],{"id":149570},"_1013-本章练习","10.13 本章练习",[22,149573,149574,149577,149580,149583,149586],{},[25,149575,149576],{},"安装 pyecharts 并生成第一个折线图。",[25,149578,149579],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[25,149581,149582],{},"绘制两条折线，对比线上和线下销售额。",[25,149584,149585],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[25,149587,149588],{},"对含有空值的销售数据进行清洗后再绘图。",[473,149590,149591],{},"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":68,"searchDepth":370,"depth":370,"links":149593},[149594,149595,149596,149597,149598,149599,149600,149601,149602,149603,149604,149605,149606],{"id":147210,"depth":370,"text":147211},{"id":147285,"depth":370,"text":147286},{"id":147464,"depth":370,"text":147465},{"id":147515,"depth":370,"text":147516},{"id":147649,"depth":370,"text":147650},{"id":147925,"depth":370,"text":147926},{"id":148051,"depth":370,"text":148052},{"id":148262,"depth":370,"text":148263},{"id":148633,"depth":370,"text":148634},{"id":148845,"depth":370,"text":148846},{"id":149217,"depth":370,"text":149218},{"id":149533,"depth":370,"text":149534},{"id":149570,"depth":370,"text":149571},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":147202,"description":23802},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149613,"title":149614,"body":149615,"description":23802,"extension":487,"meta":151975,"navigation":490,"path":151976,"seo":151977,"stem":151978,"__hash__":151979},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149616,"toc":151952},[149617,149620,149624,149627,149630,149706,149709,149800,149803,149807,149810,149854,149867,149871,149874,149941,149944,149948,149951,150035,150043,150047,150052,150193,150196,150207,150213,150219,150333,150337,150340,150343,150596,150599,150603,150606,150710,150713,150717,150868,150872,150879,150992,150996,150999,151105,151108,151112,151115,151146,151149,151254,151257,151261,151265,151275,151343,151347,151354,151418,151421,151425,151431,151527,151536,151540,151864,151873,151877,151905,151909,151949],[10,149618,149614],{"id":149619},"_11-面向对象基础",[85,149621,149623],{"id":149622},"_111-什么是面向对象","11.1 什么是面向对象",[15,149625,149626],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[15,149628,149629],{},"面向过程：",[63,149631,149633],{"className":65,"code":149632,"language":67,"meta":68,"style":68},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[34,149634,149635,149644,149652,149656,149666,149697,149701],{"__ignoreMap":68},[72,149636,149637,149639,149641],{"class":74,"line":75},[72,149638,146826],{"class":82},[72,149640,609],{"class":78},[72,149642,149643],{"class":366}," \"小明\"\n",[72,149645,149646,149648,149650],{"class":74,"line":370},[72,149647,146836],{"class":82},[72,149649,609],{"class":78},[72,149651,146841],{"class":362},[72,149653,149654],{"class":74,"line":1608},[72,149655,2828],{"emptyLinePlaceholder":490},[72,149657,149658,149660,149663],{"class":74,"line":1623},[72,149659,32365],{"class":78},[72,149661,149662],{"class":358}," introduce",[72,149664,149665],{"class":82},"(name, age):\n",[72,149667,149668,149670,149672,149674,149677,149679,149681,149683,149686,149688,149690,149692,149695],{"class":74,"line":1629},[72,149669,31717],{"class":362},[72,149671,564],{"class":82},[72,149673,615],{"class":78},[72,149675,149676],{"class":366},"\"我叫",[72,149678,1450],{"class":362},[72,149680,80228],{"class":82},[72,149682,1500],{"class":362},[72,149684,149685],{"class":366},"，今年",[72,149687,1450],{"class":362},[72,149689,70639],{"class":82},[72,149691,1500],{"class":362},[72,149693,149694],{"class":366},"岁\"",[72,149696,570],{"class":82},[72,149698,149699],{"class":74,"line":1643},[72,149700,2828],{"emptyLinePlaceholder":490},[72,149702,149703],{"class":74,"line":1649},[72,149704,149705],{"class":82},"introduce(name, age)\n",[15,149707,149708],{},"面向对象：",[63,149710,149712],{"className":65,"code":149711,"language":67,"meta":68,"style":68},"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",[34,149713,149714,149722,149730,149759,149763,149767,149777,149786,149795],{"__ignoreMap":68},[72,149715,149716,149718,149720],{"class":74,"line":75},[72,149717,15120],{"class":78},[72,149719,8324],{"class":358},[72,149721,4167],{"class":82},[72,149723,149724,149726,149728],{"class":74,"line":370},[72,149725,31219],{"class":78},[72,149727,149662],{"class":358},[72,149729,31225],{"class":82},[72,149731,149732,149734,149736,149738,149740,149743,149745,149747,149749,149751,149753,149755,149757],{"class":74,"line":1608},[72,149733,32869],{"class":362},[72,149735,564],{"class":82},[72,149737,615],{"class":78},[72,149739,149676],{"class":366},[72,149741,149742],{"class":362},"{self",[72,149744,80719],{"class":82},[72,149746,1500],{"class":362},[72,149748,149685],{"class":366},[72,149750,149742],{"class":362},[72,149752,80731],{"class":82},[72,149754,1500],{"class":362},[72,149756,149694],{"class":366},[72,149758,570],{"class":82},[72,149760,149761],{"class":74,"line":1623},[72,149762,2828],{"emptyLinePlaceholder":490},[72,149764,149765],{"class":74,"line":1629},[72,149766,2828],{"emptyLinePlaceholder":490},[72,149768,149769,149772,149774],{"class":74,"line":1643},[72,149770,149771],{"class":82},"student ",[72,149773,609],{"class":78},[72,149775,149776],{"class":82}," Student()\n",[72,149778,149779,149782,149784],{"class":74,"line":1649},[72,149780,149781],{"class":82},"student.name ",[72,149783,609],{"class":78},[72,149785,149643],{"class":366},[72,149787,149788,149791,149793],{"class":74,"line":1740},[72,149789,149790],{"class":82},"student.age ",[72,149792,609],{"class":78},[72,149794,146841],{"class":362},[72,149796,149797],{"class":74,"line":1746},[72,149798,149799],{"class":82},"student.introduce()\n",[15,149801,149802],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[85,149804,149806],{"id":149805},"_112-类和对象","11.2 类和对象",[15,149808,149809],{},"类是模板，对象是根据模板创建出来的具体实例。",[63,149811,149813],{"className":65,"code":149812,"language":67,"meta":68,"style":68},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[34,149814,149815,149823,149828,149832,149836,149845],{"__ignoreMap":68},[72,149816,149817,149819,149821],{"class":74,"line":75},[72,149818,15120],{"class":78},[72,149820,8324],{"class":358},[72,149822,4167],{"class":82},[72,149824,149825],{"class":74,"line":370},[72,149826,149827],{"class":78},"    pass\n",[72,149829,149830],{"class":74,"line":1608},[72,149831,2828],{"emptyLinePlaceholder":490},[72,149833,149834],{"class":74,"line":1623},[72,149835,2828],{"emptyLinePlaceholder":490},[72,149837,149838,149841,149843],{"class":74,"line":1629},[72,149839,149840],{"class":82},"student1 ",[72,149842,609],{"class":78},[72,149844,149776],{"class":82},[72,149846,149847,149850,149852],{"class":74,"line":1643},[72,149848,149849],{"class":82},"student2 ",[72,149851,609],{"class":78},[72,149853,149776],{"class":82},[15,149855,149856,149859,149860,101432,149863,149866],{},[34,149857,149858],{},"Student"," 是类，",[34,149861,149862],{},"student1",[34,149864,149865],{},"student2"," 是对象。",[85,149868,149870],{"id":149869},"_113-属性","11.3 属性",[15,149872,149873],{},"属性是对象保存的数据。",[63,149875,149877],{"className":65,"code":149876,"language":67,"meta":68,"style":68},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[34,149878,149879,149887,149891,149895,149899,149907,149915,149923,149927,149934],{"__ignoreMap":68},[72,149880,149881,149883,149885],{"class":74,"line":75},[72,149882,15120],{"class":78},[72,149884,8324],{"class":358},[72,149886,4167],{"class":82},[72,149888,149889],{"class":74,"line":370},[72,149890,149827],{"class":78},[72,149892,149893],{"class":74,"line":1608},[72,149894,2828],{"emptyLinePlaceholder":490},[72,149896,149897],{"class":74,"line":1623},[72,149898,2828],{"emptyLinePlaceholder":490},[72,149900,149901,149903,149905],{"class":74,"line":1629},[72,149902,149771],{"class":82},[72,149904,609],{"class":78},[72,149906,149776],{"class":82},[72,149908,149909,149911,149913],{"class":74,"line":1643},[72,149910,149781],{"class":82},[72,149912,609],{"class":78},[72,149914,149643],{"class":366},[72,149916,149917,149919,149921],{"class":74,"line":1649},[72,149918,149790],{"class":82},[72,149920,609],{"class":78},[72,149922,146841],{"class":362},[72,149924,149925],{"class":74,"line":1740},[72,149926,2828],{"emptyLinePlaceholder":490},[72,149928,149929,149931],{"class":74,"line":1746},[72,149930,30833],{"class":362},[72,149932,149933],{"class":82},"(student.name)\n",[72,149935,149936,149938],{"class":74,"line":1758},[72,149937,30833],{"class":362},[72,149939,149940],{"class":82},"(student.age)\n",[15,149942,149943],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[85,149945,149947],{"id":149946},"_114-方法","11.4 方法",[15,149949,149950],{},"类中的函数叫方法。",[63,149952,149953],{"className":65,"code":149711,"language":67,"meta":68,"style":68},[34,149954,149955,149963,149971,149999,150003,150007,150015,150023,150031],{"__ignoreMap":68},[72,149956,149957,149959,149961],{"class":74,"line":75},[72,149958,15120],{"class":78},[72,149960,8324],{"class":358},[72,149962,4167],{"class":82},[72,149964,149965,149967,149969],{"class":74,"line":370},[72,149966,31219],{"class":78},[72,149968,149662],{"class":358},[72,149970,31225],{"class":82},[72,149972,149973,149975,149977,149979,149981,149983,149985,149987,149989,149991,149993,149995,149997],{"class":74,"line":1608},[72,149974,32869],{"class":362},[72,149976,564],{"class":82},[72,149978,615],{"class":78},[72,149980,149676],{"class":366},[72,149982,149742],{"class":362},[72,149984,80719],{"class":82},[72,149986,1500],{"class":362},[72,149988,149685],{"class":366},[72,149990,149742],{"class":362},[72,149992,80731],{"class":82},[72,149994,1500],{"class":362},[72,149996,149694],{"class":366},[72,149998,570],{"class":82},[72,150000,150001],{"class":74,"line":1623},[72,150002,2828],{"emptyLinePlaceholder":490},[72,150004,150005],{"class":74,"line":1629},[72,150006,2828],{"emptyLinePlaceholder":490},[72,150008,150009,150011,150013],{"class":74,"line":1643},[72,150010,149771],{"class":82},[72,150012,609],{"class":78},[72,150014,149776],{"class":82},[72,150016,150017,150019,150021],{"class":74,"line":1649},[72,150018,149781],{"class":82},[72,150020,609],{"class":78},[72,150022,149643],{"class":366},[72,150024,150025,150027,150029],{"class":74,"line":1740},[72,150026,149790],{"class":82},[72,150028,609],{"class":78},[72,150030,146841],{"class":362},[72,150032,150033],{"class":74,"line":1746},[72,150034,149799],{"class":82},[15,150036,150037,150039,150040,150042],{},[34,150038,31241],{}," 表示当前对象。调用方法时不需要手动传入 ",[34,150041,31241],{},"，Python 会自动传。",[85,150044,150046],{"id":150045},"_115-构造方法__init__","11.5 构造方法__init__",[15,150048,150049,150051],{},[34,150050,31247],{}," 在对象创建时自动执行，用于初始化属性。",[63,150053,150055],{"className":65,"code":150054,"language":67,"meta":68,"style":68},"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",[34,150056,150057,150065,150074,150086,150098,150109,150113,150121,150159,150163,150167,150189],{"__ignoreMap":68},[72,150058,150059,150061,150063],{"class":74,"line":75},[72,150060,15120],{"class":78},[72,150062,8324],{"class":358},[72,150064,4167],{"class":82},[72,150066,150067,150069,150071],{"class":74,"line":370},[72,150068,31219],{"class":78},[72,150070,31222],{"class":362},[72,150072,150073],{"class":82},"(self, name, age, score):\n",[72,150075,150076,150078,150081,150083],{"class":74,"line":1608},[72,150077,31263],{"class":362},[72,150079,150080],{"class":82},".name ",[72,150082,609],{"class":78},[72,150084,150085],{"class":82}," name\n",[72,150087,150088,150090,150093,150095],{"class":74,"line":1623},[72,150089,31263],{"class":362},[72,150091,150092],{"class":82},".age ",[72,150094,609],{"class":78},[72,150096,150097],{"class":82}," age\n",[72,150099,150100,150102,150105,150107],{"class":74,"line":1629},[72,150101,31263],{"class":362},[72,150103,150104],{"class":82},".score ",[72,150106,609],{"class":78},[72,150108,2008],{"class":82},[72,150110,150111],{"class":74,"line":1643},[72,150112,2828],{"emptyLinePlaceholder":490},[72,150114,150115,150117,150119],{"class":74,"line":1649},[72,150116,31219],{"class":78},[72,150118,149662],{"class":358},[72,150120,31225],{"class":82},[72,150122,150123,150125,150127,150129,150131,150133,150135,150137,150139,150141,150143,150145,150148,150150,150153,150155,150157],{"class":74,"line":1740},[72,150124,32869],{"class":362},[72,150126,564],{"class":82},[72,150128,615],{"class":78},[72,150130,149676],{"class":366},[72,150132,149742],{"class":362},[72,150134,80719],{"class":82},[72,150136,1500],{"class":362},[72,150138,149685],{"class":366},[72,150140,149742],{"class":362},[72,150142,80731],{"class":82},[72,150144,1500],{"class":362},[72,150146,150147],{"class":366},"岁，成绩",[72,150149,149742],{"class":362},[72,150151,150152],{"class":82},".score",[72,150154,1500],{"class":362},[72,150156,805],{"class":366},[72,150158,570],{"class":82},[72,150160,150161],{"class":74,"line":1746},[72,150162,2828],{"emptyLinePlaceholder":490},[72,150164,150165],{"class":74,"line":1758},[72,150166,2828],{"emptyLinePlaceholder":490},[72,150168,150169,150171,150173,150176,150179,150181,150183,150185,150187],{"class":74,"line":2041},[72,150170,149771],{"class":82},[72,150172,609],{"class":78},[72,150174,150175],{"class":82}," Student(",[72,150177,150178],{"class":366},"\"小明\"",[72,150180,12861],{"class":82},[72,150182,1204],{"class":362},[72,150184,12861],{"class":82},[72,150186,1543],{"class":362},[72,150188,570],{"class":82},[72,150190,150191],{"class":74,"line":2046},[72,150192,149799],{"class":82},[15,150194,150195],{},"构造方法的好处：",[22,150197,150198,150201,150204],{},[25,150199,150200],{},"创建对象时必须提供必要数据。",[25,150202,150203],{},"属性初始化集中，不容易漏。",[25,150205,150206],{},"对象状态更完整。",[85,150208,150210,150211],{"id":150209},"_116-str","11.6 ",[707,150212,1728],{},[15,150214,150215,150216,28807],{},"直接打印对象时，默认输出不直观。可以定义 ",[34,150217,150218],{},"__str__",[63,150220,150222],{"className":65,"code":150221,"language":67,"meta":68,"style":68},"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",[34,150223,150224,150232,150241,150251,150261,150265,150274,150302,150306,150310,150326],{"__ignoreMap":68},[72,150225,150226,150228,150230],{"class":74,"line":75},[72,150227,15120],{"class":78},[72,150229,8324],{"class":358},[72,150231,4167],{"class":82},[72,150233,150234,150236,150238],{"class":74,"line":370},[72,150235,31219],{"class":78},[72,150237,31222],{"class":362},[72,150239,150240],{"class":82},"(self, name, age):\n",[72,150242,150243,150245,150247,150249],{"class":74,"line":1608},[72,150244,31263],{"class":362},[72,150246,150080],{"class":82},[72,150248,609],{"class":78},[72,150250,150085],{"class":82},[72,150252,150253,150255,150257,150259],{"class":74,"line":1623},[72,150254,31263],{"class":362},[72,150256,150092],{"class":82},[72,150258,609],{"class":78},[72,150260,150097],{"class":82},[72,150262,150263],{"class":74,"line":1629},[72,150264,2828],{"emptyLinePlaceholder":490},[72,150266,150267,150269,150272],{"class":74,"line":1643},[72,150268,31219],{"class":78},[72,150270,150271],{"class":362}," __str__",[72,150273,31225],{"class":82},[72,150275,150276,150278,150281,150284,150286,150288,150290,150293,150295,150297,150299],{"class":74,"line":1649},[72,150277,15178],{"class":78},[72,150279,150280],{"class":78}," f",[72,150282,150283],{"class":366},"\"Student(name=",[72,150285,149742],{"class":362},[72,150287,80719],{"class":82},[72,150289,1500],{"class":362},[72,150291,150292],{"class":366},", age=",[72,150294,149742],{"class":362},[72,150296,80731],{"class":82},[72,150298,1500],{"class":362},[72,150300,150301],{"class":366},")\"\n",[72,150303,150304],{"class":74,"line":1740},[72,150305,2828],{"emptyLinePlaceholder":490},[72,150307,150308],{"class":74,"line":1746},[72,150309,2828],{"emptyLinePlaceholder":490},[72,150311,150312,150314,150316,150318,150320,150322,150324],{"class":74,"line":1758},[72,150313,149771],{"class":82},[72,150315,609],{"class":78},[72,150317,150175],{"class":82},[72,150319,150178],{"class":366},[72,150321,12861],{"class":82},[72,150323,1204],{"class":362},[72,150325,570],{"class":82},[72,150327,150328,150330],{"class":74,"line":2041},[72,150329,30833],{"class":362},[72,150331,150332],{"class":82},"(student)\n",[85,150334,150336],{"id":150335},"_117-封装","11.7 封装",[15,150338,150339],{},"封装就是把数据和方法放到类中，并控制访问方式。",[15,150341,150342],{},"Python 中以双下划线开头的属性通常视为私有属性。",[63,150344,150346],{"className":65,"code":150345,"language":67,"meta":68,"style":68},"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",[34,150347,150348,150357,150366,150378,150390,150394,150403,150412,150416,150426,150439,150450,150455,150466,150470,150479,150491,150502,150506,150519,150530,150534,150545,150549,150553,150571,150580,150589],{"__ignoreMap":68},[72,150349,150350,150352,150355],{"class":74,"line":75},[72,150351,15120],{"class":78},[72,150353,150354],{"class":358}," Account",[72,150356,4167],{"class":82},[72,150358,150359,150361,150363],{"class":74,"line":370},[72,150360,31219],{"class":78},[72,150362,31222],{"class":362},[72,150364,150365],{"class":82},"(self, owner, balance):\n",[72,150367,150368,150370,150373,150375],{"class":74,"line":1608},[72,150369,31263],{"class":362},[72,150371,150372],{"class":82},".owner ",[72,150374,609],{"class":78},[72,150376,150377],{"class":82}," owner\n",[72,150379,150380,150382,150385,150387],{"class":74,"line":1623},[72,150381,31263],{"class":362},[72,150383,150384],{"class":82},".__balance ",[72,150386,609],{"class":78},[72,150388,150389],{"class":82}," balance\n",[72,150391,150392],{"class":74,"line":1629},[72,150393,2828],{"emptyLinePlaceholder":490},[72,150395,150396,150398,150401],{"class":74,"line":1643},[72,150397,31219],{"class":78},[72,150399,150400],{"class":358}," get_balance",[72,150402,31225],{"class":82},[72,150404,150405,150407,150409],{"class":74,"line":1649},[72,150406,15178],{"class":78},[72,150408,39291],{"class":362},[72,150410,150411],{"class":82},".__balance\n",[72,150413,150414],{"class":74,"line":1740},[72,150415,2828],{"emptyLinePlaceholder":490},[72,150417,150418,150420,150423],{"class":74,"line":1746},[72,150419,31219],{"class":78},[72,150421,150422],{"class":358}," deposit",[72,150424,150425],{"class":82},"(self, money):\n",[72,150427,150428,150430,150433,150435,150437],{"class":74,"line":1758},[72,150429,2925],{"class":78},[72,150431,150432],{"class":82}," money ",[72,150434,2017],{"class":78},[72,150436,4521],{"class":362},[72,150438,4167],{"class":82},[72,150440,150441,150443,150445,150448],{"class":74,"line":2041},[72,150442,35068],{"class":362},[72,150444,564],{"class":82},[72,150446,150447],{"class":366},"\"存款金额必须大于0\"",[72,150449,570],{"class":82},[72,150451,150452],{"class":74,"line":2046},[72,150453,150454],{"class":78},"            return\n",[72,150456,150457,150459,150461,150463],{"class":74,"line":2052},[72,150458,31263],{"class":362},[72,150460,150384],{"class":82},[72,150462,9903],{"class":78},[72,150464,150465],{"class":82}," money\n",[72,150467,150468],{"class":74,"line":2057},[72,150469,2828],{"emptyLinePlaceholder":490},[72,150471,150472,150474,150477],{"class":74,"line":2071},[72,150473,31219],{"class":78},[72,150475,150476],{"class":358}," withdraw",[72,150478,150425],{"class":82},[72,150480,150481,150483,150485,150487,150489],{"class":74,"line":2076},[72,150482,2925],{"class":78},[72,150484,150432],{"class":82},[72,150486,2017],{"class":78},[72,150488,4521],{"class":362},[72,150490,4167],{"class":82},[72,150492,150493,150495,150497,150500],{"class":74,"line":2082},[72,150494,35068],{"class":362},[72,150496,564],{"class":82},[72,150498,150499],{"class":366},"\"取款金额必须大于0\"",[72,150501,570],{"class":82},[72,150503,150504],{"class":74,"line":2103},[72,150505,150454],{"class":78},[72,150507,150508,150510,150512,150514,150516],{"class":74,"line":2108},[72,150509,2925],{"class":78},[72,150511,150432],{"class":82},[72,150513,1514],{"class":78},[72,150515,39291],{"class":362},[72,150517,150518],{"class":82},".__balance:\n",[72,150520,150521,150523,150525,150528],{"class":74,"line":2122},[72,150522,35068],{"class":362},[72,150524,564],{"class":82},[72,150526,150527],{"class":366},"\"余额不足\"",[72,150529,570],{"class":82},[72,150531,150532],{"class":74,"line":2127},[72,150533,150454],{"class":78},[72,150535,150536,150538,150540,150543],{"class":74,"line":2156},[72,150537,31263],{"class":362},[72,150539,150384],{"class":82},[72,150541,150542],{"class":78},"-=",[72,150544,150465],{"class":82},[72,150546,150547],{"class":74,"line":2161},[72,150548,2828],{"emptyLinePlaceholder":490},[72,150550,150551],{"class":74,"line":2178},[72,150552,2828],{"emptyLinePlaceholder":490},[72,150554,150555,150558,150560,150563,150565,150567,150569],{"class":74,"line":2183},[72,150556,150557],{"class":82},"account ",[72,150559,609],{"class":78},[72,150561,150562],{"class":82}," Account(",[72,150564,150178],{"class":366},[72,150566,12861],{"class":82},[72,150568,6836],{"class":362},[72,150570,570],{"class":82},[72,150572,150573,150576,150578],{"class":74,"line":2188},[72,150574,150575],{"class":82},"account.deposit(",[72,150577,2151],{"class":362},[72,150579,570],{"class":82},[72,150581,150582,150585,150587],{"class":74,"line":2193},[72,150583,150584],{"class":82},"account.withdraw(",[72,150586,865],{"class":362},[72,150588,570],{"class":82},[72,150590,150591,150593],{"class":74,"line":2207},[72,150592,30833],{"class":362},[72,150594,150595],{"class":82},"(account.get_balance())\n",[15,150597,150598],{},"封装的意义是避免外部随意修改内部状态。",[85,150600,150602],{"id":150601},"_118-继承","11.8 继承",[15,150604,150605],{},"继承可以让子类复用父类的属性和方法。",[63,150607,150609],{"className":65,"code":150608,"language":67,"meta":68,"style":68},"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",[34,150610,150611,150620,150629,150640,150644,150648,150662,150671,150682,150686,150690,150700,150705],{"__ignoreMap":68},[72,150612,150613,150615,150618],{"class":74,"line":75},[72,150614,15120],{"class":78},[72,150616,150617],{"class":358}," Animal",[72,150619,4167],{"class":82},[72,150621,150622,150624,150627],{"class":74,"line":370},[72,150623,31219],{"class":78},[72,150625,150626],{"class":358}," eat",[72,150628,31225],{"class":82},[72,150630,150631,150633,150635,150638],{"class":74,"line":1608},[72,150632,32869],{"class":362},[72,150634,564],{"class":82},[72,150636,150637],{"class":366},"\"吃东西\"",[72,150639,570],{"class":82},[72,150641,150642],{"class":74,"line":1623},[72,150643,2828],{"emptyLinePlaceholder":490},[72,150645,150646],{"class":74,"line":1629},[72,150647,2828],{"emptyLinePlaceholder":490},[72,150649,150650,150652,150655,150657,150660],{"class":74,"line":1643},[72,150651,15120],{"class":78},[72,150653,150654],{"class":358}," Dog",[72,150656,564],{"class":82},[72,150658,150659],{"class":358},"Animal",[72,150661,31204],{"class":82},[72,150663,150664,150666,150669],{"class":74,"line":1649},[72,150665,31219],{"class":78},[72,150667,150668],{"class":358}," bark",[72,150670,31225],{"class":82},[72,150672,150673,150675,150677,150680],{"class":74,"line":1740},[72,150674,32869],{"class":362},[72,150676,564],{"class":82},[72,150678,150679],{"class":366},"\"汪汪\"",[72,150681,570],{"class":82},[72,150683,150684],{"class":74,"line":1746},[72,150685,2828],{"emptyLinePlaceholder":490},[72,150687,150688],{"class":74,"line":1758},[72,150689,2828],{"emptyLinePlaceholder":490},[72,150691,150692,150695,150697],{"class":74,"line":2041},[72,150693,150694],{"class":82},"dog ",[72,150696,609],{"class":78},[72,150698,150699],{"class":82}," Dog()\n",[72,150701,150702],{"class":74,"line":2046},[72,150703,150704],{"class":82},"dog.eat()\n",[72,150706,150707],{"class":74,"line":2052},[72,150708,150709],{"class":82},"dog.bark()\n",[15,150711,150712],{},"子类可以扩展新方法，也可以重写父类方法。",[85,150714,150716],{"id":150715},"_119-方法重写","11.9 方法重写",[63,150718,150720],{"className":65,"code":150719,"language":67,"meta":68,"style":68},"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",[34,150721,150722,150730,150739,150750,150754,150758,150770,150778,150788,150792,150796,150809,150817,150828,150832,150836,150844,150854,150858,150863],{"__ignoreMap":68},[72,150723,150724,150726,150728],{"class":74,"line":75},[72,150725,15120],{"class":78},[72,150727,150617],{"class":358},[72,150729,4167],{"class":82},[72,150731,150732,150734,150737],{"class":74,"line":370},[72,150733,31219],{"class":78},[72,150735,150736],{"class":358}," speak",[72,150738,31225],{"class":82},[72,150740,150741,150743,150745,150748],{"class":74,"line":1608},[72,150742,32869],{"class":362},[72,150744,564],{"class":82},[72,150746,150747],{"class":366},"\"动物叫\"",[72,150749,570],{"class":82},[72,150751,150752],{"class":74,"line":1623},[72,150753,2828],{"emptyLinePlaceholder":490},[72,150755,150756],{"class":74,"line":1629},[72,150757,2828],{"emptyLinePlaceholder":490},[72,150759,150760,150762,150764,150766,150768],{"class":74,"line":1643},[72,150761,15120],{"class":78},[72,150763,150654],{"class":358},[72,150765,564],{"class":82},[72,150767,150659],{"class":358},[72,150769,31204],{"class":82},[72,150771,150772,150774,150776],{"class":74,"line":1649},[72,150773,31219],{"class":78},[72,150775,150736],{"class":358},[72,150777,31225],{"class":82},[72,150779,150780,150782,150784,150786],{"class":74,"line":1740},[72,150781,32869],{"class":362},[72,150783,564],{"class":82},[72,150785,150679],{"class":366},[72,150787,570],{"class":82},[72,150789,150790],{"class":74,"line":1746},[72,150791,2828],{"emptyLinePlaceholder":490},[72,150793,150794],{"class":74,"line":1758},[72,150795,2828],{"emptyLinePlaceholder":490},[72,150797,150798,150800,150803,150805,150807],{"class":74,"line":2041},[72,150799,15120],{"class":78},[72,150801,150802],{"class":358}," Cat",[72,150804,564],{"class":82},[72,150806,150659],{"class":358},[72,150808,31204],{"class":82},[72,150810,150811,150813,150815],{"class":74,"line":2046},[72,150812,31219],{"class":78},[72,150814,150736],{"class":358},[72,150816,31225],{"class":82},[72,150818,150819,150821,150823,150826],{"class":74,"line":2052},[72,150820,32869],{"class":362},[72,150822,564],{"class":82},[72,150824,150825],{"class":366},"\"喵喵\"",[72,150827,570],{"class":82},[72,150829,150830],{"class":74,"line":2057},[72,150831,2828],{"emptyLinePlaceholder":490},[72,150833,150834],{"class":74,"line":2071},[72,150835,2828],{"emptyLinePlaceholder":490},[72,150837,150838,150840,150842],{"class":74,"line":2076},[72,150839,150694],{"class":82},[72,150841,609],{"class":78},[72,150843,150699],{"class":82},[72,150845,150846,150849,150851],{"class":74,"line":2082},[72,150847,150848],{"class":82},"cat ",[72,150850,609],{"class":78},[72,150852,150853],{"class":82}," Cat()\n",[72,150855,150856],{"class":74,"line":2103},[72,150857,2828],{"emptyLinePlaceholder":490},[72,150859,150860],{"class":74,"line":2108},[72,150861,150862],{"class":82},"dog.speak()\n",[72,150864,150865],{"class":74,"line":2122},[72,150866,150867],{"class":82},"cat.speak()\n",[85,150869,150871],{"id":150870},"_1110-super","11.10 super",[15,150873,150874,150875,150878],{},"子类可以通过 ",[34,150876,150877],{},"super()"," 调用父类方法。",[63,150880,150882],{"className":65,"code":150881,"language":67,"meta":68,"style":68},"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",[34,150883,150884,150892,150901,150911,150915,150919,150931,150940,150951,150961,150965,150969,150985],{"__ignoreMap":68},[72,150885,150886,150888,150890],{"class":74,"line":75},[72,150887,15120],{"class":78},[72,150889,15995],{"class":358},[72,150891,4167],{"class":82},[72,150893,150894,150896,150898],{"class":74,"line":370},[72,150895,31219],{"class":78},[72,150897,31222],{"class":362},[72,150899,150900],{"class":82},"(self, name):\n",[72,150902,150903,150905,150907,150909],{"class":74,"line":1608},[72,150904,31263],{"class":362},[72,150906,150080],{"class":82},[72,150908,609],{"class":78},[72,150910,150085],{"class":82},[72,150912,150913],{"class":74,"line":1623},[72,150914,2828],{"emptyLinePlaceholder":490},[72,150916,150917],{"class":74,"line":1629},[72,150918,2828],{"emptyLinePlaceholder":490},[72,150920,150921,150923,150925,150927,150929],{"class":74,"line":1643},[72,150922,15120],{"class":78},[72,150924,8324],{"class":358},[72,150926,564],{"class":82},[72,150928,19472],{"class":358},[72,150930,31204],{"class":82},[72,150932,150933,150935,150937],{"class":74,"line":1649},[72,150934,31219],{"class":78},[72,150936,31222],{"class":362},[72,150938,150939],{"class":82},"(self, name, score):\n",[72,150941,150942,150944,150946,150948],{"class":74,"line":1740},[72,150943,31235],{"class":362},[72,150945,17687],{"class":82},[72,150947,31247],{"class":362},[72,150949,150950],{"class":82},"(name)\n",[72,150952,150953,150955,150957,150959],{"class":74,"line":1746},[72,150954,31263],{"class":362},[72,150956,150104],{"class":82},[72,150958,609],{"class":78},[72,150960,2008],{"class":82},[72,150962,150963],{"class":74,"line":1758},[72,150964,2828],{"emptyLinePlaceholder":490},[72,150966,150967],{"class":74,"line":2041},[72,150968,2828],{"emptyLinePlaceholder":490},[72,150970,150971,150973,150975,150977,150979,150981,150983],{"class":74,"line":2046},[72,150972,149771],{"class":82},[72,150974,609],{"class":78},[72,150976,150175],{"class":82},[72,150978,150178],{"class":366},[72,150980,12861],{"class":82},[72,150982,1543],{"class":362},[72,150984,570],{"class":82},[72,150986,150987,150989],{"class":74,"line":2052},[72,150988,30833],{"class":362},[72,150990,150991],{"class":82},"(student.name, student.score)\n",[85,150993,150995],{"id":150994},"_1111-多态","11.11 多态",[15,150997,150998],{},"多态指不同对象响应同一个方法，表现出不同结果。",[63,151000,151002],{"className":65,"code":151001,"language":67,"meta":68,"style":68},"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",[34,151003,151004,151012,151020,151030,151034,151038,151046,151054,151064,151068,151072,151082,151087,151091,151095,151100],{"__ignoreMap":68},[72,151005,151006,151008,151010],{"class":74,"line":75},[72,151007,15120],{"class":78},[72,151009,150654],{"class":358},[72,151011,4167],{"class":82},[72,151013,151014,151016,151018],{"class":74,"line":370},[72,151015,31219],{"class":78},[72,151017,150736],{"class":358},[72,151019,31225],{"class":82},[72,151021,151022,151024,151026,151028],{"class":74,"line":1608},[72,151023,32869],{"class":362},[72,151025,564],{"class":82},[72,151027,150679],{"class":366},[72,151029,570],{"class":82},[72,151031,151032],{"class":74,"line":1623},[72,151033,2828],{"emptyLinePlaceholder":490},[72,151035,151036],{"class":74,"line":1629},[72,151037,2828],{"emptyLinePlaceholder":490},[72,151039,151040,151042,151044],{"class":74,"line":1643},[72,151041,15120],{"class":78},[72,151043,150802],{"class":358},[72,151045,4167],{"class":82},[72,151047,151048,151050,151052],{"class":74,"line":1649},[72,151049,31219],{"class":78},[72,151051,150736],{"class":358},[72,151053,31225],{"class":82},[72,151055,151056,151058,151060,151062],{"class":74,"line":1740},[72,151057,32869],{"class":362},[72,151059,564],{"class":82},[72,151061,150825],{"class":366},[72,151063,570],{"class":82},[72,151065,151066],{"class":74,"line":1746},[72,151067,2828],{"emptyLinePlaceholder":490},[72,151069,151070],{"class":74,"line":1758},[72,151071,2828],{"emptyLinePlaceholder":490},[72,151073,151074,151076,151079],{"class":74,"line":2041},[72,151075,32365],{"class":78},[72,151077,151078],{"class":358}," make_sound",[72,151080,151081],{"class":82},"(animal):\n",[72,151083,151084],{"class":74,"line":2046},[72,151085,151086],{"class":82},"    animal.speak()\n",[72,151088,151089],{"class":74,"line":2052},[72,151090,2828],{"emptyLinePlaceholder":490},[72,151092,151093],{"class":74,"line":2057},[72,151094,2828],{"emptyLinePlaceholder":490},[72,151096,151097],{"class":74,"line":2071},[72,151098,151099],{"class":82},"make_sound(Dog())\n",[72,151101,151102],{"class":74,"line":2076},[72,151103,151104],{"class":82},"make_sound(Cat())\n",[15,151106,151107],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[85,151109,151111],{"id":151110},"_1112-类属性和实例属性","11.12 类属性和实例属性",[15,151113,151114],{},"实例属性属于对象：",[63,151116,151118],{"className":65,"code":151117,"language":67,"meta":68,"style":68},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[34,151119,151120,151128,151136],{"__ignoreMap":68},[72,151121,151122,151124,151126],{"class":74,"line":75},[72,151123,15120],{"class":78},[72,151125,8324],{"class":358},[72,151127,4167],{"class":82},[72,151129,151130,151132,151134],{"class":74,"line":370},[72,151131,31219],{"class":78},[72,151133,31222],{"class":362},[72,151135,150900],{"class":82},[72,151137,151138,151140,151142,151144],{"class":74,"line":1608},[72,151139,31263],{"class":362},[72,151141,150080],{"class":82},[72,151143,609],{"class":78},[72,151145,150085],{"class":82},[15,151147,151148],{},"类属性属于类，所有对象共享：",[63,151150,151152],{"className":65,"code":151151,"language":67,"meta":68,"style":68},"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",[34,151153,151154,151162,151172,151176,151184,151194,151198,151202,151215,151229,151233,151240,151247],{"__ignoreMap":68},[72,151155,151156,151158,151160],{"class":74,"line":75},[72,151157,15120],{"class":78},[72,151159,8324],{"class":358},[72,151161,4167],{"class":82},[72,151163,151164,151167,151169],{"class":74,"line":370},[72,151165,151166],{"class":82},"    school ",[72,151168,609],{"class":78},[72,151170,151171],{"class":366}," \"黑马学校\"\n",[72,151173,151174],{"class":74,"line":1608},[72,151175,2828],{"emptyLinePlaceholder":490},[72,151177,151178,151180,151182],{"class":74,"line":1623},[72,151179,31219],{"class":78},[72,151181,31222],{"class":362},[72,151183,150900],{"class":82},[72,151185,151186,151188,151190,151192],{"class":74,"line":1629},[72,151187,31263],{"class":362},[72,151189,150080],{"class":82},[72,151191,609],{"class":78},[72,151193,150085],{"class":82},[72,151195,151196],{"class":74,"line":1643},[72,151197,2828],{"emptyLinePlaceholder":490},[72,151199,151200],{"class":74,"line":1649},[72,151201,2828],{"emptyLinePlaceholder":490},[72,151203,151204,151207,151209,151211,151213],{"class":74,"line":1740},[72,151205,151206],{"class":82},"s1 ",[72,151208,609],{"class":78},[72,151210,150175],{"class":82},[72,151212,150178],{"class":366},[72,151214,570],{"class":82},[72,151216,151217,151220,151222,151224,151227],{"class":74,"line":1746},[72,151218,151219],{"class":82},"s2 ",[72,151221,609],{"class":78},[72,151223,150175],{"class":82},[72,151225,151226],{"class":366},"\"小红\"",[72,151228,570],{"class":82},[72,151230,151231],{"class":74,"line":1758},[72,151232,2828],{"emptyLinePlaceholder":490},[72,151234,151235,151237],{"class":74,"line":2041},[72,151236,30833],{"class":362},[72,151238,151239],{"class":82},"(s1.school)\n",[72,151241,151242,151244],{"class":74,"line":2046},[72,151243,30833],{"class":362},[72,151245,151246],{"class":82},"(s2.school)\n",[72,151248,151249,151251],{"class":74,"line":2052},[72,151250,30833],{"class":362},[72,151252,151253],{"class":82},"(Student.school)\n",[15,151255,151256],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[85,151258,151260],{"id":151259},"_1113-类方法和静态方法","11.13 类方法和静态方法",[531,151262,151264],{"id":151263},"_11131-类方法","11.13.1 类方法",[15,151266,151267,151268,151271,151272,28807],{},"类方法使用 ",[34,151269,151270],{},"@classmethod","，第一个参数通常是 ",[34,151273,151274],{},"cls",[63,151276,151278],{"className":65,"code":151277,"language":67,"meta":68,"style":68},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[34,151279,151280,151288,151296,151300,151308,151318,151328,151332,151336],{"__ignoreMap":68},[72,151281,151282,151284,151286],{"class":74,"line":75},[72,151283,15120],{"class":78},[72,151285,8324],{"class":358},[72,151287,4167],{"class":82},[72,151289,151290,151292,151294],{"class":74,"line":370},[72,151291,151166],{"class":82},[72,151293,609],{"class":78},[72,151295,151171],{"class":366},[72,151297,151298],{"class":74,"line":1608},[72,151299,2828],{"emptyLinePlaceholder":490},[72,151301,151302,151305],{"class":74,"line":1623},[72,151303,151304],{"class":358},"    @",[72,151306,151307],{"class":362},"classmethod\n",[72,151309,151310,151312,151315],{"class":74,"line":1629},[72,151311,31219],{"class":78},[72,151313,151314],{"class":358}," get_school",[72,151316,151317],{"class":82},"(cls):\n",[72,151319,151320,151322,151325],{"class":74,"line":1643},[72,151321,15178],{"class":78},[72,151323,151324],{"class":362}," cls",[72,151326,151327],{"class":82},".school\n",[72,151329,151330],{"class":74,"line":1649},[72,151331,2828],{"emptyLinePlaceholder":490},[72,151333,151334],{"class":74,"line":1740},[72,151335,2828],{"emptyLinePlaceholder":490},[72,151337,151338,151340],{"class":74,"line":1746},[72,151339,30833],{"class":362},[72,151341,151342],{"class":82},"(Student.get_school())\n",[531,151344,151346],{"id":151345},"_11132-静态方法","11.13.2 静态方法",[15,151348,151349,151350,151353],{},"静态方法使用 ",[34,151351,151352],{},"@staticmethod","，不需要访问实例和类。",[63,151355,151357],{"className":65,"code":151356,"language":67,"meta":68,"style":68},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[34,151358,151359,151368,151375,151384,151395,151399,151403],{"__ignoreMap":68},[72,151360,151361,151363,151366],{"class":74,"line":75},[72,151362,15120],{"class":78},[72,151364,151365],{"class":358}," MathUtils",[72,151367,4167],{"class":82},[72,151369,151370,151372],{"class":74,"line":370},[72,151371,151304],{"class":358},[72,151373,151374],{"class":362},"staticmethod\n",[72,151376,151377,151379,151381],{"class":74,"line":1608},[72,151378,31219],{"class":78},[72,151380,5635],{"class":358},[72,151382,151383],{"class":82},"(a, b):\n",[72,151385,151386,151388,151390,151392],{"class":74,"line":1623},[72,151387,15178],{"class":78},[72,151389,11295],{"class":82},[72,151391,1035],{"class":78},[72,151393,151394],{"class":82}," b\n",[72,151396,151397],{"class":74,"line":1629},[72,151398,2828],{"emptyLinePlaceholder":490},[72,151400,151401],{"class":74,"line":1643},[72,151402,2828],{"emptyLinePlaceholder":490},[72,151404,151405,151407,151410,151412,151414,151416],{"class":74,"line":1649},[72,151406,30833],{"class":362},[72,151408,151409],{"class":82},"(MathUtils.add(",[72,151411,772],{"class":362},[72,151413,12861],{"class":82},[72,151415,640],{"class":362},[72,151417,30915],{"class":82},[15,151419,151420],{},"静态方法本质上是放在类命名空间里的普通函数。",[85,151422,151424],{"id":151423},"_1114-dataclass","11.14 dataclass",[15,151426,151427,151430],{},[34,151428,151429],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[63,151432,151434],{"className":65,"code":151433,"language":67,"meta":68,"style":68},"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",[34,151435,151436,151448,151452,151456,151461,151469,151477,151485,151493,151497,151501,151521],{"__ignoreMap":68},[72,151437,151438,151440,151443,151445],{"class":74,"line":75},[72,151439,31155],{"class":78},[72,151441,151442],{"class":82}," dataclasses ",[72,151444,79],{"class":78},[72,151446,151447],{"class":82}," dataclass\n",[72,151449,151450],{"class":74,"line":370},[72,151451,2828],{"emptyLinePlaceholder":490},[72,151453,151454],{"class":74,"line":1608},[72,151455,2828],{"emptyLinePlaceholder":490},[72,151457,151458],{"class":74,"line":1623},[72,151459,151460],{"class":358},"@dataclass\n",[72,151462,151463,151465,151467],{"class":74,"line":1629},[72,151464,15120],{"class":78},[72,151466,8324],{"class":358},[72,151468,4167],{"class":82},[72,151470,151471,151474],{"class":74,"line":1643},[72,151472,151473],{"class":82},"    name: ",[72,151475,151476],{"class":362},"str\n",[72,151478,151479,151482],{"class":74,"line":1649},[72,151480,151481],{"class":82},"    age: ",[72,151483,151484],{"class":362},"int\n",[72,151486,151487,151490],{"class":74,"line":1740},[72,151488,151489],{"class":82},"    score: ",[72,151491,151492],{"class":362},"float\n",[72,151494,151495],{"class":74,"line":1746},[72,151496,2828],{"emptyLinePlaceholder":490},[72,151498,151499],{"class":74,"line":1758},[72,151500,2828],{"emptyLinePlaceholder":490},[72,151502,151503,151505,151507,151509,151511,151513,151515,151517,151519],{"class":74,"line":2041},[72,151504,149771],{"class":82},[72,151506,609],{"class":78},[72,151508,150175],{"class":82},[72,151510,150178],{"class":366},[72,151512,12861],{"class":82},[72,151514,1204],{"class":362},[72,151516,12861],{"class":82},[72,151518,1543],{"class":362},[72,151520,570],{"class":82},[72,151522,151523,151525],{"class":74,"line":2046},[72,151524,30833],{"class":362},[72,151526,150332],{"class":82},[15,151528,151529,151530,37,151532,151535],{},"它会自动生成 ",[34,151531,31247],{},[34,151533,151534],{},"__repr__"," 等方法。适合数据模型类。",[85,151537,151539],{"id":151538},"_1115-小案例学生类","11.15 小案例：学生类",[63,151541,151543],{"className":65,"code":151542,"language":67,"meta":68,"style":68},"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",[34,151544,151545,151553,151562,151574,151584,151594,151604,151608,151617,151630,151634,151643,151649,151661,151673,151685,151697,151701,151705,151711,151721,151730,151740,151748,151756,151765,151769,151773,151781,151817,151821,151825,151850,151857],{"__ignoreMap":68},[72,151546,151547,151549,151551],{"class":74,"line":75},[72,151548,15120],{"class":78},[72,151550,8324],{"class":358},[72,151552,4167],{"class":82},[72,151554,151555,151557,151559],{"class":74,"line":370},[72,151556,31219],{"class":78},[72,151558,31222],{"class":362},[72,151560,151561],{"class":82},"(self, student_id, name, age, score):\n",[72,151563,151564,151566,151569,151571],{"class":74,"line":1608},[72,151565,31263],{"class":362},[72,151567,151568],{"class":82},".student_id ",[72,151570,609],{"class":78},[72,151572,151573],{"class":82}," student_id\n",[72,151575,151576,151578,151580,151582],{"class":74,"line":1623},[72,151577,31263],{"class":362},[72,151579,150080],{"class":82},[72,151581,609],{"class":78},[72,151583,150085],{"class":82},[72,151585,151586,151588,151590,151592],{"class":74,"line":1629},[72,151587,31263],{"class":362},[72,151589,150092],{"class":82},[72,151591,609],{"class":78},[72,151593,150097],{"class":82},[72,151595,151596,151598,151600,151602],{"class":74,"line":1643},[72,151597,31263],{"class":362},[72,151599,150104],{"class":82},[72,151601,609],{"class":78},[72,151603,2008],{"class":82},[72,151605,151606],{"class":74,"line":1649},[72,151607,2828],{"emptyLinePlaceholder":490},[72,151609,151610,151612,151615],{"class":74,"line":1740},[72,151611,31219],{"class":78},[72,151613,151614],{"class":358}," is_passed",[72,151616,31225],{"class":82},[72,151618,151619,151621,151623,151625,151627],{"class":74,"line":1746},[72,151620,15178],{"class":78},[72,151622,39291],{"class":362},[72,151624,150104],{"class":82},[72,151626,2139],{"class":78},[72,151628,151629],{"class":362}," 60\n",[72,151631,151632],{"class":74,"line":1758},[72,151633,2828],{"emptyLinePlaceholder":490},[72,151635,151636,151638,151641],{"class":74,"line":2041},[72,151637,31219],{"class":78},[72,151639,151640],{"class":358}," to_dict",[72,151642,31225],{"class":82},[72,151644,151645,151647],{"class":74,"line":2046},[72,151646,15178],{"class":78},[72,151648,15998],{"class":82},[72,151650,151651,151654,151656,151658],{"class":74,"line":2052},[72,151652,151653],{"class":366},"            \"student_id\"",[72,151655,51855],{"class":82},[72,151657,31241],{"class":362},[72,151659,151660],{"class":82},".student_id,\n",[72,151662,151663,151666,151668,151670],{"class":74,"line":2057},[72,151664,151665],{"class":366},"            \"name\"",[72,151667,51855],{"class":82},[72,151669,31241],{"class":362},[72,151671,151672],{"class":82},".name,\n",[72,151674,151675,151678,151680,151682],{"class":74,"line":2071},[72,151676,151677],{"class":366},"            \"age\"",[72,151679,51855],{"class":82},[72,151681,31241],{"class":362},[72,151683,151684],{"class":82},".age,\n",[72,151686,151687,151690,151692,151694],{"class":74,"line":2076},[72,151688,151689],{"class":366},"            \"score\"",[72,151691,51855],{"class":82},[72,151693,31241],{"class":362},[72,151695,151696],{"class":82},".score,\n",[72,151698,151699],{"class":74,"line":2082},[72,151700,2957],{"class":82},[72,151702,151703],{"class":74,"line":2103},[72,151704,2828],{"emptyLinePlaceholder":490},[72,151706,151707,151709],{"class":74,"line":2108},[72,151708,151304],{"class":358},[72,151710,151307],{"class":362},[72,151712,151713,151715,151718],{"class":74,"line":2122},[72,151714,31219],{"class":78},[72,151716,151717],{"class":358}," from_dict",[72,151719,151720],{"class":82},"(cls, data):\n",[72,151722,151723,151725,151727],{"class":74,"line":2127},[72,151724,15178],{"class":78},[72,151726,151324],{"class":362},[72,151728,151729],{"class":82},"(\n",[72,151731,151732,151735,151738],{"class":74,"line":2156},[72,151733,151734],{"class":82},"            data[",[72,151736,151737],{"class":366},"\"student_id\"",[72,151739,88253],{"class":82},[72,151741,151742,151744,151746],{"class":74,"line":2161},[72,151743,151734],{"class":82},[72,151745,63097],{"class":366},[72,151747,88253],{"class":82},[72,151749,151750,151752,151754],{"class":74,"line":2178},[72,151751,151734],{"class":82},[72,151753,69542],{"class":366},[72,151755,88253],{"class":82},[72,151757,151758,151760,151763],{"class":74,"line":2183},[72,151759,151734],{"class":82},[72,151761,151762],{"class":366},"\"score\"",[72,151764,88253],{"class":82},[72,151766,151767],{"class":74,"line":2188},[72,151768,38544],{"class":82},[72,151770,151771],{"class":74,"line":2193},[72,151772,2828],{"emptyLinePlaceholder":490},[72,151774,151775,151777,151779],{"class":74,"line":2207},[72,151776,31219],{"class":78},[72,151778,150271],{"class":362},[72,151780,31225],{"class":82},[72,151782,151783,151785,151787,151789,151791,151794,151796,151799,151801,151803,151805,151807,151809,151811,151813,151815],{"class":74,"line":2212},[72,151784,15178],{"class":78},[72,151786,150280],{"class":78},[72,151788,805],{"class":366},[72,151790,149742],{"class":362},[72,151792,151793],{"class":82},".student_id",[72,151795,1500],{"class":362},[72,151797,151798],{"class":362}," {self",[72,151800,80719],{"class":82},[72,151802,1500],{"class":362},[72,151804,151798],{"class":362},[72,151806,80731],{"class":82},[72,151808,1500],{"class":362},[72,151810,151798],{"class":362},[72,151812,150152],{"class":82},[72,151814,1500],{"class":362},[72,151816,25555],{"class":366},[72,151818,151819],{"class":74,"line":3005},[72,151820,2828],{"emptyLinePlaceholder":490},[72,151822,151823],{"class":74,"line":3019},[72,151824,2828],{"emptyLinePlaceholder":490},[72,151826,151827,151829,151831,151833,151836,151838,151840,151842,151844,151846,151848],{"class":74,"line":3027},[72,151828,149771],{"class":82},[72,151830,609],{"class":78},[72,151832,150175],{"class":82},[72,151834,151835],{"class":366},"\"001\"",[72,151837,12861],{"class":82},[72,151839,150178],{"class":366},[72,151841,12861],{"class":82},[72,151843,1204],{"class":362},[72,151845,12861],{"class":82},[72,151847,1543],{"class":362},[72,151849,570],{"class":82},[72,151851,151852,151854],{"class":74,"line":3032},[72,151853,30833],{"class":362},[72,151855,151856],{"class":82},"(student.is_passed())\n",[72,151858,151859,151861],{"class":74,"line":3038},[72,151860,30833],{"class":362},[72,151862,151863],{"class":82},"(student.to_dict())\n",[15,151865,151866,101432,151869,151872],{},[34,151867,151868],{},"to_dict()",[34,151870,151871],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[85,151874,151876],{"id":151875},"_1116-易错点","11.16 易错点",[22,151878,151879,151885,151891,151896,151899,151902],{},[25,151880,151881,151882,28807],{},"类名推荐使用大驼峰，如 ",[34,151883,151884],{},"StudentManager",[25,151886,151887,151888,151890],{},"方法第一个参数必须写 ",[34,151889,31241],{},"，调用时不用传。",[25,151892,151893,151895],{},[34,151894,31247],{}," 不是普通方法，它在创建对象时自动执行。",[25,151897,151898],{},"私有属性不是绝对安全，只是约定和名称改写。",[25,151900,151901],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[25,151903,151904],{},"类中方法太多时，说明职责可能过重。",[85,151906,151908],{"id":151907},"_1117-本章练习","11.17 本章练习",[22,151910,151911,151917,151923,151928,151941],{},[25,151912,151913,151914,151916],{},"定义 ",[34,151915,149858],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[25,151918,151913,151919,151922],{},[34,151920,151921],{},"Account"," 类，实现存款、取款、查询余额。",[25,151924,151913,151925,151927],{},[34,151926,17652],{}," 类，计算圆的周长和面积。",[25,151929,151913,151930,37,151933,151936,151937,151940],{},[34,151931,151932],{},"Dog",[34,151934,151935],{},"Cat"," 类，并用同一个函数调用它们的 ",[34,151938,151939],{},"speak()"," 方法。",[25,151942,104767,151943,151945,151946,28807],{},[34,151944,151429],{}," 定义一个商品类 ",[34,151947,151948],{},"Product",[473,151950,151951],{},"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":68,"searchDepth":370,"depth":370,"links":151953},[151954,151955,151956,151957,151958,151959,151961,151962,151963,151964,151965,151966,151967,151971,151972,151973,151974],{"id":149622,"depth":370,"text":149623},{"id":149805,"depth":370,"text":149806},{"id":149869,"depth":370,"text":149870},{"id":149946,"depth":370,"text":149947},{"id":150045,"depth":370,"text":150046},{"id":150209,"depth":370,"text":151960},"11.6 str",{"id":150335,"depth":370,"text":150336},{"id":150601,"depth":370,"text":150602},{"id":150715,"depth":370,"text":150716},{"id":150870,"depth":370,"text":150871},{"id":150994,"depth":370,"text":150995},{"id":151110,"depth":370,"text":151111},{"id":151259,"depth":370,"text":151260,"children":151968},[151969,151970],{"id":151263,"depth":1608,"text":151264},{"id":151345,"depth":1608,"text":151346},{"id":151423,"depth":370,"text":151424},{"id":151538,"depth":370,"text":151539},{"id":151875,"depth":370,"text":151876},{"id":151907,"depth":370,"text":151908},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149614,"description":23802},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":151981,"title":151982,"body":151983,"description":23802,"extension":487,"meta":155296,"navigation":490,"path":155297,"seo":155298,"stem":155299,"__hash__":155300},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":151984,"toc":155272},[151985,151988,151992,151995,151998,152027,152030,152038,152042,152046,152049,152072,152075,152081,152085,153531,153534,153555,153559,153562,153574,153577,153761,153764,153890,153893,153897,153901,154037,154041,154127,154131,154213,154217,154254,154258,154447,154451,154454,154684,154688,154691,154872,154875,154879,154882,154888,154891,154917,154921,154924,154938,154941,154966,154969,154983,154986,155003,155006,155023,155026,155043,155047,155073,155077,155100,155104,155107,155109,155115,155117,155138,155141,155147,155153,155157,155160,155236,155239,155243,155269],[10,151986,151982],{"id":151987},"_12-综合案例与复习路线",[85,151989,151991],{"id":151990},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[15,151993,151994],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[15,151996,151997],{},"一个合格的入门综合项目最好覆盖：",[22,151999,152000,152003,152006,152009,152012,152015,152018,152021,152024],{},[25,152001,152002],{},"输入输出。",[25,152004,152005],{},"判断和循环。",[25,152007,152008],{},"函数拆分。",[25,152010,152011],{},"列表、字典等容器。",[25,152013,152014],{},"文件持久化。",[25,152016,152017],{},"异常处理。",[25,152019,152020],{},"模块拆分。",[25,152022,152023],{},"可选：面向对象。",[25,152025,152026],{},"可选：数据可视化。",[15,152028,152029],{},"本章整理两个方向：",[22,152031,152032,152035],{},[25,152033,152034],{},"学生管理系统。",[25,152036,152037],{},"销售数据统计和可视化。",[85,152039,152041],{"id":152040},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[531,152043,152045],{"id":152044},"_1221-需求","12.2.1 需求",[15,152047,152048],{},"实现一个命令行学生管理系统：",[22,152050,152051,152054,152057,152060,152063,152066,152069],{},[25,152052,152053],{},"添加学生。",[25,152055,152056],{},"删除学生。",[25,152058,152059],{},"修改学生。",[25,152061,152062],{},"查询学生。",[25,152064,152065],{},"显示所有学生。",[25,152067,152068],{},"保存到 JSON 文件。",[25,152070,152071],{},"程序启动时自动读取 JSON 文件。",[15,152073,152074],{},"学生字段：",[63,152076,152079],{"className":152077,"code":152078,"language":127,"meta":68},[125],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[34,152080,152078],{"__ignoreMap":68},[85,152082,152084],{"id":152083},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[63,152086,152088],{"className":65,"code":152087,"language":67,"meta":68,"style":68},"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",[34,152089,152090,152096,152106,152110,152124,152128,152132,152141,152153,152159,152163,152169,152200,152210,152217,152228,152234,152238,152242,152252,152283,152309,152313,152317,152326,152337,152348,152359,152370,152381,152392,152403,152407,152411,152421,152433,152449,152456,152463,152467,152471,152481,152489,152496,152509,152519,152530,152534,152538,152547,152555,152561,152573,152581,152592,152596,152600,152609,152625,152629,152636,152647,152652,152656,152672,152687,152702,152706,152711,152719,152727,152735,152743,152747,152752,152763,152767,152771,152780,152795,152805,152809,152821,152832,152836,152840,152845,152849,152860,152864,152868,152877,152892,152900,152904,152916,152926,152930,152934,152949,152962,152975,152979,152992,153004,153016,153020,153024,153035,153039,153043,153052,153067,153075,153079,153091,153101,153105,153109,153114,153118,153122,153132,153138,153160,153179,153198,153217,153222,153226,153230,153239,153247,153258,153262,153266,153292,153302,153307,153311,153315,153323,153333,153337,153345,153350,153366,153370,153384,153389,153403,153408,153421,153426,153439,153444,153457,153462,153475,153486,153490,153496,153507,153511,153515,153527],{"__ignoreMap":68},[72,152091,152092,152094],{"class":74,"line":75},[72,152093,79],{"class":78},[72,152095,147381],{"class":82},[72,152097,152098,152100,152102,152104],{"class":74,"line":370},[72,152099,31155],{"class":78},[72,152101,108711],{"class":82},[72,152103,79],{"class":78},[72,152105,108716],{"class":82},[72,152107,152108],{"class":74,"line":1608},[72,152109,2828],{"emptyLinePlaceholder":490},[72,152111,152112,152115,152117,152119,152122],{"class":74,"line":1623},[72,152113,152114],{"class":362},"DATA_FILE",[72,152116,13990],{"class":78},[72,152118,108945],{"class":82},[72,152120,152121],{"class":366},"\"students.json\"",[72,152123,570],{"class":82},[72,152125,152126],{"class":74,"line":1629},[72,152127,2828],{"emptyLinePlaceholder":490},[72,152129,152130],{"class":74,"line":1643},[72,152131,2828],{"emptyLinePlaceholder":490},[72,152133,152134,152136,152139],{"class":74,"line":1649},[72,152135,32365],{"class":78},[72,152137,152138],{"class":358}," load_students",[72,152140,32371],{"class":82},[72,152142,152143,152145,152147,152150],{"class":74,"line":1740},[72,152144,3529],{"class":78},[72,152146,39348],{"class":78},[72,152148,152149],{"class":362}," DATA_FILE",[72,152151,152152],{"class":82},".exists():\n",[72,152154,152155,152157],{"class":74,"line":1746},[72,152156,15178],{"class":78},[72,152158,52256],{"class":82},[72,152160,152161],{"class":74,"line":1758},[72,152162,2828],{"emptyLinePlaceholder":490},[72,152164,152165,152167],{"class":74,"line":2041},[72,152166,126074],{"class":78},[72,152168,4167],{"class":82},[72,152170,152171,152174,152176,152178,152180,152182,152184,152186,152188,152190,152192,152194,152196,152198],{"class":74,"line":2046},[72,152172,152173],{"class":78},"        with",[72,152175,147081],{"class":362},[72,152177,564],{"class":82},[72,152179,152114],{"class":362},[72,152181,12861],{"class":82},[72,152183,147091],{"class":366},[72,152185,12861],{"class":82},[72,152187,147096],{"class":5642},[72,152189,609],{"class":78},[72,152191,147101],{"class":366},[72,152193,14140],{"class":82},[72,152195,31801],{"class":78},[72,152197,148443],{"class":5642},[72,152199,4167],{"class":82},[72,152201,152202,152204,152206,152208],{"class":74,"line":2052},[72,152203,16158],{"class":78},[72,152205,148454],{"class":82},[72,152207,45772],{"class":5642},[72,152209,570],{"class":82},[72,152211,152212,152214],{"class":74,"line":2057},[72,152213,126102],{"class":78},[72,152215,152216],{"class":82}," json.JSONDecodeError:\n",[72,152218,152219,152221,152223,152226],{"class":74,"line":2071},[72,152220,32869],{"class":362},[72,152222,564],{"class":82},[72,152224,152225],{"class":366},"\"数据文件格式错误，已使用空数据启动\"",[72,152227,570],{"class":82},[72,152229,152230,152232],{"class":74,"line":2076},[72,152231,15178],{"class":78},[72,152233,52256],{"class":82},[72,152235,152236],{"class":74,"line":2082},[72,152237,2828],{"emptyLinePlaceholder":490},[72,152239,152240],{"class":74,"line":2103},[72,152241,2828],{"emptyLinePlaceholder":490},[72,152243,152244,152246,152249],{"class":74,"line":2108},[72,152245,32365],{"class":78},[72,152247,152248],{"class":358}," save_students",[72,152250,152251],{"class":82},"(students):\n",[72,152253,152254,152256,152258,152260,152262,152264,152267,152269,152271,152273,152275,152277,152279,152281],{"class":74,"line":2122},[72,152255,34596],{"class":78},[72,152257,147081],{"class":362},[72,152259,564],{"class":82},[72,152261,152114],{"class":362},[72,152263,12861],{"class":82},[72,152265,152266],{"class":366},"\"w\"",[72,152268,12861],{"class":82},[72,152270,147096],{"class":5642},[72,152272,609],{"class":78},[72,152274,147101],{"class":366},[72,152276,14140],{"class":82},[72,152278,31801],{"class":78},[72,152280,148443],{"class":5642},[72,152282,4167],{"class":82},[72,152284,152285,152288,152290,152292,152294,152296,152298,152300,152303,152305,152307],{"class":74,"line":2127},[72,152286,152287],{"class":82},"        json.dump(students, ",[72,152289,45772],{"class":5642},[72,152291,12861],{"class":82},[72,152293,147427],{"class":5642},[72,152295,609],{"class":78},[72,152297,34405],{"class":362},[72,152299,12861],{"class":82},[72,152301,152302],{"class":5642},"indent",[72,152304,609],{"class":78},[72,152306,640],{"class":362},[72,152308,570],{"class":82},[72,152310,152311],{"class":74,"line":2156},[72,152312,2828],{"emptyLinePlaceholder":490},[72,152314,152315],{"class":74,"line":2161},[72,152316,2828],{"emptyLinePlaceholder":490},[72,152318,152319,152321,152324],{"class":74,"line":2178},[72,152320,32365],{"class":78},[72,152322,152323],{"class":358}," show_menu",[72,152325,32371],{"class":82},[72,152327,152328,152330,152332,152335],{"class":74,"line":2183},[72,152329,31717],{"class":362},[72,152331,564],{"class":82},[72,152333,152334],{"class":366},"\"====== 学生管理系统 ======\"",[72,152336,570],{"class":82},[72,152338,152339,152341,152343,152346],{"class":74,"line":2188},[72,152340,31717],{"class":362},[72,152342,564],{"class":82},[72,152344,152345],{"class":366},"\"1. 添加学生\"",[72,152347,570],{"class":82},[72,152349,152350,152352,152354,152357],{"class":74,"line":2193},[72,152351,31717],{"class":362},[72,152353,564],{"class":82},[72,152355,152356],{"class":366},"\"2. 删除学生\"",[72,152358,570],{"class":82},[72,152360,152361,152363,152365,152368],{"class":74,"line":2207},[72,152362,31717],{"class":362},[72,152364,564],{"class":82},[72,152366,152367],{"class":366},"\"3. 修改学生\"",[72,152369,570],{"class":82},[72,152371,152372,152374,152376,152379],{"class":74,"line":2212},[72,152373,31717],{"class":362},[72,152375,564],{"class":82},[72,152377,152378],{"class":366},"\"4. 查询学生\"",[72,152380,570],{"class":82},[72,152382,152383,152385,152387,152390],{"class":74,"line":3005},[72,152384,31717],{"class":362},[72,152386,564],{"class":82},[72,152388,152389],{"class":366},"\"5. 显示所有学生\"",[72,152391,570],{"class":82},[72,152393,152394,152396,152398,152401],{"class":74,"line":3019},[72,152395,31717],{"class":362},[72,152397,564],{"class":82},[72,152399,152400],{"class":366},"\"0. 退出系统\"",[72,152402,570],{"class":82},[72,152404,152405],{"class":74,"line":3027},[72,152406,2828],{"emptyLinePlaceholder":490},[72,152408,152409],{"class":74,"line":3032},[72,152410,2828],{"emptyLinePlaceholder":490},[72,152412,152413,152415,152418],{"class":74,"line":3038},[72,152414,32365],{"class":78},[72,152416,152417],{"class":358}," find_student",[72,152419,152420],{"class":82},"(students, student_id):\n",[72,152422,152423,152425,152428,152430],{"class":74,"line":3044},[72,152424,3629],{"class":78},[72,152426,152427],{"class":82}," student ",[72,152429,26465],{"class":78},[72,152431,152432],{"class":82}," students:\n",[72,152434,152435,152437,152440,152442,152444,152446],{"class":74,"line":3049},[72,152436,2925],{"class":78},[72,152438,152439],{"class":82}," student[",[72,152441,151737],{"class":366},[72,152443,4871],{"class":82},[72,152445,3377],{"class":78},[72,152447,152448],{"class":82}," student_id:\n",[72,152450,152451,152453],{"class":74,"line":8374},[72,152452,16158],{"class":78},[72,152454,152455],{"class":82}," student\n",[72,152457,152458,152460],{"class":74,"line":8398},[72,152459,4518],{"class":78},[72,152461,152462],{"class":362}," None\n",[72,152464,152465],{"class":74,"line":8403},[72,152466,2828],{"emptyLinePlaceholder":490},[72,152468,152469],{"class":74,"line":8409},[72,152470,2828],{"emptyLinePlaceholder":490},[72,152472,152473,152475,152478],{"class":74,"line":8436},[72,152474,32365],{"class":78},[72,152476,152477],{"class":358}," input_int",[72,152479,152480],{"class":82},"(prompt):\n",[72,152482,152483,152485,152487],{"class":74,"line":8441},[72,152484,2679],{"class":78},[72,152486,95709],{"class":362},[72,152488,4167],{"class":82},[72,152490,152491,152494],{"class":74,"line":8447},[72,152492,152493],{"class":78},"        try",[72,152495,4167],{"class":82},[72,152497,152498,152500,152502,152504,152506],{"class":74,"line":8459},[72,152499,16158],{"class":78},[72,152501,2810],{"class":362},[72,152503,564],{"class":82},[72,152505,54239],{"class":362},[72,152507,152508],{"class":82},"(prompt))\n",[72,152510,152511,152514,152517],{"class":74,"line":8471},[72,152512,152513],{"class":78},"        except",[72,152515,152516],{"class":362}," ValueError",[72,152518,4167],{"class":82},[72,152520,152521,152523,152525,152528],{"class":74,"line":8483},[72,152522,35068],{"class":362},[72,152524,564],{"class":82},[72,152526,152527],{"class":366},"\"请输入整数\"",[72,152529,570],{"class":82},[72,152531,152532],{"class":74,"line":10142},[72,152533,2828],{"emptyLinePlaceholder":490},[72,152535,152536],{"class":74,"line":10167},[72,152537,2828],{"emptyLinePlaceholder":490},[72,152539,152540,152542,152545],{"class":74,"line":10190},[72,152541,32365],{"class":78},[72,152543,152544],{"class":358}," input_float",[72,152546,152480],{"class":82},[72,152548,152549,152551,152553],{"class":74,"line":10214},[72,152550,2679],{"class":78},[72,152552,95709],{"class":362},[72,152554,4167],{"class":82},[72,152556,152557,152559],{"class":74,"line":10219},[72,152558,152493],{"class":78},[72,152560,4167],{"class":82},[72,152562,152563,152565,152567,152569,152571],{"class":74,"line":10224},[72,152564,16158],{"class":78},[72,152566,110197],{"class":362},[72,152568,564],{"class":82},[72,152570,54239],{"class":362},[72,152572,152508],{"class":82},[72,152574,152575,152577,152579],{"class":74,"line":10229},[72,152576,152513],{"class":78},[72,152578,152516],{"class":362},[72,152580,4167],{"class":82},[72,152582,152583,152585,152587,152590],{"class":74,"line":10238},[72,152584,35068],{"class":362},[72,152586,564],{"class":82},[72,152588,152589],{"class":366},"\"请输入数字\"",[72,152591,570],{"class":82},[72,152593,152594],{"class":74,"line":10243},[72,152595,2828],{"emptyLinePlaceholder":490},[72,152597,152598],{"class":74,"line":10249},[72,152599,2828],{"emptyLinePlaceholder":490},[72,152601,152602,152604,152607],{"class":74,"line":10270},[72,152603,32365],{"class":78},[72,152605,152606],{"class":358}," add_student",[72,152608,152251],{"class":82},[72,152610,152611,152614,152616,152618,152620,152623],{"class":74,"line":10276},[72,152612,152613],{"class":82},"    student_id ",[72,152615,609],{"class":78},[72,152617,61023],{"class":362},[72,152619,564],{"class":82},[72,152621,152622],{"class":366},"\"请输入学号:\"",[72,152624,570],{"class":82},[72,152626,152627],{"class":74,"line":10290},[72,152628,2828],{"emptyLinePlaceholder":490},[72,152630,152631,152633],{"class":74,"line":10296},[72,152632,3529],{"class":78},[72,152634,152635],{"class":82}," find_student(students, student_id):\n",[72,152637,152638,152640,152642,152645],{"class":74,"line":10323},[72,152639,32869],{"class":362},[72,152641,564],{"class":82},[72,152643,152644],{"class":366},"\"学号已存在\"",[72,152646,570],{"class":82},[72,152648,152649],{"class":74,"line":10332},[72,152650,152651],{"class":78},"        return\n",[72,152653,152654],{"class":74,"line":10338},[72,152655,2828],{"emptyLinePlaceholder":490},[72,152657,152658,152661,152663,152665,152667,152670],{"class":74,"line":10346},[72,152659,152660],{"class":82},"    name ",[72,152662,609],{"class":78},[72,152664,61023],{"class":362},[72,152666,564],{"class":82},[72,152668,152669],{"class":366},"\"请输入姓名:\"",[72,152671,570],{"class":82},[72,152673,152674,152677,152679,152682,152685],{"class":74,"line":10351},[72,152675,152676],{"class":82},"    age ",[72,152678,609],{"class":78},[72,152680,152681],{"class":82}," input_int(",[72,152683,152684],{"class":366},"\"请输入年龄:\"",[72,152686,570],{"class":82},[72,152688,152689,152692,152694,152697,152700],{"class":74,"line":17030},[72,152690,152691],{"class":82},"    score ",[72,152693,609],{"class":78},[72,152695,152696],{"class":82}," input_float(",[72,152698,152699],{"class":366},"\"请输入成绩:\"",[72,152701,570],{"class":82},[72,152703,152704],{"class":74,"line":17036},[72,152705,2828],{"emptyLinePlaceholder":490},[72,152707,152708],{"class":74,"line":17059},[72,152709,152710],{"class":82},"    students.append({\n",[72,152712,152713,152716],{"class":74,"line":17065},[72,152714,152715],{"class":366},"        \"student_id\"",[72,152717,152718],{"class":82},": student_id,\n",[72,152720,152721,152724],{"class":74,"line":17088},[72,152722,152723],{"class":366},"        \"name\"",[72,152725,152726],{"class":82},": name,\n",[72,152728,152729,152732],{"class":74,"line":17102},[72,152730,152731],{"class":366},"        \"age\"",[72,152733,152734],{"class":82},": age,\n",[72,152736,152737,152740],{"class":74,"line":17122},[72,152738,152739],{"class":366},"        \"score\"",[72,152741,152742],{"class":82},": score,\n",[72,152744,152745],{"class":74,"line":17128},[72,152746,33879],{"class":82},[72,152748,152749],{"class":74,"line":17139},[72,152750,152751],{"class":82},"    save_students(students)\n",[72,152753,152754,152756,152758,152761],{"class":74,"line":17162},[72,152755,31717],{"class":362},[72,152757,564],{"class":82},[72,152759,152760],{"class":366},"\"添加成功\"",[72,152762,570],{"class":82},[72,152764,152765],{"class":74,"line":17184},[72,152766,2828],{"emptyLinePlaceholder":490},[72,152768,152769],{"class":74,"line":17189},[72,152770,2828],{"emptyLinePlaceholder":490},[72,152772,152773,152775,152778],{"class":74,"line":17195},[72,152774,32365],{"class":78},[72,152776,152777],{"class":358}," delete_student",[72,152779,152251],{"class":82},[72,152781,152782,152784,152786,152788,152790,152793],{"class":74,"line":17209},[72,152783,152613],{"class":82},[72,152785,609],{"class":78},[72,152787,61023],{"class":362},[72,152789,564],{"class":82},[72,152791,152792],{"class":366},"\"请输入要删除的学号:\"",[72,152794,570],{"class":82},[72,152796,152797,152800,152802],{"class":74,"line":17222},[72,152798,152799],{"class":82},"    student ",[72,152801,609],{"class":78},[72,152803,152804],{"class":82}," find_student(students, student_id)\n",[72,152806,152807],{"class":74,"line":17227},[72,152808,2828],{"emptyLinePlaceholder":490},[72,152810,152811,152813,152815,152817,152819],{"class":74,"line":17241},[72,152812,3529],{"class":78},[72,152814,152427],{"class":82},[72,152816,39345],{"class":78},[72,152818,39351],{"class":362},[72,152820,4167],{"class":82},[72,152822,152823,152825,152827,152830],{"class":74,"line":17246},[72,152824,32869],{"class":362},[72,152826,564],{"class":82},[72,152828,152829],{"class":366},"\"学生不存在\"",[72,152831,570],{"class":82},[72,152833,152834],{"class":74,"line":17252},[72,152835,152651],{"class":78},[72,152837,152838],{"class":74,"line":17257},[72,152839,2828],{"emptyLinePlaceholder":490},[72,152841,152842],{"class":74,"line":17271},[72,152843,152844],{"class":82},"    students.remove(student)\n",[72,152846,152847],{"class":74,"line":17276},[72,152848,152751],{"class":82},[72,152850,152851,152853,152855,152858],{"class":74,"line":17281},[72,152852,31717],{"class":362},[72,152854,564],{"class":82},[72,152856,152857],{"class":366},"\"删除成功\"",[72,152859,570],{"class":82},[72,152861,152862],{"class":74,"line":17295},[72,152863,2828],{"emptyLinePlaceholder":490},[72,152865,152866],{"class":74,"line":17307},[72,152867,2828],{"emptyLinePlaceholder":490},[72,152869,152870,152872,152875],{"class":74,"line":17312},[72,152871,32365],{"class":78},[72,152873,152874],{"class":358}," update_student",[72,152876,152251],{"class":82},[72,152878,152879,152881,152883,152885,152887,152890],{"class":74,"line":17325},[72,152880,152613],{"class":82},[72,152882,609],{"class":78},[72,152884,61023],{"class":362},[72,152886,564],{"class":82},[72,152888,152889],{"class":366},"\"请输入要修改的学号:\"",[72,152891,570],{"class":82},[72,152893,152894,152896,152898],{"class":74,"line":17330},[72,152895,152799],{"class":82},[72,152897,609],{"class":78},[72,152899,152804],{"class":82},[72,152901,152902],{"class":74,"line":17335},[72,152903,2828],{"emptyLinePlaceholder":490},[72,152905,152906,152908,152910,152912,152914],{"class":74,"line":17340},[72,152907,3529],{"class":78},[72,152909,152427],{"class":82},[72,152911,39345],{"class":78},[72,152913,39351],{"class":362},[72,152915,4167],{"class":82},[72,152917,152918,152920,152922,152924],{"class":74,"line":17353},[72,152919,32869],{"class":362},[72,152921,564],{"class":82},[72,152923,152829],{"class":366},[72,152925,570],{"class":82},[72,152927,152928],{"class":74,"line":17358},[72,152929,152651],{"class":78},[72,152931,152932],{"class":74,"line":33051},[72,152933,2828],{"emptyLinePlaceholder":490},[72,152935,152936,152938,152940,152942,152944,152947],{"class":74,"line":33057},[72,152937,152660],{"class":82},[72,152939,609],{"class":78},[72,152941,61023],{"class":362},[72,152943,564],{"class":82},[72,152945,152946],{"class":366},"\"请输入新姓名:\"",[72,152948,570],{"class":82},[72,152950,152951,152953,152955,152957,152960],{"class":74,"line":33063},[72,152952,152676],{"class":82},[72,152954,609],{"class":78},[72,152956,152681],{"class":82},[72,152958,152959],{"class":366},"\"请输入新年龄:\"",[72,152961,570],{"class":82},[72,152963,152964,152966,152968,152970,152973],{"class":74,"line":33069},[72,152965,152691],{"class":82},[72,152967,609],{"class":78},[72,152969,152696],{"class":82},[72,152971,152972],{"class":366},"\"请输入新成绩:\"",[72,152974,570],{"class":82},[72,152976,152977],{"class":74,"line":33075},[72,152978,2828],{"emptyLinePlaceholder":490},[72,152980,152981,152984,152986,152988,152990],{"class":74,"line":33086},[72,152982,152983],{"class":82},"    student[",[72,152985,63097],{"class":366},[72,152987,4871],{"class":82},[72,152989,609],{"class":78},[72,152991,150085],{"class":82},[72,152993,152994,152996,152998,153000,153002],{"class":74,"line":33092},[72,152995,152983],{"class":82},[72,152997,69542],{"class":366},[72,152999,4871],{"class":82},[72,153001,609],{"class":78},[72,153003,150097],{"class":82},[72,153005,153006,153008,153010,153012,153014],{"class":74,"line":33112},[72,153007,152983],{"class":82},[72,153009,151762],{"class":366},[72,153011,4871],{"class":82},[72,153013,609],{"class":78},[72,153015,2008],{"class":82},[72,153017,153018],{"class":74,"line":33118},[72,153019,2828],{"emptyLinePlaceholder":490},[72,153021,153022],{"class":74,"line":33129},[72,153023,152751],{"class":82},[72,153025,153026,153028,153030,153033],{"class":74,"line":33135},[72,153027,31717],{"class":362},[72,153029,564],{"class":82},[72,153031,153032],{"class":366},"\"修改成功\"",[72,153034,570],{"class":82},[72,153036,153037],{"class":74,"line":33141},[72,153038,2828],{"emptyLinePlaceholder":490},[72,153040,153041],{"class":74,"line":33147},[72,153042,2828],{"emptyLinePlaceholder":490},[72,153044,153045,153047,153050],{"class":74,"line":33153},[72,153046,32365],{"class":78},[72,153048,153049],{"class":358}," query_student",[72,153051,152251],{"class":82},[72,153053,153054,153056,153058,153060,153062,153065],{"class":74,"line":33159},[72,153055,152613],{"class":82},[72,153057,609],{"class":78},[72,153059,61023],{"class":362},[72,153061,564],{"class":82},[72,153063,153064],{"class":366},"\"请输入要查询的学号:\"",[72,153066,570],{"class":82},[72,153068,153069,153071,153073],{"class":74,"line":33165},[72,153070,152799],{"class":82},[72,153072,609],{"class":78},[72,153074,152804],{"class":82},[72,153076,153077],{"class":74,"line":33171},[72,153078,2828],{"emptyLinePlaceholder":490},[72,153080,153081,153083,153085,153087,153089],{"class":74,"line":33191},[72,153082,3529],{"class":78},[72,153084,152427],{"class":82},[72,153086,39345],{"class":78},[72,153088,39351],{"class":362},[72,153090,4167],{"class":82},[72,153092,153093,153095,153097,153099],{"class":74,"line":33197},[72,153094,32869],{"class":362},[72,153096,564],{"class":82},[72,153098,152829],{"class":366},[72,153100,570],{"class":82},[72,153102,153103],{"class":74,"line":33213},[72,153104,152651],{"class":78},[72,153106,153107],{"class":74,"line":33219},[72,153108,2828],{"emptyLinePlaceholder":490},[72,153110,153111],{"class":74,"line":33233},[72,153112,153113],{"class":82},"    print_student(student)\n",[72,153115,153116],{"class":74,"line":33239},[72,153117,2828],{"emptyLinePlaceholder":490},[72,153119,153120],{"class":74,"line":33254},[72,153121,2828],{"emptyLinePlaceholder":490},[72,153123,153124,153126,153129],{"class":74,"line":33260},[72,153125,32365],{"class":78},[72,153127,153128],{"class":358}," print_student",[72,153130,153131],{"class":82},"(student):\n",[72,153133,153134,153136],{"class":74,"line":33269},[72,153135,31717],{"class":362},[72,153137,151729],{"class":82},[72,153139,153140,153143,153145,153147,153150,153153,153155,153158],{"class":74,"line":33275},[72,153141,153142],{"class":78},"        f",[72,153144,805],{"class":366},[72,153146,1450],{"class":362},[72,153148,153149],{"class":82},"student[",[72,153151,153152],{"class":366},"'student_id'",[72,153154,1494],{"class":82},[72,153156,153157],{"class":362},"}\\t",[72,153159,25555],{"class":366},[72,153161,153162,153164,153166,153168,153170,153173,153175,153177],{"class":74,"line":33284},[72,153163,153142],{"class":78},[72,153165,805],{"class":366},[72,153167,1450],{"class":362},[72,153169,153149],{"class":82},[72,153171,153172],{"class":366},"'name'",[72,153174,1494],{"class":82},[72,153176,153157],{"class":362},[72,153178,25555],{"class":366},[72,153180,153181,153183,153185,153187,153189,153192,153194,153196],{"class":74,"line":33290},[72,153182,153142],{"class":78},[72,153184,805],{"class":366},[72,153186,1450],{"class":362},[72,153188,153149],{"class":82},[72,153190,153191],{"class":366},"'age'",[72,153193,1494],{"class":82},[72,153195,153157],{"class":362},[72,153197,25555],{"class":366},[72,153199,153200,153202,153204,153206,153208,153211,153213,153215],{"class":74,"line":33296},[72,153201,153142],{"class":78},[72,153203,805],{"class":366},[72,153205,1450],{"class":362},[72,153207,153149],{"class":82},[72,153209,153210],{"class":366},"'score'",[72,153212,1494],{"class":82},[72,153214,1500],{"class":362},[72,153216,25555],{"class":366},[72,153218,153219],{"class":74,"line":33305},[72,153220,153221],{"class":82},"    )\n",[72,153223,153224],{"class":74,"line":33311},[72,153225,2828],{"emptyLinePlaceholder":490},[72,153227,153228],{"class":74,"line":33322},[72,153229,2828],{"emptyLinePlaceholder":490},[72,153231,153232,153234,153237],{"class":74,"line":33328},[72,153233,32365],{"class":78},[72,153235,153236],{"class":358}," show_all_students",[72,153238,152251],{"class":82},[72,153240,153241,153243,153245],{"class":74,"line":33347},[72,153242,3529],{"class":78},[72,153244,39348],{"class":78},[72,153246,152432],{"class":82},[72,153248,153249,153251,153253,153256],{"class":74,"line":33353},[72,153250,32869],{"class":362},[72,153252,564],{"class":82},[72,153254,153255],{"class":366},"\"暂无学生\"",[72,153257,570],{"class":82},[72,153259,153260],{"class":74,"line":33364},[72,153261,152651],{"class":78},[72,153263,153264],{"class":74,"line":33370},[72,153265,2828],{"emptyLinePlaceholder":490},[72,153267,153268,153270,153272,153275,153277,153280,153282,153285,153287,153290],{"class":74,"line":33390},[72,153269,31717],{"class":362},[72,153271,564],{"class":82},[72,153273,153274],{"class":366},"\"学号",[72,153276,1659],{"class":362},[72,153278,153279],{"class":366},"姓名",[72,153281,1659],{"class":362},[72,153283,153284],{"class":366},"年龄",[72,153286,1659],{"class":362},[72,153288,153289],{"class":366},"成绩\"",[72,153291,570],{"class":82},[72,153293,153294,153296,153298,153300],{"class":74,"line":33406},[72,153295,3629],{"class":78},[72,153297,152427],{"class":82},[72,153299,26465],{"class":78},[72,153301,152432],{"class":82},[72,153303,153304],{"class":74,"line":33412},[72,153305,153306],{"class":82},"        print_student(student)\n",[72,153308,153309],{"class":74,"line":33426},[72,153310,2828],{"emptyLinePlaceholder":490},[72,153312,153313],{"class":74,"line":33432},[72,153314,2828],{"emptyLinePlaceholder":490},[72,153316,153317,153319,153321],{"class":74,"line":33438},[72,153318,32365],{"class":78},[72,153320,2401],{"class":358},[72,153322,32371],{"class":82},[72,153324,153325,153328,153330],{"class":74,"line":33449},[72,153326,153327],{"class":82},"    students ",[72,153329,609],{"class":78},[72,153331,153332],{"class":82}," load_students()\n",[72,153334,153335],{"class":74,"line":33455},[72,153336,2828],{"emptyLinePlaceholder":490},[72,153338,153339,153341,153343],{"class":74,"line":33461},[72,153340,2679],{"class":78},[72,153342,95709],{"class":362},[72,153344,4167],{"class":82},[72,153346,153347],{"class":74,"line":33471},[72,153348,153349],{"class":82},"        show_menu()\n",[72,153351,153352,153355,153357,153359,153361,153364],{"class":74,"line":33477},[72,153353,153354],{"class":82},"        choice ",[72,153356,609],{"class":78},[72,153358,61023],{"class":362},[72,153360,564],{"class":82},[72,153362,153363],{"class":366},"\"请输入操作:\"",[72,153365,570],{"class":82},[72,153367,153368],{"class":74,"line":33488},[72,153369,2828],{"emptyLinePlaceholder":490},[72,153371,153372,153374,153377,153379,153382],{"class":74,"line":33494},[72,153373,2925],{"class":78},[72,153375,153376],{"class":82}," choice ",[72,153378,3377],{"class":78},[72,153380,153381],{"class":366}," \"1\"",[72,153383,4167],{"class":82},[72,153385,153386],{"class":74,"line":33504},[72,153387,153388],{"class":82},"            add_student(students)\n",[72,153390,153391,153394,153396,153398,153401],{"class":74,"line":33509},[72,153392,153393],{"class":78},"        elif",[72,153395,153376],{"class":82},[72,153397,3377],{"class":78},[72,153399,153400],{"class":366}," \"2\"",[72,153402,4167],{"class":82},[72,153404,153405],{"class":74,"line":33515},[72,153406,153407],{"class":82},"            delete_student(students)\n",[72,153409,153410,153412,153414,153416,153419],{"class":74,"line":33564},[72,153411,153393],{"class":78},[72,153413,153376],{"class":82},[72,153415,3377],{"class":78},[72,153417,153418],{"class":366}," \"3\"",[72,153420,4167],{"class":82},[72,153422,153423],{"class":74,"line":33611},[72,153424,153425],{"class":82},"            update_student(students)\n",[72,153427,153428,153430,153432,153434,153437],{"class":74,"line":33616},[72,153429,153393],{"class":78},[72,153431,153376],{"class":82},[72,153433,3377],{"class":78},[72,153435,153436],{"class":366}," \"4\"",[72,153438,4167],{"class":82},[72,153440,153441],{"class":74,"line":33622},[72,153442,153443],{"class":82},"            query_student(students)\n",[72,153445,153446,153448,153450,153452,153455],{"class":74,"line":33641},[72,153447,153393],{"class":78},[72,153449,153376],{"class":82},[72,153451,3377],{"class":78},[72,153453,153454],{"class":366}," \"5\"",[72,153456,4167],{"class":82},[72,153458,153459],{"class":74,"line":33647},[72,153460,153461],{"class":82},"            show_all_students(students)\n",[72,153463,153464,153466,153468,153470,153473],{"class":74,"line":33667},[72,153465,153393],{"class":78},[72,153467,153376],{"class":82},[72,153469,3377],{"class":78},[72,153471,153472],{"class":366}," \"0\"",[72,153474,4167],{"class":82},[72,153476,153477,153479,153481,153484],{"class":74,"line":33673},[72,153478,35068],{"class":362},[72,153480,564],{"class":82},[72,153482,153483],{"class":366},"\"退出系统\"",[72,153485,570],{"class":82},[72,153487,153488],{"class":74,"line":33679},[72,153489,115498],{"class":78},[72,153491,153492,153494],{"class":74,"line":33689},[72,153493,2962],{"class":78},[72,153495,4167],{"class":82},[72,153497,153498,153500,153502,153505],{"class":74,"line":33694},[72,153499,35068],{"class":362},[72,153501,564],{"class":82},[72,153503,153504],{"class":366},"\"输入错误\"",[72,153506,570],{"class":82},[72,153508,153509],{"class":74,"line":33700},[72,153510,2828],{"emptyLinePlaceholder":490},[72,153512,153513],{"class":74,"line":33716},[72,153514,2828],{"emptyLinePlaceholder":490},[72,153516,153517,153519,153521,153523,153525],{"class":74,"line":33761},[72,153518,1960],{"class":78},[72,153520,31638],{"class":362},[72,153522,101965],{"class":78},[72,153524,101968],{"class":366},[72,153526,4167],{"class":82},[72,153528,153529],{"class":74,"line":33767},[72,153530,101975],{"class":82},[15,153532,153533],{},"这个项目串联了：",[22,153535,153536,153539,153542,153545,153548,153550],{},[25,153537,153538],{},"菜单循环。",[25,153540,153541],{},"函数封装。",[25,153543,153544],{},"列表字典。",[25,153546,153547],{},"JSON 读写。",[25,153549,152017],{},[25,153551,153552,28807],{},[34,153553,153554],{},"if __name__ == \"__main__\"",[85,153556,153558],{"id":153557},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[15,153560,153561],{},"可以进一步拆成两个类：",[22,153563,153564,153569],{},[25,153565,153566,153568],{},[34,153567,149858],{},"：表示单个学生。",[25,153570,153571,153573],{},[34,153572,151884],{},"：负责学生增删改查和文件保存。",[15,153575,153576],{},"示意代码：",[63,153578,153580],{"className":65,"code":153579,"language":67,"meta":68,"style":68},"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",[34,153581,153582,153592,153596,153600,153604,153612,153619,153625,153631,153637,153641,153649,153655,153665,153675,153685,153695,153699,153703,153709,153717,153725,153733,153741,153749,153757],{"__ignoreMap":68},[72,153583,153584,153586,153588,153590],{"class":74,"line":75},[72,153585,31155],{"class":78},[72,153587,151442],{"class":82},[72,153589,79],{"class":78},[72,153591,151447],{"class":82},[72,153593,153594],{"class":74,"line":370},[72,153595,2828],{"emptyLinePlaceholder":490},[72,153597,153598],{"class":74,"line":1608},[72,153599,2828],{"emptyLinePlaceholder":490},[72,153601,153602],{"class":74,"line":1623},[72,153603,151460],{"class":358},[72,153605,153606,153608,153610],{"class":74,"line":1629},[72,153607,15120],{"class":78},[72,153609,8324],{"class":358},[72,153611,4167],{"class":82},[72,153613,153614,153617],{"class":74,"line":1643},[72,153615,153616],{"class":82},"    student_id: ",[72,153618,151476],{"class":362},[72,153620,153621,153623],{"class":74,"line":1649},[72,153622,151473],{"class":82},[72,153624,151476],{"class":362},[72,153626,153627,153629],{"class":74,"line":1740},[72,153628,151481],{"class":82},[72,153630,151484],{"class":362},[72,153632,153633,153635],{"class":74,"line":1746},[72,153634,151489],{"class":82},[72,153636,151492],{"class":362},[72,153638,153639],{"class":74,"line":1758},[72,153640,2828],{"emptyLinePlaceholder":490},[72,153642,153643,153645,153647],{"class":74,"line":2041},[72,153644,31219],{"class":78},[72,153646,151640],{"class":358},[72,153648,31225],{"class":82},[72,153650,153651,153653],{"class":74,"line":2046},[72,153652,15178],{"class":78},[72,153654,15998],{"class":82},[72,153656,153657,153659,153661,153663],{"class":74,"line":2052},[72,153658,151653],{"class":366},[72,153660,51855],{"class":82},[72,153662,31241],{"class":362},[72,153664,151660],{"class":82},[72,153666,153667,153669,153671,153673],{"class":74,"line":2057},[72,153668,151665],{"class":366},[72,153670,51855],{"class":82},[72,153672,31241],{"class":362},[72,153674,151672],{"class":82},[72,153676,153677,153679,153681,153683],{"class":74,"line":2071},[72,153678,151677],{"class":366},[72,153680,51855],{"class":82},[72,153682,31241],{"class":362},[72,153684,151684],{"class":82},[72,153686,153687,153689,153691,153693],{"class":74,"line":2076},[72,153688,151689],{"class":366},[72,153690,51855],{"class":82},[72,153692,31241],{"class":362},[72,153694,151696],{"class":82},[72,153696,153697],{"class":74,"line":2082},[72,153698,2957],{"class":82},[72,153700,153701],{"class":74,"line":2103},[72,153702,2828],{"emptyLinePlaceholder":490},[72,153704,153705,153707],{"class":74,"line":2108},[72,153706,151304],{"class":358},[72,153708,151307],{"class":362},[72,153710,153711,153713,153715],{"class":74,"line":2122},[72,153712,31219],{"class":78},[72,153714,151717],{"class":358},[72,153716,151720],{"class":82},[72,153718,153719,153721,153723],{"class":74,"line":2127},[72,153720,15178],{"class":78},[72,153722,151324],{"class":362},[72,153724,151729],{"class":82},[72,153726,153727,153729,153731],{"class":74,"line":2156},[72,153728,151734],{"class":82},[72,153730,151737],{"class":366},[72,153732,88253],{"class":82},[72,153734,153735,153737,153739],{"class":74,"line":2161},[72,153736,151734],{"class":82},[72,153738,63097],{"class":366},[72,153740,88253],{"class":82},[72,153742,153743,153745,153747],{"class":74,"line":2178},[72,153744,151734],{"class":82},[72,153746,69542],{"class":366},[72,153748,88253],{"class":82},[72,153750,153751,153753,153755],{"class":74,"line":2183},[72,153752,151734],{"class":82},[72,153754,151762],{"class":366},[72,153756,88253],{"class":82},[72,153758,153759],{"class":74,"line":2188},[72,153760,38544],{"class":82},[15,153762,153763],{},"管理器示意：",[63,153765,153767],{"className":65,"code":153766,"language":67,"meta":68,"style":68},"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",[34,153768,153769,153778,153786,153797,153801,153811,153824,153835,153842,153848,153852,153861,153870,153876,153883],{"__ignoreMap":68},[72,153770,153771,153773,153776],{"class":74,"line":75},[72,153772,15120],{"class":78},[72,153774,153775],{"class":358}," StudentManager",[72,153777,4167],{"class":82},[72,153779,153780,153782,153784],{"class":74,"line":370},[72,153781,31219],{"class":78},[72,153783,31222],{"class":362},[72,153785,31225],{"class":82},[72,153787,153788,153790,153793,153795],{"class":74,"line":1608},[72,153789,31263],{"class":362},[72,153791,153792],{"class":82},".students ",[72,153794,609],{"class":78},[72,153796,52256],{"class":82},[72,153798,153799],{"class":74,"line":1623},[72,153800,2828],{"emptyLinePlaceholder":490},[72,153802,153803,153805,153808],{"class":74,"line":1629},[72,153804,31219],{"class":78},[72,153806,153807],{"class":358}," find_by_id",[72,153809,153810],{"class":82},"(self, student_id):\n",[72,153812,153813,153815,153817,153819,153821],{"class":74,"line":1643},[72,153814,3831],{"class":78},[72,153816,152427],{"class":82},[72,153818,26465],{"class":78},[72,153820,39291],{"class":362},[72,153822,153823],{"class":82},".students:\n",[72,153825,153826,153828,153831,153833],{"class":74,"line":1649},[72,153827,5070],{"class":78},[72,153829,153830],{"class":82}," student.student_id ",[72,153832,3377],{"class":78},[72,153834,152448],{"class":82},[72,153836,153837,153840],{"class":74,"line":1740},[72,153838,153839],{"class":78},"                return",[72,153841,152455],{"class":82},[72,153843,153844,153846],{"class":74,"line":1746},[72,153845,15178],{"class":78},[72,153847,152462],{"class":362},[72,153849,153850],{"class":74,"line":1758},[72,153851,2828],{"emptyLinePlaceholder":490},[72,153853,153854,153856,153858],{"class":74,"line":2041},[72,153855,31219],{"class":78},[72,153857,5635],{"class":358},[72,153859,153860],{"class":82},"(self, student):\n",[72,153862,153863,153865,153867],{"class":74,"line":2046},[72,153864,2925],{"class":78},[72,153866,39291],{"class":362},[72,153868,153869],{"class":82},".find_by_id(student.student_id):\n",[72,153871,153872,153874],{"class":74,"line":2052},[72,153873,16158],{"class":78},[72,153875,126097],{"class":362},[72,153877,153878,153880],{"class":74,"line":2057},[72,153879,31263],{"class":362},[72,153881,153882],{"class":82},".students.append(student)\n",[72,153884,153885,153887],{"class":74,"line":2071},[72,153886,15178],{"class":78},[72,153888,153889],{"class":362}," True\n",[15,153891,153892],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[85,153894,153896],{"id":153895},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[531,153898,153900],{"id":153899},"_1251-数据结构","12.5.1 数据结构",[63,153902,153904],{"className":65,"code":153903,"language":67,"meta":68,"style":68},"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",[34,153905,153906,153914,153945,153975,154004,154033],{"__ignoreMap":68},[72,153907,153908,153910,153912],{"class":74,"line":75},[72,153909,148755],{"class":82},[72,153911,609],{"class":78},[72,153913,55865],{"class":82},[72,153915,153916,153918,153920,153922,153924,153926,153929,153931,153934,153936,153938,153940,153943],{"class":74,"line":370},[72,153917,148675],{"class":82},[72,153919,148287],{"class":366},[72,153921,51855],{"class":82},[72,153923,148898],{"class":366},[72,153925,12861],{"class":82},[72,153927,153928],{"class":366},"\"category\"",[72,153930,51855],{"class":82},[72,153932,153933],{"class":366},"\"手机\"",[72,153935,12861],{"class":82},[72,153937,84501],{"class":366},[72,153939,51855],{"class":82},[72,153941,153942],{"class":362},"12000",[72,153944,5358],{"class":82},[72,153946,153947,153949,153951,153953,153955,153957,153959,153961,153964,153966,153968,153970,153973],{"class":74,"line":1608},[72,153948,148675],{"class":82},[72,153950,148287],{"class":366},[72,153952,51855],{"class":82},[72,153954,148898],{"class":366},[72,153956,12861],{"class":82},[72,153958,153928],{"class":366},[72,153960,51855],{"class":82},[72,153962,153963],{"class":366},"\"电脑\"",[72,153965,12861],{"class":82},[72,153967,84501],{"class":366},[72,153969,51855],{"class":82},[72,153971,153972],{"class":362},"18000",[72,153974,5358],{"class":82},[72,153976,153977,153979,153981,153983,153985,153987,153989,153991,153993,153995,153997,153999,154002],{"class":74,"line":1623},[72,153978,148675],{"class":82},[72,153980,148287],{"class":366},[72,153982,51855],{"class":82},[72,153984,148919],{"class":366},[72,153986,12861],{"class":82},[72,153988,153928],{"class":366},[72,153990,51855],{"class":82},[72,153992,153933],{"class":366},[72,153994,12861],{"class":82},[72,153996,84501],{"class":366},[72,153998,51855],{"class":82},[72,154000,154001],{"class":362},"15000",[72,154003,5358],{"class":82},[72,154005,154006,154008,154010,154012,154014,154016,154018,154020,154022,154024,154026,154028,154031],{"class":74,"line":1629},[72,154007,148675],{"class":82},[72,154009,148287],{"class":366},[72,154011,51855],{"class":82},[72,154013,148919],{"class":366},[72,154015,12861],{"class":82},[72,154017,153928],{"class":366},[72,154019,51855],{"class":82},[72,154021,153963],{"class":366},[72,154023,12861],{"class":82},[72,154025,84501],{"class":366},[72,154027,51855],{"class":82},[72,154029,154030],{"class":362},"16000",[72,154032,5358],{"class":82},[72,154034,154035],{"class":74,"line":1643},[72,154036,33664],{"class":82},[531,154038,154040],{"id":154039},"_1252-按日期统计","12.5.2 按日期统计",[63,154042,154044],{"className":65,"code":154043,"language":67,"meta":68,"style":68},"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",[34,154045,154046,154055,154059,154070,154084,154097,154116,154120],{"__ignoreMap":68},[72,154047,154048,154051,154053],{"class":74,"line":75},[72,154049,154050],{"class":82},"daily_total ",[72,154052,609],{"class":78},[72,154054,88285],{"class":82},[72,154056,154057],{"class":74,"line":370},[72,154058,2828],{"emptyLinePlaceholder":490},[72,154060,154061,154063,154065,154067],{"class":74,"line":1608},[72,154062,3453],{"class":78},[72,154064,148499],{"class":82},[72,154066,26465],{"class":78},[72,154068,154069],{"class":82}," sales:\n",[72,154071,154072,154075,154077,154080,154082],{"class":74,"line":1623},[72,154073,154074],{"class":82},"    date ",[72,154076,609],{"class":78},[72,154078,154079],{"class":82}," item[",[72,154081,148287],{"class":366},[72,154083,33664],{"class":82},[72,154085,154086,154089,154091,154093,154095],{"class":74,"line":1629},[72,154087,154088],{"class":82},"    amount ",[72,154090,609],{"class":78},[72,154092,154079],{"class":82},[72,154094,84501],{"class":366},[72,154096,33664],{"class":82},[72,154098,154099,154102,154104,154107,154109,154111,154113],{"class":74,"line":1643},[72,154100,154101],{"class":82},"    daily_total[date] ",[72,154103,609],{"class":78},[72,154105,154106],{"class":82}," daily_total.get(date, ",[72,154108,747],{"class":362},[72,154110,14140],{"class":82},[72,154112,1035],{"class":78},[72,154114,154115],{"class":82}," amount\n",[72,154117,154118],{"class":74,"line":1649},[72,154119,2828],{"emptyLinePlaceholder":490},[72,154121,154122,154124],{"class":74,"line":1740},[72,154123,30833],{"class":362},[72,154125,154126],{"class":82},"(daily_total)\n",[531,154128,154130],{"id":154129},"_1253-按类别统计","12.5.3 按类别统计",[63,154132,154134],{"className":65,"code":154133,"language":67,"meta":68,"style":68},"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",[34,154135,154136,154145,154149,154159,154172,154184,154202,154206],{"__ignoreMap":68},[72,154137,154138,154141,154143],{"class":74,"line":75},[72,154139,154140],{"class":82},"category_total ",[72,154142,609],{"class":78},[72,154144,88285],{"class":82},[72,154146,154147],{"class":74,"line":370},[72,154148,2828],{"emptyLinePlaceholder":490},[72,154150,154151,154153,154155,154157],{"class":74,"line":1608},[72,154152,3453],{"class":78},[72,154154,148499],{"class":82},[72,154156,26465],{"class":78},[72,154158,154069],{"class":82},[72,154160,154161,154164,154166,154168,154170],{"class":74,"line":1623},[72,154162,154163],{"class":82},"    category ",[72,154165,609],{"class":78},[72,154167,154079],{"class":82},[72,154169,153928],{"class":366},[72,154171,33664],{"class":82},[72,154173,154174,154176,154178,154180,154182],{"class":74,"line":1629},[72,154175,154088],{"class":82},[72,154177,609],{"class":78},[72,154179,154079],{"class":82},[72,154181,84501],{"class":366},[72,154183,33664],{"class":82},[72,154185,154186,154189,154191,154194,154196,154198,154200],{"class":74,"line":1643},[72,154187,154188],{"class":82},"    category_total[category] ",[72,154190,609],{"class":78},[72,154192,154193],{"class":82}," category_total.get(category, ",[72,154195,747],{"class":362},[72,154197,14140],{"class":82},[72,154199,1035],{"class":78},[72,154201,154115],{"class":82},[72,154203,154204],{"class":74,"line":1649},[72,154205,2828],{"emptyLinePlaceholder":490},[72,154207,154208,154210],{"class":74,"line":1740},[72,154209,30833],{"class":362},[72,154211,154212],{"class":82},"(category_total)\n",[531,154214,154216],{"id":154215},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[63,154218,154220],{"className":65,"code":154219,"language":67,"meta":68,"style":68},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[34,154221,154222,154247],{"__ignoreMap":68},[72,154223,154224,154227,154229,154231,154234,154237,154240,154243,154245],{"class":74,"line":75},[72,154225,154226],{"class":82},"top_date, top_amount ",[72,154228,609],{"class":78},[72,154230,6377],{"class":362},[72,154232,154233],{"class":82},"(daily_total.items(), ",[72,154235,154236],{"class":5642},"key",[72,154238,154239],{"class":78},"=lambda",[72,154241,154242],{"class":82}," item: item[",[72,154244,772],{"class":362},[72,154246,5085],{"class":82},[72,154248,154249,154251],{"class":74,"line":370},[72,154250,30833],{"class":362},[72,154252,154253],{"class":82},"(top_date, top_amount)\n",[85,154255,154257],{"id":154256},"_126-绘制柱状图","12.6 绘制柱状图",[63,154259,154261],{"className":65,"code":154260,"language":67,"meta":68,"style":68},"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",[34,154262,154263,154277,154288,154292,154300,154312,154324,154335,154339,154343,154353,154364,154378,154383,154400,154417,154433,154437],{"__ignoreMap":68},[72,154264,154265,154267,154269,154271,154273,154275],{"class":74,"line":75},[72,154266,31155],{"class":78},[72,154268,147669],{"class":82},[72,154270,79],{"class":78},[72,154272,147674],{"class":82},[72,154274,31801],{"class":78},[72,154276,147679],{"class":82},[72,154278,154279,154281,154283,154285],{"class":74,"line":370},[72,154280,31155],{"class":78},[72,154282,147528],{"class":82},[72,154284,79],{"class":78},[72,154286,154287],{"class":82}," Bar\n",[72,154289,154290],{"class":74,"line":1608},[72,154291,2828],{"emptyLinePlaceholder":490},[72,154293,154294,154296,154298],{"class":74,"line":1623},[72,154295,154140],{"class":82},[72,154297,609],{"class":78},[72,154299,15998],{"class":82},[72,154301,154302,154305,154307,154310],{"class":74,"line":1629},[72,154303,154304],{"class":366},"    \"手机\"",[72,154306,51855],{"class":82},[72,154308,154309],{"class":362},"27000",[72,154311,31884],{"class":82},[72,154313,154314,154317,154319,154322],{"class":74,"line":1643},[72,154315,154316],{"class":366},"    \"电脑\"",[72,154318,51855],{"class":82},[72,154320,154321],{"class":362},"34000",[72,154323,31884],{"class":82},[72,154325,154326,154329,154331,154333],{"class":74,"line":1649},[72,154327,154328],{"class":366},"    \"耳机\"",[72,154330,51855],{"class":82},[72,154332,124689],{"class":362},[72,154334,31884],{"class":82},[72,154336,154337],{"class":74,"line":1740},[72,154338,1994],{"class":82},[72,154340,154341],{"class":74,"line":1746},[72,154342,2828],{"emptyLinePlaceholder":490},[72,154344,154345,154348,154350],{"class":74,"line":1758},[72,154346,154347],{"class":82},"bar ",[72,154349,609],{"class":78},[72,154351,154352],{"class":82}," Bar()\n",[72,154354,154355,154358,154361],{"class":74,"line":2041},[72,154356,154357],{"class":82},"bar.add_xaxis(",[72,154359,154360],{"class":362},"list",[72,154362,154363],{"class":82},"(category_total.keys()))\n",[72,154365,154366,154369,154371,154373,154375],{"class":74,"line":2046},[72,154367,154368],{"class":82},"bar.add_yaxis(",[72,154370,147585],{"class":366},[72,154372,12861],{"class":82},[72,154374,154360],{"class":362},[72,154376,154377],{"class":82},"(category_total.values()))\n",[72,154379,154380],{"class":74,"line":2052},[72,154381,154382],{"class":82},"bar.set_global_opts(\n",[72,154384,154385,154387,154389,154391,154393,154395,154398],{"class":74,"line":2057},[72,154386,147763],{"class":5642},[72,154388,609],{"class":78},[72,154390,147768],{"class":82},[72,154392,51825],{"class":5642},[72,154394,609],{"class":78},[72,154396,154397],{"class":366},"\"品类销售额\"",[72,154399,38465],{"class":82},[72,154401,154402,154404,154406,154408,154410,154412,154415],{"class":74,"line":2071},[72,154403,147782],{"class":5642},[72,154405,609],{"class":78},[72,154407,147787],{"class":82},[72,154409,80228],{"class":5642},[72,154411,609],{"class":78},[72,154413,154414],{"class":366},"\"品类\"",[72,154416,38465],{"class":82},[72,154418,154419,154421,154423,154425,154427,154429,154431],{"class":74,"line":2076},[72,154420,147801],{"class":5642},[72,154422,609],{"class":78},[72,154424,147787],{"class":82},[72,154426,80228],{"class":5642},[72,154428,609],{"class":78},[72,154430,147585],{"class":366},[72,154432,38465],{"class":82},[72,154434,154435],{"class":74,"line":2082},[72,154436,570],{"class":82},[72,154438,154439,154442,154445],{"class":74,"line":2103},[72,154440,154441],{"class":82},"bar.render(",[72,154443,154444],{"class":366},"\"category_sales.html\"",[72,154446,570],{"class":82},[85,154448,154450],{"id":154449},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[15,154452,154453],{},"时间线适合展示不同日期、月份、年份的数据变化。",[63,154455,154457],{"className":65,"code":154456,"language":67,"meta":68,"style":68},"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",[34,154458,154459,154473,154484,154488,154496,154520,154543,154568,154572,154576,154586,154590,154601,154610,154620,154634,154665,154670,154674],{"__ignoreMap":68},[72,154460,154461,154463,154465,154467,154469,154471],{"class":74,"line":75},[72,154462,31155],{"class":78},[72,154464,147669],{"class":82},[72,154466,79],{"class":78},[72,154468,147674],{"class":82},[72,154470,31801],{"class":78},[72,154472,147679],{"class":82},[72,154474,154475,154477,154479,154481],{"class":74,"line":370},[72,154476,31155],{"class":78},[72,154478,147528],{"class":82},[72,154480,79],{"class":78},[72,154482,154483],{"class":82}," Bar, Timeline\n",[72,154485,154486],{"class":74,"line":1608},[72,154487,2828],{"emptyLinePlaceholder":490},[72,154489,154490,154492,154494],{"class":74,"line":1623},[72,154491,102063],{"class":82},[72,154493,609],{"class":78},[72,154495,15998],{"class":82},[72,154497,154498,154501,154504,154506,154508,154510,154512,154514,154516,154518],{"class":74,"line":1629},[72,154499,154500],{"class":366},"    \"2024-10-01\"",[72,154502,154503],{"class":82},": {",[72,154505,153933],{"class":366},[72,154507,51855],{"class":82},[72,154509,153942],{"class":362},[72,154511,12861],{"class":82},[72,154513,153963],{"class":366},[72,154515,51855],{"class":82},[72,154517,153972],{"class":362},[72,154519,5358],{"class":82},[72,154521,154522,154525,154527,154529,154531,154533,154535,154537,154539,154541],{"class":74,"line":1643},[72,154523,154524],{"class":366},"    \"2024-10-02\"",[72,154526,154503],{"class":82},[72,154528,153933],{"class":366},[72,154530,51855],{"class":82},[72,154532,154001],{"class":362},[72,154534,12861],{"class":82},[72,154536,153963],{"class":366},[72,154538,51855],{"class":82},[72,154540,154030],{"class":362},[72,154542,5358],{"class":82},[72,154544,154545,154548,154550,154552,154554,154557,154559,154561,154563,154566],{"class":74,"line":1649},[72,154546,154547],{"class":366},"    \"2024-10-03\"",[72,154549,154503],{"class":82},[72,154551,153933],{"class":366},[72,154553,51855],{"class":82},[72,154555,154556],{"class":362},"17000",[72,154558,12861],{"class":82},[72,154560,153963],{"class":366},[72,154562,51855],{"class":82},[72,154564,154565],{"class":362},"19000",[72,154567,5358],{"class":82},[72,154569,154570],{"class":74,"line":1740},[72,154571,1994],{"class":82},[72,154573,154574],{"class":74,"line":1746},[72,154575,2828],{"emptyLinePlaceholder":490},[72,154577,154578,154581,154583],{"class":74,"line":1758},[72,154579,154580],{"class":82},"timeline ",[72,154582,609],{"class":78},[72,154584,154585],{"class":82}," Timeline()\n",[72,154587,154588],{"class":74,"line":2041},[72,154589,2828],{"emptyLinePlaceholder":490},[72,154591,154592,154594,154597,154599],{"class":74,"line":2046},[72,154593,3453],{"class":78},[72,154595,154596],{"class":82}," date, category_data ",[72,154598,26465],{"class":78},[72,154600,149438],{"class":82},[72,154602,154603,154606,154608],{"class":74,"line":2052},[72,154604,154605],{"class":82},"    bar ",[72,154607,609],{"class":78},[72,154609,154352],{"class":82},[72,154611,154612,154615,154617],{"class":74,"line":2057},[72,154613,154614],{"class":82},"    bar.add_xaxis(",[72,154616,154360],{"class":362},[72,154618,154619],{"class":82},"(category_data.keys()))\n",[72,154621,154622,154625,154627,154629,154631],{"class":74,"line":2071},[72,154623,154624],{"class":82},"    bar.add_yaxis(",[72,154626,147585],{"class":366},[72,154628,12861],{"class":82},[72,154630,154360],{"class":362},[72,154632,154633],{"class":82},"(category_data.values()))\n",[72,154635,154636,154639,154642,154644,154646,154648,154650,154652,154654,154656,154658,154660,154663],{"class":74,"line":2076},[72,154637,154638],{"class":82},"    bar.set_global_opts(",[72,154640,154641],{"class":5642},"title_opts",[72,154643,609],{"class":78},[72,154645,147768],{"class":82},[72,154647,51825],{"class":5642},[72,154649,609],{"class":78},[72,154651,615],{"class":78},[72,154653,805],{"class":366},[72,154655,1450],{"class":362},[72,154657,74344],{"class":82},[72,154659,1500],{"class":362},[72,154661,154662],{"class":366},"销售额\"",[72,154664,30915],{"class":82},[72,154666,154667],{"class":74,"line":2082},[72,154668,154669],{"class":82},"    timeline.add(bar, date)\n",[72,154671,154672],{"class":74,"line":2103},[72,154673,2828],{"emptyLinePlaceholder":490},[72,154675,154676,154679,154682],{"class":74,"line":2108},[72,154677,154678],{"class":82},"timeline.render(",[72,154680,154681],{"class":366},"\"timeline_sales.html\"",[72,154683,570],{"class":82},[85,154685,154687],{"id":154686},"_128-绘制地图","12.8 绘制地图",[15,154689,154690],{},"地图适合展示地区数据。",[63,154692,154694],{"className":65,"code":154693,"language":67,"meta":68,"style":68},"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",[34,154695,154696,154710,154721,154725,154733,154746,154758,154771,154784,154788,154792,154802,154817,154822,154839,154858,154862],{"__ignoreMap":68},[72,154697,154698,154700,154702,154704,154706,154708],{"class":74,"line":75},[72,154699,31155],{"class":78},[72,154701,147669],{"class":82},[72,154703,79],{"class":78},[72,154705,147674],{"class":82},[72,154707,31801],{"class":78},[72,154709,147679],{"class":82},[72,154711,154712,154714,154716,154718],{"class":74,"line":370},[72,154713,31155],{"class":78},[72,154715,147528],{"class":82},[72,154717,79],{"class":78},[72,154719,154720],{"class":82}," Map\n",[72,154722,154723],{"class":74,"line":1608},[72,154724,2828],{"emptyLinePlaceholder":490},[72,154726,154727,154729,154731],{"class":74,"line":1623},[72,154728,102063],{"class":82},[72,154730,609],{"class":78},[72,154732,55865],{"class":82},[72,154734,154735,154738,154740,154742,154744],{"class":74,"line":1629},[72,154736,154737],{"class":82},"    (",[72,154739,69687],{"class":366},[72,154741,12861],{"class":82},[72,154743,1371],{"class":362},[72,154745,38465],{"class":82},[72,154747,154748,154750,154752,154754,154756],{"class":74,"line":1643},[72,154749,154737],{"class":82},[72,154751,69707],{"class":366},[72,154753,12861],{"class":82},[72,154755,147602],{"class":362},[72,154757,38465],{"class":82},[72,154759,154760,154762,154765,154767,154769],{"class":74,"line":1649},[72,154761,154737],{"class":82},[72,154763,154764],{"class":366},"\"广东\"",[72,154766,12861],{"class":82},[72,154768,2151],{"class":362},[72,154770,38465],{"class":82},[72,154772,154773,154775,154778,154780,154782],{"class":74,"line":1740},[72,154774,154737],{"class":82},[72,154776,154777],{"class":366},"\"浙江\"",[72,154779,12861],{"class":82},[72,154781,147607],{"class":362},[72,154783,38465],{"class":82},[72,154785,154786],{"class":74,"line":1746},[72,154787,33664],{"class":82},[72,154789,154790],{"class":74,"line":1758},[72,154791,2828],{"emptyLinePlaceholder":490},[72,154793,154794,154797,154799],{"class":74,"line":2041},[72,154795,154796],{"class":82},"map_chart ",[72,154798,609],{"class":78},[72,154800,154801],{"class":82}," Map()\n",[72,154803,154804,154807,154809,154812,154815],{"class":74,"line":2046},[72,154805,154806],{"class":82},"map_chart.add(",[72,154808,147585],{"class":366},[72,154810,154811],{"class":82},", data, ",[72,154813,154814],{"class":366},"\"china\"",[72,154816,570],{"class":82},[72,154818,154819],{"class":74,"line":2052},[72,154820,154821],{"class":82},"map_chart.set_global_opts(\n",[72,154823,154824,154826,154828,154830,154832,154834,154837],{"class":74,"line":2057},[72,154825,147763],{"class":5642},[72,154827,609],{"class":78},[72,154829,147768],{"class":82},[72,154831,51825],{"class":5642},[72,154833,609],{"class":78},[72,154835,154836],{"class":366},"\"地区销售额\"",[72,154838,38465],{"class":82},[72,154840,154841,154844,154846,154849,154852,154854,154856],{"class":74,"line":2071},[72,154842,154843],{"class":5642},"    visualmap_opts",[72,154845,609],{"class":78},[72,154847,154848],{"class":82},"opts.VisualMapOpts(",[72,154850,154851],{"class":5642},"max_",[72,154853,609],{"class":78},[72,154855,2151],{"class":362},[72,154857,38465],{"class":82},[72,154859,154860],{"class":74,"line":2076},[72,154861,570],{"class":82},[72,154863,154864,154867,154870],{"class":74,"line":2082},[72,154865,154866],{"class":82},"map_chart.render(",[72,154868,154869],{"class":366},"\"map_sales.html\"",[72,154871,570],{"class":82},[15,154873,154874],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[85,154876,154878],{"id":154877},"_129-项目拆分建议","12.9 项目拆分建议",[15,154880,154881],{},"当代码超过一个文件时，可以这样组织：",[63,154883,154886],{"className":154884,"code":154885,"language":127,"meta":68},[125],"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",[34,154887,154885],{"__ignoreMap":68},[15,154889,154890],{},"职责：",[22,154892,154893,154899,154905,154911],{},[25,154894,154895,154898],{},[34,154896,154897],{},"main.py","：程序入口。",[25,154900,154901,154904],{},[34,154902,154903],{},"file_utils.py","：读写 JSON。",[25,154906,154907,154910],{},[34,154908,154909],{},"sales_service.py","：统计销售数据。",[25,154912,154913,154916],{},[34,154914,154915],{},"chart_builder.py","：生成图表。",[85,154918,154920],{"id":154919},"_1210-python基础复习清单","12.10 Python基础复习清单",[15,154922,154923],{},"语法基础：",[22,154925,154926,154929,154932,154935],{},[25,154927,154928],{},"会写变量、注释、输入输出。",[25,154930,154931],{},"会使用 int、float、str、bool。",[25,154933,154934],{},"会做类型转换。",[25,154936,154937],{},"会使用 f-string 格式化输出。",[15,154939,154940],{},"流程控制：",[22,154942,154943,154949,154955,154963],{},[25,154944,154945,154946,28807],{},"会写 ",[34,154947,154948],{},"if elif else",[25,154950,154945,154951,101432,154953,28807],{},[34,154952,109063],{},[34,154954,3453],{},[25,154956,154957,154958,101432,154960,28807],{},"理解 ",[34,154959,2481],{},[34,154961,154962],{},"continue",[25,154964,154965],{},"能写嵌套循环。",[15,154967,154968],{},"函数：",[22,154970,154971,154974,154977,154980],{},[25,154972,154973],{},"会定义和调用函数。",[25,154975,154976],{},"理解参数和返回值。",[25,154978,154979],{},"知道局部变量和全局变量。",[25,154981,154982],{},"会使用默认参数、关键字参数、不定长参数。",[15,154984,154985],{},"容器：",[22,154987,154988,154991,154994,154997,155000],{},[25,154989,154990],{},"会使用列表增删改查。",[25,154992,154993],{},"会遍历列表、字典。",[25,154995,154996],{},"会使用切片。",[25,154998,154999],{},"会用集合去重。",[25,155001,155002],{},"会处理列表嵌套字典。",[15,155004,155005],{},"文件和模块：",[22,155007,155008,155011,155014,155017,155020],{},[25,155009,155010],{},"会读写文本文件。",[25,155012,155013],{},"会读写 JSON。",[25,155015,155016],{},"会捕获常见异常。",[25,155018,155019],{},"会导入模块和第三方包。",[25,155021,155022],{},"会创建简单包结构。",[15,155024,155025],{},"项目能力：",[22,155027,155028,155031,155034,155037,155040],{},[25,155029,155030],{},"能把代码拆成函数。",[25,155032,155033],{},"能把数据保存到文件。",[25,155035,155036],{},"能处理用户输入错误。",[25,155038,155039],{},"能写一个完整菜单程序。",[25,155041,155042],{},"能用 pyecharts 生成图表。",[85,155044,155046],{"id":155045},"_1211-推荐练习顺序","12.11 推荐练习顺序",[22,155048,155049,155052,155055,155058,155061,155064,155067,155070],{},[25,155050,155051],{},"猜数字游戏。",[25,155053,155054],{},"ATM 菜单程序。",[25,155056,155057],{},"学生成绩统计。",[25,155059,155060],{},"学生管理系统函数版。",[25,155062,155063],{},"学生管理系统文件持久化版。",[25,155065,155066],{},"学生管理系统面向对象版。",[25,155068,155069],{},"销售数据统计。",[25,155071,155072],{},"销售数据可视化。",[85,155074,155076],{"id":155075},"_1212-常见学习误区","12.12 常见学习误区",[22,155078,155079,155082,155085,155088,155091,155094,155097],{},[25,155080,155081],{},"只看视频不敲代码。",[25,155083,155084],{},"一报错就复制错误去搜，不先读报错位置。",[25,155086,155087],{},"变量名随便写，后续自己看不懂。",[25,155089,155090],{},"所有代码都写在一个文件一个函数里。",[25,155092,155093],{},"不保存练习代码，复习时没有材料。",[25,155095,155096],{},"还没掌握列表字典就急着学框架。",[25,155098,155099],{},"不会读官方文档，只依赖教程。",[85,155101,155103],{"id":155102},"_1213-如何读报错","12.13 如何读报错",[15,155105,155106],{},"报错通常从下往上看最后几行。",[15,155108,15561],{},[63,155110,155113],{"className":155111,"code":155112,"language":127,"meta":68},[125],"ValueError: invalid literal for int() with base 10: 'abc'\n",[34,155114,155112],{"__ignoreMap":68},[15,155116,25021],{},[22,155118,155119,155125,155135],{},[25,155120,155121,155122,28807],{},"异常类型是 ",[34,155123,155124],{},"ValueError",[25,155126,107745,155127,155130,155131,155134],{},[34,155128,155129],{},"int()"," 无法把 ",[34,155132,155133],{},"'abc'"," 转成整数。",[25,155136,155137],{},"应该检查输入内容或增加异常处理。",[15,155139,155140],{},"再看文件名和行号：",[63,155142,155145],{"className":155143,"code":155144,"language":127,"meta":68},[125],"File \"main.py\", line 10, in \u003Cmodule>\n",[34,155146,155144],{"__ignoreMap":68},[15,155148,155149,155150,155152],{},"表示错误发生在 ",[34,155151,154897],{}," 第 10 行。",[85,155154,155156],{"id":155155},"_1214-后续学习方向","12.14 后续学习方向",[15,155158,155159],{},"Python 基础完成后，可以按兴趣选择方向：",[22,155161,155162,155174,155183,155195,155206,155215,155225],{},[25,155163,155164,155165,37,155168,37,155171,28807],{},"自动化办公：",[34,155166,155167],{},"openpyxl",[34,155169,155170],{},"python-docx",[34,155172,155173],{},"pdfplumber",[25,155175,155176,155177,37,155179,37,155181,28807],{},"数据分析：",[34,155178,101043],{},[34,155180,146475],{},[34,155182,146483],{},[25,155184,155185,155186,37,155189,37,155192,28807],{},"Web 后端：",[34,155187,155188],{},"Flask",[34,155190,155191],{},"FastAPI",[34,155193,155194],{},"Django",[25,155196,155197,155198,37,155200,37,155203,28807],{},"爬虫：",[34,155199,146460],{},[34,155201,155202],{},"BeautifulSoup",[34,155204,155205],{},"Scrapy",[25,155207,155208,155209,37,155211,155214],{},"测试开发：",[34,155210,146507],{},[34,155212,155213],{},"selenium","、接口测试。",[25,155216,155217,155218,37,155220,37,155222,28807],{},"人工智能：",[34,155219,101043],{},[34,155221,146475],{},[34,155223,155224],{},"pytorch",[25,155226,155227,155228,37,155230,37,155233,28807],{},"运维脚本：",[34,155229,146076],{},[34,155231,155232],{},"subprocess",[34,155234,155235],{},"paramiko",[15,155237,155238],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[85,155240,155242],{"id":155241},"_1215-结课练习","12.15 结课练习",[22,155244,155245,155248,155251,155254,155257,155260,155263,155266],{},[25,155246,155247],{},"完成函数版学生管理系统。",[25,155249,155250],{},"给学生管理系统增加 JSON 持久化。",[25,155252,155253],{},"给学生管理系统增加异常处理。",[25,155255,155256],{},"把学生管理系统改成面向对象版。",[25,155258,155259],{},"使用 pyecharts 绘制学生成绩柱状图。",[25,155261,155262],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[25,155264,155265],{},"按品类统计销售额并绘制柱状图。",[25,155267,155268],{},"写一份自己的 Python 学习路线图。",[473,155270,155271],{},"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":68,"searchDepth":370,"depth":370,"links":155273},[155274,155275,155278,155279,155280,155286,155287,155288,155289,155290,155291,155292,155293,155294,155295],{"id":151990,"depth":370,"text":151991},{"id":152040,"depth":370,"text":152041,"children":155276},[155277],{"id":152044,"depth":1608,"text":152045},{"id":152083,"depth":370,"text":152084},{"id":153557,"depth":370,"text":153558},{"id":153895,"depth":370,"text":153896,"children":155281},[155282,155283,155284,155285],{"id":153899,"depth":1608,"text":153900},{"id":154039,"depth":1608,"text":154040},{"id":154129,"depth":1608,"text":154130},{"id":154215,"depth":1608,"text":154216},{"id":154256,"depth":370,"text":154257},{"id":154449,"depth":370,"text":154450},{"id":154686,"depth":370,"text":154687},{"id":154877,"depth":370,"text":154878},{"id":154919,"depth":370,"text":154920},{"id":155045,"depth":370,"text":155046},{"id":155075,"depth":370,"text":155076},{"id":155102,"depth":370,"text":155103},{"id":155155,"depth":370,"text":155156},{"id":155241,"depth":370,"text":155242},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":151982,"description":23802},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155302,"title":155303,"body":155304,"description":23802,"extension":487,"meta":157773,"navigation":490,"path":157774,"seo":157775,"stem":157776,"__hash__":157777},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155305,"toc":157748},[155306,155309,155313,155316,155319,155339,155342,155365,155368,155371,155393,155396,155418,155422,155425,155465,155468,155589,155593,155596,155636,155639,155663,155666,155670,155673,155687,155720,155723,155758,155761,155784,155787,155820,155823,155825,155831,155906,155909,155915,155932,155972,155976,155979,156025,156027,156065,156068,156103,156106,156141,156144,156176,156179,156198,156202,156206,156319,156321,156396,156400,156446,156449,156475,156484,156488,156491,156554,156562,156590,156594,156634,156699,156703,156706,156745,156748,156793,156796,156857,156861,156888,156891,156919,156922,156926,156930,156995,156998,157036,157039,157071,157075,157174,157178,157181,157254,157257,157305,157309,157315,157355,157358,157405,157408,157457,157461,157463,157477,157479,157660,157664,157691,157711,157718,157722,157739,157745],[10,155307,155303],{"id":155308},"_2-基础语法变量与字符串",[85,155310,155312],{"id":155311},"_21-注释","2.1 注释",[15,155314,155315],{},"注释是给人看的说明文字，不会被 Python 执行。",[15,155317,155318],{},"单行注释：",[63,155320,155322],{"className":65,"code":155321,"language":67,"meta":68,"style":68},"# 这是单行注释\nprint(\"hello\")\n",[34,155323,155324,155329],{"__ignoreMap":68},[72,155325,155326],{"class":74,"line":75},[72,155327,155328],{"class":621},"# 这是单行注释\n",[72,155330,155331,155333,155335,155337],{"class":74,"line":370},[72,155332,30833],{"class":362},[72,155334,564],{"class":82},[72,155336,6270],{"class":366},[72,155338,570],{"class":82},[15,155340,155341],{},"多行说明常用三引号：",[63,155343,155345],{"className":65,"code":155344,"language":67,"meta":68,"style":68},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[34,155346,155347,155351,155356,155361],{"__ignoreMap":68},[72,155348,155349],{"class":74,"line":75},[72,155350,96115],{"class":366},[72,155352,155353],{"class":74,"line":370},[72,155354,155355],{"class":366},"这是多行说明。\n",[72,155357,155358],{"class":74,"line":1608},[72,155359,155360],{"class":366},"常用于文件顶部说明、函数说明等。\n",[72,155362,155363],{"class":74,"line":1623},[72,155364,96115],{"class":366},[15,155366,155367],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[15,155369,155370],{},"不好：",[63,155372,155374],{"className":65,"code":155373,"language":67,"meta":68,"style":68},"# age 加 1\nage = age + 1\n",[34,155375,155376,155381],{"__ignoreMap":68},[72,155377,155378],{"class":74,"line":75},[72,155379,155380],{"class":621},"# age 加 1\n",[72,155382,155383,155385,155387,155389,155391],{"class":74,"line":370},[72,155384,146836],{"class":82},[72,155386,609],{"class":78},[72,155388,16133],{"class":82},[72,155390,1035],{"class":78},[72,155392,56117],{"class":362},[15,155394,155395],{},"较好：",[63,155397,155399],{"className":65,"code":155398,"language":67,"meta":68,"style":68},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[34,155400,155401,155406],{"__ignoreMap":68},[72,155402,155403],{"class":74,"line":75},[72,155404,155405],{"class":621},"# 用户过完生日后，年龄增加一岁\n",[72,155407,155408,155410,155412,155414,155416],{"class":74,"line":370},[72,155409,146836],{"class":82},[72,155411,609],{"class":78},[72,155413,16133],{"class":82},[72,155415,1035],{"class":78},[72,155417,56117],{"class":362},[85,155419,155421],{"id":155420},"_22-字面量","2.2 字面量",[15,155423,155424],{},"字面量就是代码中直接写出来的数据。",[63,155426,155428],{"className":65,"code":155427,"language":67,"meta":68,"style":68},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[34,155429,155430,155437,155444,155451,155458],{"__ignoreMap":68},[72,155431,155432,155434],{"class":74,"line":75},[72,155433,865],{"class":362},[72,155435,155436],{"class":621},"          # 整数\n",[72,155438,155439,155441],{"class":74,"line":370},[72,155440,612],{"class":362},[72,155442,155443],{"class":621},"         # 小数\n",[72,155445,155446,155448],{"class":74,"line":1608},[72,155447,6270],{"class":366},[72,155449,155450],{"class":621},"      # 字符串\n",[72,155452,155453,155455],{"class":74,"line":1623},[72,155454,31894],{"class":362},[72,155456,155457],{"class":621},"         # 布尔值\n",[72,155459,155460,155462],{"class":74,"line":1629},[72,155461,96103],{"class":362},[72,155463,155464],{"class":621},"         # 空值\n",[15,155466,155467],{},"常见字面量类型：",[154,155469,155470,155480],{},[157,155471,155472],{},[160,155473,155474,155476,155478],{},[163,155475,24161],{},[163,155477,27914],{},[163,155479,26291],{},[174,155481,155482,155493,155504,155515,155527,155539,155551,155564,155576],{},[160,155483,155484,155486,155490],{},[179,155485,567],{},[179,155487,155488],{},[34,155489,865],{},[179,155491,155492],{},"整数",[160,155494,155495,155497,155501],{},[179,155496,603],{},[179,155498,155499],{},[34,155500,612],{},[179,155502,155503],{},"浮点数",[160,155505,155506,155508,155512],{},[179,155507,1728],{},[179,155509,155510],{},[34,155511,6270],{},[179,155513,155514],{},"字符串",[160,155516,155517,155519,155525],{},[179,155518,1783],{},[179,155520,155521,37,155523],{},[34,155522,31894],{},[34,155524,34405],{},[179,155526,66433],{},[160,155528,155529,155532,155536],{},[179,155530,155531],{},"NoneType",[179,155533,155534],{},[34,155535,96103],{},[179,155537,155538],{},"空值",[160,155540,155541,155543,155548],{},[179,155542,154360],{},[179,155544,155545],{},[34,155546,155547],{},"[1, 2, 3]",[179,155549,155550],{},"列表",[160,155552,155553,155556,155561],{},[179,155554,155555],{},"tuple",[179,155557,155558],{},[34,155559,155560],{},"(1, 2, 3)",[179,155562,155563],{},"元组",[160,155565,155566,155568,155573],{},[179,155567,114946],{},[179,155569,155570],{},[34,155571,155572],{},"{\"name\": \"张三\"}",[179,155574,155575],{},"字典",[160,155577,155578,155581,155586],{},[179,155579,155580],{},"set",[179,155582,155583],{},[34,155584,155585],{},"{1, 2, 3}",[179,155587,155588],{},"集合",[85,155590,155592],{"id":155591},"_23-变量","2.3 变量",[15,155594,155595],{},"变量是保存数据的名字。",[63,155597,155599],{"className":65,"code":155598,"language":67,"meta":68,"style":68},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[34,155600,155601,155609,155617,155627],{"__ignoreMap":68},[72,155602,155603,155605,155607],{"class":74,"line":75},[72,155604,146826],{"class":82},[72,155606,609],{"class":78},[72,155608,149643],{"class":366},[72,155610,155611,155613,155615],{"class":74,"line":370},[72,155612,146836],{"class":82},[72,155614,609],{"class":78},[72,155616,146841],{"class":362},[72,155618,155619,155622,155624],{"class":74,"line":1608},[72,155620,155621],{"class":82},"height ",[72,155623,609],{"class":78},[72,155625,155626],{"class":362}," 1.75\n",[72,155628,155629,155632,155634],{"class":74,"line":1623},[72,155630,155631],{"class":82},"is_student ",[72,155633,609],{"class":78},[72,155635,153889],{"class":362},[15,155637,155638],{},"Python 的变量不需要提前声明类型：",[63,155640,155642],{"className":65,"code":155641,"language":67,"meta":68,"style":68},"score = 100\nscore = \"满分\"\n",[34,155643,155644,155654],{"__ignoreMap":68},[72,155645,155646,155649,155651],{"class":74,"line":75},[72,155647,155648],{"class":82},"score ",[72,155650,609],{"class":78},[72,155652,155653],{"class":362}," 100\n",[72,155655,155656,155658,155660],{"class":74,"line":370},[72,155657,155648],{"class":82},[72,155659,609],{"class":78},[72,155661,155662],{"class":366}," \"满分\"\n",[15,155664,155665],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[85,155667,155669],{"id":155668},"_24-变量命名规则","2.4 变量命名规则",[15,155671,155672],{},"硬性规则：",[22,155674,155675,155678,155681,155684],{},[25,155676,155677],{},"只能由字母、数字、下划线组成。",[25,155679,155680],{},"不能以数字开头。",[25,155682,155683],{},"不能使用 Python 关键字。",[25,155685,155686],{},"区分大小写。",[63,155688,155690],{"className":65,"code":155689,"language":67,"meta":68,"style":68},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[34,155691,155692,155701,155710],{"__ignoreMap":68},[72,155693,155694,155697,155699],{"class":74,"line":75},[72,155695,155696],{"class":82},"user_name ",[72,155698,609],{"class":78},[72,155700,146831],{"class":366},[72,155702,155703,155706,155708],{"class":74,"line":370},[72,155704,155705],{"class":82},"age2 ",[72,155707,609],{"class":78},[72,155709,146841],{"class":362},[72,155711,155712,155715,155717],{"class":74,"line":1608},[72,155713,155714],{"class":82},"_token ",[72,155716,609],{"class":78},[72,155718,155719],{"class":366}," \"abc\"\n",[15,155721,155722],{},"错误写法：",[63,155724,155726],{"className":65,"code":155725,"language":67,"meta":68,"style":68},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[34,155727,155728,155737,155749],{"__ignoreMap":68},[72,155729,155730,155733,155735],{"class":74,"line":75},[72,155731,155732],{"class":77821},"2age",[72,155734,13990],{"class":78},[72,155736,146841],{"class":362},[72,155738,155739,155741,155743,155745,155747],{"class":74,"line":370},[72,155740,131874],{"class":82},[72,155742,1086],{"class":78},[72,155744,146826],{"class":82},[72,155746,609],{"class":78},[72,155748,146831],{"class":366},[72,155750,155751,155753,155755],{"class":74,"line":1608},[72,155752,15120],{"class":78},[72,155754,13990],{"class":78},[72,155756,155757],{"class":366}," \"一班\"\n",[15,155759,155760],{},"查看关键字：",[63,155762,155764],{"className":65,"code":155763,"language":67,"meta":68,"style":68},"import keyword\n\nprint(keyword.kwlist)\n",[34,155765,155766,155773,155777],{"__ignoreMap":68},[72,155767,155768,155770],{"class":74,"line":75},[72,155769,79],{"class":78},[72,155771,155772],{"class":82}," keyword\n",[72,155774,155775],{"class":74,"line":370},[72,155776,2828],{"emptyLinePlaceholder":490},[72,155778,155779,155781],{"class":74,"line":1608},[72,155780,30833],{"class":362},[72,155782,155783],{"class":82},"(keyword.kwlist)\n",[15,155785,155786],{},"推荐命名风格：",[63,155788,155790],{"className":65,"code":155789,"language":67,"meta":68,"style":68},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[34,155791,155792,155801,155811],{"__ignoreMap":68},[72,155793,155794,155797,155799],{"class":74,"line":75},[72,155795,155796],{"class":82},"student_name ",[72,155798,609],{"class":78},[72,155800,149643],{"class":366},[72,155802,155803,155806,155808],{"class":74,"line":370},[72,155804,155805],{"class":82},"total_price ",[72,155807,609],{"class":78},[72,155809,155810],{"class":362}," 99.8\n",[72,155812,155813,155816,155818],{"class":74,"line":1608},[72,155814,155815],{"class":82},"is_finished ",[72,155817,609],{"class":78},[72,155819,126097],{"class":362},[15,155821,155822],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[85,155824,51150],{"id":51149},[15,155826,104767,155827,155830],{},[34,155828,155829],{},"type()"," 查看数据类型：",[63,155832,155834],{"className":65,"code":155833,"language":67,"meta":68,"style":68},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[34,155835,155836,155850,155864,155878,155892],{"__ignoreMap":68},[72,155837,155838,155840,155842,155844,155846,155848],{"class":74,"line":75},[72,155839,30833],{"class":362},[72,155841,564],{"class":82},[72,155843,103511],{"class":362},[72,155845,564],{"class":82},[72,155847,865],{"class":362},[72,155849,30915],{"class":82},[72,155851,155852,155854,155856,155858,155860,155862],{"class":74,"line":370},[72,155853,30833],{"class":362},[72,155855,564],{"class":82},[72,155857,103511],{"class":362},[72,155859,564],{"class":82},[72,155861,612],{"class":362},[72,155863,30915],{"class":82},[72,155865,155866,155868,155870,155872,155874,155876],{"class":74,"line":1608},[72,155867,30833],{"class":362},[72,155869,564],{"class":82},[72,155871,103511],{"class":362},[72,155873,564],{"class":82},[72,155875,6270],{"class":366},[72,155877,30915],{"class":82},[72,155879,155880,155882,155884,155886,155888,155890],{"class":74,"line":1623},[72,155881,30833],{"class":362},[72,155883,564],{"class":82},[72,155885,103511],{"class":362},[72,155887,564],{"class":82},[72,155889,31894],{"class":362},[72,155891,30915],{"class":82},[72,155893,155894,155896,155898,155900,155902,155904],{"class":74,"line":1629},[72,155895,30833],{"class":362},[72,155897,564],{"class":82},[72,155899,103511],{"class":362},[72,155901,564],{"class":82},[72,155903,96103],{"class":362},[72,155905,30915],{"class":82},[15,155907,155908],{},"输出类似：",[63,155910,155913],{"className":155911,"code":155912,"language":127,"meta":68},[125],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[34,155914,155912],{"__ignoreMap":68},[15,155916,9451,155917,107683,155919,155921,155922,155924,155925,21925,155927,155924,155929,155931],{},[34,155918,1783],{},[34,155920,567],{}," 的子类，",[34,155923,31894],{}," 可以当作 ",[34,155926,772],{},[34,155928,34405],{},[34,155930,747],{},"，但业务代码中不要滥用。",[63,155933,155935],{"className":65,"code":155934,"language":67,"meta":68,"style":68},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[34,155936,155937,155955],{"__ignoreMap":68},[72,155938,155939,155941,155943,155945,155947,155949,155952],{"class":74,"line":75},[72,155940,30833],{"class":362},[72,155942,564],{"class":82},[72,155944,31894],{"class":362},[72,155946,45984],{"class":78},[72,155948,25540],{"class":362},[72,155950,155951],{"class":82},")   ",[72,155953,155954],{"class":621},"# 2\n",[72,155956,155957,155959,155961,155963,155965,155967,155969],{"class":74,"line":370},[72,155958,30833],{"class":362},[72,155960,564],{"class":82},[72,155962,34405],{"class":362},[72,155964,45984],{"class":78},[72,155966,25540],{"class":362},[72,155968,46226],{"class":82},[72,155970,155971],{"class":621},"# 1\n",[85,155973,155975],{"id":155974},"_26-类型转换","2.6 类型转换",[15,155977,155978],{},"常用转换函数：",[63,155980,155982],{"className":65,"code":155981,"language":67,"meta":68,"style":68},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[34,155983,155984,155994,156005,156015],{"__ignoreMap":68},[72,155985,155986,155988,155990,155992],{"class":74,"line":75},[72,155987,567],{"class":362},[72,155989,564],{"class":82},[72,155991,54734],{"class":366},[72,155993,570],{"class":82},[72,155995,155996,155998,156000,156003],{"class":74,"line":370},[72,155997,603],{"class":362},[72,155999,564],{"class":82},[72,156001,156002],{"class":366},"\"3.14\"",[72,156004,570],{"class":82},[72,156006,156007,156009,156011,156013],{"class":74,"line":1608},[72,156008,1728],{"class":362},[72,156010,564],{"class":82},[72,156012,865],{"class":362},[72,156014,570],{"class":82},[72,156016,156017,156019,156021,156023],{"class":74,"line":1623},[72,156018,1783],{"class":362},[72,156020,564],{"class":82},[72,156022,772],{"class":362},[72,156024,570],{"class":82},[15,156026,15561],{},[63,156028,156030],{"className":65,"code":156029,"language":67,"meta":68,"style":68},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[34,156031,156032,156041,156052],{"__ignoreMap":68},[72,156033,156034,156036,156038],{"class":74,"line":75},[72,156035,146836],{"class":82},[72,156037,609],{"class":78},[72,156039,156040],{"class":366}," \"18\"\n",[72,156042,156043,156045,156047,156049],{"class":74,"line":370},[72,156044,146836],{"class":82},[72,156046,609],{"class":78},[72,156048,2810],{"class":362},[72,156050,156051],{"class":82},"(age)\n",[72,156053,156054,156056,156059,156061,156063],{"class":74,"line":1608},[72,156055,30833],{"class":362},[72,156057,156058],{"class":82},"(age ",[72,156060,1035],{"class":78},[72,156062,25540],{"class":362},[72,156064,570],{"class":82},[15,156066,156067],{},"输入得到的内容永远是字符串：",[63,156069,156071],{"className":65,"code":156070,"language":67,"meta":68,"style":68},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[34,156072,156073,156089],{"__ignoreMap":68},[72,156074,156075,156078,156080,156082,156084,156087],{"class":74,"line":75},[72,156076,156077],{"class":82},"num ",[72,156079,609],{"class":78},[72,156081,61023],{"class":362},[72,156083,564],{"class":82},[72,156085,156086],{"class":366},"\"请输入数字:\"",[72,156088,570],{"class":82},[72,156090,156091,156093,156095,156097,156100],{"class":74,"line":370},[72,156092,30833],{"class":362},[72,156094,564],{"class":82},[72,156096,103511],{"class":362},[72,156098,156099],{"class":82},"(num))  ",[72,156101,156102],{"class":621},"# str\n",[15,156104,156105],{},"如果要做数学运算，必须转换：",[63,156107,156109],{"className":65,"code":156108,"language":67,"meta":68,"style":68},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[34,156110,156111,156129],{"__ignoreMap":68},[72,156112,156113,156115,156117,156119,156121,156123,156125,156127],{"class":74,"line":75},[72,156114,156077],{"class":82},[72,156116,609],{"class":78},[72,156118,2810],{"class":362},[72,156120,564],{"class":82},[72,156122,54239],{"class":362},[72,156124,564],{"class":82},[72,156126,156086],{"class":366},[72,156128,30915],{"class":82},[72,156130,156131,156133,156135,156137,156139],{"class":74,"line":370},[72,156132,30833],{"class":362},[72,156134,46037],{"class":82},[72,156136,1035],{"class":78},[72,156138,2466],{"class":362},[72,156140,570],{"class":82},[15,156142,156143],{},"常见错误：",[63,156145,156147],{"className":65,"code":156146,"language":67,"meta":68,"style":68},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[34,156148,156149,156162],{"__ignoreMap":68},[72,156150,156151,156153,156155,156157,156159],{"class":74,"line":75},[72,156152,567],{"class":362},[72,156154,564],{"class":82},[72,156156,156002],{"class":366},[72,156158,155951],{"class":82},[72,156160,156161],{"class":621},"# 错误\n",[72,156163,156164,156166,156168,156171,156174],{"class":74,"line":370},[72,156165,567],{"class":362},[72,156167,564],{"class":82},[72,156169,156170],{"class":366},"\"abc\"",[72,156172,156173],{"class":82},")    ",[72,156175,156161],{"class":621},[15,156177,156178],{},"正确写法：",[63,156180,156182],{"className":65,"code":156181,"language":67,"meta":68,"style":68},"num = float(\"3.14\")\n",[34,156183,156184],{"__ignoreMap":68},[72,156185,156186,156188,156190,156192,156194,156196],{"class":74,"line":75},[72,156187,156077],{"class":82},[72,156189,609],{"class":78},[72,156191,110197],{"class":362},[72,156193,564],{"class":82},[72,156195,156002],{"class":366},[72,156197,570],{"class":82},[85,156199,156201],{"id":156200},"_27-运算符","2.7 运算符",[531,156203,156205],{"id":156204},"_271-算术运算符","2.7.1 算术运算符",[154,156207,156208,156219],{},[157,156209,156210],{},[160,156211,156212,156215,156217],{},[163,156213,156214],{},"运算符",[163,156216,26291],{},[163,156218,27914],{},[174,156220,156221,156235,156249,156263,156277,156291,156305],{},[160,156222,156223,156227,156230],{},[179,156224,156225],{},[34,156226,1035],{},[179,156228,156229],{},"加法",[179,156231,156232],{},[34,156233,156234],{},"1 + 2",[160,156236,156237,156241,156244],{},[179,156238,156239],{},[34,156240,1086],{},[179,156242,156243],{},"减法",[179,156245,156246],{},[34,156247,156248],{},"5 - 3",[160,156250,156251,156255,156258],{},[179,156252,156253],{},[34,156254,1009],{},[179,156256,156257],{},"乘法",[179,156259,156260],{},[34,156261,156262],{},"2 * 3",[160,156264,156265,156269,156272],{},[179,156266,156267],{},[34,156268,1138],{},[179,156270,156271],{},"除法，结果是浮点数",[179,156273,156274],{},[34,156275,156276],{},"5 \u002F 2",[160,156278,156279,156283,156286],{},[179,156280,156281],{},[34,156282,33747],{},[179,156284,156285],{},"整除",[179,156287,156288],{},[34,156289,156290],{},"5 \u002F\u002F 2",[160,156292,156293,156297,156300],{},[179,156294,156295],{},[34,156296,882],{},[179,156298,156299],{},"取余",[179,156301,156302],{},[34,156303,156304],{},"5 % 2",[160,156306,156307,156311,156314],{},[179,156308,156309],{},[34,156310,11087],{},[179,156312,156313],{},"幂运算",[179,156315,156316],{},[34,156317,156318],{},"2 ** 3",[15,156320,15561],{},[63,156322,156324],{"className":65,"code":156323,"language":67,"meta":68,"style":68},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[34,156325,156326,156344,156361,156378],{"__ignoreMap":68},[72,156327,156328,156330,156332,156334,156337,156339,156341],{"class":74,"line":75},[72,156329,30833],{"class":362},[72,156331,564],{"class":82},[72,156333,873],{"class":362},[72,156335,156336],{"class":78}," \u002F",[72,156338,15181],{"class":362},[72,156340,155951],{"class":82},[72,156342,156343],{"class":621},"# 2.5\n",[72,156345,156346,156348,156350,156352,156355,156357,156359],{"class":74,"line":370},[72,156347,30833],{"class":362},[72,156349,564],{"class":82},[72,156351,873],{"class":362},[72,156353,156354],{"class":78}," \u002F\u002F",[72,156356,15181],{"class":362},[72,156358,46226],{"class":82},[72,156360,155954],{"class":621},[72,156362,156363,156365,156367,156369,156372,156374,156376],{"class":74,"line":1608},[72,156364,30833],{"class":362},[72,156366,564],{"class":82},[72,156368,873],{"class":362},[72,156370,156371],{"class":78}," %",[72,156373,15181],{"class":362},[72,156375,155951],{"class":82},[72,156377,155971],{"class":621},[72,156379,156380,156382,156384,156386,156389,156391,156393],{"class":74,"line":1623},[72,156381,30833],{"class":362},[72,156383,564],{"class":82},[72,156385,640],{"class":362},[72,156387,156388],{"class":78}," **",[72,156390,78488],{"class":362},[72,156392,46226],{"class":82},[72,156394,156395],{"class":621},"# 8\n",[531,156397,156399],{"id":156398},"_272-赋值运算符","2.7.2 赋值运算符",[63,156401,156403],{"className":65,"code":156402,"language":67,"meta":68,"style":68},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[34,156404,156405,156413,156421,156429,156437],{"__ignoreMap":68},[72,156406,156407,156409,156411],{"class":74,"line":75},[72,156408,156077],{"class":82},[72,156410,609],{"class":78},[72,156412,58846],{"class":362},[72,156414,156415,156417,156419],{"class":74,"line":370},[72,156416,156077],{"class":82},[72,156418,9903],{"class":78},[72,156420,54845],{"class":362},[72,156422,156423,156425,156427],{"class":74,"line":1608},[72,156424,156077],{"class":82},[72,156426,150542],{"class":78},[72,156428,48141],{"class":362},[72,156430,156431,156433,156435],{"class":74,"line":1623},[72,156432,156077],{"class":82},[72,156434,137438],{"class":78},[72,156436,120326],{"class":362},[72,156438,156439,156441,156444],{"class":74,"line":1629},[72,156440,156077],{"class":82},[72,156442,156443],{"class":78},"\u002F=",[72,156445,48141],{"class":362},[15,156447,156448],{},"等价关系：",[63,156450,156452],{"className":65,"code":156451,"language":67,"meta":68,"style":68},"num += 1\nnum = num + 1\n",[34,156453,156454,156462],{"__ignoreMap":68},[72,156455,156456,156458,156460],{"class":74,"line":75},[72,156457,156077],{"class":82},[72,156459,9903],{"class":78},[72,156461,56117],{"class":362},[72,156463,156464,156466,156468,156471,156473],{"class":74,"line":370},[72,156465,156077],{"class":82},[72,156467,609],{"class":78},[72,156469,156470],{"class":82}," num ",[72,156472,1035],{"class":78},[72,156474,56117],{"class":362},[15,156476,156477,156478,101432,156481,28807],{},"Python 没有 ",[34,156479,156480],{},"num++",[34,156482,156483],{},"num--",[531,156485,156487],{"id":156486},"_273-比较运算符","2.7.3 比较运算符",[15,156489,156490],{},"比较运算结果是布尔值。",[63,156492,156494],{"className":65,"code":156493,"language":67,"meta":68,"style":68},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[34,156495,156496,156510,156525,156539],{"__ignoreMap":68},[72,156497,156498,156500,156502,156504,156506,156508],{"class":74,"line":75},[72,156499,30833],{"class":362},[72,156501,564],{"class":82},[72,156503,1000],{"class":362},[72,156505,26644],{"class":78},[72,156507,2576],{"class":362},[72,156509,570],{"class":82},[72,156511,156512,156514,156516,156518,156521,156523],{"class":74,"line":370},[72,156513,30833],{"class":362},[72,156515,564],{"class":82},[72,156517,1000],{"class":362},[72,156519,156520],{"class":78}," >=",[72,156522,2466],{"class":362},[72,156524,570],{"class":82},[72,156526,156527,156529,156531,156533,156535,156537],{"class":74,"line":1608},[72,156528,30833],{"class":362},[72,156530,564],{"class":82},[72,156532,1000],{"class":362},[72,156534,101965],{"class":78},[72,156536,2511],{"class":362},[72,156538,570],{"class":82},[72,156540,156541,156543,156545,156547,156550,156552],{"class":74,"line":1623},[72,156542,30833],{"class":362},[72,156544,564],{"class":82},[72,156546,1000],{"class":362},[72,156548,156549],{"class":78}," !=",[72,156551,2511],{"class":362},[72,156553,570],{"class":82},[15,156555,156556,156557,156559,156560,28807],{},"注意：判断相等用 ",[34,156558,3377],{},"，赋值用 ",[34,156561,609],{},[63,156563,156565],{"className":65,"code":156564,"language":67,"meta":68,"style":68},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[34,156566,156567,156579],{"__ignoreMap":68},[72,156568,156569,156571,156573,156576],{"class":74,"line":75},[72,156570,146836],{"class":82},[72,156572,609],{"class":78},[72,156574,156575],{"class":362}," 18",[72,156577,156578],{"class":621},"       # 赋值\n",[72,156580,156581,156583,156585,156587],{"class":74,"line":370},[72,156582,146836],{"class":82},[72,156584,3377],{"class":78},[72,156586,156575],{"class":362},[72,156588,156589],{"class":621},"      # 判断是否相等\n",[531,156591,156593],{"id":156592},"_274-逻辑运算符","2.7.4 逻辑运算符",[154,156595,156596,156604],{},[157,156597,156598],{},[160,156599,156600,156602],{},[163,156601,156214],{},[163,156603,26291],{},[174,156605,156606,156615,156624],{},[160,156607,156608,156612],{},[179,156609,156610],{},[34,156611,30880],{},[179,156613,156614],{},"并且",[160,156616,156617,156621],{},[179,156618,156619],{},[34,156620,115490],{},[179,156622,156623],{},"或者",[160,156625,156626,156631],{},[179,156627,156628],{},[34,156629,156630],{},"not",[179,156632,156633],{},"取反",[63,156635,156637],{"className":65,"code":156636,"language":67,"meta":68,"style":68},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[34,156638,156639,156647,156656,156660,156675,156689],{"__ignoreMap":68},[72,156640,156641,156643,156645],{"class":74,"line":75},[72,156642,146836],{"class":82},[72,156644,609],{"class":78},[72,156646,88482],{"class":362},[72,156648,156649,156652,156654],{"class":74,"line":370},[72,156650,156651],{"class":82},"has_ticket ",[72,156653,609],{"class":78},[72,156655,153889],{"class":362},[72,156657,156658],{"class":74,"line":1608},[72,156659,2828],{"emptyLinePlaceholder":490},[72,156661,156662,156664,156666,156668,156670,156672],{"class":74,"line":1623},[72,156663,30833],{"class":362},[72,156665,156058],{"class":82},[72,156667,2139],{"class":78},[72,156669,156575],{"class":362},[72,156671,120719],{"class":78},[72,156673,156674],{"class":82}," has_ticket)\n",[72,156676,156677,156679,156681,156683,156685,156687],{"class":74,"line":1629},[72,156678,30833],{"class":362},[72,156680,156058],{"class":82},[72,156682,1464],{"class":78},[72,156684,156575],{"class":362},[72,156686,114601],{"class":78},[72,156688,156674],{"class":82},[72,156690,156691,156693,156695,156697],{"class":74,"line":1643},[72,156692,30833],{"class":362},[72,156694,564],{"class":82},[72,156696,156630],{"class":78},[72,156698,156674],{"class":82},[85,156700,156702],{"id":156701},"_28-字符串定义","2.8 字符串定义",[15,156704,156705],{},"三种常见写法：",[63,156707,156709],{"className":65,"code":156708,"language":67,"meta":68,"style":68},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[34,156710,156711,156721,156730,156740],{"__ignoreMap":68},[72,156712,156713,156716,156718],{"class":74,"line":75},[72,156714,156715],{"class":82},"name1 ",[72,156717,609],{"class":78},[72,156719,156720],{"class":366}," '小明'\n",[72,156722,156723,156726,156728],{"class":74,"line":370},[72,156724,156725],{"class":82},"name2 ",[72,156727,609],{"class":78},[72,156729,149643],{"class":366},[72,156731,156732,156735,156737],{"class":74,"line":1608},[72,156733,156734],{"class":82},"text ",[72,156736,609],{"class":78},[72,156738,156739],{"class":366}," \"\"\"这是多行字符串\n",[72,156741,156742],{"class":74,"line":1623},[72,156743,156744],{"class":366},"可以换行\"\"\"\n",[15,156746,156747],{},"字符串中包含引号：",[63,156749,156751],{"className":65,"code":156750,"language":67,"meta":68,"style":68},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[34,156752,156753,156763,156773],{"__ignoreMap":68},[72,156754,156755,156758,156760],{"class":74,"line":75},[72,156756,156757],{"class":82},"msg ",[72,156759,609],{"class":78},[72,156761,156762],{"class":366}," \"他说:'你好'\"\n",[72,156764,156765,156768,156770],{"class":74,"line":370},[72,156766,156767],{"class":82},"msg2 ",[72,156769,609],{"class":78},[72,156771,156772],{"class":366}," '他说:\"你好\"'\n",[72,156774,156775,156778,156780,156783,156786,156789,156791],{"class":74,"line":1608},[72,156776,156777],{"class":82},"msg3 ",[72,156779,609],{"class":78},[72,156781,156782],{"class":366}," \"他说:",[72,156784,156785],{"class":362},"\\\"",[72,156787,156788],{"class":366},"你好",[72,156790,156785],{"class":362},[72,156792,25555],{"class":366},[15,156794,156795],{},"常见转义字符：",[154,156797,156798,156807],{},[157,156799,156800],{},[160,156801,156802,156805],{},[163,156803,156804],{},"写法",[163,156806,101117],{},[174,156808,156809,156819,156828,156838,156847],{},[160,156810,156811,156816],{},[179,156812,156813],{},[34,156814,156815],{},"\\n",[179,156817,156818],{},"换行",[160,156820,156821,156825],{},[179,156822,156823],{},[34,156824,1659],{},[179,156826,156827],{},"制表符",[160,156829,156830,156835],{},[179,156831,156832],{},[34,156833,156834],{},"\\\\",[179,156836,156837],{},"反斜杠",[160,156839,156840,156844],{},[179,156841,156842],{},[34,156843,156785],{},[179,156845,156846],{},"双引号",[160,156848,156849,156854],{},[179,156850,156851],{},[34,156852,156853],{},"\\'",[179,156855,156856],{},"单引号",[85,156858,156860],{"id":156859},"_29-字符串拼接","2.9 字符串拼接",[63,156862,156864],{"className":65,"code":156863,"language":67,"meta":68,"style":68},"name = \"小明\"\nprint(\"你好，\" + name)\n",[34,156865,156866,156874],{"__ignoreMap":68},[72,156867,156868,156870,156872],{"class":74,"line":75},[72,156869,146826],{"class":82},[72,156871,609],{"class":78},[72,156873,149643],{"class":366},[72,156875,156876,156878,156880,156883,156885],{"class":74,"line":370},[72,156877,30833],{"class":362},[72,156879,564],{"class":82},[72,156881,156882],{"class":366},"\"你好，\"",[72,156884,45984],{"class":78},[72,156886,156887],{"class":82}," name)\n",[15,156889,156890],{},"字符串只能和字符串拼接：",[63,156892,156894],{"className":65,"code":156893,"language":67,"meta":68,"style":68},"age = 18\nprint(\"年龄:\" + str(age))\n",[34,156895,156896,156904],{"__ignoreMap":68},[72,156897,156898,156900,156902],{"class":74,"line":75},[72,156899,146836],{"class":82},[72,156901,609],{"class":78},[72,156903,146841],{"class":362},[72,156905,156906,156908,156910,156912,156914,156916],{"class":74,"line":370},[72,156907,30833],{"class":362},[72,156909,564],{"class":82},[72,156911,146807],{"class":366},[72,156913,45984],{"class":78},[72,156915,74337],{"class":362},[72,156917,156918],{"class":82},"(age))\n",[15,156920,156921],{},"更推荐使用格式化字符串。",[85,156923,156925],{"id":156924},"_210-字符串格式化","2.10 字符串格式化",[531,156927,156929],{"id":156928},"_2101-百分号格式化","2.10.1 百分号格式化",[63,156931,156933],{"className":65,"code":156932,"language":67,"meta":68,"style":68},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[34,156934,156935,156943,156951,156960,156964],{"__ignoreMap":68},[72,156936,156937,156939,156941],{"class":74,"line":75},[72,156938,146826],{"class":82},[72,156940,609],{"class":78},[72,156942,149643],{"class":366},[72,156944,156945,156947,156949],{"class":74,"line":370},[72,156946,146836],{"class":82},[72,156948,609],{"class":78},[72,156950,146841],{"class":362},[72,156952,156953,156955,156957],{"class":74,"line":1608},[72,156954,155648],{"class":82},[72,156956,609],{"class":78},[72,156958,156959],{"class":362}," 95.5\n",[72,156961,156962],{"class":74,"line":1623},[72,156963,2828],{"emptyLinePlaceholder":490},[72,156965,156966,156968,156970,156973,156976,156979,156982,156985,156988,156990,156992],{"class":74,"line":1629},[72,156967,30833],{"class":362},[72,156969,564],{"class":82},[72,156971,156972],{"class":366},"\"姓名:",[72,156974,156975],{"class":362},"%s",[72,156977,156978],{"class":366}," 年龄:",[72,156980,156981],{"class":362},"%d",[72,156983,156984],{"class":366}," 分数:",[72,156986,156987],{"class":362},"%.1f",[72,156989,805],{"class":366},[72,156991,156371],{"class":78},[72,156993,156994],{"class":82}," (name, age, score))\n",[15,156996,156997],{},"常用占位符：",[154,156999,157000,157009],{},[157,157001,157002],{},[160,157003,157004,157007],{},[163,157005,157006],{},"占位符",[163,157008,26291],{},[174,157010,157011,157019,157027],{},[160,157012,157013,157017],{},[179,157014,157015],{},[34,157016,156975],{},[179,157018,155514],{},[160,157020,157021,157025],{},[179,157022,157023],{},[34,157024,156981],{},[179,157026,155492],{},[160,157028,157029,157034],{},[179,157030,157031],{},[34,157032,157033],{},"%f",[179,157035,155503],{},[15,157037,157038],{},"精度控制：",[63,157040,157042],{"className":65,"code":157041,"language":67,"meta":68,"style":68},"price = 12.3456\nprint(\"%.2f\" % price)\n",[34,157043,157044,157053],{"__ignoreMap":68},[72,157045,157046,157048,157050],{"class":74,"line":75},[72,157047,146971],{"class":82},[72,157049,609],{"class":78},[72,157051,157052],{"class":362}," 12.3456\n",[72,157054,157055,157057,157059,157061,157064,157066,157068],{"class":74,"line":370},[72,157056,30833],{"class":362},[72,157058,564],{"class":82},[72,157060,805],{"class":366},[72,157062,157063],{"class":362},"%.2f",[72,157065,805],{"class":366},[72,157067,156371],{"class":78},[72,157069,157070],{"class":82}," price)\n",[531,157072,157074],{"id":157073},"_2102-format方法","2.10.2 format方法",[63,157076,157078],{"className":65,"code":157077,"language":67,"meta":68,"style":68},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[34,157079,157080,157088,157096,157100,157119,157139],{"__ignoreMap":68},[72,157081,157082,157084,157086],{"class":74,"line":75},[72,157083,146826],{"class":82},[72,157085,609],{"class":78},[72,157087,149643],{"class":366},[72,157089,157090,157092,157094],{"class":74,"line":370},[72,157091,146836],{"class":82},[72,157093,609],{"class":78},[72,157095,146841],{"class":362},[72,157097,157098],{"class":74,"line":1608},[72,157099,2828],{"emptyLinePlaceholder":490},[72,157101,157102,157104,157106,157108,157110,157112,157114,157116],{"class":74,"line":1623},[72,157103,30833],{"class":362},[72,157105,564],{"class":82},[72,157107,156972],{"class":366},[72,157109,32877],{"class":362},[72,157111,156978],{"class":366},[72,157113,32877],{"class":362},[72,157115,805],{"class":366},[72,157117,157118],{"class":82},".format(name, age))\n",[72,157120,157121,157123,157125,157127,157130,157132,157135,157137],{"class":74,"line":1629},[72,157122,30833],{"class":362},[72,157124,564],{"class":82},[72,157126,156972],{"class":366},[72,157128,157129],{"class":362},"{0}",[72,157131,156978],{"class":366},[72,157133,157134],{"class":362},"{1}",[72,157136,805],{"class":366},[72,157138,157118],{"class":82},[72,157140,157141,157143,157145,157147,157150,157152,157155,157157,157160,157162,157164,157167,157169,157171],{"class":74,"line":1643},[72,157142,30833],{"class":362},[72,157144,564],{"class":82},[72,157146,156972],{"class":366},[72,157148,157149],{"class":362},"{name}",[72,157151,156978],{"class":366},[72,157153,157154],{"class":362},"{age}",[72,157156,805],{"class":366},[72,157158,157159],{"class":82},".format(",[72,157161,80228],{"class":5642},[72,157163,609],{"class":78},[72,157165,157166],{"class":82},"name, ",[72,157168,70639],{"class":5642},[72,157170,609],{"class":78},[72,157172,157173],{"class":82},"age))\n",[531,157175,157177],{"id":157176},"_2103-f-string","2.10.3 f-string",[15,157179,157180],{},"推荐写法：",[63,157182,157184],{"className":65,"code":157183,"language":67,"meta":68,"style":68},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[34,157185,157186,157194,157202,157210,157214],{"__ignoreMap":68},[72,157187,157188,157190,157192],{"class":74,"line":75},[72,157189,146826],{"class":82},[72,157191,609],{"class":78},[72,157193,149643],{"class":366},[72,157195,157196,157198,157200],{"class":74,"line":370},[72,157197,146836],{"class":82},[72,157199,609],{"class":78},[72,157201,146841],{"class":362},[72,157203,157204,157206,157208],{"class":74,"line":1608},[72,157205,155648],{"class":82},[72,157207,609],{"class":78},[72,157209,156959],{"class":362},[72,157211,157212],{"class":74,"line":1623},[72,157213,2828],{"emptyLinePlaceholder":490},[72,157215,157216,157218,157220,157222,157224,157226,157228,157230,157232,157234,157236,157238,157240,157242,157245,157248,157250,157252],{"class":74,"line":1629},[72,157217,30833],{"class":362},[72,157219,564],{"class":82},[72,157221,615],{"class":78},[72,157223,156972],{"class":366},[72,157225,1450],{"class":362},[72,157227,80228],{"class":82},[72,157229,1500],{"class":362},[72,157231,156978],{"class":366},[72,157233,1450],{"class":362},[72,157235,70639],{"class":82},[72,157237,1500],{"class":362},[72,157239,156984],{"class":366},[72,157241,1450],{"class":362},[72,157243,157244],{"class":82},"score",[72,157246,157247],{"class":78},":.1f",[72,157249,1500],{"class":362},[72,157251,805],{"class":366},[72,157253,570],{"class":82},[15,157255,157256],{},"表达式也可以放进去：",[63,157258,157260],{"className":65,"code":157259,"language":67,"meta":68,"style":68},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[34,157261,157262,157270,157278],{"__ignoreMap":68},[72,157263,157264,157266,157268],{"class":74,"line":75},[72,157265,146971],{"class":82},[72,157267,609],{"class":78},[72,157269,146976],{"class":362},[72,157271,157272,157274,157276],{"class":74,"line":370},[72,157273,146981],{"class":82},[72,157275,609],{"class":78},[72,157277,54845],{"class":362},[72,157279,157280,157282,157284,157286,157289,157291,157293,157295,157298,157300,157303],{"class":74,"line":1608},[72,157281,30833],{"class":362},[72,157283,564],{"class":82},[72,157285,615],{"class":78},[72,157287,157288],{"class":366},"\"总价:",[72,157290,1450],{"class":362},[72,157292,146971],{"class":82},[72,157294,1009],{"class":78},[72,157296,157297],{"class":82}," count",[72,157299,1500],{"class":362},[72,157301,157302],{"class":366},"元\"",[72,157304,570],{"class":82},[85,157306,157308],{"id":157307},"_211-input输入","2.11 input输入",[15,157310,157311,157314],{},[34,157312,157313],{},"input()"," 会暂停程序，等待用户输入。",[63,157316,157318],{"className":65,"code":157317,"language":67,"meta":68,"style":68},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[34,157319,157320,157334],{"__ignoreMap":68},[72,157321,157322,157324,157326,157328,157330,157332],{"class":74,"line":75},[72,157323,146826],{"class":82},[72,157325,609],{"class":78},[72,157327,61023],{"class":362},[72,157329,564],{"class":82},[72,157331,152669],{"class":366},[72,157333,570],{"class":82},[72,157335,157336,157338,157340,157342,157345,157347,157349,157351,157353],{"class":74,"line":370},[72,157337,30833],{"class":362},[72,157339,564],{"class":82},[72,157341,615],{"class":78},[72,157343,157344],{"class":366},"\"你好，",[72,157346,1450],{"class":362},[72,157348,80228],{"class":82},[72,157350,1500],{"class":362},[72,157352,805],{"class":366},[72,157354,570],{"class":82},[15,157356,157357],{},"输入整数：",[63,157359,157361],{"className":65,"code":157360,"language":67,"meta":68,"style":68},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[34,157362,157363,157381],{"__ignoreMap":68},[72,157364,157365,157367,157369,157371,157373,157375,157377,157379],{"class":74,"line":75},[72,157366,146836],{"class":82},[72,157368,609],{"class":78},[72,157370,2810],{"class":362},[72,157372,564],{"class":82},[72,157374,54239],{"class":362},[72,157376,564],{"class":82},[72,157378,152684],{"class":366},[72,157380,30915],{"class":82},[72,157382,157383,157385,157387,157389,157392,157394,157396,157398,157401,157403],{"class":74,"line":370},[72,157384,30833],{"class":362},[72,157386,564],{"class":82},[72,157388,615],{"class":78},[72,157390,157391],{"class":366},"\"明年你",[72,157393,1450],{"class":362},[72,157395,146836],{"class":82},[72,157397,1035],{"class":78},[72,157399,157400],{"class":362}," 1}",[72,157402,149694],{"class":366},[72,157404,570],{"class":82},[15,157406,157407],{},"输入小数：",[63,157409,157411],{"className":65,"code":157410,"language":67,"meta":68,"style":68},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[34,157412,157413,157432],{"__ignoreMap":68},[72,157414,157415,157417,157419,157421,157423,157425,157427,157430],{"class":74,"line":75},[72,157416,155621],{"class":82},[72,157418,609],{"class":78},[72,157420,110197],{"class":362},[72,157422,564],{"class":82},[72,157424,54239],{"class":362},[72,157426,564],{"class":82},[72,157428,157429],{"class":366},"\"请输入身高:\"",[72,157431,30915],{"class":82},[72,157433,157434,157436,157438,157440,157443,157445,157447,157450,157452,157455],{"class":74,"line":370},[72,157435,30833],{"class":362},[72,157437,564],{"class":82},[72,157439,615],{"class":78},[72,157441,157442],{"class":366},"\"身高:",[72,157444,1450],{"class":362},[72,157446,25403],{"class":82},[72,157448,157449],{"class":78},":.2f",[72,157451,1500],{"class":362},[72,157453,157454],{"class":366},"米\"",[72,157456,570],{"class":82},[85,157458,157460],{"id":157459},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[15,157462,123582],{},[22,157464,157465,157468,157471,157474],{},[25,157466,157467],{},"输入商品单价。",[25,157469,157470],{},"输入购买数量。",[25,157472,157473],{},"输入折扣，例如 0.8 表示八折。",[25,157475,157476],{},"输出最终金额，保留两位小数。",[15,157478,10461],{},[63,157480,157482],{"className":65,"code":157481,"language":67,"meta":68,"style":68},"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",[34,157483,157484,157503,157522,157542,157546,157566,157570,157593,157614,157636],{"__ignoreMap":68},[72,157485,157486,157488,157490,157492,157494,157496,157498,157501],{"class":74,"line":75},[72,157487,146971],{"class":82},[72,157489,609],{"class":78},[72,157491,110197],{"class":362},[72,157493,564],{"class":82},[72,157495,54239],{"class":362},[72,157497,564],{"class":82},[72,157499,157500],{"class":366},"\"请输入商品单价:\"",[72,157502,30915],{"class":82},[72,157504,157505,157507,157509,157511,157513,157515,157517,157520],{"class":74,"line":370},[72,157506,146981],{"class":82},[72,157508,609],{"class":78},[72,157510,2810],{"class":362},[72,157512,564],{"class":82},[72,157514,54239],{"class":362},[72,157516,564],{"class":82},[72,157518,157519],{"class":366},"\"请输入购买数量:\"",[72,157521,30915],{"class":82},[72,157523,157524,157527,157529,157531,157533,157535,157537,157540],{"class":74,"line":1608},[72,157525,157526],{"class":82},"discount ",[72,157528,609],{"class":78},[72,157530,110197],{"class":362},[72,157532,564],{"class":82},[72,157534,54239],{"class":362},[72,157536,564],{"class":82},[72,157538,157539],{"class":366},"\"请输入折扣:\"",[72,157541,30915],{"class":82},[72,157543,157544],{"class":74,"line":1623},[72,157545,2828],{"emptyLinePlaceholder":490},[72,157547,157548,157551,157553,157556,157558,157561,157563],{"class":74,"line":1629},[72,157549,157550],{"class":82},"total ",[72,157552,609],{"class":78},[72,157554,157555],{"class":82}," price ",[72,157557,1009],{"class":78},[72,157559,157560],{"class":82}," count ",[72,157562,1009],{"class":78},[72,157564,157565],{"class":82}," discount\n",[72,157567,157568],{"class":74,"line":1643},[72,157569,2828],{"emptyLinePlaceholder":490},[72,157571,157572,157574,157576,157578,157581,157583,157585,157587,157589,157591],{"class":74,"line":1649},[72,157573,30833],{"class":362},[72,157575,564],{"class":82},[72,157577,615],{"class":78},[72,157579,157580],{"class":366},"\"商品单价:",[72,157582,1450],{"class":362},[72,157584,80233],{"class":82},[72,157586,157449],{"class":78},[72,157588,1500],{"class":362},[72,157590,805],{"class":366},[72,157592,570],{"class":82},[72,157594,157595,157597,157599,157601,157604,157606,157608,157610,157612],{"class":74,"line":1740},[72,157596,30833],{"class":362},[72,157598,564],{"class":82},[72,157600,615],{"class":78},[72,157602,157603],{"class":366},"\"购买数量:",[72,157605,1450],{"class":362},[72,157607,84851],{"class":82},[72,157609,1500],{"class":362},[72,157611,805],{"class":366},[72,157613,570],{"class":82},[72,157615,157616,157618,157620,157622,157625,157627,157630,157632,157634],{"class":74,"line":1746},[72,157617,30833],{"class":362},[72,157619,564],{"class":82},[72,157621,615],{"class":78},[72,157623,157624],{"class":366},"\"折扣:",[72,157626,1450],{"class":362},[72,157628,157629],{"class":82},"discount",[72,157631,1500],{"class":362},[72,157633,805],{"class":366},[72,157635,570],{"class":82},[72,157637,157638,157640,157642,157644,157647,157649,157652,157654,157656,157658],{"class":74,"line":1758},[72,157639,30833],{"class":362},[72,157641,564],{"class":82},[72,157643,615],{"class":78},[72,157645,157646],{"class":366},"\"应付金额:",[72,157648,1450],{"class":362},[72,157650,157651],{"class":82},"total",[72,157653,157449],{"class":78},[72,157655,1500],{"class":362},[72,157657,157302],{"class":366},[72,157659,570],{"class":82},[85,157661,157663],{"id":157662},"_213-易错点","2.13 易错点",[22,157665,157666,157671,157677,157685,157688],{},[25,157667,157668,157670],{},[34,157669,157313],{}," 的结果是字符串，做运算前要转换。",[25,157672,157673,157674,28807],{},"字符串拼接时，数字要先 ",[34,157675,157676],{},"str()",[25,157678,157679,157681,157682,157684],{},[34,157680,609],{}," 是赋值，",[34,157683,3377],{}," 是比较。",[25,157686,157687],{},"Python 没有自增自减运算符。",[25,157689,157690],{},"浮点数计算可能有精度误差：",[63,157692,157694],{"className":65,"code":157693,"language":67,"meta":68,"style":68},"print(0.1 + 0.2)\n",[34,157695,157696],{"__ignoreMap":68},[72,157697,157698,157700,157702,157704,157706,157709],{"class":74,"line":75},[72,157699,30833],{"class":362},[72,157701,564],{"class":82},[72,157703,86627],{"class":362},[72,157705,45984],{"class":78},[72,157707,157708],{"class":362}," 0.2",[72,157710,570],{"class":82},[15,157712,157713,157714,157717],{},"金额计算如果要求严格，可以后续学习 ",[34,157715,157716],{},"decimal"," 模块。",[85,157719,157721],{"id":157720},"_214-本章练习","2.14 本章练习",[22,157723,157724,157727,157730,157733,157736],{},[25,157725,157726],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[25,157728,157729],{},"输入圆的半径，计算面积，保留两位小数。",[25,157731,157732],{},"输入工资和奖金，计算总收入。",[25,157734,157735],{},"输入摄氏温度，转换为华氏温度。",[25,157737,157738],{},"写一个 BMI 计算程序：",[63,157740,157743],{"className":157741,"code":157742,"language":127,"meta":68},[125],"BMI = 体重kg \u002F 身高m ** 2\n",[34,157744,157742],{"__ignoreMap":68},[473,157746,157747],{},"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":68,"searchDepth":370,"depth":370,"links":157749},[157750,157751,157752,157753,157754,157755,157756,157762,157763,157764,157769,157770,157771,157772],{"id":155311,"depth":370,"text":155312},{"id":155420,"depth":370,"text":155421},{"id":155591,"depth":370,"text":155592},{"id":155668,"depth":370,"text":155669},{"id":51149,"depth":370,"text":51150},{"id":155974,"depth":370,"text":155975},{"id":156200,"depth":370,"text":156201,"children":157757},[157758,157759,157760,157761],{"id":156204,"depth":1608,"text":156205},{"id":156398,"depth":1608,"text":156399},{"id":156486,"depth":1608,"text":156487},{"id":156592,"depth":1608,"text":156593},{"id":156701,"depth":370,"text":156702},{"id":156859,"depth":370,"text":156860},{"id":156924,"depth":370,"text":156925,"children":157765},[157766,157767,157768],{"id":156928,"depth":1608,"text":156929},{"id":157073,"depth":1608,"text":157074},{"id":157176,"depth":1608,"text":157177},{"id":157307,"depth":370,"text":157308},{"id":157459,"depth":370,"text":157460},{"id":157662,"depth":370,"text":157663},{"id":157720,"depth":370,"text":157721},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155303,"description":23802},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157779,"title":157780,"body":157781,"description":23802,"extension":487,"meta":159417,"navigation":490,"path":159418,"seo":159419,"stem":159420,"__hash__":159421},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157782,"toc":159398},[157783,157786,157790,157793,157808,157811,157839,157843,157893,157895,157911,157914,157940,157943,157947,158014,158017,158033,158037,158040,158158,158161,158168,158217,158223,158227,158230,158343,158346,158350,158354,158357,158407,158411,158414,158464,158468,158471,158509,158513,158516,158562,158565,158600,158604,158609,158612,158658,158660,158727,158731,158737,158848,158857,158861,158863,158874,158876,159042,159046,159048,159062,159064,159278,159282,159301,159318,159321,159367,159371,159395],[10,157784,157780],{"id":157785},"_3-判断语句",[85,157787,157789],{"id":157788},"_31-布尔值","3.1 布尔值",[15,157791,157792],{},"判断语句依赖布尔值：",[63,157794,157796],{"className":65,"code":157795,"language":67,"meta":68,"style":68},"True\nFalse\n",[34,157797,157798,157803],{"__ignoreMap":68},[72,157799,157800],{"class":74,"line":75},[72,157801,157802],{"class":362},"True\n",[72,157804,157805],{"class":74,"line":370},[72,157806,157807],{"class":362},"False\n",[15,157809,157810],{},"比较表达式会产生布尔值：",[63,157812,157814],{"className":65,"code":157813,"language":67,"meta":68,"style":68},"age = 18\nprint(age >= 18)  # True\n",[34,157815,157816,157824],{"__ignoreMap":68},[72,157817,157818,157820,157822],{"class":74,"line":75},[72,157819,146836],{"class":82},[72,157821,609],{"class":78},[72,157823,146841],{"class":362},[72,157825,157826,157828,157830,157832,157834,157836],{"class":74,"line":370},[72,157827,30833],{"class":362},[72,157829,156058],{"class":82},[72,157831,2139],{"class":78},[72,157833,156575],{"class":362},[72,157835,46226],{"class":82},[72,157837,157838],{"class":621},"# True\n",[85,157840,157842],{"id":157841},"_32-if基础语法","3.2 if基础语法",[63,157844,157846],{"className":65,"code":157845,"language":67,"meta":68,"style":68},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[34,157847,157848,157866,157870,157882],{"__ignoreMap":68},[72,157849,157850,157852,157854,157856,157858,157860,157862,157864],{"class":74,"line":75},[72,157851,146836],{"class":82},[72,157853,609],{"class":78},[72,157855,2810],{"class":362},[72,157857,564],{"class":82},[72,157859,54239],{"class":362},[72,157861,564],{"class":82},[72,157863,152684],{"class":366},[72,157865,30915],{"class":82},[72,157867,157868],{"class":74,"line":370},[72,157869,2828],{"emptyLinePlaceholder":490},[72,157871,157872,157874,157876,157878,157880],{"class":74,"line":1608},[72,157873,1960],{"class":78},[72,157875,16133],{"class":82},[72,157877,2139],{"class":78},[72,157879,156575],{"class":362},[72,157881,4167],{"class":82},[72,157883,157884,157886,157888,157891],{"class":74,"line":1623},[72,157885,31717],{"class":362},[72,157887,564],{"class":82},[72,157889,157890],{"class":366},"\"可以进入网吧\"",[72,157892,570],{"class":82},[15,157894,9451],{},[22,157896,157897,157902,157905,157908],{},[25,157898,157899,157901],{},[34,157900,1960],{}," 后面是条件表达式。",[25,157903,157904],{},"条件后面必须写冒号。",[25,157906,157907],{},"条件成立时执行缩进代码块。",[25,157909,157910],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[15,157912,157913],{},"错误示例：",[63,157915,157917],{"className":65,"code":157916,"language":67,"meta":68,"style":68},"if age >= 18\n    print(\"可以进入\")\n",[34,157918,157919,157929],{"__ignoreMap":68},[72,157920,157921,157923,157925,157927],{"class":74,"line":75},[72,157922,1960],{"class":78},[72,157924,16133],{"class":82},[72,157926,2139],{"class":78},[72,157928,146841],{"class":362},[72,157930,157931,157933,157935,157938],{"class":74,"line":370},[72,157932,31717],{"class":362},[72,157934,564],{"class":82},[72,157936,157937],{"class":366},"\"可以进入\"",[72,157939,570],{"class":82},[15,157941,157942],{},"缺少冒号。",[85,157944,157946],{"id":157945},"_33-if-else","3.3 if else",[63,157948,157950],{"className":65,"code":157949,"language":67,"meta":68,"style":68},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[34,157951,157952,157970,157974,157986,157997,158003],{"__ignoreMap":68},[72,157953,157954,157956,157958,157960,157962,157964,157966,157968],{"class":74,"line":75},[72,157955,146836],{"class":82},[72,157957,609],{"class":78},[72,157959,2810],{"class":362},[72,157961,564],{"class":82},[72,157963,54239],{"class":362},[72,157965,564],{"class":82},[72,157967,152684],{"class":366},[72,157969,30915],{"class":82},[72,157971,157972],{"class":74,"line":370},[72,157973,2828],{"emptyLinePlaceholder":490},[72,157975,157976,157978,157980,157982,157984],{"class":74,"line":1608},[72,157977,1960],{"class":78},[72,157979,16133],{"class":82},[72,157981,2139],{"class":78},[72,157983,156575],{"class":362},[72,157985,4167],{"class":82},[72,157987,157988,157990,157992,157995],{"class":74,"line":1623},[72,157989,31717],{"class":362},[72,157991,564],{"class":82},[72,157993,157994],{"class":366},"\"成年人\"",[72,157996,570],{"class":82},[72,157998,157999,158001],{"class":74,"line":1629},[72,158000,2130],{"class":78},[72,158002,4167],{"class":82},[72,158004,158005,158007,158009,158012],{"class":74,"line":1643},[72,158006,31717],{"class":362},[72,158008,564],{"class":82},[72,158010,158011],{"class":366},"\"未成年人\"",[72,158013,570],{"class":82},[15,158015,158016],{},"执行逻辑：",[22,158018,158019,158025,158030],{},[25,158020,158021,158022,158024],{},"条件成立，执行 ",[34,158023,1960],{}," 代码块。",[25,158026,158027,158028,158024],{},"条件不成立，执行 ",[34,158029,2130],{},[25,158031,158032],{},"两个代码块只会执行其中一个。",[85,158034,158036],{"id":158035},"_34-if-elif-else","3.4 if elif else",[15,158038,158039],{},"多条件判断：",[63,158041,158043],{"className":65,"code":158042,"language":67,"meta":68,"style":68},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[34,158044,158045,158063,158067,158081,158092,158106,158117,158130,158141,158147],{"__ignoreMap":68},[72,158046,158047,158049,158051,158053,158055,158057,158059,158061],{"class":74,"line":75},[72,158048,155648],{"class":82},[72,158050,609],{"class":78},[72,158052,2810],{"class":362},[72,158054,564],{"class":82},[72,158056,54239],{"class":362},[72,158058,564],{"class":82},[72,158060,152699],{"class":366},[72,158062,30915],{"class":82},[72,158064,158065],{"class":74,"line":370},[72,158066,2828],{"emptyLinePlaceholder":490},[72,158068,158069,158071,158074,158076,158079],{"class":74,"line":1608},[72,158070,1960],{"class":78},[72,158072,158073],{"class":82}," score ",[72,158075,2139],{"class":78},[72,158077,158078],{"class":362}," 90",[72,158080,4167],{"class":82},[72,158082,158083,158085,158087,158090],{"class":74,"line":1623},[72,158084,31717],{"class":362},[72,158086,564],{"class":82},[72,158088,158089],{"class":366},"\"优秀\"",[72,158091,570],{"class":82},[72,158093,158094,158097,158099,158101,158104],{"class":74,"line":1629},[72,158095,158096],{"class":78},"elif",[72,158098,158073],{"class":82},[72,158100,2139],{"class":78},[72,158102,158103],{"class":362}," 80",[72,158105,4167],{"class":82},[72,158107,158108,158110,158112,158115],{"class":74,"line":1643},[72,158109,31717],{"class":362},[72,158111,564],{"class":82},[72,158113,158114],{"class":366},"\"良好\"",[72,158116,570],{"class":82},[72,158118,158119,158121,158123,158125,158128],{"class":74,"line":1649},[72,158120,158096],{"class":78},[72,158122,158073],{"class":82},[72,158124,2139],{"class":78},[72,158126,158127],{"class":362}," 60",[72,158129,4167],{"class":82},[72,158131,158132,158134,158136,158139],{"class":74,"line":1740},[72,158133,31717],{"class":362},[72,158135,564],{"class":82},[72,158137,158138],{"class":366},"\"及格\"",[72,158140,570],{"class":82},[72,158142,158143,158145],{"class":74,"line":1746},[72,158144,2130],{"class":78},[72,158146,4167],{"class":82},[72,158148,158149,158151,158153,158156],{"class":74,"line":1758},[72,158150,31717],{"class":362},[72,158152,564],{"class":82},[72,158154,158155],{"class":366},"\"不及格\"",[72,158157,570],{"class":82},[15,158159,158160],{},"注意判断顺序很重要。",[15,158162,158163,158164,158167],{},"如果把 ",[34,158165,158166],{},"score >= 60"," 放在最前面：",[63,158169,158171],{"className":65,"code":158170,"language":67,"meta":68,"style":68},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[34,158172,158173,158185,158195,158207],{"__ignoreMap":68},[72,158174,158175,158177,158179,158181,158183],{"class":74,"line":75},[72,158176,1960],{"class":78},[72,158178,158073],{"class":82},[72,158180,2139],{"class":78},[72,158182,158127],{"class":362},[72,158184,4167],{"class":82},[72,158186,158187,158189,158191,158193],{"class":74,"line":370},[72,158188,31717],{"class":362},[72,158190,564],{"class":82},[72,158192,158138],{"class":366},[72,158194,570],{"class":82},[72,158196,158197,158199,158201,158203,158205],{"class":74,"line":1608},[72,158198,158096],{"class":78},[72,158200,158073],{"class":82},[72,158202,2139],{"class":78},[72,158204,158078],{"class":362},[72,158206,4167],{"class":82},[72,158208,158209,158211,158213,158215],{"class":74,"line":1623},[72,158210,31717],{"class":362},[72,158212,564],{"class":82},[72,158214,158089],{"class":366},[72,158216,570],{"class":82},[15,158218,158219,158220,158222],{},"成绩 95 会先满足 ",[34,158221,158166],{},"，后面的优秀分支就不会执行。",[85,158224,158226],{"id":158225},"_35-判断语句嵌套","3.5 判断语句嵌套",[15,158228,158229],{},"嵌套判断就是在一个判断内部再写判断。",[63,158231,158233],{"className":65,"code":158232,"language":67,"meta":68,"style":68},"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",[34,158234,158235,158253,158268,158272,158284,158298,158308,158315,158326,158332],{"__ignoreMap":68},[72,158236,158237,158239,158241,158243,158245,158247,158249,158251],{"class":74,"line":75},[72,158238,146836],{"class":82},[72,158240,609],{"class":78},[72,158242,2810],{"class":362},[72,158244,564],{"class":82},[72,158246,54239],{"class":362},[72,158248,564],{"class":82},[72,158250,152684],{"class":366},[72,158252,30915],{"class":82},[72,158254,158255,158257,158259,158261,158263,158266],{"class":74,"line":370},[72,158256,156651],{"class":82},[72,158258,609],{"class":78},[72,158260,61023],{"class":362},[72,158262,564],{"class":82},[72,158264,158265],{"class":366},"\"是否有票(y\u002Fn):\"",[72,158267,570],{"class":82},[72,158269,158270],{"class":74,"line":1608},[72,158271,2828],{"emptyLinePlaceholder":490},[72,158273,158274,158276,158278,158280,158282],{"class":74,"line":1623},[72,158275,1960],{"class":78},[72,158277,16133],{"class":82},[72,158279,2139],{"class":78},[72,158281,156575],{"class":362},[72,158283,4167],{"class":82},[72,158285,158286,158288,158291,158293,158296],{"class":74,"line":1629},[72,158287,3529],{"class":78},[72,158289,158290],{"class":82}," has_ticket ",[72,158292,3377],{"class":78},[72,158294,158295],{"class":366}," \"y\"",[72,158297,4167],{"class":82},[72,158299,158300,158302,158304,158306],{"class":74,"line":1643},[72,158301,32869],{"class":362},[72,158303,564],{"class":82},[72,158305,157937],{"class":366},[72,158307,570],{"class":82},[72,158309,158310,158313],{"class":74,"line":1649},[72,158311,158312],{"class":78},"    else",[72,158314,4167],{"class":82},[72,158316,158317,158319,158321,158324],{"class":74,"line":1740},[72,158318,32869],{"class":362},[72,158320,564],{"class":82},[72,158322,158323],{"class":366},"\"请先买票\"",[72,158325,570],{"class":82},[72,158327,158328,158330],{"class":74,"line":1746},[72,158329,2130],{"class":78},[72,158331,4167],{"class":82},[72,158333,158334,158336,158338,158341],{"class":74,"line":1758},[72,158335,31717],{"class":362},[72,158337,564],{"class":82},[72,158339,158340],{"class":366},"\"未成年人禁止进入\"",[72,158342,570],{"class":82},[15,158344,158345],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[85,158347,158349],{"id":158348},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[531,158351,158353],{"id":158352},"_361-and","3.6.1 and",[15,158355,158356],{},"两个条件都成立才成立。",[63,158358,158360],{"className":65,"code":158359,"language":67,"meta":68,"style":68},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[34,158361,158362,158370,158378,158382,158397],{"__ignoreMap":68},[72,158363,158364,158366,158368],{"class":74,"line":75},[72,158365,146836],{"class":82},[72,158367,609],{"class":78},[72,158369,88482],{"class":362},[72,158371,158372,158374,158376],{"class":74,"line":370},[72,158373,156651],{"class":82},[72,158375,609],{"class":78},[72,158377,153889],{"class":362},[72,158379,158380],{"class":74,"line":1608},[72,158381,2828],{"emptyLinePlaceholder":490},[72,158383,158384,158386,158388,158390,158392,158394],{"class":74,"line":1623},[72,158385,1960],{"class":78},[72,158387,16133],{"class":82},[72,158389,2139],{"class":78},[72,158391,156575],{"class":362},[72,158393,120719],{"class":78},[72,158395,158396],{"class":82}," has_ticket:\n",[72,158398,158399,158401,158403,158405],{"class":74,"line":1629},[72,158400,31717],{"class":362},[72,158402,564],{"class":82},[72,158404,157937],{"class":366},[72,158406,570],{"class":82},[531,158408,158410],{"id":158409},"_362-or","3.6.2 or",[15,158412,158413],{},"只要一个条件成立就成立。",[63,158415,158417],{"className":65,"code":158416,"language":67,"meta":68,"style":68},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[34,158418,158419,158428,158437,158441,158453],{"__ignoreMap":68},[72,158420,158421,158424,158426],{"class":74,"line":75},[72,158422,158423],{"class":82},"is_vip ",[72,158425,609],{"class":78},[72,158427,126097],{"class":362},[72,158429,158430,158433,158435],{"class":74,"line":370},[72,158431,158432],{"class":82},"coupon ",[72,158434,609],{"class":78},[72,158436,153889],{"class":362},[72,158438,158439],{"class":74,"line":1608},[72,158440,2828],{"emptyLinePlaceholder":490},[72,158442,158443,158445,158448,158450],{"class":74,"line":1623},[72,158444,1960],{"class":78},[72,158446,158447],{"class":82}," is_vip ",[72,158449,115490],{"class":78},[72,158451,158452],{"class":82}," coupon:\n",[72,158454,158455,158457,158459,158462],{"class":74,"line":1629},[72,158456,31717],{"class":362},[72,158458,564],{"class":82},[72,158460,158461],{"class":366},"\"可以享受优惠\"",[72,158463,570],{"class":82},[531,158465,158467],{"id":158466},"_363-not","3.6.3 not",[15,158469,158470],{},"取反。",[63,158472,158474],{"className":65,"code":158473,"language":67,"meta":68,"style":68},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[34,158475,158476,158485,158489,158498],{"__ignoreMap":68},[72,158477,158478,158481,158483],{"class":74,"line":75},[72,158479,158480],{"class":82},"is_closed ",[72,158482,609],{"class":78},[72,158484,126097],{"class":362},[72,158486,158487],{"class":74,"line":370},[72,158488,2828],{"emptyLinePlaceholder":490},[72,158490,158491,158493,158495],{"class":74,"line":1608},[72,158492,1960],{"class":78},[72,158494,39348],{"class":78},[72,158496,158497],{"class":82}," is_closed:\n",[72,158499,158500,158502,158504,158507],{"class":74,"line":1623},[72,158501,31717],{"class":362},[72,158503,564],{"class":82},[72,158505,158506],{"class":366},"\"店铺营业中\"",[72,158508,570],{"class":82},[85,158510,158512],{"id":158511},"_37-链式比较","3.7 链式比较",[15,158514,158515],{},"Python 支持链式比较：",[63,158517,158519],{"className":65,"code":158518,"language":67,"meta":68,"style":68},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[34,158520,158521,158530,158534,158551],{"__ignoreMap":68},[72,158522,158523,158525,158527],{"class":74,"line":75},[72,158524,155648],{"class":82},[72,158526,609],{"class":78},[72,158528,158529],{"class":362}," 85\n",[72,158531,158532],{"class":74,"line":370},[72,158533,2828],{"emptyLinePlaceholder":490},[72,158535,158536,158538,158540,158543,158545,158547,158549],{"class":74,"line":1608},[72,158537,1960],{"class":78},[72,158539,4521],{"class":362},[72,158541,158542],{"class":78}," \u003C=",[72,158544,158073],{"class":82},[72,158546,2017],{"class":78},[72,158548,6180],{"class":362},[72,158550,4167],{"class":82},[72,158552,158553,158555,158557,158560],{"class":74,"line":1623},[72,158554,31717],{"class":362},[72,158556,564],{"class":82},[72,158558,158559],{"class":366},"\"成绩合法\"",[72,158561,570],{"class":82},[15,158563,158564],{},"等价于：",[63,158566,158568],{"className":65,"code":158567,"language":67,"meta":68,"style":68},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[34,158569,158570,158590],{"__ignoreMap":68},[72,158571,158572,158574,158576,158578,158580,158582,158584,158586,158588],{"class":74,"line":75},[72,158573,1960],{"class":78},[72,158575,158073],{"class":82},[72,158577,2139],{"class":78},[72,158579,4521],{"class":362},[72,158581,120719],{"class":78},[72,158583,158073],{"class":82},[72,158585,2017],{"class":78},[72,158587,6180],{"class":362},[72,158589,4167],{"class":82},[72,158591,158592,158594,158596,158598],{"class":74,"line":370},[72,158593,31717],{"class":362},[72,158595,564],{"class":82},[72,158597,158559],{"class":366},[72,158599,570],{"class":82},[85,158601,158603],{"id":158602},"_38-真值和假值","3.8 真值和假值",[15,158605,116867,158606,158608],{},[34,158607,1960],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[15,158610,158611],{},"假值：",[63,158613,158615],{"className":65,"code":158614,"language":67,"meta":68,"style":68},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[34,158616,158617,158621,158626,158630,158634,158639,158643,158647,158652],{"__ignoreMap":68},[72,158618,158619],{"class":74,"line":75},[72,158620,157807],{"class":362},[72,158622,158623],{"class":74,"line":370},[72,158624,158625],{"class":362},"None\n",[72,158627,158628],{"class":74,"line":1608},[72,158629,3513],{"class":362},[72,158631,158632],{"class":74,"line":1623},[72,158633,32760],{"class":362},[72,158635,158636],{"class":74,"line":1629},[72,158637,158638],{"class":366},"\"\"\n",[72,158640,158641],{"class":74,"line":1643},[72,158642,32775],{"class":82},[72,158644,158645],{"class":74,"line":1649},[72,158646,2404],{"class":82},[72,158648,158649],{"class":74,"line":1740},[72,158650,158651],{"class":82},"{}\n",[72,158653,158654,158656],{"class":74,"line":1746},[72,158655,155580],{"class":362},[72,158657,2404],{"class":82},[15,158659,15561],{},[63,158661,158663],{"className":65,"code":158662,"language":67,"meta":68,"style":68},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[34,158664,158665,158679,158683,158690,158710,158716],{"__ignoreMap":68},[72,158666,158667,158669,158671,158673,158675,158677],{"class":74,"line":75},[72,158668,146826],{"class":82},[72,158670,609],{"class":78},[72,158672,61023],{"class":362},[72,158674,564],{"class":82},[72,158676,152669],{"class":366},[72,158678,570],{"class":82},[72,158680,158681],{"class":74,"line":370},[72,158682,2828],{"emptyLinePlaceholder":490},[72,158684,158685,158687],{"class":74,"line":1608},[72,158686,1960],{"class":78},[72,158688,158689],{"class":82}," name:\n",[72,158691,158692,158694,158696,158698,158700,158702,158704,158706,158708],{"class":74,"line":1623},[72,158693,31717],{"class":362},[72,158695,564],{"class":82},[72,158697,615],{"class":78},[72,158699,157344],{"class":366},[72,158701,1450],{"class":362},[72,158703,80228],{"class":82},[72,158705,1500],{"class":362},[72,158707,805],{"class":366},[72,158709,570],{"class":82},[72,158711,158712,158714],{"class":74,"line":1629},[72,158713,2130],{"class":78},[72,158715,4167],{"class":82},[72,158717,158718,158720,158722,158725],{"class":74,"line":1643},[72,158719,31717],{"class":362},[72,158721,564],{"class":82},[72,158723,158724],{"class":366},"\"姓名不能为空\"",[72,158726,570],{"class":82},[85,158728,158730],{"id":158729},"_39-match语句","3.9 match语句",[15,158732,158733,158734,158736],{},"Python 3.10 开始支持 ",[34,158735,71683],{},"。它适合处理固定选项。",[63,158738,158740],{"className":65,"code":158739,"language":67,"meta":68,"style":68},"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",[34,158741,158742,158758,158762,158769,158779,158790,158799,158810,158819,158830,158837],{"__ignoreMap":68},[72,158743,158744,158747,158749,158751,158753,158756],{"class":74,"line":75},[72,158745,158746],{"class":82},"command ",[72,158748,609],{"class":78},[72,158750,61023],{"class":362},[72,158752,564],{"class":82},[72,158754,158755],{"class":366},"\"请输入命令:\"",[72,158757,570],{"class":82},[72,158759,158760],{"class":74,"line":370},[72,158761,2828],{"emptyLinePlaceholder":490},[72,158763,158764,158766],{"class":74,"line":1608},[72,158765,71683],{"class":78},[72,158767,158768],{"class":82}," command:\n",[72,158770,158771,158774,158777],{"class":74,"line":1623},[72,158772,158773],{"class":78},"    case",[72,158775,158776],{"class":366}," \"start\"",[72,158778,4167],{"class":82},[72,158780,158781,158783,158785,158788],{"class":74,"line":1629},[72,158782,32869],{"class":362},[72,158784,564],{"class":82},[72,158786,158787],{"class":366},"\"启动\"",[72,158789,570],{"class":82},[72,158791,158792,158794,158797],{"class":74,"line":1643},[72,158793,158773],{"class":78},[72,158795,158796],{"class":366}," \"stop\"",[72,158798,4167],{"class":82},[72,158800,158801,158803,158805,158808],{"class":74,"line":1649},[72,158802,32869],{"class":362},[72,158804,564],{"class":82},[72,158806,158807],{"class":366},"\"停止\"",[72,158809,570],{"class":82},[72,158811,158812,158814,158817],{"class":74,"line":1740},[72,158813,158773],{"class":78},[72,158815,158816],{"class":366}," \"restart\"",[72,158818,4167],{"class":82},[72,158820,158821,158823,158825,158828],{"class":74,"line":1746},[72,158822,32869],{"class":362},[72,158824,564],{"class":82},[72,158826,158827],{"class":366},"\"重启\"",[72,158829,570],{"class":82},[72,158831,158832,158834],{"class":74,"line":1758},[72,158833,158773],{"class":78},[72,158835,158836],{"class":82}," _:\n",[72,158838,158839,158841,158843,158846],{"class":74,"line":2041},[72,158840,32869],{"class":362},[72,158842,564],{"class":82},[72,158844,158845],{"class":366},"\"未知命令\"",[72,158847,570],{"class":82},[15,158849,158850,158851,158853,158854,158856],{},"入门阶段掌握 ",[34,158852,154948],{}," 更重要，",[34,158855,71683],{}," 可以作为补充。",[85,158858,158860],{"id":158859},"_310-小案例成绩等级","3.10 小案例：成绩等级",[15,158862,123582],{},[22,158864,158865,158868,158871],{},[25,158866,158867],{},"输入成绩。",[25,158869,158870],{},"判断成绩是否合法。",[25,158872,158873],{},"输出等级。",[15,158875,10461],{},[63,158877,158879],{"className":65,"code":158878,"language":67,"meta":68,"style":68},"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",[34,158880,158881,158899,158903,158921,158932,158944,158955,158967,158978,158991,159002,159014,159025,159031],{"__ignoreMap":68},[72,158882,158883,158885,158887,158889,158891,158893,158895,158897],{"class":74,"line":75},[72,158884,155648],{"class":82},[72,158886,609],{"class":78},[72,158888,110197],{"class":362},[72,158890,564],{"class":82},[72,158892,54239],{"class":362},[72,158894,564],{"class":82},[72,158896,152699],{"class":366},[72,158898,30915],{"class":82},[72,158900,158901],{"class":74,"line":370},[72,158902,2828],{"emptyLinePlaceholder":490},[72,158904,158905,158907,158909,158911,158913,158915,158917,158919],{"class":74,"line":1608},[72,158906,1960],{"class":78},[72,158908,39348],{"class":78},[72,158910,4521],{"class":362},[72,158912,158542],{"class":78},[72,158914,158073],{"class":82},[72,158916,2017],{"class":78},[72,158918,6180],{"class":362},[72,158920,4167],{"class":82},[72,158922,158923,158925,158927,158930],{"class":74,"line":1623},[72,158924,31717],{"class":362},[72,158926,564],{"class":82},[72,158928,158929],{"class":366},"\"成绩不合法\"",[72,158931,570],{"class":82},[72,158933,158934,158936,158938,158940,158942],{"class":74,"line":1629},[72,158935,158096],{"class":78},[72,158937,158073],{"class":82},[72,158939,2139],{"class":78},[72,158941,158078],{"class":362},[72,158943,4167],{"class":82},[72,158945,158946,158948,158950,158953],{"class":74,"line":1643},[72,158947,31717],{"class":362},[72,158949,564],{"class":82},[72,158951,158952],{"class":366},"\"等级:A\"",[72,158954,570],{"class":82},[72,158956,158957,158959,158961,158963,158965],{"class":74,"line":1649},[72,158958,158096],{"class":78},[72,158960,158073],{"class":82},[72,158962,2139],{"class":78},[72,158964,158103],{"class":362},[72,158966,4167],{"class":82},[72,158968,158969,158971,158973,158976],{"class":74,"line":1740},[72,158970,31717],{"class":362},[72,158972,564],{"class":82},[72,158974,158975],{"class":366},"\"等级:B\"",[72,158977,570],{"class":82},[72,158979,158980,158982,158984,158986,158989],{"class":74,"line":1746},[72,158981,158096],{"class":78},[72,158983,158073],{"class":82},[72,158985,2139],{"class":78},[72,158987,158988],{"class":362}," 70",[72,158990,4167],{"class":82},[72,158992,158993,158995,158997,159000],{"class":74,"line":1758},[72,158994,31717],{"class":362},[72,158996,564],{"class":82},[72,158998,158999],{"class":366},"\"等级:C\"",[72,159001,570],{"class":82},[72,159003,159004,159006,159008,159010,159012],{"class":74,"line":2041},[72,159005,158096],{"class":78},[72,159007,158073],{"class":82},[72,159009,2139],{"class":78},[72,159011,158127],{"class":362},[72,159013,4167],{"class":82},[72,159015,159016,159018,159020,159023],{"class":74,"line":2046},[72,159017,31717],{"class":362},[72,159019,564],{"class":82},[72,159021,159022],{"class":366},"\"等级:D\"",[72,159024,570],{"class":82},[72,159026,159027,159029],{"class":74,"line":2052},[72,159028,2130],{"class":78},[72,159030,4167],{"class":82},[72,159032,159033,159035,159037,159040],{"class":74,"line":2057},[72,159034,31717],{"class":362},[72,159036,564],{"class":82},[72,159038,159039],{"class":366},"\"等级:E\"",[72,159041,570],{"class":82},[85,159043,159045],{"id":159044},"_311-小案例会员折扣","3.11 小案例：会员折扣",[15,159047,123582],{},[22,159049,159050,159053,159056,159059],{},[25,159051,159052],{},"输入消费金额。",[25,159054,159055],{},"输入会员等级，普通、银卡、金卡。",[25,159057,159058],{},"普通不打折，银卡 9 折，金卡 8 折。",[25,159060,159061],{},"满 500 再减 50。",[15,159063,10461],{},[63,159065,159067],{"className":65,"code":159066,"language":67,"meta":68,"style":68},"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",[34,159068,159069,159089,159105,159109,159117,159121,159135,159145,159158,159167,159180,159188,159194,159205,159209,159223,159227,159241,159251,159255],{"__ignoreMap":68},[72,159070,159071,159074,159076,159078,159080,159082,159084,159087],{"class":74,"line":75},[72,159072,159073],{"class":82},"amount ",[72,159075,609],{"class":78},[72,159077,110197],{"class":362},[72,159079,564],{"class":82},[72,159081,54239],{"class":362},[72,159083,564],{"class":82},[72,159085,159086],{"class":366},"\"请输入消费金额:\"",[72,159088,30915],{"class":82},[72,159090,159091,159094,159096,159098,159100,159103],{"class":74,"line":370},[72,159092,159093],{"class":82},"level ",[72,159095,609],{"class":78},[72,159097,61023],{"class":362},[72,159099,564],{"class":82},[72,159101,159102],{"class":366},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[72,159104,570],{"class":82},[72,159106,159107],{"class":74,"line":1608},[72,159108,2828],{"emptyLinePlaceholder":490},[72,159110,159111,159113,159115],{"class":74,"line":1623},[72,159112,157526],{"class":82},[72,159114,609],{"class":78},[72,159116,56117],{"class":362},[72,159118,159119],{"class":74,"line":1629},[72,159120,2828],{"emptyLinePlaceholder":490},[72,159122,159123,159125,159128,159130,159133],{"class":74,"line":1643},[72,159124,1960],{"class":78},[72,159126,159127],{"class":82}," level ",[72,159129,3377],{"class":78},[72,159131,159132],{"class":366}," \"银卡\"",[72,159134,4167],{"class":82},[72,159136,159137,159140,159142],{"class":74,"line":1649},[72,159138,159139],{"class":82},"    discount ",[72,159141,609],{"class":78},[72,159143,159144],{"class":362}," 0.9\n",[72,159146,159147,159149,159151,159153,159156],{"class":74,"line":1740},[72,159148,158096],{"class":78},[72,159150,159127],{"class":82},[72,159152,3377],{"class":78},[72,159154,159155],{"class":366}," \"金卡\"",[72,159157,4167],{"class":82},[72,159159,159160,159162,159164],{"class":74,"line":1746},[72,159161,159139],{"class":82},[72,159163,609],{"class":78},[72,159165,159166],{"class":362}," 0.8\n",[72,159168,159169,159171,159173,159175,159178],{"class":74,"line":1758},[72,159170,158096],{"class":78},[72,159172,159127],{"class":82},[72,159174,3377],{"class":78},[72,159176,159177],{"class":366}," \"普通\"",[72,159179,4167],{"class":82},[72,159181,159182,159184,159186],{"class":74,"line":2041},[72,159183,159139],{"class":82},[72,159185,609],{"class":78},[72,159187,56117],{"class":362},[72,159189,159190,159192],{"class":74,"line":2046},[72,159191,2130],{"class":78},[72,159193,4167],{"class":82},[72,159195,159196,159198,159200,159203],{"class":74,"line":2052},[72,159197,31717],{"class":362},[72,159199,564],{"class":82},[72,159201,159202],{"class":366},"\"会员等级输入错误，按普通会员计算\"",[72,159204,570],{"class":82},[72,159206,159207],{"class":74,"line":2057},[72,159208,2828],{"emptyLinePlaceholder":490},[72,159210,159211,159214,159216,159219,159221],{"class":74,"line":2071},[72,159212,159213],{"class":82},"pay ",[72,159215,609],{"class":78},[72,159217,159218],{"class":82}," amount ",[72,159220,1009],{"class":78},[72,159222,157565],{"class":82},[72,159224,159225],{"class":74,"line":2076},[72,159226,2828],{"emptyLinePlaceholder":490},[72,159228,159229,159231,159234,159236,159239],{"class":74,"line":2082},[72,159230,1960],{"class":78},[72,159232,159233],{"class":82}," pay ",[72,159235,2139],{"class":78},[72,159237,159238],{"class":362}," 500",[72,159240,4167],{"class":82},[72,159242,159243,159246,159248],{"class":74,"line":2103},[72,159244,159245],{"class":82},"    pay ",[72,159247,150542],{"class":78},[72,159249,159250],{"class":362}," 50\n",[72,159252,159253],{"class":74,"line":2108},[72,159254,2828],{"emptyLinePlaceholder":490},[72,159256,159257,159259,159261,159263,159265,159267,159270,159272,159274,159276],{"class":74,"line":2122},[72,159258,30833],{"class":362},[72,159260,564],{"class":82},[72,159262,615],{"class":78},[72,159264,157646],{"class":366},[72,159266,1450],{"class":362},[72,159268,159269],{"class":82},"pay",[72,159271,157449],{"class":78},[72,159273,1500],{"class":362},[72,159275,157302],{"class":366},[72,159277,570],{"class":82},[85,159279,159281],{"id":159280},"_312-易错点","3.12 易错点",[22,159283,159284,159287,159290,159293,159298],{},[25,159285,159286],{},"冒号不能漏。",[25,159288,159289],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[25,159291,159292],{},"多分支判断要注意顺序。",[25,159294,159295,159296,28807],{},"判断相等用 ",[34,159297,3377],{},[25,159299,159300],{},"字符串比较区分大小写：",[63,159302,159304],{"className":65,"code":159303,"language":67,"meta":68,"style":68},"\"Y\" == \"y\"  # False\n",[34,159305,159306],{"__ignoreMap":68},[72,159307,159308,159311,159313,159315],{"class":74,"line":75},[72,159309,159310],{"class":366},"\"Y\"",[72,159312,101965],{"class":78},[72,159314,158295],{"class":366},[72,159316,159317],{"class":621},"  # False\n",[15,159319,159320],{},"可转换后再判断：",[63,159322,159324],{"className":65,"code":159323,"language":67,"meta":68,"style":68},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[34,159325,159326,159343,159356],{"__ignoreMap":68},[72,159327,159328,159331,159333,159335,159337,159340],{"class":74,"line":75},[72,159329,159330],{"class":82},"answer ",[72,159332,609],{"class":78},[72,159334,61023],{"class":362},[72,159336,564],{"class":82},[72,159338,159339],{"class":366},"\"是否继续(y\u002Fn):\"",[72,159341,159342],{"class":82},").lower()\n",[72,159344,159345,159347,159350,159352,159354],{"class":74,"line":370},[72,159346,1960],{"class":78},[72,159348,159349],{"class":82}," answer ",[72,159351,3377],{"class":78},[72,159353,158295],{"class":366},[72,159355,4167],{"class":82},[72,159357,159358,159360,159362,159365],{"class":74,"line":1608},[72,159359,31717],{"class":362},[72,159361,564],{"class":82},[72,159363,159364],{"class":366},"\"继续\"",[72,159366,570],{"class":82},[85,159368,159370],{"id":159369},"_313-本章练习","3.13 本章练习",[22,159372,159373,159376,159379,159382,159392],{},[25,159374,159375],{},"输入年龄，判断是否成年。",[25,159377,159378],{},"输入年份，判断是否为闰年。",[25,159380,159381],{},"输入三个数字，输出最大值。",[25,159383,159384,159385,159388,159389,159391],{},"写登录判断：用户名是 ",[34,159386,159387],{},"admin"," 且密码是 ",[34,159390,15510],{}," 才登录成功。",[25,159393,159394],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[473,159396,159397],{},"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":68,"searchDepth":370,"depth":370,"links":159399},[159400,159401,159402,159403,159404,159405,159410,159411,159412,159413,159414,159415,159416],{"id":157788,"depth":370,"text":157789},{"id":157841,"depth":370,"text":157842},{"id":157945,"depth":370,"text":157946},{"id":158035,"depth":370,"text":158036},{"id":158225,"depth":370,"text":158226},{"id":158348,"depth":370,"text":158349,"children":159406},[159407,159408,159409],{"id":158352,"depth":1608,"text":158353},{"id":158409,"depth":1608,"text":158410},{"id":158466,"depth":1608,"text":158467},{"id":158511,"depth":370,"text":158512},{"id":158602,"depth":370,"text":158603},{"id":158729,"depth":370,"text":158730},{"id":158859,"depth":370,"text":158860},{"id":159044,"depth":370,"text":159045},{"id":159280,"depth":370,"text":159281},{"id":159369,"depth":370,"text":159370},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157780,"description":23802},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159423,"title":159424,"body":159425,"description":23802,"extension":487,"meta":161194,"navigation":490,"path":161195,"seo":161196,"stem":161197,"__hash__":161198},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159426,"toc":161174},[159427,159430,159434,159440,159443,159460,159464,159466,159483,159485,159530,159532,159549,159553,159556,159622,159625,159643,159647,159808,159817,159821,159825,159830,159877,159879,159885,159889,159894,159941,159943,159949,159953,159958,159994,159997,160044,160048,160054,160112,160117,160148,160153,160157,160212,160215,160287,160290,160349,160353,160356,160431,160434,160438,160544,160547,160573,160577,160589,160658,160661,160753,160757,160759,160770,160772,160902,160906,161108,161116,161120,161150,161154,161171],[10,159428,159424],{"id":159429},"_4-循环语句",[85,159431,159433],{"id":159432},"_41-为什么需要循环","4.1 为什么需要循环",[15,159435,159436,159437,159439],{},"如果要输出 1 到 100，不应该写 100 行 ",[34,159438,146762],{},"，而应该用循环。",[15,159441,159442],{},"循环适合处理重复任务：",[22,159444,159445,159448,159451,159454,159457],{},[25,159446,159447],{},"重复输出。",[25,159449,159450],{},"重复输入。",[25,159452,159453],{},"遍历数据。",[25,159455,159456],{},"持续执行菜单。",[25,159458,159459],{},"批量处理文件或数据。",[85,159461,159463],{"id":159462},"_42-while循环","4.2 while循环",[15,159465,5609],{},[63,159467,159469],{"className":65,"code":159468,"language":67,"meta":68,"style":68},"while 条件:\n    循环体\n",[34,159470,159471,159478],{"__ignoreMap":68},[72,159472,159473,159475],{"class":74,"line":75},[72,159474,109063],{"class":78},[72,159476,159477],{"class":82}," 条件:\n",[72,159479,159480],{"class":74,"line":370},[72,159481,159482],{"class":82},"    循环体\n",[15,159484,15561],{},[63,159486,159488],{"className":65,"code":159487,"language":67,"meta":68,"style":68},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[34,159489,159490,159498,159502,159514,159521],{"__ignoreMap":68},[72,159491,159492,159494,159496],{"class":74,"line":75},[72,159493,100565],{"class":82},[72,159495,609],{"class":78},[72,159497,56117],{"class":362},[72,159499,159500],{"class":74,"line":370},[72,159501,2828],{"emptyLinePlaceholder":490},[72,159503,159504,159506,159508,159510,159512],{"class":74,"line":1608},[72,159505,109063],{"class":78},[72,159507,9864],{"class":82},[72,159509,2017],{"class":78},[72,159511,2576],{"class":362},[72,159513,4167],{"class":82},[72,159515,159516,159518],{"class":74,"line":1623},[72,159517,31717],{"class":362},[72,159519,159520],{"class":82},"(i)\n",[72,159522,159523,159526,159528],{"class":74,"line":1629},[72,159524,159525],{"class":82},"    i ",[72,159527,9903],{"class":78},[72,159529,56117],{"class":362},[15,159531,81347],{},[22,159533,159534,159540,159543,159546],{},[25,159535,159536,159537,28807],{},"判断条件 ",[34,159538,159539],{},"i \u003C= 5",[25,159541,159542],{},"条件成立，执行循环体。",[25,159544,159545],{},"执行完后回到条件判断。",[25,159547,159548],{},"条件不成立，退出循环。",[85,159550,159552],{"id":159551},"_43-while累加","4.3 while累加",[15,159554,159555],{},"计算 1 到 100 的和：",[63,159557,159559],{"className":65,"code":159558,"language":67,"meta":68,"style":68},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[34,159560,159561,159569,159577,159581,159593,159603,159611,159615],{"__ignoreMap":68},[72,159562,159563,159565,159567],{"class":74,"line":75},[72,159564,100565],{"class":82},[72,159566,609],{"class":78},[72,159568,56117],{"class":362},[72,159570,159571,159573,159575],{"class":74,"line":370},[72,159572,157550],{"class":82},[72,159574,609],{"class":78},[72,159576,47751],{"class":362},[72,159578,159579],{"class":74,"line":1608},[72,159580,2828],{"emptyLinePlaceholder":490},[72,159582,159583,159585,159587,159589,159591],{"class":74,"line":1623},[72,159584,109063],{"class":78},[72,159586,9864],{"class":82},[72,159588,2017],{"class":78},[72,159590,6180],{"class":362},[72,159592,4167],{"class":82},[72,159594,159595,159598,159600],{"class":74,"line":1629},[72,159596,159597],{"class":82},"    total ",[72,159599,9903],{"class":78},[72,159601,159602],{"class":82}," i\n",[72,159604,159605,159607,159609],{"class":74,"line":1643},[72,159606,159525],{"class":82},[72,159608,9903],{"class":78},[72,159610,56117],{"class":362},[72,159612,159613],{"class":74,"line":1649},[72,159614,2828],{"emptyLinePlaceholder":490},[72,159616,159617,159619],{"class":74,"line":1740},[72,159618,30833],{"class":362},[72,159620,159621],{"class":82},"(total)\n",[15,159623,159624],{},"核心思想：",[22,159626,159627,159632,159637],{},[25,159628,159629,159631],{},[34,159630,995],{}," 控制循环次数。",[25,159633,159634,159636],{},[34,159635,157651],{}," 保存累加结果。",[25,159638,159639,159640,159642],{},"每轮循环都要更新 ",[34,159641,995],{},"，否则可能死循环。",[85,159644,159646],{"id":159645},"_44-while猜数字","4.4 while猜数字",[63,159648,159650],{"className":65,"code":159649,"language":67,"meta":68,"style":68},"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",[34,159651,159652,159658,159662,159679,159687,159691,159699,159719,159728,159732,159744,159755,159765,159776,159782,159804],{"__ignoreMap":68},[72,159653,159654,159656],{"class":74,"line":75},[72,159655,79],{"class":78},[72,159657,45746],{"class":82},[72,159659,159660],{"class":74,"line":370},[72,159661,2828],{"emptyLinePlaceholder":490},[72,159663,159664,159666,159668,159671,159673,159675,159677],{"class":74,"line":1608},[72,159665,159330],{"class":82},[72,159667,609],{"class":78},[72,159669,159670],{"class":82}," random.randint(",[72,159672,772],{"class":362},[72,159674,12861],{"class":82},[72,159676,865],{"class":362},[72,159678,570],{"class":82},[72,159680,159681,159683,159685],{"class":74,"line":1623},[72,159682,146981],{"class":82},[72,159684,609],{"class":78},[72,159686,47751],{"class":362},[72,159688,159689],{"class":74,"line":1629},[72,159690,2828],{"emptyLinePlaceholder":490},[72,159692,159693,159695,159697],{"class":74,"line":1643},[72,159694,109063],{"class":78},[72,159696,95709],{"class":362},[72,159698,4167],{"class":82},[72,159700,159701,159704,159706,159708,159710,159712,159714,159717],{"class":74,"line":1649},[72,159702,159703],{"class":82},"    guess ",[72,159705,609],{"class":78},[72,159707,2810],{"class":362},[72,159709,564],{"class":82},[72,159711,54239],{"class":362},[72,159713,564],{"class":82},[72,159715,159716],{"class":366},"\"请输入1到100之间的数字:\"",[72,159718,30915],{"class":82},[72,159720,159721,159724,159726],{"class":74,"line":1740},[72,159722,159723],{"class":82},"    count ",[72,159725,9903],{"class":78},[72,159727,56117],{"class":362},[72,159729,159730],{"class":74,"line":1746},[72,159731,2828],{"emptyLinePlaceholder":490},[72,159733,159734,159736,159739,159741],{"class":74,"line":1758},[72,159735,3529],{"class":78},[72,159737,159738],{"class":82}," guess ",[72,159740,1514],{"class":78},[72,159742,159743],{"class":82}," answer:\n",[72,159745,159746,159748,159750,159753],{"class":74,"line":2041},[72,159747,32869],{"class":362},[72,159749,564],{"class":82},[72,159751,159752],{"class":366},"\"猜大了\"",[72,159754,570],{"class":82},[72,159756,159757,159759,159761,159763],{"class":74,"line":2046},[72,159758,39711],{"class":78},[72,159760,159738],{"class":82},[72,159762,1464],{"class":78},[72,159764,159743],{"class":82},[72,159766,159767,159769,159771,159774],{"class":74,"line":2052},[72,159768,32869],{"class":362},[72,159770,564],{"class":82},[72,159772,159773],{"class":366},"\"猜小了\"",[72,159775,570],{"class":82},[72,159777,159778,159780],{"class":74,"line":2057},[72,159779,158312],{"class":78},[72,159781,4167],{"class":82},[72,159783,159784,159786,159788,159790,159793,159795,159797,159799,159802],{"class":74,"line":2071},[72,159785,32869],{"class":362},[72,159787,564],{"class":82},[72,159789,615],{"class":78},[72,159791,159792],{"class":366},"\"猜对了，一共猜了",[72,159794,1450],{"class":362},[72,159796,84851],{"class":82},[72,159798,1500],{"class":362},[72,159800,159801],{"class":366},"次\"",[72,159803,570],{"class":82},[72,159805,159806],{"class":74,"line":2076},[72,159807,32045],{"class":78},[15,159809,159810,159813,159814,159816],{},[34,159811,159812],{},"while True"," 表示无限循环，通常配合 ",[34,159815,2481],{}," 使用。",[85,159818,159820],{"id":159819},"_45-break和continue","4.5 break和continue",[531,159822,159824],{"id":159823},"_451-break","4.5.1 break",[15,159826,159827,159829],{},[34,159828,2481],{}," 直接结束整个循环。",[63,159831,159833],{"className":65,"code":159832,"language":67,"meta":68,"style":68},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[34,159834,159835,159855,159867,159871],{"__ignoreMap":68},[72,159836,159837,159839,159841,159843,159845,159847,159849,159851,159853],{"class":74,"line":75},[72,159838,3453],{"class":78},[72,159840,9864],{"class":82},[72,159842,26465],{"class":78},[72,159844,32861],{"class":362},[72,159846,564],{"class":82},[72,159848,772],{"class":362},[72,159850,12861],{"class":82},[72,159852,898],{"class":362},[72,159854,31204],{"class":82},[72,159856,159857,159859,159861,159863,159865],{"class":74,"line":370},[72,159858,3529],{"class":78},[72,159860,9864],{"class":82},[72,159862,3377],{"class":78},[72,159864,78488],{"class":362},[72,159866,4167],{"class":82},[72,159868,159869],{"class":74,"line":1608},[72,159870,32045],{"class":78},[72,159872,159873,159875],{"class":74,"line":1623},[72,159874,31717],{"class":362},[72,159876,159520],{"class":82},[15,159878,146747],{},[63,159880,159883],{"className":159881,"code":159882,"language":127,"meta":68},[125],"1\n2\n",[34,159884,159882],{"__ignoreMap":68},[531,159886,159888],{"id":159887},"_452-continue","4.5.2 continue",[15,159890,159891,159893],{},[34,159892,154962],{}," 跳过本轮剩余代码，进入下一轮循环。",[63,159895,159897],{"className":65,"code":159896,"language":67,"meta":68,"style":68},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[34,159898,159899,159919,159931,159935],{"__ignoreMap":68},[72,159900,159901,159903,159905,159907,159909,159911,159913,159915,159917],{"class":74,"line":75},[72,159902,3453],{"class":78},[72,159904,9864],{"class":82},[72,159906,26465],{"class":78},[72,159908,32861],{"class":362},[72,159910,564],{"class":82},[72,159912,772],{"class":362},[72,159914,12861],{"class":82},[72,159916,898],{"class":362},[72,159918,31204],{"class":82},[72,159920,159921,159923,159925,159927,159929],{"class":74,"line":370},[72,159922,3529],{"class":78},[72,159924,9864],{"class":82},[72,159926,3377],{"class":78},[72,159928,78488],{"class":362},[72,159930,4167],{"class":82},[72,159932,159933],{"class":74,"line":1608},[72,159934,148802],{"class":78},[72,159936,159937,159939],{"class":74,"line":1623},[72,159938,31717],{"class":362},[72,159940,159520],{"class":82},[15,159942,146747],{},[63,159944,159947],{"className":159945,"code":159946,"language":127,"meta":68},[125],"1\n2\n4\n5\n",[34,159948,159946],{"__ignoreMap":68},[85,159950,159952],{"id":159951},"_46-for循环","4.6 for循环",[15,159954,159955,159957],{},[34,159956,3453],{}," 常用于遍历序列。",[63,159959,159961],{"className":65,"code":159960,"language":67,"meta":68,"style":68},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[34,159962,159963,159972,159976,159987],{"__ignoreMap":68},[72,159964,159965,159967,159969],{"class":74,"line":75},[72,159966,146826],{"class":82},[72,159968,609],{"class":78},[72,159970,159971],{"class":366}," \"python\"\n",[72,159973,159974],{"class":74,"line":370},[72,159975,2828],{"emptyLinePlaceholder":490},[72,159977,159978,159980,159983,159985],{"class":74,"line":1608},[72,159979,3453],{"class":78},[72,159981,159982],{"class":82}," ch ",[72,159984,26465],{"class":78},[72,159986,158689],{"class":82},[72,159988,159989,159991],{"class":74,"line":1623},[72,159990,31717],{"class":362},[72,159992,159993],{"class":82},"(ch)\n",[15,159995,159996],{},"遍历列表：",[63,159998,160000],{"className":65,"code":159999,"language":67,"meta":68,"style":68},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[34,160001,160002,160024,160028,160038],{"__ignoreMap":68},[72,160003,160004,160007,160009,160011,160013,160015,160017,160019,160022],{"class":74,"line":75},[72,160005,160006],{"class":82},"students ",[72,160008,609],{"class":78},[72,160010,52644],{"class":82},[72,160012,150178],{"class":366},[72,160014,12861],{"class":82},[72,160016,151226],{"class":366},[72,160018,12861],{"class":82},[72,160020,160021],{"class":366},"\"小刚\"",[72,160023,33664],{"class":82},[72,160025,160026],{"class":74,"line":370},[72,160027,2828],{"emptyLinePlaceholder":490},[72,160029,160030,160032,160034,160036],{"class":74,"line":1608},[72,160031,3453],{"class":78},[72,160033,152427],{"class":82},[72,160035,26465],{"class":78},[72,160037,152432],{"class":82},[72,160039,160040,160042],{"class":74,"line":1623},[72,160041,31717],{"class":362},[72,160043,150332],{"class":82},[85,160045,160047],{"id":160046},"_47-range函数","4.7 range函数",[15,160049,160050,160053],{},[34,160051,160052],{},"range()"," 用于生成整数序列。",[63,160055,160057],{"className":65,"code":160056,"language":67,"meta":68,"style":68},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[34,160058,160059,160073,160091],{"__ignoreMap":68},[72,160060,160061,160063,160065,160067,160070],{"class":74,"line":75},[72,160062,33834],{"class":362},[72,160064,564],{"class":82},[72,160066,873],{"class":362},[72,160068,160069],{"class":82},")          ",[72,160071,160072],{"class":621},"# 0,1,2,3,4\n",[72,160074,160075,160077,160079,160081,160083,160085,160088],{"class":74,"line":370},[72,160076,33834],{"class":362},[72,160078,564],{"class":82},[72,160080,772],{"class":362},[72,160082,12861],{"class":82},[72,160084,873],{"class":362},[72,160086,160087],{"class":82},")       ",[72,160089,160090],{"class":621},"# 1,2,3,4\n",[72,160092,160093,160095,160097,160099,160101,160103,160105,160107,160109],{"class":74,"line":1608},[72,160094,33834],{"class":362},[72,160096,564],{"class":82},[72,160098,772],{"class":362},[72,160100,12861],{"class":82},[72,160102,1000],{"class":362},[72,160104,12861],{"class":82},[72,160106,640],{"class":362},[72,160108,155951],{"class":82},[72,160110,160111],{"class":621},"# 1,3,5,7,9\n",[15,160113,160114,160115,25040],{},"配合 ",[34,160116,3453],{},[63,160118,160120],{"className":65,"code":160119,"language":67,"meta":68,"style":68},"for i in range(1, 6):\n    print(i)\n",[34,160121,160122,160142],{"__ignoreMap":68},[72,160123,160124,160126,160128,160130,160132,160134,160136,160138,160140],{"class":74,"line":75},[72,160125,3453],{"class":78},[72,160127,9864],{"class":82},[72,160129,26465],{"class":78},[72,160131,32861],{"class":362},[72,160133,564],{"class":82},[72,160135,772],{"class":362},[72,160137,12861],{"class":82},[72,160139,898],{"class":362},[72,160141,31204],{"class":82},[72,160143,160144,160146],{"class":74,"line":370},[72,160145,31717],{"class":362},[72,160147,159520],{"class":82},[15,160149,9451,160150,160152],{},[34,160151,33834],{}," 的结束值不包含在内。",[85,160154,160156],{"id":160155},"_48-for循环求和","4.8 for循环求和",[63,160158,160160],{"className":65,"code":160159,"language":67,"meta":68,"style":68},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[34,160161,160162,160170,160174,160194,160202,160206],{"__ignoreMap":68},[72,160163,160164,160166,160168],{"class":74,"line":75},[72,160165,157550],{"class":82},[72,160167,609],{"class":78},[72,160169,47751],{"class":362},[72,160171,160172],{"class":74,"line":370},[72,160173,2828],{"emptyLinePlaceholder":490},[72,160175,160176,160178,160180,160182,160184,160186,160188,160190,160192],{"class":74,"line":1608},[72,160177,3453],{"class":78},[72,160179,9864],{"class":82},[72,160181,26465],{"class":78},[72,160183,32861],{"class":362},[72,160185,564],{"class":82},[72,160187,772],{"class":362},[72,160189,12861],{"class":82},[72,160191,891],{"class":362},[72,160193,31204],{"class":82},[72,160195,160196,160198,160200],{"class":74,"line":1623},[72,160197,159597],{"class":82},[72,160199,9903],{"class":78},[72,160201,159602],{"class":82},[72,160203,160204],{"class":74,"line":1629},[72,160205,2828],{"emptyLinePlaceholder":490},[72,160207,160208,160210],{"class":74,"line":1643},[72,160209,30833],{"class":362},[72,160211,159621],{"class":82},[15,160213,160214],{},"求偶数和：",[63,160216,160218],{"className":65,"code":160217,"language":67,"meta":68,"style":68},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[34,160219,160220,160228,160232,160252,160268,160277,160281],{"__ignoreMap":68},[72,160221,160222,160224,160226],{"class":74,"line":75},[72,160223,157550],{"class":82},[72,160225,609],{"class":78},[72,160227,47751],{"class":362},[72,160229,160230],{"class":74,"line":370},[72,160231,2828],{"emptyLinePlaceholder":490},[72,160233,160234,160236,160238,160240,160242,160244,160246,160248,160250],{"class":74,"line":1608},[72,160235,3453],{"class":78},[72,160237,9864],{"class":82},[72,160239,26465],{"class":78},[72,160241,32861],{"class":362},[72,160243,564],{"class":82},[72,160245,772],{"class":362},[72,160247,12861],{"class":82},[72,160249,891],{"class":362},[72,160251,31204],{"class":82},[72,160253,160254,160256,160258,160260,160262,160264,160266],{"class":74,"line":1623},[72,160255,3529],{"class":78},[72,160257,9864],{"class":82},[72,160259,882],{"class":78},[72,160261,15181],{"class":362},[72,160263,101965],{"class":78},[72,160265,4521],{"class":362},[72,160267,4167],{"class":82},[72,160269,160270,160273,160275],{"class":74,"line":1629},[72,160271,160272],{"class":82},"        total ",[72,160274,9903],{"class":78},[72,160276,159602],{"class":82},[72,160278,160279],{"class":74,"line":1643},[72,160280,2828],{"emptyLinePlaceholder":490},[72,160282,160283,160285],{"class":74,"line":1649},[72,160284,30833],{"class":362},[72,160286,159621],{"class":82},[15,160288,160289],{},"也可以：",[63,160291,160293],{"className":65,"code":160292,"language":67,"meta":68,"style":68},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[34,160294,160295,160303,160307,160331,160339,160343],{"__ignoreMap":68},[72,160296,160297,160299,160301],{"class":74,"line":75},[72,160298,157550],{"class":82},[72,160300,609],{"class":78},[72,160302,47751],{"class":362},[72,160304,160305],{"class":74,"line":370},[72,160306,2828],{"emptyLinePlaceholder":490},[72,160308,160309,160311,160313,160315,160317,160319,160321,160323,160325,160327,160329],{"class":74,"line":1608},[72,160310,3453],{"class":78},[72,160312,9864],{"class":82},[72,160314,26465],{"class":78},[72,160316,32861],{"class":362},[72,160318,564],{"class":82},[72,160320,640],{"class":362},[72,160322,12861],{"class":82},[72,160324,891],{"class":362},[72,160326,12861],{"class":82},[72,160328,640],{"class":362},[72,160330,31204],{"class":82},[72,160332,160333,160335,160337],{"class":74,"line":1623},[72,160334,159597],{"class":82},[72,160336,9903],{"class":78},[72,160338,159602],{"class":82},[72,160340,160341],{"class":74,"line":1629},[72,160342,2828],{"emptyLinePlaceholder":490},[72,160344,160345,160347],{"class":74,"line":1643},[72,160346,30833],{"class":362},[72,160348,159621],{"class":82},[85,160350,160352],{"id":160351},"_49-循环嵌套","4.9 循环嵌套",[15,160354,160355],{},"嵌套循环就是循环里面再写循环。",[63,160357,160359],{"className":65,"code":160358,"language":67,"meta":68,"style":68},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[34,160360,160361,160381,160401],{"__ignoreMap":68},[72,160362,160363,160365,160367,160369,160371,160373,160375,160377,160379],{"class":74,"line":75},[72,160364,3453],{"class":78},[72,160366,9864],{"class":82},[72,160368,26465],{"class":78},[72,160370,32861],{"class":362},[72,160372,564],{"class":82},[72,160374,772],{"class":362},[72,160376,12861],{"class":82},[72,160378,847],{"class":362},[72,160380,31204],{"class":82},[72,160382,160383,160385,160387,160389,160391,160393,160395,160397,160399],{"class":74,"line":370},[72,160384,3629],{"class":78},[72,160386,9926],{"class":82},[72,160388,26465],{"class":78},[72,160390,32861],{"class":362},[72,160392,564],{"class":82},[72,160394,772],{"class":362},[72,160396,12861],{"class":82},[72,160398,847],{"class":362},[72,160400,31204],{"class":82},[72,160402,160403,160405,160407,160409,160412,160414,160416,160418,160421,160423,160425,160427,160429],{"class":74,"line":1608},[72,160404,32869],{"class":362},[72,160406,564],{"class":82},[72,160408,615],{"class":78},[72,160410,160411],{"class":366},"\"i=",[72,160413,1450],{"class":362},[72,160415,995],{"class":82},[72,160417,1500],{"class":362},[72,160419,160420],{"class":366},", j=",[72,160422,1450],{"class":362},[72,160424,1021],{"class":82},[72,160426,1500],{"class":362},[72,160428,805],{"class":366},[72,160430,570],{"class":82},[15,160432,160433],{},"外层循环执行一次，内层循环执行完整一轮。",[85,160435,160437],{"id":160436},"_410-九九乘法表","4.10 九九乘法表",[63,160439,160441],{"className":65,"code":160440,"language":67,"meta":68,"style":68},"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",[34,160442,160443,160463,160486,160538],{"__ignoreMap":68},[72,160444,160445,160447,160449,160451,160453,160455,160457,160459,160461],{"class":74,"line":75},[72,160446,3453],{"class":78},[72,160448,9864],{"class":82},[72,160450,26465],{"class":78},[72,160452,32861],{"class":362},[72,160454,564],{"class":82},[72,160456,772],{"class":362},[72,160458,12861],{"class":82},[72,160460,1000],{"class":362},[72,160462,31204],{"class":82},[72,160464,160465,160467,160469,160471,160473,160475,160477,160480,160482,160484],{"class":74,"line":370},[72,160466,3629],{"class":78},[72,160468,9926],{"class":82},[72,160470,26465],{"class":78},[72,160472,32861],{"class":362},[72,160474,564],{"class":82},[72,160476,772],{"class":362},[72,160478,160479],{"class":82},", i ",[72,160481,1035],{"class":78},[72,160483,25540],{"class":362},[72,160485,31204],{"class":82},[72,160487,160488,160490,160492,160494,160496,160498,160500,160502,160504,160506,160508,160510,160512,160514,160516,160518,160520,160522,160524,160526,160528,160530,160532,160534,160536],{"class":74,"line":1608},[72,160489,32869],{"class":362},[72,160491,564],{"class":82},[72,160493,615],{"class":78},[72,160495,805],{"class":366},[72,160497,1450],{"class":362},[72,160499,1021],{"class":82},[72,160501,1500],{"class":362},[72,160503,1009],{"class":366},[72,160505,1450],{"class":362},[72,160507,995],{"class":82},[72,160509,1500],{"class":362},[72,160511,609],{"class":366},[72,160513,1450],{"class":362},[72,160515,100565],{"class":82},[72,160517,1009],{"class":78},[72,160519,3838],{"class":82},[72,160521,1500],{"class":362},[72,160523,805],{"class":366},[72,160525,12861],{"class":82},[72,160527,46219],{"class":5642},[72,160529,609],{"class":78},[72,160531,805],{"class":366},[72,160533,1659],{"class":362},[72,160535,805],{"class":366},[72,160537,570],{"class":82},[72,160539,160540,160542],{"class":74,"line":1623},[72,160541,31717],{"class":362},[72,160543,2404],{"class":82},[15,160545,160546],{},"关键点：",[22,160548,160549,160555,160561,160567],{},[25,160550,160551,160552,160554],{},"外层 ",[34,160553,995],{}," 控制行。",[25,160556,160557,160558,160560],{},"内层 ",[34,160559,1021],{}," 控制列。",[25,160562,160563,160564,160566],{},"每行结束后用 ",[34,160565,146762],{}," 换行。",[25,160568,160569,160572],{},[34,160570,160571],{},"end=\"\\t\""," 让同一行的内容横向排列。",[85,160574,160576],{"id":160575},"_411-循环else","4.11 循环else",[15,160578,160579,160580,160582,160583,160585,160586,160588],{},"Python 的循环可以带 ",[34,160581,2130],{},"。当循环正常结束时执行 ",[34,160584,2130],{},"，如果被 ",[34,160587,2481],{}," 打断，则不执行。",[63,160590,160592],{"className":65,"code":160591,"language":67,"meta":68,"style":68},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[34,160593,160594,160614,160626,160637,160641,160647],{"__ignoreMap":68},[72,160595,160596,160598,160600,160602,160604,160606,160608,160610,160612],{"class":74,"line":75},[72,160597,3453],{"class":78},[72,160599,9864],{"class":82},[72,160601,26465],{"class":78},[72,160603,32861],{"class":362},[72,160605,564],{"class":82},[72,160607,772],{"class":362},[72,160609,12861],{"class":82},[72,160611,898],{"class":362},[72,160613,31204],{"class":82},[72,160615,160616,160618,160620,160622,160624],{"class":74,"line":370},[72,160617,3529],{"class":78},[72,160619,9864],{"class":82},[72,160621,3377],{"class":78},[72,160623,2466],{"class":362},[72,160625,4167],{"class":82},[72,160627,160628,160630,160632,160635],{"class":74,"line":1608},[72,160629,32869],{"class":362},[72,160631,564],{"class":82},[72,160633,160634],{"class":366},"\"找到了\"",[72,160636,570],{"class":82},[72,160638,160639],{"class":74,"line":1623},[72,160640,32045],{"class":78},[72,160642,160643,160645],{"class":74,"line":1629},[72,160644,2130],{"class":78},[72,160646,4167],{"class":82},[72,160648,160649,160651,160653,160656],{"class":74,"line":1643},[72,160650,31717],{"class":362},[72,160652,564],{"class":82},[72,160654,160655],{"class":366},"\"没找到\"",[72,160657,570],{"class":82},[15,160659,160660],{},"常用于搜索。",[63,160662,160664],{"className":65,"code":160663,"language":67,"meta":68,"style":68},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[34,160665,160666,160687,160696,160700,160712,160723,160733,160737,160743],{"__ignoreMap":68},[72,160667,160668,160671,160673,160675,160677,160679,160681,160683,160685],{"class":74,"line":75},[72,160669,160670],{"class":82},"names ",[72,160672,609],{"class":78},[72,160674,52644],{"class":82},[72,160676,150178],{"class":366},[72,160678,12861],{"class":82},[72,160680,151226],{"class":366},[72,160682,12861],{"class":82},[72,160684,160021],{"class":366},[72,160686,33664],{"class":82},[72,160688,160689,160691,160693],{"class":74,"line":370},[72,160690,111978],{"class":82},[72,160692,609],{"class":78},[72,160694,160695],{"class":366}," \"小李\"\n",[72,160697,160698],{"class":74,"line":1608},[72,160699,2828],{"emptyLinePlaceholder":490},[72,160701,160702,160704,160707,160709],{"class":74,"line":1623},[72,160703,3453],{"class":78},[72,160705,160706],{"class":82}," name ",[72,160708,26465],{"class":78},[72,160710,160711],{"class":82}," names:\n",[72,160713,160714,160716,160718,160720],{"class":74,"line":1629},[72,160715,3529],{"class":78},[72,160717,160706],{"class":82},[72,160719,3377],{"class":78},[72,160721,160722],{"class":82}," target:\n",[72,160724,160725,160727,160729,160731],{"class":74,"line":1643},[72,160726,32869],{"class":362},[72,160728,564],{"class":82},[72,160730,160634],{"class":366},[72,160732,570],{"class":82},[72,160734,160735],{"class":74,"line":1649},[72,160736,32045],{"class":78},[72,160738,160739,160741],{"class":74,"line":1740},[72,160740,2130],{"class":78},[72,160742,4167],{"class":82},[72,160744,160745,160747,160749,160751],{"class":74,"line":1746},[72,160746,31717],{"class":362},[72,160748,564],{"class":82},[72,160750,160655],{"class":366},[72,160752,570],{"class":82},[85,160754,160756],{"id":160755},"_412-小案例登录重试","4.12 小案例：登录重试",[15,160758,123582],{},[22,160760,160761,160764,160767],{},[25,160762,160763],{},"用户最多输入 3 次密码。",[25,160765,160766],{},"密码正确则登录成功。",[25,160768,160769],{},"3 次都错误则锁定账号。",[15,160771,10461],{},[63,160773,160775],{"className":65,"code":160774,"language":67,"meta":68,"style":68},"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",[34,160776,160777,160787,160791,160807,160823,160827,160839,160850,160854,160860,160885,160891],{"__ignoreMap":68},[72,160778,160779,160782,160784],{"class":74,"line":75},[72,160780,160781],{"class":82},"password ",[72,160783,609],{"class":78},[72,160785,160786],{"class":366}," \"123456\"\n",[72,160788,160789],{"class":74,"line":370},[72,160790,2828],{"emptyLinePlaceholder":490},[72,160792,160793,160795,160797,160799,160801,160803,160805],{"class":74,"line":1608},[72,160794,3453],{"class":78},[72,160796,9864],{"class":82},[72,160798,26465],{"class":78},[72,160800,32861],{"class":362},[72,160802,564],{"class":82},[72,160804,634],{"class":362},[72,160806,31204],{"class":82},[72,160808,160809,160812,160814,160816,160818,160821],{"class":74,"line":1623},[72,160810,160811],{"class":82},"    user_password ",[72,160813,609],{"class":78},[72,160815,61023],{"class":362},[72,160817,564],{"class":82},[72,160819,160820],{"class":366},"\"请输入密码:\"",[72,160822,570],{"class":82},[72,160824,160825],{"class":74,"line":1629},[72,160826,2828],{"emptyLinePlaceholder":490},[72,160828,160829,160831,160834,160836],{"class":74,"line":1643},[72,160830,3529],{"class":78},[72,160832,160833],{"class":82}," user_password ",[72,160835,3377],{"class":78},[72,160837,160838],{"class":82}," password:\n",[72,160840,160841,160843,160845,160848],{"class":74,"line":1649},[72,160842,32869],{"class":362},[72,160844,564],{"class":82},[72,160846,160847],{"class":366},"\"登录成功\"",[72,160849,570],{"class":82},[72,160851,160852],{"class":74,"line":1740},[72,160853,32045],{"class":78},[72,160855,160856,160858],{"class":74,"line":1746},[72,160857,158312],{"class":78},[72,160859,4167],{"class":82},[72,160861,160862,160864,160866,160868,160871,160874,160876,160878,160880,160883],{"class":74,"line":1758},[72,160863,32869],{"class":362},[72,160865,564],{"class":82},[72,160867,615],{"class":78},[72,160869,160870],{"class":366},"\"密码错误，还剩",[72,160872,160873],{"class":362},"{2",[72,160875,52689],{"class":78},[72,160877,3460],{"class":82},[72,160879,1500],{"class":362},[72,160881,160882],{"class":366},"次机会\"",[72,160884,570],{"class":82},[72,160886,160887,160889],{"class":74,"line":2041},[72,160888,2130],{"class":78},[72,160890,4167],{"class":82},[72,160892,160893,160895,160897,160900],{"class":74,"line":2046},[72,160894,31717],{"class":362},[72,160896,564],{"class":82},[72,160898,160899],{"class":366},"\"账号已锁定\"",[72,160901,570],{"class":82},[85,160903,160905],{"id":160904},"_413-小案例菜单程序","4.13 小案例：菜单程序",[63,160907,160909],{"className":65,"code":160908,"language":67,"meta":68,"style":68},"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",[34,160910,160911,160919,160930,160941,160952,160963,160974,160978,160993,160997,161009,161020,161032,161043,161055,161066,161078,161088,161092,161098],{"__ignoreMap":68},[72,160912,160913,160915,160917],{"class":74,"line":75},[72,160914,109063],{"class":78},[72,160916,95709],{"class":362},[72,160918,4167],{"class":82},[72,160920,160921,160923,160925,160928],{"class":74,"line":370},[72,160922,31717],{"class":362},[72,160924,564],{"class":82},[72,160926,160927],{"class":366},"\"====== 菜单 ======\"",[72,160929,570],{"class":82},[72,160931,160932,160934,160936,160939],{"class":74,"line":1608},[72,160933,31717],{"class":362},[72,160935,564],{"class":82},[72,160937,160938],{"class":366},"\"1. 查询余额\"",[72,160940,570],{"class":82},[72,160942,160943,160945,160947,160950],{"class":74,"line":1623},[72,160944,31717],{"class":362},[72,160946,564],{"class":82},[72,160948,160949],{"class":366},"\"2. 存款\"",[72,160951,570],{"class":82},[72,160953,160954,160956,160958,160961],{"class":74,"line":1629},[72,160955,31717],{"class":362},[72,160957,564],{"class":82},[72,160959,160960],{"class":366},"\"3. 取款\"",[72,160962,570],{"class":82},[72,160964,160965,160967,160969,160972],{"class":74,"line":1643},[72,160966,31717],{"class":362},[72,160968,564],{"class":82},[72,160970,160971],{"class":366},"\"0. 退出\"",[72,160973,570],{"class":82},[72,160975,160976],{"class":74,"line":1649},[72,160977,2828],{"emptyLinePlaceholder":490},[72,160979,160980,160983,160985,160987,160989,160991],{"class":74,"line":1740},[72,160981,160982],{"class":82},"    choice ",[72,160984,609],{"class":78},[72,160986,61023],{"class":362},[72,160988,564],{"class":82},[72,160990,153363],{"class":366},[72,160992,570],{"class":82},[72,160994,160995],{"class":74,"line":1746},[72,160996,2828],{"emptyLinePlaceholder":490},[72,160998,160999,161001,161003,161005,161007],{"class":74,"line":1758},[72,161000,3529],{"class":78},[72,161002,153376],{"class":82},[72,161004,3377],{"class":78},[72,161006,153381],{"class":366},[72,161008,4167],{"class":82},[72,161010,161011,161013,161015,161018],{"class":74,"line":2041},[72,161012,32869],{"class":362},[72,161014,564],{"class":82},[72,161016,161017],{"class":366},"\"余额为1000元\"",[72,161019,570],{"class":82},[72,161021,161022,161024,161026,161028,161030],{"class":74,"line":2046},[72,161023,39711],{"class":78},[72,161025,153376],{"class":82},[72,161027,3377],{"class":78},[72,161029,153400],{"class":366},[72,161031,4167],{"class":82},[72,161033,161034,161036,161038,161041],{"class":74,"line":2052},[72,161035,32869],{"class":362},[72,161037,564],{"class":82},[72,161039,161040],{"class":366},"\"存款功能\"",[72,161042,570],{"class":82},[72,161044,161045,161047,161049,161051,161053],{"class":74,"line":2057},[72,161046,39711],{"class":78},[72,161048,153376],{"class":82},[72,161050,3377],{"class":78},[72,161052,153418],{"class":366},[72,161054,4167],{"class":82},[72,161056,161057,161059,161061,161064],{"class":74,"line":2071},[72,161058,32869],{"class":362},[72,161060,564],{"class":82},[72,161062,161063],{"class":366},"\"取款功能\"",[72,161065,570],{"class":82},[72,161067,161068,161070,161072,161074,161076],{"class":74,"line":2076},[72,161069,39711],{"class":78},[72,161071,153376],{"class":82},[72,161073,3377],{"class":78},[72,161075,153472],{"class":366},[72,161077,4167],{"class":82},[72,161079,161080,161082,161084,161086],{"class":74,"line":2082},[72,161081,32869],{"class":362},[72,161083,564],{"class":82},[72,161085,153483],{"class":366},[72,161087,570],{"class":82},[72,161089,161090],{"class":74,"line":2103},[72,161091,32045],{"class":78},[72,161093,161094,161096],{"class":74,"line":2108},[72,161095,158312],{"class":78},[72,161097,4167],{"class":82},[72,161099,161100,161102,161104,161106],{"class":74,"line":2122},[72,161101,32869],{"class":362},[72,161103,564],{"class":82},[72,161105,153504],{"class":366},[72,161107,570],{"class":82},[15,161109,161110,161111,161113,161114,28807],{},"菜单类程序通常使用 ",[34,161112,159812],{},"，用户选择退出时 ",[34,161115,2481],{},[85,161117,161119],{"id":161118},"_414-易错点","4.14 易错点",[22,161121,161122,161127,161133,161141,161147],{},[25,161123,161124,161126],{},[34,161125,109063],{}," 循环必须更新控制变量。",[25,161128,161129,161132],{},[34,161130,161131],{},"range(1, 10)"," 不包含 10。",[25,161134,161135,161137,161138,161140],{},[34,161136,2481],{}," 结束整个循环，",[34,161139,154962],{}," 只跳过本轮。",[25,161142,161143,161144,161146],{},"嵌套循环中，",[34,161145,2481],{}," 只跳出当前所在的一层循环。",[25,161148,161149],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[85,161151,161153],{"id":161152},"_415-本章练习","4.15 本章练习",[22,161155,161156,161159,161162,161165,161168],{},[25,161157,161158],{},"输出 1 到 100。",[25,161160,161161],{},"计算 1 到 100 的偶数和。",[25,161163,161164],{},"输出 100 以内能被 3 和 5 同时整除的数。",[25,161166,161167],{},"编写猜数字游戏，限制最多猜 7 次。",[25,161169,161170],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[473,161172,161173],{},"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":68,"searchDepth":370,"depth":370,"links":161175},[161176,161177,161178,161179,161180,161184,161185,161186,161187,161188,161189,161190,161191,161192,161193],{"id":159432,"depth":370,"text":159433},{"id":159462,"depth":370,"text":159463},{"id":159551,"depth":370,"text":159552},{"id":159645,"depth":370,"text":159646},{"id":159819,"depth":370,"text":159820,"children":161181},[161182,161183],{"id":159823,"depth":1608,"text":159824},{"id":159887,"depth":1608,"text":159888},{"id":159951,"depth":370,"text":159952},{"id":160046,"depth":370,"text":160047},{"id":160155,"depth":370,"text":160156},{"id":160351,"depth":370,"text":160352},{"id":160436,"depth":370,"text":160437},{"id":160575,"depth":370,"text":160576},{"id":160755,"depth":370,"text":160756},{"id":160904,"depth":370,"text":160905},{"id":161118,"depth":370,"text":161119},{"id":161152,"depth":370,"text":161153},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159424,"description":23802},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":161200,"title":161201,"body":161202,"description":23802,"extension":487,"meta":163207,"navigation":490,"path":163208,"seo":163209,"stem":163210,"__hash__":163211},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":161203,"toc":163187},[161204,161207,161211,161214,161217,161231,161234,161248,161252,161254,161273,161275,161322,161324,161338,161342,161416,161419,161423,161426,161485,161493,161496,161549,161552,161556,161561,161616,161624,161674,161678,161683,161691,161790,161796,161800,161805,161808,161819,161860,161873,161877,161880,161916,161919,161932,161935,161995,161999,162003,162006,162057,162061,162064,162111,162117,162183,162186,162190,162193,162309,162312,162316,162319,162425,162429,162432,162470,162473,162515,162518,162578,162581,162585,163049,163052,163056,163083,163089,163150,163154,163184],[10,161205,161201],{"id":161206},"_5-函数基础",[85,161208,161210],{"id":161209},"_51-为什么需要函数","5.1 为什么需要函数",[15,161212,161213],{},"函数用于封装一段可以重复使用的代码。",[15,161215,161216],{},"不使用函数的问题：",[22,161218,161219,161222,161225,161228],{},[25,161220,161221],{},"重复代码多。",[25,161223,161224],{},"修改逻辑时容易漏改。",[25,161226,161227],{},"主流程不清晰。",[25,161229,161230],{},"程序越写越长，难以维护。",[15,161232,161233],{},"使用函数后的好处：",[22,161235,161236,161239,161242,161245],{},[25,161237,161238],{},"提高复用性。",[25,161240,161241],{},"提高可读性。",[25,161243,161244],{},"便于调试。",[25,161246,161247],{},"便于分工。",[85,161249,161251],{"id":161250},"_52-函数定义","5.2 函数定义",[15,161253,5609],{},[63,161255,161257],{"className":65,"code":161256,"language":67,"meta":68,"style":68},"def 函数名():\n    函数体\n",[34,161258,161259,161268],{"__ignoreMap":68},[72,161260,161261,161263,161266],{"class":74,"line":75},[72,161262,32365],{"class":78},[72,161264,161265],{"class":358}," 函数名",[72,161267,32371],{"class":82},[72,161269,161270],{"class":74,"line":370},[72,161271,161272],{"class":82},"    函数体\n",[15,161274,15561],{},[63,161276,161278],{"className":65,"code":161277,"language":67,"meta":68,"style":68},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[34,161279,161280,161289,161299,161309,161313,161317],{"__ignoreMap":68},[72,161281,161282,161284,161287],{"class":74,"line":75},[72,161283,32365],{"class":78},[72,161285,161286],{"class":358}," say_hello",[72,161288,32371],{"class":82},[72,161290,161291,161293,161295,161297],{"class":74,"line":370},[72,161292,31717],{"class":362},[72,161294,564],{"class":82},[72,161296,6270],{"class":366},[72,161298,570],{"class":82},[72,161300,161301,161303,161305,161307],{"class":74,"line":1608},[72,161302,31717],{"class":362},[72,161304,564],{"class":82},[72,161306,146929],{"class":366},[72,161308,570],{"class":82},[72,161310,161311],{"class":74,"line":1623},[72,161312,2828],{"emptyLinePlaceholder":490},[72,161314,161315],{"class":74,"line":1629},[72,161316,2828],{"emptyLinePlaceholder":490},[72,161318,161319],{"class":74,"line":1643},[72,161320,161321],{"class":82},"say_hello()\n",[15,161323,9451],{},[22,161325,161326,161329,161332,161335],{},[25,161327,161328],{},"函数必须先定义，再调用。",[25,161330,161331],{},"函数名遵循变量命名规则。",[25,161333,161334],{},"函数体需要缩进。",[25,161336,161337],{},"函数不调用就不会执行。",[85,161339,161341],{"id":161340},"_53-函数调用","5.3 函数调用",[63,161343,161345],{"className":65,"code":161344,"language":67,"meta":68,"style":68},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[34,161346,161347,161356,161367,161378,161389,161399,161403,161407,161412],{"__ignoreMap":68},[72,161348,161349,161351,161354],{"class":74,"line":75},[72,161350,32365],{"class":78},[72,161352,161353],{"class":358}," print_menu",[72,161355,32371],{"class":82},[72,161357,161358,161360,161362,161365],{"class":74,"line":370},[72,161359,31717],{"class":362},[72,161361,564],{"class":82},[72,161363,161364],{"class":366},"\"1. 查询\"",[72,161366,570],{"class":82},[72,161368,161369,161371,161373,161376],{"class":74,"line":1608},[72,161370,31717],{"class":362},[72,161372,564],{"class":82},[72,161374,161375],{"class":366},"\"2. 添加\"",[72,161377,570],{"class":82},[72,161379,161380,161382,161384,161387],{"class":74,"line":1623},[72,161381,31717],{"class":362},[72,161383,564],{"class":82},[72,161385,161386],{"class":366},"\"3. 删除\"",[72,161388,570],{"class":82},[72,161390,161391,161393,161395,161397],{"class":74,"line":1629},[72,161392,31717],{"class":362},[72,161394,564],{"class":82},[72,161396,160971],{"class":366},[72,161398,570],{"class":82},[72,161400,161401],{"class":74,"line":1643},[72,161402,2828],{"emptyLinePlaceholder":490},[72,161404,161405],{"class":74,"line":1649},[72,161406,2828],{"emptyLinePlaceholder":490},[72,161408,161409],{"class":74,"line":1740},[72,161410,161411],{"class":82},"print_menu()\n",[72,161413,161414],{"class":74,"line":1746},[72,161415,161411],{"class":82},[15,161417,161418],{},"函数可以多次调用，每次调用都会执行函数体。",[85,161420,161422],{"id":161421},"_54-参数","5.4 参数",[15,161424,161425],{},"参数用于向函数传递数据。",[63,161427,161429],{"className":65,"code":161428,"language":67,"meta":68,"style":68},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[34,161430,161431,161440,161460,161464,161468,161477],{"__ignoreMap":68},[72,161432,161433,161435,161437],{"class":74,"line":75},[72,161434,32365],{"class":78},[72,161436,161286],{"class":358},[72,161438,161439],{"class":82},"(name):\n",[72,161441,161442,161444,161446,161448,161450,161452,161454,161456,161458],{"class":74,"line":370},[72,161443,31717],{"class":362},[72,161445,564],{"class":82},[72,161447,615],{"class":78},[72,161449,157344],{"class":366},[72,161451,1450],{"class":362},[72,161453,80228],{"class":82},[72,161455,1500],{"class":362},[72,161457,805],{"class":366},[72,161459,570],{"class":82},[72,161461,161462],{"class":74,"line":1608},[72,161463,2828],{"emptyLinePlaceholder":490},[72,161465,161466],{"class":74,"line":1623},[72,161467,2828],{"emptyLinePlaceholder":490},[72,161469,161470,161473,161475],{"class":74,"line":1629},[72,161471,161472],{"class":82},"say_hello(",[72,161474,150178],{"class":366},[72,161476,570],{"class":82},[72,161478,161479,161481,161483],{"class":74,"line":1643},[72,161480,161472],{"class":82},[72,161482,151226],{"class":366},[72,161484,570],{"class":82},[15,161486,161487,161489,161490,161492],{},[34,161488,80228],{}," 是形参，",[34,161491,150178],{}," 是实参。",[15,161494,161495],{},"多个参数：",[63,161497,161499],{"className":65,"code":161498,"language":67,"meta":68,"style":68},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[34,161500,161501,161509,161522,161528,161532,161536],{"__ignoreMap":68},[72,161502,161503,161505,161507],{"class":74,"line":75},[72,161504,32365],{"class":78},[72,161506,5635],{"class":358},[72,161508,151383],{"class":82},[72,161510,161511,161514,161516,161518,161520],{"class":74,"line":370},[72,161512,161513],{"class":82},"    result ",[72,161515,609],{"class":78},[72,161517,11295],{"class":82},[72,161519,1035],{"class":78},[72,161521,151394],{"class":82},[72,161523,161524,161526],{"class":74,"line":1608},[72,161525,31717],{"class":362},[72,161527,77003],{"class":82},[72,161529,161530],{"class":74,"line":1623},[72,161531,2828],{"emptyLinePlaceholder":490},[72,161533,161534],{"class":74,"line":1629},[72,161535,2828],{"emptyLinePlaceholder":490},[72,161537,161538,161541,161543,161545,161547],{"class":74,"line":1643},[72,161539,161540],{"class":82},"add(",[72,161542,1000],{"class":362},[72,161544,12861],{"class":82},[72,161546,1254],{"class":362},[72,161548,570],{"class":82},[15,161550,161551],{},"调用时参数数量必须匹配。",[85,161553,161555],{"id":161554},"_55-返回值","5.5 返回值",[15,161557,161558,161560],{},[34,161559,17472],{}," 用于把函数内部的结果返回给调用者。",[63,161562,161564],{"className":65,"code":161563,"language":67,"meta":68,"style":68},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[34,161565,161566,161574,161584,161588,161592,161610],{"__ignoreMap":68},[72,161567,161568,161570,161572],{"class":74,"line":75},[72,161569,32365],{"class":78},[72,161571,5635],{"class":358},[72,161573,151383],{"class":82},[72,161575,161576,161578,161580,161582],{"class":74,"line":370},[72,161577,4518],{"class":78},[72,161579,11295],{"class":82},[72,161581,1035],{"class":78},[72,161583,151394],{"class":82},[72,161585,161586],{"class":74,"line":1608},[72,161587,2828],{"emptyLinePlaceholder":490},[72,161589,161590],{"class":74,"line":1623},[72,161591,2828],{"emptyLinePlaceholder":490},[72,161593,161594,161597,161599,161602,161604,161606,161608],{"class":74,"line":1629},[72,161595,161596],{"class":82},"result ",[72,161598,609],{"class":78},[72,161600,161601],{"class":82}," add(",[72,161603,1000],{"class":362},[72,161605,12861],{"class":82},[72,161607,1254],{"class":362},[72,161609,570],{"class":82},[72,161611,161612,161614],{"class":74,"line":1643},[72,161613,30833],{"class":362},[72,161615,77003],{"class":82},[15,161617,161618,161619,161621,161622,28807],{},"如果函数没有写 ",[34,161620,17472],{},"，默认返回 ",[34,161623,96103],{},[63,161625,161627],{"className":65,"code":161626,"language":67,"meta":68,"style":68},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[34,161628,161629,161637,161647,161651,161655,161664],{"__ignoreMap":68},[72,161630,161631,161633,161635],{"class":74,"line":75},[72,161632,32365],{"class":78},[72,161634,161286],{"class":358},[72,161636,32371],{"class":82},[72,161638,161639,161641,161643,161645],{"class":74,"line":370},[72,161640,31717],{"class":362},[72,161642,564],{"class":82},[72,161644,6270],{"class":366},[72,161646,570],{"class":82},[72,161648,161649],{"class":74,"line":1608},[72,161650,2828],{"emptyLinePlaceholder":490},[72,161652,161653],{"class":74,"line":1623},[72,161654,2828],{"emptyLinePlaceholder":490},[72,161656,161657,161659,161661],{"class":74,"line":1629},[72,161658,161596],{"class":82},[72,161660,609],{"class":78},[72,161662,161663],{"class":82}," say_hello()\n",[72,161665,161666,161668,161671],{"class":74,"line":1643},[72,161667,30833],{"class":362},[72,161669,161670],{"class":82},"(result)  ",[72,161672,161673],{"class":621},"# None\n",[85,161675,161677],{"id":161676},"_56-return的作用","5.6 return的作用",[15,161679,161680,161682],{},[34,161681,17472],{}," 有两个作用：",[22,161684,161685,161688],{},[25,161686,161687],{},"返回结果。",[25,161689,161690],{},"结束函数。",[63,161692,161694],{"className":65,"code":161693,"language":67,"meta":68,"style":68},"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",[34,161695,161696,161706,161718,161725,161729,161741,161748,161752,161759,161763,161767,161778],{"__ignoreMap":68},[72,161697,161698,161700,161703],{"class":74,"line":75},[72,161699,32365],{"class":78},[72,161701,161702],{"class":358}," check_age",[72,161704,161705],{"class":82},"(age):\n",[72,161707,161708,161710,161712,161714,161716],{"class":74,"line":370},[72,161709,3529],{"class":78},[72,161711,16133],{"class":82},[72,161713,1464],{"class":78},[72,161715,4521],{"class":362},[72,161717,4167],{"class":82},[72,161719,161720,161722],{"class":74,"line":1608},[72,161721,15178],{"class":78},[72,161723,161724],{"class":366}," \"年龄不合法\"\n",[72,161726,161727],{"class":74,"line":1623},[72,161728,2828],{"emptyLinePlaceholder":490},[72,161730,161731,161733,161735,161737,161739],{"class":74,"line":1629},[72,161732,3529],{"class":78},[72,161734,16133],{"class":82},[72,161736,2139],{"class":78},[72,161738,156575],{"class":362},[72,161740,4167],{"class":82},[72,161742,161743,161745],{"class":74,"line":1643},[72,161744,15178],{"class":78},[72,161746,161747],{"class":366}," \"成年人\"\n",[72,161749,161750],{"class":74,"line":1649},[72,161751,2828],{"emptyLinePlaceholder":490},[72,161753,161754,161756],{"class":74,"line":1740},[72,161755,4518],{"class":78},[72,161757,161758],{"class":366}," \"未成年人\"\n",[72,161760,161761],{"class":74,"line":1746},[72,161762,2828],{"emptyLinePlaceholder":490},[72,161764,161765],{"class":74,"line":1758},[72,161766,2828],{"emptyLinePlaceholder":490},[72,161768,161769,161771,161774,161776],{"class":74,"line":2041},[72,161770,30833],{"class":362},[72,161772,161773],{"class":82},"(check_age(",[72,161775,1254],{"class":362},[72,161777,30915],{"class":82},[72,161779,161780,161782,161784,161786,161788],{"class":74,"line":2046},[72,161781,30833],{"class":362},[72,161783,161773],{"class":82},[72,161785,1086],{"class":78},[72,161787,772],{"class":362},[72,161789,30915],{"class":82},[15,161791,161792,161793,161795],{},"函数执行到 ",[34,161794,17472],{}," 后，后面的代码不会继续执行。",[85,161797,161799],{"id":161798},"_57-none","5.7 None",[15,161801,161802,161804],{},[34,161803,96103],{}," 表示空值或没有结果。",[15,161806,161807],{},"常见使用场景：",[22,161809,161810,161813,161816],{},[25,161811,161812],{},"函数没有返回值。",[25,161814,161815],{},"变量暂时没有具体值。",[25,161817,161818],{},"表示查询不到结果。",[63,161820,161822],{"className":65,"code":161821,"language":67,"meta":68,"style":68},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[34,161823,161824,161832,161836,161849],{"__ignoreMap":68},[72,161825,161826,161828,161830],{"class":74,"line":75},[72,161827,161596],{"class":82},[72,161829,609],{"class":78},[72,161831,152462],{"class":362},[72,161833,161834],{"class":74,"line":370},[72,161835,2828],{"emptyLinePlaceholder":490},[72,161837,161838,161840,161843,161845,161847],{"class":74,"line":1608},[72,161839,1960],{"class":78},[72,161841,161842],{"class":82}," result ",[72,161844,39345],{"class":78},[72,161846,39351],{"class":362},[72,161848,4167],{"class":82},[72,161850,161851,161853,161855,161858],{"class":74,"line":1623},[72,161852,31717],{"class":362},[72,161854,564],{"class":82},[72,161856,161857],{"class":366},"\"没有数据\"",[72,161859,570],{"class":82},[15,161861,161862,161863,161865,161866,161869,161870,28807],{},"判断 ",[34,161864,96103],{}," 推荐使用 ",[34,161867,161868],{},"is None","，不要写成 ",[34,161871,161872],{},"== None",[85,161874,161876],{"id":161875},"_58-函数文档字符串","5.8 函数文档字符串",[15,161878,161879],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[63,161881,161883],{"className":65,"code":161882,"language":67,"meta":68,"style":68},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[34,161884,161885,161895,161900],{"__ignoreMap":68},[72,161886,161887,161889,161892],{"class":74,"line":75},[72,161888,32365],{"class":78},[72,161890,161891],{"class":358}," calculate_bmi",[72,161893,161894],{"class":82},"(weight, height):\n",[72,161896,161897],{"class":74,"line":370},[72,161898,161899],{"class":366},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[72,161901,161902,161904,161907,161909,161912,161914],{"class":74,"line":1608},[72,161903,4518],{"class":78},[72,161905,161906],{"class":82}," weight ",[72,161908,1138],{"class":78},[72,161910,161911],{"class":82}," height ",[72,161913,11087],{"class":78},[72,161915,48141],{"class":362},[15,161917,161918],{},"查看说明：",[63,161920,161922],{"className":65,"code":161921,"language":67,"meta":68,"style":68},"help(calculate_bmi)\n",[34,161923,161924],{"__ignoreMap":68},[72,161925,161926,161929],{"class":74,"line":75},[72,161927,161928],{"class":362},"help",[72,161930,161931],{"class":82},"(calculate_bmi)\n",[15,161933,161934],{},"较完整的写法：",[63,161936,161938],{"className":65,"code":161937,"language":67,"meta":68,"style":68},"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",[34,161939,161940,161948,161953,161958,161962,161967,161972,161977,161981],{"__ignoreMap":68},[72,161941,161942,161944,161946],{"class":74,"line":75},[72,161943,32365],{"class":78},[72,161945,161891],{"class":358},[72,161947,161894],{"class":82},[72,161949,161950],{"class":74,"line":370},[72,161951,161952],{"class":366},"    \"\"\"\n",[72,161954,161955],{"class":74,"line":1608},[72,161956,161957],{"class":366},"    计算BMI。\n",[72,161959,161960],{"class":74,"line":1623},[72,161961,2828],{"emptyLinePlaceholder":490},[72,161963,161964],{"class":74,"line":1629},[72,161965,161966],{"class":366},"    :param weight: 体重，单位kg\n",[72,161968,161969],{"class":74,"line":1643},[72,161970,161971],{"class":366},"    :param height: 身高，单位m\n",[72,161973,161974],{"class":74,"line":1649},[72,161975,161976],{"class":366},"    :return: BMI数值\n",[72,161978,161979],{"class":74,"line":1740},[72,161980,161952],{"class":366},[72,161982,161983,161985,161987,161989,161991,161993],{"class":74,"line":1746},[72,161984,4518],{"class":78},[72,161986,161906],{"class":82},[72,161988,1138],{"class":78},[72,161990,161911],{"class":82},[72,161992,11087],{"class":78},[72,161994,48141],{"class":362},[85,161996,161998],{"id":161997},"_59-变量作用域","5.9 变量作用域",[531,162000,162002],{"id":162001},"_591-局部变量","5.9.1 局部变量",[15,162004,162005],{},"在函数内部定义的变量，只能在函数内部使用。",[63,162007,162009],{"className":65,"code":162008,"language":67,"meta":68,"style":68},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[34,162010,162011,162020,162028,162034,162038,162042,162047],{"__ignoreMap":68},[72,162012,162013,162015,162018],{"class":74,"line":75},[72,162014,32365],{"class":78},[72,162016,162017],{"class":358}," test",[72,162019,32371],{"class":82},[72,162021,162022,162024,162026],{"class":74,"line":370},[72,162023,46011],{"class":82},[72,162025,609],{"class":78},[72,162027,58846],{"class":362},[72,162029,162030,162032],{"class":74,"line":1608},[72,162031,31717],{"class":362},[72,162033,577],{"class":82},[72,162035,162036],{"class":74,"line":1623},[72,162037,2828],{"emptyLinePlaceholder":490},[72,162039,162040],{"class":74,"line":1629},[72,162041,2828],{"emptyLinePlaceholder":490},[72,162043,162044],{"class":74,"line":1643},[72,162045,162046],{"class":82},"test()\n",[72,162048,162049,162051,162054],{"class":74,"line":1649},[72,162050,30833],{"class":362},[72,162052,162053],{"class":82},"(num)  ",[72,162055,162056],{"class":621},"# 报错\n",[531,162058,162060],{"id":162059},"_592-全局变量","5.9.2 全局变量",[15,162062,162063],{},"在函数外部定义的变量，可以在函数内部读取。",[63,162065,162067],{"className":65,"code":162066,"language":67,"meta":68,"style":68},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[34,162068,162069,162077,162081,162085,162093,162099,162103,162107],{"__ignoreMap":68},[72,162070,162071,162073,162075],{"class":74,"line":75},[72,162072,146826],{"class":82},[72,162074,609],{"class":78},[72,162076,149643],{"class":366},[72,162078,162079],{"class":74,"line":370},[72,162080,2828],{"emptyLinePlaceholder":490},[72,162082,162083],{"class":74,"line":1608},[72,162084,2828],{"emptyLinePlaceholder":490},[72,162086,162087,162089,162091],{"class":74,"line":1623},[72,162088,32365],{"class":78},[72,162090,161286],{"class":358},[72,162092,32371],{"class":82},[72,162094,162095,162097],{"class":74,"line":1629},[72,162096,31717],{"class":362},[72,162098,150950],{"class":82},[72,162100,162101],{"class":74,"line":1643},[72,162102,2828],{"emptyLinePlaceholder":490},[72,162104,162105],{"class":74,"line":1649},[72,162106,2828],{"emptyLinePlaceholder":490},[72,162108,162109],{"class":74,"line":1740},[72,162110,161321],{"class":82},[15,162112,162113,162114,28807],{},"如果要在函数内部修改全局变量，需要 ",[34,162115,162116],{},"global",[63,162118,162120],{"className":65,"code":162119,"language":67,"meta":68,"style":68},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[34,162121,162122,162130,162134,162138,162147,162155,162163,162167,162171,162176],{"__ignoreMap":68},[72,162123,162124,162126,162128],{"class":74,"line":75},[72,162125,146981],{"class":82},[72,162127,609],{"class":78},[72,162129,47751],{"class":362},[72,162131,162132],{"class":74,"line":370},[72,162133,2828],{"emptyLinePlaceholder":490},[72,162135,162136],{"class":74,"line":1608},[72,162137,2828],{"emptyLinePlaceholder":490},[72,162139,162140,162142,162145],{"class":74,"line":1623},[72,162141,32365],{"class":78},[72,162143,162144],{"class":358}," add_count",[72,162146,32371],{"class":82},[72,162148,162149,162152],{"class":74,"line":1629},[72,162150,162151],{"class":78},"    global",[72,162153,162154],{"class":82}," count\n",[72,162156,162157,162159,162161],{"class":74,"line":1643},[72,162158,159723],{"class":82},[72,162160,9903],{"class":78},[72,162162,56117],{"class":362},[72,162164,162165],{"class":74,"line":1649},[72,162166,2828],{"emptyLinePlaceholder":490},[72,162168,162169],{"class":74,"line":1740},[72,162170,2828],{"emptyLinePlaceholder":490},[72,162172,162173],{"class":74,"line":1746},[72,162174,162175],{"class":82},"add_count()\n",[72,162177,162178,162180],{"class":74,"line":1758},[72,162179,30833],{"class":362},[72,162181,162182],{"class":82},"(count)\n",[15,162184,162185],{},"不建议大量使用全局变量，项目变大后很难维护。",[85,162187,162189],{"id":162188},"_510-函数嵌套调用","5.10 函数嵌套调用",[15,162191,162192],{},"一个函数中可以调用另一个函数。",[63,162194,162196],{"className":65,"code":162195,"language":67,"meta":68,"style":68},"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",[34,162197,162198,162207,162221,162225,162229,162238,162243,162263,162284,162288,162292,162296],{"__ignoreMap":68},[72,162199,162200,162202,162205],{"class":74,"line":75},[72,162201,32365],{"class":78},[72,162203,162204],{"class":358}," print_line",[72,162206,32371],{"class":82},[72,162208,162209,162211,162213,162215,162217,162219],{"class":74,"line":370},[72,162210,31717],{"class":362},[72,162212,564],{"class":82},[72,162214,32901],{"class":366},[72,162216,6944],{"class":78},[72,162218,79083],{"class":362},[72,162220,570],{"class":82},[72,162222,162223],{"class":74,"line":1608},[72,162224,2828],{"emptyLinePlaceholder":490},[72,162226,162227],{"class":74,"line":1623},[72,162228,2828],{"emptyLinePlaceholder":490},[72,162230,162231,162233,162236],{"class":74,"line":1629},[72,162232,32365],{"class":78},[72,162234,162235],{"class":358}," print_info",[72,162237,149665],{"class":82},[72,162239,162240],{"class":74,"line":1643},[72,162241,162242],{"class":82},"    print_line()\n",[72,162244,162245,162247,162249,162251,162253,162255,162257,162259,162261],{"class":74,"line":1649},[72,162246,31717],{"class":362},[72,162248,564],{"class":82},[72,162250,615],{"class":78},[72,162252,156972],{"class":366},[72,162254,1450],{"class":362},[72,162256,80228],{"class":82},[72,162258,1500],{"class":362},[72,162260,805],{"class":366},[72,162262,570],{"class":82},[72,162264,162265,162267,162269,162271,162274,162276,162278,162280,162282],{"class":74,"line":1740},[72,162266,31717],{"class":362},[72,162268,564],{"class":82},[72,162270,615],{"class":78},[72,162272,162273],{"class":366},"\"年龄:",[72,162275,1450],{"class":362},[72,162277,70639],{"class":82},[72,162279,1500],{"class":362},[72,162281,805],{"class":366},[72,162283,570],{"class":82},[72,162285,162286],{"class":74,"line":1746},[72,162287,162242],{"class":82},[72,162289,162290],{"class":74,"line":1758},[72,162291,2828],{"emptyLinePlaceholder":490},[72,162293,162294],{"class":74,"line":2041},[72,162295,2828],{"emptyLinePlaceholder":490},[72,162297,162298,162301,162303,162305,162307],{"class":74,"line":2046},[72,162299,162300],{"class":82},"print_info(",[72,162302,150178],{"class":366},[72,162304,12861],{"class":82},[72,162306,1204],{"class":362},[72,162308,570],{"class":82},[15,162310,162311],{},"这种方式可以把小功能组合成大功能。",[85,162313,162315],{"id":162314},"_511-参数检查","5.11 参数检查",[15,162317,162318],{},"函数内部可以检查参数是否合法。",[63,162320,162322],{"className":65,"code":162321,"language":67,"meta":68,"style":68},"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",[34,162323,162324,162333,162345,162351,162361,162365,162369,162386,162390,162402,162413,162419],{"__ignoreMap":68},[72,162325,162326,162328,162331],{"class":74,"line":75},[72,162327,32365],{"class":78},[72,162329,162330],{"class":358}," divide",[72,162332,151383],{"class":82},[72,162334,162335,162337,162339,162341,162343],{"class":74,"line":370},[72,162336,3529],{"class":78},[72,162338,11308],{"class":82},[72,162340,3377],{"class":78},[72,162342,4521],{"class":362},[72,162344,4167],{"class":82},[72,162346,162347,162349],{"class":74,"line":1608},[72,162348,15178],{"class":78},[72,162350,152462],{"class":362},[72,162352,162353,162355,162357,162359],{"class":74,"line":1623},[72,162354,4518],{"class":78},[72,162356,11295],{"class":82},[72,162358,1138],{"class":78},[72,162360,151394],{"class":82},[72,162362,162363],{"class":74,"line":1629},[72,162364,2828],{"emptyLinePlaceholder":490},[72,162366,162367],{"class":74,"line":1643},[72,162368,2828],{"emptyLinePlaceholder":490},[72,162370,162371,162373,162375,162378,162380,162382,162384],{"class":74,"line":1649},[72,162372,161596],{"class":82},[72,162374,609],{"class":78},[72,162376,162377],{"class":82}," divide(",[72,162379,1000],{"class":362},[72,162381,12861],{"class":82},[72,162383,747],{"class":362},[72,162385,570],{"class":82},[72,162387,162388],{"class":74,"line":1740},[72,162389,2828],{"emptyLinePlaceholder":490},[72,162391,162392,162394,162396,162398,162400],{"class":74,"line":1746},[72,162393,1960],{"class":78},[72,162395,161842],{"class":82},[72,162397,39345],{"class":78},[72,162399,39351],{"class":362},[72,162401,4167],{"class":82},[72,162403,162404,162406,162408,162411],{"class":74,"line":1758},[72,162405,31717],{"class":362},[72,162407,564],{"class":82},[72,162409,162410],{"class":366},"\"除数不能为0\"",[72,162412,570],{"class":82},[72,162414,162415,162417],{"class":74,"line":2041},[72,162416,2130],{"class":78},[72,162418,4167],{"class":82},[72,162420,162421,162423],{"class":74,"line":2046},[72,162422,31717],{"class":362},[72,162424,77003],{"class":82},[85,162426,162428],{"id":162427},"_512-类型提示","5.12 类型提示",[15,162430,162431],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[63,162433,162435],{"className":65,"code":162434,"language":67,"meta":68,"style":68},"def add(a: int, b: int) -> int:\n    return a + b\n",[34,162436,162437,162460],{"__ignoreMap":68},[72,162438,162439,162441,162443,162446,162448,162451,162453,162456,162458],{"class":74,"line":75},[72,162440,32365],{"class":78},[72,162442,5635],{"class":358},[72,162444,162445],{"class":82},"(a: ",[72,162447,567],{"class":362},[72,162449,162450],{"class":82},", b: ",[72,162452,567],{"class":362},[72,162454,162455],{"class":82},") -> ",[72,162457,567],{"class":362},[72,162459,4167],{"class":82},[72,162461,162462,162464,162466,162468],{"class":74,"line":370},[72,162463,4518],{"class":78},[72,162465,11295],{"class":82},[72,162467,1035],{"class":78},[72,162469,151394],{"class":82},[15,162471,162472],{},"字符串参数：",[63,162474,162476],{"className":65,"code":162475,"language":67,"meta":68,"style":68},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[34,162477,162478,162495],{"__ignoreMap":68},[72,162479,162480,162482,162484,162487,162489,162491,162493],{"class":74,"line":75},[72,162481,32365],{"class":78},[72,162483,161286],{"class":358},[72,162485,162486],{"class":82},"(name: ",[72,162488,1728],{"class":362},[72,162490,162455],{"class":82},[72,162492,96103],{"class":362},[72,162494,4167],{"class":82},[72,162496,162497,162499,162501,162503,162505,162507,162509,162511,162513],{"class":74,"line":370},[72,162498,31717],{"class":362},[72,162500,564],{"class":82},[72,162502,615],{"class":78},[72,162504,157344],{"class":366},[72,162506,1450],{"class":362},[72,162508,80228],{"class":82},[72,162510,1500],{"class":362},[72,162512,805],{"class":366},[72,162514,570],{"class":82},[15,162516,162517],{},"列表参数：",[63,162519,162521],{"className":65,"code":162520,"language":67,"meta":68,"style":68},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[34,162522,162523,162542,162550,162562,162571],{"__ignoreMap":68},[72,162524,162525,162527,162530,162533,162535,162538,162540],{"class":74,"line":75},[72,162526,32365],{"class":78},[72,162528,162529],{"class":358}," get_total",[72,162531,162532],{"class":82},"(numbers: list[",[72,162534,567],{"class":362},[72,162536,162537],{"class":82},"]) -> ",[72,162539,567],{"class":362},[72,162541,4167],{"class":82},[72,162543,162544,162546,162548],{"class":74,"line":370},[72,162545,159597],{"class":82},[72,162547,609],{"class":78},[72,162549,47751],{"class":362},[72,162551,162552,162554,162557,162559],{"class":74,"line":1608},[72,162553,3629],{"class":78},[72,162555,162556],{"class":82}," number ",[72,162558,26465],{"class":78},[72,162560,162561],{"class":82}," numbers:\n",[72,162563,162564,162566,162568],{"class":74,"line":1623},[72,162565,160272],{"class":82},[72,162567,9903],{"class":78},[72,162569,162570],{"class":82}," number\n",[72,162572,162573,162575],{"class":74,"line":1629},[72,162574,4518],{"class":78},[72,162576,162577],{"class":82}," total\n",[15,162579,162580],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[85,162582,162584],{"id":162583},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[63,162586,162588],{"className":65,"code":162587,"language":67,"meta":68,"style":68},"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",[34,162589,162590,162600,162604,162608,162616,162627,162637,162647,162657,162667,162671,162675,162684,162706,162710,162714,162723,162729,162749,162761,162772,162776,162785,162796,162801,162805,162809,162818,162824,162843,162855,162865,162869,162880,162890,162894,162902,162913,162917,162921,162925,162933,162938,162952,162956,162968,162973,162985,162990,163002,163007,163019,163029,163033,163039],{"__ignoreMap":68},[72,162591,162592,162595,162597],{"class":74,"line":75},[72,162593,162594],{"class":82},"balance ",[72,162596,609],{"class":78},[72,162598,162599],{"class":362}," 1000\n",[72,162601,162602],{"class":74,"line":370},[72,162603,2828],{"emptyLinePlaceholder":490},[72,162605,162606],{"class":74,"line":1608},[72,162607,2828],{"emptyLinePlaceholder":490},[72,162609,162610,162612,162614],{"class":74,"line":1623},[72,162611,32365],{"class":78},[72,162613,152323],{"class":358},[72,162615,32371],{"class":82},[72,162617,162618,162620,162622,162625],{"class":74,"line":1629},[72,162619,31717],{"class":362},[72,162621,564],{"class":82},[72,162623,162624],{"class":366},"\"====== ATM ======\"",[72,162626,570],{"class":82},[72,162628,162629,162631,162633,162635],{"class":74,"line":1643},[72,162630,31717],{"class":362},[72,162632,564],{"class":82},[72,162634,160938],{"class":366},[72,162636,570],{"class":82},[72,162638,162639,162641,162643,162645],{"class":74,"line":1649},[72,162640,31717],{"class":362},[72,162642,564],{"class":82},[72,162644,160949],{"class":366},[72,162646,570],{"class":82},[72,162648,162649,162651,162653,162655],{"class":74,"line":1740},[72,162650,31717],{"class":362},[72,162652,564],{"class":82},[72,162654,160960],{"class":366},[72,162656,570],{"class":82},[72,162658,162659,162661,162663,162665],{"class":74,"line":1746},[72,162660,31717],{"class":362},[72,162662,564],{"class":82},[72,162664,160971],{"class":366},[72,162666,570],{"class":82},[72,162668,162669],{"class":74,"line":1758},[72,162670,2828],{"emptyLinePlaceholder":490},[72,162672,162673],{"class":74,"line":2041},[72,162674,2828],{"emptyLinePlaceholder":490},[72,162676,162677,162679,162682],{"class":74,"line":2046},[72,162678,32365],{"class":78},[72,162680,162681],{"class":358}," show_balance",[72,162683,32371],{"class":82},[72,162685,162686,162688,162690,162692,162695,162697,162700,162702,162704],{"class":74,"line":2052},[72,162687,31717],{"class":362},[72,162689,564],{"class":82},[72,162691,615],{"class":78},[72,162693,162694],{"class":366},"\"当前余额:",[72,162696,1450],{"class":362},[72,162698,162699],{"class":82},"balance",[72,162701,1500],{"class":362},[72,162703,157302],{"class":366},[72,162705,570],{"class":82},[72,162707,162708],{"class":74,"line":2057},[72,162709,2828],{"emptyLinePlaceholder":490},[72,162711,162712],{"class":74,"line":2071},[72,162713,2828],{"emptyLinePlaceholder":490},[72,162715,162716,162718,162721],{"class":74,"line":2076},[72,162717,32365],{"class":78},[72,162719,162720],{"class":358}," save_money",[72,162722,32371],{"class":82},[72,162724,162725,162727],{"class":74,"line":2082},[72,162726,162151],{"class":78},[72,162728,150389],{"class":82},[72,162730,162731,162734,162736,162738,162740,162742,162744,162747],{"class":74,"line":2103},[72,162732,162733],{"class":82},"    money ",[72,162735,609],{"class":78},[72,162737,110197],{"class":362},[72,162739,564],{"class":82},[72,162741,54239],{"class":362},[72,162743,564],{"class":82},[72,162745,162746],{"class":366},"\"请输入存款金额:\"",[72,162748,30915],{"class":82},[72,162750,162751,162753,162755,162757,162759],{"class":74,"line":2108},[72,162752,3529],{"class":78},[72,162754,150432],{"class":82},[72,162756,2017],{"class":78},[72,162758,4521],{"class":362},[72,162760,4167],{"class":82},[72,162762,162763,162765,162767,162770],{"class":74,"line":2122},[72,162764,32869],{"class":362},[72,162766,564],{"class":82},[72,162768,162769],{"class":366},"\"金额必须大于0\"",[72,162771,570],{"class":82},[72,162773,162774],{"class":74,"line":2127},[72,162775,152651],{"class":78},[72,162777,162778,162781,162783],{"class":74,"line":2156},[72,162779,162780],{"class":82},"    balance ",[72,162782,9903],{"class":78},[72,162784,150465],{"class":82},[72,162786,162787,162789,162791,162794],{"class":74,"line":2161},[72,162788,31717],{"class":362},[72,162790,564],{"class":82},[72,162792,162793],{"class":366},"\"存款成功\"",[72,162795,570],{"class":82},[72,162797,162798],{"class":74,"line":2178},[72,162799,162800],{"class":82},"    show_balance()\n",[72,162802,162803],{"class":74,"line":2183},[72,162804,2828],{"emptyLinePlaceholder":490},[72,162806,162807],{"class":74,"line":2188},[72,162808,2828],{"emptyLinePlaceholder":490},[72,162810,162811,162813,162816],{"class":74,"line":2193},[72,162812,32365],{"class":78},[72,162814,162815],{"class":358}," withdraw_money",[72,162817,32371],{"class":82},[72,162819,162820,162822],{"class":74,"line":2207},[72,162821,162151],{"class":78},[72,162823,150389],{"class":82},[72,162825,162826,162828,162830,162832,162834,162836,162838,162841],{"class":74,"line":2212},[72,162827,162733],{"class":82},[72,162829,609],{"class":78},[72,162831,110197],{"class":362},[72,162833,564],{"class":82},[72,162835,54239],{"class":362},[72,162837,564],{"class":82},[72,162839,162840],{"class":366},"\"请输入取款金额:\"",[72,162842,30915],{"class":82},[72,162844,162845,162847,162849,162851,162853],{"class":74,"line":3005},[72,162846,3529],{"class":78},[72,162848,150432],{"class":82},[72,162850,2017],{"class":78},[72,162852,4521],{"class":362},[72,162854,4167],{"class":82},[72,162856,162857,162859,162861,162863],{"class":74,"line":3019},[72,162858,32869],{"class":362},[72,162860,564],{"class":82},[72,162862,162769],{"class":366},[72,162864,570],{"class":82},[72,162866,162867],{"class":74,"line":3027},[72,162868,152651],{"class":78},[72,162870,162871,162873,162875,162877],{"class":74,"line":3032},[72,162872,3529],{"class":78},[72,162874,150432],{"class":82},[72,162876,1514],{"class":78},[72,162878,162879],{"class":82}," balance:\n",[72,162881,162882,162884,162886,162888],{"class":74,"line":3038},[72,162883,32869],{"class":362},[72,162885,564],{"class":82},[72,162887,150527],{"class":366},[72,162889,570],{"class":82},[72,162891,162892],{"class":74,"line":3044},[72,162893,152651],{"class":78},[72,162895,162896,162898,162900],{"class":74,"line":3049},[72,162897,162780],{"class":82},[72,162899,150542],{"class":78},[72,162901,150465],{"class":82},[72,162903,162904,162906,162908,162911],{"class":74,"line":8374},[72,162905,31717],{"class":362},[72,162907,564],{"class":82},[72,162909,162910],{"class":366},"\"取款成功\"",[72,162912,570],{"class":82},[72,162914,162915],{"class":74,"line":8398},[72,162916,162800],{"class":82},[72,162918,162919],{"class":74,"line":8403},[72,162920,2828],{"emptyLinePlaceholder":490},[72,162922,162923],{"class":74,"line":8409},[72,162924,2828],{"emptyLinePlaceholder":490},[72,162926,162927,162929,162931],{"class":74,"line":8436},[72,162928,109063],{"class":78},[72,162930,95709],{"class":362},[72,162932,4167],{"class":82},[72,162934,162935],{"class":74,"line":8441},[72,162936,162937],{"class":82},"    show_menu()\n",[72,162939,162940,162942,162944,162946,162948,162950],{"class":74,"line":8447},[72,162941,160982],{"class":82},[72,162943,609],{"class":78},[72,162945,61023],{"class":362},[72,162947,564],{"class":82},[72,162949,153363],{"class":366},[72,162951,570],{"class":82},[72,162953,162954],{"class":74,"line":8459},[72,162955,2828],{"emptyLinePlaceholder":490},[72,162957,162958,162960,162962,162964,162966],{"class":74,"line":8471},[72,162959,3529],{"class":78},[72,162961,153376],{"class":82},[72,162963,3377],{"class":78},[72,162965,153381],{"class":366},[72,162967,4167],{"class":82},[72,162969,162970],{"class":74,"line":8483},[72,162971,162972],{"class":82},"        show_balance()\n",[72,162974,162975,162977,162979,162981,162983],{"class":74,"line":10142},[72,162976,39711],{"class":78},[72,162978,153376],{"class":82},[72,162980,3377],{"class":78},[72,162982,153400],{"class":366},[72,162984,4167],{"class":82},[72,162986,162987],{"class":74,"line":10167},[72,162988,162989],{"class":82},"        save_money()\n",[72,162991,162992,162994,162996,162998,163000],{"class":74,"line":10190},[72,162993,39711],{"class":78},[72,162995,153376],{"class":82},[72,162997,3377],{"class":78},[72,162999,153418],{"class":366},[72,163001,4167],{"class":82},[72,163003,163004],{"class":74,"line":10214},[72,163005,163006],{"class":82},"        withdraw_money()\n",[72,163008,163009,163011,163013,163015,163017],{"class":74,"line":10219},[72,163010,39711],{"class":78},[72,163012,153376],{"class":82},[72,163014,3377],{"class":78},[72,163016,153472],{"class":366},[72,163018,4167],{"class":82},[72,163020,163021,163023,163025,163027],{"class":74,"line":10224},[72,163022,32869],{"class":362},[72,163024,564],{"class":82},[72,163026,153483],{"class":366},[72,163028,570],{"class":82},[72,163030,163031],{"class":74,"line":10229},[72,163032,32045],{"class":78},[72,163034,163035,163037],{"class":74,"line":10238},[72,163036,158312],{"class":78},[72,163038,4167],{"class":82},[72,163040,163041,163043,163045,163047],{"class":74,"line":10243},[72,163042,32869],{"class":362},[72,163044,564],{"class":82},[72,163046,153504],{"class":366},[72,163048,570],{"class":82},[15,163050,163051],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[85,163053,163055],{"id":163054},"_514-易错点","5.14 易错点",[22,163057,163058,163061,163064,163069,163074,163077],{},[25,163059,163060],{},"函数定义后必须调用才会执行。",[25,163062,163063],{},"函数名后面有括号才是调用。",[25,163065,163066,163068],{},[34,163067,17472],{}," 后面的代码不会执行。",[25,163070,163071,163072,28807],{},"没有返回值的函数默认返回 ",[34,163073,96103],{},[25,163075,163076],{},"局部变量不能在函数外部访问。",[25,163078,163079,163080,163082],{},"不要滥用 ",[34,163081,162116],{},"，更好的方式是让函数返回新值。",[15,163084,163085,163086,163088],{},"例如不用 ",[34,163087,162116],{}," 改写存款：",[63,163090,163092],{"className":65,"code":163091,"language":67,"meta":68,"style":68},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[34,163093,163094,163103,163114,163118,163122,163130,163143],{"__ignoreMap":68},[72,163095,163096,163098,163100],{"class":74,"line":75},[72,163097,32365],{"class":78},[72,163099,162720],{"class":358},[72,163101,163102],{"class":82},"(balance, money):\n",[72,163104,163105,163107,163110,163112],{"class":74,"line":370},[72,163106,4518],{"class":78},[72,163108,163109],{"class":82}," balance ",[72,163111,1035],{"class":78},[72,163113,150465],{"class":82},[72,163115,163116],{"class":74,"line":1608},[72,163117,2828],{"emptyLinePlaceholder":490},[72,163119,163120],{"class":74,"line":1623},[72,163121,2828],{"emptyLinePlaceholder":490},[72,163123,163124,163126,163128],{"class":74,"line":1629},[72,163125,162594],{"class":82},[72,163127,609],{"class":78},[72,163129,162599],{"class":362},[72,163131,163132,163134,163136,163139,163141],{"class":74,"line":1643},[72,163133,162594],{"class":82},[72,163135,609],{"class":78},[72,163137,163138],{"class":82}," save_money(balance, ",[72,163140,2151],{"class":362},[72,163142,570],{"class":82},[72,163144,163145,163147],{"class":74,"line":1649},[72,163146,30833],{"class":362},[72,163148,163149],{"class":82},"(balance)\n",[85,163151,163153],{"id":163152},"_515-本章练习","5.15 本章练习",[22,163155,163156,163163,163169,163175,163181],{},[25,163157,163158,163159,163162],{},"定义函数 ",[34,163160,163161],{},"print_student(name, age)","，输出学生信息。",[25,163164,163158,163165,163168],{},[34,163166,163167],{},"get_max(a, b, c)","，返回三个数中的最大值。",[25,163170,163158,163171,163174],{},[34,163172,163173],{},"is_even(num)","，判断一个数是否为偶数。",[25,163176,163158,163177,163180],{},[34,163178,163179],{},"calculate_bmi(weight, height)","，返回 BMI。",[25,163182,163183],{},"把第 4 章的菜单程序拆分成多个函数。",[473,163185,163186],{},"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":68,"searchDepth":370,"depth":370,"links":163188},[163189,163190,163191,163192,163193,163194,163195,163196,163197,163201,163202,163203,163204,163205,163206],{"id":161209,"depth":370,"text":161210},{"id":161250,"depth":370,"text":161251},{"id":161340,"depth":370,"text":161341},{"id":161421,"depth":370,"text":161422},{"id":161554,"depth":370,"text":161555},{"id":161676,"depth":370,"text":161677},{"id":161798,"depth":370,"text":161799},{"id":161875,"depth":370,"text":161876},{"id":161997,"depth":370,"text":161998,"children":163198},[163199,163200],{"id":162001,"depth":1608,"text":162002},{"id":162059,"depth":1608,"text":162060},{"id":162188,"depth":370,"text":162189},{"id":162314,"depth":370,"text":162315},{"id":162427,"depth":370,"text":162428},{"id":162583,"depth":370,"text":162584},{"id":163054,"depth":370,"text":163055},{"id":163152,"depth":370,"text":163153},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":161201,"description":23802},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":163213,"title":163214,"body":163215,"description":23802,"extension":487,"meta":166259,"navigation":490,"path":166260,"seo":166261,"stem":166262,"__hash__":166263},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":163216,"toc":166240},[163217,163220,163224,163227,163230,163334,163337,163341,163344,163424,163427,163431,163434,163494,163497,163533,163536,163551,163555,163628,163631,163686,163689,163759,163762,163846,163856,163914,163918,163963,163966,163992,163995,164101,164105,164108,164150,164153,164217,164220,164224,164227,164288,164291,164321,164324,164362,164366,164369,164378,164381,164505,164508,164549,164553,164556,164567,164607,164610,164625,164630,164633,164700,164703,164793,164797,164800,164848,164851,164878,164880,164910,164913,164933,164936,164967,164970,165003,165007,165010,165034,165037,165061,165064,165088,165092,165095,165225,165228,165308,165311,165386,165390,165393,165443,165446,165488,165491,165515,165517,165541,165544,165599,165602,165668,165672,165675,165678,165716,165719,165772,165775,165821,165824,165857,165860,165864,166183,166187,166216,166220,166237],[10,163218,163214],{"id":163219},"_6-数据容器",[85,163221,163223],{"id":163222},"_61-什么是数据容器","6.1 什么是数据容器",[15,163225,163226],{},"数据容器用于一次保存多个数据。",[15,163228,163229],{},"常见容器：",[154,163231,163232,163249],{},[157,163233,163234],{},[160,163235,163236,163238,163241,163244,163247],{},[163,163237,26193],{},[163,163239,163240],{},"是否有序",[163,163242,163243],{},"是否可变",[163,163245,163246],{},"是否允许重复",[163,163248,27914],{},[174,163250,163251,163269,163285,163300,163317],{},[160,163252,163253,163256,163259,163262,163265],{},[179,163254,163255],{},"list列表",[179,163257,163258],{},"有序",[179,163260,163261],{},"可变",[179,163263,163264],{},"允许",[179,163266,163267],{},[34,163268,155547],{},[160,163270,163271,163274,163276,163279,163281],{},[179,163272,163273],{},"tuple元组",[179,163275,163258],{},[179,163277,163278],{},"不可变",[179,163280,163264],{},[179,163282,163283],{},[34,163284,155560],{},[160,163286,163287,163290,163292,163294,163296],{},[179,163288,163289],{},"str字符串",[179,163291,163258],{},[179,163293,163278],{},[179,163295,163264],{},[179,163297,163298],{},[34,163299,156170],{},[160,163301,163302,163305,163308,163310,163313],{},[179,163303,163304],{},"set集合",[179,163306,163307],{},"无序",[179,163309,163261],{},[179,163311,163312],{},"不允许",[179,163314,163315],{},[34,163316,155585],{},[160,163318,163319,163322,163324,163326,163329],{},[179,163320,163321],{},"dict字典",[179,163323,163258],{},[179,163325,163261],{},[179,163327,163328],{},"key不允许重复",[179,163330,163331],{},[34,163332,163333],{},"{\"name\": \"小明\"}",[15,163335,163336],{},"Python 3.7 之后，字典保持插入顺序。",[85,163338,163340],{"id":163339},"_62-列表list","6.2 列表list",[15,163342,163343],{},"列表用于保存一组有顺序的数据。",[63,163345,163347],{"className":65,"code":163346,"language":67,"meta":68,"style":68},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[34,163348,163349,163369,163394,163415],{"__ignoreMap":68},[72,163350,163351,163353,163355,163357,163359,163361,163363,163365,163367],{"class":74,"line":75},[72,163352,160670],{"class":82},[72,163354,609],{"class":78},[72,163356,52644],{"class":82},[72,163358,150178],{"class":366},[72,163360,12861],{"class":82},[72,163362,151226],{"class":366},[72,163364,12861],{"class":82},[72,163366,160021],{"class":366},[72,163368,33664],{"class":82},[72,163370,163371,163374,163376,163378,163380,163382,163384,163386,163388,163390,163392],{"class":74,"line":370},[72,163372,163373],{"class":82},"numbers ",[72,163375,609],{"class":78},[72,163377,52644],{"class":82},[72,163379,772],{"class":362},[72,163381,12861],{"class":82},[72,163383,640],{"class":362},[72,163385,12861],{"class":82},[72,163387,634],{"class":362},[72,163389,12861],{"class":82},[72,163391,847],{"class":362},[72,163393,33664],{"class":82},[72,163395,163396,163399,163401,163403,163405,163407,163409,163411,163413],{"class":74,"line":1608},[72,163397,163398],{"class":82},"mixed ",[72,163400,609],{"class":78},[72,163402,52644],{"class":82},[72,163404,150178],{"class":366},[72,163406,12861],{"class":82},[72,163408,1204],{"class":362},[72,163410,12861],{"class":82},[72,163412,31894],{"class":362},[72,163414,33664],{"class":82},[72,163416,163417,163420,163422],{"class":74,"line":1623},[72,163418,163419],{"class":82},"empty ",[72,163421,609],{"class":78},[72,163423,52256],{"class":82},[15,163425,163426],{},"推荐一个列表中保存同类数据，代码更清晰。",[85,163428,163430],{"id":163429},"_63-列表索引","6.3 列表索引",[15,163432,163433],{},"正向索引从 0 开始：",[63,163435,163437],{"className":65,"code":163436,"language":67,"meta":68,"style":68},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[34,163438,163439,163459,163463,163474,163484],{"__ignoreMap":68},[72,163440,163441,163443,163445,163447,163449,163451,163453,163455,163457],{"class":74,"line":75},[72,163442,160670],{"class":82},[72,163444,609],{"class":78},[72,163446,52644],{"class":82},[72,163448,150178],{"class":366},[72,163450,12861],{"class":82},[72,163452,151226],{"class":366},[72,163454,12861],{"class":82},[72,163456,160021],{"class":366},[72,163458,33664],{"class":82},[72,163460,163461],{"class":74,"line":370},[72,163462,2828],{"emptyLinePlaceholder":490},[72,163464,163465,163467,163470,163472],{"class":74,"line":1608},[72,163466,30833],{"class":362},[72,163468,163469],{"class":82},"(names[",[72,163471,747],{"class":362},[72,163473,5085],{"class":82},[72,163475,163476,163478,163480,163482],{"class":74,"line":1623},[72,163477,30833],{"class":362},[72,163479,163469],{"class":82},[72,163481,772],{"class":362},[72,163483,5085],{"class":82},[72,163485,163486,163488,163490,163492],{"class":74,"line":1629},[72,163487,30833],{"class":362},[72,163489,163469],{"class":82},[72,163491,640],{"class":362},[72,163493,5085],{"class":82},[15,163495,163496],{},"反向索引从 -1 开始：",[63,163498,163500],{"className":65,"code":163499,"language":67,"meta":68,"style":68},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[34,163501,163502,163518],{"__ignoreMap":68},[72,163503,163504,163506,163508,163510,163512,163515],{"class":74,"line":75},[72,163505,30833],{"class":362},[72,163507,163469],{"class":82},[72,163509,1086],{"class":78},[72,163511,772],{"class":362},[72,163513,163514],{"class":82},"])  ",[72,163516,163517],{"class":621},"# 小刚\n",[72,163519,163520,163522,163524,163526,163528,163530],{"class":74,"line":370},[72,163521,30833],{"class":362},[72,163523,163469],{"class":82},[72,163525,1086],{"class":78},[72,163527,640],{"class":362},[72,163529,163514],{"class":82},[72,163531,163532],{"class":621},"# 小红\n",[15,163534,163535],{},"索引越界会报错：",[63,163537,163539],{"className":65,"code":163538,"language":67,"meta":68,"style":68},"print(names[3])\n",[34,163540,163541],{"__ignoreMap":68},[72,163542,163543,163545,163547,163549],{"class":74,"line":75},[72,163544,30833],{"class":362},[72,163546,163469],{"class":82},[72,163548,634],{"class":362},[72,163550,5085],{"class":82},[85,163552,163554],{"id":163553},"_64-列表常用方法","6.4 列表常用方法",[63,163556,163558],{"className":65,"code":163557,"language":67,"meta":68,"style":68},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[34,163559,163560,163576,163580,163589,163603,163617,163621],{"__ignoreMap":68},[72,163561,163562,163564,163566,163568,163570,163572,163574],{"class":74,"line":75},[72,163563,160670],{"class":82},[72,163565,609],{"class":78},[72,163567,52644],{"class":82},[72,163569,150178],{"class":366},[72,163571,12861],{"class":82},[72,163573,151226],{"class":366},[72,163575,33664],{"class":82},[72,163577,163578],{"class":74,"line":370},[72,163579,2828],{"emptyLinePlaceholder":490},[72,163581,163582,163585,163587],{"class":74,"line":1608},[72,163583,163584],{"class":82},"names.append(",[72,163586,160021],{"class":366},[72,163588,570],{"class":82},[72,163590,163591,163594,163596,163598,163601],{"class":74,"line":1623},[72,163592,163593],{"class":82},"names.insert(",[72,163595,772],{"class":362},[72,163597,12861],{"class":82},[72,163599,163600],{"class":366},"\"小李\"",[72,163602,570],{"class":82},[72,163604,163605,163608,163610,163612,163615],{"class":74,"line":1629},[72,163606,163607],{"class":82},"names.extend([",[72,163609,9109],{"class":366},[72,163611,12861],{"class":82},[72,163613,163614],{"class":366},"\"小赵\"",[72,163616,5085],{"class":82},[72,163618,163619],{"class":74,"line":1643},[72,163620,2828],{"emptyLinePlaceholder":490},[72,163622,163623,163625],{"class":74,"line":1649},[72,163624,30833],{"class":362},[72,163626,163627],{"class":82},"(names)\n",[15,163629,163630],{},"删除元素：",[63,163632,163634],{"className":65,"code":163633,"language":67,"meta":68,"style":68},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[34,163635,163636,163645,163655,163669,163681],{"__ignoreMap":68},[72,163637,163638,163641,163643],{"class":74,"line":75},[72,163639,163640],{"class":82},"names.remove(",[72,163642,151226],{"class":366},[72,163644,570],{"class":82},[72,163646,163647,163650,163652],{"class":74,"line":370},[72,163648,163649],{"class":82},"last ",[72,163651,609],{"class":78},[72,163653,163654],{"class":82}," names.pop()\n",[72,163656,163657,163660,163662,163665,163667],{"class":74,"line":1608},[72,163658,163659],{"class":82},"first ",[72,163661,609],{"class":78},[72,163663,163664],{"class":82}," names.pop(",[72,163666,747],{"class":362},[72,163668,570],{"class":82},[72,163670,163671,163674,163677,163679],{"class":74,"line":1623},[72,163672,163673],{"class":78},"del",[72,163675,163676],{"class":82}," names[",[72,163678,747],{"class":362},[72,163680,33664],{"class":82},[72,163682,163683],{"class":74,"line":1629},[72,163684,163685],{"class":82},"names.clear()\n",[15,163687,163688],{},"查询和统计：",[63,163690,163692],{"className":65,"code":163691,"language":67,"meta":68,"style":68},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[34,163693,163694,163722,163726,163737,163748],{"__ignoreMap":68},[72,163695,163696,163698,163700,163702,163704,163706,163708,163710,163712,163714,163716,163718,163720],{"class":74,"line":75},[72,163697,163373],{"class":82},[72,163699,609],{"class":78},[72,163701,52644],{"class":82},[72,163703,772],{"class":362},[72,163705,12861],{"class":82},[72,163707,640],{"class":362},[72,163709,12861],{"class":82},[72,163711,634],{"class":362},[72,163713,12861],{"class":82},[72,163715,640],{"class":362},[72,163717,12861],{"class":82},[72,163719,847],{"class":362},[72,163721,33664],{"class":82},[72,163723,163724],{"class":74,"line":370},[72,163725,2828],{"emptyLinePlaceholder":490},[72,163727,163728,163730,163733,163735],{"class":74,"line":1608},[72,163729,30833],{"class":362},[72,163731,163732],{"class":82},"(numbers.index(",[72,163734,634],{"class":362},[72,163736,30915],{"class":82},[72,163738,163739,163741,163744,163746],{"class":74,"line":1623},[72,163740,30833],{"class":362},[72,163742,163743],{"class":82},"(numbers.count(",[72,163745,640],{"class":362},[72,163747,30915],{"class":82},[72,163749,163750,163752,163754,163756],{"class":74,"line":1629},[72,163751,30833],{"class":362},[72,163753,564],{"class":82},[72,163755,7784],{"class":362},[72,163757,163758],{"class":82},"(numbers))\n",[15,163760,163761],{},"排序：",[63,163763,163765],{"className":65,"code":163764,"language":67,"meta":68,"style":68},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[34,163766,163767,163791,163795,163800,163807,163811,163825,163831,163835,163840],{"__ignoreMap":68},[72,163768,163769,163771,163773,163775,163777,163779,163781,163783,163785,163787,163789],{"class":74,"line":75},[72,163770,163373],{"class":82},[72,163772,609],{"class":78},[72,163774,52644],{"class":82},[72,163776,634],{"class":362},[72,163778,12861],{"class":82},[72,163780,772],{"class":362},[72,163782,12861],{"class":82},[72,163784,873],{"class":362},[72,163786,12861],{"class":82},[72,163788,640],{"class":362},[72,163790,33664],{"class":82},[72,163792,163793],{"class":74,"line":370},[72,163794,2828],{"emptyLinePlaceholder":490},[72,163796,163797],{"class":74,"line":1608},[72,163798,163799],{"class":82},"numbers.sort()\n",[72,163801,163802,163804],{"class":74,"line":1623},[72,163803,30833],{"class":362},[72,163805,163806],{"class":82},"(numbers)\n",[72,163808,163809],{"class":74,"line":1629},[72,163810,2828],{"emptyLinePlaceholder":490},[72,163812,163813,163816,163819,163821,163823],{"class":74,"line":1643},[72,163814,163815],{"class":82},"numbers.sort(",[72,163817,163818],{"class":5642},"reverse",[72,163820,609],{"class":78},[72,163822,31894],{"class":362},[72,163824,570],{"class":82},[72,163826,163827,163829],{"class":74,"line":1649},[72,163828,30833],{"class":362},[72,163830,163806],{"class":82},[72,163832,163833],{"class":74,"line":1740},[72,163834,2828],{"emptyLinePlaceholder":490},[72,163836,163837],{"class":74,"line":1746},[72,163838,163839],{"class":82},"numbers.reverse()\n",[72,163841,163842,163844],{"class":74,"line":1758},[72,163843,30833],{"class":362},[72,163845,163806],{"class":82},[15,163847,163848,163851,163852,163855],{},[34,163849,163850],{},"sort()"," 会修改原列表，",[34,163853,163854],{},"sorted()"," 返回新列表。",[63,163857,163859],{"className":65,"code":163858,"language":67,"meta":68,"style":68},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[34,163860,163861,163885,163897,163901,163907],{"__ignoreMap":68},[72,163862,163863,163865,163867,163869,163871,163873,163875,163877,163879,163881,163883],{"class":74,"line":75},[72,163864,163373],{"class":82},[72,163866,609],{"class":78},[72,163868,52644],{"class":82},[72,163870,634],{"class":362},[72,163872,12861],{"class":82},[72,163874,772],{"class":362},[72,163876,12861],{"class":82},[72,163878,873],{"class":362},[72,163880,12861],{"class":82},[72,163882,640],{"class":362},[72,163884,33664],{"class":82},[72,163886,163887,163890,163892,163895],{"class":74,"line":370},[72,163888,163889],{"class":82},"new_numbers ",[72,163891,609],{"class":78},[72,163893,163894],{"class":362}," sorted",[72,163896,163806],{"class":82},[72,163898,163899],{"class":74,"line":1608},[72,163900,2828],{"emptyLinePlaceholder":490},[72,163902,163903,163905],{"class":74,"line":1623},[72,163904,30833],{"class":362},[72,163906,163806],{"class":82},[72,163908,163909,163911],{"class":74,"line":1629},[72,163910,30833],{"class":362},[72,163912,163913],{"class":82},"(new_numbers)\n",[85,163915,163917],{"id":163916},"_65-列表遍历","6.5 列表遍历",[63,163919,163921],{"className":65,"code":163920,"language":67,"meta":68,"style":68},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[34,163922,163923,163943,163947,163957],{"__ignoreMap":68},[72,163924,163925,163927,163929,163931,163933,163935,163937,163939,163941],{"class":74,"line":75},[72,163926,160670],{"class":82},[72,163928,609],{"class":78},[72,163930,52644],{"class":82},[72,163932,150178],{"class":366},[72,163934,12861],{"class":82},[72,163936,151226],{"class":366},[72,163938,12861],{"class":82},[72,163940,160021],{"class":366},[72,163942,33664],{"class":82},[72,163944,163945],{"class":74,"line":370},[72,163946,2828],{"emptyLinePlaceholder":490},[72,163948,163949,163951,163953,163955],{"class":74,"line":1608},[72,163950,3453],{"class":78},[72,163952,160706],{"class":82},[72,163954,26465],{"class":78},[72,163956,160711],{"class":82},[72,163958,163959,163961],{"class":74,"line":1623},[72,163960,31717],{"class":362},[72,163962,150950],{"class":82},[15,163964,163965],{},"需要索引时：",[63,163967,163969],{"className":65,"code":163968,"language":67,"meta":68,"style":68},"for index, name in enumerate(names):\n    print(index, name)\n",[34,163970,163971,163985],{"__ignoreMap":68},[72,163972,163973,163975,163978,163980,163982],{"class":74,"line":75},[72,163974,3453],{"class":78},[72,163976,163977],{"class":82}," index, name ",[72,163979,26465],{"class":78},[72,163981,32024],{"class":362},[72,163983,163984],{"class":82},"(names):\n",[72,163986,163987,163989],{"class":74,"line":370},[72,163988,31717],{"class":362},[72,163990,163991],{"class":82},"(index, name)\n",[15,163993,163994],{},"统计总分：",[63,163996,163998],{"className":65,"code":163997,"language":67,"meta":68,"style":68},"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",[34,163999,164000,164025,164033,164037,164048,164056,164060,164077],{"__ignoreMap":68},[72,164001,164002,164005,164007,164009,164011,164013,164015,164017,164019,164021,164023],{"class":74,"line":75},[72,164003,164004],{"class":82},"scores ",[72,164006,609],{"class":78},[72,164008,52644],{"class":82},[72,164010,1416],{"class":362},[72,164012,12861],{"class":82},[72,164014,1290],{"class":362},[72,164016,12861],{"class":82},[72,164018,808],{"class":362},[72,164020,12861],{"class":82},[72,164022,1115],{"class":362},[72,164024,33664],{"class":82},[72,164026,164027,164029,164031],{"class":74,"line":370},[72,164028,157550],{"class":82},[72,164030,609],{"class":78},[72,164032,47751],{"class":362},[72,164034,164035],{"class":74,"line":1608},[72,164036,2828],{"emptyLinePlaceholder":490},[72,164038,164039,164041,164043,164045],{"class":74,"line":1623},[72,164040,3453],{"class":78},[72,164042,158073],{"class":82},[72,164044,26465],{"class":78},[72,164046,164047],{"class":82}," scores:\n",[72,164049,164050,164052,164054],{"class":74,"line":1629},[72,164051,159597],{"class":82},[72,164053,9903],{"class":78},[72,164055,2008],{"class":82},[72,164057,164058],{"class":74,"line":1643},[72,164059,2828],{"emptyLinePlaceholder":490},[72,164061,164062,164065,164067,164070,164072,164074],{"class":74,"line":1649},[72,164063,164064],{"class":82},"avg ",[72,164066,609],{"class":78},[72,164068,164069],{"class":82}," total ",[72,164071,1138],{"class":78},[72,164073,7757],{"class":362},[72,164075,164076],{"class":82},"(scores)\n",[72,164078,164079,164081,164083,164085,164088,164090,164093,164095,164097,164099],{"class":74,"line":1740},[72,164080,30833],{"class":362},[72,164082,564],{"class":82},[72,164084,615],{"class":78},[72,164086,164087],{"class":366},"\"平均分:",[72,164089,1450],{"class":362},[72,164091,164092],{"class":82},"avg",[72,164094,157449],{"class":78},[72,164096,1500],{"class":362},[72,164098,805],{"class":366},[72,164100,570],{"class":82},[85,164102,164104],{"id":164103},"_66-元组tuple","6.6 元组tuple",[15,164106,164107],{},"元组和列表类似，但不可修改。",[63,164109,164111],{"className":65,"code":164110,"language":67,"meta":68,"style":68},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[34,164112,164113,164130],{"__ignoreMap":68},[72,164114,164115,164118,164120,164122,164124,164126,164128],{"class":74,"line":75},[72,164116,164117],{"class":82},"point ",[72,164119,609],{"class":78},[72,164121,2087],{"class":82},[72,164123,1000],{"class":362},[72,164125,12861],{"class":82},[72,164127,1254],{"class":362},[72,164129,570],{"class":82},[72,164131,164132,164134,164136,164138,164140,164142,164144,164146,164148],{"class":74,"line":370},[72,164133,116714],{"class":82},[72,164135,609],{"class":78},[72,164137,2087],{"class":82},[72,164139,150178],{"class":366},[72,164141,12861],{"class":82},[72,164143,1204],{"class":362},[72,164145,12861],{"class":82},[72,164147,69687],{"class":366},[72,164149,570],{"class":82},[15,164151,164152],{},"单元素元组必须加逗号：",[63,164154,164156],{"className":65,"code":164155,"language":67,"meta":68,"style":68},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[34,164157,164158,164172,164185,164189,164203],{"__ignoreMap":68},[72,164159,164160,164163,164165,164167,164169],{"class":74,"line":75},[72,164161,164162],{"class":82},"t1 ",[72,164164,609],{"class":78},[72,164166,2087],{"class":82},[72,164168,1000],{"class":362},[72,164170,164171],{"class":82},",)\n",[72,164173,164174,164177,164179,164181,164183],{"class":74,"line":370},[72,164175,164176],{"class":82},"t2 ",[72,164178,609],{"class":78},[72,164180,2087],{"class":82},[72,164182,1000],{"class":362},[72,164184,570],{"class":82},[72,164186,164187],{"class":74,"line":1608},[72,164188,2828],{"emptyLinePlaceholder":490},[72,164190,164191,164193,164195,164197,164200],{"class":74,"line":1623},[72,164192,30833],{"class":362},[72,164194,564],{"class":82},[72,164196,103511],{"class":362},[72,164198,164199],{"class":82},"(t1))  ",[72,164201,164202],{"class":621},"# tuple\n",[72,164204,164205,164207,164209,164211,164214],{"class":74,"line":1629},[72,164206,30833],{"class":362},[72,164208,564],{"class":82},[72,164210,103511],{"class":362},[72,164212,164213],{"class":82},"(t2))  ",[72,164215,164216],{"class":621},"# int\n",[15,164218,164219],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[85,164221,164223],{"id":164222},"_67-字符串str","6.7 字符串str",[15,164225,164226],{},"字符串也是序列，可以索引、切片和遍历。",[63,164228,164230],{"className":65,"code":164229,"language":67,"meta":68,"style":68},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[34,164231,164232,164240,164244,164255,164267,164271,164282],{"__ignoreMap":68},[72,164233,164234,164236,164238],{"class":74,"line":75},[72,164235,156734],{"class":82},[72,164237,609],{"class":78},[72,164239,159971],{"class":366},[72,164241,164242],{"class":74,"line":370},[72,164243,2828],{"emptyLinePlaceholder":490},[72,164245,164246,164248,164251,164253],{"class":74,"line":1608},[72,164247,30833],{"class":362},[72,164249,164250],{"class":82},"(text[",[72,164252,747],{"class":362},[72,164254,5085],{"class":82},[72,164256,164257,164259,164261,164263,164265],{"class":74,"line":1623},[72,164258,30833],{"class":362},[72,164260,164250],{"class":82},[72,164262,1086],{"class":78},[72,164264,772],{"class":362},[72,164266,5085],{"class":82},[72,164268,164269],{"class":74,"line":1629},[72,164270,2828],{"emptyLinePlaceholder":490},[72,164272,164273,164275,164277,164279],{"class":74,"line":1643},[72,164274,3453],{"class":78},[72,164276,159982],{"class":82},[72,164278,26465],{"class":78},[72,164280,164281],{"class":82}," text:\n",[72,164283,164284,164286],{"class":74,"line":1649},[72,164285,31717],{"class":362},[72,164287,159993],{"class":82},[15,164289,164290],{},"字符串不可变：",[63,164292,164294],{"className":65,"code":164293,"language":67,"meta":68,"style":68},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[34,164295,164296,164304],{"__ignoreMap":68},[72,164297,164298,164300,164302],{"class":74,"line":75},[72,164299,156734],{"class":82},[72,164301,609],{"class":78},[72,164303,159971],{"class":366},[72,164305,164306,164309,164311,164313,164315,164318],{"class":74,"line":370},[72,164307,164308],{"class":82},"text[",[72,164310,747],{"class":362},[72,164312,4871],{"class":82},[72,164314,609],{"class":78},[72,164316,164317],{"class":366}," \"P\"",[72,164319,164320],{"class":621},"  # 报错\n",[15,164322,164323],{},"如果要得到新字符串：",[63,164325,164327],{"className":65,"code":164326,"language":67,"meta":68,"style":68},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[34,164328,164329,164337,164355],{"__ignoreMap":68},[72,164330,164331,164333,164335],{"class":74,"line":75},[72,164332,156734],{"class":82},[72,164334,609],{"class":78},[72,164336,159971],{"class":366},[72,164338,164339,164341,164343,164345,164347,164350,164352],{"class":74,"line":370},[72,164340,156734],{"class":82},[72,164342,609],{"class":78},[72,164344,164317],{"class":366},[72,164346,45984],{"class":78},[72,164348,164349],{"class":82}," text[",[72,164351,772],{"class":362},[72,164353,164354],{"class":82},":]\n",[72,164356,164357,164359],{"class":74,"line":1608},[72,164358,30833],{"class":362},[72,164360,164361],{"class":82},"(text)\n",[85,164363,164365],{"id":164364},"_68-切片","6.8 切片",[15,164367,164368],{},"切片用于从序列中取一部分。",[63,164370,164372],{"className":65,"code":164371,"language":67,"meta":68,"style":68},"序列[开始:结束:步长]\n",[34,164373,164374],{"__ignoreMap":68},[72,164375,164376],{"class":74,"line":75},[72,164377,164371],{"class":82},[15,164379,164380],{},"结束位置不包含。",[63,164382,164384],{"className":65,"code":164383,"language":67,"meta":68,"style":68},"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",[34,164385,164386,164423,164427,164446,164461,164475,164489],{"__ignoreMap":68},[72,164387,164388,164391,164393,164395,164397,164399,164401,164403,164405,164407,164409,164411,164413,164415,164417,164419,164421],{"class":74,"line":75},[72,164389,164390],{"class":82},"nums ",[72,164392,609],{"class":78},[72,164394,52644],{"class":82},[72,164396,747],{"class":362},[72,164398,12861],{"class":82},[72,164400,772],{"class":362},[72,164402,12861],{"class":82},[72,164404,640],{"class":362},[72,164406,12861],{"class":82},[72,164408,634],{"class":362},[72,164410,12861],{"class":82},[72,164412,847],{"class":362},[72,164414,12861],{"class":82},[72,164416,873],{"class":362},[72,164418,12861],{"class":82},[72,164420,898],{"class":362},[72,164422,33664],{"class":82},[72,164424,164425],{"class":74,"line":370},[72,164426,2828],{"emptyLinePlaceholder":490},[72,164428,164429,164431,164434,164436,164438,164440,164443],{"class":74,"line":1608},[72,164430,30833],{"class":362},[72,164432,164433],{"class":82},"(nums[",[72,164435,772],{"class":362},[72,164437,1413],{"class":82},[72,164439,847],{"class":362},[72,164441,164442],{"class":82},"])    ",[72,164444,164445],{"class":621},"# [1, 2, 3]\n",[72,164447,164448,164450,164453,164455,164458],{"class":74,"line":1623},[72,164449,30833],{"class":362},[72,164451,164452],{"class":82},"(nums[:",[72,164454,634],{"class":362},[72,164456,164457],{"class":82},"])     ",[72,164459,164460],{"class":621},"# [0, 1, 2]\n",[72,164462,164463,164465,164467,164469,164472],{"class":74,"line":1629},[72,164464,30833],{"class":362},[72,164466,164433],{"class":82},[72,164468,634],{"class":362},[72,164470,164471],{"class":82},":])     ",[72,164473,164474],{"class":621},"# [3, 4, 5, 6]\n",[72,164476,164477,164479,164482,164484,164486],{"class":74,"line":1643},[72,164478,30833],{"class":362},[72,164480,164481],{"class":82},"(nums[::",[72,164483,640],{"class":362},[72,164485,164442],{"class":82},[72,164487,164488],{"class":621},"# [0, 2, 4, 6]\n",[72,164490,164491,164493,164495,164497,164499,164502],{"class":74,"line":1649},[72,164492,30833],{"class":362},[72,164494,164481],{"class":82},[72,164496,1086],{"class":78},[72,164498,772],{"class":362},[72,164500,164501],{"class":82},"])   ",[72,164503,164504],{"class":621},"# 反转\n",[15,164506,164507],{},"字符串切片：",[63,164509,164511],{"className":65,"code":164510,"language":67,"meta":68,"style":68},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[34,164512,164513,164522,164536],{"__ignoreMap":68},[72,164514,164515,164517,164519],{"class":74,"line":75},[72,164516,156734],{"class":82},[72,164518,609],{"class":78},[72,164520,164521],{"class":366}," \"abcdef\"\n",[72,164523,164524,164526,164528,164530,164532,164534],{"class":74,"line":370},[72,164525,30833],{"class":362},[72,164527,164250],{"class":82},[72,164529,772],{"class":362},[72,164531,1413],{"class":82},[72,164533,847],{"class":362},[72,164535,5085],{"class":82},[72,164537,164538,164540,164543,164545,164547],{"class":74,"line":1608},[72,164539,30833],{"class":362},[72,164541,164542],{"class":82},"(text[::",[72,164544,1086],{"class":78},[72,164546,772],{"class":362},[72,164548,5085],{"class":82},[85,164550,164552],{"id":164551},"_69-集合set","6.9 集合set",[15,164554,164555],{},"集合特点：",[22,164557,164558,164561,164564],{},[25,164559,164560],{},"无序。",[25,164562,164563],{},"元素不重复。",[25,164565,164566],{},"可以做交集、并集、差集。",[63,164568,164570],{"className":65,"code":164569,"language":67,"meta":68,"style":68},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[34,164571,164572,164600],{"__ignoreMap":68},[72,164573,164574,164576,164578,164580,164582,164584,164586,164588,164590,164592,164594,164596,164598],{"class":74,"line":75},[72,164575,164390],{"class":82},[72,164577,609],{"class":78},[72,164579,4876],{"class":82},[72,164581,772],{"class":362},[72,164583,12861],{"class":82},[72,164585,640],{"class":362},[72,164587,12861],{"class":82},[72,164589,634],{"class":362},[72,164591,12861],{"class":82},[72,164593,634],{"class":362},[72,164595,12861],{"class":82},[72,164597,847],{"class":362},[72,164599,1994],{"class":82},[72,164601,164602,164604],{"class":74,"line":370},[72,164603,30833],{"class":362},[72,164605,164606],{"class":82},"(nums)\n",[15,164608,164609],{},"创建空集合：",[63,164611,164613],{"className":65,"code":164612,"language":67,"meta":68,"style":68},"s = set()\n",[34,164614,164615],{"__ignoreMap":68},[72,164616,164617,164619,164621,164623],{"class":74,"line":75},[72,164618,11005],{"class":82},[72,164620,609],{"class":78},[72,164622,120012],{"class":362},[72,164624,2404],{"class":82},[15,164626,9451,164627,164629],{},[34,164628,32877],{}," 是空字典，不是空集合。",[15,164631,164632],{},"集合常用操作：",[63,164634,164636],{"className":65,"code":164635,"language":67,"meta":68,"style":68},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[34,164637,164638,164658,164662,164671,164680,164689],{"__ignoreMap":68},[72,164639,164640,164642,164644,164646,164648,164650,164652,164654,164656],{"class":74,"line":75},[72,164641,11005],{"class":82},[72,164643,609],{"class":78},[72,164645,4876],{"class":82},[72,164647,772],{"class":362},[72,164649,12861],{"class":82},[72,164651,640],{"class":362},[72,164653,12861],{"class":82},[72,164655,634],{"class":362},[72,164657,1994],{"class":82},[72,164659,164660],{"class":74,"line":370},[72,164661,2828],{"emptyLinePlaceholder":490},[72,164663,164664,164667,164669],{"class":74,"line":1608},[72,164665,164666],{"class":82},"s.add(",[72,164668,847],{"class":362},[72,164670,570],{"class":82},[72,164672,164673,164676,164678],{"class":74,"line":1623},[72,164674,164675],{"class":82},"s.remove(",[72,164677,640],{"class":362},[72,164679,570],{"class":82},[72,164681,164682,164685,164687],{"class":74,"line":1629},[72,164683,164684],{"class":82},"s.discard(",[72,164686,1000],{"class":362},[72,164688,570],{"class":82},[72,164690,164691,164693,164695,164697],{"class":74,"line":1643},[72,164692,30833],{"class":362},[72,164694,564],{"class":82},[72,164696,7784],{"class":362},[72,164698,164699],{"class":82},"(s))\n",[15,164701,164702],{},"交并差：",[63,164704,164706],{"className":65,"code":164705,"language":67,"meta":68,"style":68},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[34,164707,164708,164728,164748,164752,164767,164780],{"__ignoreMap":68},[72,164709,164710,164712,164714,164716,164718,164720,164722,164724,164726],{"class":74,"line":75},[72,164711,11345],{"class":82},[72,164713,609],{"class":78},[72,164715,4876],{"class":82},[72,164717,772],{"class":362},[72,164719,12861],{"class":82},[72,164721,640],{"class":362},[72,164723,12861],{"class":82},[72,164725,634],{"class":362},[72,164727,1994],{"class":82},[72,164729,164730,164732,164734,164736,164738,164740,164742,164744,164746],{"class":74,"line":370},[72,164731,11371],{"class":82},[72,164733,609],{"class":78},[72,164735,4876],{"class":82},[72,164737,634],{"class":362},[72,164739,12861],{"class":82},[72,164741,847],{"class":362},[72,164743,12861],{"class":82},[72,164745,873],{"class":362},[72,164747,1994],{"class":82},[72,164749,164750],{"class":74,"line":1608},[72,164751,2828],{"emptyLinePlaceholder":490},[72,164753,164754,164756,164759,164761,164764],{"class":74,"line":1623},[72,164755,30833],{"class":362},[72,164757,164758],{"class":82},"(a ",[72,164760,907],{"class":78},[72,164762,164763],{"class":82}," b)  ",[72,164765,164766],{"class":621},"# 交集\n",[72,164768,164769,164771,164773,164775,164777],{"class":74,"line":1629},[72,164770,30833],{"class":362},[72,164772,164758],{"class":82},[72,164774,1475],{"class":78},[72,164776,164763],{"class":82},[72,164778,164779],{"class":621},"# 并集\n",[72,164781,164782,164784,164786,164788,164790],{"class":74,"line":1643},[72,164783,30833],{"class":362},[72,164785,164758],{"class":82},[72,164787,1086],{"class":78},[72,164789,164763],{"class":82},[72,164791,164792],{"class":621},"# 差集\n",[85,164794,164796],{"id":164795},"_610-字典dict","6.10 字典dict",[15,164798,164799],{},"字典通过 key-value 保存数据。",[63,164801,164803],{"className":65,"code":164802,"language":67,"meta":68,"style":68},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[34,164804,164805,164813,164823,164834,164844],{"__ignoreMap":68},[72,164806,164807,164809,164811],{"class":74,"line":75},[72,164808,149771],{"class":82},[72,164810,609],{"class":78},[72,164812,15998],{"class":82},[72,164814,164815,164817,164819,164821],{"class":74,"line":370},[72,164816,147310],{"class":366},[72,164818,51855],{"class":82},[72,164820,150178],{"class":366},[72,164822,31884],{"class":82},[72,164824,164825,164828,164830,164832],{"class":74,"line":1608},[72,164826,164827],{"class":366},"    \"age\"",[72,164829,51855],{"class":82},[72,164831,1204],{"class":362},[72,164833,31884],{"class":82},[72,164835,164836,164839,164841],{"class":74,"line":1623},[72,164837,164838],{"class":366},"    \"score\"",[72,164840,51855],{"class":82},[72,164842,164843],{"class":362},"95\n",[72,164845,164846],{"class":74,"line":1629},[72,164847,1994],{"class":82},[15,164849,164850],{},"获取值：",[63,164852,164854],{"className":65,"code":164853,"language":67,"meta":68,"style":68},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[34,164855,164856,164867],{"__ignoreMap":68},[72,164857,164858,164860,164863,164865],{"class":74,"line":75},[72,164859,30833],{"class":362},[72,164861,164862],{"class":82},"(student[",[72,164864,63097],{"class":366},[72,164866,5085],{"class":82},[72,164868,164869,164871,164874,164876],{"class":74,"line":370},[72,164870,30833],{"class":362},[72,164872,164873],{"class":82},"(student.get(",[72,164875,63097],{"class":366},[72,164877,30915],{"class":82},[15,164879,15814],{},[63,164881,164883],{"className":65,"code":164882,"language":67,"meta":68,"style":68},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[34,164884,164885,164898],{"__ignoreMap":68},[72,164886,164887,164889,164892,164895],{"class":74,"line":75},[72,164888,153149],{"class":82},[72,164890,164891],{"class":366},"\"address\"",[72,164893,164894],{"class":82},"]     ",[72,164896,164897],{"class":621},"# key不存在会报错\n",[72,164899,164900,164903,164905,164907],{"class":74,"line":370},[72,164901,164902],{"class":82},"student.get(",[72,164904,164891],{"class":366},[72,164906,14140],{"class":82},[72,164908,164909],{"class":621},"# key不存在返回None\n",[15,164911,164912],{},"设置默认值：",[63,164914,164916],{"className":65,"code":164915,"language":67,"meta":68,"style":68},"print(student.get(\"address\", \"未知\"))\n",[34,164917,164918],{"__ignoreMap":68},[72,164919,164920,164922,164924,164926,164928,164931],{"class":74,"line":75},[72,164921,30833],{"class":362},[72,164923,164873],{"class":82},[72,164925,164891],{"class":366},[72,164927,12861],{"class":82},[72,164929,164930],{"class":366},"\"未知\"",[72,164932,30915],{"class":82},[15,164934,164935],{},"新增和修改：",[63,164937,164939],{"className":65,"code":164938,"language":67,"meta":68,"style":68},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[34,164940,164941,164954],{"__ignoreMap":68},[72,164942,164943,164945,164947,164949,164951],{"class":74,"line":75},[72,164944,153149],{"class":82},[72,164946,69542],{"class":366},[72,164948,4871],{"class":82},[72,164950,609],{"class":78},[72,164952,164953],{"class":362}," 19\n",[72,164955,164956,164958,164960,164962,164964],{"class":74,"line":370},[72,164957,153149],{"class":82},[72,164959,164891],{"class":366},[72,164961,4871],{"class":82},[72,164963,609],{"class":78},[72,164965,164966],{"class":366}," \"北京\"\n",[15,164968,164969],{},"删除：",[63,164971,164973],{"className":65,"code":164972,"language":67,"meta":68,"style":68},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[34,164974,164975,164988,164998],{"__ignoreMap":68},[72,164976,164977,164979,164981,164984,164986],{"class":74,"line":75},[72,164978,155648],{"class":82},[72,164980,609],{"class":78},[72,164982,164983],{"class":82}," student.pop(",[72,164985,151762],{"class":366},[72,164987,570],{"class":82},[72,164989,164990,164992,164994,164996],{"class":74,"line":370},[72,164991,163673],{"class":78},[72,164993,152439],{"class":82},[72,164995,69542],{"class":366},[72,164997,33664],{"class":82},[72,164999,165000],{"class":74,"line":1608},[72,165001,165002],{"class":82},"student.clear()\n",[85,165004,165006],{"id":165005},"_611-字典遍历","6.11 字典遍历",[15,165008,165009],{},"遍历 key：",[63,165011,165013],{"className":65,"code":165012,"language":67,"meta":68,"style":68},"for key in student:\n    print(key, student[key])\n",[34,165014,165015,165027],{"__ignoreMap":68},[72,165016,165017,165019,165022,165024],{"class":74,"line":75},[72,165018,3453],{"class":78},[72,165020,165021],{"class":82}," key ",[72,165023,26465],{"class":78},[72,165025,165026],{"class":82}," student:\n",[72,165028,165029,165031],{"class":74,"line":370},[72,165030,31717],{"class":362},[72,165032,165033],{"class":82},"(key, student[key])\n",[15,165035,165036],{},"遍历 value：",[63,165038,165040],{"className":65,"code":165039,"language":67,"meta":68,"style":68},"for value in student.values():\n    print(value)\n",[34,165041,165042,165054],{"__ignoreMap":68},[72,165043,165044,165046,165049,165051],{"class":74,"line":75},[72,165045,3453],{"class":78},[72,165047,165048],{"class":82}," value ",[72,165050,26465],{"class":78},[72,165052,165053],{"class":82}," student.values():\n",[72,165055,165056,165058],{"class":74,"line":370},[72,165057,31717],{"class":362},[72,165059,165060],{"class":82},"(value)\n",[15,165062,165063],{},"遍历 key 和 value：",[63,165065,165067],{"className":65,"code":165066,"language":67,"meta":68,"style":68},"for key, value in student.items():\n    print(key, value)\n",[34,165068,165069,165081],{"__ignoreMap":68},[72,165070,165071,165073,165076,165078],{"class":74,"line":75},[72,165072,3453],{"class":78},[72,165074,165075],{"class":82}," key, value ",[72,165077,26465],{"class":78},[72,165079,165080],{"class":82}," student.items():\n",[72,165082,165083,165085],{"class":74,"line":370},[72,165084,31717],{"class":362},[72,165086,165087],{"class":82},"(key, value)\n",[85,165089,165091],{"id":165090},"_612-嵌套容器","6.12 嵌套容器",[15,165093,165094],{},"列表中保存字典，是项目中最常见的结构之一。",[63,165096,165098],{"className":65,"code":165097,"language":67,"meta":68,"style":68},"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",[34,165099,165100,165108,165136,165164,165192,165196,165200,165210],{"__ignoreMap":68},[72,165101,165102,165104,165106],{"class":74,"line":75},[72,165103,160006],{"class":82},[72,165105,609],{"class":78},[72,165107,55865],{"class":82},[72,165109,165110,165112,165114,165116,165118,165120,165122,165124,165126,165128,165130,165132,165134],{"class":74,"line":370},[72,165111,148675],{"class":82},[72,165113,63097],{"class":366},[72,165115,51855],{"class":82},[72,165117,150178],{"class":366},[72,165119,12861],{"class":82},[72,165121,69542],{"class":366},[72,165123,51855],{"class":82},[72,165125,1204],{"class":362},[72,165127,12861],{"class":82},[72,165129,151762],{"class":366},[72,165131,51855],{"class":82},[72,165133,1543],{"class":362},[72,165135,5358],{"class":82},[72,165137,165138,165140,165142,165144,165146,165148,165150,165152,165154,165156,165158,165160,165162],{"class":74,"line":1608},[72,165139,148675],{"class":82},[72,165141,63097],{"class":366},[72,165143,51855],{"class":82},[72,165145,151226],{"class":366},[72,165147,12861],{"class":82},[72,165149,69542],{"class":366},[72,165151,51855],{"class":82},[72,165153,1179],{"class":362},[72,165155,12861],{"class":82},[72,165157,151762],{"class":366},[72,165159,51855],{"class":82},[72,165161,1365],{"class":362},[72,165163,5358],{"class":82},[72,165165,165166,165168,165170,165172,165174,165176,165178,165180,165182,165184,165186,165188,165190],{"class":74,"line":1623},[72,165167,148675],{"class":82},[72,165169,63097],{"class":366},[72,165171,51855],{"class":82},[72,165173,160021],{"class":366},[72,165175,12861],{"class":82},[72,165177,69542],{"class":366},[72,165179,51855],{"class":82},[72,165181,1229],{"class":362},[72,165183,12861],{"class":82},[72,165185,151762],{"class":366},[72,165187,51855],{"class":82},[72,165189,960],{"class":362},[72,165191,5358],{"class":82},[72,165193,165194],{"class":74,"line":1629},[72,165195,33664],{"class":82},[72,165197,165198],{"class":74,"line":1643},[72,165199,2828],{"emptyLinePlaceholder":490},[72,165201,165202,165204,165206,165208],{"class":74,"line":1649},[72,165203,3453],{"class":78},[72,165205,152427],{"class":82},[72,165207,26465],{"class":78},[72,165209,152432],{"class":82},[72,165211,165212,165214,165216,165218,165221,165223],{"class":74,"line":1740},[72,165213,31717],{"class":362},[72,165215,164862],{"class":82},[72,165217,63097],{"class":366},[72,165219,165220],{"class":82},"], student[",[72,165222,151762],{"class":366},[72,165224,5085],{"class":82},[15,165226,165227],{},"统计平均分：",[63,165229,165231],{"className":65,"code":165230,"language":67,"meta":68,"style":68},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[34,165232,165233,165241,165245,165255,165267,165271,165286],{"__ignoreMap":68},[72,165234,165235,165237,165239],{"class":74,"line":75},[72,165236,157550],{"class":82},[72,165238,609],{"class":78},[72,165240,47751],{"class":362},[72,165242,165243],{"class":74,"line":370},[72,165244,2828],{"emptyLinePlaceholder":490},[72,165246,165247,165249,165251,165253],{"class":74,"line":1608},[72,165248,3453],{"class":78},[72,165250,152427],{"class":82},[72,165252,26465],{"class":78},[72,165254,152432],{"class":82},[72,165256,165257,165259,165261,165263,165265],{"class":74,"line":1623},[72,165258,159597],{"class":82},[72,165260,9903],{"class":78},[72,165262,152439],{"class":82},[72,165264,151762],{"class":366},[72,165266,33664],{"class":82},[72,165268,165269],{"class":74,"line":1629},[72,165270,2828],{"emptyLinePlaceholder":490},[72,165272,165273,165275,165277,165279,165281,165283],{"class":74,"line":1643},[72,165274,164064],{"class":82},[72,165276,609],{"class":78},[72,165278,164069],{"class":82},[72,165280,1138],{"class":78},[72,165282,7757],{"class":362},[72,165284,165285],{"class":82},"(students)\n",[72,165287,165288,165290,165292,165294,165296,165298,165300,165302,165304,165306],{"class":74,"line":1649},[72,165289,30833],{"class":362},[72,165291,564],{"class":82},[72,165293,615],{"class":78},[72,165295,164087],{"class":366},[72,165297,1450],{"class":362},[72,165299,164092],{"class":82},[72,165301,157449],{"class":78},[72,165303,1500],{"class":362},[72,165305,805],{"class":366},[72,165307,570],{"class":82},[15,165309,165310],{},"查找学生：",[63,165312,165314],{"className":65,"code":165313,"language":67,"meta":68,"style":68},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[34,165315,165316,165331,165335,165345,165359,165365,165369,165375],{"__ignoreMap":68},[72,165317,165318,165320,165322,165324,165326,165329],{"class":74,"line":75},[72,165319,111978],{"class":82},[72,165321,609],{"class":78},[72,165323,61023],{"class":362},[72,165325,564],{"class":82},[72,165327,165328],{"class":366},"\"请输入学生姓名:\"",[72,165330,570],{"class":82},[72,165332,165333],{"class":74,"line":370},[72,165334,2828],{"emptyLinePlaceholder":490},[72,165336,165337,165339,165341,165343],{"class":74,"line":1608},[72,165338,3453],{"class":78},[72,165340,152427],{"class":82},[72,165342,26465],{"class":78},[72,165344,152432],{"class":82},[72,165346,165347,165349,165351,165353,165355,165357],{"class":74,"line":1623},[72,165348,3529],{"class":78},[72,165350,152439],{"class":82},[72,165352,63097],{"class":366},[72,165354,4871],{"class":82},[72,165356,3377],{"class":78},[72,165358,160722],{"class":82},[72,165360,165361,165363],{"class":74,"line":1629},[72,165362,32869],{"class":362},[72,165364,150332],{"class":82},[72,165366,165367],{"class":74,"line":1643},[72,165368,32045],{"class":78},[72,165370,165371,165373],{"class":74,"line":1649},[72,165372,2130],{"class":78},[72,165374,4167],{"class":82},[72,165376,165377,165379,165381,165384],{"class":74,"line":1740},[72,165378,31717],{"class":362},[72,165380,564],{"class":82},[72,165382,165383],{"class":366},"\"没有找到\"",[72,165385,570],{"class":82},[85,165387,165389],{"id":165388},"_613-容器通用操作","6.13 容器通用操作",[15,165391,165392],{},"长度：",[63,165394,165396],{"className":65,"code":165395,"language":67,"meta":68,"style":68},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[34,165397,165398,165417,165427],{"__ignoreMap":68},[72,165399,165400,165402,165405,165407,165409,165411,165413,165415],{"class":74,"line":75},[72,165401,7784],{"class":362},[72,165403,165404],{"class":82},"([",[72,165406,772],{"class":362},[72,165408,12861],{"class":82},[72,165410,640],{"class":362},[72,165412,12861],{"class":82},[72,165414,634],{"class":362},[72,165416,5085],{"class":82},[72,165418,165419,165421,165423,165425],{"class":74,"line":370},[72,165420,7784],{"class":362},[72,165422,564],{"class":82},[72,165424,156170],{"class":366},[72,165426,570],{"class":82},[72,165428,165429,165431,165434,165436,165438,165440],{"class":74,"line":1608},[72,165430,7784],{"class":362},[72,165432,165433],{"class":82},"({",[72,165435,63097],{"class":366},[72,165437,51855],{"class":82},[72,165439,150178],{"class":366},[72,165441,165442],{"class":82},"})\n",[15,165444,165445],{},"最大最小：",[63,165447,165449],{"className":65,"code":165448,"language":67,"meta":68,"style":68},"max([1, 2, 3])\nmin([1, 2, 3])\n",[34,165450,165451,165469],{"__ignoreMap":68},[72,165452,165453,165455,165457,165459,165461,165463,165465,165467],{"class":74,"line":75},[72,165454,6441],{"class":362},[72,165456,165404],{"class":82},[72,165458,772],{"class":362},[72,165460,12861],{"class":82},[72,165462,640],{"class":362},[72,165464,12861],{"class":82},[72,165466,634],{"class":362},[72,165468,5085],{"class":82},[72,165470,165471,165474,165476,165478,165480,165482,165484,165486],{"class":74,"line":370},[72,165472,165473],{"class":362},"min",[72,165475,165404],{"class":82},[72,165477,772],{"class":362},[72,165479,12861],{"class":82},[72,165481,640],{"class":362},[72,165483,12861],{"class":82},[72,165485,634],{"class":362},[72,165487,5085],{"class":82},[15,165489,165490],{},"求和：",[63,165492,165494],{"className":65,"code":165493,"language":67,"meta":68,"style":68},"sum([1, 2, 3])\n",[34,165495,165496],{"__ignoreMap":68},[72,165497,165498,165501,165503,165505,165507,165509,165511,165513],{"class":74,"line":75},[72,165499,165500],{"class":362},"sum",[72,165502,165404],{"class":82},[72,165504,772],{"class":362},[72,165506,12861],{"class":82},[72,165508,640],{"class":362},[72,165510,12861],{"class":82},[72,165512,634],{"class":362},[72,165514,5085],{"class":82},[15,165516,163761],{},[63,165518,165520],{"className":65,"code":165519,"language":67,"meta":68,"style":68},"sorted([3, 1, 2])\n",[34,165521,165522],{"__ignoreMap":68},[72,165523,165524,165527,165529,165531,165533,165535,165537,165539],{"class":74,"line":75},[72,165525,165526],{"class":362},"sorted",[72,165528,165404],{"class":82},[72,165530,634],{"class":362},[72,165532,12861],{"class":82},[72,165534,772],{"class":362},[72,165536,12861],{"class":82},[72,165538,640],{"class":362},[72,165540,5085],{"class":82},[15,165542,165543],{},"类型转换：",[63,165545,165547],{"className":65,"code":165546,"language":67,"meta":68,"style":68},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[34,165548,165549,165559,165577],{"__ignoreMap":68},[72,165550,165551,165553,165555,165557],{"class":74,"line":75},[72,165552,154360],{"class":362},[72,165554,564],{"class":82},[72,165556,156170],{"class":366},[72,165558,570],{"class":82},[72,165560,165561,165563,165565,165567,165569,165571,165573,165575],{"class":74,"line":370},[72,165562,155555],{"class":362},[72,165564,165404],{"class":82},[72,165566,772],{"class":362},[72,165568,12861],{"class":82},[72,165570,640],{"class":362},[72,165572,12861],{"class":82},[72,165574,634],{"class":362},[72,165576,5085],{"class":82},[72,165578,165579,165581,165583,165585,165587,165589,165591,165593,165595,165597],{"class":74,"line":1608},[72,165580,155580],{"class":362},[72,165582,165404],{"class":82},[72,165584,772],{"class":362},[72,165586,12861],{"class":82},[72,165588,772],{"class":362},[72,165590,12861],{"class":82},[72,165592,640],{"class":362},[72,165594,12861],{"class":82},[72,165596,634],{"class":362},[72,165598,5085],{"class":82},[15,165600,165601],{},"成员判断：",[63,165603,165605],{"className":65,"code":165604,"language":67,"meta":68,"style":68},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[34,165606,165607,165624,165648],{"__ignoreMap":68},[72,165608,165609,165611,165613,165616,165619,165622],{"class":74,"line":75},[72,165610,30833],{"class":362},[72,165612,564],{"class":82},[72,165614,165615],{"class":366},"\"a\"",[72,165617,165618],{"class":78}," in",[72,165620,165621],{"class":366}," \"abc\"",[72,165623,570],{"class":82},[72,165625,165626,165628,165630,165632,165634,165636,165638,165640,165642,165644,165646],{"class":74,"line":370},[72,165627,30833],{"class":362},[72,165629,564],{"class":82},[72,165631,772],{"class":362},[72,165633,165618],{"class":78},[72,165635,52644],{"class":82},[72,165637,772],{"class":362},[72,165639,12861],{"class":82},[72,165641,640],{"class":362},[72,165643,12861],{"class":82},[72,165645,634],{"class":362},[72,165647,5085],{"class":82},[72,165649,165650,165652,165654,165656,165658,165660,165662,165664,165666],{"class":74,"line":1608},[72,165651,30833],{"class":362},[72,165653,564],{"class":82},[72,165655,63097],{"class":366},[72,165657,165618],{"class":78},[72,165659,4876],{"class":82},[72,165661,63097],{"class":366},[72,165663,51855],{"class":82},[72,165665,150178],{"class":366},[72,165667,165442],{"class":82},[85,165669,165671],{"id":165670},"_614-推导式","6.14 推导式",[15,165673,165674],{},"推导式用于快速生成容器。",[15,165676,165677],{},"列表推导式：",[63,165679,165681],{"className":65,"code":165680,"language":67,"meta":68,"style":68},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[34,165682,165683,165710],{"__ignoreMap":68},[72,165684,165685,165687,165689,165692,165694,165696,165698,165700,165702,165704,165706,165708],{"class":74,"line":75},[72,165686,164390],{"class":82},[72,165688,609],{"class":78},[72,165690,165691],{"class":82}," [i ",[72,165693,3453],{"class":78},[72,165695,9864],{"class":82},[72,165697,26465],{"class":78},[72,165699,32861],{"class":362},[72,165701,564],{"class":82},[72,165703,772],{"class":362},[72,165705,12861],{"class":82},[72,165707,898],{"class":362},[72,165709,97717],{"class":82},[72,165711,165712,165714],{"class":74,"line":370},[72,165713,30833],{"class":362},[72,165715,164606],{"class":82},[15,165717,165718],{},"带条件：",[63,165720,165722],{"className":65,"code":165721,"language":67,"meta":68,"style":68},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[34,165723,165724,165765],{"__ignoreMap":68},[72,165725,165726,165729,165731,165733,165735,165737,165739,165741,165743,165745,165747,165749,165751,165753,165755,165757,165759,165761,165763],{"class":74,"line":75},[72,165727,165728],{"class":82},"even_nums ",[72,165730,609],{"class":78},[72,165732,165691],{"class":82},[72,165734,3453],{"class":78},[72,165736,9864],{"class":82},[72,165738,26465],{"class":78},[72,165740,32861],{"class":362},[72,165742,564],{"class":82},[72,165744,772],{"class":362},[72,165746,12861],{"class":82},[72,165748,891],{"class":362},[72,165750,14140],{"class":82},[72,165752,1960],{"class":78},[72,165754,9864],{"class":82},[72,165756,882],{"class":78},[72,165758,15181],{"class":362},[72,165760,101965],{"class":78},[72,165762,4521],{"class":362},[72,165764,33664],{"class":82},[72,165766,165767,165769],{"class":74,"line":370},[72,165768,30833],{"class":362},[72,165770,165771],{"class":82},"(even_nums)\n",[15,165773,165774],{},"字典推导式：",[63,165776,165778],{"className":65,"code":165777,"language":67,"meta":68,"style":68},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[34,165779,165780,165814],{"__ignoreMap":68},[72,165781,165782,165785,165787,165790,165792,165794,165797,165799,165801,165803,165805,165807,165809,165811],{"class":74,"line":75},[72,165783,165784],{"class":82},"squares ",[72,165786,609],{"class":78},[72,165788,165789],{"class":82}," {i: i ",[72,165791,11087],{"class":78},[72,165793,15181],{"class":362},[72,165795,165796],{"class":78}," for",[72,165798,9864],{"class":82},[72,165800,26465],{"class":78},[72,165802,32861],{"class":362},[72,165804,564],{"class":82},[72,165806,772],{"class":362},[72,165808,12861],{"class":82},[72,165810,898],{"class":362},[72,165812,165813],{"class":82},")}\n",[72,165815,165816,165818],{"class":74,"line":370},[72,165817,30833],{"class":362},[72,165819,165820],{"class":82},"(squares)\n",[15,165822,165823],{},"集合推导式：",[63,165825,165827],{"className":65,"code":165826,"language":67,"meta":68,"style":68},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[34,165828,165829,165850],{"__ignoreMap":68},[72,165830,165831,165834,165836,165839,165841,165843,165845,165848],{"class":74,"line":75},[72,165832,165833],{"class":82},"chars ",[72,165835,609],{"class":78},[72,165837,165838],{"class":82}," {ch ",[72,165840,3453],{"class":78},[72,165842,159982],{"class":82},[72,165844,26465],{"class":78},[72,165846,165847],{"class":366}," \"hello\"",[72,165849,1994],{"class":82},[72,165851,165852,165854],{"class":74,"line":370},[72,165853,30833],{"class":362},[72,165855,165856],{"class":82},"(chars)\n",[15,165858,165859],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[85,165861,165863],{"id":165862},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[63,165865,165867],{"className":65,"code":165866,"language":67,"meta":68,"style":68},"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",[34,165868,165869,165877,165897,165917,165937,165957,165961,165965,165973,165987,165996,166000,166010,166022,166026,166046,166055,166059,166075,166080,166084,166098,166102,166124,166160],{"__ignoreMap":68},[72,165870,165871,165873,165875],{"class":74,"line":75},[72,165872,160006],{"class":82},[72,165874,609],{"class":78},[72,165876,55865],{"class":82},[72,165878,165879,165881,165883,165885,165887,165889,165891,165893,165895],{"class":74,"line":370},[72,165880,148675],{"class":82},[72,165882,63097],{"class":366},[72,165884,51855],{"class":82},[72,165886,150178],{"class":366},[72,165888,12861],{"class":82},[72,165890,151762],{"class":366},[72,165892,51855],{"class":82},[72,165894,1543],{"class":362},[72,165896,5358],{"class":82},[72,165898,165899,165901,165903,165905,165907,165909,165911,165913,165915],{"class":74,"line":1608},[72,165900,148675],{"class":82},[72,165902,63097],{"class":366},[72,165904,51855],{"class":82},[72,165906,151226],{"class":366},[72,165908,12861],{"class":82},[72,165910,151762],{"class":366},[72,165912,51855],{"class":82},[72,165914,1365],{"class":362},[72,165916,5358],{"class":82},[72,165918,165919,165921,165923,165925,165927,165929,165931,165933,165935],{"class":74,"line":1623},[72,165920,148675],{"class":82},[72,165922,63097],{"class":366},[72,165924,51855],{"class":82},[72,165926,160021],{"class":366},[72,165928,12861],{"class":82},[72,165930,151762],{"class":366},[72,165932,51855],{"class":82},[72,165934,960],{"class":362},[72,165936,5358],{"class":82},[72,165938,165939,165941,165943,165945,165947,165949,165951,165953,165955],{"class":74,"line":1629},[72,165940,148675],{"class":82},[72,165942,63097],{"class":366},[72,165944,51855],{"class":82},[72,165946,163600],{"class":366},[72,165948,12861],{"class":82},[72,165950,151762],{"class":366},[72,165952,51855],{"class":82},[72,165954,1436],{"class":362},[72,165956,5358],{"class":82},[72,165958,165959],{"class":74,"line":1643},[72,165960,33664],{"class":82},[72,165962,165963],{"class":74,"line":1649},[72,165964,2828],{"emptyLinePlaceholder":490},[72,165966,165967,165969,165971],{"class":74,"line":1740},[72,165968,157550],{"class":82},[72,165970,609],{"class":78},[72,165972,47751],{"class":362},[72,165974,165975,165978,165980,165983,165985],{"class":74,"line":1746},[72,165976,165977],{"class":82},"max_student ",[72,165979,609],{"class":78},[72,165981,165982],{"class":82}," students[",[72,165984,747],{"class":362},[72,165986,33664],{"class":82},[72,165988,165989,165992,165994],{"class":74,"line":1758},[72,165990,165991],{"class":82},"passed ",[72,165993,609],{"class":78},[72,165995,52256],{"class":82},[72,165997,165998],{"class":74,"line":2041},[72,165999,2828],{"emptyLinePlaceholder":490},[72,166001,166002,166004,166006,166008],{"class":74,"line":2046},[72,166003,3453],{"class":78},[72,166005,152427],{"class":82},[72,166007,26465],{"class":78},[72,166009,152432],{"class":82},[72,166011,166012,166014,166016,166018,166020],{"class":74,"line":2052},[72,166013,159597],{"class":82},[72,166015,9903],{"class":78},[72,166017,152439],{"class":82},[72,166019,151762],{"class":366},[72,166021,33664],{"class":82},[72,166023,166024],{"class":74,"line":2057},[72,166025,2828],{"emptyLinePlaceholder":490},[72,166027,166028,166030,166032,166034,166036,166038,166041,166043],{"class":74,"line":2071},[72,166029,3529],{"class":78},[72,166031,152439],{"class":82},[72,166033,151762],{"class":366},[72,166035,4871],{"class":82},[72,166037,1514],{"class":78},[72,166039,166040],{"class":82}," max_student[",[72,166042,151762],{"class":366},[72,166044,166045],{"class":82},"]:\n",[72,166047,166048,166051,166053],{"class":74,"line":2076},[72,166049,166050],{"class":82},"        max_student ",[72,166052,609],{"class":78},[72,166054,152455],{"class":82},[72,166056,166057],{"class":74,"line":2082},[72,166058,2828],{"emptyLinePlaceholder":490},[72,166060,166061,166063,166065,166067,166069,166071,166073],{"class":74,"line":2103},[72,166062,3529],{"class":78},[72,166064,152439],{"class":82},[72,166066,151762],{"class":366},[72,166068,4871],{"class":82},[72,166070,2139],{"class":78},[72,166072,158127],{"class":362},[72,166074,4167],{"class":82},[72,166076,166077],{"class":74,"line":2108},[72,166078,166079],{"class":82},"        passed.append(student)\n",[72,166081,166082],{"class":74,"line":2122},[72,166083,2828],{"emptyLinePlaceholder":490},[72,166085,166086,166088,166090,166092,166094,166096],{"class":74,"line":2127},[72,166087,164064],{"class":82},[72,166089,609],{"class":78},[72,166091,164069],{"class":82},[72,166093,1138],{"class":78},[72,166095,7757],{"class":362},[72,166097,165285],{"class":82},[72,166099,166100],{"class":74,"line":2156},[72,166101,2828],{"emptyLinePlaceholder":490},[72,166103,166104,166106,166108,166110,166112,166114,166116,166118,166120,166122],{"class":74,"line":2161},[72,166105,30833],{"class":362},[72,166107,564],{"class":82},[72,166109,615],{"class":78},[72,166111,164087],{"class":366},[72,166113,1450],{"class":362},[72,166115,164092],{"class":82},[72,166117,157449],{"class":78},[72,166119,1500],{"class":362},[72,166121,805],{"class":366},[72,166123,570],{"class":82},[72,166125,166126,166128,166130,166132,166135,166137,166140,166142,166144,166146,166148,166150,166152,166154,166156,166158],{"class":74,"line":2178},[72,166127,30833],{"class":362},[72,166129,564],{"class":82},[72,166131,615],{"class":78},[72,166133,166134],{"class":366},"\"最高分学生:",[72,166136,1450],{"class":362},[72,166138,166139],{"class":82},"max_student[",[72,166141,153172],{"class":366},[72,166143,1494],{"class":82},[72,166145,1500],{"class":362},[72,166147,4876],{"class":362},[72,166149,166139],{"class":82},[72,166151,153210],{"class":366},[72,166153,1494],{"class":82},[72,166155,1500],{"class":362},[72,166157,805],{"class":366},[72,166159,570],{"class":82},[72,166161,166162,166164,166166,166168,166171,166174,166177,166179,166181],{"class":74,"line":2183},[72,166163,30833],{"class":362},[72,166165,564],{"class":82},[72,166167,615],{"class":78},[72,166169,166170],{"class":366},"\"及格人数:",[72,166172,166173],{"class":362},"{len",[72,166175,166176],{"class":82},"(passed)",[72,166178,1500],{"class":362},[72,166180,805],{"class":366},[72,166182,570],{"class":82},[85,166184,166186],{"id":166185},"_616-易错点","6.16 易错点",[22,166188,166189,166192,166195,166198,166204,166213],{},[25,166190,166191],{},"列表可变，元组和字符串不可变。",[25,166193,166194],{},"切片结束位置不包含。",[25,166196,166197],{},"字典通过 key 取值，不是通过索引。",[25,166199,166200,166201,28807],{},"空集合要用 ",[34,166202,166203],{},"set()",[25,166205,104767,166206,166209,166210,28807],{},[34,166207,166208],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[34,166211,166212],{},"get()",[25,166214,166215],{},"嵌套容器要先看清楚每一层是什么类型。",[85,166217,166219],{"id":166218},"_617-本章练习","6.17 本章练习",[22,166221,166222,166225,166228,166231,166234],{},[25,166223,166224],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[25,166226,166227],{},"输入一句话，统计每个字符出现次数。",[25,166229,166230],{},"使用集合去除列表中的重复元素。",[25,166232,166233],{},"使用字典保存一个学生的信息，并实现修改成绩。",[25,166235,166236],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[473,166238,166239],{},"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":68,"searchDepth":370,"depth":370,"links":166241},[166242,166243,166244,166245,166246,166247,166248,166249,166250,166251,166252,166253,166254,166255,166256,166257,166258],{"id":163222,"depth":370,"text":163223},{"id":163339,"depth":370,"text":163340},{"id":163429,"depth":370,"text":163430},{"id":163553,"depth":370,"text":163554},{"id":163916,"depth":370,"text":163917},{"id":164103,"depth":370,"text":164104},{"id":164222,"depth":370,"text":164223},{"id":164364,"depth":370,"text":164365},{"id":164551,"depth":370,"text":164552},{"id":164795,"depth":370,"text":164796},{"id":165005,"depth":370,"text":165006},{"id":165090,"depth":370,"text":165091},{"id":165388,"depth":370,"text":165389},{"id":165670,"depth":370,"text":165671},{"id":165862,"depth":370,"text":165863},{"id":166185,"depth":370,"text":166186},{"id":166218,"depth":370,"text":166219},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":163214,"description":23802},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":166265,"title":166266,"body":166267,"description":23802,"extension":487,"meta":168439,"navigation":490,"path":168440,"seo":168441,"stem":168442,"__hash__":168443},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":166268,"toc":168414},[166269,166272,166276,166279,166359,166362,166383,166386,166390,166393,166455,166458,166475,166479,166482,166527,166529,166537,166541,166544,166626,166629,166632,166657,166660,166683,166687,166690,166692,166754,166757,166759,166810,166814,166818,166824,166929,166933,166939,167010,167014,167017,167085,167088,167168,167172,167178,167214,167217,167220,167330,167336,167340,167343,167415,167418,167422,167426,167431,167493,167497,167502,167570,167574,167579,167695,167699,167702,167782,167785,167789,167792,167896,167898,167913,167916,167920,168058,168066,168070,168072,168083,168085,168343,168347,168379,168383,168411],[10,166270,166266],{"id":166271},"_7-函数进阶",[85,166273,166275],{"id":166274},"_71-多返回值","7.1 多返回值",[15,166277,166278],{},"Python 函数可以返回多个值，本质上返回的是元组。",[63,166280,166282],{"className":65,"code":166281,"language":67,"meta":68,"style":68},"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",[34,166283,166284,166293,166301,166309,166318,166325,166329,166333,166342,166348],{"__ignoreMap":68},[72,166285,166286,166288,166291],{"class":74,"line":75},[72,166287,32365],{"class":78},[72,166289,166290],{"class":358}," get_info",[72,166292,32371],{"class":82},[72,166294,166295,166297,166299],{"class":74,"line":370},[72,166296,152660],{"class":82},[72,166298,609],{"class":78},[72,166300,149643],{"class":366},[72,166302,166303,166305,166307],{"class":74,"line":1608},[72,166304,152676],{"class":82},[72,166306,609],{"class":78},[72,166308,146841],{"class":362},[72,166310,166311,166313,166315],{"class":74,"line":1623},[72,166312,152691],{"class":82},[72,166314,609],{"class":78},[72,166316,166317],{"class":362}," 95\n",[72,166319,166320,166322],{"class":74,"line":1629},[72,166321,4518],{"class":78},[72,166323,166324],{"class":82}," name, age, score\n",[72,166326,166327],{"class":74,"line":1643},[72,166328,2828],{"emptyLinePlaceholder":490},[72,166330,166331],{"class":74,"line":1649},[72,166332,2828],{"emptyLinePlaceholder":490},[72,166334,166335,166337,166339],{"class":74,"line":1740},[72,166336,161596],{"class":82},[72,166338,609],{"class":78},[72,166340,166341],{"class":82}," get_info()\n",[72,166343,166344,166346],{"class":74,"line":1746},[72,166345,30833],{"class":362},[72,166347,77003],{"class":82},[72,166349,166350,166352,166354,166356],{"class":74,"line":1758},[72,166351,30833],{"class":362},[72,166353,564],{"class":82},[72,166355,103511],{"class":362},[72,166357,166358],{"class":82},"(result))\n",[15,166360,166361],{},"可以直接解包：",[63,166363,166365],{"className":65,"code":166364,"language":67,"meta":68,"style":68},"name, age, score = get_info()\nprint(name, age, score)\n",[34,166366,166367,166376],{"__ignoreMap":68},[72,166368,166369,166372,166374],{"class":74,"line":75},[72,166370,166371],{"class":82},"name, age, score ",[72,166373,609],{"class":78},[72,166375,166341],{"class":82},[72,166377,166378,166380],{"class":74,"line":370},[72,166379,30833],{"class":362},[72,166381,166382],{"class":82},"(name, age, score)\n",[15,166384,166385],{},"返回多个值适合函数需要同时给出多个结果时使用。",[85,166387,166389],{"id":166388},"_72-位置参数","7.2 位置参数",[15,166391,166392],{},"位置参数按顺序传递。",[63,166394,166396],{"className":65,"code":166395,"language":67,"meta":68,"style":68},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[34,166397,166398,166406,166434,166438,166442],{"__ignoreMap":68},[72,166399,166400,166402,166404],{"class":74,"line":75},[72,166401,32365],{"class":78},[72,166403,149662],{"class":358},[72,166405,149665],{"class":82},[72,166407,166408,166410,166412,166414,166416,166418,166420,166422,166424,166426,166428,166430,166432],{"class":74,"line":370},[72,166409,31717],{"class":362},[72,166411,564],{"class":82},[72,166413,615],{"class":78},[72,166415,149676],{"class":366},[72,166417,1450],{"class":362},[72,166419,80228],{"class":82},[72,166421,1500],{"class":362},[72,166423,149685],{"class":366},[72,166425,1450],{"class":362},[72,166427,70639],{"class":82},[72,166429,1500],{"class":362},[72,166431,149694],{"class":366},[72,166433,570],{"class":82},[72,166435,166436],{"class":74,"line":1608},[72,166437,2828],{"emptyLinePlaceholder":490},[72,166439,166440],{"class":74,"line":1623},[72,166441,2828],{"emptyLinePlaceholder":490},[72,166443,166444,166447,166449,166451,166453],{"class":74,"line":1629},[72,166445,166446],{"class":82},"introduce(",[72,166448,150178],{"class":366},[72,166450,12861],{"class":82},[72,166452,1204],{"class":362},[72,166454,570],{"class":82},[15,166456,166457],{},"顺序错了就会得到错误含义：",[63,166459,166461],{"className":65,"code":166460,"language":67,"meta":68,"style":68},"introduce(18, \"小明\")\n",[34,166462,166463],{"__ignoreMap":68},[72,166464,166465,166467,166469,166471,166473],{"class":74,"line":75},[72,166466,166446],{"class":82},[72,166468,1204],{"class":362},[72,166470,12861],{"class":82},[72,166472,150178],{"class":366},[72,166474,570],{"class":82},[85,166476,166478],{"id":166477},"_73-关键字参数","7.3 关键字参数",[15,166480,166481],{},"关键字参数按参数名传递。",[63,166483,166485],{"className":65,"code":166484,"language":67,"meta":68,"style":68},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[34,166486,166487,166507],{"__ignoreMap":68},[72,166488,166489,166491,166493,166495,166497,166499,166501,166503,166505],{"class":74,"line":75},[72,166490,166446],{"class":82},[72,166492,80228],{"class":5642},[72,166494,609],{"class":78},[72,166496,150178],{"class":366},[72,166498,12861],{"class":82},[72,166500,70639],{"class":5642},[72,166502,609],{"class":78},[72,166504,1204],{"class":362},[72,166506,570],{"class":82},[72,166508,166509,166511,166513,166515,166517,166519,166521,166523,166525],{"class":74,"line":370},[72,166510,166446],{"class":82},[72,166512,70639],{"class":5642},[72,166514,609],{"class":78},[72,166516,1204],{"class":362},[72,166518,12861],{"class":82},[72,166520,80228],{"class":5642},[72,166522,609],{"class":78},[72,166524,150178],{"class":366},[72,166526,570],{"class":82},[15,166528,118224],{},[22,166530,166531,166534],{},[25,166532,166533],{},"顺序不容易错。",[25,166535,166536],{},"调用时可读性更强。",[85,166538,166540],{"id":166539},"_74-默认参数","7.4 默认参数",[15,166542,166543],{},"默认参数给参数设置默认值。",[63,166545,166547],{"className":65,"code":166546,"language":67,"meta":68,"style":68},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[34,166548,166549,166565,166595,166599,166603,166613],{"__ignoreMap":68},[72,166550,166551,166553,166555,166558,166560,166563],{"class":74,"line":75},[72,166552,32365],{"class":78},[72,166554,122383],{"class":358},[72,166556,166557],{"class":82},"(host, port",[72,166559,609],{"class":78},[72,166561,166562],{"class":362},"3306",[72,166564,31204],{"class":82},[72,166566,166567,166569,166571,166573,166576,166578,166580,166582,166584,166586,166589,166591,166593],{"class":74,"line":370},[72,166568,31717],{"class":362},[72,166570,564],{"class":82},[72,166572,615],{"class":78},[72,166574,166575],{"class":366},"\"连接",[72,166577,1450],{"class":362},[72,166579,27817],{"class":82},[72,166581,1500],{"class":362},[72,166583,1413],{"class":366},[72,166585,1450],{"class":362},[72,166587,166588],{"class":82},"port",[72,166590,1500],{"class":362},[72,166592,805],{"class":366},[72,166594,570],{"class":82},[72,166596,166597],{"class":74,"line":1608},[72,166598,2828],{"emptyLinePlaceholder":490},[72,166600,166601],{"class":74,"line":1623},[72,166602,2828],{"emptyLinePlaceholder":490},[72,166604,166605,166608,166611],{"class":74,"line":1629},[72,166606,166607],{"class":82},"connect(",[72,166609,166610],{"class":366},"\"localhost\"",[72,166612,570],{"class":82},[72,166614,166615,166617,166619,166621,166624],{"class":74,"line":1643},[72,166616,166607],{"class":82},[72,166618,166610],{"class":366},[72,166620,12861],{"class":82},[72,166622,166623],{"class":362},"6379",[72,166625,570],{"class":82},[15,166627,166628],{},"注意：默认参数必须放在非默认参数后面。",[15,166630,166631],{},"错误：",[63,166633,166635],{"className":65,"code":166634,"language":67,"meta":68,"style":68},"def connect(port=3306, host):\n    pass\n",[34,166636,166637,166653],{"__ignoreMap":68},[72,166638,166639,166641,166643,166646,166648,166650],{"class":74,"line":75},[72,166640,32365],{"class":78},[72,166642,122383],{"class":358},[72,166644,166645],{"class":82},"(port",[72,166647,609],{"class":78},[72,166649,166562],{"class":362},[72,166651,166652],{"class":82},", host):\n",[72,166654,166655],{"class":74,"line":370},[72,166656,149827],{"class":78},[15,166658,166659],{},"正确：",[63,166661,166663],{"className":65,"code":166662,"language":67,"meta":68,"style":68},"def connect(host, port=3306):\n    pass\n",[34,166664,166665,166679],{"__ignoreMap":68},[72,166666,166667,166669,166671,166673,166675,166677],{"class":74,"line":75},[72,166668,32365],{"class":78},[72,166670,122383],{"class":358},[72,166672,166557],{"class":82},[72,166674,609],{"class":78},[72,166676,166562],{"class":362},[72,166678,31204],{"class":82},[72,166680,166681],{"class":74,"line":370},[72,166682,149827],{"class":78},[85,166684,166686],{"id":166685},"_75-默认参数的坑","7.5 默认参数的坑",[15,166688,166689],{},"不要使用可变对象作为默认参数。",[15,166691,157913],{},[63,166693,166695],{"className":65,"code":166694,"language":67,"meta":68,"style":68},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[34,166696,166697,166712,166717,166724,166728,166732,166743],{"__ignoreMap":68},[72,166698,166699,166701,166704,166707,166709],{"class":74,"line":75},[72,166700,32365],{"class":78},[72,166702,166703],{"class":358}," add_item",[72,166705,166706],{"class":82},"(item, items",[72,166708,609],{"class":78},[72,166710,166711],{"class":82},"[]):\n",[72,166713,166714],{"class":74,"line":370},[72,166715,166716],{"class":82},"    items.append(item)\n",[72,166718,166719,166721],{"class":74,"line":1608},[72,166720,4518],{"class":78},[72,166722,166723],{"class":82}," items\n",[72,166725,166726],{"class":74,"line":1623},[72,166727,2828],{"emptyLinePlaceholder":490},[72,166729,166730],{"class":74,"line":1629},[72,166731,2828],{"emptyLinePlaceholder":490},[72,166733,166734,166736,166739,166741],{"class":74,"line":1643},[72,166735,30833],{"class":362},[72,166737,166738],{"class":82},"(add_item(",[72,166740,165615],{"class":366},[72,166742,30915],{"class":82},[72,166744,166745,166747,166749,166752],{"class":74,"line":1649},[72,166746,30833],{"class":362},[72,166748,166738],{"class":82},[72,166750,166751],{"class":366},"\"b\"",[72,166753,30915],{"class":82},[15,166755,166756],{},"第二次调用会复用第一次的列表。",[15,166758,156178],{},[63,166760,166762],{"className":65,"code":166761,"language":67,"meta":68,"style":68},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[34,166763,166764,166778,166791,166800,166804],{"__ignoreMap":68},[72,166765,166766,166768,166770,166772,166774,166776],{"class":74,"line":75},[72,166767,32365],{"class":78},[72,166769,166703],{"class":358},[72,166771,166706],{"class":82},[72,166773,609],{"class":78},[72,166775,96103],{"class":362},[72,166777,31204],{"class":82},[72,166779,166780,166782,166785,166787,166789],{"class":74,"line":370},[72,166781,3529],{"class":78},[72,166783,166784],{"class":82}," items ",[72,166786,39345],{"class":78},[72,166788,39351],{"class":362},[72,166790,4167],{"class":82},[72,166792,166793,166796,166798],{"class":74,"line":1608},[72,166794,166795],{"class":82},"        items ",[72,166797,609],{"class":78},[72,166799,52256],{"class":82},[72,166801,166802],{"class":74,"line":1623},[72,166803,166716],{"class":82},[72,166805,166806,166808],{"class":74,"line":1629},[72,166807,4518],{"class":78},[72,166809,166723],{"class":82},[85,166811,166813],{"id":166812},"_76-不定长参数","7.6 不定长参数",[531,166815,166817],{"id":166816},"_761-args","7.6.1 *args",[15,166819,166820,166823],{},[34,166821,166822],{},"*args"," 接收任意数量的位置参数，得到元组。",[63,166825,166827],{"className":65,"code":166826,"language":67,"meta":68,"style":68},"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",[34,166828,166829,166842,166850,166861,166870,166876,166880,166884,166903],{"__ignoreMap":68},[72,166830,166831,166833,166835,166837,166839],{"class":74,"line":75},[72,166832,32365],{"class":78},[72,166834,5635],{"class":358},[72,166836,564],{"class":82},[72,166838,1009],{"class":78},[72,166840,166841],{"class":82},"args):\n",[72,166843,166844,166846,166848],{"class":74,"line":370},[72,166845,159597],{"class":82},[72,166847,609],{"class":78},[72,166849,47751],{"class":362},[72,166851,166852,166854,166856,166858],{"class":74,"line":1608},[72,166853,3629],{"class":78},[72,166855,156470],{"class":82},[72,166857,26465],{"class":78},[72,166859,166860],{"class":82}," args:\n",[72,166862,166863,166865,166867],{"class":74,"line":1623},[72,166864,160272],{"class":82},[72,166866,9903],{"class":78},[72,166868,166869],{"class":82}," num\n",[72,166871,166872,166874],{"class":74,"line":1629},[72,166873,4518],{"class":78},[72,166875,162577],{"class":82},[72,166877,166878],{"class":74,"line":1643},[72,166879,2828],{"emptyLinePlaceholder":490},[72,166881,166882],{"class":74,"line":1649},[72,166883,2828],{"emptyLinePlaceholder":490},[72,166885,166886,166888,166891,166893,166895,166897,166899,166901],{"class":74,"line":1740},[72,166887,30833],{"class":362},[72,166889,166890],{"class":82},"(add(",[72,166892,772],{"class":362},[72,166894,12861],{"class":82},[72,166896,640],{"class":362},[72,166898,12861],{"class":82},[72,166900,634],{"class":362},[72,166902,30915],{"class":82},[72,166904,166905,166907,166909,166911,166913,166915,166917,166919,166921,166923,166925,166927],{"class":74,"line":1746},[72,166906,30833],{"class":362},[72,166908,166890],{"class":82},[72,166910,772],{"class":362},[72,166912,12861],{"class":82},[72,166914,640],{"class":362},[72,166916,12861],{"class":82},[72,166918,634],{"class":362},[72,166920,12861],{"class":82},[72,166922,847],{"class":362},[72,166924,12861],{"class":82},[72,166926,873],{"class":362},[72,166928,30915],{"class":82},[531,166930,166932],{"id":166931},"_762-kwargs","7.6.2 **kwargs",[15,166934,166935,166938],{},[34,166936,166937],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[63,166940,166942],{"className":65,"code":166941,"language":67,"meta":68,"style":68},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[34,166943,166944,166957,166968,166974,166978,166982],{"__ignoreMap":68},[72,166945,166946,166948,166950,166952,166954],{"class":74,"line":75},[72,166947,32365],{"class":78},[72,166949,162235],{"class":358},[72,166951,564],{"class":82},[72,166953,11087],{"class":78},[72,166955,166956],{"class":82},"kwargs):\n",[72,166958,166959,166961,166963,166965],{"class":74,"line":370},[72,166960,3629],{"class":78},[72,166962,165075],{"class":82},[72,166964,26465],{"class":78},[72,166966,166967],{"class":82}," kwargs.items():\n",[72,166969,166970,166972],{"class":74,"line":1608},[72,166971,32869],{"class":362},[72,166973,165087],{"class":82},[72,166975,166976],{"class":74,"line":1623},[72,166977,2828],{"emptyLinePlaceholder":490},[72,166979,166980],{"class":74,"line":1629},[72,166981,2828],{"emptyLinePlaceholder":490},[72,166983,166984,166986,166988,166990,166992,166994,166996,166998,167000,167002,167004,167006,167008],{"class":74,"line":1643},[72,166985,162300],{"class":82},[72,166987,80228],{"class":5642},[72,166989,609],{"class":78},[72,166991,150178],{"class":366},[72,166993,12861],{"class":82},[72,166995,70639],{"class":5642},[72,166997,609],{"class":78},[72,166999,1204],{"class":362},[72,167001,12861],{"class":82},[72,167003,70690],{"class":5642},[72,167005,609],{"class":78},[72,167007,69687],{"class":366},[72,167009,570],{"class":82},[85,167011,167013],{"id":167012},"_77-参数解包","7.7 参数解包",[15,167015,167016],{},"列表或元组解包为位置参数：",[63,167018,167020],{"className":65,"code":167019,"language":67,"meta":68,"style":68},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[34,167021,167022,167031,167046,167050,167054,167074],{"__ignoreMap":68},[72,167023,167024,167026,167028],{"class":74,"line":75},[72,167025,32365],{"class":78},[72,167027,5635],{"class":358},[72,167029,167030],{"class":82},"(a, b, c):\n",[72,167032,167033,167035,167037,167039,167041,167043],{"class":74,"line":370},[72,167034,4518],{"class":78},[72,167036,11295],{"class":82},[72,167038,1035],{"class":78},[72,167040,11308],{"class":82},[72,167042,1035],{"class":78},[72,167044,167045],{"class":82}," c\n",[72,167047,167048],{"class":74,"line":1608},[72,167049,2828],{"emptyLinePlaceholder":490},[72,167051,167052],{"class":74,"line":1623},[72,167053,2828],{"emptyLinePlaceholder":490},[72,167055,167056,167058,167060,167062,167064,167066,167068,167070,167072],{"class":74,"line":1629},[72,167057,164390],{"class":82},[72,167059,609],{"class":78},[72,167061,52644],{"class":82},[72,167063,772],{"class":362},[72,167065,12861],{"class":82},[72,167067,640],{"class":362},[72,167069,12861],{"class":82},[72,167071,634],{"class":362},[72,167073,33664],{"class":82},[72,167075,167076,167078,167080,167082],{"class":74,"line":1643},[72,167077,30833],{"class":362},[72,167079,166890],{"class":82},[72,167081,1009],{"class":78},[72,167083,167084],{"class":82},"nums))\n",[15,167086,167087],{},"字典解包为关键字参数：",[63,167089,167091],{"className":65,"code":167090,"language":67,"meta":68,"style":68},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[34,167092,167093,167101,167127,167131,167135,167159],{"__ignoreMap":68},[72,167094,167095,167097,167099],{"class":74,"line":75},[72,167096,32365],{"class":78},[72,167098,149662],{"class":358},[72,167100,149665],{"class":82},[72,167102,167103,167105,167107,167109,167111,167113,167115,167117,167119,167121,167123,167125],{"class":74,"line":370},[72,167104,31717],{"class":362},[72,167106,564],{"class":82},[72,167108,615],{"class":78},[72,167110,805],{"class":366},[72,167112,1450],{"class":362},[72,167114,80228],{"class":82},[72,167116,1500],{"class":362},[72,167118,4876],{"class":362},[72,167120,70639],{"class":82},[72,167122,1500],{"class":362},[72,167124,805],{"class":366},[72,167126,570],{"class":82},[72,167128,167129],{"class":74,"line":1608},[72,167130,2828],{"emptyLinePlaceholder":490},[72,167132,167133],{"class":74,"line":1623},[72,167134,2828],{"emptyLinePlaceholder":490},[72,167136,167137,167139,167141,167143,167145,167147,167149,167151,167153,167155,167157],{"class":74,"line":1629},[72,167138,116714],{"class":82},[72,167140,609],{"class":78},[72,167142,4876],{"class":82},[72,167144,63097],{"class":366},[72,167146,51855],{"class":82},[72,167148,150178],{"class":366},[72,167150,12861],{"class":82},[72,167152,69542],{"class":366},[72,167154,51855],{"class":82},[72,167156,1204],{"class":362},[72,167158,1994],{"class":82},[72,167160,167161,167163,167165],{"class":74,"line":1643},[72,167162,166446],{"class":82},[72,167164,11087],{"class":78},[72,167166,167167],{"class":82},"info)\n",[85,167169,167171],{"id":167170},"_78-匿名函数lambda","7.8 匿名函数lambda",[15,167173,167174,167177],{},[34,167175,167176],{},"lambda"," 用于定义简单匿名函数。",[63,167179,167181],{"className":65,"code":167180,"language":67,"meta":68,"style":68},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[34,167182,167183,167200],{"__ignoreMap":68},[72,167184,167185,167188,167190,167193,167196,167198],{"class":74,"line":75},[72,167186,167187],{"class":82},"add ",[72,167189,609],{"class":78},[72,167191,167192],{"class":78}," lambda",[72,167194,167195],{"class":82}," a, b: a ",[72,167197,1035],{"class":78},[72,167199,151394],{"class":82},[72,167201,167202,167204,167206,167208,167210,167212],{"class":74,"line":370},[72,167203,30833],{"class":362},[72,167205,166890],{"class":82},[72,167207,772],{"class":362},[72,167209,12861],{"class":82},[72,167211,640],{"class":362},[72,167213,30915],{"class":82},[15,167215,167216],{},"常和排序、过滤等函数一起使用。",[15,167218,167219],{},"按分数排序：",[63,167221,167223],{"className":65,"code":167222,"language":67,"meta":68,"style":68},"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",[34,167224,167225,167233,167253,167273,167293,167297,167301,167324],{"__ignoreMap":68},[72,167226,167227,167229,167231],{"class":74,"line":75},[72,167228,160006],{"class":82},[72,167230,609],{"class":78},[72,167232,55865],{"class":82},[72,167234,167235,167237,167239,167241,167243,167245,167247,167249,167251],{"class":74,"line":370},[72,167236,148675],{"class":82},[72,167238,63097],{"class":366},[72,167240,51855],{"class":82},[72,167242,150178],{"class":366},[72,167244,12861],{"class":82},[72,167246,151762],{"class":366},[72,167248,51855],{"class":82},[72,167250,1543],{"class":362},[72,167252,5358],{"class":82},[72,167254,167255,167257,167259,167261,167263,167265,167267,167269,167271],{"class":74,"line":1608},[72,167256,148675],{"class":82},[72,167258,63097],{"class":366},[72,167260,51855],{"class":82},[72,167262,151226],{"class":366},[72,167264,12861],{"class":82},[72,167266,151762],{"class":366},[72,167268,51855],{"class":82},[72,167270,1365],{"class":362},[72,167272,5358],{"class":82},[72,167274,167275,167277,167279,167281,167283,167285,167287,167289,167291],{"class":74,"line":1623},[72,167276,148675],{"class":82},[72,167278,63097],{"class":366},[72,167280,51855],{"class":82},[72,167282,160021],{"class":366},[72,167284,12861],{"class":82},[72,167286,151762],{"class":366},[72,167288,51855],{"class":82},[72,167290,960],{"class":362},[72,167292,5358],{"class":82},[72,167294,167295],{"class":74,"line":1629},[72,167296,33664],{"class":82},[72,167298,167299],{"class":74,"line":1643},[72,167300,2828],{"emptyLinePlaceholder":490},[72,167302,167303,167306,167308,167310,167312,167314,167316,167318,167320,167322],{"class":74,"line":1649},[72,167304,167305],{"class":82},"students.sort(",[72,167307,154236],{"class":5642},[72,167309,154239],{"class":78},[72,167311,154242],{"class":82},[72,167313,151762],{"class":366},[72,167315,112602],{"class":82},[72,167317,163818],{"class":5642},[72,167319,609],{"class":78},[72,167321,31894],{"class":362},[72,167323,570],{"class":82},[72,167325,167326,167328],{"class":74,"line":1740},[72,167327,30833],{"class":362},[72,167329,165285],{"class":82},[15,167331,167332,167333,167335],{},"如果逻辑复杂，不要硬写 ",[34,167334,167176],{},"，定义普通函数更清晰。",[85,167337,167339],{"id":167338},"_79-函数作为参数","7.9 函数作为参数",[15,167341,167342],{},"函数可以作为参数传给另一个函数。",[63,167344,167346],{"className":65,"code":167345,"language":67,"meta":68,"style":68},"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",[34,167347,167348,167356,167366,167370,167374,167384,167391,167395,167399],{"__ignoreMap":68},[72,167349,167350,167352,167354],{"class":74,"line":75},[72,167351,32365],{"class":78},[72,167353,5635],{"class":358},[72,167355,151383],{"class":82},[72,167357,167358,167360,167362,167364],{"class":74,"line":370},[72,167359,4518],{"class":78},[72,167361,11295],{"class":82},[72,167363,1035],{"class":78},[72,167365,151394],{"class":82},[72,167367,167368],{"class":74,"line":1608},[72,167369,2828],{"emptyLinePlaceholder":490},[72,167371,167372],{"class":74,"line":1623},[72,167373,2828],{"emptyLinePlaceholder":490},[72,167375,167376,167378,167381],{"class":74,"line":1629},[72,167377,32365],{"class":78},[72,167379,167380],{"class":358}," calculate",[72,167382,167383],{"class":82},"(a, b, func):\n",[72,167385,167386,167388],{"class":74,"line":1643},[72,167387,4518],{"class":78},[72,167389,167390],{"class":82}," func(a, b)\n",[72,167392,167393],{"class":74,"line":1649},[72,167394,2828],{"emptyLinePlaceholder":490},[72,167396,167397],{"class":74,"line":1740},[72,167398,2828],{"emptyLinePlaceholder":490},[72,167400,167401,167403,167406,167408,167410,167412],{"class":74,"line":1746},[72,167402,30833],{"class":362},[72,167404,167405],{"class":82},"(calculate(",[72,167407,1000],{"class":362},[72,167409,12861],{"class":82},[72,167411,1254],{"class":362},[72,167413,167414],{"class":82},", add))\n",[15,167416,167417],{},"这种思想在排序、回调、框架中经常出现。",[85,167419,167421],{"id":167420},"_710-mapfiltersorted","7.10 map、filter、sorted",[531,167423,167425],{"id":167424},"_7101-map","7.10.1 map",[15,167427,167428,167430],{},[34,167429,74462],{}," 对每个元素执行函数。",[63,167432,167434],{"className":65,"code":167433,"language":67,"meta":68,"style":68},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[34,167435,167436,167460,167483],{"__ignoreMap":68},[72,167437,167438,167440,167442,167444,167446,167448,167450,167452,167454,167456,167458],{"class":74,"line":75},[72,167439,164390],{"class":82},[72,167441,609],{"class":78},[72,167443,52644],{"class":82},[72,167445,772],{"class":362},[72,167447,12861],{"class":82},[72,167449,640],{"class":362},[72,167451,12861],{"class":82},[72,167453,634],{"class":362},[72,167455,12861],{"class":82},[72,167457,847],{"class":362},[72,167459,33664],{"class":82},[72,167461,167462,167464,167466,167469,167471,167473,167476,167478,167480],{"class":74,"line":370},[72,167463,161596],{"class":82},[72,167465,609],{"class":78},[72,167467,167468],{"class":362}," map",[72,167470,564],{"class":82},[72,167472,167176],{"class":78},[72,167474,167475],{"class":82}," x: x ",[72,167477,1009],{"class":78},[72,167479,15181],{"class":362},[72,167481,167482],{"class":82},", nums)\n",[72,167484,167485,167487,167489,167491],{"class":74,"line":1608},[72,167486,30833],{"class":362},[72,167488,564],{"class":82},[72,167490,154360],{"class":362},[72,167492,166358],{"class":82},[531,167494,167496],{"id":167495},"_7102-filter","7.10.2 filter",[15,167498,167499,167501],{},[34,167500,80469],{}," 保留满足条件的元素。",[63,167503,167505],{"className":65,"code":167504,"language":67,"meta":68,"style":68},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[34,167506,167507,167535,167560],{"__ignoreMap":68},[72,167508,167509,167511,167513,167515,167517,167519,167521,167523,167525,167527,167529,167531,167533],{"class":74,"line":75},[72,167510,164390],{"class":82},[72,167512,609],{"class":78},[72,167514,52644],{"class":82},[72,167516,772],{"class":362},[72,167518,12861],{"class":82},[72,167520,640],{"class":362},[72,167522,12861],{"class":82},[72,167524,634],{"class":362},[72,167526,12861],{"class":82},[72,167528,847],{"class":362},[72,167530,12861],{"class":82},[72,167532,873],{"class":362},[72,167534,33664],{"class":82},[72,167536,167537,167539,167541,167544,167546,167548,167550,167552,167554,167556,167558],{"class":74,"line":370},[72,167538,161596],{"class":82},[72,167540,609],{"class":78},[72,167542,167543],{"class":362}," filter",[72,167545,564],{"class":82},[72,167547,167176],{"class":78},[72,167549,167475],{"class":82},[72,167551,882],{"class":78},[72,167553,15181],{"class":362},[72,167555,101965],{"class":78},[72,167557,4521],{"class":362},[72,167559,167482],{"class":82},[72,167561,167562,167564,167566,167568],{"class":74,"line":1608},[72,167563,30833],{"class":362},[72,167565,564],{"class":82},[72,167567,154360],{"class":362},[72,167569,166358],{"class":82},[531,167571,167573],{"id":167572},"_7103-sorted","7.10.3 sorted",[15,167575,167576,167578],{},[34,167577,165526],{}," 返回排序后的新列表。",[63,167580,167582],{"className":65,"code":167581,"language":67,"meta":68,"style":68},"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",[34,167583,167584,167592,167612,167632,167652,167656,167660,167689],{"__ignoreMap":68},[72,167585,167586,167588,167590],{"class":74,"line":75},[72,167587,160006],{"class":82},[72,167589,609],{"class":78},[72,167591,55865],{"class":82},[72,167593,167594,167596,167598,167600,167602,167604,167606,167608,167610],{"class":74,"line":370},[72,167595,148675],{"class":82},[72,167597,63097],{"class":366},[72,167599,51855],{"class":82},[72,167601,150178],{"class":366},[72,167603,12861],{"class":82},[72,167605,151762],{"class":366},[72,167607,51855],{"class":82},[72,167609,1543],{"class":362},[72,167611,5358],{"class":82},[72,167613,167614,167616,167618,167620,167622,167624,167626,167628,167630],{"class":74,"line":1608},[72,167615,148675],{"class":82},[72,167617,63097],{"class":366},[72,167619,51855],{"class":82},[72,167621,151226],{"class":366},[72,167623,12861],{"class":82},[72,167625,151762],{"class":366},[72,167627,51855],{"class":82},[72,167629,1365],{"class":362},[72,167631,5358],{"class":82},[72,167633,167634,167636,167638,167640,167642,167644,167646,167648,167650],{"class":74,"line":1623},[72,167635,148675],{"class":82},[72,167637,63097],{"class":366},[72,167639,51855],{"class":82},[72,167641,160021],{"class":366},[72,167643,12861],{"class":82},[72,167645,151762],{"class":366},[72,167647,51855],{"class":82},[72,167649,960],{"class":362},[72,167651,5358],{"class":82},[72,167653,167654],{"class":74,"line":1629},[72,167655,33664],{"class":82},[72,167657,167658],{"class":74,"line":1643},[72,167659,2828],{"emptyLinePlaceholder":490},[72,167661,167662,167664,167666,167668,167671,167673,167675,167677,167679,167681,167683,167685,167687],{"class":74,"line":1649},[72,167663,161596],{"class":82},[72,167665,609],{"class":78},[72,167667,163894],{"class":362},[72,167669,167670],{"class":82},"(students, ",[72,167672,154236],{"class":5642},[72,167674,154239],{"class":78},[72,167676,154242],{"class":82},[72,167678,151762],{"class":366},[72,167680,112602],{"class":82},[72,167682,163818],{"class":5642},[72,167684,609],{"class":78},[72,167686,31894],{"class":362},[72,167688,570],{"class":82},[72,167690,167691,167693],{"class":74,"line":1740},[72,167692,30833],{"class":362},[72,167694,77003],{"class":82},[85,167696,167698],{"id":167697},"_711-闭包入门","7.11 闭包入门",[15,167700,167701],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[63,167703,167705],{"className":65,"code":167704,"language":67,"meta":68,"style":68},"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",[34,167706,167707,167717,167727,167738,167742,167749,167753,167757,167771],{"__ignoreMap":68},[72,167708,167709,167711,167714],{"class":74,"line":75},[72,167710,32365],{"class":78},[72,167712,167713],{"class":358}," outer",[72,167715,167716],{"class":82},"(base):\n",[72,167718,167719,167721,167724],{"class":74,"line":370},[72,167720,31219],{"class":78},[72,167722,167723],{"class":358}," inner",[72,167725,167726],{"class":82},"(num):\n",[72,167728,167729,167731,167734,167736],{"class":74,"line":1608},[72,167730,15178],{"class":78},[72,167732,167733],{"class":82}," base ",[72,167735,1035],{"class":78},[72,167737,166869],{"class":82},[72,167739,167740],{"class":74,"line":1623},[72,167741,2828],{"emptyLinePlaceholder":490},[72,167743,167744,167746],{"class":74,"line":1629},[72,167745,4518],{"class":78},[72,167747,167748],{"class":82}," inner\n",[72,167750,167751],{"class":74,"line":1643},[72,167752,2828],{"emptyLinePlaceholder":490},[72,167754,167755],{"class":74,"line":1649},[72,167756,2828],{"emptyLinePlaceholder":490},[72,167758,167759,167762,167764,167767,167769],{"class":74,"line":1740},[72,167760,167761],{"class":82},"add_10 ",[72,167763,609],{"class":78},[72,167765,167766],{"class":82}," outer(",[72,167768,1000],{"class":362},[72,167770,570],{"class":82},[72,167772,167773,167775,167778,167780],{"class":74,"line":1746},[72,167774,30833],{"class":362},[72,167776,167777],{"class":82},"(add_10(",[72,167779,873],{"class":362},[72,167781,30915],{"class":82},[15,167783,167784],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[85,167786,167788],{"id":167787},"_712-装饰器入门","7.12 装饰器入门",[15,167790,167791],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[63,167793,167795],{"className":65,"code":167794,"language":67,"meta":68,"style":68},"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",[34,167796,167797,167806,167815,167826,167831,167842,167846,167853,167857,167861,167866,167874,167884,167888,167892],{"__ignoreMap":68},[72,167798,167799,167801,167803],{"class":74,"line":75},[72,167800,32365],{"class":78},[72,167802,87608],{"class":358},[72,167804,167805],{"class":82},"(func):\n",[72,167807,167808,167810,167813],{"class":74,"line":370},[72,167809,31219],{"class":78},[72,167811,167812],{"class":358}," wrapper",[72,167814,32371],{"class":82},[72,167816,167817,167819,167821,167824],{"class":74,"line":1608},[72,167818,32869],{"class":362},[72,167820,564],{"class":82},[72,167822,167823],{"class":366},"\"函数开始执行\"",[72,167825,570],{"class":82},[72,167827,167828],{"class":74,"line":1623},[72,167829,167830],{"class":82},"        func()\n",[72,167832,167833,167835,167837,167840],{"class":74,"line":1629},[72,167834,32869],{"class":362},[72,167836,564],{"class":82},[72,167838,167839],{"class":366},"\"函数执行结束\"",[72,167841,570],{"class":82},[72,167843,167844],{"class":74,"line":1643},[72,167845,2828],{"emptyLinePlaceholder":490},[72,167847,167848,167850],{"class":74,"line":1649},[72,167849,4518],{"class":78},[72,167851,167852],{"class":82}," wrapper\n",[72,167854,167855],{"class":74,"line":1740},[72,167856,2828],{"emptyLinePlaceholder":490},[72,167858,167859],{"class":74,"line":1746},[72,167860,2828],{"emptyLinePlaceholder":490},[72,167862,167863],{"class":74,"line":1758},[72,167864,167865],{"class":358},"@log\n",[72,167867,167868,167870,167872],{"class":74,"line":2041},[72,167869,32365],{"class":78},[72,167871,161286],{"class":358},[72,167873,32371],{"class":82},[72,167875,167876,167878,167880,167882],{"class":74,"line":2046},[72,167877,31717],{"class":362},[72,167879,564],{"class":82},[72,167881,6270],{"class":366},[72,167883,570],{"class":82},[72,167885,167886],{"class":74,"line":2052},[72,167887,2828],{"emptyLinePlaceholder":490},[72,167889,167890],{"class":74,"line":2057},[72,167891,2828],{"emptyLinePlaceholder":490},[72,167893,167894],{"class":74,"line":2071},[72,167895,161321],{"class":82},[15,167897,158564],{},[63,167899,167901],{"className":65,"code":167900,"language":67,"meta":68,"style":68},"say_hello = log(say_hello)\n",[34,167902,167903],{"__ignoreMap":68},[72,167904,167905,167908,167910],{"class":74,"line":75},[72,167906,167907],{"class":82},"say_hello ",[72,167909,609],{"class":78},[72,167911,167912],{"class":82}," log(say_hello)\n",[15,167914,167915],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[85,167917,167919],{"id":167918},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[63,167921,167923],{"className":65,"code":167922,"language":67,"meta":68,"style":68},"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",[34,167924,167925,167933,167950,167960,167979,167989,167996,168000,168006,168010,168014,168018,168026,168036,168040,168044],{"__ignoreMap":68},[72,167926,167927,167929,167931],{"class":74,"line":75},[72,167928,32365],{"class":78},[72,167930,87608],{"class":358},[72,167932,167805],{"class":82},[72,167934,167935,167937,167939,167941,167943,167946,167948],{"class":74,"line":370},[72,167936,31219],{"class":78},[72,167938,167812],{"class":358},[72,167940,564],{"class":82},[72,167942,1009],{"class":78},[72,167944,167945],{"class":82},"args, ",[72,167947,11087],{"class":78},[72,167949,166956],{"class":82},[72,167951,167952,167954,167956,167958],{"class":74,"line":1608},[72,167953,32869],{"class":362},[72,167955,564],{"class":82},[72,167957,167823],{"class":366},[72,167959,570],{"class":82},[72,167961,167962,167965,167967,167970,167972,167974,167976],{"class":74,"line":1623},[72,167963,167964],{"class":82},"        result ",[72,167966,609],{"class":78},[72,167968,167969],{"class":82}," func(",[72,167971,1009],{"class":78},[72,167973,167945],{"class":82},[72,167975,11087],{"class":78},[72,167977,167978],{"class":82},"kwargs)\n",[72,167980,167981,167983,167985,167987],{"class":74,"line":1629},[72,167982,32869],{"class":362},[72,167984,564],{"class":82},[72,167986,167839],{"class":366},[72,167988,570],{"class":82},[72,167990,167991,167993],{"class":74,"line":1643},[72,167992,15178],{"class":78},[72,167994,167995],{"class":82}," result\n",[72,167997,167998],{"class":74,"line":1649},[72,167999,2828],{"emptyLinePlaceholder":490},[72,168001,168002,168004],{"class":74,"line":1740},[72,168003,4518],{"class":78},[72,168005,167852],{"class":82},[72,168007,168008],{"class":74,"line":1746},[72,168009,2828],{"emptyLinePlaceholder":490},[72,168011,168012],{"class":74,"line":1758},[72,168013,2828],{"emptyLinePlaceholder":490},[72,168015,168016],{"class":74,"line":2041},[72,168017,167865],{"class":358},[72,168019,168020,168022,168024],{"class":74,"line":2046},[72,168021,32365],{"class":78},[72,168023,5635],{"class":358},[72,168025,151383],{"class":82},[72,168027,168028,168030,168032,168034],{"class":74,"line":2052},[72,168029,4518],{"class":78},[72,168031,11295],{"class":82},[72,168033,1035],{"class":78},[72,168035,151394],{"class":82},[72,168037,168038],{"class":74,"line":2057},[72,168039,2828],{"emptyLinePlaceholder":490},[72,168041,168042],{"class":74,"line":2071},[72,168043,2828],{"emptyLinePlaceholder":490},[72,168045,168046,168048,168050,168052,168054,168056],{"class":74,"line":2076},[72,168047,30833],{"class":362},[72,168049,166890],{"class":82},[72,168051,1000],{"class":362},[72,168053,12861],{"class":82},[72,168055,1254],{"class":362},[72,168057,30915],{"class":82},[15,168059,168060,168061,101432,168063,168065],{},"这个写法使用 ",[34,168062,166822],{},[34,168064,166937],{}," 接收原函数的所有参数。",[85,168067,168069],{"id":168068},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[15,168071,123582],{},[22,168073,168074,168077,168080],{},[25,168075,168076],{},"给定一组学生数据。",[25,168078,168079],{},"封装函数，根据传入规则筛选学生。",[25,168081,168082],{},"筛选及格、优秀、未成年学生。",[15,168084,10461],{},[63,168086,168088],{"className":65,"code":168087,"language":67,"meta":68,"style":68},"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",[34,168089,168090,168098,168126,168154,168182,168186,168190,168194,168204,168212,168222,168229,168234,168240,168244,168248,168272,168295,168318,168322,168329,168336],{"__ignoreMap":68},[72,168091,168092,168094,168096],{"class":74,"line":75},[72,168093,160006],{"class":82},[72,168095,609],{"class":78},[72,168097,55865],{"class":82},[72,168099,168100,168102,168104,168106,168108,168110,168112,168114,168116,168118,168120,168122,168124],{"class":74,"line":370},[72,168101,148675],{"class":82},[72,168103,63097],{"class":366},[72,168105,51855],{"class":82},[72,168107,150178],{"class":366},[72,168109,12861],{"class":82},[72,168111,69542],{"class":366},[72,168113,51855],{"class":82},[72,168115,1204],{"class":362},[72,168117,12861],{"class":82},[72,168119,151762],{"class":366},[72,168121,51855],{"class":82},[72,168123,1543],{"class":362},[72,168125,5358],{"class":82},[72,168127,168128,168130,168132,168134,168136,168138,168140,168142,168144,168146,168148,168150,168152],{"class":74,"line":1608},[72,168129,148675],{"class":82},[72,168131,63097],{"class":366},[72,168133,51855],{"class":82},[72,168135,151226],{"class":366},[72,168137,12861],{"class":82},[72,168139,69542],{"class":366},[72,168141,51855],{"class":82},[72,168143,1179],{"class":362},[72,168145,12861],{"class":82},[72,168147,151762],{"class":366},[72,168149,51855],{"class":82},[72,168151,1365],{"class":362},[72,168153,5358],{"class":82},[72,168155,168156,168158,168160,168162,168164,168166,168168,168170,168172,168174,168176,168178,168180],{"class":74,"line":1623},[72,168157,148675],{"class":82},[72,168159,63097],{"class":366},[72,168161,51855],{"class":82},[72,168163,160021],{"class":366},[72,168165,12861],{"class":82},[72,168167,69542],{"class":366},[72,168169,51855],{"class":82},[72,168171,1229],{"class":362},[72,168173,12861],{"class":82},[72,168175,151762],{"class":366},[72,168177,51855],{"class":82},[72,168179,1436],{"class":362},[72,168181,5358],{"class":82},[72,168183,168184],{"class":74,"line":1629},[72,168185,33664],{"class":82},[72,168187,168188],{"class":74,"line":1643},[72,168189,2828],{"emptyLinePlaceholder":490},[72,168191,168192],{"class":74,"line":1649},[72,168193,2828],{"emptyLinePlaceholder":490},[72,168195,168196,168198,168201],{"class":74,"line":1740},[72,168197,32365],{"class":78},[72,168199,168200],{"class":358}," filter_students",[72,168202,168203],{"class":82},"(students, condition):\n",[72,168205,168206,168208,168210],{"class":74,"line":1746},[72,168207,161513],{"class":82},[72,168209,609],{"class":78},[72,168211,52256],{"class":82},[72,168213,168214,168216,168218,168220],{"class":74,"line":1758},[72,168215,3629],{"class":78},[72,168217,152427],{"class":82},[72,168219,26465],{"class":78},[72,168221,152432],{"class":82},[72,168223,168224,168226],{"class":74,"line":2041},[72,168225,2925],{"class":78},[72,168227,168228],{"class":82}," condition(student):\n",[72,168230,168231],{"class":74,"line":2046},[72,168232,168233],{"class":82},"            result.append(student)\n",[72,168235,168236,168238],{"class":74,"line":2052},[72,168237,4518],{"class":78},[72,168239,167995],{"class":82},[72,168241,168242],{"class":74,"line":2057},[72,168243,2828],{"emptyLinePlaceholder":490},[72,168245,168246],{"class":74,"line":2071},[72,168247,2828],{"emptyLinePlaceholder":490},[72,168249,168250,168252,168254,168257,168259,168262,168264,168266,168268,168270],{"class":74,"line":2076},[72,168251,165991],{"class":82},[72,168253,609],{"class":78},[72,168255,168256],{"class":82}," filter_students(students, ",[72,168258,167176],{"class":78},[72,168260,168261],{"class":82}," s: s[",[72,168263,151762],{"class":366},[72,168265,4871],{"class":82},[72,168267,2139],{"class":78},[72,168269,158127],{"class":362},[72,168271,570],{"class":82},[72,168273,168274,168277,168279,168281,168283,168285,168287,168289,168291,168293],{"class":74,"line":2082},[72,168275,168276],{"class":82},"excellent ",[72,168278,609],{"class":78},[72,168280,168256],{"class":82},[72,168282,167176],{"class":78},[72,168284,168261],{"class":82},[72,168286,151762],{"class":366},[72,168288,4871],{"class":82},[72,168290,2139],{"class":78},[72,168292,158078],{"class":362},[72,168294,570],{"class":82},[72,168296,168297,168300,168302,168304,168306,168308,168310,168312,168314,168316],{"class":74,"line":2103},[72,168298,168299],{"class":82},"under_age ",[72,168301,609],{"class":78},[72,168303,168256],{"class":82},[72,168305,167176],{"class":78},[72,168307,168261],{"class":82},[72,168309,69542],{"class":366},[72,168311,4871],{"class":82},[72,168313,1464],{"class":78},[72,168315,156575],{"class":362},[72,168317,570],{"class":82},[72,168319,168320],{"class":74,"line":2108},[72,168321,2828],{"emptyLinePlaceholder":490},[72,168323,168324,168326],{"class":74,"line":2122},[72,168325,30833],{"class":362},[72,168327,168328],{"class":82},"(passed)\n",[72,168330,168331,168333],{"class":74,"line":2127},[72,168332,30833],{"class":362},[72,168334,168335],{"class":82},"(excellent)\n",[72,168337,168338,168340],{"class":74,"line":2156},[72,168339,30833],{"class":362},[72,168341,168342],{"class":82},"(under_age)\n",[85,168344,168346],{"id":168345},"_715-易错点","7.15 易错点",[22,168348,168349,168352,168360,168365,168376],{},[25,168350,168351],{},"默认参数不要写可变对象。",[25,168353,168354,168356,168357,168359],{},[34,168355,166822],{}," 是元组，",[34,168358,166937],{}," 是字典。",[25,168361,168362,168364],{},[34,168363,167176],{}," 只适合简单表达式。",[25,168366,168367,101432,168369,168371,168372,168375],{},[34,168368,74462],{},[34,168370,80469],{}," 的结果是迭代器，常用 ",[34,168373,168374],{},"list()"," 转换查看。",[25,168377,168378],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[85,168380,168382],{"id":168381},"_716-本章练习","7.16 本章练习",[22,168384,168385,168392,168398,168403,168408],{},[25,168386,168387,168388,168391],{},"写函数 ",[34,168389,168390],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[25,168393,168387,168394,168397],{},[34,168395,168396],{},"print_user(**kwargs)","，输出用户所有字段。",[25,168399,104767,168400,168402],{},[34,168401,167176],{}," 对学生列表按年龄排序。",[25,168404,104767,168405,168407],{},[34,168406,80469],{}," 找出成绩不及格的学生。",[25,168409,168410],{},"写一个装饰器，统计函数执行前后的提示信息。",[473,168412,168413],{},"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":68,"searchDepth":370,"depth":370,"links":168415},[168416,168417,168418,168419,168420,168421,168425,168426,168427,168428,168433,168434,168435,168436,168437,168438],{"id":166274,"depth":370,"text":166275},{"id":166388,"depth":370,"text":166389},{"id":166477,"depth":370,"text":166478},{"id":166539,"depth":370,"text":166540},{"id":166685,"depth":370,"text":166686},{"id":166812,"depth":370,"text":166813,"children":168422},[168423,168424],{"id":166816,"depth":1608,"text":166817},{"id":166931,"depth":1608,"text":166932},{"id":167012,"depth":370,"text":167013},{"id":167170,"depth":370,"text":167171},{"id":167338,"depth":370,"text":167339},{"id":167420,"depth":370,"text":167421,"children":168429},[168430,168431,168432],{"id":167424,"depth":1608,"text":167425},{"id":167495,"depth":1608,"text":167496},{"id":167572,"depth":1608,"text":167573},{"id":167697,"depth":370,"text":167698},{"id":167787,"depth":370,"text":167788},{"id":167918,"depth":370,"text":167919},{"id":168068,"depth":370,"text":168069},{"id":168345,"depth":370,"text":168346},{"id":168381,"depth":370,"text":168382},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":166266,"description":23802},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168445,"title":168446,"body":168447,"description":23802,"extension":487,"meta":170966,"navigation":490,"path":170967,"seo":170968,"stem":170969,"__hash__":170970},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168448,"toc":170941},[168449,168452,168456,168459,168462,168493,168497,168501,168504,168531,168535,168538,168589,168592,168607,168610,168645,168649,168651,168675,168678,168738,168742,168746,168749,168806,168809,168829,168833,168836,168899,168903,168906,168962,168969,168993,168997,169000,169063,169067,169072,169123,169126,169130,169135,169202,169205,169287,169291,169296,169347,169350,169354,169357,169360,169368,169371,169417,169420,169466,169470,169476,169520,169523,169569,169572,169612,169615,169676,169680,169683,169773,169776,169918,169921,169988,169992,169995,169998,170139,170142,170220,170223,170399,170403,170405,170416,170418,170617,170621,170865,170869,170903,170907,170938],[10,168450,168446],{"id":168451},"_8-文件操作",[85,168453,168455],{"id":168454},"_81-文件操作的意义","8.1 文件操作的意义",[15,168457,168458],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[15,168460,168461],{},"常见文件类型：",[22,168463,168464,168470,168476,168482,168488],{},[25,168465,168466,168469],{},[34,168467,168468],{},".txt","：普通文本。",[25,168471,168472,168475],{},[34,168473,168474],{},".csv","：表格文本。",[25,168477,168478,168481],{},[34,168479,168480],{},".json","：结构化数据。",[25,168483,168484,168487],{},[34,168485,168486],{},".log","：日志文件。",[25,168489,168490,168492],{},[34,168491,146642],{},"：Python 源代码。",[85,168494,168496],{"id":168495},"_82-路径","8.2 路径",[531,168498,168500],{"id":168499},"_821-相对路径","8.2.1 相对路径",[15,168502,168503],{},"相对当前运行目录：",[63,168505,168507],{"className":65,"code":168506,"language":67,"meta":68,"style":68},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[34,168508,168509],{"__ignoreMap":68},[72,168510,168511,168513,168515,168517,168519,168521,168523,168525,168527,168529],{"class":74,"line":75},[72,168512,87332],{"class":362},[72,168514,564],{"class":82},[72,168516,147086],{"class":366},[72,168518,12861],{"class":82},[72,168520,147091],{"class":366},[72,168522,12861],{"class":82},[72,168524,147096],{"class":5642},[72,168526,609],{"class":78},[72,168528,147101],{"class":366},[72,168530,570],{"class":82},[531,168532,168534],{"id":168533},"_822-绝对路径","8.2.2 绝对路径",[15,168536,168537],{},"从根目录或盘符开始：",[63,168539,168541],{"className":65,"code":168540,"language":67,"meta":68,"style":68},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[34,168542,168543,168566],{"__ignoreMap":68},[72,168544,168545,168547,168549,168552,168554,168556,168558,168560,168562,168564],{"class":74,"line":75},[72,168546,87332],{"class":362},[72,168548,564],{"class":82},[72,168550,168551],{"class":366},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[72,168553,12861],{"class":82},[72,168555,147091],{"class":366},[72,168557,12861],{"class":82},[72,168559,147096],{"class":5642},[72,168561,609],{"class":78},[72,168563,147101],{"class":366},[72,168565,570],{"class":82},[72,168567,168568,168570,168572,168575,168577,168579,168581,168583,168585,168587],{"class":74,"line":370},[72,168569,87332],{"class":362},[72,168571,564],{"class":82},[72,168573,168574],{"class":366},"\"D:\u002Fdata\u002Fdata.txt\"",[72,168576,12861],{"class":82},[72,168578,147091],{"class":366},[72,168580,12861],{"class":82},[72,168582,147096],{"class":5642},[72,168584,609],{"class":78},[72,168586,147101],{"class":366},[72,168588,570],{"class":82},[15,168590,168591],{},"Windows 路径建议写成：",[63,168593,168595],{"className":65,"code":168594,"language":67,"meta":68,"style":68},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[34,168596,168597],{"__ignoreMap":68},[72,168598,168599,168602,168604],{"class":74,"line":75},[72,168600,168601],{"class":82},"path ",[72,168603,609],{"class":78},[72,168605,168606],{"class":366}," \"D:\u002Fdata\u002Fdata.txt\"\n",[15,168608,168609],{},"或原始字符串：",[63,168611,168613],{"className":65,"code":168612,"language":67,"meta":68,"style":68},"path = r\"D:\\data\\data.txt\"\n",[34,168614,168615],{"__ignoreMap":68},[72,168616,168617,168619,168621,168623,168625,168628,168631,168634,168636,168638,168640,168643],{"class":74,"line":75},[72,168618,168601],{"class":82},[72,168620,609],{"class":78},[72,168622,17547],{"class":78},[72,168624,805],{"class":366},[72,168626,168627],{"class":48395},"D:",[72,168629,168630],{"class":362},"\\d",[72,168632,168633],{"class":48395},"ata",[72,168635,168630],{"class":362},[72,168637,168633],{"class":48395},[72,168639,1112],{"class":362},[72,168641,168642],{"class":48395},"txt",[72,168644,25555],{"class":366},[85,168646,168648],{"id":168647},"_83-open函数","8.3 open函数",[15,168650,5609],{},[63,168652,168654],{"className":65,"code":168653,"language":67,"meta":68,"style":68},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[34,168655,168656],{"__ignoreMap":68},[72,168657,168658,168660,168662,168664,168667,168669,168671,168673],{"class":74,"line":75},[72,168659,45772],{"class":5642},[72,168661,13990],{"class":78},[72,168663,147081],{"class":362},[72,168665,168666],{"class":82},"(文件路径, 打开模式, ",[72,168668,147096],{"class":5642},[72,168670,609],{"class":78},[72,168672,147101],{"class":366},[72,168674,570],{"class":82},[15,168676,168677],{},"常见模式：",[154,168679,168680,168689],{},[157,168681,168682],{},[160,168683,168684,168687],{},[163,168685,168686],{},"模式",[163,168688,26291],{},[174,168690,168691,168700,168709,168718,168728],{},[160,168692,168693,168697],{},[179,168694,168695],{},[34,168696,1224],{},[179,168698,168699],{},"只读，文件不存在会报错",[160,168701,168702,168706],{},[179,168703,168704],{},[34,168705,1349],{},[179,168707,168708],{},"只写，文件不存在会创建，存在会清空",[160,168710,168711,168715],{},[179,168712,168713],{},[34,168714,257],{},[179,168716,168717],{},"追加，文件不存在会创建",[160,168719,168720,168725],{},[179,168721,168722],{},[34,168723,168724],{},"rb",[179,168726,168727],{},"二进制只读",[160,168729,168730,168735],{},[179,168731,168732],{},[34,168733,168734],{},"wb",[179,168736,168737],{},"二进制只写",[85,168739,168741],{"id":168740},"_84-读取文件","8.4 读取文件",[531,168743,168745],{"id":168744},"_841-read","8.4.1 read",[15,168747,168748],{},"一次读取全部内容：",[63,168750,168752],{"className":65,"code":168751,"language":67,"meta":68,"style":68},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[34,168753,168754,168780,168792,168799],{"__ignoreMap":68},[72,168755,168756,168758,168760,168762,168764,168766,168768,168770,168772,168774,168776,168778],{"class":74,"line":75},[72,168757,45772],{"class":5642},[72,168759,13990],{"class":78},[72,168761,147081],{"class":362},[72,168763,564],{"class":82},[72,168765,147086],{"class":366},[72,168767,12861],{"class":82},[72,168769,147091],{"class":366},[72,168771,12861],{"class":82},[72,168773,147096],{"class":5642},[72,168775,609],{"class":78},[72,168777,147101],{"class":366},[72,168779,570],{"class":82},[72,168781,168782,168785,168787,168789],{"class":74,"line":370},[72,168783,168784],{"class":82},"content ",[72,168786,609],{"class":78},[72,168788,148443],{"class":5642},[72,168790,168791],{"class":82},".read()\n",[72,168793,168794,168796],{"class":74,"line":1608},[72,168795,30833],{"class":362},[72,168797,168798],{"class":82},"(content)\n",[72,168800,168801,168803],{"class":74,"line":1623},[72,168802,45772],{"class":5642},[72,168804,168805],{"class":82},".close()\n",[15,168807,168808],{},"可以指定读取字符数：",[63,168810,168812],{"className":65,"code":168811,"language":67,"meta":68,"style":68},"content = file.read(10)\n",[34,168813,168814],{"__ignoreMap":68},[72,168815,168816,168818,168820,168822,168825,168827],{"class":74,"line":75},[72,168817,168784],{"class":82},[72,168819,609],{"class":78},[72,168821,148443],{"class":5642},[72,168823,168824],{"class":82},".read(",[72,168826,1000],{"class":362},[72,168828,570],{"class":82},[531,168830,168832],{"id":168831},"_842-readline","8.4.2 readline",[15,168834,168835],{},"一次读取一行：",[63,168837,168839],{"className":65,"code":168838,"language":67,"meta":68,"style":68},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[34,168840,168841,168867,168871,168882,168889,168893],{"__ignoreMap":68},[72,168842,168843,168845,168847,168849,168851,168853,168855,168857,168859,168861,168863,168865],{"class":74,"line":75},[72,168844,45772],{"class":5642},[72,168846,13990],{"class":78},[72,168848,147081],{"class":362},[72,168850,564],{"class":82},[72,168852,147086],{"class":366},[72,168854,12861],{"class":82},[72,168856,147091],{"class":366},[72,168858,12861],{"class":82},[72,168860,147096],{"class":5642},[72,168862,609],{"class":78},[72,168864,147101],{"class":366},[72,168866,570],{"class":82},[72,168868,168869],{"class":74,"line":370},[72,168870,2828],{"emptyLinePlaceholder":490},[72,168872,168873,168875,168877,168879],{"class":74,"line":1608},[72,168874,147542],{"class":82},[72,168876,609],{"class":78},[72,168878,148443],{"class":5642},[72,168880,168881],{"class":82},".readline()\n",[72,168883,168884,168886],{"class":74,"line":1623},[72,168885,30833],{"class":362},[72,168887,168888],{"class":82},"(line)\n",[72,168890,168891],{"class":74,"line":1629},[72,168892,2828],{"emptyLinePlaceholder":490},[72,168894,168895,168897],{"class":74,"line":1643},[72,168896,45772],{"class":5642},[72,168898,168805],{"class":82},[531,168900,168902],{"id":168901},"_843-readlines","8.4.3 readlines",[15,168904,168905],{},"读取所有行，返回列表：",[63,168907,168909],{"className":65,"code":168908,"language":67,"meta":68,"style":68},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[34,168910,168911,168937,168949,168956],{"__ignoreMap":68},[72,168912,168913,168915,168917,168919,168921,168923,168925,168927,168929,168931,168933,168935],{"class":74,"line":75},[72,168914,45772],{"class":5642},[72,168916,13990],{"class":78},[72,168918,147081],{"class":362},[72,168920,564],{"class":82},[72,168922,147086],{"class":366},[72,168924,12861],{"class":82},[72,168926,147091],{"class":366},[72,168928,12861],{"class":82},[72,168930,147096],{"class":5642},[72,168932,609],{"class":78},[72,168934,147101],{"class":366},[72,168936,570],{"class":82},[72,168938,168939,168942,168944,168946],{"class":74,"line":370},[72,168940,168941],{"class":82},"lines ",[72,168943,609],{"class":78},[72,168945,148443],{"class":5642},[72,168947,168948],{"class":82},".readlines()\n",[72,168950,168951,168953],{"class":74,"line":1608},[72,168952,30833],{"class":362},[72,168954,168955],{"class":82},"(lines)\n",[72,168957,168958,168960],{"class":74,"line":1623},[72,168959,45772],{"class":5642},[72,168961,168805],{"class":82},[15,168963,168964,168965,168968],{},"每一行通常带有换行符，可以用 ",[34,168966,168967],{},"strip()"," 去掉：",[63,168970,168972],{"className":65,"code":168971,"language":67,"meta":68,"style":68},"for line in lines:\n    print(line.strip())\n",[34,168973,168974,168986],{"__ignoreMap":68},[72,168975,168976,168978,168981,168983],{"class":74,"line":75},[72,168977,3453],{"class":78},[72,168979,168980],{"class":82}," line ",[72,168982,26465],{"class":78},[72,168984,168985],{"class":82}," lines:\n",[72,168987,168988,168990],{"class":74,"line":370},[72,168989,31717],{"class":362},[72,168991,168992],{"class":82},"(line.strip())\n",[531,168994,168996],{"id":168995},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[15,168998,168999],{},"推荐读取大文件时使用：",[63,169001,169003],{"className":65,"code":169002,"language":67,"meta":68,"style":68},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[34,169004,169005,169031,169035,169047,169053,169057],{"__ignoreMap":68},[72,169006,169007,169009,169011,169013,169015,169017,169019,169021,169023,169025,169027,169029],{"class":74,"line":75},[72,169008,45772],{"class":5642},[72,169010,13990],{"class":78},[72,169012,147081],{"class":362},[72,169014,564],{"class":82},[72,169016,147086],{"class":366},[72,169018,12861],{"class":82},[72,169020,147091],{"class":366},[72,169022,12861],{"class":82},[72,169024,147096],{"class":5642},[72,169026,609],{"class":78},[72,169028,147101],{"class":366},[72,169030,570],{"class":82},[72,169032,169033],{"class":74,"line":370},[72,169034,2828],{"emptyLinePlaceholder":490},[72,169036,169037,169039,169041,169043,169045],{"class":74,"line":1608},[72,169038,3453],{"class":78},[72,169040,168980],{"class":82},[72,169042,26465],{"class":78},[72,169044,148443],{"class":5642},[72,169046,4167],{"class":82},[72,169048,169049,169051],{"class":74,"line":1623},[72,169050,31717],{"class":362},[72,169052,168992],{"class":82},[72,169054,169055],{"class":74,"line":1629},[72,169056,2828],{"emptyLinePlaceholder":490},[72,169058,169059,169061],{"class":74,"line":1643},[72,169060,45772],{"class":5642},[72,169062,168805],{"class":82},[85,169064,169066],{"id":169065},"_85-with语句","8.5 with语句",[15,169068,169069,169071],{},[34,169070,108233],{}," 会自动关闭文件，推荐使用。",[63,169073,169075],{"className":65,"code":169074,"language":67,"meta":68,"style":68},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[34,169076,169077,169107,169117],{"__ignoreMap":68},[72,169078,169079,169081,169083,169085,169087,169089,169091,169093,169095,169097,169099,169101,169103,169105],{"class":74,"line":75},[72,169080,108233],{"class":78},[72,169082,147081],{"class":362},[72,169084,564],{"class":82},[72,169086,147086],{"class":366},[72,169088,12861],{"class":82},[72,169090,147091],{"class":366},[72,169092,12861],{"class":82},[72,169094,147096],{"class":5642},[72,169096,609],{"class":78},[72,169098,147101],{"class":366},[72,169100,14140],{"class":82},[72,169102,31801],{"class":78},[72,169104,148443],{"class":5642},[72,169106,4167],{"class":82},[72,169108,169109,169111,169113,169115],{"class":74,"line":370},[72,169110,147113],{"class":82},[72,169112,609],{"class":78},[72,169114,148443],{"class":5642},[72,169116,168791],{"class":82},[72,169118,169119,169121],{"class":74,"line":1608},[72,169120,31717],{"class":362},[72,169122,168798],{"class":82},[15,169124,169125],{},"等价于打开文件、读取、最后关闭，但更安全。",[85,169127,169129],{"id":169128},"_86-写入文件","8.6 写入文件",[15,169131,169132,169134],{},[34,169133,1349],{}," 模式会清空原文件。",[63,169136,169138],{"className":65,"code":169137,"language":67,"meta":68,"style":68},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[34,169139,169140,169170,169187],{"__ignoreMap":68},[72,169141,169142,169144,169146,169148,169150,169152,169154,169156,169158,169160,169162,169164,169166,169168],{"class":74,"line":75},[72,169143,108233],{"class":78},[72,169145,147081],{"class":362},[72,169147,564],{"class":82},[72,169149,147086],{"class":366},[72,169151,12861],{"class":82},[72,169153,152266],{"class":366},[72,169155,12861],{"class":82},[72,169157,147096],{"class":5642},[72,169159,609],{"class":78},[72,169161,147101],{"class":366},[72,169163,14140],{"class":82},[72,169165,31801],{"class":78},[72,169167,148443],{"class":5642},[72,169169,4167],{"class":82},[72,169171,169172,169175,169178,169181,169183,169185],{"class":74,"line":370},[72,169173,169174],{"class":5642},"    file",[72,169176,169177],{"class":82},".write(",[72,169179,169180],{"class":366},"\"hello",[72,169182,156815],{"class":362},[72,169184,805],{"class":366},[72,169186,570],{"class":82},[72,169188,169189,169191,169193,169196,169198,169200],{"class":74,"line":1608},[72,169190,169174],{"class":5642},[72,169192,169177],{"class":82},[72,169194,169195],{"class":366},"\"python",[72,169197,156815],{"class":362},[72,169199,805],{"class":366},[72,169201,570],{"class":82},[15,169203,169204],{},"写入多行：",[63,169206,169208],{"className":65,"code":169207,"language":67,"meta":68,"style":68},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[34,169209,169210,169245,169249,169280],{"__ignoreMap":68},[72,169211,169212,169214,169216,169218,169221,169223,169225,169227,169230,169232,169234,169236,169239,169241,169243],{"class":74,"line":75},[72,169213,168941],{"class":82},[72,169215,609],{"class":78},[72,169217,52644],{"class":82},[72,169219,169220],{"class":366},"\"小明,18",[72,169222,156815],{"class":362},[72,169224,805],{"class":366},[72,169226,12861],{"class":82},[72,169228,169229],{"class":366},"\"小红,17",[72,169231,156815],{"class":362},[72,169233,805],{"class":366},[72,169235,12861],{"class":82},[72,169237,169238],{"class":366},"\"小刚,19",[72,169240,156815],{"class":362},[72,169242,805],{"class":366},[72,169244,33664],{"class":82},[72,169246,169247],{"class":74,"line":370},[72,169248,2828],{"emptyLinePlaceholder":490},[72,169250,169251,169253,169255,169257,169260,169262,169264,169266,169268,169270,169272,169274,169276,169278],{"class":74,"line":1608},[72,169252,108233],{"class":78},[72,169254,147081],{"class":362},[72,169256,564],{"class":82},[72,169258,169259],{"class":366},"\"students.txt\"",[72,169261,12861],{"class":82},[72,169263,152266],{"class":366},[72,169265,12861],{"class":82},[72,169267,147096],{"class":5642},[72,169269,609],{"class":78},[72,169271,147101],{"class":366},[72,169273,14140],{"class":82},[72,169275,31801],{"class":78},[72,169277,148443],{"class":5642},[72,169279,4167],{"class":82},[72,169281,169282,169284],{"class":74,"line":1623},[72,169283,169174],{"class":5642},[72,169285,169286],{"class":82},".writelines(lines)\n",[85,169288,169290],{"id":169289},"_87-追加文件","8.7 追加文件",[15,169292,169293,169295],{},[34,169294,257],{}," 模式不会清空原内容，而是在末尾追加。",[63,169297,169299],{"className":65,"code":169298,"language":67,"meta":68,"style":68},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[34,169300,169301,169332],{"__ignoreMap":68},[72,169302,169303,169305,169307,169309,169312,169314,169316,169318,169320,169322,169324,169326,169328,169330],{"class":74,"line":75},[72,169304,108233],{"class":78},[72,169306,147081],{"class":362},[72,169308,564],{"class":82},[72,169310,169311],{"class":366},"\"log.txt\"",[72,169313,12861],{"class":82},[72,169315,165615],{"class":366},[72,169317,12861],{"class":82},[72,169319,147096],{"class":5642},[72,169321,609],{"class":78},[72,169323,147101],{"class":366},[72,169325,14140],{"class":82},[72,169327,31801],{"class":78},[72,169329,148443],{"class":5642},[72,169331,4167],{"class":82},[72,169333,169334,169336,169338,169341,169343,169345],{"class":74,"line":370},[72,169335,169174],{"class":5642},[72,169337,169177],{"class":82},[72,169339,169340],{"class":366},"\"程序启动",[72,169342,156815],{"class":362},[72,169344,805],{"class":366},[72,169346,570],{"class":82},[15,169348,169349],{},"日志类文件常用追加模式。",[85,169351,169353],{"id":169352},"_88-文件编码","8.8 文件编码",[15,169355,169356],{},"编码决定文字如何保存为字节。",[15,169358,169359],{},"常见编码：",[22,169361,169362,169365],{},[25,169363,169364],{},"UTF-8：推荐。",[25,169366,169367],{},"GBK：部分 Windows 中文文件常见。",[15,169369,169370],{},"读取文件乱码时，可以尝试：",[63,169372,169374],{"className":65,"code":169373,"language":67,"meta":68,"style":68},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[34,169375,169376,169407],{"__ignoreMap":68},[72,169377,169378,169380,169382,169384,169386,169388,169390,169392,169394,169396,169399,169401,169403,169405],{"class":74,"line":75},[72,169379,108233],{"class":78},[72,169381,147081],{"class":362},[72,169383,564],{"class":82},[72,169385,147086],{"class":366},[72,169387,12861],{"class":82},[72,169389,147091],{"class":366},[72,169391,12861],{"class":82},[72,169393,147096],{"class":5642},[72,169395,609],{"class":78},[72,169397,169398],{"class":366},"\"gbk\"",[72,169400,14140],{"class":82},[72,169402,31801],{"class":78},[72,169404,148443],{"class":5642},[72,169406,4167],{"class":82},[72,169408,169409,169411,169413,169415],{"class":74,"line":370},[72,169410,147113],{"class":82},[72,169412,609],{"class":78},[72,169414,148443],{"class":5642},[72,169416,168791],{"class":82},[15,169418,169419],{},"写文件时建议统一 UTF-8：",[63,169421,169423],{"className":65,"code":169422,"language":67,"meta":68,"style":68},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[34,169424,169425,169455],{"__ignoreMap":68},[72,169426,169427,169429,169431,169433,169435,169437,169439,169441,169443,169445,169447,169449,169451,169453],{"class":74,"line":75},[72,169428,108233],{"class":78},[72,169430,147081],{"class":362},[72,169432,564],{"class":82},[72,169434,147086],{"class":366},[72,169436,12861],{"class":82},[72,169438,152266],{"class":366},[72,169440,12861],{"class":82},[72,169442,147096],{"class":5642},[72,169444,609],{"class":78},[72,169446,147101],{"class":366},[72,169448,14140],{"class":82},[72,169450,31801],{"class":78},[72,169452,148443],{"class":5642},[72,169454,4167],{"class":82},[72,169456,169457,169459,169461,169464],{"class":74,"line":370},[72,169458,169174],{"class":5642},[72,169460,169177],{"class":82},[72,169462,169463],{"class":366},"\"中文内容\"",[72,169465,570],{"class":82},[85,169467,169469],{"id":169468},"_89-pathlib","8.9 pathlib",[15,169471,169472,169475],{},[34,169473,169474],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[63,169477,169479],{"className":65,"code":169478,"language":67,"meta":68,"style":68},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[34,169480,169481,169491,169495,169513],{"__ignoreMap":68},[72,169482,169483,169485,169487,169489],{"class":74,"line":75},[72,169484,31155],{"class":78},[72,169486,108711],{"class":82},[72,169488,79],{"class":78},[72,169490,108716],{"class":82},[72,169492,169493],{"class":74,"line":370},[72,169494,2828],{"emptyLinePlaceholder":490},[72,169496,169497,169499,169501,169503,169506,169508,169510],{"class":74,"line":1608},[72,169498,168601],{"class":82},[72,169500,609],{"class":78},[72,169502,108945],{"class":82},[72,169504,169505],{"class":366},"\"data\"",[72,169507,14140],{"class":82},[72,169509,1138],{"class":78},[72,169511,169512],{"class":366}," \"students.txt\"\n",[72,169514,169515,169517],{"class":74,"line":1623},[72,169516,30833],{"class":362},[72,169518,169519],{"class":82},"(path)\n",[15,169521,169522],{},"创建目录：",[63,169524,169526],{"className":65,"code":169525,"language":67,"meta":68,"style":68},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[34,169527,169528,169538,169542,169555],{"__ignoreMap":68},[72,169529,169530,169532,169534,169536],{"class":74,"line":75},[72,169531,31155],{"class":78},[72,169533,108711],{"class":82},[72,169535,79],{"class":78},[72,169537,108716],{"class":82},[72,169539,169540],{"class":74,"line":370},[72,169541,2828],{"emptyLinePlaceholder":490},[72,169543,169544,169547,169549,169551,169553],{"class":74,"line":1608},[72,169545,169546],{"class":82},"data_dir ",[72,169548,609],{"class":78},[72,169550,108945],{"class":82},[72,169552,169505],{"class":366},[72,169554,570],{"class":82},[72,169556,169557,169560,169563,169565,169567],{"class":74,"line":1623},[72,169558,169559],{"class":82},"data_dir.mkdir(",[72,169561,169562],{"class":5642},"exist_ok",[72,169564,609],{"class":78},[72,169566,31894],{"class":362},[72,169568,570],{"class":82},[15,169570,169571],{},"判断文件是否存在：",[63,169573,169575],{"className":65,"code":169574,"language":67,"meta":68,"style":68},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[34,169576,169577,169590,169594,169601],{"__ignoreMap":68},[72,169578,169579,169581,169583,169585,169588],{"class":74,"line":75},[72,169580,168601],{"class":82},[72,169582,609],{"class":78},[72,169584,108945],{"class":82},[72,169586,169587],{"class":366},"\"data\u002Fstudents.txt\"",[72,169589,570],{"class":82},[72,169591,169592],{"class":74,"line":370},[72,169593,2828],{"emptyLinePlaceholder":490},[72,169595,169596,169598],{"class":74,"line":1608},[72,169597,1960],{"class":78},[72,169599,169600],{"class":82}," path.exists():\n",[72,169602,169603,169605,169607,169610],{"class":74,"line":1623},[72,169604,31717],{"class":362},[72,169606,564],{"class":82},[72,169608,169609],{"class":366},"\"文件存在\"",[72,169611,570],{"class":82},[15,169613,169614],{},"读写文本：",[63,169616,169618],{"className":65,"code":169617,"language":67,"meta":68,"style":68},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[34,169619,169620,169632,169636,169653,169670],{"__ignoreMap":68},[72,169621,169622,169624,169626,169628,169630],{"class":74,"line":75},[72,169623,168601],{"class":82},[72,169625,609],{"class":78},[72,169627,108945],{"class":82},[72,169629,147086],{"class":366},[72,169631,570],{"class":82},[72,169633,169634],{"class":74,"line":370},[72,169635,2828],{"emptyLinePlaceholder":490},[72,169637,169638,169641,169643,169645,169647,169649,169651],{"class":74,"line":1608},[72,169639,169640],{"class":82},"path.write_text(",[72,169642,146166],{"class":366},[72,169644,12861],{"class":82},[72,169646,147096],{"class":5642},[72,169648,609],{"class":78},[72,169650,147101],{"class":366},[72,169652,570],{"class":82},[72,169654,169655,169657,169659,169662,169664,169666,169668],{"class":74,"line":1623},[72,169656,168784],{"class":82},[72,169658,609],{"class":78},[72,169660,169661],{"class":82}," path.read_text(",[72,169663,147096],{"class":5642},[72,169665,609],{"class":78},[72,169667,147101],{"class":366},[72,169669,570],{"class":82},[72,169671,169672,169674],{"class":74,"line":1629},[72,169673,30833],{"class":362},[72,169675,168798],{"class":82},[85,169677,169679],{"id":169678},"_810-json文件","8.10 JSON文件",[15,169681,169682],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[63,169684,169686],{"className":65,"code":169685,"language":67,"meta":68,"style":68},"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",[34,169687,169688,169694,169698,169706,169716,169726,169734,169738,169742,169767],{"__ignoreMap":68},[72,169689,169690,169692],{"class":74,"line":75},[72,169691,79],{"class":78},[72,169693,147381],{"class":82},[72,169695,169696],{"class":74,"line":370},[72,169697,2828],{"emptyLinePlaceholder":490},[72,169699,169700,169702,169704],{"class":74,"line":1608},[72,169701,149771],{"class":82},[72,169703,609],{"class":78},[72,169705,15998],{"class":82},[72,169707,169708,169710,169712,169714],{"class":74,"line":1623},[72,169709,147310],{"class":366},[72,169711,51855],{"class":82},[72,169713,150178],{"class":366},[72,169715,31884],{"class":82},[72,169717,169718,169720,169722,169724],{"class":74,"line":1629},[72,169719,164827],{"class":366},[72,169721,51855],{"class":82},[72,169723,1204],{"class":362},[72,169725,31884],{"class":82},[72,169727,169728,169730,169732],{"class":74,"line":1643},[72,169729,164838],{"class":366},[72,169731,51855],{"class":82},[72,169733,164843],{"class":362},[72,169735,169736],{"class":74,"line":1649},[72,169737,1994],{"class":82},[72,169739,169740],{"class":74,"line":1740},[72,169741,2828],{"emptyLinePlaceholder":490},[72,169743,169744,169746,169748,169751,169753,169755,169757,169759,169761,169763,169765],{"class":74,"line":1746},[72,169745,156734],{"class":82},[72,169747,609],{"class":78},[72,169749,169750],{"class":82}," json.dumps(student, ",[72,169752,147427],{"class":5642},[72,169754,609],{"class":78},[72,169756,34405],{"class":362},[72,169758,12861],{"class":82},[72,169760,152302],{"class":5642},[72,169762,609],{"class":78},[72,169764,640],{"class":362},[72,169766,570],{"class":82},[72,169768,169769,169771],{"class":74,"line":1758},[72,169770,30833],{"class":362},[72,169772,164361],{"class":82},[15,169774,169775],{},"写入 JSON 文件：",[63,169777,169779],{"className":65,"code":169778,"language":67,"meta":68,"style":68},"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",[34,169780,169781,169787,169791,169799,169827,169855,169859,169863,169893],{"__ignoreMap":68},[72,169782,169783,169785],{"class":74,"line":75},[72,169784,79],{"class":78},[72,169786,147381],{"class":82},[72,169788,169789],{"class":74,"line":370},[72,169790,2828],{"emptyLinePlaceholder":490},[72,169792,169793,169795,169797],{"class":74,"line":1608},[72,169794,160006],{"class":82},[72,169796,609],{"class":78},[72,169798,55865],{"class":82},[72,169800,169801,169803,169805,169807,169809,169811,169813,169815,169817,169819,169821,169823,169825],{"class":74,"line":1623},[72,169802,148675],{"class":82},[72,169804,63097],{"class":366},[72,169806,51855],{"class":82},[72,169808,150178],{"class":366},[72,169810,12861],{"class":82},[72,169812,69542],{"class":366},[72,169814,51855],{"class":82},[72,169816,1204],{"class":362},[72,169818,12861],{"class":82},[72,169820,151762],{"class":366},[72,169822,51855],{"class":82},[72,169824,1543],{"class":362},[72,169826,5358],{"class":82},[72,169828,169829,169831,169833,169835,169837,169839,169841,169843,169845,169847,169849,169851,169853],{"class":74,"line":1629},[72,169830,148675],{"class":82},[72,169832,63097],{"class":366},[72,169834,51855],{"class":82},[72,169836,151226],{"class":366},[72,169838,12861],{"class":82},[72,169840,69542],{"class":366},[72,169842,51855],{"class":82},[72,169844,1179],{"class":362},[72,169846,12861],{"class":82},[72,169848,151762],{"class":366},[72,169850,51855],{"class":82},[72,169852,1365],{"class":362},[72,169854,5358],{"class":82},[72,169856,169857],{"class":74,"line":1643},[72,169858,33664],{"class":82},[72,169860,169861],{"class":74,"line":1649},[72,169862,2828],{"emptyLinePlaceholder":490},[72,169864,169865,169867,169869,169871,169873,169875,169877,169879,169881,169883,169885,169887,169889,169891],{"class":74,"line":1740},[72,169866,108233],{"class":78},[72,169868,147081],{"class":362},[72,169870,564],{"class":82},[72,169872,152121],{"class":366},[72,169874,12861],{"class":82},[72,169876,152266],{"class":366},[72,169878,12861],{"class":82},[72,169880,147096],{"class":5642},[72,169882,609],{"class":78},[72,169884,147101],{"class":366},[72,169886,14140],{"class":82},[72,169888,31801],{"class":78},[72,169890,148443],{"class":5642},[72,169892,4167],{"class":82},[72,169894,169895,169898,169900,169902,169904,169906,169908,169910,169912,169914,169916],{"class":74,"line":1746},[72,169896,169897],{"class":82},"    json.dump(students, ",[72,169899,45772],{"class":5642},[72,169901,12861],{"class":82},[72,169903,147427],{"class":5642},[72,169905,609],{"class":78},[72,169907,34405],{"class":362},[72,169909,12861],{"class":82},[72,169911,152302],{"class":5642},[72,169913,609],{"class":78},[72,169915,640],{"class":362},[72,169917,570],{"class":82},[15,169919,169920],{},"读取 JSON 文件：",[63,169922,169924],{"className":65,"code":169923,"language":67,"meta":68,"style":68},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[34,169925,169926,169932,169936,169966,169978,169982],{"__ignoreMap":68},[72,169927,169928,169930],{"class":74,"line":75},[72,169929,79],{"class":78},[72,169931,147381],{"class":82},[72,169933,169934],{"class":74,"line":370},[72,169935,2828],{"emptyLinePlaceholder":490},[72,169937,169938,169940,169942,169944,169946,169948,169950,169952,169954,169956,169958,169960,169962,169964],{"class":74,"line":1608},[72,169939,108233],{"class":78},[72,169941,147081],{"class":362},[72,169943,564],{"class":82},[72,169945,152121],{"class":366},[72,169947,12861],{"class":82},[72,169949,147091],{"class":366},[72,169951,12861],{"class":82},[72,169953,147096],{"class":5642},[72,169955,609],{"class":78},[72,169957,147101],{"class":366},[72,169959,14140],{"class":82},[72,169961,31801],{"class":78},[72,169963,148443],{"class":5642},[72,169965,4167],{"class":82},[72,169967,169968,169970,169972,169974,169976],{"class":74,"line":1623},[72,169969,153327],{"class":82},[72,169971,609],{"class":78},[72,169973,148454],{"class":82},[72,169975,45772],{"class":5642},[72,169977,570],{"class":82},[72,169979,169980],{"class":74,"line":1629},[72,169981,2828],{"emptyLinePlaceholder":490},[72,169983,169984,169986],{"class":74,"line":1643},[72,169985,30833],{"class":362},[72,169987,165285],{"class":82},[85,169989,169991],{"id":169990},"_811-csv文件","8.11 CSV文件",[15,169993,169994],{},"CSV 是逗号分隔值，常用于表格数据。",[15,169996,169997],{},"写入 CSV：",[63,169999,170001],{"className":65,"code":170000,"language":67,"meta":68,"style":68},"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",[34,170002,170003,170010,170014,170022,170040,170056,170072,170076,170080,170120,170134],{"__ignoreMap":68},[72,170004,170005,170007],{"class":74,"line":75},[72,170006,79],{"class":78},[72,170008,170009],{"class":82}," csv\n",[72,170011,170012],{"class":74,"line":370},[72,170013,2828],{"emptyLinePlaceholder":490},[72,170015,170016,170018,170020],{"class":74,"line":1608},[72,170017,160006],{"class":82},[72,170019,609],{"class":78},[72,170021,55865],{"class":82},[72,170023,170024,170027,170029,170031,170033,170035,170038],{"class":74,"line":1623},[72,170025,170026],{"class":82},"    [",[72,170028,73517],{"class":366},[72,170030,12861],{"class":82},[72,170032,73550],{"class":366},[72,170034,12861],{"class":82},[72,170036,170037],{"class":366},"\"成绩\"",[72,170039,88253],{"class":82},[72,170041,170042,170044,170046,170048,170050,170052,170054],{"class":74,"line":1629},[72,170043,170026],{"class":82},[72,170045,150178],{"class":366},[72,170047,12861],{"class":82},[72,170049,1204],{"class":362},[72,170051,12861],{"class":82},[72,170053,1543],{"class":362},[72,170055,88253],{"class":82},[72,170057,170058,170060,170062,170064,170066,170068,170070],{"class":74,"line":1643},[72,170059,170026],{"class":82},[72,170061,151226],{"class":366},[72,170063,12861],{"class":82},[72,170065,1179],{"class":362},[72,170067,12861],{"class":82},[72,170069,1365],{"class":362},[72,170071,88253],{"class":82},[72,170073,170074],{"class":74,"line":1649},[72,170075,33664],{"class":82},[72,170077,170078],{"class":74,"line":1740},[72,170079,2828],{"emptyLinePlaceholder":490},[72,170081,170082,170084,170086,170088,170091,170093,170095,170097,170099,170101,170103,170105,170108,170110,170112,170114,170116,170118],{"class":74,"line":1746},[72,170083,108233],{"class":78},[72,170085,147081],{"class":362},[72,170087,564],{"class":82},[72,170089,170090],{"class":366},"\"students.csv\"",[72,170092,12861],{"class":82},[72,170094,152266],{"class":366},[72,170096,12861],{"class":82},[72,170098,147096],{"class":5642},[72,170100,609],{"class":78},[72,170102,147101],{"class":366},[72,170104,12861],{"class":82},[72,170106,170107],{"class":5642},"newline",[72,170109,609],{"class":78},[72,170111,8078],{"class":366},[72,170113,14140],{"class":82},[72,170115,31801],{"class":78},[72,170117,148443],{"class":5642},[72,170119,4167],{"class":82},[72,170121,170122,170125,170127,170130,170132],{"class":74,"line":1758},[72,170123,170124],{"class":82},"    writer ",[72,170126,609],{"class":78},[72,170128,170129],{"class":82}," csv.writer(",[72,170131,45772],{"class":5642},[72,170133,570],{"class":82},[72,170135,170136],{"class":74,"line":2041},[72,170137,170138],{"class":82},"    writer.writerows(students)\n",[15,170140,170141],{},"读取 CSV：",[63,170143,170145],{"className":65,"code":170144,"language":67,"meta":68,"style":68},"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",[34,170146,170147,170153,170157,170187,170201,170213],{"__ignoreMap":68},[72,170148,170149,170151],{"class":74,"line":75},[72,170150,79],{"class":78},[72,170152,170009],{"class":82},[72,170154,170155],{"class":74,"line":370},[72,170156,2828],{"emptyLinePlaceholder":490},[72,170158,170159,170161,170163,170165,170167,170169,170171,170173,170175,170177,170179,170181,170183,170185],{"class":74,"line":1608},[72,170160,108233],{"class":78},[72,170162,147081],{"class":362},[72,170164,564],{"class":82},[72,170166,170090],{"class":366},[72,170168,12861],{"class":82},[72,170170,147091],{"class":366},[72,170172,12861],{"class":82},[72,170174,147096],{"class":5642},[72,170176,609],{"class":78},[72,170178,147101],{"class":366},[72,170180,14140],{"class":82},[72,170182,31801],{"class":78},[72,170184,148443],{"class":5642},[72,170186,4167],{"class":82},[72,170188,170189,170192,170194,170197,170199],{"class":74,"line":1623},[72,170190,170191],{"class":82},"    reader ",[72,170193,609],{"class":78},[72,170195,170196],{"class":82}," csv.reader(",[72,170198,45772],{"class":5642},[72,170200,570],{"class":82},[72,170202,170203,170205,170208,170210],{"class":74,"line":1629},[72,170204,3629],{"class":78},[72,170206,170207],{"class":82}," row ",[72,170209,26465],{"class":78},[72,170211,170212],{"class":82}," reader:\n",[72,170214,170215,170217],{"class":74,"line":1643},[72,170216,32869],{"class":362},[72,170218,170219],{"class":82},"(row)\n",[15,170221,170222],{},"使用字典写入：",[63,170224,170226],{"className":65,"code":170225,"language":67,"meta":68,"style":68},"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",[34,170227,170228,170234,170238,170246,170274,170302,170306,170310,170348,170369,170390,170395],{"__ignoreMap":68},[72,170229,170230,170232],{"class":74,"line":75},[72,170231,79],{"class":78},[72,170233,170009],{"class":82},[72,170235,170236],{"class":74,"line":370},[72,170237,2828],{"emptyLinePlaceholder":490},[72,170239,170240,170242,170244],{"class":74,"line":1608},[72,170241,160006],{"class":82},[72,170243,609],{"class":78},[72,170245,55865],{"class":82},[72,170247,170248,170250,170252,170254,170256,170258,170260,170262,170264,170266,170268,170270,170272],{"class":74,"line":1623},[72,170249,148675],{"class":82},[72,170251,63097],{"class":366},[72,170253,51855],{"class":82},[72,170255,150178],{"class":366},[72,170257,12861],{"class":82},[72,170259,69542],{"class":366},[72,170261,51855],{"class":82},[72,170263,1204],{"class":362},[72,170265,12861],{"class":82},[72,170267,151762],{"class":366},[72,170269,51855],{"class":82},[72,170271,1543],{"class":362},[72,170273,5358],{"class":82},[72,170275,170276,170278,170280,170282,170284,170286,170288,170290,170292,170294,170296,170298,170300],{"class":74,"line":1629},[72,170277,148675],{"class":82},[72,170279,63097],{"class":366},[72,170281,51855],{"class":82},[72,170283,151226],{"class":366},[72,170285,12861],{"class":82},[72,170287,69542],{"class":366},[72,170289,51855],{"class":82},[72,170291,1179],{"class":362},[72,170293,12861],{"class":82},[72,170295,151762],{"class":366},[72,170297,51855],{"class":82},[72,170299,1365],{"class":362},[72,170301,5358],{"class":82},[72,170303,170304],{"class":74,"line":1643},[72,170305,33664],{"class":82},[72,170307,170308],{"class":74,"line":1649},[72,170309,2828],{"emptyLinePlaceholder":490},[72,170311,170312,170314,170316,170318,170320,170322,170324,170326,170328,170330,170332,170334,170336,170338,170340,170342,170344,170346],{"class":74,"line":1740},[72,170313,108233],{"class":78},[72,170315,147081],{"class":362},[72,170317,564],{"class":82},[72,170319,170090],{"class":366},[72,170321,12861],{"class":82},[72,170323,152266],{"class":366},[72,170325,12861],{"class":82},[72,170327,147096],{"class":5642},[72,170329,609],{"class":78},[72,170331,147101],{"class":366},[72,170333,12861],{"class":82},[72,170335,170107],{"class":5642},[72,170337,609],{"class":78},[72,170339,8078],{"class":366},[72,170341,14140],{"class":82},[72,170343,31801],{"class":78},[72,170345,148443],{"class":5642},[72,170347,4167],{"class":82},[72,170349,170350,170353,170355,170357,170359,170361,170363,170365,170367],{"class":74,"line":1746},[72,170351,170352],{"class":82},"    fieldnames ",[72,170354,609],{"class":78},[72,170356,52644],{"class":82},[72,170358,63097],{"class":366},[72,170360,12861],{"class":82},[72,170362,69542],{"class":366},[72,170364,12861],{"class":82},[72,170366,151762],{"class":366},[72,170368,33664],{"class":82},[72,170370,170371,170373,170375,170378,170380,170382,170385,170387],{"class":74,"line":1758},[72,170372,170124],{"class":82},[72,170374,609],{"class":78},[72,170376,170377],{"class":82}," csv.DictWriter(",[72,170379,45772],{"class":5642},[72,170381,12861],{"class":82},[72,170383,170384],{"class":5642},"fieldnames",[72,170386,609],{"class":78},[72,170388,170389],{"class":82},"fieldnames)\n",[72,170391,170392],{"class":74,"line":2041},[72,170393,170394],{"class":82},"    writer.writeheader()\n",[72,170396,170397],{"class":74,"line":2046},[72,170398,170138],{"class":82},[85,170400,170402],{"id":170401},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[15,170404,123582],{},[22,170406,170407,170410,170413],{},[25,170408,170409],{},"读取文本文件。",[25,170411,170412],{},"统计每个单词出现次数。",[25,170414,170415],{},"输出出现次数最多的前 10 个单词。",[15,170417,10461],{},[63,170419,170421],{"className":65,"code":170420,"language":67,"meta":68,"style":68},"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",[34,170422,170423,170433,170437,170450,170466,170470,170480,170489,170493,170505,170525,170534,170538,170556,170560,170590,170594,170610],{"__ignoreMap":68},[72,170424,170425,170427,170429,170431],{"class":74,"line":75},[72,170426,31155],{"class":78},[72,170428,108711],{"class":82},[72,170430,79],{"class":78},[72,170432,108716],{"class":82},[72,170434,170435],{"class":74,"line":370},[72,170436,2828],{"emptyLinePlaceholder":490},[72,170438,170439,170441,170443,170445,170448],{"class":74,"line":1608},[72,170440,168601],{"class":82},[72,170442,609],{"class":78},[72,170444,108945],{"class":82},[72,170446,170447],{"class":366},"\"article.txt\"",[72,170449,570],{"class":82},[72,170451,170452,170454,170456,170458,170460,170462,170464],{"class":74,"line":1623},[72,170453,168784],{"class":82},[72,170455,609],{"class":78},[72,170457,169661],{"class":82},[72,170459,147096],{"class":5642},[72,170461,609],{"class":78},[72,170463,147101],{"class":366},[72,170465,570],{"class":82},[72,170467,170468],{"class":74,"line":1629},[72,170469,2828],{"emptyLinePlaceholder":490},[72,170471,170472,170475,170477],{"class":74,"line":1643},[72,170473,170474],{"class":82},"words ",[72,170476,609],{"class":78},[72,170478,170479],{"class":82}," content.lower().split()\n",[72,170481,170482,170485,170487],{"class":74,"line":1649},[72,170483,170484],{"class":82},"counter ",[72,170486,609],{"class":78},[72,170488,88285],{"class":82},[72,170490,170491],{"class":74,"line":1740},[72,170492,2828],{"emptyLinePlaceholder":490},[72,170494,170495,170497,170500,170502],{"class":74,"line":1746},[72,170496,3453],{"class":78},[72,170498,170499],{"class":82}," word ",[72,170501,26465],{"class":78},[72,170503,170504],{"class":82}," words:\n",[72,170506,170507,170510,170512,170515,170518,170520,170523],{"class":74,"line":1758},[72,170508,170509],{"class":82},"    word ",[72,170511,609],{"class":78},[72,170513,170514],{"class":82}," word.strip(",[72,170516,170517],{"class":366},"\".,!?;:",[72,170519,156785],{"class":362},[72,170521,170522],{"class":366},"'()[]\"",[72,170524,570],{"class":82},[72,170526,170527,170529,170531],{"class":74,"line":2041},[72,170528,3529],{"class":78},[72,170530,39348],{"class":78},[72,170532,170533],{"class":82}," word:\n",[72,170535,170536],{"class":74,"line":2046},[72,170537,148802],{"class":78},[72,170539,170540,170543,170545,170548,170550,170552,170554],{"class":74,"line":2052},[72,170541,170542],{"class":82},"    counter[word] ",[72,170544,609],{"class":78},[72,170546,170547],{"class":82}," counter.get(word, ",[72,170549,747],{"class":362},[72,170551,14140],{"class":82},[72,170553,1035],{"class":78},[72,170555,56117],{"class":362},[72,170557,170558],{"class":74,"line":2057},[72,170559,2828],{"emptyLinePlaceholder":490},[72,170561,170562,170565,170567,170569,170572,170574,170576,170578,170580,170582,170584,170586,170588],{"class":74,"line":2071},[72,170563,170564],{"class":82},"items ",[72,170566,609],{"class":78},[72,170568,163894],{"class":362},[72,170570,170571],{"class":82},"(counter.items(), ",[72,170573,154236],{"class":5642},[72,170575,154239],{"class":78},[72,170577,154242],{"class":82},[72,170579,772],{"class":362},[72,170581,112602],{"class":82},[72,170583,163818],{"class":5642},[72,170585,609],{"class":78},[72,170587,31894],{"class":362},[72,170589,570],{"class":82},[72,170591,170592],{"class":74,"line":2076},[72,170593,2828],{"emptyLinePlaceholder":490},[72,170595,170596,170598,170601,170603,170606,170608],{"class":74,"line":2082},[72,170597,3453],{"class":78},[72,170599,170600],{"class":82}," word, count ",[72,170602,26465],{"class":78},[72,170604,170605],{"class":82}," items[:",[72,170607,1000],{"class":362},[72,170609,166045],{"class":82},[72,170611,170612,170614],{"class":74,"line":2103},[72,170613,31717],{"class":362},[72,170615,170616],{"class":82},"(word, count)\n",[85,170618,170620],{"id":170619},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[63,170622,170624],{"className":65,"code":170623,"language":67,"meta":68,"style":68},"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",[34,170625,170626,170632,170642,170646,170658,170662,170666,170674,170684,170690,170694,170724,170734,170738,170742,170750,170780,170804,170808,170812,170820,170849,170854],{"__ignoreMap":68},[72,170627,170628,170630],{"class":74,"line":75},[72,170629,79],{"class":78},[72,170631,147381],{"class":82},[72,170633,170634,170636,170638,170640],{"class":74,"line":370},[72,170635,31155],{"class":78},[72,170637,108711],{"class":82},[72,170639,79],{"class":78},[72,170641,108716],{"class":82},[72,170643,170644],{"class":74,"line":1608},[72,170645,2828],{"emptyLinePlaceholder":490},[72,170647,170648,170650,170652,170654,170656],{"class":74,"line":1623},[72,170649,152114],{"class":362},[72,170651,13990],{"class":78},[72,170653,108945],{"class":82},[72,170655,152121],{"class":366},[72,170657,570],{"class":82},[72,170659,170660],{"class":74,"line":1629},[72,170661,2828],{"emptyLinePlaceholder":490},[72,170663,170664],{"class":74,"line":1643},[72,170665,2828],{"emptyLinePlaceholder":490},[72,170667,170668,170670,170672],{"class":74,"line":1649},[72,170669,32365],{"class":78},[72,170671,152138],{"class":358},[72,170673,32371],{"class":82},[72,170675,170676,170678,170680,170682],{"class":74,"line":1740},[72,170677,3529],{"class":78},[72,170679,39348],{"class":78},[72,170681,152149],{"class":362},[72,170683,152152],{"class":82},[72,170685,170686,170688],{"class":74,"line":1746},[72,170687,15178],{"class":78},[72,170689,52256],{"class":82},[72,170691,170692],{"class":74,"line":1758},[72,170693,2828],{"emptyLinePlaceholder":490},[72,170695,170696,170698,170700,170702,170704,170706,170708,170710,170712,170714,170716,170718,170720,170722],{"class":74,"line":2041},[72,170697,34596],{"class":78},[72,170699,147081],{"class":362},[72,170701,564],{"class":82},[72,170703,152114],{"class":362},[72,170705,12861],{"class":82},[72,170707,147091],{"class":366},[72,170709,12861],{"class":82},[72,170711,147096],{"class":5642},[72,170713,609],{"class":78},[72,170715,147101],{"class":366},[72,170717,14140],{"class":82},[72,170719,31801],{"class":78},[72,170721,148443],{"class":5642},[72,170723,4167],{"class":82},[72,170725,170726,170728,170730,170732],{"class":74,"line":2046},[72,170727,15178],{"class":78},[72,170729,148454],{"class":82},[72,170731,45772],{"class":5642},[72,170733,570],{"class":82},[72,170735,170736],{"class":74,"line":2052},[72,170737,2828],{"emptyLinePlaceholder":490},[72,170739,170740],{"class":74,"line":2057},[72,170741,2828],{"emptyLinePlaceholder":490},[72,170743,170744,170746,170748],{"class":74,"line":2071},[72,170745,32365],{"class":78},[72,170747,152248],{"class":358},[72,170749,152251],{"class":82},[72,170751,170752,170754,170756,170758,170760,170762,170764,170766,170768,170770,170772,170774,170776,170778],{"class":74,"line":2076},[72,170753,34596],{"class":78},[72,170755,147081],{"class":362},[72,170757,564],{"class":82},[72,170759,152114],{"class":362},[72,170761,12861],{"class":82},[72,170763,152266],{"class":366},[72,170765,12861],{"class":82},[72,170767,147096],{"class":5642},[72,170769,609],{"class":78},[72,170771,147101],{"class":366},[72,170773,14140],{"class":82},[72,170775,31801],{"class":78},[72,170777,148443],{"class":5642},[72,170779,4167],{"class":82},[72,170781,170782,170784,170786,170788,170790,170792,170794,170796,170798,170800,170802],{"class":74,"line":2082},[72,170783,152287],{"class":82},[72,170785,45772],{"class":5642},[72,170787,12861],{"class":82},[72,170789,147427],{"class":5642},[72,170791,609],{"class":78},[72,170793,34405],{"class":362},[72,170795,12861],{"class":82},[72,170797,152302],{"class":5642},[72,170799,609],{"class":78},[72,170801,640],{"class":362},[72,170803,570],{"class":82},[72,170805,170806],{"class":74,"line":2103},[72,170807,2828],{"emptyLinePlaceholder":490},[72,170809,170810],{"class":74,"line":2108},[72,170811,2828],{"emptyLinePlaceholder":490},[72,170813,170814,170816,170818],{"class":74,"line":2122},[72,170815,160006],{"class":82},[72,170817,609],{"class":78},[72,170819,153332],{"class":82},[72,170821,170822,170825,170827,170829,170831,170833,170835,170837,170839,170841,170843,170845,170847],{"class":74,"line":2127},[72,170823,170824],{"class":82},"students.append({",[72,170826,63097],{"class":366},[72,170828,51855],{"class":82},[72,170830,150178],{"class":366},[72,170832,12861],{"class":82},[72,170834,69542],{"class":366},[72,170836,51855],{"class":82},[72,170838,1204],{"class":362},[72,170840,12861],{"class":82},[72,170842,151762],{"class":366},[72,170844,51855],{"class":82},[72,170846,1543],{"class":362},[72,170848,165442],{"class":82},[72,170850,170851],{"class":74,"line":2156},[72,170852,170853],{"class":82},"save_students(students)\n",[72,170855,170856,170858,170860,170863],{"class":74,"line":2161},[72,170857,30833],{"class":362},[72,170859,564],{"class":82},[72,170861,170862],{"class":366},"\"保存成功\"",[72,170864,570],{"class":82},[85,170866,170868],{"id":170867},"_814-易错点","8.14 易错点",[22,170870,170871,170875,170881,170886,170893,170900],{},[25,170872,170873,169134],{},[34,170874,1349],{},[25,170876,170877,170878,28807],{},"读写中文要指定 ",[34,170879,170880],{},"encoding=\"utf-8\"",[25,170882,170883,170884,28807],{},"打开文件后要关闭，推荐使用 ",[34,170885,108233],{},[25,170887,170888,170889,170892],{},"读取大文件不要直接 ",[34,170890,170891],{},"read()"," 全部内容。",[25,170894,170895,170896,170899],{},"Windows 写 CSV 时建议加 ",[34,170897,170898],{},"newline=\"\"","，避免空行。",[25,170901,170902],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[85,170904,170906],{"id":170905},"_815-本章练习","8.15 本章练习",[22,170908,170909,170916,170921,170924,170927],{},[25,170910,170911,170912,170915],{},"写入一个 ",[34,170913,170914],{},"students.txt","，每行保存一个学生姓名。",[25,170917,104758,170918,170920],{},[34,170919,170914],{}," 并输出所有学生。",[25,170922,170923],{},"把学生列表保存为 JSON 文件。",[25,170925,170926],{},"从 JSON 文件读取学生数据，计算平均分。",[25,170928,170929,170930,170933,170934,170937],{},"写一个日志函数 ",[34,170931,170932],{},"write_log(message)","，每次调用向 ",[34,170935,170936],{},"app.log"," 追加一行。",[473,170939,170940],{},"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":68,"searchDepth":370,"depth":370,"links":170942},[170943,170944,170948,170949,170955,170956,170957,170958,170959,170960,170961,170962,170963,170964,170965],{"id":168454,"depth":370,"text":168455},{"id":168495,"depth":370,"text":168496,"children":170945},[170946,170947],{"id":168499,"depth":1608,"text":168500},{"id":168533,"depth":1608,"text":168534},{"id":168647,"depth":370,"text":168648},{"id":168740,"depth":370,"text":168741,"children":170950},[170951,170952,170953,170954],{"id":168744,"depth":1608,"text":168745},{"id":168831,"depth":1608,"text":168832},{"id":168901,"depth":1608,"text":168902},{"id":168995,"depth":1608,"text":168996},{"id":169065,"depth":370,"text":169066},{"id":169128,"depth":370,"text":169129},{"id":169289,"depth":370,"text":169290},{"id":169352,"depth":370,"text":169353},{"id":169468,"depth":370,"text":169469},{"id":169678,"depth":370,"text":169679},{"id":169990,"depth":370,"text":169991},{"id":170401,"depth":370,"text":170402},{"id":170619,"depth":370,"text":170620},{"id":170867,"depth":370,"text":170868},{"id":170905,"depth":370,"text":170906},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168446,"description":23802},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":170972,"title":170973,"body":170974,"description":23802,"extension":487,"meta":173160,"navigation":490,"path":173161,"seo":173162,"stem":173163,"__hash__":173164},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":170975,"toc":173127},[170976,170979,170983,170986,170989,171081,171083,171102,171107,171111,171114,171117,171146,171153,171156,171160,171163,171192,171194,171246,171252,171305,171309,171407,171410,171477,171481,171538,171540,171546,171550,171555,171561,171652,171657,171661,171664,171742,171745,171783,171787,171905,171908,171912,171915,171960,171963,171967,171972,171978,172028,172031,172062,172066,172070,172100,172104,172139,172143,172178,172218,172222,172238,172241,172245,172249,172328,172332,172373,172377,172432,172436,172470,172474,172504,172513,172520,172526,172583,172586,172594,172597,172601,172608,172611,172617,172620,172637,172642,172646,172652,172665,172668,172705,172708,172719,172722,172736,172739,172753,172757,172764,172797,172800,172802,172808,172811,172815,172817,172823,172828,173001,173005,173068,173072,173096,173100,173124],[10,170977,170973],{"id":170978},"_9-异常模块与包",[85,170980,170982],{"id":170981},"_91-什么是异常","9.1 什么是异常",[15,170984,170985],{},"异常是程序运行过程中出现的错误。",[15,170987,170988],{},"常见异常：",[154,170990,170991,171000],{},[157,170992,170993],{},[160,170994,170995,170998],{},[163,170996,170997],{},"异常",[163,170999,26291],{},[174,171001,171002,171012,171022,171031,171041,171051,171061,171071],{},[160,171003,171004,171009],{},[179,171005,171006],{},[34,171007,171008],{},"NameError",[179,171010,171011],{},"使用了未定义变量",[160,171013,171014,171019],{},[179,171015,171016],{},[34,171017,171018],{},"TypeError",[179,171020,171021],{},"类型不匹配",[160,171023,171024,171028],{},[179,171025,171026],{},[34,171027,155124],{},[179,171029,171030],{},"值不合法",[160,171032,171033,171038],{},[179,171034,171035],{},[34,171036,171037],{},"IndexError",[179,171039,171040],{},"列表索引越界",[160,171042,171043,171048],{},[179,171044,171045],{},[34,171046,171047],{},"KeyError",[179,171049,171050],{},"字典 key 不存在",[160,171052,171053,171058],{},[179,171054,171055],{},[34,171056,171057],{},"FileNotFoundError",[179,171059,171060],{},"文件不存在",[160,171062,171063,171068],{},[179,171064,171065],{},[34,171066,171067],{},"ZeroDivisionError",[179,171069,171070],{},"除数为 0",[160,171072,171073,171078],{},[179,171074,171075],{},[34,171076,171077],{},"ImportError",[179,171079,171080],{},"导入失败",[15,171082,15561],{},[63,171084,171086],{"className":65,"code":171085,"language":67,"meta":68,"style":68},"num = int(\"abc\")\n",[34,171087,171088],{"__ignoreMap":68},[72,171089,171090,171092,171094,171096,171098,171100],{"class":74,"line":75},[72,171091,156077],{"class":82},[72,171093,609],{"class":78},[72,171095,2810],{"class":362},[72,171097,564],{"class":82},[72,171099,156170],{"class":366},[72,171101,570],{"class":82},[15,171103,171104,171105,28807],{},"会触发 ",[34,171106,155124],{},[85,171108,171110],{"id":171109},"_92-为什么要处理异常","9.2 为什么要处理异常",[15,171112,171113],{},"如果不处理异常，程序会直接终止。",[15,171115,171116],{},"例如用户输入年龄：",[63,171118,171120],{"className":65,"code":171119,"language":67,"meta":68,"style":68},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[34,171121,171122,171140],{"__ignoreMap":68},[72,171123,171124,171126,171128,171130,171132,171134,171136,171138],{"class":74,"line":75},[72,171125,146836],{"class":82},[72,171127,609],{"class":78},[72,171129,2810],{"class":362},[72,171131,564],{"class":82},[72,171133,54239],{"class":362},[72,171135,564],{"class":82},[72,171137,152684],{"class":366},[72,171139,30915],{"class":82},[72,171141,171142,171144],{"class":74,"line":370},[72,171143,30833],{"class":362},[72,171145,156051],{"class":82},[15,171147,171148,171149,171152],{},"用户输入 ",[34,171150,171151],{},"abc","，程序就会报错退出。",[15,171154,171155],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[85,171157,171159],{"id":171158},"_93-try-except","9.3 try except",[15,171161,171162],{},"基础语法：",[63,171164,171166],{"className":65,"code":171165,"language":67,"meta":68,"style":68},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[34,171167,171168,171175,171180,171187],{"__ignoreMap":68},[72,171169,171170,171173],{"class":74,"line":75},[72,171171,171172],{"class":78},"try",[72,171174,4167],{"class":82},[72,171176,171177],{"class":74,"line":370},[72,171178,171179],{"class":82},"    可能出错的代码\n",[72,171181,171182,171185],{"class":74,"line":1608},[72,171183,171184],{"class":78},"except",[72,171186,4167],{"class":82},[72,171188,171189],{"class":74,"line":1623},[72,171190,171191],{"class":82},"    出错后的处理代码\n",[15,171193,15561],{},[63,171195,171197],{"className":65,"code":171196,"language":67,"meta":68,"style":68},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[34,171198,171199,171205,171223,171229,171235],{"__ignoreMap":68},[72,171200,171201,171203],{"class":74,"line":75},[72,171202,171172],{"class":78},[72,171204,4167],{"class":82},[72,171206,171207,171209,171211,171213,171215,171217,171219,171221],{"class":74,"line":370},[72,171208,152676],{"class":82},[72,171210,609],{"class":78},[72,171212,2810],{"class":362},[72,171214,564],{"class":82},[72,171216,54239],{"class":362},[72,171218,564],{"class":82},[72,171220,152684],{"class":366},[72,171222,30915],{"class":82},[72,171224,171225,171227],{"class":74,"line":1608},[72,171226,31717],{"class":362},[72,171228,156051],{"class":82},[72,171230,171231,171233],{"class":74,"line":1623},[72,171232,171184],{"class":78},[72,171234,4167],{"class":82},[72,171236,171237,171239,171241,171244],{"class":74,"line":1629},[72,171238,31717],{"class":362},[72,171240,564],{"class":82},[72,171242,171243],{"class":366},"\"年龄必须是数字\"",[72,171245,570],{"class":82},[15,171247,171248,171249,171251],{},"不建议裸写 ",[34,171250,171184],{},"，最好指定异常类型。",[63,171253,171255],{"className":65,"code":171254,"language":67,"meta":68,"style":68},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[34,171256,171257,171263,171281,171287,171295],{"__ignoreMap":68},[72,171258,171259,171261],{"class":74,"line":75},[72,171260,171172],{"class":78},[72,171262,4167],{"class":82},[72,171264,171265,171267,171269,171271,171273,171275,171277,171279],{"class":74,"line":370},[72,171266,152676],{"class":82},[72,171268,609],{"class":78},[72,171270,2810],{"class":362},[72,171272,564],{"class":82},[72,171274,54239],{"class":362},[72,171276,564],{"class":82},[72,171278,152684],{"class":366},[72,171280,30915],{"class":82},[72,171282,171283,171285],{"class":74,"line":1608},[72,171284,31717],{"class":362},[72,171286,156051],{"class":82},[72,171288,171289,171291,171293],{"class":74,"line":1623},[72,171290,171184],{"class":78},[72,171292,152516],{"class":362},[72,171294,4167],{"class":82},[72,171296,171297,171299,171301,171303],{"class":74,"line":1629},[72,171298,31717],{"class":362},[72,171300,564],{"class":82},[72,171302,171243],{"class":366},[72,171304,570],{"class":82},[85,171306,171308],{"id":171307},"_94-捕获多个异常","9.4 捕获多个异常",[63,171310,171312],{"className":65,"code":171311,"language":67,"meta":68,"style":68},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[34,171313,171314,171320,171341,171361,171368,171376,171387,171396],{"__ignoreMap":68},[72,171315,171316,171318],{"class":74,"line":75},[72,171317,171172],{"class":78},[72,171319,4167],{"class":82},[72,171321,171322,171325,171327,171329,171331,171333,171335,171337,171339],{"class":74,"line":370},[72,171323,171324],{"class":82},"    nums ",[72,171326,609],{"class":78},[72,171328,52644],{"class":82},[72,171330,772],{"class":362},[72,171332,12861],{"class":82},[72,171334,640],{"class":362},[72,171336,12861],{"class":82},[72,171338,634],{"class":362},[72,171340,33664],{"class":82},[72,171342,171343,171346,171348,171350,171352,171354,171356,171359],{"class":74,"line":1608},[72,171344,171345],{"class":82},"    index ",[72,171347,609],{"class":78},[72,171349,2810],{"class":362},[72,171351,564],{"class":82},[72,171353,54239],{"class":362},[72,171355,564],{"class":82},[72,171357,171358],{"class":366},"\"请输入索引:\"",[72,171360,30915],{"class":82},[72,171362,171363,171365],{"class":74,"line":1623},[72,171364,31717],{"class":362},[72,171366,171367],{"class":82},"(nums[index])\n",[72,171369,171370,171372,171374],{"class":74,"line":1629},[72,171371,171184],{"class":78},[72,171373,152516],{"class":362},[72,171375,4167],{"class":82},[72,171377,171378,171380,171382,171385],{"class":74,"line":1643},[72,171379,31717],{"class":362},[72,171381,564],{"class":82},[72,171383,171384],{"class":366},"\"索引必须是整数\"",[72,171386,570],{"class":82},[72,171388,171389,171391,171394],{"class":74,"line":1649},[72,171390,171184],{"class":78},[72,171392,171393],{"class":362}," IndexError",[72,171395,4167],{"class":82},[72,171397,171398,171400,171402,171405],{"class":74,"line":1740},[72,171399,31717],{"class":362},[72,171401,564],{"class":82},[72,171403,171404],{"class":366},"\"索引越界\"",[72,171406,570],{"class":82},[15,171408,171409],{},"多个异常使用相同处理逻辑：",[63,171411,171413],{"className":65,"code":171412,"language":67,"meta":68,"style":68},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[34,171414,171415,171421,171439,171452,171466],{"__ignoreMap":68},[72,171416,171417,171419],{"class":74,"line":75},[72,171418,171172],{"class":78},[72,171420,4167],{"class":82},[72,171422,171423,171425,171427,171429,171431,171433,171435,171437],{"class":74,"line":370},[72,171424,46011],{"class":82},[72,171426,609],{"class":78},[72,171428,2810],{"class":362},[72,171430,564],{"class":82},[72,171432,54239],{"class":362},[72,171434,564],{"class":82},[72,171436,156086],{"class":366},[72,171438,30915],{"class":82},[72,171440,171441,171443,171445,171447,171449],{"class":74,"line":1608},[72,171442,31717],{"class":362},[72,171444,564],{"class":82},[72,171446,1000],{"class":362},[72,171448,156336],{"class":78},[72,171450,171451],{"class":82}," num)\n",[72,171453,171454,171456,171458,171460,171462,171464],{"class":74,"line":1623},[72,171455,171184],{"class":78},[72,171457,2087],{"class":82},[72,171459,155124],{"class":362},[72,171461,12861],{"class":82},[72,171463,171067],{"class":362},[72,171465,31204],{"class":82},[72,171467,171468,171470,171472,171475],{"class":74,"line":1629},[72,171469,31717],{"class":362},[72,171471,564],{"class":82},[72,171473,171474],{"class":366},"\"输入不合法\"",[72,171476,570],{"class":82},[85,171478,171480],{"id":171479},"_95-获取异常信息","9.5 获取异常信息",[63,171482,171484],{"className":65,"code":171483,"language":67,"meta":68,"style":68},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[34,171485,171486,171492,171506,171517],{"__ignoreMap":68},[72,171487,171488,171490],{"class":74,"line":75},[72,171489,171172],{"class":78},[72,171491,4167],{"class":82},[72,171493,171494,171496,171498,171500,171502,171504],{"class":74,"line":370},[72,171495,46011],{"class":82},[72,171497,609],{"class":78},[72,171499,2810],{"class":362},[72,171501,564],{"class":82},[72,171503,156170],{"class":366},[72,171505,570],{"class":82},[72,171507,171508,171510,171512,171514],{"class":74,"line":1608},[72,171509,171184],{"class":78},[72,171511,152516],{"class":362},[72,171513,65022],{"class":78},[72,171515,171516],{"class":82}," e:\n",[72,171518,171519,171521,171523,171525,171528,171530,171532,171534,171536],{"class":74,"line":1623},[72,171520,31717],{"class":362},[72,171522,564],{"class":82},[72,171524,615],{"class":78},[72,171526,171527],{"class":366},"\"出错了:",[72,171529,1450],{"class":362},[72,171531,637],{"class":82},[72,171533,1500],{"class":362},[72,171535,805],{"class":366},[72,171537,570],{"class":82},[15,171539,146747],{},[63,171541,171544],{"className":171542,"code":171543,"language":127,"meta":68},[125],"出错了:invalid literal for int() with base 10: 'abc'\n",[34,171545,171543],{"__ignoreMap":68},[85,171547,171549],{"id":171548},"_96-else和finally","9.6 else和finally",[15,171551,171552,171554],{},[34,171553,2130],{},"：没有异常时执行。",[15,171556,171557,171560],{},[34,171558,171559],{},"finally","：无论是否异常都会执行。",[63,171562,171564],{"className":65,"code":171563,"language":67,"meta":68,"style":68},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[34,171565,171566,171572,171590,171598,171608,171614,171635,171641],{"__ignoreMap":68},[72,171567,171568,171570],{"class":74,"line":75},[72,171569,171172],{"class":78},[72,171571,4167],{"class":82},[72,171573,171574,171576,171578,171580,171582,171584,171586,171588],{"class":74,"line":370},[72,171575,46011],{"class":82},[72,171577,609],{"class":78},[72,171579,2810],{"class":362},[72,171581,564],{"class":82},[72,171583,54239],{"class":362},[72,171585,564],{"class":82},[72,171587,156086],{"class":366},[72,171589,30915],{"class":82},[72,171591,171592,171594,171596],{"class":74,"line":1608},[72,171593,171184],{"class":78},[72,171595,152516],{"class":362},[72,171597,4167],{"class":82},[72,171599,171600,171602,171604,171606],{"class":74,"line":1623},[72,171601,31717],{"class":362},[72,171603,564],{"class":82},[72,171605,153504],{"class":366},[72,171607,570],{"class":82},[72,171609,171610,171612],{"class":74,"line":1629},[72,171611,2130],{"class":78},[72,171613,4167],{"class":82},[72,171615,171616,171618,171620,171622,171625,171627,171629,171631,171633],{"class":74,"line":1643},[72,171617,31717],{"class":362},[72,171619,564],{"class":82},[72,171621,615],{"class":78},[72,171623,171624],{"class":366},"\"输入正确:",[72,171626,1450],{"class":362},[72,171628,2094],{"class":82},[72,171630,1500],{"class":362},[72,171632,805],{"class":366},[72,171634,570],{"class":82},[72,171636,171637,171639],{"class":74,"line":1649},[72,171638,171559],{"class":78},[72,171640,4167],{"class":82},[72,171642,171643,171645,171647,171650],{"class":74,"line":1740},[72,171644,31717],{"class":362},[72,171646,564],{"class":82},[72,171648,171649],{"class":366},"\"程序结束\"",[72,171651,570],{"class":82},[15,171653,171654,171656],{},[34,171655,171559],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[85,171658,171660],{"id":171659},"_97-抛出异常","9.7 抛出异常",[15,171662,171663],{},"程序可以主动抛出异常。",[63,171665,171667],{"className":65,"code":171666,"language":67,"meta":68,"style":68},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[34,171668,171669,171678,171690,171703,171723,171727,171731],{"__ignoreMap":68},[72,171670,171671,171673,171676],{"class":74,"line":75},[72,171672,32365],{"class":78},[72,171674,171675],{"class":358}," set_age",[72,171677,161705],{"class":82},[72,171679,171680,171682,171684,171686,171688],{"class":74,"line":370},[72,171681,3529],{"class":78},[72,171683,16133],{"class":82},[72,171685,1464],{"class":78},[72,171687,4521],{"class":362},[72,171689,4167],{"class":82},[72,171691,171692,171694,171696,171698,171701],{"class":74,"line":1608},[72,171693,103836],{"class":78},[72,171695,152516],{"class":362},[72,171697,564],{"class":82},[72,171699,171700],{"class":366},"\"年龄不能为负数\"",[72,171702,570],{"class":82},[72,171704,171705,171707,171709,171711,171713,171715,171717,171719,171721],{"class":74,"line":1623},[72,171706,31717],{"class":362},[72,171708,564],{"class":82},[72,171710,615],{"class":78},[72,171712,162273],{"class":366},[72,171714,1450],{"class":362},[72,171716,70639],{"class":82},[72,171718,1500],{"class":362},[72,171720,805],{"class":366},[72,171722,570],{"class":82},[72,171724,171725],{"class":74,"line":1629},[72,171726,2828],{"emptyLinePlaceholder":490},[72,171728,171729],{"class":74,"line":1643},[72,171730,2828],{"emptyLinePlaceholder":490},[72,171732,171733,171736,171738,171740],{"class":74,"line":1649},[72,171734,171735],{"class":82},"set_age(",[72,171737,1086],{"class":78},[72,171739,772],{"class":362},[72,171741,570],{"class":82},[15,171743,171744],{},"调用者可以捕获：",[63,171746,171748],{"className":65,"code":171747,"language":67,"meta":68,"style":68},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[34,171749,171750,171756,171767,171777],{"__ignoreMap":68},[72,171751,171752,171754],{"class":74,"line":75},[72,171753,171172],{"class":78},[72,171755,4167],{"class":82},[72,171757,171758,171761,171763,171765],{"class":74,"line":370},[72,171759,171760],{"class":82},"    set_age(",[72,171762,1086],{"class":78},[72,171764,772],{"class":362},[72,171766,570],{"class":82},[72,171768,171769,171771,171773,171775],{"class":74,"line":1608},[72,171770,171184],{"class":78},[72,171772,152516],{"class":362},[72,171774,65022],{"class":78},[72,171776,171516],{"class":82},[72,171778,171779,171781],{"class":74,"line":1623},[72,171780,31717],{"class":362},[72,171782,67417],{"class":82},[85,171784,171786],{"id":171785},"_98-自定义异常","9.8 自定义异常",[63,171788,171790],{"className":65,"code":171789,"language":67,"meta":68,"style":68},"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",[34,171791,171792,171806,171810,171814,171818,171826,171836,171847,171857,171861,171865,171871,171888,171899],{"__ignoreMap":68},[72,171793,171794,171796,171799,171801,171804],{"class":74,"line":75},[72,171795,15120],{"class":78},[72,171797,171798],{"class":358}," BalanceNotEnoughError",[72,171800,564],{"class":82},[72,171802,171803],{"class":362},"Exception",[72,171805,31204],{"class":82},[72,171807,171808],{"class":74,"line":370},[72,171809,149827],{"class":78},[72,171811,171812],{"class":74,"line":1608},[72,171813,2828],{"emptyLinePlaceholder":490},[72,171815,171816],{"class":74,"line":1623},[72,171817,2828],{"emptyLinePlaceholder":490},[72,171819,171820,171822,171824],{"class":74,"line":1629},[72,171821,32365],{"class":78},[72,171823,150476],{"class":358},[72,171825,163102],{"class":82},[72,171827,171828,171830,171832,171834],{"class":74,"line":1643},[72,171829,3529],{"class":78},[72,171831,150432],{"class":82},[72,171833,1514],{"class":78},[72,171835,162879],{"class":82},[72,171837,171838,171840,171843,171845],{"class":74,"line":1649},[72,171839,103836],{"class":78},[72,171841,171842],{"class":82}," BalanceNotEnoughError(",[72,171844,150527],{"class":366},[72,171846,570],{"class":82},[72,171848,171849,171851,171853,171855],{"class":74,"line":1740},[72,171850,4518],{"class":78},[72,171852,163109],{"class":82},[72,171854,1086],{"class":78},[72,171856,150465],{"class":82},[72,171858,171859],{"class":74,"line":1746},[72,171860,2828],{"emptyLinePlaceholder":490},[72,171862,171863],{"class":74,"line":1758},[72,171864,2828],{"emptyLinePlaceholder":490},[72,171866,171867,171869],{"class":74,"line":2041},[72,171868,171172],{"class":78},[72,171870,4167],{"class":82},[72,171872,171873,171875,171877,171880,171882,171884,171886],{"class":74,"line":2046},[72,171874,162780],{"class":82},[72,171876,609],{"class":78},[72,171878,171879],{"class":82}," withdraw(",[72,171881,865],{"class":362},[72,171883,12861],{"class":82},[72,171885,2151],{"class":362},[72,171887,570],{"class":82},[72,171889,171890,171892,171895,171897],{"class":74,"line":2052},[72,171891,171184],{"class":78},[72,171893,171894],{"class":82}," BalanceNotEnoughError ",[72,171896,31801],{"class":78},[72,171898,171516],{"class":82},[72,171900,171901,171903],{"class":74,"line":2057},[72,171902,31717],{"class":362},[72,171904,67417],{"class":82},[15,171906,171907],{},"入门阶段大多数情况使用内置异常即可。",[85,171909,171911],{"id":171910},"_99-traceback","9.9 traceback",[15,171913,171914],{},"调试时可以输出完整异常堆栈。",[63,171916,171918],{"className":65,"code":171917,"language":67,"meta":68,"style":68},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[34,171919,171920,171927,171931,171937,171947,171955],{"__ignoreMap":68},[72,171921,171922,171924],{"class":74,"line":75},[72,171923,79],{"class":78},[72,171925,171926],{"class":82}," traceback\n",[72,171928,171929],{"class":74,"line":370},[72,171930,2828],{"emptyLinePlaceholder":490},[72,171932,171933,171935],{"class":74,"line":1608},[72,171934,171172],{"class":78},[72,171936,4167],{"class":82},[72,171938,171939,171941,171943,171945],{"class":74,"line":1623},[72,171940,2413],{"class":362},[72,171942,564],{"class":82},[72,171944,156170],{"class":366},[72,171946,570],{"class":82},[72,171948,171949,171951,171953],{"class":74,"line":1629},[72,171950,171184],{"class":78},[72,171952,152516],{"class":362},[72,171954,4167],{"class":82},[72,171956,171957],{"class":74,"line":1643},[72,171958,171959],{"class":82},"    traceback.print_exc()\n",[15,171961,171962],{},"日志系统中常把异常堆栈记录到文件。",[85,171964,171966],{"id":171965},"_910-什么是模块","9.10 什么是模块",[15,171968,171969,171970,126273],{},"模块就是一个 ",[34,171971,146642],{},[15,171973,171974,171975,25040],{},"例如创建 ",[34,171976,171977],{},"my_math.py",[63,171979,171981],{"className":65,"code":171980,"language":67,"meta":68,"style":68},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[34,171982,171983,171991,172001,172005,172009,172018],{"__ignoreMap":68},[72,171984,171985,171987,171989],{"class":74,"line":75},[72,171986,32365],{"class":78},[72,171988,5635],{"class":358},[72,171990,151383],{"class":82},[72,171992,171993,171995,171997,171999],{"class":74,"line":370},[72,171994,4518],{"class":78},[72,171996,11295],{"class":82},[72,171998,1035],{"class":78},[72,172000,151394],{"class":82},[72,172002,172003],{"class":74,"line":1608},[72,172004,2828],{"emptyLinePlaceholder":490},[72,172006,172007],{"class":74,"line":1623},[72,172008,2828],{"emptyLinePlaceholder":490},[72,172010,172011,172013,172016],{"class":74,"line":1629},[72,172012,32365],{"class":78},[72,172014,172015],{"class":358}," sub",[72,172017,151383],{"class":82},[72,172019,172020,172022,172024,172026],{"class":74,"line":1643},[72,172021,4518],{"class":78},[72,172023,11295],{"class":82},[72,172025,1086],{"class":78},[72,172027,151394],{"class":82},[15,172029,172030],{},"在另一个文件中导入：",[63,172032,172034],{"className":65,"code":172033,"language":67,"meta":68,"style":68},"import my_math\n\nprint(my_math.add(1, 2))\n",[34,172035,172036,172043,172047],{"__ignoreMap":68},[72,172037,172038,172040],{"class":74,"line":75},[72,172039,79],{"class":78},[72,172041,172042],{"class":82}," my_math\n",[72,172044,172045],{"class":74,"line":370},[72,172046,2828],{"emptyLinePlaceholder":490},[72,172048,172049,172051,172054,172056,172058,172060],{"class":74,"line":1608},[72,172050,30833],{"class":362},[72,172052,172053],{"class":82},"(my_math.add(",[72,172055,772],{"class":362},[72,172057,12861],{"class":82},[72,172059,640],{"class":362},[72,172061,30915],{"class":82},[85,172063,172065],{"id":172064},"_911-import导入","9.11 import导入",[531,172067,172069],{"id":172068},"_9111-导入模块","9.11.1 导入模块",[63,172071,172073],{"className":65,"code":172072,"language":67,"meta":68,"style":68},"import random\n\nprint(random.randint(1, 10))\n",[34,172074,172075,172081,172085],{"__ignoreMap":68},[72,172076,172077,172079],{"class":74,"line":75},[72,172078,79],{"class":78},[72,172080,45746],{"class":82},[72,172082,172083],{"class":74,"line":370},[72,172084,2828],{"emptyLinePlaceholder":490},[72,172086,172087,172089,172092,172094,172096,172098],{"class":74,"line":1608},[72,172088,30833],{"class":362},[72,172090,172091],{"class":82},"(random.randint(",[72,172093,772],{"class":362},[72,172095,12861],{"class":82},[72,172097,1000],{"class":362},[72,172099,30915],{"class":82},[531,172101,172103],{"id":172102},"_9112-导入指定内容","9.11.2 导入指定内容",[63,172105,172107],{"className":65,"code":172106,"language":67,"meta":68,"style":68},"from random import randint\n\nprint(randint(1, 10))\n",[34,172108,172109,172120,172124],{"__ignoreMap":68},[72,172110,172111,172113,172115,172117],{"class":74,"line":75},[72,172112,31155],{"class":78},[72,172114,58214],{"class":82},[72,172116,79],{"class":78},[72,172118,172119],{"class":82}," randint\n",[72,172121,172122],{"class":74,"line":370},[72,172123,2828],{"emptyLinePlaceholder":490},[72,172125,172126,172128,172131,172133,172135,172137],{"class":74,"line":1608},[72,172127,30833],{"class":362},[72,172129,172130],{"class":82},"(randint(",[72,172132,772],{"class":362},[72,172134,12861],{"class":82},[72,172136,1000],{"class":362},[72,172138,30915],{"class":82},[531,172140,172142],{"id":172141},"_9113-起别名","9.11.3 起别名",[63,172144,172146],{"className":65,"code":172145,"language":67,"meta":68,"style":68},"import random as rd\n\nprint(rd.randint(1, 10))\n",[34,172147,172148,172159,172163],{"__ignoreMap":68},[72,172149,172150,172152,172154,172156],{"class":74,"line":75},[72,172151,79],{"class":78},[72,172153,58214],{"class":82},[72,172155,31801],{"class":78},[72,172157,172158],{"class":82}," rd\n",[72,172160,172161],{"class":74,"line":370},[72,172162,2828],{"emptyLinePlaceholder":490},[72,172164,172165,172167,172170,172172,172174,172176],{"class":74,"line":1608},[72,172166,30833],{"class":362},[72,172168,172169],{"class":82},"(rd.randint(",[72,172171,772],{"class":362},[72,172173,12861],{"class":82},[72,172175,1000],{"class":362},[72,172177,30915],{"class":82},[63,172179,172181],{"className":65,"code":172180,"language":67,"meta":68,"style":68},"from random import randint as rint\n\nprint(rint(1, 10))\n",[34,172182,172183,172199,172203],{"__ignoreMap":68},[72,172184,172185,172187,172189,172191,172194,172196],{"class":74,"line":75},[72,172186,31155],{"class":78},[72,172188,58214],{"class":82},[72,172190,79],{"class":78},[72,172192,172193],{"class":82}," randint ",[72,172195,31801],{"class":78},[72,172197,172198],{"class":82}," rint\n",[72,172200,172201],{"class":74,"line":370},[72,172202,2828],{"emptyLinePlaceholder":490},[72,172204,172205,172207,172210,172212,172214,172216],{"class":74,"line":1608},[72,172206,30833],{"class":362},[72,172208,172209],{"class":82},"(rint(",[72,172211,772],{"class":362},[72,172213,12861],{"class":82},[72,172215,1000],{"class":362},[72,172217,30915],{"class":82},[531,172219,172221],{"id":172220},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[63,172223,172225],{"className":65,"code":172224,"language":67,"meta":68,"style":68},"from random import *\n",[34,172226,172227],{"__ignoreMap":68},[72,172228,172229,172231,172233,172235],{"class":74,"line":75},[72,172230,31155],{"class":78},[72,172232,58214],{"class":82},[72,172234,79],{"class":78},[72,172236,172237],{"class":78}," *\n",[15,172239,172240],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[85,172242,172244],{"id":172243},"_912-常用内置模块","9.12 常用内置模块",[531,172246,172248],{"id":172247},"_9121-random","9.12.1 random",[63,172250,172252],{"className":65,"code":172251,"language":67,"meta":68,"style":68},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[34,172253,172254,172260,172264,172278,172297],{"__ignoreMap":68},[72,172255,172256,172258],{"class":74,"line":75},[72,172257,79],{"class":78},[72,172259,45746],{"class":82},[72,172261,172262],{"class":74,"line":370},[72,172263,2828],{"emptyLinePlaceholder":490},[72,172265,172266,172268,172270,172272,172274,172276],{"class":74,"line":1608},[72,172267,30833],{"class":362},[72,172269,172091],{"class":82},[72,172271,772],{"class":362},[72,172273,12861],{"class":82},[72,172275,1000],{"class":362},[72,172277,30915],{"class":82},[72,172279,172280,172282,172285,172287,172289,172291,172293,172295],{"class":74,"line":1623},[72,172281,30833],{"class":362},[72,172283,172284],{"class":82},"(random.choice([",[72,172286,150178],{"class":366},[72,172288,12861],{"class":82},[72,172290,151226],{"class":366},[72,172292,12861],{"class":82},[72,172294,160021],{"class":366},[72,172296,33561],{"class":82},[72,172298,172299,172301,172304,172306,172308,172310,172312,172314,172316,172318,172320,172322,172324,172326],{"class":74,"line":1629},[72,172300,30833],{"class":362},[72,172302,172303],{"class":82},"(random.sample([",[72,172305,772],{"class":362},[72,172307,12861],{"class":82},[72,172309,640],{"class":362},[72,172311,12861],{"class":82},[72,172313,634],{"class":362},[72,172315,12861],{"class":82},[72,172317,847],{"class":362},[72,172319,12861],{"class":82},[72,172321,873],{"class":362},[72,172323,112602],{"class":82},[72,172325,640],{"class":362},[72,172327,30915],{"class":82},[531,172329,172331],{"id":172330},"_9122-time","9.12.2 time",[63,172333,172335],{"className":65,"code":172334,"language":67,"meta":68,"style":68},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[34,172336,172337,172343,172347,172354,172362],{"__ignoreMap":68},[72,172338,172339,172341],{"class":74,"line":75},[72,172340,79],{"class":78},[72,172342,32247],{"class":82},[72,172344,172345],{"class":74,"line":370},[72,172346,2828],{"emptyLinePlaceholder":490},[72,172348,172349,172351],{"class":74,"line":1608},[72,172350,30833],{"class":362},[72,172352,172353],{"class":82},"(time.time())\n",[72,172355,172356,172358,172360],{"class":74,"line":1623},[72,172357,95488],{"class":82},[72,172359,772],{"class":362},[72,172361,570],{"class":82},[72,172363,172364,172366,172368,172371],{"class":74,"line":1629},[72,172365,30833],{"class":362},[72,172367,564],{"class":82},[72,172369,172370],{"class":366},"\"1秒后执行\"",[72,172372,570],{"class":82},[531,172374,172376],{"id":172375},"_9123-datetime","9.12.3 datetime",[63,172378,172380],{"className":65,"code":172379,"language":67,"meta":68,"style":68},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[34,172381,172382,172394,172398,172408,172415],{"__ignoreMap":68},[72,172383,172384,172386,172389,172391],{"class":74,"line":75},[72,172385,31155],{"class":78},[72,172387,172388],{"class":82}," datetime ",[72,172390,79],{"class":78},[72,172392,172393],{"class":82}," datetime\n",[72,172395,172396],{"class":74,"line":370},[72,172397,2828],{"emptyLinePlaceholder":490},[72,172399,172400,172403,172405],{"class":74,"line":1608},[72,172401,172402],{"class":82},"now ",[72,172404,609],{"class":78},[72,172406,172407],{"class":82}," datetime.now()\n",[72,172409,172410,172412],{"class":74,"line":1623},[72,172411,30833],{"class":362},[72,172413,172414],{"class":82},"(now)\n",[72,172416,172417,172419,172422,172425,172427,172430],{"class":74,"line":1629},[72,172418,30833],{"class":362},[72,172420,172421],{"class":82},"(now.strftime(",[72,172423,172424],{"class":366},"\"%Y-%m-",[72,172426,156981],{"class":362},[72,172428,172429],{"class":366}," %H:%M:%S\"",[72,172431,30915],{"class":82},[531,172433,172435],{"id":172434},"_9124-os","9.12.4 os",[63,172437,172439],{"className":65,"code":172438,"language":67,"meta":68,"style":68},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[34,172440,172441,172447,172451,172458],{"__ignoreMap":68},[72,172442,172443,172445],{"class":74,"line":75},[72,172444,79],{"class":78},[72,172446,45723],{"class":82},[72,172448,172449],{"class":74,"line":370},[72,172450,2828],{"emptyLinePlaceholder":490},[72,172452,172453,172455],{"class":74,"line":1608},[72,172454,30833],{"class":362},[72,172456,172457],{"class":82},"(os.getcwd())\n",[72,172459,172460,172462,172465,172468],{"class":74,"line":1623},[72,172461,30833],{"class":362},[72,172463,172464],{"class":82},"(os.listdir(",[72,172466,172467],{"class":366},"\".\"",[72,172469,30915],{"class":82},[531,172471,172473],{"id":172472},"_9125-sys","9.12.5 sys",[63,172475,172477],{"className":65,"code":172476,"language":67,"meta":68,"style":68},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[34,172478,172479,172486,172490,172497],{"__ignoreMap":68},[72,172480,172481,172483],{"class":74,"line":75},[72,172482,79],{"class":78},[72,172484,172485],{"class":82}," sys\n",[72,172487,172488],{"class":74,"line":370},[72,172489,2828],{"emptyLinePlaceholder":490},[72,172491,172492,172494],{"class":74,"line":1608},[72,172493,30833],{"class":362},[72,172495,172496],{"class":82},"(sys.version)\n",[72,172498,172499,172501],{"class":74,"line":1623},[72,172500,30833],{"class":362},[72,172502,172503],{"class":82},"(sys.path)\n",[85,172505,172507,172508,172510,172511,805],{"id":172506},"_913-if-name-main","9.13 if ",[707,172509,80228],{}," == \"",[707,172512,102463],{},[15,172514,172515,172516,172519],{},"模块被直接运行和被导入时，",[34,172517,172518],{},"__name__"," 的值不同。",[15,172521,172522,172523,25040],{},"创建 ",[34,172524,172525],{},"my_module.py",[63,172527,172529],{"className":65,"code":172528,"language":67,"meta":68,"style":68},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[34,172530,172531,172539,172549,172553,172557,172569],{"__ignoreMap":68},[72,172532,172533,172535,172537],{"class":74,"line":75},[72,172534,32365],{"class":78},[72,172536,5635],{"class":358},[72,172538,151383],{"class":82},[72,172540,172541,172543,172545,172547],{"class":74,"line":370},[72,172542,4518],{"class":78},[72,172544,11295],{"class":82},[72,172546,1035],{"class":78},[72,172548,151394],{"class":82},[72,172550,172551],{"class":74,"line":1608},[72,172552,2828],{"emptyLinePlaceholder":490},[72,172554,172555],{"class":74,"line":1623},[72,172556,2828],{"emptyLinePlaceholder":490},[72,172558,172559,172561,172563,172565,172567],{"class":74,"line":1629},[72,172560,1960],{"class":78},[72,172562,31638],{"class":362},[72,172564,101965],{"class":78},[72,172566,101968],{"class":366},[72,172568,4167],{"class":82},[72,172570,172571,172573,172575,172577,172579,172581],{"class":74,"line":1643},[72,172572,31717],{"class":362},[72,172574,166890],{"class":82},[72,172576,772],{"class":362},[72,172578,12861],{"class":82},[72,172580,640],{"class":362},[72,172582,30915],{"class":82},[15,172584,172585],{},"作用：",[22,172587,172588,172591],{},[25,172589,172590],{},"直接运行该文件时，执行测试代码。",[25,172592,172593],{},"被其他文件导入时，不执行测试代码。",[15,172595,172596],{},"这是写模块时很常用的习惯。",[85,172598,172600],{"id":172599},"_914-包","9.14 包",[15,172602,172603,172604,172607],{},"包是包含 ",[34,172605,172606],{},"__init__.py"," 的目录，用于组织多个模块。",[15,172609,172610],{},"目录结构：",[63,172612,172615],{"className":172613,"code":172614,"language":127,"meta":68},[125],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[34,172616,172614],{"__ignoreMap":68},[15,172618,172619],{},"导入：",[63,172621,172623],{"className":65,"code":172622,"language":67,"meta":68,"style":68},"from utils.file_utils import read_file\n",[34,172624,172625],{"__ignoreMap":68},[72,172626,172627,172629,172632,172634],{"class":74,"line":75},[72,172628,31155],{"class":78},[72,172630,172631],{"class":82}," utils.file_utils ",[72,172633,79],{"class":78},[72,172635,172636],{"class":82}," read_file\n",[15,172638,172639,172641],{},[34,172640,172606],{}," 可以为空，也可以写包初始化逻辑。",[85,172643,172645],{"id":172644},"_915-第三方包","9.15 第三方包",[15,172647,172648,172649,172651],{},"第三方包通过 ",[34,172650,24253],{}," 安装。",[63,172653,172655],{"className":349,"code":172654,"language":351,"meta":68,"style":68},"pip install requests\n",[34,172656,172657],{"__ignoreMap":68},[72,172658,172659,172661,172663],{"class":74,"line":75},[72,172660,24253],{"class":358},[72,172662,24256],{"class":366},[72,172664,146388],{"class":366},[15,172666,172667],{},"使用：",[63,172669,172671],{"className":65,"code":172670,"language":67,"meta":68,"style":68},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[34,172672,172673,172679,172683,172698],{"__ignoreMap":68},[72,172674,172675,172677],{"class":74,"line":75},[72,172676,79],{"class":78},[72,172678,146388],{"class":82},[72,172680,172681],{"class":74,"line":370},[72,172682,2828],{"emptyLinePlaceholder":490},[72,172684,172685,172688,172690,172693,172696],{"class":74,"line":1608},[72,172686,172687],{"class":82},"response ",[72,172689,609],{"class":78},[72,172691,172692],{"class":82}," requests.get(",[72,172694,172695],{"class":366},"\"https:\u002F\u002Fwww.example.com\"",[72,172697,570],{"class":82},[72,172699,172700,172702],{"class":74,"line":1623},[72,172701,30833],{"class":362},[72,172703,172704],{"class":82},"(response.status_code)\n",[15,172706,172707],{},"查看已安装包：",[63,172709,172711],{"className":349,"code":172710,"language":351,"meta":68,"style":68},"pip list\n",[34,172712,172713],{"__ignoreMap":68},[72,172714,172715,172717],{"class":74,"line":75},[72,172716,24253],{"class":358},[72,172718,119245],{"class":366},[15,172720,172721],{},"导出项目依赖：",[63,172723,172724],{"className":349,"code":146583,"language":351,"meta":68,"style":68},[34,172725,172726],{"__ignoreMap":68},[72,172727,172728,172730,172732,172734],{"class":74,"line":75},[72,172729,24253],{"class":358},[72,172731,146592],{"class":366},[72,172733,26644],{"class":78},[72,172735,146597],{"class":366},[15,172737,172738],{},"安装项目依赖：",[63,172740,172741],{"className":349,"code":146603,"language":351,"meta":68,"style":68},[34,172742,172743],{"__ignoreMap":68},[72,172744,172745,172747,172749,172751],{"class":74,"line":75},[72,172746,24253],{"class":358},[72,172748,24256],{"class":366},[72,172750,119929],{"class":362},[72,172752,146597],{"class":366},[85,172754,172756],{"id":172755},"_916-模块搜索路径","9.16 模块搜索路径",[15,172758,172759,172760,172763],{},"Python 导入模块时会在 ",[34,172761,172762],{},"sys.path"," 中查找。",[63,172765,172767],{"className":65,"code":172766,"language":67,"meta":68,"style":68},"import sys\n\nfor path in sys.path:\n    print(path)\n",[34,172768,172769,172775,172779,172791],{"__ignoreMap":68},[72,172770,172771,172773],{"class":74,"line":75},[72,172772,79],{"class":78},[72,172774,172485],{"class":82},[72,172776,172777],{"class":74,"line":370},[72,172778,2828],{"emptyLinePlaceholder":490},[72,172780,172781,172783,172786,172788],{"class":74,"line":1608},[72,172782,3453],{"class":78},[72,172784,172785],{"class":82}," path ",[72,172787,26465],{"class":78},[72,172789,172790],{"class":82}," sys.path:\n",[72,172792,172793,172795],{"class":74,"line":1623},[72,172794,31717],{"class":362},[72,172796,169519],{"class":82},[15,172798,172799],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[15,172801,157913],{},[63,172803,172806],{"className":172804,"code":172805,"language":127,"meta":68},[125],"random.py\njson.py\ntime.py\n",[34,172807,172805],{"__ignoreMap":68},[15,172809,172810],{},"这些文件名可能导致导入异常。",[85,172812,172814],{"id":172813},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[15,172816,172610],{},[63,172818,172821],{"className":172819,"code":172820,"language":127,"meta":68},[125],"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",[34,172822,172820],{"__ignoreMap":68},[15,172824,172825,25040],{},[34,172826,172827],{},"utils\u002Ffile_utils.py",[63,172829,172831],{"className":65,"code":172830,"language":67,"meta":68,"style":68},"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",[34,172832,172833,172839,172849,172853,172857,172867,172877,172885,172891,172895,172922,172932,172936,172940,172950,172976],{"__ignoreMap":68},[72,172834,172835,172837],{"class":74,"line":75},[72,172836,79],{"class":78},[72,172838,147381],{"class":82},[72,172840,172841,172843,172845,172847],{"class":74,"line":370},[72,172842,31155],{"class":78},[72,172844,108711],{"class":82},[72,172846,79],{"class":78},[72,172848,108716],{"class":82},[72,172850,172851],{"class":74,"line":1608},[72,172852,2828],{"emptyLinePlaceholder":490},[72,172854,172855],{"class":74,"line":1623},[72,172856,2828],{"emptyLinePlaceholder":490},[72,172858,172859,172861,172864],{"class":74,"line":1629},[72,172860,32365],{"class":78},[72,172862,172863],{"class":358}," read_json",[72,172865,172866],{"class":82},"(path):\n",[72,172868,172869,172872,172874],{"class":74,"line":1643},[72,172870,172871],{"class":82},"    path ",[72,172873,609],{"class":78},[72,172875,172876],{"class":82}," Path(path)\n",[72,172878,172879,172881,172883],{"class":74,"line":1649},[72,172880,3529],{"class":78},[72,172882,39348],{"class":78},[72,172884,169600],{"class":82},[72,172886,172887,172889],{"class":74,"line":1740},[72,172888,15178],{"class":78},[72,172890,52256],{"class":82},[72,172892,172893],{"class":74,"line":1746},[72,172894,2828],{"emptyLinePlaceholder":490},[72,172896,172897,172899,172901,172904,172906,172908,172910,172912,172914,172916,172918,172920],{"class":74,"line":1758},[72,172898,34596],{"class":78},[72,172900,147081],{"class":362},[72,172902,172903],{"class":82},"(path, ",[72,172905,147091],{"class":366},[72,172907,12861],{"class":82},[72,172909,147096],{"class":5642},[72,172911,609],{"class":78},[72,172913,147101],{"class":366},[72,172915,14140],{"class":82},[72,172917,31801],{"class":78},[72,172919,148443],{"class":5642},[72,172921,4167],{"class":82},[72,172923,172924,172926,172928,172930],{"class":74,"line":2041},[72,172925,15178],{"class":78},[72,172927,148454],{"class":82},[72,172929,45772],{"class":5642},[72,172931,570],{"class":82},[72,172933,172934],{"class":74,"line":2046},[72,172935,2828],{"emptyLinePlaceholder":490},[72,172937,172938],{"class":74,"line":2052},[72,172939,2828],{"emptyLinePlaceholder":490},[72,172941,172942,172944,172947],{"class":74,"line":2057},[72,172943,32365],{"class":78},[72,172945,172946],{"class":358}," write_json",[72,172948,172949],{"class":82},"(path, data):\n",[72,172951,172952,172954,172956,172958,172960,172962,172964,172966,172968,172970,172972,172974],{"class":74,"line":2071},[72,172953,34596],{"class":78},[72,172955,147081],{"class":362},[72,172957,172903],{"class":82},[72,172959,152266],{"class":366},[72,172961,12861],{"class":82},[72,172963,147096],{"class":5642},[72,172965,609],{"class":78},[72,172967,147101],{"class":366},[72,172969,14140],{"class":82},[72,172971,31801],{"class":78},[72,172973,148443],{"class":5642},[72,172975,4167],{"class":82},[72,172977,172978,172981,172983,172985,172987,172989,172991,172993,172995,172997,172999],{"class":74,"line":2076},[72,172979,172980],{"class":82},"        json.dump(data, ",[72,172982,45772],{"class":5642},[72,172984,12861],{"class":82},[72,172986,147427],{"class":5642},[72,172988,609],{"class":78},[72,172990,34405],{"class":362},[72,172992,12861],{"class":82},[72,172994,152302],{"class":5642},[72,172996,609],{"class":78},[72,172998,640],{"class":362},[72,173000,570],{"class":82},[15,173002,173003,25040],{},[34,173004,154897],{},[63,173006,173008],{"className":65,"code":173007,"language":67,"meta":68,"style":68},"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",[34,173009,173010,173021,173025,173038,173058],{"__ignoreMap":68},[72,173011,173012,173014,173016,173018],{"class":74,"line":75},[72,173013,31155],{"class":78},[72,173015,172631],{"class":82},[72,173017,79],{"class":78},[72,173019,173020],{"class":82}," read_json, write_json\n",[72,173022,173023],{"class":74,"line":370},[72,173024,2828],{"emptyLinePlaceholder":490},[72,173026,173027,173029,173031,173034,173036],{"class":74,"line":1608},[72,173028,160006],{"class":82},[72,173030,609],{"class":78},[72,173032,173033],{"class":82}," read_json(",[72,173035,152121],{"class":366},[72,173037,570],{"class":82},[72,173039,173040,173042,173044,173046,173048,173050,173052,173054,173056],{"class":74,"line":1623},[72,173041,170824],{"class":82},[72,173043,63097],{"class":366},[72,173045,51855],{"class":82},[72,173047,150178],{"class":366},[72,173049,12861],{"class":82},[72,173051,151762],{"class":366},[72,173053,51855],{"class":82},[72,173055,1543],{"class":362},[72,173057,165442],{"class":82},[72,173059,173060,173063,173065],{"class":74,"line":1629},[72,173061,173062],{"class":82},"write_json(",[72,173064,152121],{"class":366},[72,173066,173067],{"class":82},", students)\n",[85,173069,173071],{"id":173070},"_918-易错点","9.18 易错点",[22,173073,173074,173077,173082,173087,173090,173093],{},[25,173075,173076],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[25,173078,173079,173080,28807],{},"能指定异常类型就不要裸写 ",[34,173081,171184],{},[25,173083,173084,173086],{},[34,173085,171559],{}," 无论是否出错都会执行。",[25,173088,173089],{},"模块文件名不要和标准库重名。",[25,173091,173092],{},"导入自己写的模块时，要注意运行目录。",[25,173094,173095],{},"第三方包要安装到当前解释器或虚拟环境中。",[85,173097,173099],{"id":173098},"_919-本章练习","9.19 本章练习",[22,173101,173102,173105,173108,173114,173121],{},[25,173103,173104],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[25,173106,173107],{},"写函数读取文件，如果文件不存在则返回空字符串。",[25,173109,172522,173110,173113],{},[34,173111,173112],{},"math_utils.py","，实现加减乘除函数并导入使用。",[25,173115,173116,173117,173120],{},"创建一个 ",[34,173118,173119],{},"utils"," 包，把 JSON 读写函数放进去。",[25,173122,173123],{},"写一个程序，捕获除零异常和输入格式异常。",[473,173125,173126],{},"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":68,"searchDepth":370,"depth":370,"links":173128},[173129,173130,173131,173132,173133,173134,173135,173136,173137,173138,173139,173145,173152,173154,173155,173156,173157,173158,173159],{"id":170981,"depth":370,"text":170982},{"id":171109,"depth":370,"text":171110},{"id":171158,"depth":370,"text":171159},{"id":171307,"depth":370,"text":171308},{"id":171479,"depth":370,"text":171480},{"id":171548,"depth":370,"text":171549},{"id":171659,"depth":370,"text":171660},{"id":171785,"depth":370,"text":171786},{"id":171910,"depth":370,"text":171911},{"id":171965,"depth":370,"text":171966},{"id":172064,"depth":370,"text":172065,"children":173140},[173141,173142,173143,173144],{"id":172068,"depth":1608,"text":172069},{"id":172102,"depth":1608,"text":172103},{"id":172141,"depth":1608,"text":172142},{"id":172220,"depth":1608,"text":172221},{"id":172243,"depth":370,"text":172244,"children":173146},[173147,173148,173149,173150,173151],{"id":172247,"depth":1608,"text":172248},{"id":172330,"depth":1608,"text":172331},{"id":172375,"depth":1608,"text":172376},{"id":172434,"depth":1608,"text":172435},{"id":172472,"depth":1608,"text":172473},{"id":172506,"depth":370,"text":173153},"9.13 if name == \"main\"",{"id":172599,"depth":370,"text":172600},{"id":172644,"depth":370,"text":172645},{"id":172755,"depth":370,"text":172756},{"id":172813,"depth":370,"text":172814},{"id":173070,"depth":370,"text":173071},{"id":173098,"depth":370,"text":173099},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":170973,"description":23802},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":173166,"title":173167,"body":173168,"description":173331,"extension":487,"meta":173332,"navigation":490,"path":173333,"seo":173334,"stem":173335,"__hash__":173336},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":173169,"toc":173326},[173170,173173,173176,173179,173190,173192,173266,173269,173272,173275,173278,173281,173284,173287,173290,173293,173296],[10,173171,173167],{"id":173172},"python教程",[15,173174,173175],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[15,173177,173178],{},"建议学习环境：",[22,173180,173181,173184,173187],{},[25,173182,173183],{},"Python 版本：Python 3.10 及以上。",[25,173185,173186],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[25,173188,173189],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[85,173191,278],{"id":278},[22,173193,173194,173200,173206,173212,173218,173224,173230,173236,173242,173248,173254,173260],{},[25,173195,173196],{},[257,173197,173199],{"href":173198},".\u002Fch1-Python","Python环境与第一个程序",[25,173201,173202],{},[257,173203,173205],{"href":173204},".\u002Fch2","基础语法、变量与字符串",[25,173207,173208],{},[257,173209,173211],{"href":173210},".\u002Fch3","判断语句",[25,173213,173214],{},[257,173215,173217],{"href":173216},".\u002Fch4","循环语句",[25,173219,173220],{},[257,173221,173223],{"href":173222},".\u002Fch5","函数基础",[25,173225,173226],{},[257,173227,173229],{"href":173228},".\u002Fch6","数据容器",[25,173231,173232],{},[257,173233,173235],{"href":173234},".\u002Fch7","函数进阶",[25,173237,173238],{},[257,173239,173241],{"href":173240},".\u002Fch8","文件操作",[25,173243,173244],{},[257,173245,173247],{"href":173246},".\u002Fch9","异常、模块与包",[25,173249,173250],{},[257,173251,173253],{"href":173252},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[25,173255,173256],{},[257,173257,173259],{"href":173258},".\u002Fch11","面向对象基础",[25,173261,173262],{},[257,173263,173265],{"href":173264},".\u002Fch12","综合案例与复习路线",[85,173267,173268],{"id":173268},"学习路线",[15,173270,173271],{},"第一阶段：能运行程序。",[15,173273,173274],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[15,173276,173277],{},"第二阶段：能组织数据。",[15,173279,173280],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[15,173282,173283],{},"第三阶段：能封装逻辑。",[15,173285,173286],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[15,173288,173289],{},"第四阶段：能做小项目。",[15,173291,173292],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[85,173294,173295],{"id":173295},"参考资料",[22,173297,173298,173305,173312,173319],{},[25,173299,173300,173301],{},"黑马程序员 Python 入门教程推荐：",[257,173302,173303],{"href":173303,"rel":173304},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[261],[25,173306,173307,173308],{},"Python 官方中文教程：",[257,173309,173310],{"href":173310,"rel":173311},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[261],[25,173313,173314,173315],{},"Python 标准库文档：",[257,173316,173317],{"href":173317,"rel":173318},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[261],[25,173320,173321,173322],{},"pyecharts 文档：",[257,173323,173324],{"href":173324,"rel":173325},"https:\u002F\u002Fpyecharts.org\u002F",[261],{"title":68,"searchDepth":370,"depth":370,"links":173327},[173328,173329,173330],{"id":278,"depth":370,"text":278},{"id":173268,"depth":370,"text":173268},{"id":173295,"depth":370,"text":173295},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":489},"\u002Fwiki\u002F2024-10-10-python",{"title":173167,"description":173331},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331413193]